【发布时间】:2021-08-11 06:12:18
【问题描述】:
我正在通过Using OpenMP。作者比较和对比了以下两种结构:
//Construct 1
#pragma omp parallel for
for( ... )
{
/* Work sharing loop 1 */
}
...
#pragma omp parallel for
for( ... )
{
/* Work sharing loop N */
}
反对
//Construct 2
#pragma omp parallel
{
#pragma omp for
for( ... )
{
/* Work sharing loop 1 */
}
...
#pragma omp for
for( ... )
{
/* Work sharing loop N */
}
}
他们说构造 2
隐含的障碍较少,并且可能存在缓存 循环之间的数据重用。这种方法的缺点是一个 不能再在每个循环的基础上调整线程数,但是 这通常不是真正的限制。
我很难理解 Construct 2 如何具有更少的隐含障碍。由于#pragma omp for,在每个 for 循环之后,构造 2 中是否没有隐含的障碍?那么,在每种情况下,隐含障碍的数量是否都相同,N?也就是Construct 2中不是先出现第一个循环,以此类推,然后最后执行Nth for循环吗?
另外,Construct 2 如何更利于循环之间的缓存重用?
【问题讨论】:
标签: multithreading performance parallel-processing openmp barrier