Piotr Urbaniak | 11 grudnia 2017, 18:00

Omówienie architektury procesora Cell – „potężnego” serca konsoli PlayStation 3

Czy Cell był wystarczająco dobry?

Cell, a właściwie Cell Broadband Engine, to jeden z najbardziej zagadkowych procesorów minionej dekady. Anonsowany jako prawdziwa rewolucja, ostatecznie znalazł się tylko w PlayStation 3, stając się przy tym prawdziwą zmorą programistów. Słynny John Carmack niegdyś nazwał go nawet po żołniersku „wrzodem na tyłku”. Wróćmy zatem na moment do roku 2006, w którym to Sony oficjalnie wprowadziło PS3, i przypomnijmy sobie bohatera tego artykułu.

Na początek garść powszechnie znanych faktów historycznych. Prace projektowe nad procesorem Cell rozpoczęto w marcu 2001 roku, kiedy to firmy IBM, Toshiba oraz Sony podjęły współpracę w ramach aliansu STI. Stworzenie pierwszej funkcjonalnej implementacji zajęło cztery lata, a całe przedsięwzięcie przeprowadzono w Austin w Teksasie, korzystając z centrum projektowego STI Design Center. Jak twierdził wówczas Peter Hofstee z IBM, jeden z głównych architektów jednostki, całkowity budżet wyniósł blisko 400 mln dolarów. Nawet bez uwzględnienia inflacji jest to iście bajońska suma, co dobitnie świadczy o tym, jak ogromne nadzieje pokładano w projekcie. A założenia były wyjątkowo odważne, dążono bowiem do stworzenia mikroarchitektury o możliwie szerokim spektrum zastosowań. IBM pragnął efektywnych energetycznie serwerów, Toshiba – dekodera wideo dla wyłaniających się zza horyzontu HDTV, a Sony – wysokowydajnego procesora do gier.

Karta transkodująca WinFast PxVC1100 – jeden z nielicznych przykładów konsumenckiego wykorzystania mikroarchitektury Cell poza PlayStation 3

Dzisiaj wiemy, że Cell tak imponującej kariery nie zrobił, szczególnie w sektorze konsumenckim. Nie licząc PlayStation 3, rewolucyjny, wydawałoby się, procesor znalazł się tylko w kilku telewizorach marki Toshiba jako CEVO-Engine (seria ZL1) i równie skromnej liczbie kart rozszerzeń PCI-E przyspieszających transkodowanie H.264 i MPEG-2, na przykład WinFast PxVC1100. Swoją drogą, w tym przypadku tak naprawdę korzystano ze SpursEngine, mocno okrojonej wersji Cella z dołączonymi sprzętowymi koderami i dekoderami wymienionych formatów (ale o tym za moment). Na myśl przychodzą jeszcze tylko moduły serwerowe Sony BCU-100 oraz IBM BladeCenter QS20, QS21 i QS22. Również tu jednak tkwi mały kruczek, bo ostatnie z wyszczególnionych rozwiązań w istocie jest oparte na układzie PowerXCell 8i, czyli wariancie o zwiększonej wydajności obliczeń zmiennoprzecinkowych podwójnej precyzji z kontrolerem DDR2, a nie – jak w pierwotnym modelu – XDR. Także do tej kwestii wrócimy za chwilę.

Superkomputer Departamentu Energetyki Stanów Zjednoczonych / fot. Wikipedia

Z czysto technicznego punktu widzenia najbardziej imponującym przykładem zastosowania mikroarchitektury Cell jest superkomputer IBM Roadrunner z Los Alamos National Laboratory, który okazał się pierwszym urządzeniem zdolnym do przekroczenia bariery 1 petaflopa w narzędziu LINPACK. Dokonało tego 25 maja 2008 roku 12 960 (lub 12 240, zależnie od źródła) procesorów PowerXCell 8i w połączeniu z 6480 (lub 6562, zależnie od źródła) procesorami Opteron. Co istotne, IBM Roadrunner nie tylko znalazł się na czele rankingu wydajności, ale także zdobył wysokie miejsce w rankingu Green 500, przedstawiającym efektywność energetyczną superkomputerów.

Wróćmy jednak do meritum i tego, co przyczyniło się do niepowodzenia projektu Cell i licznych problemów z programowaniem PlayStation 3.

