Projekt 2
Algorytmy równoległe i rozproszone
Symulacja termodynamiczna (rozchodzenia się ciepła) 2D z wykorzystaniem obliczeń równoległych
Bartosz Próchniak 119428
Bartłomiej Nowak 119413
Mariusz Redwanz 119436
Symulacje zjawisk fizycznych są wielkim wyzwaniem nawet dla nowoczesnych procesorów. Zasadniczo istnieje silna zależność pomiędzy dokładnością symulacji, a złożonością obliczeń. Symulacje komputerowe stały się niezwykle ważnym elementem badań na przestrzeni ostatnich lat. W dużej mierze zawdzięczamy to możliwościom osiągnięcia bardzo wysokiej dokładności tych symulacji na którą pozwala zrównoleglenie obliczeń.
W celu demonstracji możliwości wykorzystania obliczeń równoległych w symulacjach zjawisk fizycznych, zbudowaliśmy prosty model dwuwymiarowy rozchodzenia się ciepła.
Ciepło rozchodzi się w prostopadłościanie, złożonym z jednej warstwy sześcianów o bokach równych 1m. Obrazowo prezentują to rysunki 1 i 2. W obrębie sześcianu temperatura jest jednakowa. Założyliśmy również, że przestrzeń poza prostopadłościanem jest doskonałym izolatorem, więc ciepło może przepływać tylko między sześcianami. Napisany program komputerowy prezentuje opisany prostopadłościan widziany z góry. Każdy piksel może reprezentować inną substancję. Substancję definiujemy przez współczynnik przewodnictwa cieplnego, ciepło właściwe oraz gęstość.
Rysunek
Rysunek
Z wcześniejszych założeń wynika, iż dany piksel może wymieniać ciepło (energię) ze swoim prawym, lewym, dolnym lub górnym sąsiadem. Uwzględniliśmy tylko przepływ ciepła poprzez kondukcje, a więc podczas bezpośredniego kontaktu dwóch ciał. Energię jaka przepłynie między dwoma stykającymi się pikselami wyliczamy na podstawie poniższego wzoru:
$$\mathrm{Q = \ \lambda\ \bullet \ }\frac{\mathrm{S\ \bullet \ \Delta T}\mathrm{\ \bullet}\mathrm{\text{\ t\ }}}{d}$$
gdzie:
Q – ilość ciepła jaka przepłynie w jednostce czasu [J]
λ – współczynnik przewodnictwa cieplnego [W/(mK)]
S – pole przekroju przez który przepływa ciepło [m2]
ΔT – różnica temperatur miedze
t – czas przepływu [s]
d – grubość przegrody przez jaką przepływa ciepło [m]
Wiedząc ile ciepła przepłynie (lub odpłynie) do analizowanego piksela, trzeba określić jak wpłynie to na jego temperaturę. Do tego celu wykorzystujemy ciepło właściwe:
$$c = \ \frac{Q}{m\ \bullet \ T}$$
$$\backslash n{T' = \ \frac{Q}{m\ \bullet \ c}}$$
gdzie:
∆T' – przyrost temperatury [K]
c – ciepło właściwe [J/(kgK)]
m – masa ciała [kg]
∆Q – dostarczone ciepło [W/(mK)]
Jako, że w naszym przypadku S = 1m2, d = 1m, a m = g (gęstość) * 1m3, możemy połączyć i uprości powyższe wzory. W wyniku otrzymujemy:
$$T^{'} = \ \frac{\lambda\ \bullet \ T}{g\ \bullet c}$$
Oczywiście rachunek jednostek należy przeprowadzić na pełnym wzorze, tu jedynie wartość się zgadza (co przy naszej symulacji jest wystarczające). Trzeba też zauważyć, że różnica temperatur sąsiednich pikseli może być ujemna, co da ujemną energię. Ona z kolei pociąga za sobą ujemny przyrost temperatury analizowanego piksela. Jest to poprawne i oznacza po prostu odpływ ciepła z piksela (przypadek gdy sąsiad jest chłodniejszy). Wyliczanie nowej temperatury piksela polega na zsumowaniu energii wymienionej z sąsiadami, obliczeniu przyrostu temperatury dla substancji z jakiej piksel się składa i dodaniu wyniku do starej wartości temperatury.
Zakładamy, że każdy z procesorów ma dostęp do współdzielonej pamięci. Każdy z nich może dostać dowolny zbiór pikseli do przetworzenia. Siatka pikseli z chwili t - 1 jest stała podczas budowania siatki dla chwili t, więc jedyne o co trzeba się zatroszczyć przy narysowaniu nowej siatki to zakończenie pracy przez wszystkie wątki.
Poniżej przestawiono wyniki naszych prostych testów. Dysponowaliśmy procesorem dwurdzeniowym, więc testy przeprowadziliśmy dla 1 i 2 wątków, gdyż większa ich ilość była by bezsensowna. Kolumny reprezentują ilość wątków, wiersze z ilu wygenerowanych ramek był liczony średni czas generacji ramki. Wartości w komórkach to średni czas generacji ramki podany w sekundach. Na ramkę składało się 146 963 pikseli.
Tabela
1 | 2 | |
---|---|---|
1 | 0,294 | 0,140 |
2 | 0,301 | 0,169 |
4 | 0,281 | 0,137 |
8 | 0,262 | 0,147 |
16 | 0,269 | 0,144 |
32 | 0,270 | 0,138 |
64 | 0,292 | 0,150 |
128 | 0,271 | 0,139 |
Mimo, iż testy przeprowadzony były dla małej ilości procesorów, to po sposobie zrównoleglania obliczeń można wnioskować, że rozwiązanie jest dobrze skalowalne.
Warto też zauważyć, że przepływ ciepła zależy od różnicy temperatur między stykającymi się ciałami. Również ilość dostarczonej energii przekłada się na różny przyrost temperatury, który zależny jest od właściwości fizycznych substancji.