GNU Parallel 和 GPU?

GNU Parallel and the GPU?

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

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

这提出了以下问题:

  1. 我的 approach/use-case 是否受益于 GNU Parallel 的使用(即我是否应该在这里使用它)?
  2. GNU Parallel 是否为 运行ning 任务提供内置机制 在 GPU 上并行?
  3. 如果是这样,我该如何配置 GNU Parallel 来做 这个?

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

GPU 不能同时运行 不同的指令。他们 excel in 运行ning 对大量数据执行相同的指令; SIMD - 单指令,多数据。

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

那么 GNU Parallel 适合这个组合的什么地方?

GNU Parallel 启动程序。如果您的程序使用 GPU 并且您的系统上只有一个 GPU 内核,那么 GNU Parallel 将没有多大意义。但是,如果您的系统上有 4 个 GPU 内核,那么同时保持这 4 个内核 运行ning 是有意义的。因此,如果您的程序读取变量 CUDA_ VISIBLE_ DEVICES 来决定 运行 在哪个 GPU 内核上,您可以这样做:

seq 10000 | parallel -j4 CUDA_VISIBLE_DEVICES='$(({%} - 1))' compute {}