SSE, SSE2 и SSE3 для GNU C++ [закрыто]
Проблема:
Я новичок в области программирования на C++ и хочу узнать о SIMD-инструкциях, в частности о SSE, SSE2 и SSE3. Я ищу простое руководство, которое поможет мне быстрее разобраться в этих технологиях. Есть ли доступные ресурсы, такие как учебники или примеры кода, которые могут помочь в оптимизации кода с использованием SIMD?
Однако я столкнулся с проблемой: мой вопрос был закрыт на Stack Overflow с пометкой о том, что он не соответствует рекомендациям сайта и не принимает ответы. Я понимаю, что вопросы о рекомендациях по программному обеспечению, библиотекам или источникам за пределами сайта не допускаются.
Каким образом я могу изменить свой вопрос, чтобы он соответствовал правилам и его можно было бы ответить конкретными фактами и цитатами? Какую информацию мне следует добавить или переформулировать, чтобы получить помощь в оптимизации кода с использованием SSE-инструкций?
Спасибо за предварительное сотрудничество!
2 ответ(ов)
Самая простая оптимизация, которую можно использовать, это разрешить GCC генерировать код с использованием SSE.
Флаги: -msse
, -msse2
, -msse3
, -march=
, -mfpmath=sse
Для более краткого списка опций для 386 можно ознакомиться с документацией GCC, а для более точной информации, касающейся вашей конкретной версии компилятора, посетите этот ресурс.
Для оптимизации всегда рекомендуют ознакомиться с ресурсами Агнера Фога: agner.org/optimize. Я не уверен, что у него есть учебные материалы по SSE для интринзиков, но он предлагает много интересных приемов стандартного C++ и предоставляет множество информации о кодировании SSE на ассемблере (что часто может быть транскрибировано в интринзики).
Простого руководства? Насколько мне известно, нет.
Тем не менее, любая информация о использовании MMX или любой версии SSE будет полезна для изучения, независимо от того, используете ли вы GCC, ICC или VC.
Чтобы узнать о векторных расширениях GCC, наберите команду "info gcc" и перейдите в раздел Node: Vector Extensions.
Как сравнить float и double, учитывая потерю точности?
Программа, скомпилированная с флагом -g в gcc, работает медленнее, чем та же программа, скомпилированная без -g?
Как удалить элемент из std::vector<> по индексу?
`unsigned int` против `size_t`: когда и что использовать?
Какова разница между "new", "malloc" и "calloc" в C++?