SSE SSE2 и SSE3 для GNU C++



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

689   5  

5 ответов:

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

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

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

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

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

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

самая простая оптимизация для использования-это позволить 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:http://agner.org/optimize/ . Я думаю, что у него нет учебников SSE для встроенных функций, но у него есть некоторые действительно аккуратные трюки std-c++, а также много информации о кодировании сборки SSE (которая часто может быть расшифрована для встроенных функций).

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

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

GCC Online Manual-i386 и x86_64 Options

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

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

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

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

простой учебник? Насколько мне известно, нет.

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

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

Comments

    Ничего не найдено.