英特尔线程构建模块性能不佳

时间:2015-02-11 12:48:37

标签: c++ multithreading openmp multicore tbb

我对tbb与OpenMp vs单线程进行了非常简单的并行for循环评估。虽然omp几乎是线性的,但在4x核心系统上运行速度快了大约1.7倍,负载为100%。 我正在使用W7 ia32和VS2010 i5-2500。 代码:

const int size = 100000;
tbb::concurrent_vector<double> x(size);
long long t1 = GetTimeMs();
#if 1
tbb::parallel_for(0, size, 1, [&](int i) {
    double& xx = x[i];
    xx += i;
    for (int j = 0; j < size; j++) {
        xx += 3.0 * j * j + 2.0 * j + 1.0;
    }
});
#elif 0 
#pragma omp parallel for
for (int i = 0; i < size; i++) {
    double& xx = x[i];
    xx += i;
    for (int j = 0; j < size; j++) {                
        xx += 3.0 * j * j + 2.0 * j + 1.0;
    }
}
#else   
for (int i = 0; i < size; i++) {
    double& xx = x[i];
    xx += i;
    for (int j = 0; j < size; j++) {
        xx += 3.0 * j * j + 2.0 * j + 1.0;
    }
}
#endif
long long t2 = GetTimeMs() - t1;
printf("%lld ms\n", t2);

对于单个,omp和tbb,执行时间为14.4,3.7,8.1。

1 个答案:

答案 0 :(得分:0)

谢谢大家的回答。 我自己检查了Linux,它在那里工作正常。 看起来像wintel平台的bug,我会向他们报告。