【问题标题】:Split iterations MPI拆分迭代 MPI
【发布时间】:2022-01-21 16:23:49
【问题描述】:

有一个8个元素(核数)的向量数组,在循环中,每个向量都被传递给函数。有必要在 MPI 上进行,以便并行执行循环,并且一旦一个进程找到一个值 - 终止其余进程的工作。我在 OMP 上做过,但不幸的是我不懂 MPI。

    double t1 = omp_get_wtime();
#pragma omp parallel
    {
#pragma omp for nowait
        for (int c = 0; c < 8; c++) {
            vector<double> result = GradDown(x[c], 0.000000000001);
        }
        double t2 = omp_get_wtime();
        cout << "time: " << t2 - t1 << "\n"  << endl;

【问题讨论】:

  • 这个问题很好,但缺少格式和更完整的代码示例。像这样的不完整可能会阻止读者深入了解细节

标签: c++ mpi openmp


【解决方案1】:

当一个线程完成时,您的 OpenMP 示例不会终止其他线程的工作。其他线程继续在后台运行。

至于如何实现(在 OMP 或 MPI 中),您需要一个共享标志来指示完成哪些线程定期检查是否需要退出。外部终止线程的唯一好方法是依靠它的合作。

【讨论】:

  • 是的,你是对的,这不会终止其余的线程,但我会有第一个线程的执行时间。我的问题是,如何在 MPI 上划分每个进程的迭代。
  • 这将打印 每个 线程的时间,因此您的 OpenMP 代码是错误的。也许你可以用omp cancel 解决这个问题。在 MPI 中,在一个进程找到解决方案后停止将变得更加困难。
猜你喜欢
  • 2020-09-07
  • 2020-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-12
  • 2016-01-19
  • 2011-06-02
相关资源
最近更新 更多