2011-12-20 85 views
0

我正在使用CUDA编写的程序出现问题。我有一个输入数组和输出数组,我需要将其复制到设备内存。问题在于两个阵列太大而无法放入设备内存。我现在正在做的是拆分输入和输出数组,并为这两个部分按顺序运行内核。

为了使这种方法起作用,我使用了一个中间数组,因为cudaMemcpyFromArray和cudaMemcpyToArray只能用于纹理内存。这会导致不必要的内存复制操作。有谁知道更有效的方法?CUDA中大量输入的高效memcpy?

回答

0

如果数组的一个段上的操作独立于数组的另一个段上的操作,则可以使用异步存储器复制。这将帮助您在计算时来回复制事物。来自cuda c编程指南:

某些函数调用是异步的:在设备完成所请求的任务之前,将控制返回给主机 线程。它们是:

  • 内核启动;
  • 设备到设备的内存拷贝;
  • 64 KB或更少内存块的主机到设备内存副本;
  • 由带有Async后缀的函数执行的内存副本;
  • 内存集函数调用。

希望它能帮助兄弟。你也可以考虑使用大米编码来压缩数组,以使它们合适。