微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我编写了一个代码,用于导出二维数组并将其写入文本文件。该程序在使用一个内核(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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。