2012-11-24 66 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'返回。 –