На глаз 4-х ядерный процессор со значением 4 в omp_set_num_threads() выполняет программы быстрее чем со значением 1. Но, нижеприведенный код возвращает близкие друг к другу числа и в случае значений 4 и в случае значения 1 : 1960000 и 1930000.
$ 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
В первом посте есть ответ, только мерять надо на незагруженной системе, чтоб другие процессы не помешали. Если у тебя идеализированный случай такой, что программе нет блокировок (I/O, мютексы, семафоры, слипы ...), то можешь и clock использовать.
Странно, никто asm-вставку x86-инструкции rdtsc не порекомендовал. А ведь это самый *быстрый* способ, для оптимизации кода - самое то. Короткие участки вообще иначе и не замеришь.