将指针设置为双阵列以进行循环
Setting pointer to a double array in for loop
我有一个我想运行的算法,该算法使用潜在的长阵列。因为数组的长度可以数百万,所以我将其放在GPU上,因此我需要将数组从CPP文件导出到CU文件。但是,IM仅在CPP中进行原型分型,因为它在任何一种情况下都不起作用。
在我的CPU原型中,当我尝试使用for循环设置双阵列的成员时,我会发现错误。例如,包括COUT在内的任何操作都会给出错误C2109:下标在CPP文件中需要数组或指针类型
或如果从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;
允许您再次使用二维索引。
MStatus abjBlendShape::myArray(int length_CUDA, float weight_CUDA, double *inputMeshPts_CUDA)
{
inputMeshPts_CUDA
只是一个指针,编译器丢失了所有维度信息。它需要inputMeshPts_CUDA[i][j]
的尺寸信息,该信息将转换为访问地址的访问(字节算术,而不是C 指针算术)
inputMeshPts_CUDA + i * sizeof (double) * num_colums + j * sizeof (double)
您可以自己提供丢失的信息,并像Angew建议一样执行算术,或者使编译器通过:
通过:template<size_t M, size_t N>
MStatus abjBlendShape::myArray(int length_CUDA, float weight_CUDA, double (&inputMeshPts_CUDA)[M][N])
当然,这仅在汇编时间已知大小时才起作用。
inputMeshPts_CUDA
是double
的指针 - 也就是说,它可以代表1D数组。您正在以2D阵列:inputMeshPts_CUDA[i][j]
访问它。这是没有意义的 - 您有效地将[j]
应用于inputMeshPts_CUDA[i]
的double
对象。
我相信您正在寻找inputMeshPts_CUDA[i * 4 + j]
-您必须计算2D解决自己。
相关文章:
- 实现循环阵列队列
- 为什么基于循环范围不直接在C 中使用参数阵列
- 数组 - 循环遍历辅助阵列
- 如果在C 中已经回荡了另一个相同值的阵列元素,请防止循环回荡
- 为了通过阵列C 的表递增循环
- 我如何使我的循环转到char*阵列的尽头,并将每个城市都放在链接的列表中(城市被划分为白色的空间)
- 将多个功能存储到阵列C 以进行循环
- 存储文件中的字符串,但是数组仍然为空?阵列大小的循环
- 我该如何仅使用循环而无需阵列或向量
- 将整数从for循环存储在全球阵列中
- 每次循环时,输出一个具有较小字符的字符阵列
- C :自动变量扣除额的范围与循环的范围与多维阵列的循环的正常范围
- 标记元素C 阵列带嵌套循环
- 循环时,如何在C 中创建一个自动插入阵列
- 在循环的停止条件下访问阵列值是安全的吗?
- 将指针设置为双阵列以进行循环
- 我是否必须求助于循环,以比较C 中的两个2D阵列
- 将一个阵列设置为一个不循环的阵列
- 循环穿过阵列
- 将C++阵列存储在循环之外