Procesor Cell pierwotnie powstawał w procesie litograficznym klasy 90 nm, co w roku rozpoczęcia jego masowej produkcji, 2005, nie było niczym szczególnym. W tym samym procesie technologicznym wytwarzano wtedy chociażby układy Pentium 4 z linii Prescott 2M. O skomplikowaniu struktury Cella dobitnie jednak świadczy jego rozmiar, który przekracza 235 mm2. Dla porównania, wspomniany układ Intela ma powierzchnię 135 mm2. Później stosowano procesy klasy 65 nm i 45 nm, ale pierwsza zmiana technologii nastąpiła dopiero w październiku 2007 roku.

Cell na przekroju w całej okazałości

W przeciwieństwie do większości jednostek znanych z rynku komputerowego Cell jest konstrukcją heterogeniczną, ale nie w konwencjonalnym rozumieniu, bo nie zawiera tradycyjnego procesora graficznego. Składa się za to z dwóch rodzajów jednostek obliczeniowych: jednej Power Processing Element (PPE) oraz ośmiu Synergistic Processing Element (SPE), połączonych dwukierunkową magistralą o niezbyt wyszukanej nazwie Element Interconnect Bus (EIB) ze sobą nawzajem, kontrolerem wejścia-wyjścia i kontrolerem pamięci Rambus XDR. Nawiasem mówiąc, w konsoli PlayStation 3 jedno SPE jest wyłączane dla zwiększenia uzysku, a jedno zostaje wydzielone dla hipernadzorcy. To właśnie przez to połączenie do dzisiaj trwają spory o liczbę rdzeni Cella w PS3, ponieważ w zależności od przyjętej nomenklatury można nazwać go zarówno procesorem jednordzeniowym, jak i ośmiordzeniowym, a przy tym logicznie uzasadnić każdy z tych wyborów.

Klasycznej definicji procesora odpowiada tylko PPE, które jest przykładem zastosowania 64-bitowej architektury PowerPC (Big Endian) o zestawie instrukcji zgodnym z PowerPC G5, ale uproszczonej budowie. PPE jest taktowane z częstotliwością 3,2 GHz, ma po 32 kB pamięci L1 na dane i rozkazy, a także 512 kB pamięci L2. Ponadto dzięki wykorzystaniu wielowątkowości współbieżnej SMT może poprowadzić do dwóch wątków naraz. Podobnie jak współczesne procesory w pecetach PPE jest oparte na koncepcji superskalarnej – są 23 fazy potoku wykonawczego. Działa jednak zarazem w prościutkim modelu dualissue i nie umie wykonywać instrukcji poza kolejnością, co na rynku komputerów PC porzucono wraz z Pentium MMX. (PPE przypomina w tym chociażby mobilny procesor Cortex-A8). To oznacza, że w najlepszym razie w każdym cyklu zegara mogą zostać wykonane tylko dwie fazy instrukcji przy braku zdolności do zmiany ich kolejności, wyjąwszy względnie skomplikowaną funkcję szeregowania i możliwość pobrania w cyklu do czterech rozkazów na wątek, które w kolejce dyspozytora oczekują na dekodowanie.

Ze względu na przepływ danych, jak i terminologię stosowaną przez producentów w Cellu można wyróżnić trzy zasadnicze podsystemy: instruction unit (IU), execution unit (XU) oraz vector/scalar execution unit (VSU). Są to, odpowiednio: blok wstępnego pobierania i dekodowania instrukcji, blok wykonawczy z jednostką arytmetyczno-logiczną (ALU), jednostka zmiennoprzecinkowa (FPU) z rozszerzeniem VMX, czyli IBM-owskim odpowiednikiem SSE. Pomijając oczywiste różnice na linii PowerPC – x86, chociażby konieczność przesuwania obu operandów przy działaniu arytmetycznym do rejestrów, nic nie stoi na przeszkodzie, by PPE funkcjonalnie zastąpiło tradycyjne procesory komputerowe, takie jak Athlon 64 i Pentium 4.

