Введение

музыкальные ноты
SIMD в регистре (SWAR), также известный как "упакованный SIMD" – это техника выполнения параллельных операций над данными, содержащимися в регистре процессора. SIMD расшифровывается как "одна инструкция – множество данных". Таксономия Флинна 1972 года классифицирует SWAR как "конвейерную обработку". Многие современные универсальные компьютерные процессоры имеют определенные возможности для SIMD, в виде набора регистров и инструкций для их использования. SWAR относится к использованию этих регистров и инструкций, в отличие от использования специализированных вычислительных устройств, разработанных для более эффективного выполнения операций SIMD. Это также относится к использованию SIMD с универсальными регистрами и инструкциями, которые изначально не предназначались для этого, посредством различных нестандартных программных приемов.

Архитектура SWAR

Архитектура SWAR – это архитектура, включающая инструкции, явно предназначенные для выполнения параллельных операций над данными, хранящимися в независимых подсловах или полях регистра. Архитектура, поддерживающая SWAR, включает в себя набор инструкций, достаточный для независимой обработки данных, хранящихся в этих полях, даже если архитектура не содержит инструкций, специально предназначенных для этой цели. Ранним примером архитектуры SWAR был Intel Pentium с MMX, реализовавший набор расширений MMX. Intel Pentium, в отличие от этого, не включал такие инструкции, но все же мог функционировать как архитектура SWAR благодаря тщательному ручному кодированию или компиляторным приемам. К ранним архитектурам SWAR относятся DEC Alpha MVI (Motion Video Instructions), PA RISC MAX от Hewlett Packard, MIPS MDMX от Silicon Graphics Incorporated и SPARC V9 VIS от Sun. Как и MMX, многие наборы инструкций SWAR предназначены для ускоренного кодирования видео. В 1975 году. С появлением расширений мультимедийных инструкций Intel MMX в 1996 году настольные процессоры с возможностями параллельной обработки SIMD стали широко распространены. Первоначально эти инструкции можно было использовать только через ассемблерный код, написанный вручную. Осенью 1996 года профессор Хэнк Диц был преподавателем курса по разработке компиляторов в Школе электротехники и компьютерной инженерии Университета Пердью. Для этого курса он назначил серию проектов, в рамках которых студенты должны были создать простой компилятор, ориентированный на MMX. Язык ввода был подмножеством диалекта MPL от MasPar, называемым NEMPL (Not Exactly MPL). В ходе семестра помощнику преподавателя курса, Рэндаллу (Рэнди) Фишеру, стало ясно, что существует ряд проблем с MMX, которые затруднят создание бэк-энда компилятора NEMPL. Например, MMX имеет инструкцию для умножения 16-битных данных, но не для умножения 8-битных данных. Язык NEMPL не учитывал эту проблему, позволяя программисту писать программы, требующие умножения на 8 бит. Архитектура Intel x86 была не единственной, включавшей параллельные инструкции, подобные SIMD. Sun VIS, SGI MDMX и другие наборы мультимедийных инструкций были добавлены к существующим архитектурам наборов инструкций других производителей для поддержки так называемых приложений для новых медиа. Эти расширения имели существенные различия в точности данных и типах поддерживаемых инструкций. Диц и Фишер начали разрабатывать идею четко определенной параллельной модели программирования, которая позволила бы программировать, ориентируясь на модель, не зная особенностей целевой архитектуры. Эта модель стала основой диссертации Фишера. Акроним "SWAR" был придуман Дитцем и Фишером однажды в офисе Хэнка в здании MSEE в Университете Пердью. Он относится к этой форме параллельной обработки, архитектурам, предназначенным для выполнения этого типа обработки, и модели программирования общего назначения, которая является диссертацией Фишера. Проблема компиляции для этих сильно различающихся архитектур была обсуждена в докладе, представленном на LCPC98.