这两者之间的区别是什么?
一个
#pragma omp parallel
{
#pragma omp for
for(int i = 1; i < 100; ++i)
{
...
}
}B
#pragma omp parallel for
for(int i = 1; i < 100; ++i)
{
...
}发布于 2009-09-30 20:20:22
我不认为有什么区别,一个是另一个的捷径。尽管您的具体实现可能会以不同的方式处理它们。
组合的并行工作共享构件是指定包含一个工作共享构件而不包含其他语句的并行构件的快捷方式。允许的子句是并行和工作共享结构所允许的子句的并集。
摘自http://www.openmp.org/mp-documents/OpenMP3.0-SummarySpec.pdf
OpenMP的规格如下:
发布于 2011-09-26 11:08:48
它们是等效的。
#pragma omp parallel产生一组线程,而#pragma omp for在产生的线程之间划分循环迭代。您可以使用fused #pragma omp parallel for指令同时完成这两项工作。
发布于 2013-08-25 03:01:56
下面是使用分离的parallel和for here的示例。简而言之,它可以用于在多个线程中执行OpenMP周期之前动态分配for线程私有数组。在parallel for的情况下,不可能进行同样的初始化。
更新:在问题示例中,单个编译指示和两个编译指示没有区别。但在实践中,您可以使用单独的并行和for指令来实现更多的线程感知行为。一些代码,例如:
#pragma omp parallel
{
double *data = (double*)malloc(...); // this data is thread private
#pragma omp for
for(1...100) // first parallelized cycle
{
}
#pragma omp single
{} // make some single thread processing
#pragma omp for // second parallelized cycle
for(1...100)
{
}
#pragma omp single
{} // make some single thread processing again
free(data); // free thread private data
}https://stackoverflow.com/questions/1448318
复制相似问题