小编Aba*_*ris的帖子

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

从OpenMP 4.0开始,支持用户定义的缩减.所以我在这里完全定义了C++中std :: vector的减少.它适用于GNU/5.4.0和GNU/6.4.0,但它使用intel/2018.1.163返回减少的随机值.

这是一个例子:

#include <iostream>
#include <vector>
#include <algorithm>
#include "omp.h"

#pragma omp declare reduction(vec_double_plus : std::vector<double> : \
                              std::transform(omp_out.begin(), omp_out.end(), omp_in.begin(), omp_out.begin(), std::plus<double>())) \
                    initializer(omp_priv = omp_orig)

int main() {

    omp_set_num_threads(4);
    int size = 100;
    std::vector<double> 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.size(); ++j)
            w[j] += 1;

    for(auto i:w)
        if(i != 4)
            std::cout << i << std::endl;

    return 0; …
Run Code Online (Sandbox Code Playgroud)

c++ gnu intel openmp reduction

5
推荐指数
1
解决办法
201
查看次数

如何在频繁调用的函数中优化重用大型 std::unordered_map 作为临时变量?

带有工作示例的简化问题:我想多次重用 std::unordered_map (我们称之为 umap),类似于以下虚拟代码(它不做任何有意义的事情)。我怎样才能让这段代码运行得更快?

#include <iostream>
#include <unordered_map>
#include <time.h>

unsigned size = 1000000;

void foo(){
    std::unordered_map<int, double> umap;
    umap.reserve(size);
    for (int i = 0; i < size; i++) {
        // in my real program: umap gets filled with meaningful data here
        umap.emplace(i, i * 0.1);
    }
    // ... some code here which does something meaningful with umap
}

int main() {

    clock_t t = clock();

    for(int i = 0; i < 50; i++){
        foo();
    }

    t = clock() - …
Run Code Online (Sandbox Code Playgroud)

c++ memory unordered-map

5
推荐指数
1
解决办法
1468
查看次数

标签 统计

c++ ×2

gnu ×1

intel ×1

memory ×1

openmp ×1

reduction ×1

unordered-map ×1