【发布时间】:2017-06-14 07:27:19
【问题描述】:
OpenMP 4.5+ 提供了在 C++ 中进行向量/数组缩减的功能 (press release)
使用所述功能允许我们编写,例如:
#include <vector>
#include <iostream>
int main(){
std::vector<int> vec;
#pragma omp declare reduction (merge : std::vector<int> : omp_out.insert(omp_out.end(), omp_in.begin(), omp_in.end()))
#pragma omp parallel for default(none) schedule(static) reduction(merge: vec)
for(int i=0;i<100;i++)
vec.push_back(i);
for(const auto x: vec)
std::cout<<x<<"\n";
return 0;
}
问题是,在执行此类代码时,各个线程的结果可能以任何方式排序。
有没有办法强制执行顺序,使线程 0 的结果先于线程 1,以此类推?
【问题讨论】:
-
for子句采用可选的ordered,参见OpenMP 4.5 API C/C++ Syntax Reference Guide。您应该可以将其与reduction结合使用。