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

Linki zewnętrzne