Ағымдағы SIMD кеңейтімдері - Streaming SIMD Extensions

Жылы есептеу, Ағымдағы SIMD кеңейтімдері (SSE) - бұл бір нұсқаулық, бірнеше мәліметтер (SIMD ) нұсқаулар жинағы дейін кеңейту x86 сәулет, Intel және 1999 жылы оларға енгізілген Pentium III сериясы Орталық процессорлар (CPU) пайда болғаннан кейін көп ұзамай Жетілдірілген микро құрылғылар (AMD) 3D! Енді!. SSE-де 70 жаңа нұсқаулық бар, олардың көпшілігі жұмыс істейді бір дәлдік өзгермелі нүкте деректер. SIMD нұсқаулары бірнеше деректер объектілерінде дәл осындай операцияларды орындау керек болған кезде өнімділікті айтарлықтай арттыра алады. Әдеттегі қосымшалар цифрлық сигналды өңдеу және графикалық өңдеу.

Intel алғашқы IA-32 SIMD күші болды MMX нұсқаулар жинағы. MMX екі негізгі проблемаға ие болды: ол бұрыннан бар қайта қолданылды x87 процессорларды өзгермелі нүктеде де, SIMD деректерінде де бір уақытта жұмыс істей алмайтын өзгермелі нүктелік регистрлер және ол тек жұмыс істеді бүтін сандар. SSE өзгермелі нүктелік нұсқаулықтары жаңа тәуелсіз регистрлер жиынтығында - XMM регистрлерінде жұмыс істейді және MMX регистрлерінде жұмыс істейтін бірнеше бүтін нұсқауларды қосады.

SSE кейін Intel кеңейтілді SSE2, SSE3, SSSE3, және SSE4. Ол өзгермелі нүктелік математиканы қолдайтындықтан, оның MMX-ге қарағанда қосымшалары кең болды және танымал болды. SSE2-ге бүтін қолдаудың қосылуы MMX-ті негізінен артық етті, дегенмен кейбір жағдайларда одан әрі өнімділікке қол жеткізуге болады[қашан? ] MMX-ті SSE операцияларымен қатар қолдану арқылы.

SSE бастапқыда шақырылды Катмайдың жаңа нұсқаулары (KNI), Катмай бірінші Pentium III ядролық нұсқасының код атауы. «Катмай» жобасы кезінде Intel оны өзінің алдыңғы қатарларынан, әсіресе олардың флагмандарынан ажыратуға тырысты Pentium II. Кейін оның атауы өзгертілді Интернет ағынды SIMD кеңейтімдері (ISSE[1]), содан кейін SSE. AMD соңында SSE нұсқауларына қолдау көрсете бастады Athlon XP және Дюрон (Morgan өзегі ) процессорлар.

Тіркеушілер

SSE бастапқыда сегіз жаңа 128-биттік регистрді қосты XMM0 арқылы XMM7. The AMD64 AMD кеңейтімдері (бастапқыда осылай аталады) x86-64) тағы сегіз регистр қосты XMM8 арқылы XMM15, және бұл кеңейтім Intel 64 сәулет. Сондай-ақ жаңа 32-биттік басқару / күй регистрі бар, MXCSR. Тіркелімдер XMM8 арқылы XMM15 тек 64 биттік жұмыс режимінде қол жетімді.

XMM registers.svg

SSE XMM регистрлері үшін тек деректердің бір түрін қолданды:

SSE2 кейінірек XMM регистрлерін қолдануды кеңейтеді:

  • екі 64 биттік екі дәлдік өзгермелі нүктелер немесе
  • екі 64 биттік бүтін сан немесе
  • төрт 32 биттік бүтін сан немесе
  • сегіз 16 биттік қысқа бүтін сан немесе
  • он алты 8 биттік байт немесе таңба.

Бұл 128 биттік регистрлер қосымша машиналық күйлер болғандықтан операциялық жүйе сақтау керек тапсырма қосқыштары, олар әдепкі бойынша амалдық жүйе оларға нақты мүмкіндік бермейінше ажыратылады. Бұл ОЖ-ны қалай қолдануды білуі керек дегенді білдіреді FXSAVE және FXRSTOR нұсқаулар, бұл бәрін сақтай алатын кеңейтілген жұп нұсқаулық x86 және бірден SSE регистр күйлері. Бұл қолдау барлық негізгі IA-32 операциялық жүйелеріне тез қосылды.

