Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
12-12-2013_11-21-32 / Посовие_1.docx
Скачиваний:
93
Добавлен:
10.05.2015
Размер:
217.48 Кб
Скачать

3. Загрузка невыровненных переменных. Данную подгруппу представляет инструкция lddqu.

Данная команда осуществляет операцию особой загрузки невыровненного 128-разрядного значения из памяти, исключающая возможность «разрыва» (пересечения границы) строки кэша. В случае, если адрес загружаемого элемента выровнен по 16-байтной границе, команда LDDQU осуществляет обычную загрузку запрашиваемого 16-байтного значения (т.е., по сути, ведет себя аналогично инструкциям MOVAPS/MOVAPD/MOVDQA из стандартного набора SSE/SSE2). В противном случае LDDQU загружает целых 32 байта, начиная с выровненного адреса (ниже запрашиваемого) с последующим извлечением требуемых 16 байт. Использование этой инструкции позволяет достичь значительного увеличения производительности при загрузке невыровненных 128-разрядных значений из памяти, по сравнению со стандартными инструкциями MOVUPS/MOVUPD/MOVDQU SIMD-расширений SSE/SSE2;

4. одновременное сложение/вычитание. В эту подгруппу входят две новые инструкции, первая из которых работает с четырехкомпонентными векторами чисел одинарной точности (SSE), вторая — с двухкомпонентными векторами чисел двойной точности (SSE2).

Команда ADDSUBPS — сложение второго и четвертого элементов с одинарной точностью с одновременным вычитанием первого и третьего элементов. Эта инструкция используется при работе с комплексными числами в случае использования соответствующего типа переменных.

Операнд A (128 бит, 4 элемента): a3 | a2 | a1 | a0 Операнд B (128 бит, 4 элемента): b3 | b2 | b1 | b0 ADDSUBPS A, B Результат (операнд A): a3+b3 | a2-b2 | a1+b1 | a0-b0

Команда ADDSUBPD — ведет себя аналогично, но работает с числами двойной точности (двухэлементными операндами SSE2):

Операнд A (128 разрядов, 2 элемента): a1 | a0 Операнд B (128 разрядов, 2 элемента): b1 | b0 ADDSUBPD A, B Результат (операнд A): a1+b1 | a0-b0;

5.горизонтальное сложение/вычитание. Пятая подгруппа представлена четырьмя командами, осуществляющими принципиально новые операции для SIMD расширений семейства SSE/SSE2. Первые две из них работают с четырехкомпонентными векторами с одинарной точностью, остальные — с двухкомпонентными векторами с двойной точностью.

Команда HADDPS — осуществляет горизонтальное сложение элементов с одинарной точностью. Первый элемент, записываемый в операнд назначения, является суммой первого и второго элементов первого (исходного) операнда; второй элемент — суммой третьего и четвертого элементов первого операнда; третий элемент — суммой первого и второго элементов второго операнда (операнда назначения) и, наконец, четвертый элемент — суммой третьего и четвертого элементов второго операнда.

Операнд A (128 разрядов, 4 элемента): a3 | a2 | a1 | a0 Операнд B (128 разрядов, 4 элемента): b3 | b2 | b1 | b0 HADDPS A, B Результат (операнд A): b2+b3 | b0+b1 | a2+a3 | a0+a1

Команда HSUBPS — осуществляет горизонтальное вычитание элементов с одинарной точностью. Ее поведение аналогично HADDPS, единственным отличием является использование операции вычитания вместо сложения:

Операнд A (128 разрядов, 4 элемента): a3 | a2 | a1 | a0 Операнд B (128 разрядов, 4 элемента): b3 | b2 | b1 | b0 HSUBPS A, B Результат (операнд A): b2-b3 | b0-b1 | a2-a3 | a0-a1

Команда HADDPD — осуществляет горизонтальное сложение элементов с двойной точностью. Первым (нижним) результирующим элементом является сумма нижней и верхней частей первого (исходного) операнда, вторым (верхним) — сумма нижней и верхней половин второго операнда (операнда назначения):

Операнд A (128 разрядов, 2 элемента): a1 | a0 Операнд B (128 разрядов, 2 элемента): b1 | b0 HADDPD A, B Результат (операнд A): b0+b1 | a0+a1

Команда HSUBPD — осуществляет горизонтальное вычитание элементов с двойной точностью. Эта инструкция аналогична HADDPS, но использует операцию вычитания вместо сложения:

Операнд A (128 разрядов, 2 элемента): a1 | a0 Операнд B (128 разрядов, 2 элемента): b1 | b0 HSUBPD A, B Результат (операнд A): b0-b1 | a0-a1;

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

Соседние файлы в папке 12-12-2013_11-21-32