在MPI程序中转换参数时出错

时间:2016-03-31 04:29:17

标签: c mpi

我现在正在进行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;

}

感谢大家阅读我的帖子,感谢任何回答。

1 个答案:

答案 0 :(得分:0)

在致电argv之前,您不应对argcMPI_Init执行任何操作。实际上你应该尽快打电话给MPI_Init。绝对不会在MPI_Finalize之前致电MPI_Init

引用标准:

  

某些实现使用C的(inout)argc,argv参数   MPI_INIT的版本,以便将argc和argv的值传播到   所有正在执行的流程。

只需在MPI_Init的开头移动main来电。