2012-04-07 4 views
1

Я создаю приложение компьютерного зрения, которое обнаруживает объекты через веб-камеру. В настоящее время я фокусирую внимание на производительности приложенияopenmp vs opencl для компьютерного зрения

Моя проблема в части приложения, которое генерирует файл каскада XML с использованием файла Haartraining. Это очень медленно и занимает около 6дней. Чтобы обойти эту проблему, я решил использовать многопроцессорность, чтобы свести к минимуму общее время создания файла XML Haartrining.

Я нашел два решения: opencl и (openMp и openMPI).

Теперь я смущен тем, какой из них использовать. Я прочитал, что opencl - использовать несколько процессоров и графический процессор , но на том же компьютере. Это так? С другой стороны, OpenMP предназначен для многопроцессорной обработки и использования openmpi, мы можем использовать несколько процессоров по сети. Но OpenMP не поддерживает GPU.

Не могли бы вы предложить плюсы и минусы использования любой из библиотек.

+0

Это совершенно разные технологии для разных целей. –

+0

Вы можете объяснить эти технологии и их цели. – user1235711

+0

Почему бы вам не прочитать, например. страницы Википедии. Если у вас есть конкретный вопрос, тогда настало время для публикации в Stack Overflow. –

ответ

6

OpenCL предназначен для использования процессоров потоков GPU. http://en.wikipedia.org/wiki/Opencl

OpenMP предназначен для использования процессорных ядер. http://en.wikipedia.org/wiki/Openmp

OpenMPI предназначен для использования распределенного сетевого кластера. http://en.wikipedia.org/wiki/Openmpi

Какой из них лучше всего использовать, зависит от вашей спецификации проблемы, но я бы попытался использовать OpenMP первым, потому что проще всего подключить к нему одну поточную программу. Иногда вы можете просто поставить прагму, говорящую об этом, чтобы parellelize основной цикл, и вы можете получить ускорение в порядке количества ядер процессора.

Если ваша проблема связана с данными с параллельными данными и плавающей точкой - чем вы можете получить более высокую производительность из графического процессора, - но вам нужно написать ядро ​​на языке C, например, на карте или в буфере памяти чтения/записи между хостом и GPU. Его хлопот, но производительность в некоторых случаях может быть порядка 100, поскольку графические процессоры специально предназначены для параллельной работы данных.

OpenMPI обеспечит вам максимальную производительность, но вам понадобится кластер (куча серверов в одной сети), и они дороги.

+0

вы говорите: OpenCL предназначен для использования GPU, это означает, что opencl не использует процессор вообще – user1235711

+1

Нет, OpenCL также может использовать процессор, но если вы используете CPU, лучше использовать OpenMP. –

+0

@ AndrewTomazos-Fathomling, это не обязательно так - компиляторы OpenCL для CPU, как и у Intel, например, автоматически векторизовать код CPU, который OpenMP не делает. Кроме того, поскольку программы OpenCL могут быть скомпилированы во время выполнения, некоторые оптимизации могут быть сделаны компилятором на основе контекста времени выполнения, что невозможно в статически скомпилированной программе. См. Это для одной точки зрения на это: http://stackoverflow.com/q/7126611/677131 –

0

Может ли проблема с производительностью быть в самом XML-файле?

Вы пытались использовать другой, более легкий формат файла?

Я думаю, что XML-файл, который требует 6 дней, должен быть довольно длинным и сложным. Если у вас есть контроль над этим форматом данных, попробуйте Google Protocol Buffers.

Прежде чем копаться в OpenMP, OpenCL или что-то еще, проверьте, сколько времени потрачено на доступ к жесткому диску; если это проблема, параллельные библиотеки не улучшат ситуацию.

-2

исследование opencv и посмотреть, если это поможет.

Почему нисходящий сигнал? ... просто предложение немного вне вопроса, но может помочь в производительности и производительности. Я имею в виду, что OpenCV реализует OpenCL для непосредственного использования производительности, предлагаемой графическим процессором. Например, ocl :: BaseRowFilter_GPU для приложений компьютерного зрения.

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