我试图用MPI写入文本文件,但是没有创建该文件。 我只需要在master(rank = 0)上写,但没有任何作用。 它只在我在控制台中运行程序时工作(并保存损坏的元素),而不是在Mpich2和 我附上了代码。 谢谢你的帮助。
RESULTS: CURL error fetching url https://seo.com: error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure EOM
答案 0 :(得分:1)
在您发布的示例代码中,所有进程都会打开该文件,只有进程0将其关闭。你能尝试以下修改吗?
if (rank == 0) {
FILE* f = fopen("test.txt","wb+");
if(f==NULL){printf("failed to open file: permission issue ?\n");exit(1);}
for (int i=0; i < 5; i++){
fprintf(f,"%d \n",i);
}
fclose(f);
}
由于您的代码似乎来自阿贡国家实验室,我认为它是使用特定文件系统在群集上运行的。
以下代码基于您的。它使用MPI_File_open()
在单个流程上使用MPI_File_write()
和MPI_COMM_SELF
。
/* This is an interactive version of cpi */
#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char *argv[])
{
int namelen, numprocs, rank;
char processor_name[MPI_MAX_PROCESSOR_NAME];
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&numprocs);
MPI_Get_processor_name(processor_name,&namelen);
MPI_Status status;
MPI_File fh;
if (rank == 0) {
MPI_File_open(MPI_COMM_SELF, "test.txt",MPI_MODE_CREATE | MPI_MODE_WRONLY,MPI_INFO_NULL,&fh);
//FILE* f = fopen("test.txt","wb+");
//if(f==NULL){
//printf("failed to open file\n");exit(1);
//}
for (int i=0; i < 5; i++){
char buf[42];
//fprintf(f,"%d \n",i);
snprintf(buf,42,"%d \n",i);
MPI_File_write(fh,buf,strlen(buf), MPI_CHAR,&status);
}
// fclose(f);
MPI_File_close(&fh);
}
else {
// do nothing
}
MPI_Finalize();
return 0;
}
请确保您拥有在考虑的文件夹中写入的权限。确保所有节点都可以访问此文件夹!尝试使用/tmp
或/scratch
中的文件夹等文件夹...您的群集可能会在某处提供某种文档,告诉您可以在何处编写文件!