2015-02-11 55 views
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。

+1

它可能必須做塊大小的事情。我不知道TBB,但它看起來像是使用1的塊大小。OpenMP默認使用像N/nthreads這樣的塊。 – 2015-02-11 13:02:53

+1

剛剛在24個線程的Linux上進行檢查。 TBB很好,甚至比OpenMP快一點(22.8,1.01,0.99) – Anton 2015-02-11 13:57:28

+0

您是否在發佈模式下編譯? – 2015-02-11 14:02:25

回答

0

謝謝大家的回答。 我自己在Linux上檢查過,它在那裏工作得很好。 看起來像一個wintel平臺的錯誤,我會向他們報告。