我试图理解以下示例的含义:
#include "mpi.h" #include int main(int argc, char *argv[]) { int numtasks, rank, dest, source, rc, count, tag = 1; char inmsg, outmsg = 'x'; MPI_Status Stat; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numtasks); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (rank == 0) { dest = 1; source = 1; rc = MPI_Send(&outmsg, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD); rc = MPI_Recv(&inmsg, 1, MPI_CHAR, source, tag, MPI_COMM_WORLD, &Stat); } else if (rank == 1) { dest = 0; source = 0; rc = MPI_Recv(&inmsg, 1, MPI_CHAR, source, tag, MPI_COMM_WORLD, &Stat); rc = MPI_Send(&outmsg, 1, MPI_CHAR, dest, tag, MPI_COMM_WORLD); } rc = MPI_Get_count(&Stat, MPI_CHAR, &count); printf("Task %d: Received %d char(s) from task %d with tag %d n", rank, count, Stat.MPI_SOURCE, Stat.MPI_TAG); MPI_Finalize(); }
基本上从这里复制: https : //computing.llnl.gov/tutorials/mpi/
编译如下:
$ mpicc -o ./mpi_test ./mpi_test.c
像这样运行:
$ ./mpi_test
给出了这个错误:
Fatal error in MPI_Send: Invalid rank, error stack: MPI_Send(171): MPI_Send(buf=0x7fff787b4d93, count=1, MPI_CHAR, dest=1, tag=1, MPI_COMM_WORLD) failed MPI_Send(97).: Invalid rank has value 1 but must be nonnegative and less than 1
说实话,我不明白为什么这个例子应该首先起作用。 你能请教我吗? 示例是错误的,还是预期的错误? 也许我的设置错了?
PS。 在Fedora 18 amd64上使用gcc 4.7编译
您必须使用mpirun
运行程序,如下所示:
mpirun -np 2 mpi_test
以上就是c/c++开发分享MPI基本示例不起作用相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/522536.html