我正在阅读有关 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/