在MPI中写入文本文件

时间:2016-02-10 19:49:57

标签: c parallel-processing text-files mpi

我试图用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

1 个答案:

答案 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中的文件夹等文件夹...您的群集可能会在某处提供某种文档,告诉您可以在何处编写文件!