【问题标题】:CUDA: Process data that do not fit into GPU memoryCUDA:处理不适合 GPU 内存的数据
【发布时间】:2015-08-07 15:16:41
【问题描述】:

假设我有超过设备内存可用量的巨大矩阵(以某种方式处理,例如相乘)。是否有处理此类问题的标准方法?也许,零拷贝内存的使用隐含地提供了一种在需要时逐块复制的方法?

或者我必须通过分段加载数据来明确处理这个问题?

【问题讨论】:

  • 是的,通常是这两种方法之一。如果您只打算以常规​​方式(例如相邻访问)接触数据一次,那么您可以进行零拷贝工作而不会造成巨大的性能损失。否则,通常的建议是将您的工作分成几部分,并开发一种流水线算法,以便您可以重叠复制和计算操作。特别是矩阵乘法可以很容易地分解成块。

标签: cuda gpu


【解决方案1】:

CUDA 提供了CUDA Streams 的机制。在一个数据流到来之前,前一个数据流被及时处理。

此机制用于处理不适合 GPU 内存的矩阵。

数据按块的数量划分,这些块通过流复制。实际上,如果您逐块复制并一次处理一个块,那么它又是单线程程序。相反,您应该至少复制大小为 16 或 32 的 Stream 数组。

这是使用异步 memcpy 函数覆盖数据复制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 1970-01-01
    • 2015-06-19
    相关资源
    最近更新 更多