AltiVec

Ten artykuł jest szkicem o komputerach .

Możesz dzielić się swoją wiedzą doskonaląc ją ( jak? ) Zgodnie z zaleceniami odpowiednich projektów .

AltiVec to zestaw instrukcjioperacji SIMD w trybie zmiennoprzecinkowym zaprojektowany przez i property, Apple , IBM i Motorola ( alians AIM ) i zaimplementowany w wersjach PowerPC jako G4 Motorola i G5 od IBM. AltiVec to nazwa handlowa należąca wyłącznie do Motoroli; dlatego zestaw jest również nazywany Velocity Engine przez Apple i VMX przez IBM.


Początki

W ślad za wydajnością zademonstrowaną w obliczeniach procesora wektorowego z superkomputerem Cray-1 w 1976 roku , tego typu architektura staje się ważną techniką w dziedzinie obliczeń wektorowych, a bardziej ogólnie, macierzowych. Altivec integruje instrukcje SIMD , zdolne do przetwarzania wektorów, ale wymagające od programu zarządzania wstawianiem do rejestrów i zwiększaniem wskaźników tabeli, w przeciwieństwie do procesorów wektorowych, którym instrukcje mają być wykonywane w pętli, wskaźników bazowych tablice i rozmiar pętli, a następnie iteruj po tablicy wektorów za pomocą tych instrukcji.

Już w 1993 roku procesor IBM/Motorola PowerPC 603 umożliwiał już wykonywanie instrukcji specjalizujących się w obliczeniach wektorowych typu mnożenie + dodawanie lub odejmowanie na rejestrach pływających, zwanych fmuladd i fmulsub , system potokowy umożliwiał kompensację czterech cykli zegara niezbędnego do jego wykonania poprzez autoryzację jednego uruchomienia wykonania na cykl.

W połowie lat 90. różni producenci mikroprocesorów byli zainteresowani rozwojem równoległych jednostek obliczeniowych, które odciążyłyby procesor, przetwarzając jednocześnie duże ilości danych. Rzeczywiście, wzrost aktywności multimedialnej uwydatnił wymagania energetyczne tych aplikacji w porównaniu z tradycyjnymi aplikacjami, takimi jak automatyzacja biura. Wczesne testy przeprowadzone przez HP i Sun Microsystems położyły podwaliny pod procesory SIMD w takich aplikacjach i utorowały drogę dla Intel , AMD i Motoroli. Tak więc w 1997 roku AMD wydało 3DNow! i Intel finalizuje swoje rozszerzenie MMX, które umożliwiło pracę na danych 64-bitowych za pośrednictwem jednostki obliczeniowej wektorowej. Rozszerzenie to zostało opracowane z myślą o narodzinach jednostek SSE , SSE2 , SSE3 i SSE4, które, opierając się na MMX , umożliwiają pracę na pływakach o pojedynczej lub podwójnej precyzji w kontekście aplikacji multimedialnych, takich jak kompresja wideo lub synteza wideo. obrazy.

Jednak pomimo postępu, jaki MMX i jego następcy reprezentowali pod względem wydajności, ta technologia wydawała się być niewykorzystana w społecznościach programistów. Rzeczywiście, problemy takie jak nieortogonalność ich zestawów instrukcji, problemy z wyrównaniem pamięci i problemy z dopasowaniem struktur danych oraz ograniczenia tych jednostek znacznie spowolniły rozwój aplikacji na dużą skalę. Równolegle do prac Intela i uświadamiania sobie problemów, z jakimi borykają się producenci mikroprocesorów, Motorola połączyła siły z Apple w 1996 roku, aby zaprojektować przyszłą architekturę PowerPC G4 . Keith Diefendorff, ówczesny szef projektu AltiVec, zdefiniował główne linie tej jednostki obliczeniowej, czyniąc z niej nie tylko proste rozszerzenie multimedialne, ale raczej wszechstronną jednostkę obliczeniową. Korzystając z doświadczeń konkurentów, Motorola postanowiła zacząć od podstaw projektowanie materiałowe tego typu jednostki obliczeniowej. Wreszcie, w 1999 roku, PowerPC G4 firmy Apple został wyposażony w jednostkę obliczeniową AltiVec firmy Motorola. W 2002 roku IBM zintegrował AltiVec z procesorami zamontowanymi w PowerPC G5s.

