【问题标题】:MPI: parallelize a buffer over and over [closed]MPI:一遍又一遍地并行化缓冲区[关闭]
【发布时间】:2019-01-07 01:49:30
【问题描述】:

假设我有一个很大的输入文件。

假设这个文件有我想并行处理的项目。

std::vector<std::string> items(100000,"");
for(int i = 0; i < 1000000; i++)
    items[i] = pop_item(file);

接下来,我想通过与 MPI 并行处理这些项目来加快处理速度:

std::vector<MyObj> processed_items(100000); // pseudo-code, i handle the memory mallocing
int size; rank;
MPI_INIT();

MPI_Comm_size(MPI_COMM_WORLD,&size);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);

for(i = rank; i < 100000; i += size)
    processed_items[i] = process_item(items[i]);

MPI_FINALIZE();

好的,很好用。

现在,我想在一个while循环中一遍又一遍地做:

while(!done){
   done = fill_items(&items, file); 

   MPI_INIT();

   ...;

   MPI_FINALIZE();

   print_items(&processed_items);

}

但是,我因“错误:在调用 mpi finalize 后调用 mpi_init”而失败。


我在 MPI 中处理此问题的预期方式是什么?

【问题讨论】:

    标签: c++ mpi


    【解决方案1】:

    如您的错误提示,每个程序只能调用一次 MPI_INIT() 和 MPI_FINALIZE。半年前的This old answer 描绘了如何让 MPI 并行运行程序的某些部分:

    int main(int argc, char *argv[]) {
        MPI_Init(&argc, &argv);  
        MPI_Comm_size(MPI_COMM_WORLD,&numprocs);  
        MPI_Comm_rank(MPI_COMM_WORLD,&myid);
    
        if (myid == 0) { // Do the serial part on a single MPI thread
            printf("Performing serial computation on cpu %d\n", myid);
            PreParallelWork();
        }
    
        ParallelWork();  // Every MPI thread will run the parallel work
    
        if (myid == 0) { // Do the final serial part on a single MPI thread
            printf("Performing the final serial computation on cpu %d\n", myid);
            PostParallelWork();
        }
    
        MPI_Finalize();  
        return 0;  
    }  
    

    【讨论】:

    • #ifndef _INITIALIZED MPI_INIT(); 不会有任何好处。总的来说,除了真正的描述性和明显的错误之外,这个答案并没有比链接的答案提供任何价值。
    • @Zulan 我已经使用这个答案完成了一切工作
    • @Zulan 你当然是对的,我被 MPI 宏所吸引,以至于我从未停下来思考是否应该......预处理器当然会在整个循环中运行相同的.我会删除它。
    猜你喜欢
    • 2017-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    相关资源
    最近更新 更多