vector<int> v;
#pragma omp parallel for ordered schedule(dynamic, anyChunkSizeGreaterThan1)
for (int i = 0; i < n; ++i){
...
...
...
#pragma omp ordered
v.push_back(i);
}
这会用大小为n
的有序列表填充v
。
当到达omp ordered
块时,所有线程都需要等待最低迭代可能的线程完成,但如果没有任何线程被指派到该特定迭代怎么办?或者OpenMP运行时库是否总是确保最低迭代由某个线程处理?
此外,为什么建议在dynamic schedule
与ordered
子句一起使用?static schedule
会影响性能吗?
ordered
循环,并尽可能避免它们,即使会导致增加内存占用 - 例如(针对您特定的示例),应该使用简单的预分配数组(或其他线程安全的随机访问容器)而不是vector:arr [i] = i;
- Hristo Iliev