Kiedy po raz pierwszy wprowadzony w późnych latach 1990 , AltiVec był najbardziej wydajny system SIMD, przez CPU w stacjonarnym CPU . W porównaniu z rówieśnikami ( MMX firmy Intel , tylko liczba całkowita; zmiennoprzecinkowa SSE i systemy RISC różnych innych dostawców procesorów ), AltiVec oferował więcej rejestrów, które mogły być używane w bardziej zróżnicowany sposób i być obsługiwane przez znacznie bardziej elastyczny zestaw instrukcji . Jednak SSE2 , system SIMD czwartej generacji Intela, wprowadzony wraz z Pentium 4 , oferuje szereg funkcji, które niwelują różnice między tymi technologiami.

Zasady funkcjonowania

Altivec opiera się na wewnątrzprocesorowej implementacji modelu SIMD, zwanego również SWAR dla SIMD Within A Register (termin ukuty w 1996 roku przez Purdue University, aby odróżnić SIMD wewnętrzny do procesora od SIMD zewnętrzny do procesora, tj. - powiedzmy równoległy maszyny). W tym modelu manipulacja specjalnymi strukturami danych umożliwia odtworzenie zachowania jednostki SIMD w pojedynczym procesorze. Te typy danych zwane wektorami to 128-bitowe bloki, które mogą zawierać dane kilku typów i są przetwarzane przez określonych operatorów, którzy wykonują swoje obliczenia jednocześnie na wszystkich elementach wektora. Zestaw 32 128-bitowych rejestrów wektorowych może następnie przechowywać 16 8-bitowych liczb całkowitych ze znakiem lub bez znaku, 8 16-bitowych liczb całkowitych ze znakiem lub bez znaku, 4 32-bitowe liczby całkowite ze znakiem lub bez znaku lub 4 32-bitowe liczby rzeczywiste w postaci zmiennoprzecinkowej. W przeciwieństwie do SSE2 , Altivec nie obsługuje liczb rzeczywistych podwójnej precyzji.

W ramach architektury PowerPC , Altivec jest całkowicie niezależny od konwencjonalnych jednostek obliczeniowych. Posiada cztery jednostki przetwarzające wyposażone w potoki, które pozwalają mu efektywnie przetwarzać kilka operacji na pojedynczych precyzyjnych pływakach, operacje permutacyjne, proste operacje na liczbach całkowitych (takich jak dodawanie) lub operacje złożone na liczbach całkowitych (takie jak mnożenie częściowe). Jest również zdolny do jednoczesnego rozpoczęcia wykonywania kilku operacji w kilku jednostkach obliczeniowych, wtedy mówi się o superskalarnej jednostce obliczeniowej . Użytkownik ma również możliwość jednoczesnego używania wszystkich normalnych rejestrów dostarczanych przez PowerPC oraz 32 rejestrów wektorowych dostarczanych przez AltiVec.

Zestaw instrukcji

Najnowsze wersje narzędzi programistycznych, takich jak GNU Compiler Collection , IBM VisualAge i inne kompilatory, zapewniają bezpośrednie wsparcie dla instrukcji AltiVec z programów C i C++ . W praktyce dostępnych jest 162 prymitywów C, które dzielą się na cztery duże grupy:

  1. Instrukcje ładowania, które pozwalają załadować jedną lub więcej wartości z pamięci do rejestru wektorowego lub z jednego rejestru do pamięci.
  2. Instrukcje wstępnego ładowania lub pobierania, które upoważniają do bezpośredniego manipulowania informacjami znajdującymi się w pamięci podręcznej w celu optymalizacji kolejności ich przetwarzania, a tym samym zwiększenia ogólnej wydajności aplikacji.
  3. Instrukcje manipulacji wektorami . Z pewnością najpotężniejsze funkcje AltiVec, w tej kategorii znajdziemy wszystkie instrukcje dotyczące przesunięć bitów, permutacji elementów, łączenia, duplikacji danych wektorowych.
  4. Instrukcje arytmetyczne, które umownie umożliwiają wykonywanie operacji takich jak dodawanie, odejmowanie lub operacje na liczbach zmiennoprzecinkowych (zaokrąglanie lub obcinanie) na wektorach. Altivec dostarcza również pewną liczbę instrukcji emulujących funkcje typu DSP , operacje logiczne lub porównania.

Główną różnicą między zestawem instrukcji dostarczonym przez Altivec a zestawem instrukcji SSE2 jest to, że Altivec zapewnia dużą liczbę tak zwanych operacji poziomych , pozwalających na przeprowadzenie redukcji , tj. operacji, które nie dotyczą elementów dwóch wektorów, ale zawartość pojedynczego wektora. Na przykład funkcja vec_sums wykonuje sumę elementów wektora.

