У меня есть C-код для Android, который делает много низкоуровневого хруста. Я хотел бы знать, какие настройки я должен использовать (например, для своих Android.mk и Application.mk), чтобы созданный код запускался на всех современных устройствах Android, но также использует оптимизацию для определенных наборов микросхем. Я ищу хорошие настройки Android.mk и Application.mk по умолчанию, и я хочу, чтобы не засорять мой код C ветвями #ifdef.
Например, я знаю, что ARMv7 имеет инструкции с плавающей запятой, а некоторые чипы ARMv7 поддерживают инструкции NEON и что ARM по умолчанию не поддерживает ни одно из них. Можно ли установить флаги, чтобы я мог строить ARMv7 с помощью NEON, ARMv7 без NEON и стандартной сборки ARM по умолчанию? Я знаю, как делать последние два, но не все. 3. Я осторожно отношусь к тем, какие настройки я использую, поскольку я предполагаю, что текущие значения по умолчанию являются самыми безопасными настройками и какие риски могут иметь другие параметры.
Для специальной оптимизации GCC я использую следующие флаги:
LOCAL_CFLAGS=-ffast-math -O3 -funroll-loops
Я проверил все 3 из этих скоростей моего кода. Есть ли другие общие, которые я мог бы добавить?
Еще один совет: добавить LOCAL_ARM_MODE: = arm в Android.mk, чтобы ускорить работу с новыми фишками (хотя я смущен точно, что это делает и что происходит на старых чипах).