Кіріспе

Параллель өңдеу түрі

Бірыңғай нұсқау, бірнеше дерек (SIMD) – Флинн таксономиясындағы параллель өңдеудің бір түрі. SIMD жабдықтың құрамына кіретін ішкі түрде де, нұсқаулар жиынтығы архитектурасы (ISA) арқылы тікелей қолжетімді болатын түрде де болуы мүмкін, бірақ оны ISA-мен шатастыруға болмайды. SIMD бірнеше өңдеу элементтері бар және бір уақытта бірнеше дерек нүктесінде бірдей операцияны орындайтын компьютерлерді сипаттайды. Мұндай машиналар дерек деңгейіндегі параллелизмді пайдаланады, бірақ қатарластырылмайды: бір мезгілде (параллель) есептеулер жүзеге асырылады, бірақ әрбір элемент кез келген уақытта бірдей нұсқауды орындайды (тек әртүрлі деректермен). SIMD әсіресе цифрлық кескіннің контрастын немесе цифрлық аудионың дыбыс деңгейін реттеу сияқты жиі кездесетін тапсырмалар үшін қолданылады. Көптеген қазіргі заманғы процессорлар (CPU) мультимедиа қолданудың өнімділігін арттыру үшін SIMD нұсқауларын қамтиды. SIMD Флинннің 1972 жылғы таксономиясында үш кіші категорияға бөлінеді, олардың бірі – SIMT. SIMT бағдарламалық немесе аппараттық жіптермен шатастырылмауы керек, олардың екеуі де тапсырма уақытын бөлісу (уақыт тілімі) болып табылады. SIMT – нақты бір мезгілде аппараттық деңгейде параллель орындалу. Қазіргі заманғы графикалық процессорлар (GPU) көбінесе кеңейтілген SIMD жүзеге асыру болып табылады және бір уақытта 128 немесе 256 биттік тармақталуға, жүктеуге және сақтауға қабілетті.

Тарих

SIMD нұсқауларын алғаш рет 1966 жылы аяқталған ILLIAC IV қолданды. SIMD 1970 жылдар басындағы CDC Star 100 және Texas Instruments ASC сияқты векторлық суперкомпьютерлердің негізі болды, олар бір нұсқау арқылы деректердің «векторы» бойынша жұмыс істей алды. Векторлық өңдеуді Крей 1970 және 1980 жылдары ерекше дамытты. Векторлық өңдеу архитектуралары қазір SIMD компьютерлерінен бөлек саналады: Дунканның таксономиясы оларды Флинн таксономиясына қоспайды, себебі Флинннің жұмысы (1966, 1972) Cray 1 (1977) құрылымынан бұрын жасалған. Қазіргі заманғы SIMD компьютерлерінің алғашқы кезеңі Thinking Machines CM 1 және CM 2 сияқты, үлкен параллель өңдеу стиліндегі суперкомпьютерлермен ерекшеленді. Бұл компьютерлерде көптеген, шектеулі мүмкіндіктерге ие процессорлар параллель жұмыс істеді. Мысалы, Thinking Machines CM 2 жүйесіндегі 65 536 бір биттік процессордың әрқайсысы бір уақытта бір нұсқауды орындап, 65 536 бит жұбын бір уақытта логикалық түрде біріктіруге мүмкіндік берді. Бұл үшін гиперкуб байланыс желісі немесе процессорға арналған жеке RAM пайдаланылып, операндар табылатын еді. Intel i860 XP сияқты, арзан скалярлы MIMD тәсілдері күштірек болғанда суперкомпьютерлер SIMD тәсілінен алыстады, соның салдарынан SIMD-ге қызығушылық төмендеді. Қазіргі SIMD процессорларының кезеңі суперкомпьютер нарығынан емес, десктоп компьютер нарығынан өркендеді. 1990 жылдары десктоп процессорлары нақты уақыт ойындары мен аудио/бейне өңдеуді қолдауға жеткілікті қуатқа ие болғандықтан, осы есептеу қуатының түріне сұраныс артты және микропроцессор өндірушілері сұранысты қанағаттандыру үшін SIMD-ге жүгінді. Hewlett Packard 1994 жылы MPEG декодилеуін үдету үшін PA RISC 1.1 десктоп компьютерлеріне MAX нұсқауларын енгізді. Sun Microsystems 1995 жылы UltraSPARC I микропроцессорында өзінің «VIS» нұсқаулар жиынтығының кеңейтулерінде SIMD бүтін сандық нұсқауларын енгізді. MIPS осыған ұқсас MDMX жүйесімен ілесіп қалды. Алғашқы кең таралған десктоп SIMD 1996 жылы Intel-дің x86 архитектурасына арналған MMX кеңейтулерімен пайда болды. Бұл Motorola PowerPC және IBM POWER жүйелерінде әлдеқайда қуатты AltiVec жүйесін енгізуге түрткі болды. Intel 1999 жылы жаңа SSE жүйесін ұсынды. Содан бері екі архитектураның SIMD нұсқаулар жиынтығына бірнеше кеңейтулер енгізілді. Intel AVX, AVX2 және AVX 512 кеңейтілген векторлық нұсқауларын әзірледі. AMD өзінің қазіргі өнімдерінде AVX, AVX2 және AVX 512 қолдайды. Бұл барлық әзірлемелер нақты уақыт графикасын қолдауға бағытталған, сондықтан екі, үш немесе төрт өлшемді өңдеуге бағытталған, әдетте вектор ұзындығы дерек түріне және архитектурасына байланысты екі мен он алты сөз аралығында болады. Жаңа SIMD архитектураларын ескілерден ажырату қажет болғанда, жаңа архитектуралар «қысқа векторлы» архитектуралар деп есептеледі, себебі бұрынғы SIMD және векторлық суперкомпьютерлердің вектор ұзындығы 64-тен 64 000-ға дейін болды. Қазіргі заманғы суперкомпьютерлер әдетте MIMD компьютерлерінің кластері болып табылады, олардың әрқайсысы (қысқа векторлы) SIMD нұсқауларын іске асырады.

