Matlab 如何在 CPU 并行循环中实现 GPU 计算?

How does Matlab implement GPU computation in CPU parallel loops?

我们能否通过使用 gpuArray 的 GPU 函数计算 CPU 的 parforspmd 块的某些部分来提高性能?这是提高性能的合理方法还是此过程存在局限性?我在某处读到,当我们有一些 GPU 单元时,我们可以使用这个过程。这是除了 CPU 并行循环之外我们可以使用 GPU 计算的唯一方法吗?

parfor 循环或 spmd 块中使用 gpuArray 可能会给您带来性能优势,但实际上这取决于几个因素:

  1. 您的系统上有多少个 GPU
  2. 你有什么类型的 GPU(有些比其他的更好地处理 "oversubscribed" - 即有多个进程使用同一个 GPU)
  3. 你有多少工人运行
  4. 您的算法需要多少 GPU 显存
  5. 问题首先与 GPU 的匹配程度如何。

因此,如果您的机器中有两个高性能 GPU,并且 运行 两个工作人员在一个并行池中处理一个可以使单个 GPU 完全占用的问题 - 您会期望看到良好的加速.如果您 运行 4 个工人,您可能仍会获得不错的加速。

我要推荐的一件事是:如果可能,尽量避免 t运行 将 gpuArray 数据从客户端传输到工作人员,因为这比通常的数据 t运行 慢sfers(gpuArray 首先 gathered 到 CPU,然后在 worker 上重组)。