【问题标题】:Efficient memcpy of large input in CUDA?CUDA中大输入的高效memcpy?
【发布时间】:2012-01-24 13:53:33
【问题描述】:

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

为了使这种方法起作用,我使用了一个中间数组,因为 cudaMemcpyFromArray 和 cudaMemcpyToArray 似乎只适用于纹理内存。这会导致不必要的内存复制操作。有谁知道更有效的方法吗?

【问题讨论】:

    标签: cuda memcpy gpu


    【解决方案1】:

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

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

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

    您还可以考虑使用 Rice 编码压缩数组以使其适合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-24
      • 1970-01-01
      • 1970-01-01
      • 2012-05-14
      • 2015-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多