Артықшылықтар

SIMD-ді пайдаланатын қосымша, көптеген мультимедиалық қосымшаларда кең таралған, көптеген дерек нүктелеріне бірдей мән қосылатын (немесе алынып тасталатын) жағдайларға жатады. Мысалы, кескіннің жарықтығын өзгерту. Кескіннің әрбір пикселі қызыл (R), жасыл (G) және көк (B) түстерінің жарықтығын сипаттау үшін үш мәннен тұрады. Жарықтықты өзгерту үшін R, G және B мәндері жадтан оқылады, оларға бір мән қосылады (немесе алынып тасталады), содан кейін нәтижелер жадқа қайта жазылады. Аудио DSP-лер де дыбыс деңгейін реттеу үшін сол және оң каналдарды бір уақытта көбейтеді. SIMD процессоры бұл процесті екі жағынан жақсартады. Біріншіден, деректер блоктар түрінде қарастырылады, ал бірнеше мәнді бірден жүктеуге болады. "Осы пикселді ал, енді келесі пикселді ал" сияқты жеке нұсқаулардың орнына, SIMD процессоры "n пикселді ал" деген бір нұсқауды орындайды (мұнда n – әртүрлі конструкцияларға байланысты өзгеретін сан). Әртүрлі себептерге байланысты, бұл әр пикселді жеке-жеке алуға қарағанда әлдеқайда аз уақытты қажет етеді, дәстүрлі CPU конструкциясындағыдай. Екінші артықшылығы – нұсқау жүктелген барлық деректерге бір операцияда қолданылады. Яғни, егер SIMD жүйесі бір уақытта сегіз дерек нүктесін жүктесе, деректерге қолданылатын қосу операциясы сегіз мәнге де бірден қолданылады. Бұл параллелизм суперскалярлы процессордың қамтамасыз ететін параллелизмнен өзгеше; сегіз мән тіпті суперскалярлы емес процессорда да параллель өңделеді, ал суперскалярлы процессор бірнеше SIMD операциясын параллель түрде орындай алады.

Кемшіліктер