SSE-ге қолдау көрсететін бірінші процессор Pentium III, SSE мен өзгермелі нүкте бірлігі (FPU).[1] Әзірге құрастырылған бағдарлама FPU мен SSE нұсқауларын қатарласа алады, Pentium III FPU мен SSE нұсқауларын бірдей шығармайды сағат циклі. Бұл шектеу тиімділігін төмендетеді құбыр жүргізу, бірақ жеке XMM регистрлері нақты MMX / өзгермелі нүкте режимін ауыстыру кезінде орындалатын өнімділіксіз SIMD және скалярлық өзгермелі нүктелік операцияларды араластыруға мүмкіндік береді.

SSE нұсқаулары

SSE скалярлы және оралған өзгермелі нүктелік нұсқауларды енгізді.

Жылжымалы нұсқаулық

  • Тіркеуден жадқа / регистрден жадқа / регистрден тіркеуге мәліметтер қозғалысы
  • Арифметика
    • Скаляр - 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
  • Басқа
    • ПМОВМСКБ, ПШУФВ

Басқа нұсқаулар

  • MXCSR басқару
    • LDMXCSR, STMXCSR
  • Кэш пен жадыны басқару
    • MOVNTQ, MOVNTPS, MASKMOVQ, PREFETCH0, PREFETCH1, PREFETCH2, PREFETCHNTA, SFENCE

Мысал

Төмендегі қарапайым мысал SSE қолдану артықшылығын көрсетеді. Компьютерлік графика қосымшаларында жиі қолданылатын векторлық қосу сияқты әрекетті қарастырайық. Екі бірдей дәлдікті қосу үшін x86 көмегімен төрт компонентті векторлар төрт өзгермелі нүкте қосу нұсқауларын қажет етеді.

 vec_res.х = v1.х + v2.х; vec_res.ж = v1.ж + v2.ж; vec_res.з = v1.з + v2.з; vec_res.w = v1.w + v2.w;

Бұл объект кодындағы төрт x86 FADD нұсқауларына сәйкес келеді. Екінші жағынан, келесі псевдо-кодтан көрініп тұрғандай, скалярды қосу бойынша төрт нұсқаулықты 128 биттік «оралған-қосу» нұсқаулығы ауыстыра алады.

 жылжу xmm0, [v1] ; xmm0 = v1.w | v1.z | v1.y | v1.x  қосымшалар xmm0, [v2]  ; xmm0 = v1.w + v2.w | v1.z + v2.z | v1.y + v2.y | v1.x + v2.x жылжу [vec_res], xmm0  ; xmm0

Кейінгі нұсқалары

  • SSE2, Willamette жаңа нұсқаулары (WNI), -мен бірге енгізілген Pentium 4, бұл SSE-нің маңызды жетілдірілуі. SSE2 екі негізгі функцияны қосады: екі дәлдік (64 биттік) SSE барлық операциялары үшін өзгермелі нүкте және 128 биттік XMM регистрлеріндегі MMX бүтін операциялары. SSE нұсқауының түпнұсқалық жиынтығында бүтін сандарға ауысу және бүтін деректерді 64 биттік MMX регистрлеріне орналастырды. SSE2 бағдарламалаушыға кез-келген деректер типінде (8-биттік бүтіннен 64-биттік флотқа дейін) SIMM математикасын XMM векторлық-регистрлік файлымен толығымен, бұрынғы MMX немесе FPU регистрлерін қолданбай-ақ орындауға мүмкіндік береді. Ол ұсынады нұсқаулардың ортогоналды жиынтығы жалпы мәліметтер түрлерімен жұмыс істеуге арналған.
  • SSE3, сондай-ақ Prescott New Instructions (PNI) деп аталады, бұл DSP-ге бағытталған бірнеше математикалық нұсқаулар мен кейбір процестерді (ағындарды) басқару нұсқауларын қосып, SSE2-ге жоғарылату. SSE2 және одан бұрынғы нұсқаларда мүмкін болмаған бір регистрде сақталған екі санды қосуға немесе көбейтуге мүмкіндік берді. Intel терминологиясында көлденең деп аталатын бұл мүмкіндік SSE3 нұсқаулар жиынтығына негізгі қосымша болды. AMD Енді! кеңейту соңғысын да орындай алады.
  • SSSE3, Merom New Instructions (MNI) - бұл SSE3-ке жаңарту, оған 16 жаңа нұсқаулық қосылады, оларға байттарды сөзбен ауыстыру, 16 биттік тіркелген нүктелерді дұрыс дөңгелектеумен көбейту және сөз ішіндегі нұсқаулар жинақталады. SSSE3-ті SSE4 деп жиі қателеседі, өйткені бұл термин Core-ді әзірлеу кезінде қолданылған микроархитектура.
  • SSE4, Penryn New Instructions (PNI) - бұл тағы бір маңызды жетілдіру, нүктелік нұсқаулық, қосымша бүтін нұсқаулар, popcnt командалары және т.б.
  • XOP, FMA4 және CVT16 жариялаған жаңа қайталанулар болып табылады AMD 2007 жылдың тамызында[2][3] және 2009 жылдың мамырында қайта қаралды.[4]
  • Кеңейтілген векторлық кеңейтімдер (AVX), Gesher New Instructions (GNI) - бұл Intel жариялаған SSE-дің жетілдірілген нұсқасы, ол 128 биттен 256 битке дейін және 3-операнд нұсқауларымен (2-ден) кеңейтілген деректер жолын ұсынады. Intel процессорларды 2011 жылдың басында AVX қолдауымен шығарды.[5]
  • AVX2 - бұл AVX командалар жиынтығының кеңеюі.
  • AVX-512 (3.1 және 3.2) - бұл x86 командалар жиынтығының архитектурасына арналған 256-биттік векторлық кеңейтілген SIMD нұсқауларының 512-биттік кеңейтімдері.

