Rozdział 11. Implementacja wybranych algorytmów z teorii chaosu na procesor Cell/B.E.

Mariusz Zaborski

Prowadzący zajęcia projektowe: Rafał Petryniak (strona domowa zajęć projektowych).

Spis treści

1. Algorytm sekwencyjny
1.1. Projekt
1.2. Implementacja
2. Algorytm równoległy
2.1. Projekt
2.2. Implementacja

W matematyce i fizyce, są to własności równań lub układów równań, polegające na dużej wrażliwości rozwiązań na dowolnie małe zaburzenie parametrów. Dotyczy to zwykle nieliniowych równań różniczkowych i różnicowych, opisujących układy dynamiczne. Jeśli takie równania opisują zmiany jakiegoś układu w czasie, to niewielkie zaburzenie warunków początkowych powoduje rosnące wykładniczo z czasem zmiany w zachowaniu układu. Popularnie nazywane jest to efektem motyla - znikoma różnica na jakimś etapie może po dłuższym czasie urosnąć do dowolnie dużych rozmiarów. Powoduje to, że mimo że model jest deterministyczny, w dłuższej skali czasowej wydaje się zachowywać w sposób losowy. Zachowanie takie można zaobserwować w wielu zjawiskach fizycznych, między innymi w zmianach pogody, oscylujących reakcjach chemicznych, zachowaniu niektórych obwodów elektrycznych i ruchu ciał oddziałujących grawitacyjnie. Współczynnik Lapunowa układu dynamicznego jest miarą która charakteryzuje tempo separacji infinitezymalnie (nieskończenie) bliskich trajektorii. Pozwala on też ustalić zachowanie się układu dynamicznego dla określonych zmiennych (parametrów). Ogólnie służy do badania układów dynamicznych. Podstawy matematycznej teorii stabilności ruchu stworzył A.M.Lapunow, który rozpatrywał jak szybko wzrasta w czasie ewolucji odległość pomiędzy dwiema bliskimi trajektoriami. Jeżeli układ dynamiczny jest chaotyczny, odległość taka rośnie w czasie t wykładniczo jak , gdzie współczynnik zwany wykładnikiem Lapunowa jest dodatni. Wykładniki Lapunowa umożliwiają ocenę zjawiska chaotycznego w tzw. przestrzeni fazowej. Przestrzeń fazowa to inny sposób obrazowania wielowymiarowych zjawisk dynamicznych. W zwykłym przebiegu czasowym oś pozioma wykresu obrazuje czas, natomiast oś pionowa odpowiada za stan zjawiska w danej chwili (np. prędkość). W przestrzeni fazowej możemy ocenić wszystkie możliwe stany systemu, w każdej chwili czasowej. Trajektoria, to obraz wszystkich możliwych stanów, które przyjmuje układ w kolejnych chwilach czasu.

Istnieje miara chaosu, a właściwie liczba która określa czy dane zjawisko jest możliwe do przewidzenia. Ta liczba to właśnie współczynnik Lapunowa stanowiący iloraz sumy logarytmów wartości bezwzględnej pewnego wyrażenia (wzrost populacji) przez liczbę sumowań. Współczynnik Lapunowa ma sens wtedy gdy wartości tego wyrażenia są nieujemne oraz liczba sumowań większa od zera. Istnieje wartość (r=3,57) tego wykładnika, powyżej której układ staje się nieprzewidywalny, a wartości mają charakter losowy. Aby wyznaczyć (przewidzieć) jakieś zjawisko, trzeba je najpierw opisać w sposób matematyczny i unormować. W wykonanej przeze mnie symulacji dla formuły rozwoju populacji N=N*r*(1-N). Symbol N jest unormowaną liczebnością stada zawierającą się w przedziale <0;1>, gdzie 0 oznacza brak populacji, a 1 oznacza maksymalną ilość populacji na danym terenie. Współczynnik Lapunowa od razu mówi czy rozwój populacji prowadzi do nieprzewidywanych skutków. Chaos charakteryzuje się tym, że trajektoria jaką poruszają się dwie populacje, które róznią się na początku chociaż w najmniejszy stopniu, mają przed sobą zupełnie inne historie. Początkowa liczebność stada w moim przypadku to 0.1. Sekwencja która się podawana jako dane wejściowe do programu stanowi nakaz dla populacji: 0 – brak przyrostu , 1 – przyrost. Najważniejsze w rozumieniu deterministycznego chaosu jest pojęcie jak duże znaczenie mają nawet najmniejsze składowe opisu danego zjawiska.

