这里是我的代码的一部分平行延伸: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