cuda:使用共享和全局的矩阵乘法

时间:2016-11-22 17:26:41

标签: c++ matrix cuda nvidia gpgpu

我正在尝试在3x3矩阵和360x360矩阵之间进行矩阵乘法。较小的矩阵(3x3)将被大矩阵的第一个(3x3)块操纵,依此类推。因此,我想让我的较小矩阵保持不变,并将其滑过我更大的矩阵。

是否可以将较小的矩阵存储为共享内存的一部分,并将更大的矩阵划分为全局的3x3?

我找不到将较小的矩阵复制到主机直接共享的方法。如果我对cuda的可视化错误,请纠正我。

感谢。

1 个答案:

答案 0 :(得分:1)

无法从主机填充共享内存。

但是,处理所有线程常量的最佳方法(例如示例中的3x3矩阵)是将它们放在常量内存中(大小为64 kB)。有两种使用常量内存的方法:

  • 最简单的方法是使用内核参数。定义包含内核参数的struct,包括3x3矩阵,并将其传递给内核
  • 使用__constant__类型限定符并使用cudaMemcpyToSymbol从主机填充它:

    //In global scope
    __constant__ float mat_gpu[3][3];
    //In the function that you use to populate the data
    cudaMemcpyToSymbol(mat_gpu, mat_cpu, 9 * sizeof(float));
    //In your kernel you just use the mat_gpu variable