OpenMP 如何提供 pragma 函数?
How does OpenMP provide pragma functions?
我很好奇,OpenMP 提供了像#pragma omp parallel
这样的pragma 函数。它是如何提供的?
您可能想在我的网站上查看 https://www.dontknow.de/openmp-stuff/。它简要介绍了 OpenMP 编译器的工作原理。它应该回答有关代码转换和与 lower-level 线程库交互的最基本问题。
基本思路就是这样的代码
#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;
}
如果需要将数据传递到并行区域,例如使用 shared
、private
等变量时,编译器将不得不做更多的事情。然后将它们作为指向全局数据中原始变量的指针传递 and/or 主线程的堆栈。
我很好奇,OpenMP 提供了像#pragma omp parallel
这样的pragma 函数。它是如何提供的?
您可能想在我的网站上查看 https://www.dontknow.de/openmp-stuff/。它简要介绍了 OpenMP 编译器的工作原理。它应该回答有关代码转换和与 lower-level 线程库交互的最基本问题。
基本思路就是这样的代码
#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;
}
如果需要将数据传递到并行区域,例如使用 shared
、private
等变量时,编译器将不得不做更多的事情。然后将它们作为指向全局数据中原始变量的指针传递 and/or 主线程的堆栈。