1. Algorytm sekwencyjny

  1. Zbieranie danych

  2. Tworzenie wątku

  3. Uruchomienie i wykonanie obliczeń na SPU

  4. Wyświetlenie wyniku

1.1. Projekt

Dane wejściowe:

  • Szerokość i Wysokość (number) – odpowiadają rozmiarowi wynikowej mapy bitowej. Wartość tych parametrów powinna znajdować się w przedziale (1;1000>

  • Ilość_populacji (number) – odpowiada ilości populacji, czyli dokładności wyliczeń współczynnika Lapunowa. Jest to zmienna, która najbardziej wpływa na ilość obliczeń.

  • Długość_sekwencji i Sekwencja (number, table) – wartości określające jak będzie rozwijać się populacja. Ile będzie zmian rozwoju populacji i jakie one będą.

  • Skala (number) – liczba według której skalowany jest obraz.

  • Przesunięcie X i Przesunięcie Y (number) – odpowiednie przesunięcia w pionie i poziomie.

  • Nazwa Pliku (string) – nazwa dla wynikowego pliku .BMP

1.2. Implementacja

Program napisany do reprezentacji wykładnika Lapunowa w postaci bitmapy został podzielony na dwie części. Są to programy PPU i SPU zgodnie z nazwami procesorów PS3, które je obsługują. Pierwszy program działa na procesorze PPU i jest programem głównym, który pobiera dane i tworzy wątki uruchamiające kolejne procesory SPU. Gdy taki wątek zostanie uruchomiony – SPU wykonuje odpowiednie obliczenia i wysyła je z powrotem wątkiem spu do PPU. Wątki wymieniające dane i aktywujące procesory nazywamy posix. Program działa na zasadzie zbierania wartości od użytkownika – rozdzielczości, skali, sekwencji, czyli jak zmieniała się w czasie dana populacja oraz nazwy pliku wynikowego. Wybór koloru dla danej wartości współczynnika Lapunowa jest kwestią nierozstrzygniętą tj. nie ma jakieś narzuconej reguły. Użyłem tu wartości z książki.

2. Algorytm równoległy

  1. Zbieranie danych

  2. Utworzenie Tablicy danych

  3. Tworzenie wątków

  4. Uruchomienie i wykonanie obliczeń na 6 SPU (procesy przydzielane przez PPU)

  5. Zebranie wyniku

  6. Wyświetlenie wyniku

2.1. Projekt

Dane wejściowe:

  • Szerokość i Wysokość (number) – odpowiadają rozmiarowi wynikowej mapy bitowej. Wartość tych parametrów powinna znajdować się w przedziale (1;1000>

  • Ilość_populacji (number) – odpowiada ilości populacji, czyli dokładności wyliczeń współczynnika Lapunowa. Jest to zmienna, która najbardziej wpływa na ilość obliczeń.

  • Długość_sekwencji i Sekwencja (number, table) – wartości określające jak będzie rozwijać się populacja. Ile będzie zmian rozwoju populacji i jakie one będą.

  • Skala (number) – liczba według której skalowany jest obraz.

  • Przesunięcie X i Przesunięcie Y (number) – odpowiednie przesunięcia w pionie i poziomie.

  • Nazwa Pliku (string) – nazwa dla wynikowego pliku .BMP

Dane wyjściowe:

  • Czas (numer) – czas wykonania programu

  • BMP (bmp) – mapa bitmapowa

2.2. Implementacja

Zasada zrównoleglenia:

Program zamiast zwyczajnie przekazać dane do procesora, najpierw tworzy tablicę danych. Ta tablica jest wysyłana przez PPU wątkami POSIX do procesorów SPU.

Tutaj zgodnie z polityką PPU obliczenia są dzielone na części i wykonywane na procesorach SPU. Każdy procesor ma cały czas dostęp do wszystkich danych, a wykonuje tylko swoją część pracy. Następnie wyniki są zbierane i wysyłane z powrotem do PPU.

Dzięki temu zabiegowi czas wykonania programu (dla większych danych) diametralnie się skraca. Poniższe rysunki powinny to dokładnie zobrazować. Jak widać dla większych wartości zmiennej "ilość pokoleń" czas wykonania programu zmniejsza się o połowę.