Skalowalna równoległość
Mówi się, że oprogramowanie wykazuje skalowalną równoległość , jeśli może wykorzystywać dodatkowe procesory do rozwiązywania większych problemów, tj. termin ten odnosi się do oprogramowania, dla którego obowiązuje prawo Gustafsona . Rozważmy program, którego czas wykonania jest zdominowany przez jedną lub więcej pętli, z których każda aktualizuje każdy element tablicy --- na przykład następujące obliczenie szablonu równania ciepła różnic skończonych :
dla t := 0 do T wykonaj dla i := 1 do N-1 wykonaj nowy(i) := (A(i-1) + A(i) + A(i) + A(i+1)) * .25 // wyraźna różnica w przód z R = 0,25 koniec dla i := 1 do N-1 do A(i) := nowy(i) koniec koniec
W powyższym kodzie możemy wykonać wszystkie iteracje każdej pętli „i” jednocześnie, tj. zamienić każdą w pętlę równoległą . W takich przypadkach często możliwe jest efektywne wykorzystanie dwukrotnie większej liczby procesorów w przypadku problemu o rozmiarze tablicy 2N niż w przypadku problemu o rozmiarze tablicy N. Tak jak w tym przykładzie, skalowalna równoległość jest zazwyczaj formą równoległości danych . Ta forma równoległości jest często celem automatycznej równoległości pętli .
Rozproszone systemy obliczeniowe i niejednorodne architektury dostępu do pamięci są zwykle najłatwiej skalowalne do dużej liczby procesorów, a zatem wydają się naturalnym celem dla oprogramowania wykazującego skalowalną równoległość. Jednak aplikacje ze skalowalną równoległością mogą nie mieć równoległości wystarczająco grubej , aby skutecznie działać na takich systemach (chyba że oprogramowanie jest żenująco równoległe ). W powyższym przykładzie druga pętla „i” jest żenująco równoległa, ale w pierwszej pętli każda iteracja wymaga wyników uzyskanych w kilku wcześniejszych iteracjach. Tak więc, w przypadku pierwszej pętli, równoległość może obejmować rozległą komunikację lub synchronizację między procesorami, a tym samym skutkować przyspieszeniem sieci tylko wtedy, gdy takie interakcje mają bardzo niski narzut lub jeśli kod można przekształcić, aby rozwiązać ten problem (tj . optymalizacja lokalności /skalowalnej równoległości).
Języki
- Ateji PX rozszerzenie języka Java umożliwiające skalowalną równoległość na wirtualnej maszynie Java (JVM)
- Binarna modułowa maszyna przepływu danych BMDFM
- SequenceL to funkcjonalny język programowania ogólnego przeznaczenia, którego głównymi celami projektowymi są wydajność na sprzęcie wielordzeniowym, łatwość programowania oraz przejrzystość/czytelność kodu