OpenMP如何提供编译指示功能?

时间:2019-06-12 07:12:10

标签: c++ openmp preprocessor pragma

我很好奇,OpenMP提供了诸如#pragma omp parallel之类的编译功能。它如何提供?

1 个答案:

答案 0 :(得分:2)

您可能希望在我的网站上查看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等变量时,编译器将不得不做更多的事情。然后将它们作为指向全局数据和/或主线程堆栈中原始变量的指针传递。