我一直在努力与此类实现相当长一段时间,并希望有人可以帮助我。CUDA类与多维指针
class Material_Properties_Class_device
{
public:
int max_variables;
Logical * table_prop;
Table_Class ** prop_table;
};
实施为指针看起来像这样
Material_Properties_Class **d_material_prop = new Material_Properties_Class* [4];
Logical *table_prop;
for (int k = 1; k <= 3; k++)
{
cutilSafeCall(cudaMalloc((void**)&(d_material_prop[k]),sizeof(Material_Properties_Class)));
cutilSafeCall(cudaMemcpy(d_material_prop[k], material_prop[k], sizeof(Material_Properties_Class), cudaMemcpyHostToDevice));
}
for(int i = 1; i <= 3; i++)
{
cutilSafeCall(cudaMalloc((void**)&(table_prop), sizeof(Logical)));
cudaMemcpy(&(d_material_prop[i]->table_prop), &(table_prop), sizeof(Logical*),cudaMemcpyHostToDevice);
cudaMemcpy(table_prop, material_prop[i]->table_prop, sizeof(Logical),cudaMemcpyHostToDevice);
}
cutilSafeCall(cudaMalloc((void ***)&material_prop_device, (4) * sizeof(Material_Properties_Class *)));
cutilSafeCall(cudaMemcpy(material_prop_device, d_material_prop, (4) * sizeof(Material_Properties_Class *), cudaMemcpyHostToDevice));
此实现的作品,但它无法得到它的工作为** prop_table。 我认为它必须遵循相同的原则,但我无法绕开它。
我已经尝试
Table_Class_device **prop_table = new Table_Class_device*[3];
并插入另一环,第二在for循环
for (int k = 1; k <= 3; k++)
{
cutilSafeCall(cudaMalloc((void**)&(prop_table[k]), sizeof(Table_Class)));
cutilSafeCall(cudaMemcpy(prop_table[k], material_prop[i]->prop_table[k], sizeof(Table_Class *), cudaMemcpyHostToDevice));
}
帮助将大大appriciated
谢谢,看起来很完美,会给它一个去吧 – ThatQuantDude
嗨T_T我用一个包含一些数据的对象实现你的例子,但我没有得到它的工作,衰落系数没有包含任何数据;我仍然不明白。为什么你例如再次释放数据并将其从底部3行再次复制回来?在此先感谢 – ThatQuantDude
我免费释放RAM内存(fading_coefficient-> fading_coefficients [i]);在fading_coefficient-> fading_coefficients = fading_coefficients;我将fading_coefficient-> fading_coefficients指针指向视频内存。 –