我有一个要运行的算法,它使用一个可能很长的 double 组。因为数组的长度可能有数百万,所以我将它放在 GPU 上,所以我需要将数组从 CPP 文件导出到 CU 文件。但是,我现在只在 CPP 中对其进行原型(prototype)设计,因为它在任何一种情况下都不起作用。
在我的 CPU 原型(prototype)中,当我尝试使用 for 循环设置 double 组的成员时出现错误。比如包括cout在内的任何操作都会报错c2109:subscript requires array or pointer type in the CPP file
或者如果从 CU 文件运行相同的代码,错误:表达式必须具有指向对象的指针类型
const int size = 100000;
double inputMeshPts_PROXY[size][4];
inputMeshPts.get(inputMeshPts_PROXY);
int lengthPts = inputMeshPts.length();
if (useCUDA == 1)
{
double *inputMeshPts_CUDA = &inputMeshPts_PROXY[size][4];
myArray(lengthPts, inputMeshPts_CUDA);
}
MStatus abjBlendShape::myArray(int length_CUDA, float weight_CUDA, double *inputMeshPts_CUDA)
{
for (int i = 0; i < length_CUDA; i++)
{
for (int j = 0; j < 3; j++)
{
cout << inputMeshPts_CUDA[i][j] << endl;
// inputMeshPts_CUDA[i][j] += (sculptedMeshPts_PROXY[i][j] - inputMeshPts_CUDA[i][j]); // WHAT I WANT, EVENTUALLY
}
}
}
最佳答案
写作时:
double *inputMeshPts_CUDA = &inputMeshPts_PROXY[size][4];
变量 inputMeshPts_CUDA 是一个纯指针。您不能像以前那样使用二维索引 [][]。访问它的正确方法现在是线性化索引:
inputMeshPts_CUDA[i*4+j]
或者你可以“正确地”声明你的指针:
double (*inputMeshPts_CUDA)[4] = inputMeshPts_PROXY;
这允许您再次使用二维索引。
关于c++ - 在for循环中设置指向 double 组的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21467748/