Prowadzący zajęcia projektowe: Rafał Petryniak (strona domowa zajęć projektowych).
Spis treści
Procesor Cell powstał w wyniku wspolpracy z trzema konsorciami swiatowego przemyslu informatycznego takimi jak: Sony, IBM i Toshiba. Cell to hybryda skladajaca sie z dziewieciu rdzeni. Osiem z nich to wektorowe uklady SPE (Synergistic Processing Element), a jeden to uproszczony uklad PowerPC firmy IBM, ktorego zadaniem jest zarzadzanie pozostalymi modulami. Zastosowanie tego procesora mozna znalezc w produktach takich jak konsola do gier SONY PlayStation3, czy tez w klastrze kasetowym Blade firmy IBM. Chociaz Cell jest 32-bitowym ukladem, po wprowadzeniu do niego drobnych poprawek, bedzie mogla z powodzeniem obslugiwac wiekszosc 64-bitowych, naukowych aplikacji.
"Czip" to jedna z aplikacji ktora zostala poddana naszym testom, oto wyniki, wnioski i nasze spostrzezenia....
Zainstalowanie, a raczej skompilowanie omawianej aplikacji odbylo sie bez zadnych problemow. Jedyne co nalezalo zrobic to sciagnac paczke ze strony: http://www.ibm.com/developerworks/power/cell/open_source.html o nazwie "czip". Nastepnie nalezalo rozpakowac sicagniety plik, i wchodzac do katalogu "czip/source/ppu/" wydac polecenie "make". Kompilator automatycznie utworzyl plik wykonywalny "czip"...i gotowe!! Aby przetestowac nasza aplikacje, nalezalo do katalogu gdzie znajduje sie plik wykonywalny skopiowac dokumenty, ktore chcielismy skompresowac, a nastepnie wydac polecenie: ./czip (nazwaPliku). Testowany program kompresuje dane do formatu *.gz. Po wykonaniu wyzej omowionych zadan, program stal sie w 100% uzyteczna i dzialajaca aplikacja, jednak aby jego uzycie nie bylo uzaleznione od katalogu gdzie znajduje sie plik wykonywalny, ale aby jego wywolanie bylo mozliwe z kazdego miejsca w systemie, skopiowalismy jego wersje wykonywalna do katalogu: "/user/local/bin/".Od tej chwili jesli tylko chcemy uzyc naszego "czip'a" do kompresowania danych, jedyne co nalezy zrobic to wydac polecenie "czip (nazwaPliku, lub sciezkaDoPliku), niezaleznie od tego w ktorym katalogu sie aktualnie znajdujemy.
Sercem naszej aplikacji i jej najwazniejsza czescia jest biblioteka zlib, ktora w dalszej czesci tego rozdzialu postaram sie szegolowo opisac jej architekture i algorytm. Pozostale wazne pliki to: zipinfo.h, mypigz15.c, ppezip.c. Biblioteka zlib jest ogolnie dostepna i mozna ja uzywac na zasadach OpenSource. Tworcami omawianego kodu sa: Jean-loup Gailly i Mark Adler, a pierwsza publiczna wersja zostala wydana 1 maja 1995. Modul ten zawiera wiele ciekawch i uzytecznych funkcji, jednak najwazniejsze z nich to funkcje: deflate i inflate (funkcje do kompresji i dekompresji danych) i ich opisem zajmiemy sie w naszej dokumentacji. Deflate to algorytm uzywany do kompresji oparty na dwoch innych algorytmach: LZ77 oraz kodowanie Huffmana. LZ77 (Lempel-Ziv77) - algorytm ten zostal opracowany i wydany w 1977 roku przez Abrahama Lempela i Jacoba Ziv, i jak latwo sie domyslic nazwa algorytmu pochodzi od pierwszych liter nazwisk projektantow oraz roku wydania. Kod dzieki temu, ze jest udostepniany na licencji OpenSource i jest wolny od wszelkiego rodzaju patentow, cieszy sie duza popularnoscia oraz, co wazniejsze, doczekal sie wielokrotnych ulepszen i optymalizacji.
Najwazniejszym zalozeniem dzialania LZ77 bylo to, aby powtarzajace sie ciagi danych zastepowac wartoscia ktora w jakis sposob powie nam co powinno znajdowac sie w danym miejscu. Do zrealizowania takiego pomyslu projektanci uzyli slownika i buforu wejsciowego. Bufor wejsciowy to dane ktore w danym momencie sa odczytywane i przetwarzane. Slownik to dane z ktorymi jest porownywany bufor. Jesli po porownaniu bufora ze slownikiem okaze sie, ze pewne fragmenty powtarzaja sie, nastepuje podmiana danych w buforze na informacje, ktore mowia nam gdzie w slowniku mozemy odnalezc podmienione slowa, i jaka jest ich dlugosc. Zdaje sobie sprawe, ze opis jest bardzo zawiy, wiec nizej zamiescilem przyklad, ktory mam nadzieje rozwieje wszelkie watpliwosci.
            slownik               |  bufor wejsciowy  | nieprzetworzone symbole
    0   1   2   3   4   5   6   7 | 0   1   2   3   4 |
  +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-----
  | a | a | a | a | c | c | a | b | a | a | c | b | a | c | a | b | a | c | ...
  +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+-----
  |                      okno                         |
