LINUX.ORG.RU

Ответ на: комментарий от imp

На глаз 4-х ядерный процессор со значением 4 в omp_set_num_threads() выполняет программы быстрее чем со значением 1. Но, нижеприведенный код возвращает близкие друг к другу числа и в случае значений 4 и в случае значения 1 : 1960000 и 1930000.

#include <time.h>
...
omp_set_dynamic(0);
omp_set_num_threads(4);
...
{//start_block
size_t i,j;
clock_t clock(void);
int time1 = clock();
#pragma omp parallel for ...
for(i=0; i<n; ++i){
// код идеально расспараллеливающийся
}
int time2 = clock();
std::cout << "[dt="<< time2-time1 << ']' << std::flush;
}//end_block

anonymous
()
Ответ на: комментарий от Reset

можно уточнить

m$ cat main.cc #include <math.h> #include <iostream>

#include <vector> #include <omp.h> #include <time.h>

#define n 1000

main(){

omp_set_dynamic(0); size_t cp=1;std::cout << "cp="<<cp<<std::flush; omp_set_num_threads(cp);

std::vector<double> a(n), b(n); for(size_t i; i<n; ++ i) b[i] = i/2.0;

size_t i,j,k; double x;

clock_t clock(void); int time1 = std::clock()/CLOCKS_PER_SEC;

#pragma omp parallel for private (i,j,k,x) #pragma opm shared (a,b) for(i=0; i<n; ++i){ x=0.0; for(j=0;j<n;++j){ for(k=0;k<n;++k){ x+=k+j; } } a[i]=b[i]+x; }

int time2 = clock()/CLOCKS_PER_SEC; std::cout << " dt="<< time2-time1 << std::endl;

}//main()

$ c++ -fopenmp main.cc -o main.xx && time ./main.xx main.cc: In function ‘int main()’: main.cc:28: предупреждение: iteration variable ‘i’ is unsigned cp=4 dt=7

real 0m2.375s user 0m7.248s sys 0m0.008s

$ c++ -fopenmp main.cc -o main.xx && time ./main.xx main.cc: In function ‘int main()’: main.cc:28: предупреждение: iteration variable ‘i’ is unsigned cp=1 dt=7

real 0m7.082s user 0m7.080s sys 0m0.000s

anonymous
()
Ответ на: комментарий от anonymous

В первом посте есть ответ, только мерять надо на незагруженной системе, чтоб другие процессы не помешали. Если у тебя идеализированный случай такой, что программе нет блокировок (I/O, мютексы, семафоры, слипы ...), то можешь и clock использовать.

Reset ★★★★★
()

Странно, никто asm-вставку x86-инструкции rdtsc не порекомендовал. А ведь это самый *быстрый* способ, для оптимизации кода - самое то. Короткие участки вообще иначе и не замеришь.

alexsaa
()
Ответ на: комментарий от alexsaa

> Странно, никто asm-вставку x86-инструкции rdtsc не порекомендовал.

А кто сказал, что речь об архитектуре x86?

andreyu ★★★★★
()
Ответ на: комментарий от alexsaa

> Думаю, более половины читателей ЛОРа используют x86.

А остальные? Пишут со старых макбуков, которые ещё на PPC, или с PS3? :)

mv ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.