Кіріспе

PowerPC ISA үшін SIMD нұсқаулар жиынтығының кеңейтімі – AltiVec. Бұл Apple, IBM және Freescale Semiconductor (бұрын Motorola компаниясының жартылай өткізгіш өнімдер бөлімі) – AIM альянсы жасаған және меншігіндегі бірлік дәлдіктегі қалқымалы нүктелік және бүтін сандық SIMD нұсқаулар жиынтығы. Ол PowerPC процессор архитектурасының нұсқаларында, соның ішінде Motorola G4, IBM G5 және POWER6 процессорларында, сондай-ақ P. A. Semi PWRficient PA6T процессорларында жүзеге асырылған. AltiVec – Freescale компаниясына ғана тиесілі тіркелген тауар белгісі, сондықтан Apple жүйені Velocity Engine деп, ал IBM және P. A. Semi компаниялары VMX (Vector Multimedia Extension) деп атайды. AltiVec нұсқаулар жиынтығын білдірсе де, IBM және Motorola компаниялары шығарған процессорлардағы іске асырулар логикалық тұрғыдан бөлек. Бүгінгі күнге дейін IBM процессорларының ешқайсысы Motorola лицензиясымен алынған AltiVec логикалық дизайнын қамтыған жоқ, немесе керісінше. AltiVec Power ISA v.2.03 спецификациясының стандартты бөлігі болып табылады. Бұл ерекшелікке дейін ол ресми түрде PowerPC архитектурасының бөлігі болмаған, бірақ PowerPC нұсқау форматтары мен синтаксисін пайдаланған және осы мақсаттар үшін арнайы бөлінген операциялық кодтар кеңістігін иеленген.

x86-64 SSE-мен салыстыру

VMX/AltiVec және SSE екіінде де 128 биттік векторлық тіркелгілер бар, олар он алты 8 биттік бүтін немесе бүтін емес байтты, сегіз 16 биттік бүтін немесе бүтін емес қысқа шаманы, төрт 32 биттік бүтін санды немесе төрт 32 биттік қалқыма нүктелі айнымалыны көрсетуге болады. Екеуі де дерек ағынымен жұмыс істегенде кэштің ластануын азайтуға бағытталған кэшті басқару нұсқауларын ұсынады. Олардың маңызды айырмашылықтары да бар. SSE2-ден айырмашылығы, VMX/AltiVec арнайы RGB "пиксель" дерек типін қолдайды, бірақ ол 64 биттік қос дәлдікті қалқыма нүктелермен жұмыс істемейді және скалярлық және векторлық тіркелгілер арасында деректерді тікелей жылжытуға мүмкіндік жоқ. PowerPC-нің RISC дизайнының «жүктеу/сақтау» үлгісіне сәйкес, векторлық тіркелгілер, скалярлық тіркелгілер сияқты, тек жадтан жүктелуі және жадқа сақталуы мүмкін. Дегенмен, VMX/AltiVec вектордың барлық элементтері бойынша жұмыс істейтін «көлденең» операциялардың әлдеқайда толық жиынтығын ұсынады; дерек типі мен операциялардың рұқсат етілген комбинациялары әлдеқайда толық. SSE және SSE2 үшін сегіз (x86 64-те 16-ға дейін кеңейтілген) 128 биттік векторлық тіркелгілер қарастырылған, ал VMX/AltiVec нұсқауларының көпшілігі IA 32-де тек екі тіркелгі/тіркелгі немесе тіркелгі/жад операндына қарағанда үш тіркелгілік операндыны қабылдайды. VMX/AltiVec сонымен қатар икемді векторлық ауыстыру нұсқаулығын қолдауымен ерекшеленеді, онда алынған вектордың әрбір байтын басқа екі вектордың кез келген байтынан алуға болады, бұл үшін тағы бір вектормен параметрленеді. Бұл бір ғана нұсқаулықта күрделі манипуляцияларды орындауға мүмкіндік береді. GCC-нің 4-ші нұсқасынан бастап автоматты векторлау мүмкіндіктері бар, олар бағдарламалаушының тікелей кірістірілген функцияларды пайдалануын қажет етпей, VMX/Altivec үдетілген екілік кодты ақылмен жасауға тырысады. Жергілікті векторлық типтерді жариялауға мүмкіндік беру үшін «вектор» типті кілт сөз енгізілген, мысалы, «вектор unsigned char foo;» он алты 8 биттік бүтін емес байтты қамтитын «foo» деп аталатын 128 биттік векторлық айнымалыны жариялайды. Векторлық айнымалыларды басқару үшін қалыпты C өрнек тілін пайдалануға болады, өйткені арифметикалық және бинарлық операторлардың толық жиынтығы векторлық типтерде анықталған. Сондай-ақ, вектордағы элементтердің типіне байланысты тиісті операциялық кодты шығаратын «vec add» сияқты жүктемелі кірістірілген функциялар бар және өте күшті типтік тексеру жүзеге асырылады. Керісінше, Intel IA 32 SIMD тіркелгілері үшін анықталған дерек типтері тек векторлық тіркелгінің мөлшерін (128 немесе 64 бит) және 128 биттік тіркелгі болған жағдайда, онда бүтін сандар немесе қалқыма нүктелі мәндер бар екенін көрсетеді. Бағдарламашы қолданылатын дерек типтері үшін тиісті кірістірілген функцияны таңдауы керек, мысалы, «mm add epi16(x,y)» сегіз 16 биттік бүтін санды қамтитын екі векторды қосу үшін.

