SIMD и векторные процессоры
SIMD и векторные процессоры используют параллелизм на уровне данных, применяя одну инструкцию ко многим элементам данных одновременно, что ускоряет регулярные, повторяющиеся вычисления, такие как мультимедийные, научные и машинные ядра.
Definition
SIMD (single-instruction multiple-data — одна инструкция — множество данных) и векторная обработка — это архитектурные методы, при которых одна инструкция одновременно выполняет одну и ту же операцию над несколькими элементами данных, хранящимися в широких векторных регистрах или SIMD-каналах, используя параллелизм на уровне данных.
Scope
Эта тема охватывает выполнение одной инструкции с множеством данных: классические векторные процессоры с векторными регистрами и конвейерными каналами, SIMD-расширения в коммерческих ЦП, маскирование и предикацию, а также условия, при которых параллелизм данных является выгодным. Она рассматривает архитектуру аппаратуры с параллельной обработкой данных. Она исключает параллелизм на уровне потоков между ядрами (многоядерные и многопроцессорные чипы) и модель массово-многоядерных графических процессоров (архитектура графических процессоров), с которыми она пересекается.
Core questions
- Как применение одной инструкции ко многим элементам данных обеспечивает параллельное ускорение?
- Чем векторные процессоры отличаются от SIMD-расширений в коммерческих ЦП?
- Как обрабатываются условные операции с помощью маскирования и предикации?
- Какие виды вычислений получают наибольшую выгоду от параллельного выполнения данных?
Key concepts
- одна инструкция — множество данных (SIMD)
- векторные регистры и каналы
- длина вектора и strip mining
- маскирование и предикация
- gather/scatter
- SIMD-расширения ЦП
- параллелизм на уровне данных
- выполнение, ориентированное на пропускную способность
Key theories
- Параллелизм на уровне данных посредством одной инструкции — множества данных
- Когда одна и та же операция применяется независимо ко многим элементам массива, одна инструкция может управлять множеством параллельных каналов или конвейерным векторным блоком, амортизируя выборку инструкций и управление над большими данными и обеспечивая высокую пропускную способность для регулярных вычислений.
Mechanisms
Векторный процессор хранит массивы элементов в векторных регистрах и обрабатывает их через конвейерные или реплицированные функциональные блоки, при этом одна инструкция задает операцию над всем вектором; длинные векторы обрабатываются частями (strip mining). SIMD-расширения в ЦП предоставляют регистры фиксированной ширины, работающие поэлементно. Маскирование позволяет выполнять условные операции для каждого элемента, а операции gather/scatter обрабатывают несмежный доступ к памяти.
Clinical relevance
Аппаратные средства с параллельной обработкой данных обеспечивают большую часть пиковой пропускной способности современных процессоров. SIMD-расширения ускоряют медиакодеки, обработку изображений, физические расчеты и плотную линейную алгебру, лежащую в основе глубокого обучения, в то время как векторные архитектуры обеспечивают работу суперкомпьютеров. Эффективное использование зависит от компиляторов и программистов, выявляющих регулярные, векторизуемые вычисления.
History
Векторная обработка была впервые применена в суперкомпьютерах, таких как CDC STAR-100 и особенно Cray-1 в 1970-х годах. Параллелизм данных вновь появился в коммерческих ЦП благодаря SIMD-расширениям (MMX, SSE, AVX, NEON) с конца 1990-х годов, а масштабируемые векторные расширения и возрождение плотных численных рабочих нагрузок возобновили интерес к векторным архитектурам.
Key figures
- Seymour Cray
- Michael J. Flynn
- John L. Hennessy
- David A. Patterson
Related topics
Seminal works
- hennessy2019
- patterson2020
Frequently asked questions
- В чем разница между SIMD-расширениями и векторным процессором?
- SIMD-расширения добавляют регистры фиксированной ширины (например, 128 или 256 бит) к обычному ЦП, работая с заданным числом элементов за инструкцию. Векторный процессор построен на векторных регистрах и инструкциях, которые оперируют длинными, часто переменной длины векторами, как правило, через глубоко конвейерные каналы.
- Почему не все программы получают выгоду от SIMD?
- SIMD ускоряет вычисления, которые применяют одну и ту же операцию ко многим независимым элементам данных с регулярным доступом к памяти. Программы, в которых преобладают ветвления, нерегулярные зависимости данных или разрозненный доступ к памяти, получают мало выгоды, потому что параллельные каналы не могут быть эффективно загружены.