使用多核将数组导出到文本文件并行计算

问题描述

我编写了一个代码,用于导出二维数组并将其写入文本文件。该程序在使用一个内核(1 个处理器/1 个线程/1 个 cpu)时完美运行。但是,当使用多个内核时,来自最后一个内核的数据会覆盖文件。这导致我只有我需要的部分数组。

我通过为 n 个内核编写 n 个文本文件来扭转这一局面。下面是利用 3 个内核并创建 3 个文本文件代码


void expvector(){

    if(mype == 0){
        int ta,tb;
        ofstream tpfile;
        tpfile.open("testpressup0.txt");
        for(tb=0;tb<80;tb++)
        for(ta=0;ta<160;ta++)
                tpfile << pressure[ta][tb] << "\n";
        tpfile.close();
    }
            
        if(mype == 1){
        int ta1,tb1;
        ofstream tpfile1;
        tpfile1.open("testpressup1.txt");
        for(tb1=0;tb1<80;tb1++)
        for(ta1=0;ta1<160;ta1++)
                tpfile1 << pressure[ta1][tb1] << "\n";
        tpfile1.close();
    }

        if(mype == 2){
        int ta2,tb2;
        ofstream tpfile2;
        tpfile2.open("testpressup2.txt");
        for(tb2=0;tb2<80;tb2++)
        for(ta2=0;ta2<160;ta2++)
                tpfile2 << pressure[ta2][tb2] << "\n";
        tpfile2.close();
    }

}

mype 给出当前处理器的等级,我使用 OpenMPI/MPI 来使用多个处理器/并行进程。

虽然创建和写入多个文本文件暂时解决了这个问题,但我只想创建一个文件并以内容不会被覆盖的方式导出/写入数据。我将在几周内使用 HPC 运行此代码,并创建 40 多个文本文件以期进行正确的后期处理是没有意义的。

我不确定如何解决这个问题,鉴于我所处的时间紧迫,任何帮助将不胜感激!谢谢(:

解决方法

单个文件的问题是每个进程都有一个独立的文件指针,所以你会左右碰撞。使用 MPI I/O 打开单个文件。这可能会让您开始:https://pages.tacc.utexas.edu/~eijkhout/pcse/html/mpi-io.html