【问题标题】:How to use MPI_Abort() to terminate other processors如何使用 MPI_Abort() 终止其他处理器
【发布时间】:2017-01-26 09:40:16
【问题描述】:

在 MPI 中,MPI_Abort() 主要用于中止异常行为。在我下面的程序中,在每次迭代时,ROOT 进程都会检查一个条件,而其余处理器在 MPI_Barrier 处等待以接收下一次迭代的数据。因此,如果达到阈值,我希望根终止整个循环并且其他处理器应该离开循环并终止。我的问题是:使用MPI_Abort() 让在屏障中等待的处理器终止是否有意义?

void kmeans() {

    do{
        // Step1: ROOT Broadcast the K centroids.
        MPI_Bcast(&cluster_centroids, N, MPI_FLOAT, ROOT, MPI_COMM_WORLD);
        MPI_Barrier(MPI_COMM_WORLD);

        // Step2: Calculate the distances.
        points_assignment(data, cluster_center);

        // Step3: Update cluster centroid (Locally at each processor)
        update_centroids_locally();

        if(Rank == ROOT){
            // Step4: ROOT checks the threshold
            Flag = check_threshold(cluster_center);

            if(Flag == 1){
                // MPI_Abort(MPI_COMM_WORLD,0);
                break;
            }else{
                continue;
            }
        }

    } while(1);

}

【问题讨论】:

    标签: c parallel-processing mpi


    【解决方案1】:

    为了避免使用MPI_Abort,我可以考虑两种终止方式:

    1) 简单的一个:每次广播一个终止标志,每个进程将根据该标志继续或停止。

    2) 您可以使用两个MPI_IBcastMPI_Waitany。使用MPI_IBcast,您将广播您的cluster_centroids,使用另一个您将广播终止标志。每次您将检查广播是否已完成并基于此,每个进程将决定继续或停止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-10
      • 2020-11-19
      • 2012-12-26
      • 2013-04-30
      • 1970-01-01
      相关资源
      最近更新 更多