Барлық алгоритмдерді оңай векторлауға болмайды. Мысалы, кодты талдау сияқты ағымды басқаруға көп күш жұмсалатын тапсырма SIMD-ден оңай пайда көре алмайды; алайда, максималды кэш тиімділігіне жету үшін салыстырулар мен "топтық ағынды" векторлау теориялық тұрғыдан мүмкін, бірақ бұл техникаға көбірек аралық күй қажет болады. Ескерту: Баталық құбыр жүйелері (мысалы, GPU немесе бағдарламалық растерлеу құбырлары) SIMD ішкі мүмкіндіктерін пайдаланғанда кэшті басқаруда ең тиімді, бірақ олар SIMD мүмкіндіктеріне ғана тән емес. Кодтар тізбегі сияқты тізбектердегі тәуелділіктен аулақ болу үшін қосымша күрделіліктер туындауы мүмкін; ал векторлау үшін тәуелсіздік қажет. Үлкен регистрлік файлдар қуат тұтынуды және қажетті чип алаңын арттырады. Қазіргі уақытта алгоритмді SIMD нұсқауларымен іске асыру көбінесе адам еңбегін қажет етеді; көптеген компиляторлар, мысалы, әдеттегі C бағдарламасынан SIMD нұсқауларын жасамайды. Компиляторлардағы автоматты векторлау компьютерлік ғылымдағы белсенді зерттеу саласы болып табылады. (Векторлық өңдеумен салыстырыңыз.) SIMD нұсқаулар жиынтығымен бағдарламалау көптеген төменгі деңгейдегі қиындықтарды қамтиды. SIMD деректерді туралауға шектеулер қоюы мүмкін; белгілі бір архитектурамен таныс бағдарламашылар мұны күтпеуі мүмкін. Жағдайды нашарлататыны: туралау бір түзетуден немесе "үйлесімді" процессордан екіншісіне өзгеруі мүмкін. SIMD регистрлеріне деректерді жинау және оларды дұрыс мақсатты жерлерге тарату қиын (кейде алмастыру операцияларын қажет етеді) және тиімсіз болуы мүмкін. Кейбір SIMD нұсқаулар жиынтықтарында айналу немесе үш операндты қосу сияқты арнайы нұсқаулар жоқ. Нұсқаулар жиынтығы архитектураға тән: кейбір процессорларда SIMD нұсқаулары мүлдем жоқ, сондықтан бағдарламашылар олар үшін векторлық емес (немесе басқа векторлық) іске асыруларды ұсынуы керек. Әртүрлі архитектуралар әртүрлі регистр өлшемдерін (мысалы, 64, 128, 256 және 512 бит) және нұсқаулар жиынтығын ұсынады, яғни бағдарламашылар кез келген CPU-да оңтайлы жұмыс істеу үшін векторлық кодтың бірнеше іске асырылуын қамтамасыз етуі керек. Сонымен қатар, SIMD нұсқауларының мүмкін жиынтығы әр жаңа регистр өлшемімен өседі. Өкінішке орай, бұрынғы қолдау себептерімен ескі нұсқаулар тоқтатылмайды. Ертедегі MMX нұсқаулар жиынтығы жылжымалы нүктелі стекпен бірге регистрлік файлды бөлісті, бұл жылжымалы нүкте мен MMX кодын араластырғанда тиімсіздікке әкелді. Алайда, SSE2 бұл мәселені шешеді. 1 және 5-ші мәселелерді шешу үшін RISC V векторлық кеңейтуі басқа тәсілді қолданады: бағдарламашыға қосалқы регистр деңгейінің егжей-тегжейін көрсетудің орнына, нұсқаулар жиынтығы оларды осы нұсқаулар жиынтығымен барлық CPU-да бірдей интерфейстерді қолданатын бірнеше "векторлық регистрлер" ретінде абстракциялайды. Аппараттық құралдар барлық туралау мәселелерін және циклдарды "жолақтап бөлуді" басқарады. Әртүрлі векторлық өлшемдері бар машиналар бірдей кодты орындай алады. LLVM бұл векторлық типті "". Кодтың көлемін ұлғайту эквивалентті скалярлық немесе эквивалентті векторлық кодпен салыстырғанда жиі кездеседі, ал векторлық ISA-да шамамен немесе одан да үлкен тиімділікке (нұсқау бойынша орындалған жұмыс) қол жеткізуге болады. ARM-ның кеңейтілген векторлық кеңейтуі Флинн таксономиясында "ассоциативтік өңдеу" деп белгіленген басқа тәсілді қолданады, қазіргі уақытта көбінесе "Предкатталған" (маскаланған) SIMD ретінде танымал. Бұл тәсіл векторлық өңдеу сияқты ықшам емес, бірақ болжамды емес SIMD-ге қарағанда әлдеқайда жақсы. Толық салыстырмалы мысалдар Векторлық өңдеу бетінде келтірілген.

