理解#pragma omp parallel

Mis*_*tyD 2 c++ parallel-processing multithreading 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");
Run Code Online (Sandbox Code Playgroud)

第二个例子

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

我的问题是,这些线程是每次或一次应用程序启动时动态创建的,也是何时或为什么我要创建一个由更多线程组成的团队?

小智 5

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