Celem ćwiczenia było nabycie umiejętności pisania programów przetwarzanych równolegle. Naszym zadaniem było napisanie programu liczącego całkę metodą trapezów, wykorzystując różną liczbę wątków.
Zadanie można było podzielić na dwie części. Przygotowanie oprogramowania oraz opracowanie wyników.
W pierwszej części należało przygotować funkcję pozwalającą obliczyć całkę metodą trapezów w sposób sekwencyjny. Wykonanie takiej funkcji pozwoliło przypomnieć sobie numeryczną metodę oraz skonfrontować wyniki otrzymane w sposób sekwencyjny i równoległy.
Następna funkcja korzystała już z wątków. Zależnie od ustawionej liczby wątków funkcja dzieliła pętle liczącą całkę na części. Każdy wątek dostawał część iteracji do wykonania, a ich wyniki zostały zsumowane.
Celem trzeciej funkcji była dekompozycja. Zadaną całkę dzieliła na mniejsze całki, których liczba była równa liczbie wątków. Każdy wątek dostawał swoją mniejszą całkę do policzenia. Wyniki, które zwróciły wątki zostały zsumowane, a wynik wyświetlony.
W moim programie liczbę wątków można było zmienić przez zmianę stałej zdefiniowanej na początku programu, bądź poprzez uruchomienie programu z liczbą wątków podaną jako pierwszy parametr.
Funkcją, dla której liczyliśmy całkę oznaczoną była funkcja 1/(1+x^2) w granicach od 0 do 1. Wynikiem tej całki jest liczba pi.
Jako drugą część zadania należało dokonać pomiarów czasu wykonania dla różnej liczby wątków i iteracji. Należało też policzyć błąd numeryczny w obliczeniach, który był zależny od liczby iteracji.
Wykresy tych pomiarów zostały przedstawione na załączniku do sprawozdania.
Zadanie to nauczyło nas podstawowych zastosowań programowania równoległego. Pokazało nam również, że istnieją różne możliwości jego zastosowania. Wybór metody powinien być uwarunkowany zagadnieniem jakie rozpatruje programista. Analizując zebrane dane zauważyłem, że równoległe wykonanie obliczeń dla całki nie miało sensu dla małych liczby iteracji. Czas potrzebny na utworzenie i obsługę wątków znacznie przekraczał złożoność obliczeniową zagadnienia. Warto również zauważyć, że liczba wątków większa niż 4 nie gwarantowała szybszego czasu obliczeniowego dla mojego procesora. Delikatny zysk można jeszcze zauważyć przy 8 wątkach gdyż w procesorze została zastosowana technologia hyper threading, która dla każdego rdzenia tworzy dodatkowy rdzeń wirtualny.
Specyfikacja komputera:
CPU: Intel i7 x4 + hyper threading
12GB RAM
Fedora 21
Kod: http://wklej.to/OPYBw