我正在尝试从文件中读取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;
}
答案 0 :(得分:3)
在打开文件之前忘了分配MPI_File
对象。您可以更改此行:
MPI_File *fh = NULL;
成:
MPI_File fh;
并通过将fh
的地址提供给MPI_File_open(..., &fh)
来打开文件。或者您可以使用malloc()
从堆中分配内存。
MPI_File *fh = malloc(sizeof(MPI_File));