Wstęp do obliczeń równoległych

Siemasz!

W związku z tym, że na studiach w najbliższym semestrze mam drobny projekt związany z obliczeniami równoległymi postanowiłem, że napiszę o tym tutaj kilka słów. Zapraszam zatem do czytania! Uwaga! Achtung! To będzie o tej części, gdzie programista musi umieć w matematykę!

Po co to wszystko?

Pomyślmy sobie tak. Wszystko w jakiś sposób da się zamodelować matematycznie. A po co takie modelowanie matematyczne się robi? Bo na podstawie owego modelu można np. wyznaczyć pogodę, optymalny kształt karoserii samochodu, żeby stawiała najmniejszy opór podczas jazdy, w jaki sposób będzie się grzała obudowa urządzenia, jakie naprężenia powstają w zębatce na tylnym kole w motocyklu itd. Praktycznie wszystko, o czym teraz pomyślisz, ma swój model matematyczny i podczas projektowania optymalizuje się owy model w celu uzyskania jak najlepszych wyników, tj. najwyższych prędkości, wytrzymałości itd. Problem w tym, że im dokładniejszy model, tym więcej zmiennych jest do wyliczenia i równań do rozwiązania. Ponadto często w modelu matematycznym występują tzw. równania różniczkowe, które dokładnie jesteśmy w stanie rozwiązać tylko dla podstawowych figur geometrycznych. I tutaj przychodzą nam z pomocą komputery. Po pierwsze człowiek ręcznie nie jest w stanie rozwiązać w skończonym czasie i do tego bezbłędnie układu równań z milionem niewiadomych, a może ich być znacznie więcej. (Przy okazji wejdź na stronę pakietu oprogramowania Ansys, które dzisiaj króluje jako narzędzie do symulacji w sumie… wszystkiego o czym teraz pomyślałeś.

Jak sobie z tym poradzić?

Dobra, już wiemy, że komputer będzie robił to lepiej. Po prostu szybciej. Ale czy taki zwykły pececiak i tradycyjnie pisane oprogramowanie pozwolą na rozwiązanie tak wielkich zbiorów równań? No nie. Potrzeba wielkich maszyn. Takich, które pod maską mają tysiące rdzeni gotowych do przetwarzania terabajtów danych, których sprawność nie wyraża się już częstotliwością taktowania, a w tzw. FLOPSach – jest to ilość operacji zmiennoprzecinkowych, jaką może wykonać procesor w sekundę. Te maszyny zaprzęga się do wykonywania najcięższych obliczeń. Są to superkomputery.

Budowa superkomputera to bardzo ciężki temat. W ogólności jest to zbiór małych komputerów połączonych w jedną dużą sieć umożliwiającą wymianę danych stanowiących podstawę obliczeń. Kiedyś CISCO pracowało nad technologią, która umożliwiała bezpośrednie łączenie samych procesorów, ale niestety nie udało mi się znaleźć więcej informacji na ten temat. Sposób połączenia komputerów jest ważny, ponieważ sieć może być ogranicznikiem wydajności takiego komputera.

Trochę matmy na dokładkę

Czy wszystko da się tak z marszu liczyć równolegle? Nie. Jednym ze sposobów jest dekompozycja, tzn. podział całego elementu na mniejsze części. Po pierwsze umożliwia to zrównoleglenie obliczeń, po drugie umożliwia rozwiązanie równań różniczkowych dla kształtów, dla których są one nierozwiązywalne (poprzez aproksymację obszaru złożonego). Do tego trzeba na dokładkę zastosować naprzemienną metodę Schwarza z łatką od panów Dryji oraz Widlunda. Nie będę się powtarzał, zachęcę tylko odwiedzenia magazynu Delta, gdzie autor dokładnie o tym opowiada.

Ja też chcę, ja też!

Czy można zacząć zabawę z klastrami i obliczeniami równoległymi w domu? Można. Przykłady? Proszę bardzo.

Wystarczy wpisać odpowiednią frazę w Google czy w YouTube i od razu pojawi się cała sterta odpowiednich linków.

No dobrze, a co z oprogramowaniem? W Pythonie zapoznaj się z biblioteką Parallel Python. Jeżeli znasz więcej, czy to w Pythonie czy w innych językach, daj znać w komentarzach!

No a potrzebuję tych Raspberry? Nie! Wystarczy, że masz więcej niż jeden komputer w domu i połączysz je w sieć lokalną. Tyle 🙂

Podsumowanie

Mam nadzieję, że to fajna zajawka. W kolejnych częściach opisze dokładnie, nad czym pracuję. Do zobaczenia! 🙂

Czytaj również:
« »