c++ - 了解#pragma omp parallel

标签 c++ multithreading parallel-processing openmp

我正在阅读有关 OpenMP 的文章,它听起来很棒。我来到作者指出 #pragma omp parallel 可用于创建新的线程组的地方。所以我想知道 #pragma omp parallel 在这里有什么区别。我读到 #pragma omp for 使用当前线程组来处理 for 循环。所以我有两个例子

第一个简单的例子:

 #pragma omp for
 for(int n=0; n<10; ++n)
 {
   printf(" %d", n);
 }
 printf(".\n");

第二个例子

 #pragma omp parallel
 {
  #pragma omp for
  for(int n=0; n<10; ++n) printf(" %d", n);
 }
 printf(".\n");

我的问题是,这些线程是每次还是在应用程序启动时即时创建的,以及我何时或为什么要创建更多线程组?

最佳答案

您的第一个示例不会那样编译。 “#pragma omp for”建议编译器在您必须首先创建的线程组中分配以下循环的工作负载。在第二个示例中使用“#pragma omp parallel”语句创建一组线程。您可以使用“#pragma omp parallel for”组合“omp parallel”和“omp for”指令 线程组在并行语句之后创建,并在该 block 内有效。

关于c++ - 了解#pragma omp parallel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17268646/

相关文章:

ios - 访问 Realms 对象列表时出错 : Realm accessed from incorrect thread

c++ - 并行填充 vector ,顺序不重要

windows - 并行执行 shell 命令但限制作业(没有 Cygwin 的 Windows)

java - ReadWriteLock 写锁饱和

c - MPI 笛卡尔拓扑 - MPI_Gather 等效吗?

c++ - 隐式创建的默认构造函数是否负责分配对象内存?

c++ - 禁用警告 "deprecated conversion from string constant to ' 字符 *' [-Wwrite-strings]"

c++ - 正则表达式匹配

c++ - valgrind 检测到堆栈粉碎

java - 多线程 Web 服务器如何影响 Clojure 程序?