首页 文章

在CUDA中移动设备上的内存

提问于
浏览
0

在CUDA中移动设备上的数据的最快方法是什么?

我需要做的是基本上将连续的子行和子列(我在设备上有索引)从行主矩阵复制到新的小矩阵中,但从我观察到的情况来看,CUDA中的内存访问是不是特别有效,因为看起来核心被优化来进行计算而不是内存 .

现在,CPU似乎非常擅长执行顺序操作,例如将对齐内存行从一个地方移动到另一个地方 .
我看到三个选择:

  • 创建一个执行内存复制的内核

  • 在内核之外,为每个位置调用cudaMemcpy(..,设备到设备)(对于我猜的列来说非常慢)

  • 将内存移动到主机,创建新的较小矩阵并将其发送回设备

现在我可以在我的特定gpu上测试这个,但考虑到它的规格,我认为它不具有代表性 . 一般来说,推荐什么?

编辑:

我基本上将两个矩阵A,B相乘,但我只对X元素的乘法感兴趣:

A =[[XX      XX]
    [  XX  XX  ]
    [XX  XX    ]]

使用B列中的相应元素.XX总是具有相同的长度,我知道它们的位置(并且每行有固定的数量) .

1 回答

  • 2

    如果你有一个矩阵存储模式,涉及不同的行元素(或相应的列元素)之间的间距, cublas 的输入转换或跨步功能都没有帮助,并且api跨越复制功能(例如 cudaMemcpy2D )都不会救命 .

    在将数据提供给 cublasXgemm 之前,您需要编写自己的内核来收集数据 . 如果传感数据元素的位置在向量中列出或以其他方式列出,那么这应该是相当简单的 .

相关问题