LINUX.ORG.RU

OpenCV и многопоточность

 ,


0

1

Решил я поиграться с OpenCV. Взял у них один из примеров, скомпилировал с флажками по дефолту (-O2 -g), запустил, получаю вот это:

[ INFO:0@0.168] global registry_parallel.impl.hpp:96 ParallelBackendRegistry core(parallel): Enabled backends(3, sorted by priority): ONETBB(1000); TBB(990); OPENMP(980)
. Я так понимаю, тут сразу подключается многопоточность через указанные библиотеки. Обрадовался я, собрал на своём старом ноутбуке из исходников
cmake -S . -B build/ -DCMAKE_PREFIX_INSTALL=/usr/local -DWITH_OPENMP=ON -DWITH_TBB=ON
, компилирую там, запускаю - ничего подобного нет и по ощущениям в одном потоке сразу работает. Процессор ноутбука вполне многопоточный: Intel Core i3 2330m. Что я делаю не так при сборке? Хотелось бы многопоточность из коробки, как в Генте.

Взял у них один из примеров

А какой именно? Тоже попытаюсь на нём же.

Intel Core i3 2330m

У него максимум - AVX? Не может так быть, что нужны более современные инструкции?

dataman ★★★★★
()
Последнее исправление: dataman (всего исправлений: 1)
Ответ на: комментарий от dataman

Не может так быть, что нужны более современные инструкции?

Инструкции могут только ускорить обработку, а речь идет о работе на несколько ядер. Там точно есть 4 ядра и оно должно на них раскидываться. На машине с Гентой это прям заметно.

LongLiveUbuntu ★★★★★
() автор топика
Ответ на: комментарий от LongLiveUbuntu

Я почитал https://stackoverflow.com/questions/54466572/how-to-properly-multithread-in-opencv-in-2019

Regarding multithreading on application level, an comment from an moderator on answers.opencv.org:

please avoid using your own multithreading with opencv. a lot of functions are explicitly not thread-safe. rather rebuild the opencv libs with TBB or openmp support.

Но в другом комментарии:

But another answer with 3 upvotes is stating:

The library itself is thread safe in that you can have multiple calls into the library at the same time, however the data is not always thread safe.

Короче, хз.

dataman ★★★★★
()
Ответ на: комментарий от LongLiveUbuntu

А OpenMP разве не раскидывает потоки по всем доступным ядрам по умолчанию?

Зависит от приложения.

OpenCV, кстати, ещё от blas зависит. Для Intel оптимальный вариант MKL, для AMD - OpenBLAS.

annulen ★★★★★
()