這裏是我的代碼的一部分平行延伸:OpenMP和SSE,我的程序不加快
timer.Start();
for(int i = 0; i < params.epochs; ++i)
{
#pragma omp for
for(int j = 0; j < min_net; ++j)
{
std::pair<CVectorSSE,CVectorSSE>& sample = data_set[j];
nets[j]->Approximate(sample.first,net_outputs[j]);
out_gradients[j].SetDifference(net_outputs[j],sample.second);
nets[j]->BackPropagateGradient(out_gradients[j],net_gradients[j]);
}
}
timer.Stop();
曆元= 100
我的AMD Athlon X2 5000+
當我啓動這個代碼沒有omp指令的時間是相同的... 而當我看着任務管理器/性能運行時兩個程序(使用/不使用omp) 在兩種情況下使用2個核心...因此,似乎VS(VS 2008 )以某種方式優化代碼,如omp ???
並行循環中的代碼使用SSE指令... 我想知道,也許在多核處理器只有一個SSE單元,但它會是愚蠢的...所以也許some1可以告訴我我做錯了什麼? 我知道,這取決於我的代碼內循環,但如果這段代碼裏面平行那麼它必須加快...
好吧,我definitly做錯了 - 看看這個代碼:
time_t start;
time_t stop;
start = time(NULL);
#pragma omp for
for(int i = 0; i < 10; ++i)
{
Sleep(1000);
}
stop = time(NULL);
cout<<difftime(stop,start)<<endl;
沒有omp它應該睡10秒(10 * 1000毫秒) 與omp它應該睡眠不到10秒,因爲2個線程可以睡在一次嗎? 但它再次睡10秒 - 它怎麼可能?
你應該**代碼**並查看在哪裏花費時間 - 否則你只是猜測你的性能問題在哪裏 – 2011-05-13 12:07:24