Nic – poza efektywnością. Uproszczenia w budowie nie sprzyjają bowiem wysokiej wydajności. Swego czasu IBM opublikował test symulacji tkaniny (obliczenia zmiennoprzecinkowe), w którym PPE taktowane z częstotliwością 2,4 GHz zestawiono z Pentium 4 taktowanym z częstotliwością 3,6 GHz. Osiągnięto raptem jedną piątą możliwości procesora Intela. Ale nikt nie upatrywał w tym problemu, bo w projekcie procesora Cell jednostkę PPE potraktowano w głównej mierze jako kontroler dla SPE. Co jednak ciekawe, w Xboksie 360 wykorzystano procesor złożony z samych PPE, a dokładniej: trzech takich jednostek ze współdzieloną pamięcią podręczną poziomu drugiego o pojemności 1 MB i VMX128, zwiększającym liczbę rejestrów z 32 w klasycznym VMX/AltiVec do 128 i zoptymalizowanym pod kątem gier kosztem wybranych instrukcji związanych z liczbami całkowitymi.

Magia Cella skrywa się pod SPE, które zajmują większą część powierzchni rdzenia, bo łącznie ponad 118 mm2, podczas gdy PPE zajmują niespełna 27 mm2 (bez pamięci podręcznej L2). Każde SPE jest w pełni funkcjonalnym i w pewnym stopniu niezależnym mikroprocesorem, ale uproszczonym jeszcze bardziej niż PPE. W skład każdego z nich wchodzi właściwy moduł obliczeniowy, Synergistic Processing Unit (SPU), oraz moduł zarządzania pamięcią z kontrolerem bezpośredniego dostępu DMA, jednostką zarządzania i magistralą. SPU mają po siedem jednostek obliczeniowych, z czego jedną stałoprzecinkową i sześć od arytmetyki masowo równoległej SIMD. Są taktowane tak samo szybko jak PPE, zatem z częstotliwością 3,2 GHz, a ilość pamięci lokalnej typu SRAM to 256 kB. Ważne jest, żeby nie mylić pamięci lokalnej z podręczną, której SPE w ogóle nie mają. Pamięć lokalna jest dostępna bezpośrednio dla programisty, który musi ją zaadresować samodzielnie. Pod tym względem zachowuje się jak RAM, jednak czas dostępu równy sześciu cyklom to już cecha charakterystyczna dla pamięci podręcznej.

Same SPU, technicznie rzecz biorąc, są procesorami wektorowymi, czyli przetwarzającymi całe zbiory liczb, a nie tylko pojedyncze skalary. To podejście charakterystyczne dla kart graficznych – architektura masowo równoległa, SIMD. Z grubsza SPU to wciąż 64-bitowy Big Endian, ale tym razem jeszcze bardziej nietypowy. Każdy SPU może wykonać dwie operacje w cyklu zegara (szeregowanie statyczne). Ma przy tym do dyspozycji 128 128-bitowych rejestrów ogólnego przeznaczenia, które mogą przechowywać liczbę całkowitą lub zmiennoprzecinkową, a ponadto adres. Teoretycznie więc sześć SPU w Cellu dostępnych dla gier powinno poradzić sobie na przykład z 96 działaniami na 8-bitowych liczbach całkowitych w cyklu zegara, programując jeszcze kontroler DMA do wykonania transferu do pamięci. Ten sam co w przypadku PPE test symulacji tkaniny powtórzony na trzech SPE, również taktowanych z częstotliwością 2,4 GHz, przyniósł wynik o dwie długości lepszy od rezultatu wspomnianego Pentium 4, taktowanego z częstotliwością 3,6 GHz.

SpursEngine to w istocie cztery jednostki SPE z Cella, pozbawione PPE i rozbudowane o sprzętowe akceleratory formatów MPEG-2 i H.264

Czas na obiecane ciekawostki. Wróćmy na chwilę do wspomnianych na wstępie procesorów SpursEngine i PowerXCell 8i. Pierwszy jest tak naprawdę koprocesorem, nie ma bowiem PPE, a tylko cztery SPE. Czynności takie jak przydzielanie zasobów procesom musi wziąć na siebie centralna jednostka obliczeniowa komputera, w którym SpursEngine jest montowany w formie karty rozszerzeń. Z kolei PowerXCell 8i zwany jest Cellem drugiej generacji. Zmieniono w nim kontroler pamięci z Rambus XDR na DDR2, obsługujący moduły o łącznej pojemności do 32 GB, a także zmodyfikowano jednostki SPE, zwiększając – według specyfikacji – aż siedmiokrotnie ich efektywność w obliczeniach podwójnej precyzji. Niestety, brakuje wiarygodnych źródeł przedstawiających zmiany w mikroarchitekturze.