Хронологиясы

SIMD суперкомпьютерлерінің мысалдары (векторлық процессорларды қоспағанда)
Жыл Мысал
1974 ILLIAC IV
1974 ICL Distributed Array Processor (DAP)
1976 Burroughs Scientific Processor
1981 Martin Marietta компаниясының Геометриялық арифметикалық параллель процессоры (Lockheed Martin, Teranex және Silicon Optix компанияларында жалғастырылды)
1983 1991 Массивті параллель процессор (MPP), NASA/Goddard ғарыш орталығынан
1985 Қосылым машинасы, 1 және 2 модельдері (CM 1 және CM 2), Thinking Machines Corporation
1987 1996 MasPar MP 1 және MP 2
1991 Wavetracer компаниясының Zephyr DC
2001 Pyxsys, Inc. компаниясының Xplor

Жабдық

Шағын масштабты (64 немесе 128 бит) SIMD 1990-шы жылдардың басында жалпы мақсаттағы процессорларда кеңінен таралды және 1997 жылға дейін, содан кейін Alpha процессорлары үшін Motion Video Instructions (MVI) арқылы дамыды. SIMD нұсқауларын көптеген процессорларда кездестіруге болады, оның ішінде IBM-нің AltiVec және PowerPC үшін SPE, HP-нің PA RISC Multimedia Acceleration eXtensions (MAX), Intel-дің MMX, iwMMXt, SSE, SSE2, SSE3, SSSE3 және SSE4.x, AMD-нің 3DNow!, ARC-тің ARC Видео қосалқы жүйесі, SPARC-тің VIS және VIS2, Sun-ның MAJC, ARM-ның Neon технологиясы, MIPS-тің MDMX (MaDMaX) және MIPS 3D. IBM, Sony және Toshiba компаниялары бірлесіп әзірлеген Cell Processor процессорларының SPU жиынтығы SIMD-ге негізделген. Philips, қазір NXP, Xetal деп аталатын бірнеше SIMD процессорларын жасады. Xetal 320 16 биттік процессорлық элементтерге ие, олар көру тапсырмалары үшін арнайы жасалған. Intel компаниясының AVX 512 SIMD нұсқаулары бір мезгілде 512 бит деректерді өңдей алады.

Бағдарламалық жасақтама

