我正在尝试使用以下代码在C ++中编译代码:https://stackoverflow.com/questions/5953979/sending-and-receiving-array-using-mpi-part-2。
我使用以下命令编译:{{1}}
编译之后,我的所有错误似乎都是指我在源代码中定义的两个函数来打印输出值并执行MPI Isend和MPI Irecv。具体来说,我得到两种类型的错误
mpiicpc -o <filename> xxxx.cc -lmpi
和MPI_Isend/MPI_Irecv
最后,它存在于此消息:xxxx.cc(代码2)的编译中止。 你能否指出在定义变量时我一定做错了什么?
以下是我的源代码的摘录(代码完整可在https://stackoverflow.com/questions/5953979/sending-and-receiving-array-using-mpi-part-2获得):
MPI Waitall();
答案 0 :(得分:2)
你没有声明很多变量 - 特别是循环计数器。将它们全部声明为功能的顶部,你会没事的。
根据the documentation,MPI_Isend()
的签名是:
int MPI_Isend( void *buf, int count, MPI_Datatype datatype, int dest,
int tag, MPI_Comm comm, MPI_Request *request )
它有七个参数 - 你只传递五个参数。你需要纠正这个问题。 MPI_Irecv()
也是如此。
答案 1 :(得分:1)
MPI_Isend()
需要的参数比你提供的要多得多。这是你的路线:
MPI_Isend(C, Rows, MPI_DOUBLE, my_rank+1, MPI_COMM_WORLD);
标签在哪里?请求在哪里?
同样,您的MPI_Waitall()
根本没有任何参数!您需要请求数组,请求数和一系列状态。
我建议您阅读MPI中非阻塞通信的示例。