Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

Из Википедии — свободной энциклопедии

SSE (англ. Streaming SIMD Extensions, потоковое SIMD-расширение процессора) — это SIMD- (англ. Single Instruction, Multiple Data, Одна инструкция — множество данных) набор инструкций, разработанный Intel и впервые представленный в процессорах серии Pentium III как ответ на аналогичный набор инструкций 3DNow! от AMD, который был представлен годом раньше. Первоначально названием этих инструкций было KNI — Katmai New Instructions (Katmai — название первой версии ядра процессора Pentium III).

Технология SSE позволяла преодолеть две основные проблемы MMX: при использовании MMX невозможно было одновременно использовать инструкции сопроцессора, так как его регистры были общими с регистрами MMX, и возможность MMX работать только с целыми числами.

SSE включает в архитектуру процессора восемь 128-битных регистров и набор инструкций, работающих со скалярными и упакованными типами данных.

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

Особенности

  • 8 (в x86-64 — 16) 128-битных регистров XMM.
  • 32-битный (в x86-64 — 64) регистр флагов (MXCSR).
  • 128-битный упакованный тип данных с плавающей точкой одинарной точности.
  • Инструкции над вещественными числами одинарной точности.
  • Инструкции явной предвыборки данных, контроля кэширования данных и контроля порядка операций сохранения.

Регистры

В SSE добавлены восемь (шестнадцать для x64) 128-битных регистров, которые называются xmm0 — xmm7 (-xmm15).

Каждый регистр может содержать четыре 32-битных значения с плавающей запятой одинарной точности.

SSE-команды

Команды для чисел с плавающей точкой

  • Команды пересылки
    • Скалярные типы — MOVSS
    • Упакованные типы — MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS
  • Арифметические команды
    • Скалярные типы — ADDSS, SUBSS, MULSS, DIVSS, RCPSS, SQRTSS, MAXSS, MINSS, RSQRTSS
    • Упакованные типы — ADDPS, SUBPS, MULPS, DIVPS, RCPPS, SQRTPS, MAXPS, MINPS, RSQRTPS
  • Команды сравнения
    • Скалярные типы — CMPSS, COMISS, UCOMISS
    • Упакованные типы — CMPPS
  • Перемешивание и распаковка
    • Упакованные типы — SHUFPS, UNPCKHPS, UNPCKLPS
  • Команды для преобразования типов
    • Скалярные типы — CVTSI2SS, CVTSS2SI, CVTTSS2SI
    • Упакованные типы — CVTPI2PS, CVTPS2PI, CVTTPS2PI
  • Битовые логические операции
    • Упакованные типы — ANDPS, ORPS, XORPS, ANDNPS

Команды для целых чисел

  • Арифметические команды
    • PMULHUW, PSADBW, PAVGB, PAVGW, PMAXUB, PMINUB, PMAXSW, PMINSW
  • Команды пересылки
    • PEXTRW, PINSRW
  • Другие
    • PMOVMSKB, PSHUFW

Другие команды

  • Работа с регистром MXCSR
    • LDMXCSR, STMXCSR
  • Управление кэшем и памятью
    • MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE

Пример

Следующий пример демонстрирует перемножение четырёх пар чисел с плавающей точкой одной инструкцией mulps: (Программа написана на языке ANSI C++ с использованием ассемблерной вставки __asm и инструкций ассемблера для работы с SSE, аргументы записаны согласно стандарту Intel, а не AT&T)

__declspec(align(16)) float a[4] = { 300.0, 4.0, 4.0, 12.0 };
__declspec(align(16)) float b[4] = {   1.5, 2.5, 3.5,  4.5 };
 
__asm {
    movups xmm0, a    ; // поместить 4 переменные с плавающей точкой из a в регистр xmm0
    movups xmm1, b    ; // поместить 4 переменные с плавающей точкой из b в регистр xmm1
    mulps xmm0, xmm1  ; // перемножить пакеты плавающих точек: xmm0 = xmm0 * xmm1
                      ; // xmm00 = xmm10 * xmm00
                      ; // xmm01 = xmm11 * xmm01
                      ; // xmm02 = xmm12 * xmm02
                      ; // xmm03 = xmm13 * xmm03
 
    movups a, xmm0    ; // выгрузить результаты из регистра xmm0 по адресам a
};

Тот же пример, но ассемблерная вставка asm выполнена в стандарте AT&T (GNU Assembler)

float a[4] = { 300.0, 4.0, 4.0, 12.0 };
float b[4] = {   1.5, 2.5, 3.5,  4.5 };
 
 __asm__ volatile
 (
  "movups %[a], %%xmm0\n\t"	// поместить 4 переменные с плавающей точкой из a в регистр xmm0
  "movups %[b], %%xmm1\n\t"	// поместить 4 переменные с плавающей точкой из b в регистр xmm1
  "mulps %%xmm1, %%xmm0\n\t"	// перемножить пакеты плавающих точек: xmm0 = xmm0 * xmm1
				// xmm00 = xmm00 * xmm10
				// xmm01 = xmm01 * xmm11
				// xmm02 = xmm02 * xmm12
				// xmm03 = xmm03 * xmm13
  "movups %%xmm0, %[a]\n\t"	// выгрузить результаты из регистра xmm0 по адресам a
  :
  : [a]"m"(*a), [b]"m"(*b)
  : "%xmm0", "%xmm1"
 );

См. также

Ссылки

Эта страница в последний раз была отредактирована 21 января 2022 в 10:28.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).