Rozwój oprogramowania komórki
Rozwój oprogramowania dla mikroprocesora Cell obejmuje połączenie konwencjonalnych praktyk programistycznych dla rdzenia PPU kompatybilnego z PowerPC oraz nowych wyzwań związanych z tworzeniem oprogramowania w odniesieniu do koprocesorów SPU o ograniczonej funkcjonalności.
Linux na komórkę
Przyjęto strategię opartą na oprogramowaniu open source, aby przyspieszyć rozwój ekosystemu Cell BE i zapewnić środowisko do tworzenia aplikacji Cell, w tym kompilator Cell oparty na GCC, binutils i port systemu operacyjnego Linux.
Oktopiler
Octopiler to prototyp kompilatora IBM , który umożliwia programistom pisanie kodu dla procesorów Cell .
Przenośność oprogramowania
Dostosowanie VMX do SPU
Różnice między VMX a SPU
Technologia VMX (Vector Multimedia Extensions) jest koncepcyjnie podobna do modelu wektorowego zapewnianego przez procesory SPU, ale istnieje wiele znaczących różnic.
funkcja | VMX | SPU |
---|---|---|
rozmiar słowa | 32 bity | 32 bity |
liczba rejestrów | 32 | 128 |
szerokość rejestru | 128-bitowe czterosłowo | 128-bitowe czterosłowo |
formaty liczb całkowitych | 8, 16, 32 | 8, 16, 32, 64 |
wsparcie nasycenia | Tak | NIE |
kolejność bajtów | duży (domyślnie), mały | duży endian |
tryby zmiennoprzecinkowe | Java, nie-Java | pojedyncza precyzja, IEEE podwójna |
Wyrównanie pamięci | tylko czterosłowa | tylko czterosłowa |
Java Tryb VMX jest zgodny z podzbiorem Java Language Specification 1 domyślnego standardu IEEE , rozszerzonym o zgodność z IEEE i C9X , w przypadku gdy standard Java milczy. W typowej implementacji tryb inny niż Java konwertuje odbiegające od normy na zero, ale tryb Java przechwytuje emulator, gdy procesor napotka taką wartość.
Podręcznik IBM PPE Vector/SIMD nie definiuje operacji dla zmiennoprzecinkowych podwójnej precyzji, chociaż IBM opublikował materiał sugerujący pewne liczby wydajności podwójnej precyzji związane z technologią Cell PPE VMX.
Wewnętrzne
Kompilatory dla Cell [ kto? ] zapewniają elementy wewnętrzne , które udostępniają przydatne instrukcje SPU w językach C i C++. Instrukcje, które różnią się tylko typem operandu (takie jak a, ai, ah, ahi, fa i dfa dla dodawania) są zwykle reprezentowane przez pojedynczą wewnętrzną instrukcję C/C++, która wybiera odpowiednią instrukcję na podstawie typu operandu.
Przenoszenie kodu VMX dla SPU
Istnieje ogromna ilość kodu, który został opracowany dla innych mikroprocesorów IBM Power , który potencjalnie mógłby zostać zaadaptowany i ponownie skompilowany, aby działał na SPU. Ta baza kodu zawiera kod VMX, który działa w wersji PowerPC systemu Mac OS X firmy Apple , gdzie jest lepiej znany jako Altivec . W zależności od tego, ile specyficznych funkcji VMX jest zaangażowanych, wymagana adaptacja może wahać się od prostych, przez uciążliwe, do całkowicie niepraktycznych. Najważniejsze obciążenia dla SPU są generalnie dość dobrze odwzorowywane.
W niektórych przypadkach możliwe jest bezpośrednie przeniesienie istniejącego kodu VMX. Jeśli kod VMX jest bardzo ogólny (nie zawiera kilku założeń dotyczących środowiska wykonawczego), tłumaczenie może być stosunkowo proste. Dwa procesory określają inny format kodu binarnego , więc wymagana jest co najmniej ponowna kompilacja. Nawet jeśli instrukcje z tymi samymi zachowaniami, nie mają one takich samych nazw instrukcji, więc to również musi zostać zmapowane. IBM udostępnia wewnętrzne elementy kompilatora , które w przejrzysty sposób dbają o to odwzorowanie, jako część zestawu narzędzi programistycznych.
Jednak w wielu przypadkach bezpośrednio równoważna instrukcja nie istnieje. Obejście problemu może być oczywiste, a może nie. Na przykład, jeśli wymagane jest zachowanie nasycenia w SPU, można je zakodować, dodając dodatkowe instrukcje SPU, aby to osiągnąć (z pewną utratą wydajności). Z drugiej strony, jeśli wymagana jest semantyka zmiennoprzecinkowa Java, jest to prawie niemożliwe do osiągnięcia na procesorze SPU. Osiągnięcie tych samych obliczeń na SPU może wymagać napisania od podstaw zupełnie innego algorytmu .
Najważniejszym koncepcyjnym podobieństwem pomiędzy VMX a architekturą SPU jest obsługa tego samego modelu wektoryzacji. Z tego powodu większość algorytmów dostosowanych do Altivec zwykle z powodzeniem dostosowuje się również do architektury SPU.
Eksploatacja lokalnego sklepu
Przesyłanie danych między lokalnymi magazynami różnych SPU może wiązać się z dużymi kosztami wydajności. Lokalne magazyny poszczególnych SPU można wykorzystać przy użyciu różnych strategii.
Aplikacje o dużej lokalności, takie jak gęste obliczenia macierzowe, reprezentują idealną klasę obciążenia dla lokalnych sklepów w Cell BE.
Obliczenia przesyłane strumieniowo można skutecznie dostosować za pomocą potokowania programowego transferów bloków pamięci przy użyciu strategii wielu buforów.
Pamięć podręczna oprogramowania oferuje rozwiązanie dla dostępu losowego.
Bardziej wyrafinowane aplikacje mogą wykorzystywać wiele strategii dla różnych typów danych.
- Projekt Cell w IBM Research
- Optymalizacja kompilatora dla procesora CELL
- Wykorzystanie zaawansowanej technologii kompilatora do wykorzystania wydajności architektury Cell Broadband Engine
- Technologia kompilatorów dla skalowalnych architektur