Даму тарихы

Power Vector Media Extension (VMX) 1996 және 1998 жылдар аралығында Apple, IBM және Motorola компанияларының бірлескен жобасы аясында әзірленді. Apple компаниясы 2005 жылғы 6 маусымда Intel компаниясының x86 негізіндегі процессорларына көшкенге дейін Power Vector Media Extension (VMX) технологиясының негізгі тұтынушысы болды. Олар оны QuickTime, iTunes және Apple Mac OS X жүйесінің маңызды бөліктерін, соның ішінде Quartz графикалық композиторын жеделдету үшін пайдаланды. Adobe сияқты басқа компаниялар AltiVec-ті Adobe Photoshop сияқты кескіндерді өңдеу бағдарламаларын оңтайландыру үшін қолданды. Motorola G4 процессорлар тізбесінен бастап AltiVec қолдауы бар процессорларды алғашқы болып ұсынды. AltiVec кейбір кіріктірілген жүйелерде жоғары өнімділікке ие цифрлық сигналды өңдеу үшін де қолданылды. IBM өздерінің алғашқы POWER микропроцессорларында VMX технологиясын қастанды түрде қолданбады, себебі олар серверлік қолданбаларға арналған еді, онда бұл технология тиімді болмады. 2007 жылы ұсынылған POWER6 микропроцессоры AltiVec-ті жүзеге асырады. IBM-нің соңғы үстел микропроцессоры PowerPC 970 (Apple компаниясы "G5" деп атаған) да PowerPC 7400-ге ұқсас аппараттық құралдармен AltiVec-ті жүзеге асырды. AltiVec – Freescale (бұрын Motorola) компаниясының Power ISA v.2.03 стандартының Category:Vector бөлігіне және барлығы 128 тіркелімге тіркелген тауарлық белгісі. VMX128 толыққанды VMX/Altivec-пен үйлесімді емес, себебі үлкен тіркелімдер жинағына және қосымша қолданбаға арналған операцияларға орын ашу үшін бірқатар бүтін сандық операциялар алынып тасталды.

VSX (Векторлы скалярлық кеңею)

Power ISA v2.06 нұсқасында Power ISA үшін SIMD өңдеуін 64 регистрге дейін кеңейтетін VSX векторлық-скалярлық нұсқаулар енгізілді, бұл тұрақты нүктелі, ондық нүктелі және векторлық орындауды қолдайды. POWER7 – Power ISA v2.06 нұсқасын іске асыратын алғашқы Power ISA процессоры. IBM компаниясы Power ISA 2.07 нұсқасында VSX кеңейтуінің бөлігі ретінде, «Векторлық медиа кеңейту» санаты аясында бүтін сандармен операциялар үшін жаңа нұсқауларды енгізді. IBM компаниясы VMX кодтамасын пайдаланып, Power ISA v3.0 нұсқасында VSX кеңейтуінің бөлігі ретінде жаңа бүтін сандық векторлық нұсқауларды енгізді. POWER9 процессорларымен бірге қолданысқа енгізіледі.

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

Келесі бағдарламалық қолданбалар AltiVec немесе VMX аппараттық үдетуін пайдаланады. Helios VMX қолдауымен POWER9 / POWER10 портына ие.