作者:卧龙先生八斗才 | 来源:互联网 | 2022-12-18 11:04
从OpenMP 4.0开始,支持用户定义的缩减.所以我在这里完全定义了C++中std :: vector的减少.它适用于GNU/5.4.0和GNU/6.4.0,但它使用intel/2018.1.163返回减少的随机值.
这是一个例子:
#include
#include
#include
#include "omp.h"
#pragma omp declare reduction(vec_double_plus : std::vector : \
std::transform(omp_out.begin(), omp_out.end(), omp_in.begin(), omp_out.begin(), std::plus())) \
initializer(omp_priv = omp_orig)
int main() {
omp_set_num_threads(4);
int size = 100;
std::vector w(size,0);
#pragma omp parallel for reduction(vec_double_plus:w)
for (int i = 0; i <4; ++i)
for (int j = 0; j
每个线程为所有w条目(其本地w)添加1,最后将所有条目添加到一起(缩减).所有w条目的结果是GNU为4,但随后使用intel编译器.有谁知道这里发生了什么?