SSE SSE2 и SSE3 для GNU C ++ - PullRequest
       10

SSE SSE2 и SSE3 для GNU C ++

54 голосов
/ 19 марта 2009

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

Ответы [ 5 ]

59 голосов
/ 19 марта 2009

Извините, не знаю учебник.

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

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

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

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

Обновление 2012-10-04: A Хорошая небольшая статья в журнале Linux о внутренних свойствах gcc заслуживает упоминания здесь. Более общий, чем просто SSE (также распространяется на расширения PPC и ARM). На последней странице 1030 * есть хорошая коллекция ссылок, в которых я обратил внимание на "Руководство по встроенным функциям" Intel .

20 голосов
/ 24 марта 2009

Самая простая оптимизация для использования - разрешить 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-c ++, а также есть много информации о кодировании сборки SSE (которую часто можно отнести к встроенным функциям).

8 голосов
/ 19 марта 2009

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

Боюсь, все, что находится за пределами этого, является ассемблером.

Электронное руководство GCC - Опции i386 и x86_64

3 голосов
/ 19 августа 2011

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

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

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

А вот хорошее описание инструкции по загадочному перемешиванию: http://www.songho.ca/misc/sse/sse.html

1 голос
/ 19 марта 2009

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

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

Чтобы узнать о векторных расширениях GCC, введите "info gcc" и перейдите в узел: Векторные расширения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...