我有兴趣让GNU Parallel在GPU上运行一些数值计算任务。一般来说,这是我最初的方法:
这提出了以下问题:
现代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 {}