openMP и SSE, моя программа не ускоряется - PullRequest
0 голосов
/ 13 мая 2011

Вот часть моего кода, которая работает параллельно:

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, но это было бы глупо ... Так, может быть, кто-нибудь может сказать мне, что я делаю не так? Я знаю, что это зависит от моего кода внутри цикла, но если этот код внутри параллелен, то он ДОЛЖЕН ускориться ...

Хорошо, я определенно делаю что-то не так - посмотрите на этот код:

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 секунд - как это возможно?

1 Ответ

0 голосов
/ 13 мая 2011

Я попробовал второй пример на Linux с gcc.Моя программа работает в течение 3 секунд на Core i3.Я полагаю, проблема в том, что вы неправильно настроили OpenMP.GCC нужна опция -fopenmp для включения OpenMP.Подобная конфигурация может быть необходима для VS.

...