Прежде всего, ваш l oop слишком мал, чтобы извлечь выгоду из использования нескольких потоков в этом примере c (примерно 3,5 мс на моей машине последовательно, 1,8 мс при использовании 6 потоков на 6 ядрах).
Кроме того, ваш тест слишком короткий, и вы, вероятно, измеряете непредвиденные эффекты (кеширование, сбои страниц, проблемы с масштабированием частоты процессора и т. Д. c.). Подумайте об этом в al oop, чтобы смягчить большинство эффектов (если это имеет смысл в реальных условиях).
Более того, некоторые среды выполнения OpenMP создают потоки при выполнении параллельной секции. Эта операция довольно медленная. Поскольку директива #pragma omp parallel
включена в синхронизацию, вы также можете измерить создание потока.
Вот результаты на моем 6-ядерном компьютере размером в 1000 раз больше:
1 thread: 2.330 sec
2 threads: 1.212 sec
3 threads: 0.813 sec
4 threads: 0.649 sec
5 threads: 0.532 sec
6 threads: 0.459 sec
Ускорение составляет 5,1 с 6 потоками, что хорошо.
Обратите внимание, что масштабирование может ухудшиться, поскольку ваш l oop кажется ограниченным памятью (пропускная способность памяти не масштабируется с количеством используемые ядра).