我使用CUDA编写的程序有问题。我有一个输入数组和一个输出数组,我需要将其复制到设备内存。问题是两个阵列在一起太大而无法放入设备内存中。我现在正在做的是拆分输入和输出数组并按顺序为两个部分运行内核。
为了使这种方法起作用,我使用了一个中间数组,因为cudaMemcpyFromArray和cudaMemcpyToArray似乎只适用于纹理内存。这导致不必要的内存复制操作。有谁知道更有效的方式?
答案 0 :(得分:1)
答案 1 :(得分:0)
如果阵列的一个段上的操作独立于阵列的另一个段上的操作,则可以使用异步内存复制。这将帮助您在进行计算时来回复制。来自cuda c编程指南:
某些函数调用是异步的:控制权返回给主机 设备完成请求任务之前的线程。这些是:
- 内核启动;
- 设备到设备内存副本;
- 主机到64 KB或更小内存块的设备内存副本;
- 由Async;
后缀的函数执行的内存复制- 内存设置功能调用。
希望它有助于兄弟。您还可以考虑使用大米编码来压缩阵列以使其适合。