Zadanie do wykonania Przepływ ciepła na kwadratowej płytce – Muscle Zaproponować algorytm oparty na metodzie różnicowej do rozwiązywania równania dyfuzji: δ2T/δx2 + δ2T/δy2 + f(x,y,t) – δT/δt = 0 Założyć ustalona wartość temperatury na brzegu.
Jak to ugryźć? Interesował nas nie tylko sam algorytm różnicowy, ale także możliwość rozdzielenia obliczeń na kilka równoległych wątków. Osiągnęliśmy kilka wariantów: Użycie 1 wątku – podstawowa wersja (bez Muscle) Użycie 2 wątków – podział aplikacji na 2 okna rozkładu temperatury. Użycie więcej wątków – podział aplikacji na 4 okna z rozkładami temperatur.
Kolejne etapy przepływu ciepła. Wariant 1)
Wariant 2) Kolejne etapy przepływu ciepła. Warunki brzegowe: [ 1 0 ] [ 1 0 ] [ 0 1 ] Wariant 2)
Wariant 3) Warunki brzegowe: [ 1 -1 ] [ -1 -1 ] [ 1 -1 ] [ -1 -1 ] Kolejne etapy przepływu ciepła. Wariant 3)
Synchronizacja Na komputerach wykorzystywanych do implementacji czasy uzyskane dla 2 wątków nie różnią się od czasów uzyskanych dla większej ilości. Nie udało się nam zmusić platformy Gridspace2 do współpracy z aplikacją w wersji wielowątkowej. W efekcie, wykorzystaliśmy dla porównania czasów domowy PC z procesorem Core2Quad.
Próba nr 1 Płytka 200x200 2000 kroków Uzyskane czasy: 2 płytki 4 płytki real 17s real 11s user 18s user 12s sys 1.7s sys 1.4s
Próba nr 2 Płytka 200x200 4000 kroków Uzyskane czasy: 2 płytki 4 płytki real 24s real 16s user 28s user 18s sys 2.5s sys 2s
Wnioski Wynikowy zysk przy zastosowanej metodzie zależy nie tylko ściśle od implementacji, ale także od możliwości sprzętowych procesora. Najprawdopodobniej przy większej liczbie wątków, przy użyciu klastrów z platformy Gridspace2 uzyskalibyśmy proporcjonalnie mniejsze pomiary.