TypechoJoeTheme

MetMan's Blog

网站页面
搜索到 4 篇与 的结果 ———
2024-05-27

MPI程序调试小技巧

MPI程序调试小技巧
MPI并行程序调试除了使用专业的并行调试器(Totalview、DDT)外,可能还是print大法用的多。对于MPI程序调试,我们通常需要知道输出的信息来自哪个进程,一般会在输出语句中加上进程号信息。write(0,*) "Task from ",pid,":debug info ..."但这需要引入表示进程号的变量(通常这会引入其它模块变量),如果输出的诊断信息太多每个都加变量也很麻烦。如果希望自动输出进程号信息,可以尝试每个MPI实现附带的功能。Intel MPI/MVAPICH2/MPICHIntel MPI/MVAPICH2/MPICH三种MPI实现的mpirun都提供一个选项-prepend-rank能够实现在输出信息前自动添加进程号,在标准输出/错误每一行前面添加MPI rank进程号。输出示例:[6] Hello from rank 6, on cmac0483. (core affinity = 38) [13] Hello from rank 13, on cmac0483. (core affinity = 45) [3...
2024年05月27日
196 阅读
0 评论
2023-11-18

Intel MPI运行时错误信息诊断

Intel MPI运行时错误信息诊断
笔者开发模式主要使用“Intel Fortran Compiler + Intel MPI”组合,在开发过程中经常遇到程序运行出错情况,如果了解Intel MPI输出的运行时错误信息,这对快速定位出错原因很有帮助。下面总结几种主要遇到的错误信息,内容主要来自于Intel官网Intel MPI Troubleshooting。Bad File Descriptor错误信息运行报错信息类似于(关键词Bad file descriptor)[mpiexec@node00] HYD_sock_write (../../../../../src/pm/i_hydra/libhydra/sock/hydra_sock_intel.c:353): write error (Bad file descriptor) [mpiexec@node00] cmd_bcast_root (../../../../../src/pm/i_hydra/mpiexec/mpiexec.c:147): error sending cwd cmd to proxy [mpiexec@node00] stdin_c...
2023年11月18日
189 阅读
0 评论
2023-11-13

MPI是一个库

MPI是一个库
MPI是消息通信标准,其实现是一个第三方库(library),但我们用比如Intel MPI的mpiifort命令编译链接源代码,这给人一种错觉就是MPI是一门编程语言,mpiifort是一个编译器。下面我们通过对mpiifort深入分析来说明MPI实际上是一个第三库的事实。mpiifort是shell脚本Intel MPI的编译链接命令mpiifort实际上是一个封装的shell脚本,用于封装查找mpi头文件/模块文件和链接相应库文件细节。$ file `which mpiifort` /opt/compiler/intel/2018_update1/compilers_and_libraries_2018.1.163/linux/mpi/intel64/bin/mpiifort: POSIX shell script, ASCII text executable打开这个shell脚本阅读脚本代码,脚本前面主要是环境变量、命令行参数处理部分,其最后核心部分是编译、链接处理,具体如下:if [ "$linking" = yes ] ; then cmd...
2023年11月13日
135 阅读
0 评论
2023-11-11

MPI版本混用问题诊断

MPI版本混用问题诊断
MPI作为消息通信工业标准,在高性能计算中被广泛使用。MPI标准定义了库函数语法、语义,开发商根据标准开发实现具体的MPI软件版本,比如常见的MPICH、OpenMPI、Intel MPI、MVAPICH等。为了满足不同的需求,HPC计算平台一般会安装多个MPI实现版本,如果用户开发环境设置混乱,可能会导致MPI版本混用情况,从而引发意想不到的错误,包括编译时和运行时错误。比如笔者遇到如下情况:依赖库使用一种MPI实现编译,模式使用另一种MPI实现编译链接,在运行时出现很奇怪的错误,这种错误有时候不容易联想到是MPI混用导致的。下面总结MPI混用引起的编译时和运行时错误。代码示例示例项目有两个源代码文件:sum.f90和main.f90,其中主程序main(main.f90)依赖模块mod_sum(sum.f90)。!sum.f90 module mod_sum use mpi implicit none contains subroutine sum_global() implicit none integer :: id,total,ierr ...
2023年11月11日
161 阅读
0 评论

互动读者

标签云

最新回复

暂无回复

登录
X
用户名
密码