2

我正在尝试从文件中读取 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;
}
4

1 回答 1

3

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

MPI_File    *fh     = NULL;

进入:

MPI_File     fh;

并通过fh将 的地址提供给 来打开文件MPI_File_open(..., &fh)。或者您可以简单地使用malloc().

MPI_File    *fh      = malloc(sizeof(MPI_File));
于 2012-12-06T03:54:19.977 回答