xmmintrin.h против векторных расширений gcc

Какой метод я должен предпочесть для написания SIMD-инструкций?

Методы mm* из *mmintrin.h кажутся более переносимыми между компиляторами.

Но gcc векторные расширения, кажется, производит намного более простой код и поддерживает больше архитектуры.

Итак, какой метод лучше?


person Charles Brunet    schedule 03.05.2011    source источник
comment
Вы можете использовать оба. Это то, чем я занимаюсь. Расширения векторов охватывают большинство вертикальных операций, которые вам следует использовать в большинстве случаев. Когда вам нужны другие операции, вы можете использовать их. Например, если у вас есть 16-байтовый вектор x, вы можете сделать _mm_movemask_epi8((__m128i)x).   -  person Z boson    schedule 17.01.2018


Ответы (2)


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

person Paul R    schedule 03.05.2011

Внутренние функции, доступные в файлах *mmintrin.h, доступны только на машинах SSE, но они доступны для разных компиляторов. Векторные расширения GCC более ограничены, но реализованы на более широком диапазоне платформ и, очевидно, специфичны для GCC.

Как и во всем, «лучшего» ответа не существует; вам придется выбрать тот, который соответствует вашим потребностям.

person Jasper Bekkers    schedule 03.05.2011