【问题标题】:cuda: matrix multiplication using shared and globalcuda:使用共享和全局的矩阵乘法
【发布时间】:2017-04-06 11:50:37
【问题描述】:

我正在尝试在 3x3 矩阵和 360x360 矩阵之间进行矩阵乘法。较小的矩阵 (3x3) 将使用大矩阵的第一个 (3x3) 块进行操作,依此类推。因此,我希望拥有较小的矩阵常量并将其滑过较大的矩阵。

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

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

谢谢。

【问题讨论】:

  • 您无法从主机复制到共享内存。不支持。

标签: c++ matrix cuda nvidia gpgpu


【解决方案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
    

【讨论】:

  • 非常感谢您的精彩回答。您能否提供任何有关使用此 constant 类型限定符和 cudaMemcpyToSymbol 的示例。这将有很大的帮助。提前致谢。
  • 我添加了 cudaMemcpyToSymbol 的示例用法,希望对您有所帮助!
猜你喜欢
  • 2020-12-22
  • 2017-03-29
  • 2018-05-18
  • 1970-01-01
  • 2012-05-06
  • 2011-08-23
  • 2011-09-07
  • 2012-12-09
  • 1970-01-01
相关资源
最近更新 更多