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

Начало работы с SSE

Я хочу узнать больше об использовании SSE.

Какими способами можно научиться, помимо очевидного чтения Руководства для разработчиков программного обеспечения Intel® 64 и IA-32?

В основном мне интересно работать с встроенными функциями GCC X86.

4b9b3361

Ответ 1

Во-первых, я не рекомендую использовать встроенные функции - они не переносимы (через компиляторы той же арки).

Использовать intrinsics, GCC выполняет замечательную работу, оптимизируя Идентификация SSE в еще более оптимизированный код. Вы всегда можете заглянуть в сборку и посмотреть, как использовать SSE для ее полного потенциала.

Intrinsics просты - как обычные вызовы функций:

#include <xmmintrin.h>

__m128 vector1 = _mm_set1_ps(4, 3, 2, 1); // Little endian, stored in 'reverse'
__m128 vector2 = _mm_set1_ps(7, 8, 9, 0);

// Addition
__m128 result = _mm_add_ps(vector1, vector2); // result = vector1 + vector 2

// A more advanced function, called shuffle
vector1 = _mm_shuf_ps(vector1, vector1, _MM_SHUFFLE(0,1,2,3));
// vector1 is now (1, 2, 3, 4) (above shuffle reversed it)

Конечно, есть еще несколько вариантов, SSE действительно мощная и, на мой взгляд, относительно легко учиться.

Ответ 2

Поскольку вы запрашивали ресурсы:

Практическое руководство по использованию SSE с С++: Хороший концептуальный обзор того, как эффективно использовать SSE, с примерами.

MSDN Список встроенных функций компилятора: всеобъемлющая ссылка для всех ваших внутренних потребностей. Это MSDN, но в значительной степени все встроенные функции, перечисленные здесь, также поддерживаются GCC и ICC.

Страница SSE Кристофера Райт: Краткая справка о значениях кодов операций SSE. Я думаю, что руководства Intel могут выполнять одну и ту же функцию, но это быстрее.

Вероятно, лучше всего написать большую часть вашего кода в intrinsics, но проверьте objdump вашего вывода компилятора, чтобы убедиться, что он создает эффективный код. Генерация кода SIMD по-прежнему является довольно новой технологией, и очень возможно, что в некоторых случаях компилятор может ошибиться.

Ответ 3

Я считаю, что доктора Агнера Фога и руководства по исследованиям и оптимизации очень ценны! У него также есть некоторые библиотеки и инструменты для тестирования, которые я еще не пробовал. http://www.agner.org/optimize/