Нет. Ваш код not хорошо!
Прежде всего, код неправильно сформирован , потому что сумма не инициализируется равной 0, если OpenMP не включен (вы включили OpenMP с использованием аргументов компилятора?). Таким образом, последовательная реализация приводит к неопределенному поведению . Это важно, потому что спецификация OpenMP гласит, что:
OpenMP API предназначен для поддержки программ, которые будут правильно выполняться как как параллельные программы [...], так и как последовательные программы. .
Более того, компилятор достаточно умен, чтобы удалить бесполезное дополнение , если вы включили оптимизацию компилятора (не так ли?), Как указал @HighPerformanceMark. Обратите внимание, что sum
даже не читается, поэтому компилятор может полностью игнорировать эту переменную. Я советую вам посмотреть эту Конференцию по C ++ , объясняющую, как правильно проводить тесты и анализировать производительность.
Кроме того, вы используете system_clock , что не является монотонным c. Действительно, в документации стандартной библиотеки C ++ указано, что:
в большинстве систем системное время можно изменить в любой момент
В результате полученные вами тайминги могут быть совершенно неправильно и даже возможно отрицательно! Пожалуйста, используйте stable_clock , который больше подходит для измерения времени настенных часов.
Наконец, для создания потоков может потребоваться время, как упоминалось в @JeanMarcVolle. Таким образом, многопоточность полезна только в том случае, если параллельная работа довольно велика по сравнению с накладными расходами на потоки. Здесь не стоит. Однако вместо этого вы можете использовать параллелизм на основе SIMD, используя директиву #pragma omp simd reduction(+:sum)
.