Wynik przeszukiwania:
P = 2 (pozycja w slowniku)
C = 3 (dlugosc podciagu)
S = b (symbol z bufora wejsciowego nastepujacy po dopasowanym podciagu)
            slownik               |  bufor wejsciowy  | nieprzetworzone symbole
    0   1   2   3   4   5   6   7 | 0   1   2   3   4 |
  +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---------------------
  | c | c | a | b | a | a | c | b | a | c | a | b | a | c | ...
  +---+---+---+---+---+---+---+---+---+---+---+---+---+---+---------------------
Kodowanie Huffmana to jedna z najprostszych metod kompresji bezstratnej. Algorytm ten zostal opracowany w 1952 roku przez Amerykanina Davida Huffmana. Metoda ta nie jest bardzo efektywna metoda kompresji dlatego stosuje sie ja rownolegle z innymi algorytmami, ale juz jako ostatni etap w systemach kompresji. Jego popularnosc i entuzjazm czestego uzywania zawdziecza swojej prostocie i barku ograniczen ze strony patentowej.
Cechy kodu:
Kod zero jedynkowy
Algorytam prefiksowy przedrostkowy (kod zadngo znaku nie jest poczatkowym fragmetem kodu innego znaku)
Tworzony tak aby srednia dlugosc znaku byla mozliwe najkrotsza
Tworzony w oparciu o czestosc tworzenia znakow
Dane:
  
Liczba naturalna "n" oznaczajaca ilosc znakow w tekscie c1, c2, ....,cn gdzie "ci" bedzie oznaczalo
  czestotliwosc.
Wynik: Kod Huffmana dla n znakow o podanych czestosciach.
    Krok 1: Nalezy utworzyc oddzielny wierzcholek dla kazdej z posrod daniej
      czestosci, opatrz kazdy wierzcholek znakiem odpowiadajacej im czestosci
    Krok 2: Wykonujemy n-1 razy nastepujace operacje
  a) ze zbioru czestosci wybierz 2 najmnijsze
  b) usun je ze zbioru czestosci a na ich miejscu umiesc ich sume
  c) utworz nowy wierzcholek odpowiadajacy nowej czestosci
  d) podczep pod nowy wierzcholek za pomoca krawedzi wierzcholki odpowiadajace usunietym czestoscia
Krok 3: Z kazdego wierzcholka drzewa z wyjatkiem wierzcholkow utworzonych w kroku 1 wychodza do dolu 2 krawedzie,
  lewa oznacz cyfra 0 a prawa cyfra 1
