我对让GNU Parallel在GPU上运行一些数值计算任务感兴趣。一般来说,这是我最初的方法:
这带来了以下问题:
答案 0 :(得分: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 {}