c++ - 将二维数组从 C++ 类传递给 CUDA 函数

标签 c++ cuda

我是一名 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/

相关文章:

c++ - 如何在 Raspberry Pi 上使用 OpenCV 和 C++ 加载视频文件?

c++ - 使用 Clang 构建 C++ 静态库时的奇怪行为

CUDA 到 OpenCL : What is the equivalent of (blockIdx. x + blockIdx.y*gridDim.x) * openCL 中的 blockDim.x + threadIdx.x?

android - 基于 Qt、Qml 和 C++ 的应用程序移植到 Android

c++ - 访问结构变量

c++ - OpenCV - Brox 光流 - opencv_core244d!cv::GlBuffer::unbind 异常

cuda - 如何使tensorflow在具有2.x功能的GPU上运行?

c++ - 根据模板 C++ 的类型具有可变类型的类成员

c++ - undefined reference ,尽管链接顺序正确

debugging - Linux服务器上运行的CUDA程序的远程调试和分析