Krok 4: Dla kazdego ze znakow znajdujacych sie w wierzcholkach wiszacych utworz jego kod - jest nim ciag
cyfr umieszczony na krawedziach ktore prowadza z korzenia do wierzcholka z
danym znakien
Przyklad:
8.71 1.29 3.45 3.10 7.90 4.63 a b d k o r 4.39 (suma 2 najmiejszych b i k) (Informacje o algorytmach zaczerpniete ze stron: zlib.net, pl.wikipedia.org)
Rendering - to w grafice 3D komputerowa analiza modelu danej sceny i utworzenie na jej podstawie dwuwymiarowego obrazu wyjściowego w formie statycznej lub w formie animacji. Podczas renderowania rozpatrywane są m.in. odbicia, cienie, załamania światła, wpływy atmosfery (w tym mgła), efekty wolumetryczne. Jest to bardzo czasochłonna operacja niewymagająca, poza przygotowaniem, żadnej ingerencji.
Najczęściej wykorzystywaną metodą renderowania w programach do grafiki 3D jest ray tracing (śledzenie promieni), pozwalająca na bardzo wierne symulowanie obrazu z uwzględnieniem wielu rzeczywistych zjawisk fizycznych. Jest on wynikiem próby rozwiązania równania renderowania. Inne analogiczne metody to Raycasting oraz dwie metody należące do typu Global illumination: Radiosity i Photon mapping.
Interaktywny Ray Tracer pokazuje moc komórki Broadban Engine . Można go uruchomić na Playstation 3 i QS21 Cell Broadband Engine opartych na platformach. Jest przeznaczony dla użytkowników zainteresowanych wysoką jakością grafiki i renderowaniem obrazów.
Ray trcing jest techniką używaną przez przemysł filmowy i jest uważana za zbyt kosztowną obliczeniowo dla dzisiejszych gier. Jednak Interactive Ray Tracer umożliwia procesorowi Cell osiągnięcie w czasie rzeczywistym wysokiej wydajności renderowania. Mimo że Ray tracing jest bardziej kosztowny obliczeniowo tylko on w porównaniu do grafiki rastrowej zapewnia optycznie poprawne wyniki. Ray tracing bierze pod uwagę interakcje światła między obiektami, co pozwala na prawidłowe odbicia oraz cienie. Ray tracing jest w stanie również obliczyć skutki pośrednie oświetlenia, gdy światło jest przenoszone z jednej powierzchni na drugą ta technika jest nazywa „Global illumination”. Pierwszym krok jest realizowany przez Interaktywny Ray tracer.
Obecnie złożone przerendowane sceny mogą zajmować wiele godzin. Jeżeli pomnożymy to przez liczbę klatek na sekundę a następnie przez długość animacji, łatwo zrozumieć, dlaczego produkcje filmowe inwestują takie sumy w klastry serwerów. Jednak w przypadku, gdy chcemy wykorzystać renderingu dla interaktywnych celów dla prywatnego użytkownika staje się on nie opłacalny.
Jednak procesor Cell może śledzić wysokiej rozdzielczości klatki w ułamkach sekundy. Ten procesor zapewnia efektywniejsze renderowanie i jest alternatywą dla współczesnych zastosowań.
Rysunek po lewej przedstawia Ray-tracing auta użyty z maksymalnie czterema poziomami refleksji i 4x4 jiteered multisamplingiem , łącznie do 96 promieni na piksel. Po prawej przedstawiono Obraz zawierający oświetlenie, przejrzystość, szczegółowe cienie ambient occlusion oraz 4x4 jiteered multisampling. Łącznie do 288 promieni na piksel. Model samochodu obejmuje 1,6 milionów wielokątów w rozdzielczość obrazu 1080 piksel (p) o wysokiej rozdzielczości (hi-def). Najnowsze osiągnięcia w oprogramowaniu 6 odnowiły zainteresowanie w ray_tracingu obrazów. Ta technika wykazała dużą poprawę jakości obrazu cieni, promieni, w szczególności, kiedy mapowany jest na Cell. Duża część tej pracy skupiła się szczególnie na ray-casting oraz prostym procesie shading bez pełnego adresowania, co poprawiło globalne rezultat taki jak refleksja lub ambient occlusion . Technologia ta oblicza dokładne odbicia i dwukierunkową refleksje dzięki funkcji BRDF umożliwiającej również oświetlanie i zmapowanie tekstur. System używa kombinacji optymalizującej pojedyncze instrukcje, wielokrotne dane (SIMD) istotę promienia i figurującej hierarchiczności rozkłada pracę grupy serwerów IBM BladeCenter® QS20.
Optymalny promień składu istoty wyraźnie krępuje natężenie hierarchii(BVH) danych,2, 3 i zdobywa 93-97% sprawności tempa dla węzła i wierzchołka znaku. Ponadto stosujemy technikę ray-packet aby przyspieszyć połączenie dla promienia ambient occlusion, który może być używany jako przybliżenie globalnego oświetlenia. Do tego dodajemy oryginalną kostkę w odwrotnym kierunku do ukrytego promienia ambient occlusion, która ma korzystne warunki szybkiego wyjścia dla ich pakietu połączeń. Hierarchiczność figuruje w rozkładzie, tymczasem, rozprowadza pracę dynamicznie z wysokim stopniem przestrzennym podobieństwa między procesorem a wierzchołkiem poziomów. Poprzez kombinację tych technik, serwer BladeCenter QS20 jest w stanie produkować 720 p ray-traced obrazów wchodzących w reakcję z klasyfikacją ramek, nawet dla umiarkowanej kompleksowej sceny zawiera więcej niż milion wielokątów. Rezultaty te dowodzą, że ray tracing oraz ambient occlusion są atrakcyjne do implementacji na BladeCenter QS20 servers.
Skalowana wydajność animowanych sekwencji zachowuje dynamiczna równowagę pomiędzy klasterami serwerów IBM. Po lewej ramka z ray-tracingiem bez multisamplingu. Po prawej ramka z ambient occlusion bez mulitisampilgu.
Instalacja iRT
Instalacja iRT-1.0 i
          iRT-scene-1.0 RPM. Aplikacja i dane są
          zlokalicowane w: /opt/ibm/iRT. Z kolei
          dokumentacja oraz licencja znajdują się w:
          /usr/share/doc/iRT.
