c++ - 在for循环中设置指向 double 组的指针

标签 c++ arrays pointers cuda maya

我有一个要运行的算法,它使用一个可能很长的 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/

相关文章:

c++ - 回溯函数

c++ - 带 odeint 的两点边界

c - 尝试将函数的结果存储在二维数组中

c - 链表 C - 当不存在头时创建头

c - 从函数返回数组地址无效

c++ - 使用相同的临界区对象读写

c++ - boost_unordered 的哈希函数,没有默认值吗?

java - 从字符串数组中删除空值的最佳方法

ruby - Ruby 中的数组排序

c++ - 将类对象指针传递给默认构造函数(C++ 子例程)