我正试图在3x3矩阵和360x360矩阵之间进行矩阵乘法。较小的矩阵(3x3)将用大矩阵的第一个(3x3)块等操作。因此,我想让我的小矩阵保持不变,并将其滑过我的大矩阵。cuda:使用共享和全局的矩阵乘法
是否可以将我的较小矩阵存储为共享内存的一部分,并将我的较大矩阵划分为全局3x3?
我没有找到方法来复制较小的矩阵,直接从主机共享。如果我的cuda可视化是错误的,请纠正我。
谢谢。
我正试图在3x3矩阵和360x360矩阵之间进行矩阵乘法。较小的矩阵(3x3)将用大矩阵的第一个(3x3)块等操作。因此,我想让我的小矩阵保持不变,并将其滑过我的大矩阵。cuda:使用共享和全局的矩阵乘法
是否可以将我的较小矩阵存储为共享内存的一部分,并将我的较大矩阵划分为全局3x3?
我没有找到方法来复制较小的矩阵,直接从主机共享。如果我的cuda可视化是错误的,请纠正我。
谢谢。
无法从主机填充共享内存。
但是,处理所有线程(如您的示例中的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的示例用法,希望这有助于! – ptrendx
你不能从主机复制到共享内存。这不被支持。 – talonmies