gcc; Aarch64; Armv8; включить криптовалюту; -mcpu = cortex-a53 + крипто

Я пытаюсь оптимизировать процессор Arm (Corte-A53) с архитектурой Armv8 для криптографических целей.

Проблема в том, что компилятор принимает -mcpu=cortex-a53+crypto и т. Д., Но не меняет вывод (я проверил вывод сборки).

Меняя mfpu, mcpu добавляет фьючерсы, такие как crypto или simd, это не имеет значения, это полностью игнорируется.

Чтобы включить Neon code -ftree-vectorize, как использовать криптографию?

(Я проверил флаги -O (1,2,3), это не поможет).

Изменить: я понял, что совершил ошибку, подумав, что криптографический флаг работает как флаг оптимизации, решаемый компилятором. Виноват.


person koldewb    schedule 28.04.2015    source источник
comment
Почему вы ожидаете, что компилятор будет выдавать криптографические инструкции? Флаг компилятора, вероятно, предназначен только для проверки необязательного поведения.   -  person auselen    schedule 28.04.2015
comment
Какой код вы компилируете? Если вы на самом деле не строите, например криптографическая библиотека, содержащая некоторую сборку с использованием криптографических инструкций, простое включение их использования само по себе маловероятно. Я не верю, что GCC достаточно умен, скажите: эй, этот случайный код C выглядит как реализация SHA-1, давайте оптимизируем его! все само по себе ...   -  person Notlikethat    schedule 28.04.2015
comment
В коде используются инструкции AES, реализованные c, я ожидал (надеялся), что компилятор что-нибудь сделает с ним, например, флаг оптимизации. Я еще не нашел полезной документации (или реализаций) по этому поводу. Думаешь, флаг - это всего лишь проверка? Значит, весь код нужно писать как встроенную сборку?   -  person koldewb    schedule 28.04.2015
comment
да, я использую криптографическую библиотеку, но все это реализовано.   -  person koldewb    schedule 28.04.2015
comment
Полагаю, я вижу здесь свою ошибку, но, тем не менее, какой смысл в криптовалютном флаге?   -  person koldewb    schedule 28.04.2015
comment
Расширение Crypto не является обязательным для HW. Отсутствие флага помогает избежать случайной доставки криптографических инструкций на не поддерживающий процессор.   -  person auselen    schedule 28.04.2015
comment
Спасибо, я думаю, на данный момент это решено, однако это не объясняет, почему изменение флагов mcpu или mfpu не дает результата?   -  person koldewb    schedule 28.04.2015
comment
Они меняют вывод в целом, но, вероятно, не в вашем случае.   -  person auselen    schedule 28.04.2015
comment
Разница в том, что если ваш код действительно содержит инструкции шифрования, вы получите ошибку от ассемблера, если вы не включите эту функцию.   -  person Notlikethat    schedule 28.04.2015


Ответы (1)


У вас было два вопроса ...

Почему -mcpu=cortex-a53+crypto не меняет вывод кода?

Криптографические расширения являются дополнительной функцией в состоянии AArch64 ARMv8-A. Флаг функции +crypto указывает компилятору, что эти инструкции доступны для использования. С практической точки зрения в GCC 4.8 / 4.9 / 5.1 это определяет макрос __ARM_FEATURE_CRYPTO и контролирует, можете ли вы использовать криптографические встроенные функции, определенные в ACLE, например:

uint8x16_t vaeseq_u8 (uint8x16_t data, uint8x16_t key)

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

Почему флаги +fpu и +simd не изменяют вывод кода?

Для -mcpu=cortex-a53 флаги +fp и +simd подразумеваются по умолчанию (для некоторых конфигураций GCC +crypto также может подразумеваться по умолчанию). Поэтому добавление этих флагов функций не повлияет на генерацию кода.

person James Greenhalgh    schedule 29.04.2015