1
我对tbb vs OpenMp vs单线程进行了非常简单的并行for-loop评估。虽然omp几乎线性缩放,但tbb在4x核心系统上以100%的负载运行速度约快1.7倍。 我使用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);
和exec倍14.4,3.7,8.1单,OMP,和TBB。
它可能必须做块大小的事情。我不知道TBB,但它看起来像是使用1的块大小。OpenMP默认使用像N/nthreads这样的块。 – 2015-02-11 13:02:53
刚刚在24个线程的Linux上进行检查。 TBB很好,甚至比OpenMP快一点(22.8,1.01,0.99) – Anton 2015-02-11 13:57:28
您是否在发布模式下编译? – 2015-02-11 14:02:25