На глаз 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 не порекомендовал. А ведь это самый *быстрый* способ, для оптимизации кода - самое то. Короткие участки вообще иначе и не замеришь.