我应该从一个处理器向另一个处理器发送一些整数,这是在我大学的shell服务器上完成的......
首先我创建了我的解决方案代码,它看起来像(至少我认为是这样......)
#include <stdio.h>
#include <mpi.h>
int main(int argc, char **argv)
{
int currentRank = -1;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, ¤tRank);
if(currentRank == 0) {
int numberToSend = 1;
MPI_Send(&numberToSend , 1, MPI_INT, 1, 0, MPI_COMM_WORLD);
}
else if(currentRank == 1) {
int recivedNumber;
MPI_Recv(&recivedNumber, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("Recived number = %d\n", recivedNumber);
}
MPI_Finalize();
return 0;
}
我应该创建一些name.pbs文件...然后运行它。而且我无法理解如何指定这个处理器的数量...我试着跟随:
#PBS -l nodes=2:ppn=2
#PBS -N cnt
#PBS -j oe
mpiexec ~/mpi1
但后来仍然不知道如何处理腻子。 qstat
comamnd似乎无所作为......只有当qstat -Q
或q
它向我显示一些'统计'但是到处都有0个值时...这是我在mpi和我的第一个程序真的根本不理解......
当我尝试运行我的程序时,我得到了:
164900@halite:~$ ./transfer1
Fatal error in MPI_Send: Invalid rank, error stack:
MPI_Send(174): MPI_Send(buf=0x7fffd28ec640, count=1, MPI_INT, dest=1, tag=0, MPI_COMM_WORLD) failed
MPI_Send(99).: Invalid rank has value 1 but must be nonnegative and less than 1
任何人都可以解释一下如何在服务器上运行它吗?
答案 0 :(得分:2)
示例代码在这里工作正常,使用OpenMPI和GCC进行测试,
问题是当你运行代码时需要通过你的mpirun实例来指定核心数量,你可能已经使用扭矩或你正在使用的调度程序正确地分配它们但是你正在运行已编译的代码,就好像它是你需要用mpi heres和相关输出的例子来运行它
mpirun -np 2 ./example
Recived number = 1
使用不同的调度程序hydra,PBS或不同的MPI版本,您需要遵循与上述相同的模式,并特定于您的mpi运行命令核心数