Я пытаюсь распараллелить некоторый код, используя OpenCV и OpenMP.
Код выполняет БПФ на 100 изображениях независимо друг от друга.Это выполняется в параллельном цикле for, который вызывает функцию, в которой вычисляется FFT.
Поскольку нет никаких зависимостей от данных, я ожидаю, что ускорение будет пропорционально количеству ядер (4 действительных, 8 логических).
Но последовательная версия занимает 2 секунды, а распараллеленная версия - плохие 1,2 секунды.Я наблюдаю увеличение рабочей нагрузки на ядра, почти достигающее 100% общей нагрузки на процессор (по сравнению с около 20% в случае однопоточности), но это не приводит к более быстрому выполнению.
Ниже выполнениевремя для увеличивающегося количества потоков:
1: 2092 ms
2: 1348 ms
3: 1199 ms
4: 1173 ms
5: 1183 ms
6: 1200 ms
7: 1205 ms
8: 1167 ms
9: 1182 ms
10: 1174 ms
Может ли это быть связано с издержками OpenMP или я что-то упустил?