GNU Parallel和GPU?

时间:2019-03-04 00:26:50

标签: gpu gnu-parallel

我对让GNU Parallel在GPU上运行一些数值计算任务感兴趣。一般来说,这是我最初的方法:

  1. 编写任务以使用OpenCL或其他一些GPU接口库
  2. 在任务列表上并行调用GNU(我不确定是否需要执行此步骤

这带来了以下问题:

  1. 我的方法/用例是否受益于GNU Parallel的使用(即我甚至应该在这里使用它)?
  2. GNU Parallel是否提供了一种内置机制来在以下环境中运行任务 在GPU上并行?
  3. 如果是这样,我该如何配置GNU Parallel来做 这个吗?

1 个答案:

答案 0 :(得分:1)

现代CPU具有多个内核,这意味着它们可以同时运行不同的指令。因此,当核心1正在运行时,MUL核心2可能正在运行ADD。这也称为MIMD-多指令,多数据。

但是,GPU无法同时运行不同的指令。它们擅长在大量数据上运行同一条指令。 SIMD-单指令,多数据。

现代GPU具有多个分别为SIMD的内核。

那么GNU Parallel在哪里适合这种混合方式?

GNU Parallel启动程序。如果您的程序使用一个GPU,并且您的系统上只有一个GPU内核,那么GNU Parallel就没有多大意义了。但是,例如,如果您的系统上有4个GPU内核,则可以使这4个内核同时运行是有意义的。因此,如果您的程序读取变量CUDA_VISIBLE_DEVICES来决定要在哪个GPU内核上运行,则可以执行以下操作:

seq 10000 | parallel -j4 CUDA_​VISIBLE_​DEVICES='$(({%} - 1))' compute {}