2010-06-09 2 views
13

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

Я строию пример сан-ангелов со следующими параметрами.

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

Однако это, похоже, работает с той же скоростью, что и раньше (т.е. плохо). Я просто ограничен GL, а не CPU, или что-то не так?

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

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

То, что беспокоит меня есть «softfp». Здесь упоминается v7 abi, материал VFP fpu, и я предполагаю, что «большой палец» относится к инструкциям «thumb-2» (хотя я не знаю, что именно они представляют). Однако это «softfp» действительно касается меня. Разве это не должно быть «hardfp»?

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

Приветствия заранее!

ответ

32

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

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

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

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

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

Если у вас возникли сомнения, «arm-eabi-objdump -d whatever.o» покажет вам разборку вашего кода.

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

+1

Извините, я, должно быть, пропустил тот факт, что вы ответили на этот вопрос. Отличный ответ :) – Goz

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