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.
боюсь, что все, что находится за пределами этого, является областью ассемблера.
MSDN имеет довольно хорошее описание встроенных компиляторов SSE (и эти встроенные де-факто стандартны, они даже работают в clang/XCode).
- http://msdn.microsoft.com/en-us/library/26td21ds.aspx
- http://msdn.microsoft.com/en-us/library/kcwz153a.aspx
хорошая вещь об этой ссылке заключается в том, что она показывает эквивалентный псевдокод, поэтому, например, вы можете узнать, что ADDPD инструкция это:
r0 := a0 + b0 r1 := a1 + b1и вот хорошее описание загадочной инструкции по перетасовке:http://www.songho.ca/misc/sse/sse.html
простой учебник? Насколько мне известно, нет.
но любая информация об использовании MMX или любой версии SSE будет полезна для обучения, будь то для GCC или для ICC или VC.
чтобы узнать о векторных расширениях GCC, введите "info gcc" и перейдите в узел: векторные расширения.
Comments