OpenMP может выполнять эту операцию, поскольку OpenMP 4.5 и GCC 6.3 (и, возможно, ниже) поддерживают ее.Пример программы выглядит следующим образом:
#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;
}
Обратите внимание, что omp_out
и omp_in
являются специальными переменными и что тип declare reduction
должен соответствовать вектору, на который вы планируете уменьшить.