Подтвердить что ты не робот

SSE SSE2 и SSE3 для GNU С++

Есть ли у меня простой учебник для ускорения работы в SSE, SSE2 и SSE3 в GNU С++? Как вы можете оптимизировать код в SSE?

4b9b3361

Ответ 1

Извините, не знаю урока.

Ваш лучший выбор (IMHO) - использовать SSE через "внутренние" функции, которые Intel предоставляет для обертывания (обычно) одиночных инструкций SSE. Они доступны через набор включенных файлов с именем * mmintrin.h, например xmmintrin.h, это оригинальный набор инструкций SSE.

Начните знакомство с содержанием Intel Optimization Справочное руководство - это хорошая идея (см. раздел 4.3.1.2 для примера встроенных функций) и разделы SIMD являются важными показаниями. Справочные руководства по набору инструкций также очень полезны, поскольку каждая инструкция по документации включает в себя "внутреннюю" функцию, соответствующую ей.

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

Обновление 2011-05-31: Существует очень приятное освещение внутренних и векторизации в Agner Fog PDF файлы оптимизации (спасибо), хотя он немного распространяется (например, раздел 12 первый и раздел 5 второй). Это не совсем учебный материал (на самом деле есть предупреждение "эти руководства не для новичков" ), но они справедливо рассматривают SIMD (независимо от того, используется ли он через asm, intrinsics или vectorization), как только одна часть более крупного инструментария оптимизации.

Обновление 2012-10-04: хорошая статья Linux Journal о gcc vector intrinsics заслуживает упоминания Вот. Более общий, чем SSE (также включает расширения PPC и ARM). Там была хорошая коллекция ссылок на последняя страница, которая привлекла мое внимание к Intel "руководство по эксплуатации" .

Ответ 2

Самая простая оптимизация для использования - позволить gcc испускать код SSE.

Флаги: -msse, -msse2, -msse3, -march =, -mfpmath = sse

Более подробный список о 386 опциях см. в http://gcc.gnu.org/onlinedocs/gcc-4.3.3/gcc/i386-and-x86_002d64-Options.html#i386-and-x86_002d64-Options, более точная документация для вашей конкретной версии компилятора: http://gcc.gnu.org/onlinedocs/.

Для оптимизации всегда проверяйте Agner Fog's: http://agner.org/optimize/. Я думаю, что у него нет учебных пособий по SSE для встроенных функций, но у него есть некоторые действительно опрятные трюки std-С++, а также много информации о кодировании SSE-сборки (которая часто может быть расшифрована для встроенных функций).

Ответ 3

Проверьте параметры -mtune и -march, -msse * и -mfpmath, конечно. Все они позволяют GCC выполнять оптимизацию SSE.

Что-то кроме этого есть область Ассемблера, я боюсь.

GCC Online Manual - i386 и x86_64 Параметры

Ответ 4

MSDN имеет довольно хорошее описание встроенных встроенных компиляторов SSE (и эти встроенные модули де-факто стандартизированы, они даже работают в clang/XCode).

Хорошая вещь в этой ссылке заключается в том, что она показывает эквивалентный псевдокод, например, вы можете узнать, что ADDPD инструкция:

r0 := a0 + b0
r1 := a1 + b1

И здесь хорошее описание инструкции cryptic shuffle: http://www.songho.ca/misc/sse/sse.html

Ответ 5

Простой учебник? Не то, чтобы я знал.

Но любая информация об использовании MMX или любой версии SSE будет полезна для обучения, будь то для GCC или для ICC или VC.

Чтобы узнать о расширении вектора GCC, введите "info gcc" и перейдите к Node: Vector Extensions.