openmp - '#pragma omp master' 与 '#pragma omp single' 相比有什么好处?

标签 openmp

在 OpenMP 中 #pragma omp master 中的任何代码指令由单个线程(主线程)执行,在区域末尾没有隐含的屏障。 (见 section on MASTER directive in the LLNL OpenMP tutorial)。

这似乎相当于 #pragma omp single nowait (除了'master',任何线程都可以执行单个区域)。

什么情况下使用#pragma omp master有用吗? ?

最佳答案

虽然 single nowait构造在大多数情况下相当于 master构造:

  • master如果需要,可以在工作共享构造中使用构造。 single nowait 不是这种情况构造,因为两个工作共享构造不能嵌套在同一并行区域内
  • 一些库希望主线程执行某些操作。例如 MPI 库,当初始化时线程支持级别等于 MPI_THREAD_FUNNELED , 只允许主线程进行 MPI 调用
  • 关于openmp - '#pragma omp master' 与 '#pragma omp single' 相比有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18820471/

    相关文章:

    c++ - 多线程从磁盘读取?

    C 与 OpenMP : Matrix times vector

    c - 性能:在列 [OpenMP,C] 上高效减少二维数组

    c++ - MPI_Bcast 错误

    c++ - 使用 g++ 编译 OpenMP 时未知编译指示

    在 OpenMP 中计算矩阵的条目

    c++ - OpenMP:如何刷新指针目标?

    c++ - OpenMP 任务和 Taskwait 构造

    c++ - 从多个线程更新最大值

    c++ - OpenMP:用锁替换临界区