Получение аппаратной плавающей запятой с помощью Android NDK

StackOverflow https://stackoverflow.com/questions/3004915

Вопрос

Начал играться с андроидом NDK.Одна из вещей, которую я только что узнал, — это создание файла application.mk для указания abi Armv7.

Я создаю пример Сан-Анджелеса со следующими параметрами.

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, и я предполагаю, что «большой палец» относится к инструкциям «thumb-2» (хотя я не знаю, что именно это такое).Однако этот «softfp» меня беспокоит.Разве это не должно быть «hardfp»?

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

Заранее здравствуйте!

Это было полезно?

Решение

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top