Android конвертировать / компилировать C ++ как Neon

В настоящее время я пишу простую программу для Android с использованием C ++ с помощью JNI и OpenCV.
На входе изображение хранится в виде мата.
Вместо использования функции нормализации OpenCV, я хочу написать свою собственную функцию нормализации на C ++.
Из того, что я знаю, есть поддержка NEON.
Однако, взглянув на образец HelloNeon в папке NDK, я понял, что код написан на основе NEON.

Вопрос:
Есть ли способ напрямую скомпилировать мой код C ++ в код NEON?
Т.е. я хочу избежать написания своей функции в присущем NEON.

Спасибо.

1

Решение

Во многом зависит от компилятора. И gcc, и clang поддерживают «автоматическую векторизацию» в последних версиях, но качество сгенерированного кода очень различно — в основном в зависимости от реального исходного кода. Как всегда, компилятор, во-первых, отвечает за генерацию правильного кода, во-вторых, за генерацию быстрого / эффективного кода. Если есть сомнения, перейдите на «безопасный» вариант.

Это должно, однако, работать, чтобы использовать -mfpu=neon -ftree-vectorize,

Однако я ожидаю, что вам нужно «помассировать» код, чтобы он хорошо векторизовался — по крайней мере, это мой опыт на x86, где компилятор будет пытаться создавать инструкции SSE при векторизации. Это удается в довольно простых случаях, но возвращается к «обычному коду», когда код более сложный. Более поздние компиляторы, как правило, работают лучше, чем старые версии.

Если вам действительно нужно получить хорошие результаты векторизации, вам, вероятно, придется использовать встроенные Neon.

1

Другие решения


По вопросам рекламы [email protected]