有没有简单的方法来定义和访问CUDA GPU 2D矩阵?
类似于M[i][j]
。
也许已经有一些图书馆?
答案 0 :(得分:1)
通常在CUDA中,您必须将数组转换为线性内存(在2D数组的情况下,应使用cudaMallocPitch
将它们转换为线性内存)
如果你坚持使用M [i] [j]表示法,你可以在设备上分配数组作为"阵列数组"。在这种情况下,您将使用cudaMalloc
分配数组的每一行,然后将指针存储到指针数组中的每一行。然后,您必须在设备上分配这个指针数组!
因此,当你说M [i]时,它会给你i
行的指针,你可以使用该指针的[j]索引。
在过去3周内,那些正在深入研究这些东西的人(也就是我!),认为这是你能做的最糟糕的事情。分配遍布全局内存,并且很可能没有一个满足CUDA对齐要求。因此,访问不会完全合并,访问延迟将破坏内核的性能。坚持使用线性和音调内存以获得最佳性能。索引约定起初可能有点令人困惑和尴尬,但你会习惯它: - )