热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

英特尔编译器(C++)在std::vector上减少OpenMP的问题

如何解决《英特尔编译器(C++)在std::vector上减少OpenMP的问题》经验,有好办法吗?

从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编译器.有谁知道这里发生了什么?


推荐阅读
author-avatar
卧龙先生八斗才
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有