2013-03-20 4 views
0

Я написал многооконный код обнаружения лица, используя opencv face detector. Я запускаю пять детекторов (обученных для разных углов позы) над изображением и беря их веса для обнаружения лиц в изображении. Я сделал код параллельным, используя TBB parallel_for, но он улучшил производительность всего за 1,7 раза. Я хотел бы спросить, есть ли лучший способ одновременного запуска пяти детекторов?TBB parallel_for с меньшим количеством потоков

Я запускаю свой код на кластере с 16-ядерными ядрами. Я думаю, что количество потоков (в моем случае 5) слишком мало, чтобы использовать полную мощность.

Любые предложения?

Спасибо,

ответ

1

Некоторые возможные проблемы, чтобы посмотреть на:

  • Один из детекторов занимает больше времени, чем другие детекторы для запуска. Например, если один детектор занимает 4 единицы времени, а остальные четыре детектора занимают 1 единицу времени, наиболее вероятным ускорением является 2x. Параллельность самого медленного детектора может помочь в подобной ситуации.
  • Детекторы работают так быстро, что parallel_for не успевает распространить работу. Если каждый из детекторов занимает не менее 0,1 с, это не должно быть проблемой.
  • Предел пропускной способности памяти может быть предельным ресурсом, особенно если рабочие наборы не подходят для внешнего кэша.

Профилировщик, такой как Intel (R) VTune (TM) Amplifier, может иногда помогать отслеживать эти проблемы. Для Усилителя существуют как коммерческие, так и non-commercial лицензии. [Отказ от ответственности: я работаю для Intel.]

Смежные вопросы