为什么MPI不会优雅地完成?

每当我试图完成我的mpi程序,我得到类似于以下错误

[mpiexec] HYDT_dmxu_poll_wait_for_event (./tools/demux/demux_poll.c:70): assert (!(pollfds[i].revents & ~POLLIN & ~POLLOUT & ~POLLHUP)) Failed [mpiexec] main (./pm/pmiserv/pmip.c:221): demux engine error waiting for event [mpiexec] HYDT_bscu_wait_for_completion (./tools/bootstrap/utils/bscu_wait.c:99): one of the processes terminated badly; aborting [mpiexec] HYDT_bsci_wait_for_completion (./tools/bootstrap/src/bsci_wait.c:18): bootstrap device returned error waiting for completion [mpiexec] HYD_pmci_wait_for_completion (./pm/pmiserv/pmiserv_pmci.c:352): bootstrap server returned error waiting for completion [mpiexec] main (./ui/mpich/mpiexec.c:294): process manager error waiting for completion

有时,它会得到一个glibc“double free or corruption”错误。 每个进程都是单线程的,每个进程肯定调用MPI_Finalize()。 任何想法在这里可能会出错?

如何使一个线程在Linux等待另一个

交叉编译helloworld.c到ARM(Cortex-A5)

什么时候在Linux内核中使用内核线程vs工作队列

64位Linux上的Java线程堆栈大小

^ 不匹配sed中的点

我写了一个小测试程序,应该退出没有任何错误。 请尝试运行它。 如果它正常退出,那么问题出在你的代码上。

#include <mpi.h> #include <cstdio> int main(int argc,char *argv[]) { MPI_Init(&argc,&argv); int my_rank; MPI_Comm_rank(MPI_COMM_WORLD,&my_rank); int finalize_retcode = MPI_Finalize(); if(0 == my_rank) fprintf(stderr,"Process,return_coden"); fprintf(stderr,"%i,%in",my_rank,finalize_retcode); return 0; }

我遇到了类似的问题。

MPI_Request* req = (MPI_Request*) malloc(sizeof(MPI_Request)*2*numThings*numItems); int count; for( item in items ) { count = 0; for( thing in things ) { MPI_Irecv(<sendBufF>,1,MPI_INT,<src>,<tag>,MPI_COMM_WORLD,&req[count++]); MPI_Isend(<recvBufF>,<dest>,&req[count++]); } } MPI_Status* stat = (MPI_Status*) malloc(sizeof(MPI_Status)*2*numThings*numItems); MPI_Waitall(count,req,stat);

MPI_Waitall(...)调用的count小于Isend和recv的执行次数; 这导致消息不被接收。 在for循环之外移动count=0解决了MPI_Finalize(...)错误

相关文章

可以认为OpenFeign是Feign的增强版,不同的是OpenFeign支持S...
为进一步规范小程序交易生态、提升用户购物体验、满足用户在...
云原生之使用Docker部署Dashdot服务器仪表盘
本文主要描述TensorFlow之回归模型的基本原理
1.漏洞描述Apache Druid 是一个集时间序列数据库、数据仓库和...
内部类(当作类中的一个普通成员变量,只不过此成员变量是cl...