Получение аппаратной плавающей точки с android NDK

Я начал играть с android NDK. Одна из вещей, которые я только что изучил, о создании application.mk файла для определения armv7 abi.

Я создаю san-angeles пример со следующими параметрами.

APP_MODULES      := sanangeles
APP_PROJECT_PATH := $(call my-dir)/../
APP_OPTIM        := release
APP_ABI          := armeabi-v7a

Однако это, кажется, работает на точно той же скорости, как она сделала прежде (т.е. плохо). Я - просто ограниченный GL и не ограниченный ЦП или являюсь чем-то не так здесь?

Я заметил, когда я компилирую это, я испустил следующие параметры командной строки:

-march=armv7-a -mfloat-abi=softfp -mfpu=vfp -mthumb 

Вещь, которая волнует меня, существует "softfp". СУЩЕСТВУЕТ упоминание о v7 abi, VFP fpu материал, и я предполагаю, что "ползунок" отсылает к "ползунку 2" инструкции (Хотя я не знаю то, что точно это). Однако это "softfp" действительно касается меня. Разве это не должен быть "hardfp"?

Кто-либо получил какие-либо идеи об этих вопросах? Я думаю, что я, вероятно, о готовом, чтобы начать реализовывать некоторый код GL ES 2.0 для моего HTC Desire, но я хотел бы удостовериться, что я вытаскиваю самую лучшую скорость из него :)

Аплодисменты заранее!

13
задан Goz 9 June 2010 в 10:21
поделиться

1 ответ

Параметры, которые вы предоставляете NDK, будут влиять только на способ компиляции вашего кода. Это не изменит библиотеки GL или что-либо еще, что является частью платформы, которые всегда создаются соответствующим образом. Если вы просто бросаете геометрию на оборудование GL, вы не увидите разницы.

Если вы хотите увидеть, действуют ли ваши варианты, загрузите (или создайте) простой тест, который выполняет набор операций со значениями с плавающей запятой двойной точности и определяет время, которое потребуется для выполнения до и после.

Аргумент -mfloat-abi = softp определяет, как значения с плавающей запятой передаются между функциями. softfp означает, что они всегда передаются в целочисленных регистрах или в стеке. Если бы Android не указывал softfp, версия библиотеки для ARMv7-A ожидала бы, что числа с плавающей запятой будут отображаться в аппаратных регистрах, и любой код, созданный для ARMv5TE, сломается.

"softfp" добавляет немного служебных данных к некоторым функциям, но инструкции по перемещению значений в регистры fp и из них дешевы для ARM, а предоставленная совместимость с ABI делает их стоящими.

-mthumb позволяет генерировать код Thumb / Thumb2. Код большого пальца обычно немного медленнее, но немного меньше, чем эквивалентный ARM; иногда меньший размер означает, что вы лучше поместитесь в i-cache процессора и действительно будете работать быстрее. Размер всегда важен на этих устройствах, поэтому Thumb включен по умолчанию.

В случае сомнений «arm-eabi-objdump -d something.o» покажет вам дизассемблированный код.

Обновление: В NDK r9b добавлена ​​поддержка -mhard-float.Это позволяет создавать библиотеки NDK с соглашениями об API с жесткой плавающей запятой для целей armeabi-v7a.

32
ответ дан 1 December 2019 в 19:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: