Chociaż układ Cell może mieć wiele różnych konfiguracji, podstawową konfiguracją jest układ wielordzeniowy składający się z jednego „elementu przetwarzającego moc” („PPE”) (czasami nazywanego „elementem przetwarzającym” lub „PE”) i wielu „synergicznych elementów przetwarzających” („SPE”). Elementy PPE i SPE są połączone wewnętrzną szybką magistralą o nazwie „Element Interconnect Bus” („EIB”).
Element przetwarzający moc (PPE)Edytuj
PPE to oparty na PowerPC, dwuwątkowy rdzeń procesora z 23-stopniowym potokiem działający jako kontroler dla ośmiu SPE, które obsługują większość obciążenia obliczeniowego. PPE ma ograniczone możliwości wykonywania poza kolejnością; może wykonywać obciążenia poza kolejnością i ma opóźnione rurociągi wykonawcze. Ze względu na podobieństwo do innych 64-bitowych procesorów PowerPC, PPE będzie pracować z konwencjonalnymi systemami operacyjnymi, natomiast SPE są przeznaczone do wykonywania wektorowego kodu zmiennoprzecinkowego. PPE zawiera 64 KiB pamięci podręcznej poziomu 1 (32 KiB instrukcji i 32 KiB danych) oraz 512 KiB pamięci podręcznej poziomu 2. Rozmiar linii pamięci podręcznej wynosi 128 bajtów. Dodatkowo IBM dołączył jednostkę AltiVec (VMX), która jest w pełni pipelinowana dla pojedynczej precyzji zmiennoprzecinkowej (Altivec 1 nie obsługuje wektorów zmiennoprzecinkowych podwójnej precyzji.), 32-bitową jednostkę stałoprzecinkową (FXU) z 64-bitowym plikiem rejestrów na wątek, jednostkę Load and Store (LSU), 64-bitową jednostkę zmiennoprzecinkową (FPU), jednostkę rozgałęziającą (BRU) oraz jednostkę wykonującą rozgałęzienia (BXU).PPE składa się z trzech głównych jednostek: Instruction Unit (IU), Execution Unit (XU) oraz vector/scalar execution unit (VSU). IU zawiera pamięć podręczną instrukcji L1, sprzęt do przewidywania rozgałęzień, bufory instrukcji i logowanie sprawdzania zależności. XU zawiera jednostki wykonawcze dla liczb całkowitych (FXU) oraz jednostkę load-store (LSU). VSU zawiera wszystkie zasoby wykonawcze dla FPU i VMX. Każdy PPE może wykonać dwie operacje podwójnej precyzji na cykl zegara przy użyciu skalarnej instrukcji fused-multiply-add, co przekłada się na 6,4 GFLOPS przy 3,2 GHz; lub osiem operacji pojedynczej precyzji na cykl zegara przy użyciu wektorowej instrukcji fused-multiply-add, co przekłada się na 25.6 GFLOPS przy 3,2 GHz.
Xenon w Xbox 360Edit
PPE został zaprojektowany specjalnie dla procesora Cell, ale podczas jego opracowywania Microsoft zwrócił się do IBM z prośbą o wysokowydajny rdzeń procesora dla swojej konsoli Xbox 360. IBM zgodził się i stworzył trójrdzeniowy procesor Xenon, oparty na nieco zmodyfikowanej wersji PPE z dodanymi rozszerzeniami VMX128.
Synergistic Processing Elements (SPE)Edytuj
Każdy SPE to procesor o podwójnym numerze w kolejności, składający się z „Synergistic Processing Unit”, SPU, i „Memory Flow Controller”, MFC (DMA, MMU i interfejs magistrali). SPE nie posiadają żadnego sprzętu do przewidywania rozgałęzień (stąd duże obciążenie dla kompilatora). Każdy SPE posiada 6 jednostek wykonawczych podzielonych pomiędzy nieparzyste i parzyste potoki na każdym SPE: SPU wykorzystuje specjalnie opracowany zestaw instrukcji (ISA) ze 128-bitową organizacją SIMD dla instrukcji pojedynczej i podwójnej precyzji. W obecnej generacji Cell, każdy SPE zawiera 256 KiB wbudowanej pamięci SRAM dla instrukcji i danych, zwanej „Local Storage” (nie mylić z „Local Memory” w dokumentach Sony, które odnoszą się do VRAM), która jest widoczna dla PPE i może być adresowana bezpośrednio przez oprogramowanie. Każdy SPE może obsługiwać do 4 GiB pamięci local store. Local store nie działa jak konwencjonalna pamięć podręczna CPU, ponieważ nie jest ani przezroczysta dla oprogramowania, ani nie zawiera struktur sprzętowych, które przewidują, które dane należy załadować. SPE zawierają 128-bitowy, 128-pozycyjny plik rejestru i mierzą 14,5 mm2 w procesie technologicznym 90 nm. SPE może wykonywać operacje na szesnastu 8-bitowych liczbach całkowitych, ośmiu 16-bitowych liczbach całkowitych, czterech 32-bitowych liczbach całkowitych lub czterech liczbach zmiennoprzecinkowych pojedynczej precyzji w jednym cyklu zegara, a także operacje na pamięci. Należy pamiętać, że SPU nie ma bezpośredniego dostępu do pamięci systemowej; 64-bitowe adresy pamięci wirtualnej tworzone przez SPU muszą być przekazywane z SPU do kontrolera przepływu pamięci SPE (MFC) w celu skonfigurowania operacji DMA w systemowej przestrzeni adresowej.
W jednym z typowych scenariuszy użycia system obciąża SPE małymi programami (podobnymi do wątków), łącząc SPE w łańcuchy w celu obsługi każdego kroku złożonej operacji. Na przykład, set-top box może ładować programy do odczytu DVD, dekodowania wideo i audio oraz wyświetlania, a dane będą przekazywane od SPE do SPE, aż w końcu trafią do telewizora. Inną możliwością jest podzielenie zestawu danych wejściowych na partycje i posiadanie kilku SPE wykonujących równolegle ten sam rodzaj operacji. Przy 3,2 GHz, każdy SPE daje teoretycznie 25,6 GFLOPS wydajności pojedynczej precyzji.
W porównaniu ze swoimi rówieśnikami z komputerów osobistych, stosunkowo wysoka ogólna wydajność zmiennoprzecinkowa procesora Cell pozornie karleje nad możliwościami jednostki SIMD w procesorach takich jak Pentium 4 i Athlon 64. Jednakże porównywanie jedynie zmiennoprzecinkowych możliwości systemu jest metryką jednowymiarową i specyficzną dla danego zastosowania. W przeciwieństwie do procesorów Cell, takie desktopowe procesory są bardziej dostosowane do oprogramowania ogólnego przeznaczenia, które zazwyczaj jest uruchamiane na komputerach osobistych. Oprócz wykonywania wielu instrukcji na zegar, procesory firm Intel i AMD wyposażone są w predyktory rozgałęzień. Procesor Cell został zaprojektowany tak, aby zrekompensować to za pomocą pomocy kompilatora, w którym tworzone są instrukcje prepare-to-branch. W przypadku operacji zmiennoprzecinkowych o podwójnej precyzji, stosowanych czasami w komputerach osobistych i często wykorzystywanych w obliczeniach naukowych, wydajność Cell spada o rząd wielkości, ale nadal osiąga 20,8 GFLOPS (1,8 GFLOPS na SPE, 6,4 GFLOPS na PPE). Wariant PowerXCell 8i, który został zaprojektowany specjalnie do obliczeń podwójnej precyzji, osiąga 102,4 GFLOPS w obliczeniach podwójnej precyzji.
Testy przeprowadzone przez IBM wykazały, że SPE mogą osiągnąć 98% swojej teoretycznej wydajności szczytowej, wykonując zoptymalizowane równoległe mnożenie macierzy.
Toshiba opracowała koprocesor zasilany przez cztery SPE, ale bez PPE, zwany SpursEngine, zaprojektowany do przyspieszania efektów 3D i filmowych w elektronice użytkowej.
Każdy SPE ma pamięć lokalną o pojemności 256 KB. W sumie SPE mają 2 MB pamięci lokalnej.
Element Interconnect Bus (EIB)Edycja
EIB to wewnętrzna magistrala komunikacyjna procesora Cell, która łączy różne elementy systemu w układzie: procesor PPE, kontroler pamięci (MIC), osiem koprocesorów SPE i dwa pozaprocesorowe interfejsy I/O, w sumie 12 uczestników PS3 (liczba SPU może się różnić w zastosowaniach przemysłowych). EIB zawiera również jednostkę arbitrażową, która działa jak zestaw świateł drogowych. W niektórych dokumentach IBM określa uczestników EIB jako „jednostki”.
EIB jest obecnie zaimplementowana jako okrągły pierścień składający się z czterech jednokierunkowych kanałów o szerokości 16 bajtów, które obracają się parami. Gdy pozwalają na to wzorce ruchu, każdy kanał może przenosić do trzech transakcji jednocześnie. Ponieważ EIB działa z połową częstotliwości zegara systemowego, efektywna szybkość kanału wynosi 16 bajtów co dwa zegary systemowe. Przy maksymalnej współbieżności, z trzema aktywnymi transakcjami na każdym z czterech pierścieni, szczytowa chwilowa przepustowość EIB wynosi 96 bajtów na zegar (12 współbieżnych transakcji × 16 bajtów szerokości / 2 zegary systemowe na transfer). Chociaż liczba ta jest często podawana w literaturze IBM, nierealistyczne jest proste skalowanie tej liczby według szybkości zegara procesora. Jednostka arbitrażowa nakłada dodatkowe ograniczenia.
Starszy inżynier firmy IBM David Krolak, główny projektant EIB, wyjaśnia model współbieżności:
Pierścień może rozpocząć nowy op co trzy cykle. Każde przeniesienie trwa zawsze osiem uderzeń. To było jedno z uproszczeń, które zrobiliśmy, jest to zoptymalizowane do strumieniowania dużej ilości danych. Jeśli robisz małe operacje, nie działa to tak dobrze. Jeśli pomyślisz o ośmiowagonowych pociągach jeżdżących po tym torze, tak długo, jak pociągi nie wpadają na siebie, mogą współistnieć na torze.
Każdy uczestnik w EIB ma jeden 16-bajtowy port odczytu i jeden 16-bajtowy port zapisu. Ograniczeniem dla pojedynczego uczestnika jest odczyt i zapis z szybkością 16 bajtów na zegar EIB (dla uproszczenia często traktuje się 8 bajtów na zegar systemowy). Każdy procesor SPU zawiera dedykowaną kolejkę zarządzania DMA zdolną do planowania długich sekwencji transakcji do różnych punktów końcowych bez zakłócania trwających obliczeń SPU; te kolejki DMA mogą być również zarządzane lokalnie lub zdalnie, zapewniając dodatkową elastyczność modelu sterowania.
Dane przepływają na kanale EIB stopniowo wokół pierścienia. Ponieważ jest dwunastu uczestników, całkowita liczba kroków wokół kanału z powrotem do punktu początkowego wynosi dwanaście. Sześć kroków to najdłuższa odległość między dowolną parą uczestników. Kanał EIB nie może przesyłać danych wymagających więcej niż sześciu kroków; takie dane muszą pokonać krótszą trasę wokół kręgu w innym kierunku. Liczba kroków potrzebnych do przesłania pakietu ma bardzo mały wpływ na opóźnienie transferu: prędkość zegara napędzającego kroki jest bardzo duża w porównaniu z innymi czynnikami. Jednakże, większe odległości komunikacyjne są szkodliwe dla ogólnej wydajności EIB, ponieważ zmniejszają dostępną współbieżność.
Pomimo pierwotnego pragnienia IBM, aby zaimplementować EBI jako bardziej wydajną poprzeczkę, konfiguracja kołowa, którą przyjęli w celu zaoszczędzenia zasobów, rzadko stanowi czynnik ograniczający wydajność układu Cell jako całości. W najgorszym przypadku programista musi zachować szczególną ostrożność, aby zaplanować wzorce komunikacyjne, w których EIB jest w stanie funkcjonować na wysokim poziomie współbieżności.
David Krolak wyjaśnił:
Na początku, we wczesnym etapie procesu rozwoju, kilka osób naciskało na przełącznik poprzeczny, a sposób, w jaki magistrala jest zaprojektowana, można było faktycznie wyciągnąć EIB i wstawić przełącznik poprzeczny, jeśli było się skłonnym poświęcić więcej miejsca w krzemie na chipie na okablowanie. Musieliśmy znaleźć równowagę pomiędzy łącznością a powierzchnią i po prostu nie było wystarczająco dużo miejsca, aby umieścić pełny przełącznik poprzeczny. Wymyśliliśmy więc tę strukturę pierścieniową, która naszym zdaniem jest bardzo interesująca. Mieści się ona w ograniczeniach obszarowych i nadal ma bardzo imponującą przepustowość.
Ocena przepustowościEdit
Przy 3,2 GHz każdy kanał przepływa z szybkością 25,6 GB/s. Patrząc na EIB w oderwaniu od elementów systemu, które łączy, osiągnięcie dwunastu równoczesnych transakcji przy tej szybkości przepływu daje abstrakcyjną przepustowość EIB wynoszącą 307,2 GB/s. Na tej podstawie wiele publikacji IBM przedstawia dostępną przepustowość EIB jako „większą niż 300 GB/s”. Liczba ta odzwierciedla szczytową chwilową przepustowość EIB skalowaną przez częstotliwość procesora.
Jednakże inne ograniczenia techniczne są związane z mechanizmem arbitrażu dla pakietów przyjmowanych na magistralę. Grupa IBM Systems Performance wyjaśniła:
Każda jednostka w EIB może jednocześnie wysyłać i odbierać 16 bajtów danych w każdym cyklu magistrali. Maksymalna przepustowość danych w całym EIB jest ograniczona przez maksymalną szybkość wyszukiwania adresów we wszystkich jednostkach w systemie, która wynosi jeden na cykl magistrali. Ponieważ każde żądanie adresu snooped może potencjalnie przenieść do 128 bajtów, teoretyczna szczytowa przepustowość danych w EIB przy 3,2 GHz wynosi 128Bx1,6 GHz = 204,8 GB/s.
Cytat ten najwyraźniej przedstawia pełny zakres publicznego ujawnienia przez IBM tego mechanizmu i jego wpływu. Jednostka arbitrażowa EIB, mechanizm snooping oraz generowanie przerwań przy błędach translacji segmentów lub stron nie są dobrze opisane w dokumentacji udostępnionej dotychczas publicznie przez IBM.
W praktyce efektywna przepustowość EIB może być również ograniczona przez zaangażowanych uczestników pierścienia. Podczas gdy każdy z dziewięciu rdzeni przetwarzających może wytrzymać jednoczesny odczyt i zapis z prędkością 25,6 GB/s, kontroler interfejsu pamięci (MIC) jest powiązany z parą kanałów pamięci XDR pozwalających na maksymalny przepływ 25,6 GB/s dla odczytu i zapisu łącznie, a dwa kontrolery IO są udokumentowane jako obsługujące szczytową połączoną prędkość wejściową 25,6 GB/s i szczytową połączoną prędkość wyjściową 35 GB/s.
Aby jeszcze bardziej zwiększyć zamieszanie, niektóre starsze publikacje podają przepustowość EIB przy założeniu zegara systemowego 4 GHz. Ta rama odniesienia daje natychmiastową przepustowość EIB 384 GB/s i ograniczoną arbitrażem przepustowość 256 GB/s.
Wszystkie rozważane teoretyczna liczba 204,8 GB/s, która jest najczęściej cytowana, jest najlepsza do zapamiętania. Grupa IBM Systems Performance zademonstrowała przepływy danych skoncentrowane na jednostkach SPU osiągające 197 GB/s na procesorze Cell pracującym z częstotliwością 3,2 GHz, więc liczba ta jest również dobrym odzwierciedleniem praktyki.
Kontrolery pamięci i wejścia/wyjściaEdit
Cell zawiera dwukanałowy makrokontroler Rambus XIO, który łączy się z pamięcią Rambus XDR. Kontroler interfejsu pamięci (MIC) jest oddzielny od makra XIO i został zaprojektowany przez IBM. Łącze XIO-XDR działa z prędkością 3,2 Gbit/s na pin. Dwa 32-bitowe kanały mogą zapewnić teoretycznie maksymalnie 25,6 GB/s.
Interfejs I/O, również będący projektem Rambusa, znany jest jako FlexIO. Interfejs FlexIO jest zorganizowany w 12 pasów, każdy pas jest jednokierunkową ścieżką typu punkt-punkt o szerokości 8 bitów. Pięć 8-bitowych ścieżek punkt-punkt to ścieżki przychodzące do komórki, podczas gdy pozostałe siedem to ścieżki wychodzące. Zapewnia to teoretyczną szczytową przepustowość 62,4 GB/s (36,4 GB/s na wyjściu, 26 GB/s na wejściu) przy częstotliwości 2,6 GHz. Interfejs FlexIO może być taktowany niezależnie, typowo z częstotliwością 3,2 GHz. 4 pasy wejściowe + 4 pasy wyjściowe obsługują spójność pamięci.