這可能是一個愚蠢的問題,無論如何,我正在處理一個令人尷尬的並行問題。我可以將工作分成可以並行執行的獨立任務(無通信)。使用Open MPI和OpenMP進行並行處理
在外殼script.sh
可以使用以下命令:
#!/bin/bash
let MY_ID=${OMPI_COMM_WORLD_RANK}
./a.out $MY_ID
在prog.c
我們有一個簡單獨立的程序:
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int main(int argc, char *argv[]){
int myid = atoi(argv[1]);
if(myid%2==0)
printf("\nI am %d and I am an even process\n", myid);
else
printf("\nI am %d and I am an odd process\n", myid);
return 0;
}
最後,用12級不同的處理器來執行程序:
mpirun -np 12 script.sh
我的問題是,它是possi可以使用OpenMP和可能的環境變量來做同樣的事情,比如OMP_NUM_THREADS
?
「你可以幾乎隨便寫一個shell -script在不使用MPI環境的情況下向程序的每個調用發送一個不同的id - 並且您可以做同樣的事情OpenMP程序的調用「,是我發佈的想法,你有嗎? – Abolfazl
不,我不明白你爲什麼'使用'MPI或OpenMP。對於一個令人尷尬的並行問題,其中每個「任務」完全獨立於任何其他任務,既不需要,也在代碼構建中施加不必要的複雜性。 OpenMP可能會帶來不必要的運行時間開銷。 –
也許我不能解釋清楚,一個bash腳本可以運行一個程序,並通過遞歸循環更改每次運行的參數,但遞歸意味着您可以使用一個核心,而其他核心處於空閒狀態。我使用MPI或OpenMP來實現例如4個遞歸循環,並且在每個循環和每個核心中都有一個獨立的任務正在運行。 – Abolfazl