SIMD нұсқаулары 3D графиканы өңдеу үшін кеңінен қолданылады, бірақ қазіргі заманғы SIMD енгізілген графикалық карталар осы міндетті CPU-дан иеленді. Кейбір жүйелерде векторлар ішіндегі элементтерді қайта жинақтайтын алмастыру функциялары бар, бұл оларды деректерді өңдеу және қысу үшін өте пайдалы етеді. Олар криптографияда да қолданылады. GPU-дағы жалпы мақсаттағы есептеулердің (GPGPU) тенденциясы болашақта SIMD-ді кеңінен қолдануға әкелуі мүмкін. SIMD жүйелерін жеке компьютерлік бағдарламалық құралдарға енгізу бастапқыда бірнеше мәселелерге байланысты баяу болды. Бірі – SIMD-дің алғашқы нұсқаулар жиынтығының көпшілігі қолданыстағы қозғалатын нүктелік тіркелімдерді қайта пайдаланудан жүйенің жалпы өнімділігін төмендетті. MMX және 3DNow! сияқты басқа жүйелер кең аудиторияға қызығушылық тудырмаған дерек түрлері үшін қолдау ұсынды және FPU және MMX тіркелімдерін пайдалану арасында ауысу үшін қымбат контекстік ауыстыру нұсқауларына ие болды. Компиляторлар көбінесе қолдау көрсетпеді, сондықтан бағдарламашылар құрастыру тілінде кодтауға жүгінуге мәжбүр болды. x86-да SIMD баяу басталды. AMD-нің 3DNow! және Intel-дің SSE енгізуі жағдайды біршама шатастырды, бірақ бүгінгі күні жүйе тұрақталған сияқты (AMD SSE-ді қабылдағаннан кейін) және жаңа компиляторлар SIMD-ге қабілетті бағдарламалық құралдарға әкелуі керек. Intel және AMD қазір SIMD нұсқауларын пайдаланатын оптимизацияланған математикалық кітапханаларды ұсынады, ал libSIMD, SIMDx86 және SLEEF сияқты ашық кодты баламалар пайда бола бастады (сондай-ақ libm қараңыз). Apple Computer компаниясы SIMD нарығына басқалардан кейінірек кірсе де, біршама сәттілікке жетті. AltiVec бай жүйені ұсынды және Motorola, IBM және GNU-дан күрделене түсетін компиляторларды пайдалану арқылы бағдарламалауға болады, сондықтан құрастыру тілінде бағдарламалау сирек қажет. Сонымен қатар, SIMD-ден пайда көретін көптеген жүйелерді Apple өзі ұсынды, мысалы iTunes және QuickTime. Алайда, 2006 жылы Apple компьютерлері Intel x86 процессорларына көшті. Apple API-лары мен әзірлеу құралдары (XCode) SSE2 және SSE3, сондай-ақ AltiVec-ті қолдау үшін өзгертілді. Apple компаниясы IBM және Freescale Semiconductor компанияларынан PowerPC чиптерін сатып алуда үлкен рөл атқарды. Apple өнімдерінде PowerPC процессорларын қолдануды тоқтатса да, Freescale және IBM-нің бірнеше PowerPC және Power ISA жобаларында AltiVec-ті одан әрі дамыту жалғасуда. Тіркелім ішіндегі SIMD немесе SWAR – SIMD нұсқауларын тікелей қолдамайтын аппараттық құралдардағы жалпы мақсаттағы тіркелімдерде SIMD-ді орындау үшін қолданылатын әдістер мен тәсілдердің жиынтығы. Бұл SIMD-ді тікелей қолдамайтын аппараттарда да белгілі бір алгоритмдердегі параллелизмді пайдалану үшін қолданылуы мүмкін.

Бағдарламашы интерфейсі

SIMD нұсқаулық жиынтығын жасаушылар векторлық кодты генерациялауға кепілдік беретін ішкі функциялар немесе ерекше дерек түрлері (операторларды жүктеу арқылы) бар C/C++ тілінің кеңейтімдерін жасауға жиі барады. Intel, AltiVec және ARM NEON өз процессорларына бағытталған компиляторлармен кеңінен қолданылатын кеңейтімдерді ұсынады. (Күрделі операциялар векторлық математика кітапханаларының жұмысы.) GNU C компиляторы SIMD дерек түрлерін анықтау мүмкіндігін ұсыну арқылы осы кеңейтімдерді кез келген платформада қолдануға болатын әмбебап интерфейске айналдырып, бір қадам алға жылжытады. LLVM Clang компиляторы да осы мүмкіндікті жүзеге асырады, IR-де анықталған ұқсас интерфейспен. Rust-тің crate-і (және эксперименталды нұсқасы) осы интерфейсті пайдаланады, сондай-ақ Swift 2.0+ та. C++-та GCC кеңейтімдеріне ұқсас жұмыс істейтін эксперименталды интерфейс бар. LLVM libcxx оны қолдайтын сияқты. GCC және libstdc++ үшін GCC кеңейтімдеріне негізделген қосымша кітапхана қол жетімді. Microsoft RyuJIT арқылы SIMD-ді .NET-ке енгізді. NuGet-те қол жетімді пакет SIMD дерек түрлерін жүзеге асырады. Java-да OpenJDK 17-дегі инкубатор модулінде SIMD нұсқаулары үшін жаңа ұсынылған API бар. Сондай-ақ, қолдау көрсетілмейтін процессорларда қарапайым циклдарға ауысудың қауіпсіз механизмі бар. SIMD дерек типін берудің орнына, компиляторларға деректердің тәуелділігінің болмауы туралы белгілі бір шарттармен кейбір циклдарды автоматты түрде векторлауға кеңес беруге болады. Бұл SIMD айнымалыларын тікелей басқарудай икемді емес, бірақ пайдалануға оңайырақ. OpenMP 4.0+ кеңес береді. Бұл OpenMP интерфейсі Cilk, GCC және көптеген басқа стандарт емес кеңейтімдердің кең жиынтығын алмастырды.