Бағдарламалық жасақтама мен аппараттық құралдар мәселелері

Барлық x86 нұсқаулықтарының кеңейтулерімен, ол BIOS, олардың бар-жоғын және дұрыс жұмысын тексеруге және анықтауға арналған операциялық жүйе және қолданбалы бағдарламашы.

  • Intel және AMD процессордың қандай кеңейтімдерді қолдайтынын анықтауға арналған қосымшаларды ұсынады.
  • The CPUID opcode - процессордың x86 архитектурасына арналған қосымша нұсқауы (оның атауы CPU идентификациясынан алынған). Оны Intel 1993 жылы Pentium және SL-Enhanced 486 процессорларын енгізген кезде енгізген.

Пайдаланушы қосымшасын x86 кеңейтімдерін қабылдау ең төменгі деңгейге дейін баяу болды MMX және SSE қолдауы (кейбір жағдайларда) бұл кеңейтімдер жалпыға қол жетімді болғаннан кейін 10 жылдан кейін қолданбаларда жоқ. Таратылған есептеу ғылыми кеңістіктегі бұл кеңейтімдерді пайдалануды тездетті - және көптеген ғылыми қосымшалар CPU SSE2 немесе SSE3-ті қолдамайынша жұмыс істеуден бас тартады.

Қол жетімді кеңейтудің әр түрлі жиынтығына қарсы тұру үшін қосымшаны бірнеше рет қайта қарауды қолдану x86 кеңейтуді оңтайландыру мәселесінің қарапайым тәсілі болып табылады. Бағдарламалық жасақтама кітапханалары мен кейбір қосымшалар бірнеше кеңейту түрлерін қолдай бастады, олар x86 нұсқауларын толық пайдалану нұсқаулық енгізілгеннен кейін шамамен 5 - 15 жыл өткен соң кең таралуы мүмкін екенін айтады.

Анықтау

Жүйеде SSE нұсқаларының қайсысына қолдау көрсетілетінін анықтау үшін келесі бағдарламаларды қолдануға болады

  • Intel процессорының сәйкестендіру утилитасы[6]
  • CPU-Z - процессор, аналық плата және жадты анықтау утилитасы.
  • lscpu - GNU / Linux таратылымдарының көпшілігінде util-linux пакеті ұсынған.

Әдебиеттер тізімі

  1. ^ а б Диефендорф, Кит (8 наурыз, 1999). «Pentium III = Pentium II + SSE: Интернет SSE архитектурасы мультимедиялық өнімділігін арттырады» (PDF). Микропроцессорлық есеп. 13 (3). Алынған 1 қыркүйек, 2017.
  2. ^ Вэнс, Эшли (3 тамыз, 2007). «AMD x86 кеңейтілімімен бір ағынды күшейтуді жоспарлайды». Тізілім. Алынған 24 тамыз, 2017.
  3. ^ «AMD64 технологиясы: 128 биттік SSE5 нұсқаулары» (PDF). AMD. Тамыз 2007. Алынған 24 тамыз, 2017.
  4. ^ «AMD64 Technology AMD64 сәулет бағдарламашысының нұсқаулығы 6-том: 128 биттік және 256 биттік XOP және FMA4 нұсқаулары» (PDF). AMD. Қараша 2009. Алынған 24 тамыз, 2017.
  5. ^ Джиркар, Милинд (2013 ж. 1 қазан). «Intel® Advanced Vector Extensions (Intel® AVX)». Intel. Алынған 24 тамыз, 2017.
  6. ^ «Intel® процессорды сәйкестендіру утилитасын жүктеп алыңыз». Intel. 2017 жылғы 24 шілде. Алынған 24 тамыз, 2017.

Сыртқы сілтемелер