Ostatnim z kluczowych komponentów Cella jest magistrala EIB. Rozwiązanie to zapewnia dwukierunkową komunikację pomiędzy wszystkimi składowymi procesora. Jego działanie opiera się na koncepcji pierścieni. EIB składa się z czterech torów sygnałowych o szerokości 16 bajtów każdy, umie wykonać 12 równoległych transferów (po trzy na pierścień) i jest taktowane z częstotliwością równą połowie częstotliwości taktowania PPE i SPE, co w przypadku PlayStation 3 daje 1,6 GHz. Dwa kanały operują zgodnie z ruchem wskazówek zegara, a dwa pozostałe – w kierunku przeciwnym.

Niespodziewanie to właśnie magistrala EIB wywoływała najwięcej kontrowersji w pierwszych latach istnienia Cella. Według oficjalnej specyfikacji maksymalna prędkość pojedynczego transferu to 25,6 GB/s, a ponieważ EIB teoretycznie przeprowadza 12 takich transferów, jako szczytową przepustowość powszechnie przyjmowano 307,2 GB/s. Dopiero z czasem zauważono, że żądanie adresu jest ograniczone do 128 bajtów, a tym samym wyliczono bliższą rzeczywistości wartość 204,8 GB/s. Testy laboratoryjne w IBM pozwoliły osiągnąć 197 GB/s.

A skoro o nieścisłościach i kontrowersjach mowa, warto jeszcze przeanalizować kwestię pamięci operacyjnej XDR. W dokumentacji podawano szybkości: odczyt – 16,8 GB/s, zapis – 24,9 GB/s, ale charakterystyka EIB ogranicza możliwości obu 32-bitowych kanałów do 12,8 GB/s.

Do magistrali EIB obok PPE z pamięcią L2 i ośmiu SPE (siedmiu funkcjonalnych w PS3) podłączony jest interfejs kontrolera pamięci, a także FlexIO, czyli kontroler wejścia-wyjścia z 12 jednokierunkowymi 8-bitowymi liniami sygnałowymi typu point-to-point. Pięć odpowiada za wejście (32 GB/s), a siedem pozostałych – za wyjście (44,8 GB/s). Ponieważ po cztery linie każdego rodzaju obsługują koherencję pamięci, Cell może uzyskać bezpośredni dostęp do 256 MB GDDR3 w procesorze graficznym RSX, który towarzyszy Cellowi w PlayStation 3. Analogicznie jest w przypadku RSX-a i 256 MB pamięci operacyjnej XDR.

Dziś PS3 można już kupić tylko w popularnych serwisach aukcyjnych, ale sprawdźcie, w jakiej cenie znajdziecie następcę, PlayStation 4.

Suche dane techniczne zdają się sugerować, że Cell jest istnym demonem wydajności, który na początku nie miał sobie równych. Było jednak inaczej. Jak wiadomo, ogólną efektywność konfiguracji zapewnia nie tylko sprzęt, ale też oprogramowanie. Tymczasem Cell, by osiągnąć pełnię swoich możliwości, potrzebuje bardzo specyficznego kodu.

Programując procesor, jesteśmy przyzwyczajeni do sekwencyjnego przetwarzania szeregowego, czyli niewielkiej liczby względnie złożonych operacji, nie zaś do działania na dużych porcjach małych danych. A to właśnie ten model wymuszają SPE, które optymalnie wykonują tylko kod zwektoryzowany – działania na wielowymiarowych tablicach liczbowych. Mówiąc obrazowo, pętla zwektoryzowana to taka, która zamiast przetwarzać pojedynczy element N razy, przetwarza Y-elementową macierz N/Y razy. Instrukcje macierzowe na dużą skalę wykorzystuje się chociażby w łamaniu haseł metodą brute force i wyliczaniu liczby pi, kiedy to banalnie prosty algorytm zmaga się z dużą złożonością obliczeniową. Z grami jest nieco inaczej, bo wielu funkcji silnika po prostu nie da się zwektoryzować. Właściwie jedynym przykładem zastosowania kodu niemalże w całości macierzowego jest PhysX. Wyspecjalizowane karty fizyki marki Ageia też są oparte na procesorach wektorowych.

