我是一名 Java 专家,刚开始接触 CUDA,语法让我很困惑。我正在尝试在 .cpp 文件中创建一个矩阵,然后将其传递给 .cu 文件进行处理。我看到 CUDA 函数期望二维数组看起来像这样的示例
void handleMatrix(float* A){
// do stuff
}
当我创建矩阵时,我习惯于使用如下代码进行创建:
int main()
{
const int row=8;
const int column=8;
int rnum;
srand(time(0));
rnum = (rand() % 100) + 1;
float table[row][column];
for(int r=0; r<row; r++){
for(int c=0; c<column;c++){
table[row][column] = (rand()%100) + 1.f;
}
cout << "\n";
}
handleMatrix(table);
return 0;
}
当我编译代码时出现错误 无法将参数“1”的“float ()[8]”转换为“float*”至“void handleMatrix(float*)”*
我应该用不同的方式来声明或创建矩阵吗?
在此先感谢您的帮助。
最佳答案
你可以做到
handleMatrix(table[0]);
或者,等价地,
handleMatrix(&table[0][0]);
如果'handleMatrix' 是主机代码。如果它是设备代码,则不能那样分配缓冲区。您需要在本地内存中组装一个数组,填充条目,使用 cudaMalloc() 或 cudaMallocPitch() 在设备内存中分配另一个数组,然后使用 cudaMemcpy() 或 cudaMemcpy2D() 从本地复制到设备。
关于c++ - 将二维数组从 C++ 类传递给 CUDA 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4170243/