使用MPI_File_open时出现分段错误

时间:2012-12-06 02:44:48

标签: mpi mpi-io

我正在尝试从文件中读取MPI应用程序。群集有4个节点,每个节点有12个核心。我已经尝试运行一个基本程序来计算排名,这是有效的。当我添加MPI_File_open时,它会在运行时抛出异常

  

未终止您的申请流程之一=退出代码:139

群集已安装MPICH2并具有网络文件系统。我用不同的参数检查MPI_File_open,如ReadOnly模式,MPI_COMM_WORLD等。

我可以在网络文件系统中使用MPI_File_open吗?

int main(int argc, char* argv[])
{
    int myrank          = 0;
    int nprocs          = 0;
    int i               = 0;
    MPI_Comm    icomm   = MPI_COMM_WORLD;
    MPI_Status  status;

    MPI_Info    info;
    MPI_File    *fh     = NULL;

    int         error       = 0;

    MPI_Init(&argc, &argv);
    MPI_Barrier(MPI_COMM_WORLD);        // Wait for all processor to start

    MPI_Comm_size(MPI_COMM_WORLD, &nprocs); // Get number of processes
    MPI_Comm_rank(MPI_COMM_WORLD, &myrank); // Get own rank

    usleep(myrank*100000);
    if ( myrank == 1 || myrank == 0 )
        printf("Hello from %d\r\n", myrank);

    if (myrank == 0)
    {
        error = MPI_File_open( MPI_COMM_SELF, "lw1.wei", MPI_MODE_UNIQUE_OPEN,
                               MPI_INFO_NULL, fh);
        if ( error )
        {
            printf("Error in opening file\r\n");
        }
        else
        {
            printf("File successfully opened\r\n");
        }
        MPI_File_close(fh);
    }

    MPI_Barrier(MPI_COMM_WORLD);        //! Wait for all the processors to end
    MPI_Finalize();

    if ( myrank == 0 )
    {
        printf("Number of Processes %d\n\r", nprocs);
    }

    return 0;
}

1 个答案:

答案 0 :(得分:3)

在打开文件之前忘了分配MPI_File对象。您可以更改此行:

MPI_File    *fh     = NULL;

成:

MPI_File     fh;

并通过将fh的地址提供给MPI_File_open(..., &fh)来打开文件。或者您可以使用malloc()从堆中分配内存。

MPI_File    *fh      = malloc(sizeof(MPI_File));