Oczywiście, obecnie wygląda to nieco inaczej niż w początkach kariery Cella. Współczesne procesory dzięki takim rozszerzeniom jak AVX2 z FMA3 radzą sobie z masowo równoległym przetwarzaniem bardzo przyzwoicie, a wektoryzacja to jedna z najoczywistszych technik optymalizacji, choć z pewnością nie jest najczęściej stosowana. Gry, które robią pożytek z AVX2, można policzyć na palcach sapera, choć jeśli już się pojawiają, to zapewniają imponujący przyrost wydajności. Zachęcam do poszukania w internecie pomiarów w grze Serious Sam 3: BFE, w których procesory o mikroarchitekturze Haswell, wyposażone w obsługę AVX2, zestawiono ze starszymi odpowiednikami.

Różnica pomiędzy instrukcjami macierzowymi dzisiaj a Cellem jest jednak taka, że o ile popularnym domowym procesorom wykorzystanie wektorów może dać dodatkowy zastrzyk mocy obliczeniowej, o tyle konstrukcja zastosowana w PlayStation 3 wymaga stricte wektorowego podejścia.

Akceleratory Ageia PhysX to dobry przykład zastosowania procesora wektorowego

Ale to niejedyny problem. Jakby tego było mało, SPE w procesorze Cell pozbawione są możliwości przewidywania rozgałęzień czy jakiegokolwiek sprzętowego dyspozytora (układu logicznego). To wraz z brakiem typowej pamięci podręcznej i niezdolnością do wykonywania instrukcji poza kolejnością daje strukturę wysoce zależną od kompilatora i/lub programisty, który musi ręcznie zrównoleglać obliczenia, a przy tym za wszelką cenę unikać rozgałęziania, na przykład przez odwijanie pętli, i jeszcze adresować pamięć lokalną. Po pierwsze, wprowadza to ogromne problemy, m.in. przy budowie systemu detekcji kolizji, podstawowego systemu każdej gry, a po drugie utrudnia i zdecydowanie przedłuża pracę. Nic więc dziwnego, że twórcy gier nie przepadali za Cellem (i dalej nie przepadają). Na dodatek nie ułatwiała im życia budowa PlayStation 3 jako całości, na czele z dostarczonym przez Nvidię procesorem graficznym Reality Graphics Synthesizer, znanym również pod akronimem RSX. Warto go tutaj pokrótce omówić ze względu na niezwykle bliską koligację z procesorem centralnym Cell.

Procesor graficzny PlayStation 3 czerpie garściami z GeForce’a 7800 GTX, ale ma dodatkowe cechy umożliwiające współpracę z Cellem

RSX jest oparty na konsumenckiej karcie graficznej GeForce 7800 GTX (G70), ale pierwotnie był produkowany w procesie litograficznym klasy 90 nm, a nie 110 nm, jak desktopowy pierwowzór. Podobnie jak oryginał RSX ma osiem jednostek przetwarzania geometrii i po 24 wyspecjalizowane jednostki cieniujące i teksturujące, ale już tylko osiem rasteryzatorów, czyli połowę wyjściowej liczby. Zmiana ta wynika bezpośrednio z ograniczenia kontrolerów GDDR3 do dwóch (128 bitów zamiast 256 bitów). Chodziło o to, żeby zmieścić jeszcze 64-bitowy kontroler Rambus XDR, dający RSX-owi bezpośredni dostęp do pamięci operacyjnej. Zwiększono za to pamięć podręczną przekształceń geometrii i oświetlenia z 45 do 63 wierzchołków, a także pamięć podręczną tekstur, czyli L1 oraz L2, z 48 kB do 96 kB na blok organizacyjny (cztery jednostki pixel shader). Co więcej, braki strukturalne nadrobiono częstotliwością taktowania, która w przypadku RSX-a wynosi: GPU – 500 MHz (jednostki pixel shader – 550 MHz), VRAM – 650 MHz (7800 GTX – 430/600 MHz).

Przykładowy wykres z wynikami naszych testów. Procesor graficzny w PS3 był w tamtych czasach słabszy od pecetowego GeForce'a 7800 GTX, a ten z kolei przegrywał z modelem 7900 GTX

Wprawdzie to przypadek zadecydował, że wielokrotnie opóźniana PlayStation 3 trafiła w ręce graczy niemal równolegle z rewolucyjnym w swoim czasie GeForce'em 8800 GTX o zunifikowanej architekturze shader, ale mając na uwadze długi cykl życia konsoli, od początku zdawano sobie sprawę ze słabości układu graficznego. Cell z założenia miał go wspierać. Stąd wynika wzajemny dostęp układów do pamięci. Koprocesor wektorowy można bowiem wykorzystać jako dodatkową „kartę graficzną” do obsługi wybranych efektów, co zresztą pokazuje przykład gry GRID 2, w której za cień rzucany przez dym odpowiada AVX.

