在CUDA中移动设备上的数据的最快方法是什么?
我需要做的是基本上将连续的子行和子列(我在设备上有索引)从行主矩阵复制到新的更小的矩阵中,但是根据我的观察,内存访问在CUDA中并不是特别有效,因为核心似乎被优化以进行计算而不是内存。
现在,CPU似乎非常擅长执行顺序操作,例如将对齐内存行从一个地方移动到另一个地方 我看到三个选项:
现在我可以在我的特定gpu上测试这个,但鉴于其规格,我认为它不具有代表性。一般来说,推荐什么?
编辑:
我基本上将两个矩阵A,B相乘,但我只对X元素的乘法感兴趣:
A =[[XX XX]
[ XX XX ]
[XX XX ]]
与B列中的相应元素.XX总是具有相同的长度,我知道它们的位置(并且每行有固定的数量)。
答案 0 :(得分:2)
如果你有一个矩阵存储模式,它涉及不同的行元素(或相应的列元素)之间的间距,cublas
的输入转换或跨步功能都没有帮助,也没有api跨越复制函数(例如cudaMemcpy2D
)将有所帮助。
在将数据提供给cublasXgemm
之前,您需要编写自己的内核来收集数据。如果您将传入数据元素的位置列在向量中或以其他方式列出,那么这应该是相当简单的。