Лучшие флаги компилятора для целевого проекта C с помощью opencv framekwork

Я занимаюсь компиляцией и проектом ios с использованием среды opencv, поэтому мне интересно узнать, какие флаги компилятора лучше всего подходят для моего проекта.

Проект обрабатывает много пикселей матрицы, поэтому мне нужно, чтобы со стороны компилятора были SIMD-инструкции, чтобы иметь возможность обрабатывать эту матрицу максимально эффективно.

Я использовал следующие флаги: -mfpu = неон, -mfloat-abi = softfp и -O3,

И я также нахожу это другие флаги: -mno-thumb -mfpu=maverick -ftree-vectorize -DNS_BLOCK_ASSERTIONS=1

Я не знаю, действительно ли это сэкономит мне много процессорной обработки, я ищу в Google, но я не нашел что-то, что дало бы мне веские основания знать лучшие флаги компилятора.

Спасибо

2 ответа

Решение

Я также использую те же флаги, которые вы используете для неона. Оптимизация неоновых внутренних кодов не будет выполняться в соответствии с уровнем оптимизации O3 или чем-либо еще. Он просто оптимизирует код ARM.

По словам Василе, лучшую производительность можно получить, написав неоновые коды в сборке. Самый простой способ - написать программу, в которой используются внутренние неоновые коды, и скомпилировать ее, используя флаги, которые вы упомянули. Теперь используйте ассемблерный код, сгенерированный для кода, для дальнейшей оптимизации.

Большая оптимизация может быть выполнена путем распараллеливания или использования возможностей неоновых инструкций.

Проблема в том, что компиляторы не так хороши в генерации векторизованного кода. Так что, просто включив NEON, вы не получите много улучшений (возможно, 10%??)

что вы можете сделать, это профилировать ваше приложение и писать вручную те части, которые съедают ваше время, используя NEON. И если вы делаете это, почему бы не залатать их в общедоступный исходный код OpenCV?

К настоящему времени в OpenCV практически нет кода, оптимизированного для NEON (для x86 SSE2 он гораздо лучше оптимизирован).

Другие вопросы по тегам