Lista przedmiotów z materiałami udostępnionymi dla studentów

Dla_studentów
  • Increase font size
  • Default font size
  • Decrease font size

Jacek Galanciak

Użycie funkcyjnych języków programowania do współbieżnej obsługi architektur wielordzeniowych


Concurrent computations in multi-core architectures using functional programming languages


Opiekun pracy dyplomowej: dr hab. inż. Artur Klepaczko
Praca dyplomowa magisterska obroniona 2010-09-24
Streszczenie pracy dyplomowej:
Obserwacja częstotliwości taktowania współczesnych mikroprocesorów pokazuje, iż przyrost szybkości zegara zatrzymał się niemal całkowicie w roku 2005. Projektanci układów napotkali na problemy, których rozwiązanie jest trudne lub nieopłacalne. Z tego powodu, zmieniono kierunek zwiększania wydajności komputerów. Zamiast podwyższać częstotliwość pracy zegara, umieszcza się w tym samym układzie kilka rdzeni pracujących jednocześnie. Nowy trend rozwoju procesorów stwarza jednak kolejny problem – programy pisane z myślą o wykonaniu sekwencyjnym nie potrafią wykorzystać wielu rdzeni procesora. Powstaje tutaj niepokojąca zależność – komputery stają się coraz szybsze, lecz aplikacje działają cały czas z taką samą prędkością. Pojawia się zatem konieczność zastąpienia algorytmów sekwencyjnych oprogramowaniem zbudowanym ze współbieżnie działających składników. Jednakże programowanie współbieżne stanowi nadal aktualny problem. W praktyce okazuje się, iż jego efektywne rozwiązanie wymaga nowoczesnych technik informatycznych. Klasyczne podejście do współbieżności, oparte o wątki, blokady i synchronizacje współdzielonych danych, jest rozwiązaniem mało wygodnym, wymagającym dużego nakładu pracy. Tak powstały kod jest niezwykle rozległy, podatny na błędy i trudny w rozbudowie. Niniejsza praca ma na celu przedstawienie alternatywnego sposobu na programowanie współbieżne. Ma ona zaprezentować języki funkcyjne, oparte na całkowicie odmiennym paradygmacie programowania. Zostanie umówiona składnia trzech współczesnych języków funkcyjnych – Scala, Erlang i Clojure wraz z ich technikami obsługi współbieżności – pamięcią transakcyjną oraz modelem aktora. Zwieńczeniem rozprawy jest praktyczna implementacja współbieżnie działającego serwera HTTP dokonującego klasyfikacji wektorów przy użyciu sztucznej sieci neuronowej. Aplikacja ma wykazać, że użycie języka funkcyjnego faktycznie wiąże się z wysoką efektywnością obliczeniową i użyciem wszystkich rdzeni procesora oraz ma sprawdzić, czy programowanie funkcyjne rzeczywiście upraszcza i skraca zapis programu.
Abstract:
Latest technological development in the area of central processing units shows an interesting phenomenon. The continuous rise of CPU clock frequency, which has been present for decades, stopped in 2005. It does not, however, mean that the engineers encountered a hard limit preventing silicon microprocessors from further development. The progress moved to different area – instead of increasing CPU clock frequency, engineers tend to put several cores on a single chip. However, horizontal scaling created a new challenge. Sequential programs running on modern multi-core machines notice no performance improvements. It is certain that the only way to fully utilize computing power of all cores is concurrent programming. Thus, modern languages like Java and C++ were made capable of handling multithreading. Classical approach towards concurrent programming involves intensive use of locking, shared data synchronization and threading. Unfortunately, these techniques tend to grow applications' codebase, making it laborious to further develop the program. In addition, shared variables accessed concurrently may cause data consistency violations and consequently numerous bugs which are often difficult to handle. The dissertation suggests functional programming as an alternative way of handling massive concurrency. It involves a complete paradigm shift, including use of immutable data types and functions instead of variables. The thesis continues the subject on two different concurrency programming methods – actor model and software transactional memory. Finally, the dissertation includes practical implementation of neural network server over HTTP protocol. It is to demonstrate both the simplicity of expressive functional code and high performance of concurrent programs written in a functional language.