【问题标题】:GNU Parallel and the GPU?GNU Parallel 和 GPU?
【发布时间】:2020-11-21 18:30:26
【问题描述】:

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

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

这带来了以下问题:

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

【问题讨论】:

    标签: gpu gnu-parallel


    【解决方案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 {}
    

    【讨论】:

    • 有了这个,我得到:“/bin/bash: CUDA_​VISIBLE_​DEVICES=0: command not found” 等每个输入。
    • @CarlLemaire 您的字符串 (\x200b) 中有一个不可打印的字符。我的猜测是*的编辑器已经插入了。
    • 谢谢,就是这样!