SIMD параллелизм. Основные классы SIMD компьютеров. Векторные команды в процессорах с архитектурой x86/x86_64.
SIMD— принцип компьютерных вычислений, позволяющий обеспечить параллелизм на уровне данных. Один из классов вычислительных систем в классификации Флинна. Классификация Флинна ( SISD; SIMD: –векторные, матричные, –ассоциативные, систолические, –VLIW;MISD; MIMD) Классы: Симметричные мультипроцессорные системы (SMP), Системы с неоднородным доступом к памяти (NUMA) Параллельные векторные системы (PVP) Массивно-параллельные системы (MPP) Кластерные системы(COW) NOW (Network of Workstation) Техника использования графического процессора видеокарты(GPGPU) Программируемая пользователем вентильная матрица (FPGA) Векторные расширения включают: – Векторные регистры – хранят множества скалярных значений • Примеры: mm0-mm7, xmm0-xmm15, ymm0-ymm15 – Векторные команды – для работы с векторными регистрами • paddb mm1,mm3; mulpd xmm0, xmm1 Особенности векторных команд работы с памятью: – Существуют команды выровненного и невыровненного обращения к памяти – Команды выровненного обращения требуют выровненного адреса и работают максимально быстро – Команды невыровненного обращения могут обращаться по любому адресу, но могут работать медленнее SIMD расширения на x86/x86_64 • MMX (Регистры: 8 64-битных регистров 57 инструкций. Арифметика с Насыщением. Ограничения MMX: Нет чисел с плавающей запятой, регистры MMX совмещены с регистрами математического сопроцессора. Нельзя одновременно использовать MMX и сопроцессор) • 3DNow ( Оно позволяет оперировать с новым типом данных – парой упакованных чисел в формате с плавающей точкой. Эти числа занимают по 2 * 32 бита в 64-х битовых регистрах ММХ. В систему команд добавлена 21 новая инструкция, большая часть которых предназначена для обработки упакованных чисел с плавающей точкой.)
• SSE (Pentium III, 8 128-битных регистров. Операции над: 4 числами float (32), 2 числами llint(64) Векторные и скалярные операции) • SSE2 (Pentium 4 ,Возможна совместная работа с сопроцессором 128-битный регистр используется как: Числа double Числа float Целых чисел)
• SSE3( Pentium 4 с ядром Prescott Горизонтальная обработка (сложение и вычитание значений внутри одного регистра)) • SSE4 ( Регистры: 8 (16) × 16 байт • Типы данных: целочисленные, float, double • +Горизонтальные операции, специальные операции) • AVX (Регистры: 16 × 32 байта • Типы данных: float, double • Команды с двумя источниками и приемником) Программирование с использованием векторных расширений x86/x86_64 SSE. Принцип – одновременная обработка нескольких элементов данных в одной команде. Расширение SSE (Streaming SIMD Extension) С процессором IntelPentiumIII впервые появилось расширение SSE. Это расширение работает с независимым блоком из восьми 128-битных регистров XMM0-XMM7. Каждый регистр XMM представляет собой четыре упакованных 32-битных вещественных числа с одинарной точностью. Команды блока XMM позволяют выполнять как векторные (над всеми четырьмя значениями регистра), так и скалярные операции (только над одним самым младшим значением). Кроме команд для работы с блоком XMM в расширение SSE входят и дополнительные целочисленные команды для работы с регистрами MMX, а также команды управления кэшированием. В архитектуре x86-64 число регистров XMM было увеличено до 16-ти: XMM0-XMM15. Функция выделения памяти . #include <xmmintrin.h> float *x; // массив для обработки с помощью SSE x=(float)_mm_malloc(N*sizeof(float),16); // : здесь обработка : _mm_free(x); Арифметические функции _mm_add_ss _mm_add_ps _mm_sub_ss _mm_sub_ps _mm_mul_ps _mm_div_ps _mm_sqrt_ps
_mm_min_ps _mm_max_ps Логические функции _mm_and_ps _mm_or_ps _mm_xor_ps _mm_andnot_ps
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\Добавил/////////////////////////////////////////////////////////////////////////// SSE состоит из: SIMD расширение добавляет восемь (или 16, если процессор64-битный) 128-битных регистров XMM (XMM0-XMM7), разделённых на четыре 32-битных (одинарной точности)регистра с плавающей точкой. Также, в составе есть 32-битный (в x86-64 – 64-битный) регистр управления и контроля, который также нужен для проверки состояния SSE инструкций. Так как каждый регистр имеет 128-бит, может хранить всего 4из32-разрядных чисел с плавающей точкой (1—бит знака,8-бит экспоненты, 23-х разрядная мантисса). На самом деле, за один такт могут выполняться любые данные помещающиеся в128 бит (буквы, целые числа, байты, с двойной точностью и т.д.) и всё зависит от оптимизации программы под определённую задачу.
Учитывая стандартную 32-разрядную машину таким образом, мы можем хранить и обрабатывать параллельно: · 2 double · 2 long · 4 float · 4 int · 8 short · 16 char Благодаря SSE получается очень большой выигрыш в производительности, благодаря распараллеливанию вычислительных потоков данных (4 вычисления за такт). SSE может одновременно использовать свои инструкции вместе с инструкциями сопроцессора, так как регистры SSE и сопроцессора не являются общими. Это ещё одно неоспоримое преимущество, впрочем, как и возможность работать не с целыми числами.
Популярное: Почему стероиды повышают давление?: Основных причин три... Как распознать напряжение: Говоря о мышечном напряжении, мы в первую очередь имеем в виду мускулы, прикрепленные к костям ... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (860)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |