Псевдоним векторных данных NEON - PullRequest
2 голосов
/ 26 августа 2011

Поддерживает ли NEON совмещение имен векторных типов с их скалярными компонентами?

Например (Intel SSE)

typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));

Вышеуказанное позволит мне сделать:

__m128i* somePtr;
somePtr++;//advance to the next block

Псевдоним а-ля Intel позволит продвинуть мой указатель на следующий блок, который я хочу обработать, без управления дополнительными подсчетами и индексами.

Ответы [ 3 ]

2 голосов
/ 31 августа 2012

Атрибут __may_alias__ в __m128i следует рассматривать как обходной путь, который позволяет писать код с точным сглаживанием, даже если Intel полностью испортил сигнатуры некоторых из СМОТРЕТЬ загрузку / хранение встроенных функций. (8-байтовая загрузка _mm_loadl_epi64(const __m128i*) - самый веселый пример, но есть и другие). ARM правильно поняла свою сущность, поэтому __may_alias__ не требуется.

Просто используйте указатели на тип элемента и используйте явные загрузки и сохранения. По моему опыту, это приводит к созданию лучшего кода и, вероятно, также более переносимо. (Разрешает ли спецификация языка ARM C даже указатели на типы NEON? Я не удивлюсь, если они этого не сделают).

1 голос
/ 05 марта 2012

Реализация NEON intrinsics НЕ поддерживает совмещение имен векторных типов с их скалярными компонентами.

0 голосов
/ 26 августа 2011

GCC поддерживает множество встроенных функций, когда вы указываете -mfpu_neon.Я предполагаю, что одна из тех, которые вас заинтересуют, - int32x4_t.Более подробную информацию обо всех доступных типах можно найти на сайте ARM .

...