我有兴趣让 GNU Parallel 在 GPU 上运行一些数值计算任务。一般来说,这是我最初的方法:
这就提出了以下问题:
现代CPU有多个核心,这意味着它们可以同时运行不同的指令;因此,当核心 1 运行 MUL 时,核心 2 可能正在运行 ADD。这也称为 MIMD - 多指令、多数据。
\n然而,GPU 不能同时运行不同的指令。他们擅长对大量数据运行相同的指令;SIMD - 单指令、多数据。
\n现代 GPU 有多个内核,每个内核都是 SIMD。
\n那么 GNU Parallel 在这个组合中适合什么位置呢?
\nGNU Parallel 启动程序。如果您的程序使用 GPU 并且您的系统上只有一个 GPU 核心,那么 GNU Parallel 将没有多大意义。但是,如果您的系统上有 4 个 GPU 核心,那么让这 4 个核心同时运行就很有意义。因此,如果您的程序读取变量 CUDA_\xe2\x80\x8bVISIBLE_\xe2\x80\x8bDEVICES 来决定在哪个 GPU 核心上运行,您可以执行以下操作:
\nseq 10000 | parallel -j4 CUDA_VISIBLE_DEVICES='$(({%} - 1))' compute {}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
1823 次 |
| 最近记录: |