Obliczenia równoległe na klastrze opartym na procesorze CELL/B.E. Łukasz Szustak Wydział Inżynierii Mechanicznej i Informatyki Kierunek informatyka, Rok V szustak.lukasz@gmail.com Streszczenie W artykule zostanie przedstawiona realizacja równoległa algorytmów na klastrze opartym na procesorze CELL Broadband Engine. Procesor CELL/B.E. powstał we współpracy firm IBM, Sony oraz Toshiba, składa się on z dziewięciu rdzeni. Jednym z pierwszych produktów w który, został wyposażony ten procesor jest konsola do gier SONY PlayStation3. Algorytmy implementowane będą na klastrze zbudowanym z czterech konsol SONY PS3. Jego atutem jest duża moc obliczeniowa na poszczególnych węzłach. Pewne ograniczenie stanowi sieć łącząca węzły klastra. Programowanie na procesorze CELL/B.E. wymusza na programiście znajomość jego architektury. W niniejszej pracy można odnaleźć przykłady omówienia algorytmów; realizację komunikacji między węzłami oraz na poszczególnych węzłach; sposoby wykorzystania architektury procesorów CELL/B.E. do obliczeń zmiennoprzecinkowych oraz wady i zalety jakie niesie programowanie na takim klastrze. 1. Wstęp W ostatnich latach postęp technologiczny procesorów został skierowany na projektowanie i budowanie procesorów wielordzeniowych. Ciekawym rozwiązaniem technologicznym opracowany przez firmy Sony, Toshiba i IBM jest jednoukładowy superkomputer CELL Broadband Engine. Procesor CELL/B.E. to hybryda składającą się z dziewięciu rdzeni. Osiem z nich to wektorowe układy SPE (Synergistic Processing Element), a jeden to uproszczony układ PowerPC firmy IBM, którego zadaniem jest zarządzanie pozostałymi modułami [2]. Zastosowanie tego procesora można znaleźć w produktach takich jak konsola do gier SONY PlayStation3, czy też w klastrze kasetowym Blade firmy IBM. Zadaniem programisty jest niespotykana dotąd odpowiedzialność za jak najlepsze wykorzystanie jednostek wykonawczych. Programista sam decyduje na których danych konkretny rdzeń wykonuje operacje - to on wybiera w jaki sposób dane mają zostać pobrane, wysłane do pamięci poszczególnych jednostek wykonawczych co wymusza na nim znajomość zasad komunikacji. 1
2. Procesory CELL/B.E. 2.1. Architektura procesorów CELL/B.E. Pierwsza generacja procesorów CELL/B.E. (Rys. 1) składała się z następujących podstawowych elementów: jednego rdzenia Power Processor Element (PPE); ośmiu rdzeni Synergistic Processor Element (SPE); Element Interconnect Bus (EIB). PPE jest dwuwątkowym, 64-bitowym rdzeniem procesora bazującego na architekturze IBM PowerPC. Rys. 1 Organizacja architektury procesora CELL/B.E. [2] PPE ma własne 64 KB pamięci podręcznej pierwszego poziomu i 512 KB cache'u L2. Jego zadaniem jest także pomoc w zarządzaniu pozostałymi rdzeniami SPU. Każdy SPE (Synergistic Processing Element) jest oddzielnym procesorem wektorowym, składającym się z sześciu jednostek wykonawczych. SPE mają 128 rejestrów ogólnego przeznaczenie o długości 128-bitów. Potrafią przetworzyć jednocześnie dwie instrukcje. Mogą też pracować na operandach stałoprzecinkowych. Wszystkie SPE wyposażone zostały w 256 kilobajtów pamięci lokalnej [3], a w rdzeniu każdego procesora wektorowego umieszczono kontroler DMA. Odpowiada on za transfer danych pomiędzy pamięcią systemową a lokalnymi zasobami SPE. Wszystkie osiem układów wektorowych i jedne rdzeń PPE połączono ze sobą w sieć za pomocą interfejsu o dużej przepustowości danych EIB. 2.2. Komunikacja SPE nie mają bezpośredniego dostępu do pamięci głównej (Main Storage). Architektura procesora narzuca pewne ograniczenia odnośnie przesyłania danych [1]: kanałami DMA można dokonywać transferu danych pomiędzy Local Storage a Local Storage innego SPE, oraz Local Storage a Main Storage i odwrotnie; jednorazowo jednym kanałem można przesłać dane o rozmiarze 1, 2, 4, 8 i 16 bajtów lub wielokrotność 16 bajtów aż do 16KB. 2
2.3. Operacje wektorowe Wszystkie rdzenie procesora CELL/B.E. wyposażone są w zestawy instrukcji typu Single Instruction Multiple Data (SIMD), czyli wykonywanie kilku operacji zmiennoprzecinkowych jednocześnie. Większość instrukcji SIMD może obsługiwać którąś z reprezentacji danych 128-bitowych, dwie 64-bitowe podwójnej precyzji, cztery-32 bitowe pojedynczej precyzji lub szesnaście 8-bitowych danych typu char. Operandy 128-bitowe przechowywane są w wbudowanym w rdzeniu rejestrze. Instrukcje SIMD mogą przyjąć [2] do trzech 128-bitowych operandów i w rezultacie zwrócić jeden. 3. Opis wybranych algorytmów Opracowano wiele metod numerycznych mających na celu rozwiązywania układów równań. W niniejszej pracy zostaną omówione dwie metody: metoda eliminacji Gaussa oraz rozkład Choleskiego dla macierzy symetrycznej dodatnio określonej. Mamy dany układ n równań liniowych z n niewiadomymi a 11 x 1 + a 12 x 2 +... + a 1n x n = b 1 (1) a 21 x 1 + a 22 x 2 +... + a 2n xn = b 2... +... +... +... =... a n1 x 1 + a n2 x 2 +... + a nn x n = b n. 3.1. Metoda eliminacji Gaussa Metoda ta polega na eliminowaniu poszczególnych zmiennych i równań. Weźmy układ równań (1), który poprzez eliminowanie poszczególnych zmiennych i równań sprowadza się do postaci trójkątnej a 11 x 1 +a 12 x 2 +... + a 1n x n = b 1 (2) a 22 x 2 +... + a 2n x n = b 2 + = a nn x n = b n. Eliminujemy x 1 z równań od 2 do n (3). Procedurę powtarzamy z macierzą A (1) o rozmiarach (n-1)x(n-1) i wektorem b (1) o rozmiarze n-1, eliminując z nich drugą zmienną i otrzymując macierz A (2) o rozmiarach (n-2)x(n-2) i wektor b (2) o rozmiarze n-2 (3). W ten sam sposób postępujemy z kolejnymi macierzami A (2), A (3),..., A (n-1) oraz wektorami b (2), b (3),..., b (n-1). a (0) 11 x 1 + a (0) 12 x 2 +... + a (0) 1n x n = b (0) 1 (3) a (1) 22 x 2 +... + a (1) 2n x n = b (1) 2... + + = a (1) n2 x 2 +... + a (1) nn x n = b (1) n gdzie: a (1) ik= a (0) ik a (0) 1k (a (0) i1 / a (0) 11) i>1, k>1, b (1) i = b (0) i b (0) 1 (a (0) i1 / a (0) 11) i>1. Układ z macierzą trójkątną (2) można następnie łatwo rozwiązać zaczynając od obliczenia wartości x n z n-tego równania, następnie wstawić xn do równania n-1 i 3
wyliczyć z niego x n-1, następnie wstawić x n oraz x n-1 do równania n-2 i wyliczyć x n-2 aż do dotarcia do równania pierwszego i wyznaczenia x 1. Metoda w swojej normalnej postaci jest skuteczna prawie zawsze, gdy elementy na głównej przekątnej macierzy współczynników są różne od zera. W takich przypadkach można zastosować modyfikacje z wyborem elementu głównego w kolumnie. 3.2. Metoda Choleskiego rozkładu LL T Rozkład Choleskiego stosowany jest dla macierzy: symetryczych (a ij = a ji ), oraz dodatnio określonych (dla każdego x 0, x T Ax >0). Po spełnieniu powyższych warunków istnieje macierz dolno trójkątna L taka, ze LL T = A. W rozkładzie Choleskiego, macierz A poddana jest faktoryzacj, wskutek czego uzyskuję się dwie macierze trójkątne L i L T, (4). Poszczególne wartości macierzy L i L T (4) wyznaczamy ze wzorów (5). dla i>j, (5). 4. Realizacja wybranych algorytmów 4.1. Algorytm eliminacji Gaussa Realizacja sekwencyjnego algorytmu eliminacji Gaussa przedstawia rysunek 2. for( s=0; s<n; ++s) { tmp = tab[i][s] / tab[s][s]; for ( i=s+1; i<n; ++i) { for ( j=s; j<=n; ++j) A[i][j] = A[i][j] - tmp * A[s][j]; } } Rys. 2 Sekwencyjny algorytm eliminacji Gaussa 4
W niniejszej pracy równoległy algorytm eliminacji Gaussa dzieli się na dwa poziomy: zrównoleglenie na poziomie klastra zadaniem tego poziomu jest zapewnienie komunikacji odpowiednich danych na poszczególnych węzłach. Jest on realizowany na rdzeniach PPE. zrównoleglenie na poziomie węzła klastra zadaniem tego poziomu jest realizacja obliczeń na dostarczonych danych. Jest on realizowany na rdzeniach SPE. Nie można zrównoleglić pierwszej pętli, ponieważ wyniki kolejnych iteracji zależą od poprzednich, natomiast można zrównoleglić drugą pętlę. Dane na których dokonują się obliczenia z drugiej i trzeciej pętli można podzielić na odpowiednie paczki danych i rozesłać je na poszczególne węzły klastra, nazstępnie dokonać równolegle obliczeń. Należy pamiętać, że wartości danych oraz rozmiar paczek zależny jest od iteracji pierwszej pętli. Ogólna idea zrównoleglenia algorytmu na klastrze opartym o architekturę procesorów CELL/B.E.: 1. rozsyłanie wiersza wiodącego macierzy A na wszystkie węzły klastra (pierwszy poziom), 2. rozsyłanie odpowiednio podzieloną macierz A na pozostałe węzły klastra (pierwszy poziom), 3. równoległe wykonanie obliczeń, wykorzystując architekturę procesorów CELL/B.E., 4. pobranie wyników z pozostałych węzłów (pierwszy poziom). Czynność ta jest powtarzana aż do momentu gdy macierz A osiągnie rozmiar n=1. Dużym ograniczeniem stanowi sieć łącząca węzły, aby uzyskać większą wydajność algorytmu, została zminimalizowana komunikacja między węzłami klastra na ile pozwolił na to algorytm. Równomierny podział obliczeń nie przyniósł oczekiwanych rezultatów, z tego powodu większą część obliczeń wykonuje się na pierwszym węźle. Taki podział pozwolił na zmniejszenie komunikacji między węzłami oraz skrócenie czasu wykonywania algorytmu. 4.2. Algorytm rozkładu Choleskiego Dla równoległej realizacji algorytmu należy skorzystać z blokowej metody rozkładu Choleskiego (Rys. 3). Metoda Blokowa LL T daje możliwość zastosowania procedur z III poziomu biblioteki BLAS. W punkcie pierwszym (6) macierz trójkątną L wyznaczam przy pomocy algorytmu rozkładu Choleskiego. W punkcie drugim i trzecim (6) można wyznaczyć odpowiednie fragmenty macierzy wykorzystując procedury biblioteki BLAS III poziomu. Czynności te powtarzam dla bloku wyznaczonej macierzy M''. 1. A=L*L T, (6) 2. W T = L T * W'' T + 0* I => L * W'' T =W T => W'' T, 3. M = W'' * W'' T + M*I => M'' = M - W'' * W'' T. 5
A W W T L LT = X M W'' M'' W W'' T I Rys. 3 Blokowa matota rozkładu Choleskiego 5. Badanie wydajności W niniejszej pracy, realizacje wybranych algorytmów zostały zaimplementowane na klastrze, zbudowanym z czterech konsol do gier SONY PlayStation3. Na każdym węźle zainstalowany jest system operacyjny Fedora Core 6. Cały układ taktowany jest zegarem 3,2 GHz. Każdy węzeł ma 256 MB XDR DRAM pamięci systemowej. Komunikację między węzłami zapewnia sieć Ethernet 100BASE-TX[6], a na węzłach wymiana danych odbywa się przy pomocy EIB (Rys. 4). SPE0 SPE1 SPE2 SPE3 SPE4 SPE5 SPE0 SPE1 PS3B - PPE SPE0 SPE1 SPE2 SPE3 PS3A - PPE PS3D - PPE SPE2 SPE3 SPE4 SPE5 PS3C - PPE SPE4 SPE5 SPE0 SPE1 SPE2 SPE3 SPE4 SPE5 Ethernet 100BASE-TX EIB 2 x 25.6 GB/s Rys. 4 Schemat komunikacji klastra 6
5.1. Badanie wydajności algorytmu eliminacji Gaussa Czas sekwencyjnej realizacji algorytmu dla macierzy 2048x2048 na jednym rdzeniu PPE wyniósł 51.60313 s. Wykorzystanie procedur z drugiego poziomu biblioteki BLAS zwiększyło jego wydajność. Największym wzrostem wydajności okazała się równoległa implementacja algorytmu na jednym węźle klastra pomiar czasu 3.87848 s. W porównaniu z jej sekwencyjną wersją realizowaną na jednym rdzeniu PPE przyśpieszenie wyniosło S(6) = 13.7. Przyśpieszenie takie jest efektem wykorzystania operacji wektorowych (SIMD) oraz zastosowaniem double buffering [5] podczas pobierania danych na poszczególnych SPE. Mimo różnych prób realizacji algorytmu, czas wykonywania algorytmu na jednym węźle klastra był krótszy niż na kilku węzłach. Głównym powodem tego, jest wymóg dużej komunikacji i synchronizacji algorytmu. A przyczyną jest bardzo wolna sieć, pomiędzy poszczególnymi węzłami klastra w porównaniu z szybka magistralą EIB (Rys. 2). Tabela 1 Pomiar czasu dla algorytmu eliminacji Gaussa PPE PPE BLAS II poziom PPE + 6 SPE PPE + 6 SPE SIMD rozmiar: 2048x2048 pojedynczej precyzji 51.60313 [s] 39.17447 [s] 5.93999 [s] 3.87848 [s] 2 x ( PPE + 6 SPE) SIMD 4.15534[s] 5.2. Badanie wydajności algorytmu rozkładu Choleskiego Tabela 2 przedstawia pomiar czasu implementacji algorytmu w różnych konfiguracjach jednostek wykonawczych. Wynika z niej, że najlepszą konfiguracją jest ta, która łącznie składa się z 4-PPE i 24-SPE - pomiar czasu 1.73396 s. Porównując z realizacją na 4- PPE i 4-SPE, przyśpieszenie wynosi 1.16. Rozpatrując pozostałe konfiguracje, opierając się na pomiarach czasowych można zauważyć, że przyśpieszenie maleje dla konfiguracji z mniejszą ilością jednostek SPE. Dużą część czasu, poszczególnych implementacji zajmuje synchronizacja oraz przesyłanie danych. Dla konfiguracji z 4- PPE i 12-SPE czas przesyłania danych między węzłami, bez wykonywania obliczeń wynosi 0.80949 s. Tabela 2 Pomiar czasu dla algorytmu rozkładu Choleskiego rozmiar: 1024x1024 pojedynczej precyzji przyśpieszenie 4 x (PPE + 1 SPE) 2.01575 [s] - 4 x (PPE + 6 SPE) 1.73396 [s] 1.16 4 x (PPE + 3 SPE) 1.79193 [s] 1.12 3 x (PPE + 6 SPE) + (PPE + 1 SPE) 2 x (PPE + 6 SPE) + 2 x (PPE +1 SPE) 1.88609 [s] 1.06 1.91282 [s] 1.05 7
6. Podsumowanie W artykule zostały przedstawione realizacje wybranych algorytmów, zaimplementowane na klastrze zbudowanym z konsol do gry SONY PlayStation3. Na podstawie badań, można zauważyć że wykorzystanie procedur z biblioteki BLAS, skraca czas wykonywania algorytmów. Zastosowanie operacji wektorowych (SIMD) zwiększa wydajność algorytmów. Najlepszym rozwiązaniem realizacji algorytmu Gaussa, okazała się implementacja na jednym węźle. Zastosowanie większej ilości węzłów nie przyniosło oczekiwanych rezultatów. Powodem tego jest duża ilość komunikacji i synchronizacji algorytmu. A przyczyną jest wolna sieć między węzłami w porównaniu z bardzo szybkim i wydajnym interfejsem EIB. Algorytm rozkładu Choleskiego, został zaimplementowany w kilku konfiguracjach przy użyciu różnej ilości jednostek obliczeniowych SPE. Ze względu na wolną sieć między węzłami, większa część obliczeń wykonywana jest na jednym węźle, co w rezultacie przyczyniło się do lepszej wydajności. Z przeprowadzonych badań dla tego algorytmu wynika że im większa ilość jednostek obliczeniowych SPE tym przyśpieszenie wzrasta. 7. Literatura [1] A. Buttari, P. Luszczek, J.Kurzak, J. Dongarra, G Bosilca, A Rough Guide to Scientific Computing On the PlayStation 3 University of Tennessee 05/2007 [2] A. E. Eichenberger, Using advanced compiler technology to exploit the performance of the Cell Broadband Enginee architecture, IBM System Journal, vol 45, NO 1, 2006 [3] K. Wierzbicki, Intel i AMD na CELLowniku! CHIP 05/2005 str. 46-48 [4] IBM, Cell Broadband Engine Programming Handbook, Version 1.0, 04/2006 [5] IBM, Programming the Cell Broadband Engine Examples and Best Practices, 12/2007 [6] http://pl.playstation.com/ps3/support/specyfikacja-techniczna-ps3.html 8