Problemem w przypadku PlayStation 3 okazał się niezwykle powolny odczyt pamięci GDDR3 przez Cella (prędkość odczytu w pomiarach testowych wynosi 16 MB/s). Dla porównania: RSX tę samą operację wykonuje przy prędkości 16,8 GB/s. W rezultacie dostęp Cella do bufora ramki wymagał zaangażowania RSX-a, który to przesuwał dane z pamięci XDR do GDDR3 (bufora ramki).

Winę za taki stan rzeczy ponosi rodzaj połączenia. RSX ma bowiem bezpośrednie linie sygnałowe wyprowadzone do pamięci XDR, a Cell wykorzystuje tylko po jednej linii wyjścia i wejścia z FlexIO. Dlaczego w ogóle o tym wspominam, pisząc de facto o Cellu? Aby być zupełnie uczciwym wobec projektu IBM, należy pamiętać, że problemy twórców gier z PlayStation 3 to wina nie tylko procesora centralnego, lecz także ogólnie zagmatwanej i momentami nie do końca przemyślanej budowy całego urządzenia.

Dziś Cell okazuje się procesorem niezwykle trudnym do oceny. Odważny, obdarzony wielkim potencjałem projekt w masowych zastosowaniach był wykorzystywany akurat w scenariuszu, do którego niespecjalnie się nadawał. Nie pomagała wspomniana miejscami nieprzemyślana budowa samej konsoli PlayStation 3. Sprzedaż na poziomie około 85 mln egzemplarzy plasuje jednak przedostatnią konsolę Sony w pierwszej piątce rankingu wszech czasów, co mimo wszystko każe mówić o ogromnym sukcesie komercyjnym. Pytanie: na ile Cell tu pomógł, a na ile ograniczył sukces? Skłaniam się ku stwierdzeniu, że ograniczył, zresztą nie bez powodu samo Sony ostatecznie porzuciło nietypowe PowerPC na rzecz absolutnie szablonowego procesora Jaguar firmy AMD, zbudowanego w architekturze x86.

Optymalnie wykorzystany Cell w specyficznych zastosowaniach potrafi przewyższyć procesory Jaguar użyte w konsolach obecnej generacji, ale to czysto teoretyczne zagadnienie

Co jednak warte odnotowania, Cell do dziś w specyficznych zastosowaniach potrafi zagrozić współczesnym procesorom, choć mowa tu przede wszystkim o konstrukcjach niskonapięciowych. Znamiennym przykładem jest symulacja materiałowa, przedstawiona przez Ubisoft na konferencji GDC 2014, w której zestawiono Cella z Xenonem (procesorem Xboksa 360) i Jaguarem. Benchmark polegał na wygenerowaniu jak największej liczby tancerzy w ciągu 5 ms czasu procesora. Cell pozwolił narysować 105 postaci, a znacznie nowocześniejszy Jaguar sprostał mu dopiero w wersji znanej z Xboksa One, a więc taktowanej z częstotliwością 1,75 GHz (osiągnął wynik 113). Układ AMD z PlayStation 4, taktowany z częstotliwością 1,6 GHz, z wynikiem 98 pozostał w tyle, a co dopiero mówić o 34 postaciach wygenerowanych przez Xenona. Sęk w tym, że mamy tutaj do czynienia z przetwarzaniem wielu strumieni danych na podstawie pojedynczego strumienia rozkazów, co jest wodą na młyn Cella. Obecnie zadania tego typu zwykło się przerzucać na układ graficzny, a zainstalowana w PlayStation 4 karta Radeon kończy ten sam benchmark z wynikiem 1600.

Ostatecznie Cella trudno określić nawet mianem produktu wyprzedzającego epokę, gdyż w swoim czasie był produktem tyleż rewolucyjnym, co archaicznym. Obecnie na polach, na których jest mocny, i tak ustępuje kartom graficznym, a słabości nigdy nie skompensowała (i raczej już nie skompensuje) globalna zmiana podejścia do tworzenia oprogramowania. Dziś Cella najlepiej potraktować jako doskonałą lekcję o tym, że suche cyferki na nic się nie zdadzą, jeśli nie będzie można ich przełożyć na wymierny efekt.