2012-11-24 96 views
0

我可以在哪裏指定或查看C中MPI程序中的內核數量。 換句話說,我改進了一個用c(MPI fox算法)編寫的程序,該程序運行2個內核,但實際上我想更改它爲了運行4個核心... 該程序使用笛卡爾拓撲。MPI內核數量

+1

您是否將算法硬編碼爲僅適用於2個內核?如果不是,則用'mpirun'或'mpiexec'運行程序時指定核心數。但是你所問的並不完全清楚。 – tpg2114

回答

5

您指定proceses到SPMD/MPMD發射mpiexec(或mpirun)的期望數量,通常作爲

mpiexec -n <# of processes> <other options> ./executable <arguments> 

然後你可以找到通過查詢的規模推出MPI進程的數量世界通信:

int nprocs; 
MPI_Comm_size(MPI_COMM_WOLRD, &nprocs); 
printf("There are %d processes running in this MPI program\n", nprocs); 

如果程序也是一種混合MPI + OpenMP的代碼,然後,在每個進程線程可能通過設置OMP_NUM_THREADS環境變量來控制的數量,除非numbe通過調用omp_set_num_threads()或應用於parallel區域的顯式num_threads子句在代碼中覆蓋r。

+0

當我運行我的程序有4個處理器(程序mpiexec -n 4 ./test),它工作正常,但是當我嘗試用更少或4級以上的處理器運行該程序將顯示以下信息: 在PMPI_Comm_rank致命錯誤:無效的通訊器,錯誤堆棧, PMPI Comm_rank(109)... PMPI Comm_rank(66):空comunicator – was

+1

這經常發生在未處理代碼以處理進程數較大的情況時。在這種情況下,溝通手柄在所有進程中都沒有正確初始化。可能是因爲硬編碼的笛卡爾拓撲結構是2x1的,在這種情況下,在一半的進程中,笛卡爾通信器句柄將作爲'MPI_COMM_NULL'返回。 –