Wymagania oprogramowania
IBM Cell SDK 2.0
PS3
Yellow Dog 5.0.2 Cell SDK 2.0 or 2.1
QS20 Blade
Fedora Core 6.0 Cell SDK 2.0 or 2.1
Ustawienie rozdzielczości
IRT jest aplikacją pełnoekranową, należy ją dostosować do
          powszechnie przyjętego trybu video na PS3. Wysoka rozdzielczość jest
          rezultatem wolniejszego tempa. Aby zmienić rozdzielczość na
          ostrzejszą, należy zmienić imgHeight oraz imgWidth w
          $HOME/.irt_init. W celu włączenia lub zmienienia
          trybu wideo dla przykładowych rozdzielczości:
480p: należy uruchomić: 'ps3videomode -v
              2'
720p: należy uruchomić: 'ps3videomode -v
              3'
1080p: należy uruchomić: 'ps3videomode -v
              5'
Uruchamianie iRT
Wymagania PS3:
niezbędne jest zalogowanie no koncie root
iRT musi być uruchamiane z wirtualnej tekstowej konsoli
Włączanie iRT. Jako root wykonujemy następujące polecenia:
cd /opt/ibm/iRT ./iRT
Uruchamianie iRT z innymi plikami. Jako root wykonujemy następujące polecenia:
cd /opt/ibm/iRT ./iRT -f "new_scene.irt"
Podczas gdy iRT jest uruchomione, dostępne są następujące skróty klawiszowe i opcje urządzeń sterujących:
Klawisz     Opcja
-------------------------------------------------------------------------------------
q         Wyjście
r         Włączenie/wyłączenie refleksji oraz załamań światła
s         Włączenie/wyłączenie cieni
a         Włączenie/wyłączenie zamkniętego otoczenia
x         Włączenie/wyłączenie metalicznego zamkniętego otoczenia
1         Wyłączenie dopasowania próbkowania
2         Dopasowanie próbkowania poziom 1
3         Dopasowanie próbkowania poziom 2
4         Dopasowanie próbkowania poziom 3
          (Jeśli refleksje są aktywne)
8         Jedno refleksyjne odbicie
9         Dwa refleksyjne odbicia
0         Cztery refleksyjne odbicia
d         Włączenie/wyłączenie postępujących udoskonaleń
f         Włączenie/wyłączenie trybu latarki
v         Koloryzowanie obszarów które są wypróbowane
b         Koloryzowanie obszarów które wymagają więcej czasu do renderowania
p         Sporządzenie pliku .irt_init , który jest oddany obecnemu stanowi do następnego uruchomienia
w         Sporządzenie pliku ppm - plik z obrazami dla każdej klatki
Urządzenie sterujące      Opcja
--------------------------------------------------------------------------------------
Notes cyfrowy                   Tłumaczenie
Left analog                     Obracanie góra/dół prawo/lewo
Right analog                    Przybliżenie/Oddalenie
R2                              Przekręcenie wskazówek zegara w prawo
L2                              Przekręcenie wskazówek zegara w lewo
Wciśnięcie X + Left analog      Ruch światła
L1                              Automatyczne obracanie modelu
Kwadrat                         Koloryzuje SPEs
Trójkąt                         Model świateł błyskowych