SIMD-нің бірнеше нұсқасын жасау

Тұтынушылық бағдарламалық жасақтама әдетте бірнеше буынды қамтитын процессорлардың кең ауқымында жұмыс істеуі күтіледі, бұл бағдарламашының бағдарламаның есептеу өнімділігін арттыру үшін жаңа SIMD нұсқауларын пайдалану мүмкіндігін шектеуі мүмкін. Шешім – SIMD технологиясын ескі немесе жаңа пайдаланатын бір кодтың бірнеше нұсқасын қосу және орындалу кезінде (динамикалық жіберу) пайдаланушының процессорына ең жақсы сәйкес келетін нұсқаны таңдау. Екі негізгі тәсіл бар:
Функциялық көп нұсқалылық (FMV): бағдарламадағы немесе кітапханадағы кіші бағдарлама көптеген нұсқаулар жиынтығының кеңейтімдері үшін дубликатталып, құрастырылады, ал бағдарлама орындалу кезінде қайсысын пайдалану керектігін анықтайды. Кітапханалық көп нұсқалылық (LMV): барлық бағдарламалау кітапханасы көптеген нұсқаулар жиынтығының кеңейтімдері үшін дубликатталады, ал операциялық жүйе немесе бағдарлама орындалу кезінде қайсысын жүктеу керектігін шешеді. FMV, ассемблер тілінде қолмен кодталған, glibc және libjpeg turbo сияқты өнімділікке аса маңызды кітапханаларда кеңінен қолданылады. Intel C++ компиляторы, GCC 6 нұсқасынан бастап GNU компиляторлар жинағы және Clang 7 нұсқасынан бастап Clang функцияның дубликатталуын және таңдалуын автоматтандырып, қарапайым тәсілге мүмкіндік береді. GCC және Clang функцияларды «клондау» үшін кодта нақты белгілерді талап етеді, ал ICC мұны автоматты түрде жасайды (командалық жол опциясы арқылы). Rust бағдарламалау тілі де FMV-ді қолдайды. Құрылым GCC және Clang-қа ұқсас, себебі код қандай нұсқаулар жиынтығын құрастыру керектігін анықтайды, бірақ клондау инлайнинг арқылы қолмен жасалады. FMV-ні пайдалану GCC және Clang-те кодты өзгертуді қажет етеді, сондықтан жеткізушілер көбінесе кітапханалық көп нұсқалылықты пайдаланады: бұл тек компилятор параметрлерін өзгертуді қажет ететіндіктен оңайрақ. Glibc LMV-ді қолдайды және бұл мүмкіндік Intel қолдауымен Clear Linux жобасы тарапынан қабылданды.

SIMD желіде

2013 жылы Джон Маккачан Dart бағдарламалау тілі үшін SIMD нұсқаулар жиынтығына жоғары өнімді интерфейс жасағанын хабарлады, бұл SIMD мүмкіндіктерін веб-бағдарламаларға алғаш рет әкелді. Интерфейс екі типтен тұрады: Float32x4, 4 бір дәлдікті қалқыма нүктелік мән. Int32x4, 4 32 биттік бүтін сан. Бұл типтердің мысалдары өзгертілмейді және оңтайландырылған кодта SIMD тіркелгіштерімен тікелей байланыстырылады. Dart-та берілген операциялар көбінесе ешқандай қосымша шығынсыз бір нұсқауға жинақталады. Бұл C және C++ ішкі мүмкіндіктеріне ұқсас. 4x4 матрицаны көбейту, 3D нүктесін түрлендіру және Мандельброт жиынын визуализациялау бойынша сынақтар Dart-та жазылған скалярлық кодпен салыстырғанда шамамен 400% жылдамдыққа ие екенін көрсетті. Маккачанның Dart-тағы жұмысы, қазір SIMD.js деп аталады, ECMAScript тарапынан қабылданды және Intel IDF 2013 іс-шарасында Маккачанның V8 және SpiderMonkey үшін жасаған спецификациясын іске асырып жатқанын жариялады. Дегенмен, 2017 жылға қарай SIMD.js ECMAScript стандартты кезегінен алынып тасталды, себебі WebAssembly-де ұқсас интерфейсті жасауға басымдық берілді. 2020 жылдың тамызына қарай WebAssembly интерфейсі толыққанды аяқталған жоқ, бірақ оның портативті 128 биттік SIMD мүмкіндігі көптеген жүйелерде қолданысқа енді. Emscripten, Mozilla-ның C/C++-ті JavaScript-ке аударатын компиляторы, кеңейтулермен SIMD ішкі немесе GCC стиліндегі векторлық кодты пайдаланатын C++ бағдарламаларын JavaScript-тің SIMD API-сына аударуға мүмкіндік береді, нәтижесінде скалярлық кодқа теңдей жылдамдыққа қол жеткізіледі. Сондай-ақ ол WebAssembly 128 бит SIMD ұсынысын қолдайды (қазір осы бағытқа көбірек назар аударылып жатыр).

