A A A

Mathematica
Obliczenia równoległe

Czy wszystko można liczyć równolegle?

Odpowiedź na postawione w tytule pytanie brzmi:
Oczywiście, że nie wszystko można liczyć równolegle!
Algorytmy obliczeń symbolicznych, wszelkiego rodzaju algorytmy iteracyjne są zagadnieniami, które muszą być liczone sekwencyjnie.
Istota tych algorytmów tkwi w ich sekwencyjności.

A oto kilka przykładów.
Najpierw do systemu zostaje skierowane zapytanie, ile jest dostępnych jąder obliczeniowych:



Skoro system obliczeń równoległych dysponuje 12 jądrami obliczeniowymi, to za pomocą funkcji Parallelize[...] zostanie skierowana do obliczeń równoległych symboliczne wyznaczenie całki z prostej funkcji wymiernej.



System oblicza wynik, ale informuje, że obliczenia zostały wykonane na jednym jędrze obliczeniowym. Ten typ obliczeń nie może być zrównoleglony. Wyświetlony na czerwono komunikat o błędzie może być wyłączony, aby mimo że obliczenia zostały wykonane sekwencyjnie nie zakłócać toku obliczeń, jeśli tego typu obliczenia znajdą się w dłuższej sekwencji.

Podobnie wygląda sytuacja z prezentowanym już wcześniej iteracyjnym algorytmem rozwiązywania równań nieliniowych, zastosowanym w formie funkcji FindRoot[...].



Podobnie jak poprzednio, obliczenia zostały wykonane ale pojawił się komunikat o tym, że obliczenia zostały wykonane sekwencyjnie.

Algorytmy rozwiązywania równań różniczkowych, to także algorytmy iteracyjne.



Obliczenia zostały wykonane czego dowodem jest wykres rozwiązania równania, pokazany poniżej.



  • A może jednak równolegle?

    Równania równiczokowe rozwiązywane są sekwencyjnie, gdyż sekwencyjność obliczeń tkwi w algorytmie numerycznym. A co w przypadku gdy równanie trzeba rozwiązać wielokrotnie?
  • Jakie zagadnienia można liczyć równolegle?

    Nie wszystkie algorytmy numeryczne nadają się do zrównoleglenia, ale istnieje klasa zagadnień, które bardzo dobrze nadaja się do tego celu.