我现在正在进行MPI练习。在我的工作中,我想计算N的阶乘,所以我通过命令行中的第二个参数传递N,除了我尝试从char *转换为int的行之外,我的所有代码都很好(这适用于一个进程),请在这种情况下给我一些建议,这是我的代码:
int main(int argc, char* argv[]){
if(argc != 2){
fprintf(stderr, "\nYou must follow this format to run the program: [Program's name] [N]");
exit(0);
MPI_Finalize();
}
long int n = 1;
n = strtol(argv[1], NULL, 10); // <-- problem happens here
// Initialize MPI
MPI_Init(&argc, &argv);
// Receive the whole size and id of each rank
MPI_Comm_size(MPI_COMM_WORLD, &size);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if(rank == 0){
// Process for master
master(n);
}
else{
// Process for slaves
slave();
}
// Finish MPI
MPI_Finalize();
return 1;
}
感谢大家阅读我的帖子,感谢任何回答。
答案 0 :(得分:0)
在致电argv
之前,您不应对argc
和MPI_Init
执行任何操作。实际上你应该尽快打电话给MPI_Init
。绝对不会在MPI_Finalize
之前致电MPI_Init
。
引用标准:
某些实现使用C的(inout)argc,argv参数 MPI_INIT的版本,以便将argc和argv的值传播到 所有正在执行的流程。
只需在MPI_Init
的开头移动main
来电。