Gputools for R:如何解释实验过程?

机器算法验证 r 显卡 并行计算
2022-03-22 00:23:55

以下论文描述了 R 在图形处理单元 (GPU) 上的并行实现。

  • Buckner 等人,gputools 包支持在 R 中进行 GPU 计算,BIOINFORMATICS,Vol。26 号 1 2010 年,第 134-135 页

在实验部分,在一台 4 核计算机上,他们比较了在 GPU 上运行的程序与不使用 GPU 时的性能。写下以下内容:

我们在测试中选择使用 R 环境的单线程,因为这是大多数用户与 R 交互的方式。

因此,作者通过使用单核(串行运行)运行他们的实验来找到基线。

但是,GPU 端的实验条件尚不清楚(对我而言)。使用 GPU 时,为了提高效率,我们应该同时使用 CPU。如果作者使用计算机中剩余的 CPU(在优化算法中这样做是明智的),那么加速将基于基线上的额外 CPU 和 GPU(因此被人为夸大了一个稍微少一点的因子)大于 4)。

应该如何解释这个实验?

特别是,我想知道我的上述解释是否正确,如果是,这个实验实际上告诉我们什么。

2个回答

但是,GPU 端的实验条件尚不清楚(对我而言)。使用 GPU 时,为了提高效率,我们应该同时使用 CPU。

这通常不是真的,特别是对于gputools R 包来说不是真的,它提供了一个带有新功能的“GPU 的一切”模式gpuMatMult()gpuQr()等等gpuCor()。换句话说,它为您提供了将计算完全转移到显卡。

但是你的直觉很好。在 GPU 和 CPU 之间应该有一种混合操作的混合模式——而Magma库旨在提供这种模式。更好的是,magma R 包将它带到了 R 中。

此外,我有一个几乎完成的基准测试论文/小插图/小包,它比较了这些以及几个 BLAS,例如 Atlas、Goto 和 MKL。我会在几天后用 URL 更新这个条目。

9 月 16 日编辑:我提到的论文现在已经发布并在 CRAN 上使用了自己的包gcbd我和我也写了一篇关于它的简短博客文章

CPU 和 GPU 中的并行计算之间存在根本区别。从本质上讲,CPU被设计为代表程序员做一些聪明的事情。例如,指令级并行性另一方面,GPU将这些有用的东西排除在外,而是包含更多的内核。这是处理器帮助您和为您提供更多内核之间的权衡。因此,要有效地使用 GPU,您需要提交尽可能多的线程(内存允许的情况下)。这样做的原因是因为 GPU 没有进行任何巧妙的调度。因此,当它为一个线程请求数据时,您希望线程队列中的另一个线程等待接管。

例子

假设您有一个for要并行的循环:

#f(i) does not depend on f(j)
#for any j != i
for(i in 1:100000)
    w[i] = f(i)

您可以向 GPU 提交 N=1000000 个线程(分布在核心数上)。现在你可能认为你可以让 n 个线程在多核 CPU 上完成,但是:

  1. 有很多额外的编程包袱最多只能获得很少的收益。GPU 编程很难(至少我是这么认为的),因此您要避免将其与多核 CPU 结合使用。
  2. 您提交给 GPU 的 f(i) 往往是一个非常简单的函数,例如将矩阵的两个元素相乘。
  3. 如果同时使用 GPU 和 CPU,您将受到时间惩罚,因为它们都必须互相询问是否完成。
  4. 通过减少 GPU 上使用的线程数,您很容易降低效率,即执行 Nn 次操作所需的时间与执行 N 次操作所需的时间相同!

当然,在某些情况下,您可能希望同时使用 GPU 和 CPU,但通常不会将它们用于相同的操作。


不幸的是,我目前无法访问该论文。它在我的(长长的)要阅读的东西清单上。所以上面更多的是关于CPU和GPU的一般性讨论。我会在接下来的一两天内尝试阅读它。