Коммерциялық қолдану

SIMD-ті ғана өңдейтін процессорлар үшін тұрақты коммерциялық қолданыс табу әдетте қиындық тудырды. Біршама сәттілікке жеткендердің бірі Lockheed Martin компаниясымен әзірленген және олардың еншілес компаниясы Teranex арқылы коммерциялық секторға енгізілген GAPP болды. GAPP-тің соңғы нұсқалары әртүрлі бейне стандарттары мен кадр жылдамдықтарын (мысалы, NTSC-ден/PAL-ға, NTSC-ден/HDTV форматтарына және т.б.) түрлендіру сияқты нақты уақыт бейне өңдеу саласындағы қуатты құралға айналды, сондай-ақ араласуды жою, бейнедегі шуды азайту, бейімделмелі бейне қысу және бейне сапасын жақсарту мүмкіндіктерін ұсынады. SIMD-дің кең таралған қолданысы бейне ойындарда кездеседі: 1998 жылдан бері дерлік барлық заманауи бейне ойын консольдары өз архитектурасында SIMD процессорларын қолданады. PlayStation 2 ерекшелігі – оның векторлық есептеу блогы автономды DSP ретінде, жеке нұсқаулар жиынтығын орындай отырып, немесе қарапайым CPU нұсқауларымен басқарылатын копроцессор ретінде жұмыс істей алатындығы болды. 3D графикалық қосымшалар SIMD өңдеуге өте ыңғайлы, себебі олар 4 өлшемді векторлармен операцияларға көп көңіл бөледі. Microsoft-тың Direct3D 9.0 енді өзінің математикалық операцияларын процессордың ерекшеліктеріне сәйкес орындайды, соның ішінде SIMD мүмкіндіктерін қолданады. Векторлық өңдеуді пайдаланған келесі процессор – IBM, Toshiba және Sony компанияларының бірлескен әзірлемесі Playstation 3-те қолданылатын Cell процессоры. Ол бірнеше SIMD процессорларын (әрқайсысы дербес локальді жадқа ие және жалпы мақсаттағы CPU арқылы басқарылатын NUMA архитектурасы) пайдаланады және 3D және бейне өңдеу қосымшалары үшін қажетті үлкен деректер жиынтығымен жұмыс істеуге бағытталған. Ол дәстүрлі ISA-дан SIMD-ге негізделгендіктен ерекшеленеді, бөлек скалярлық тіркегіштері жоқ. Ziilabs медиа плеерлер және ұялы телефондар сияқты мобильді құрылғыларда қолдануға арналған SIMD типті процессорды жасады. ClearSpeed Technology, Ltd. және Stream Processors, Inc. компаниялары ірі ауқымды коммерциялық SIMD процессорларын ұсынады. ClearSpeed CSX600 (2004) 96 ядродан тұрады, әрқайсысы екі қос нақтылықтағы қозғалатын нүктелік есептеу блогымен жабдықталған, ал CSX700 (2008) 192 ядроға ие. Stream Processors компаниясын компьютерлік архитектор Билл Дэлли басқарады. Олардың Storm 1 процессоры (2007) MIPS CPU арқылы басқарылатын 80 SIMD ядросын қамтиды.