c++ - OpenMP 如何提供 pragma 函数?

标签 c++ openmp preprocessor pragma

我很好奇,OpenMP 提供了类似#pragma omp parallel 的pragma 函数。它是如何提供的?

最佳答案

您可能想看看 https://www.dontknow.de/openmp-stuff/在我的网站上。它简要介绍了 OpenMP 编译器的工作原理。它应该回答有关代码转换和与较低级别线程库交互的最基本问题。

基本思路就是这样的代码

#include <stdio.h>

int main(int argc, char **argv) {
#pragma omp parallel num_threads(NUM_THREADS)
    printf(“Hello World\n”);
    return 0;
}

像这样转换:

void main_omp_func_0() {
    printf(“Hello World\n”);
}

int main(int argc, char **argv) {
    _omp_start_parallel_region(main_omp_func_0);
    main_omp_func_0();
    _omp_end_parallel_region();
    return 0;
}

如果需要将数据传递到并行区域,编译器将不得不做更多的事情,例如,当使用sharedprivate 等变量时。然后将它们作为指向全局数据和/或主线程堆栈中的原始变量的指针传递。

关于c++ - OpenMP 如何提供 pragma 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56556529/

相关文章:

c - if else C语言的简写

c - 普通 C 的预处理器元编程库

c++ - 我无法理解这种复制构造函数的行为

c++ - 无法使用运算符 [] 访问二维堆 vector 的元素

c++ - OpenMP/C++ : Parallel for loop with reduction afterwards - best practice?

c++ - 为什么此代码(在 Matlab 的 MEX 文件中使用 OpenMP)给出不同的结果?

c++ - 在 Qt/GCC/C++ 中;如何创建一个包装器,它既捕获参数表达式文本,又返回/转换参数的显式类型?

c++ - 使用大括号和 : symbols 进行对象实例化

c++ - 我正在寻找一个 C++ 库,它处理 .PDB 文档中的调试符号

c++ - 具有两个串联线程的 OpenMP 填充数组