我正在尝试在3x3矩阵和360x360矩阵之间进行矩阵乘法。较小的矩阵(3x3)将被大矩阵的第一个(3x3)块操纵,依此类推。因此,我想让我的较小矩阵保持不变,并将其滑过我更大的矩阵。
是否可以将较小的矩阵存储为共享内存的一部分,并将更大的矩阵划分为全局的3x3?
我找不到将较小的矩阵复制到主机直接共享的方法。如果我对cuda的可视化错误,请纠正我。
感谢。
答案 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