GNU 并行和 GPU?

ggg*_*123 2 gpu gnu-parallel

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

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

这就提出了以下问题:

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

Ole*_*nge 5

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

\n

然而,GPU 不能同时运行不同的指令。他们擅长对大量数据运行相同的指令;SIMD - 单指令、多数据。

\n

现代 GPU 有多个内核,每个内核都是 SIMD。

\n

那么 GNU Parallel 在这个组合中适合什么位置呢?

\n

GNU Parallel 启动程序。如果您的程序使用 GPU 并且您的系统上只有一个 GPU 核心,那么 GNU Parallel 将没有多大意义。但是,如果您的系统上有 4 个 GPU 核心,那么让这 4 个核心同时运行就很有意义。因此,如果您的程序读取变量 CUDA_\xe2\x80\x8bVISIBLE_\xe2\x80\x8bDEVICES 来决定在哪个 GPU 核心上运行,您可以执行以下操作:

\n
seq 10000 | parallel -j4 CUDA_VISIBLE_DEVICES='$(({%} - 1))' compute {}\n
Run Code Online (Sandbox Code Playgroud)\n