Mathematica Obliczenia równoległe Podstawowe komendy obliczeń równoległych |
![]() |
Obliczenia równoległe w środowisku programu Mathematica polegaja na równoległej pracy wielu jąder obliczeniowych. Głowny proces obliczeniowy steruje pracą poszczególnych Kerneli oraz wymianą informacji.
Szereg komend programu Mathematica ma swoje odpowiedniki wykorzystywane w obliczeniach równoległych. Przykładem takiej komendy jest polecenie Table[...]. Polecenie to najogólniej rzecz ujmując tworzy listę określonych elementów. Poniżej jest zaprezentowany wynik zastosowania komendy Table[...] oraz jej równoległego odpowiednika ParallelTable[...].
Oba polecenia dokonują rozkładu na czynniki pierwsze (polecenie FactorInteger[...]) części całkowitej (polecenie Floor[...]) liczb postaci:

Rozdładanych na czynniki pirwsze jest 100 liczb, gdyż wskaźnik i zmienia wartość od 1 do 100.
Uwaga: kliknięcie na zbyt pomniejszonych obrazach pozwala wyświetlić ich zawartość w pełnej rozdzielczości.
Polecenie w wersji sekwencyjnej ma postać:

Dyrektywa AbsoluteTiming jest poleceniem wyświetlenia czasu obliczeń, który w sekwencyjnej wersji polecenia wyniósł ok.3.78 sekundy.
W wersji równoległej polecenie to ma postać:

W równoległej wersji obliczeń każde jądro obliczeniowe liczy inny fragment listy wynikowej, czyli dokonuje rozkładu innych liczb na czynniki pierwsze. O tym, które jądro liczy rozkład określonych liczb decyduje proces sterujący, który tak dzieli zadanie, aby równomiernie obciążyć wszystkie wykorzystywane procesy obliczeniowe.
Polecenie LaunchKernels[...] jest jednym z poleceń inicjowania pracy dostępnych jęder obliczeniowych. Czas obliczeń w tym wypadku wyniósł ok.1.83 sekundy. Widoczne jest wyraźne zmniejszenie czasu obliczeń przy obliczeniach równoległych. Zastosowanie np. 10 procesów obliczeniowych nie oznacza, że obliczenia będą zrealizowane 10 razy szybcie. Nie do pominięcia jest czas, który proces sterujący poświęca na komunikację z procesami obliczeniowymi, wysyłanie poleceń i odbieranie wyników.
Obliczenia publikowane na tej stronie zostały zrealizowane w sieci lokalnej firmy Gambit, standardowo obciążonej bieżącą obsługą działalności firmy. Do obliczeń użyto 12 jąder obliczeniowych. Konfigurację systemu obliczeń równoległych pokazują wyniki poniżej prezentowanych poleceń.

Wynikiem tego polecenia jest wartość podająca liczbę dostępnych Kerneli obliczeniowych. Zmienna systemowa $ConfiguredKernels, pokazana poniżej podaje listę dostępnych jęder obliczeniowych.

W wyświetlonej konfiguracji widoczne jest, że do obliczeń użyto 12 systemów Kernel pracujących pod kontrolą Wolfram Lightweight Grid Manager, wydajnego systemu pozwalajcego wyszukiwać i automatycznie uruchamiać dostępne w sieci lokalnej jądra obliczeniowe programu Mathematica. Na każdym z komputerów (wymionione w kolejności ich występowania na liście) pc211, pc202, pc201, pc210, pc209 oraz pc204 uruchomione zostały po dwa jądra obliczeniowe, o czym informuje wartość parametru KernelCount.
Uniwersalnym poleceniem dokonującym automatycznego zrównoleglania obliczeń jest komenda ParallelEvaluate[...]. Polecenie to kieruje do równoległych obliczeń kod, który jest argumentem tego polecenia. Zostaje on rozdzielony pomiędzy dostępne procesy obliczeniowe lub pomiędzy procesy wymienione jako drugi argument polecenia. Przykład komendy podano poniżej:

Do każdego jądra obliczeniowego zostaje skierowane zapytanie o wartości pewnych zmiennych systemowych identyfikujacych proces obliczeniowy oraz parametry jego pracy. Wyniki z każdego Kernela obliczeniowego są kolekcjonowane przez proces sterujący i wyświetlane w formie zbiorczej tabeli.
Innym przykładem wykonywania obliczeń równoległych jest zastosowanie funkcji ParallelMap[...] jako równoległego odpowiednika funkcji Map[...].
Co robi funkcja Map[...]?
Celem tej funkcji jest zastosowanie określonej operacji do listy elementów. W przykładzie na rysunku poniżej funkcja f zastosowana została do elementów lisy {a, b, c, d, e}. Zapis f/@ to inna składnia komendy Map[...].

Co robi funkcja ParallelMap[...]?
Dokładnie to samo co funkcja Map[...], ale równoległe. Operacja wykonywana przez funkcję Map[...] jest doskonałym materiałem do zrównoleglenia. Należy uruchomić obliczanie funkcji f(a) przez pierwsze jądro obliczeniowe, wartości f(b) przez drugie i tak dalej. Te czynności właśnie zleca do wykonania przez jądra obliczeniowe proces sterujący gdy otrzyma pokazane powyżej polecenie.
Przykładem numerycznym niech będzie zastosowanie funkcji N[...] do listy trzech stałych: podstawy logarytmów naturalnych, liczby Pi oraz stałej Catalana. Funkcja N[...] jest poleceniem wyświetlenia określonej liczby cyfr znaczących rozwinięcia dziesiętnego. W przykładzie liczone sa rozwinięcia dziesiętne podanych stałych matematycznych z dokładnością do 100 cyfr znaczących.

W wersji równoległej wartość rozwinięcia każdej stałej jest liczona przez inny proces obliczeniowy.