Przykład użycia

Używanie Altivec w kodzie C jest stosunkowo proste. Rozważmy na przykład funkcję C obliczającą różnicę dwóch obrazów NxN pikseli. Polega to na odjęciu intensywności pikseli i zastosowaniu do nich progu w celu uzyskania czarno-białego obrazu.

unsigned char I1[N*N], I2[N*N], R[N*N]; for(size_t i = 0; i < N*N; i++) { signed short s = I2[i] - I1[i]; R[i] = (s<10 || s>240) ? 0 : 255; }

Odpowiednik kodu Altivec C jest następujący:

unsigned char I1[N*N], I2[N*N], R[N*N]; vector unsigned char vS,vR,v240,v10,V0,V255; vector bool char vC; v0 = vec_splat_u8(0); v10 = vec_splat_u8(10); v240 = (vector unsigned char)vec_splat_s8(-15); v255 = (vector unsigned char)vec_splat_s8(-1); for(size_t i = 0; i < (N*N)/16; i++) { vS = vec_sub(vec_ld(I2,16*i), vec_ld(I1,16*i)); vC = vec_or(vec_cmplt(vS, v10), vec_cmpgt(vS, v240)); vR = vec_sel(v255, v0, vC); vec_st(vR, R, i*16); }

Należy zwrócić uwagę na kilka punktów:

Główną zaletą tych funkcji jest ich łatwość użycia ze względu na przezroczyste przeciążenie dla wszystkich typów wektorów, w przeciwieństwie do instrukcji dostępnych na architekturach Intela, w których nazwa funkcji jest zmieniana zgodnie z typem wektora. Wyczerpująca lista dostępnych funkcji jest dostępny na firmy Apple „s Altivec Instrukcje odsyłaczy stronie .

Aplikacje

Apple jest pierwszym klientem AltiVec i używa go do przyspieszania aplikacji multimedialnych, takich jak QuickTime i iTunes oraz programów do przetwarzania obrazu, takich jak Adobe Photoshop . Motorola dostarcza procesory AltiVec do wszystkich jednostek centralnych typu desktop od czasu wprowadzenia G4 . AltiVec jest również używany w niektórych systemach pokładowych, aby zapewnić wysoką wydajność w przetwarzaniu sygnałów cyfrowych .

Altivec i przemysł

Od czasu wycofania się Apple ze świata PowerPC i Altivec, głównymi producentami maszyn opartych na PowerPC Altivec są Thales Computer i Mercury Computer.

Przyszłość Altivec

Chociaż zniknął z ostatnich maszyn Apple, Altivec nadal istnieje w mniej popularnych dziedzinach, takich jak stacje robocze IBM i serwery obliczeniowe, dzięki PowerPC 970 MP (ostatnia wersja, w której zastosowano PowerMac G5) i POWER6 firmy IBM. Altivec nadal istnieje również w jednej z bardzo szybko rozwijających się dziedzin konsumenckich: konsolach do gier. Tak więc Microsoft XBOX 360 to trzyrdzeniowy procesor Altivec wywodzący się z 970 MP, a PS3 i jego słynny procesor Cell , ośmioprocesor napędzany przez procesor główny (PPE) bardzo zbliżony do 970. Ośmioprocesor zawiera także zestaw instrukcji SWAR o nazwie SPE ( Synergistic Processing Elements ), którego zestaw instrukcji jest bardzo podobny do Altivec.

Zobacz również

Uwagi i referencje

  1. (w) Podręcznik użytkownika mikroprocesora PowerPC 603e RISC i rodziny EM603e na stronie IBM.com — rozdział „2.3.4.2.2 Instrukcje mnożenia zmiennoprzecinkowego” na stronie 2-26 oraz rozdział „6.4.3 Czas wykonania jednostki zmiennoprzecinkowej ”, strona 6-17
  2. (w) N. Slingerman i AJ Smith - "  Analiza wydajności rozszerzeń zestawu instrukcji architektury dla multimediów  " ( ArchiwumWikiwixArchive.isGoogle • Co robić? ) - 2001
  3. (w) A. Peleg i U. Weiser – Rozszerzenie technologii MMX na Intel – 1996, IEEE Micro 4 (16), s.  42-50
  4. (w) K. Diefendorf - Rozszerzenie AltiVec do Power PC PRZYSPIESZA przetwarzanie mediów - 2001

Linki zewnętrzne