我可以在哪里指定或查看C中MPI程序中的内核数量。 换句话说,我改进了一个用c(MPI fox算法)编写的程序,该程序运行2个内核,但实际上我想更改它为了运行4个核心... 该程序使用笛卡尔拓扑。MPI内核数量
MPI内核数量
回答
您指定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。
当我运行我的程序有4个处理器(程序mpiexec -n 4 ./test),它工作正常,但是当我尝试用更少或4级以上的处理器运行该程序将显示以下信息: 在PMPI_Comm_rank致命错误:无效的通讯器,错误堆栈, PMPI Comm_rank(109)... PMPI Comm_rank(66):空comunicator – was
这经常发生在未处理代码以处理进程数较大的情况时。在这种情况下,沟通手柄在所有进程中都没有正确初始化。可能是因为硬编码的笛卡尔拓扑结构是2x1的,在这种情况下,在一半的进程中,笛卡尔通信器句柄将作为'MPI_COMM_NULL'返回。 –
- 1. MPI:内核还是处理器?
- 2. MPI多核机器
- 3. 使用MPI在分布式内存上运行CUDA内核
- 4. 单机双核上的MPI
- 5. MPI处理器数量?
- 6. 并行数据流和内核数量
- 7. Blacs:不使用所有MPI内核的处理器网格
- 8. SGE脚本为每个内核使用MPI作业的任务
- 9. 强制MPI使用指定的编号。内核
- 10. 检测窗口上的内核数量
- 11. Mathematica中NVIDIA K20 GPU的内核数量
- 12. 限制erlang使用的内核数量
- 13. 并行c#使用的内核数量
- 14. 限制MySQL使用的内核数量
- 15. 执行程序和内核的数量
- 16. 查找linux内核中CPU的数量
- 17. MPI库和内存
- 18. MPI内存泄漏
- 19. MPI内存分配
- 20. 多核虚拟机开放mpi测试
- 21. Cuda内核返回矢量
- 22. 内核变量位置
- 23. 错误的mpi处理器数量
- 24. java内核中的CPU内核数量和线程数量之间的关系是什么?
- 25. OpenCl中的标量和矢量内核
- 26. Java线程数量>内核数量和垃圾回收数量
- 27. OpenCL内核参数
- 28. OpenCL内核参数
- 29. 在CPU内核数
- 30. CUDA内核函数
您是否将算法硬编码为仅适用于2个内核?如果不是,则用'mpirun'或'mpiexec'运行程序时指定核心数。但是你所问的并不完全清楚。 – tpg2114