Prawo Gustafsona (znane także jako prawo Gustafsona-Barsisa) – prawo w inżynierii komputerowej, które stanowi, że każdy wystarczająco duży problem może być efektywnie zrównoleglony. Prawo Gustafsona jest ściśle związane z prawem Amdahla, które określa limit przyspieszenia spowodowanego zrównolegleniem. Zostało po raz pierwszy sformułowane przez J. Gustafsona w 1988 roku.
gdzie:
Prawo Gustafsona odnosi się do wad prawa Amdahla, które nie jest skalowalne do tego stopnia, aby brać pod uwagę dostępność mocy obliczeniowej przy rozrastaniu się maszyny. Usuwa problem ustalonego rozmiaru problemu lub ustalonego ładowania obliczeń na równoległych procesorach: zamiast tego proponuje koncepcję ustalonego czasu, która prowadzi do skalowanego przyspieszenia.
Prawo Amdahla bazuje na ustalonym obciążeniu roboczym lub znanym rozmiarze problemu. Wynika z tego, że sekwencyjna część programu nie zmienia się wraz z rozmiarem maszyny (np. liczba procesorów), natomiast zrównoleglona część jest równomiernie rozdzielona na procesorów.
Efektem prawa jest przesunięcie w rozwoju tworzenia zrównoleglających kompilatorów i redukcja szeregowych części rozwiązań w celu poprawy wydajności systemów równoległych.
Niech będzie miarą rozmiaru problemu.
Przetwarzanie programu na równoległym komputerze zostaje zdekomponowane do:
gdzie:
Na sekwencyjnym komputerze odpowiedni czas przedstawia się jako gdzie jest liczbą procesorów w przypadku zrównoleglenia.
W takim przypadku przyspieszenie wynosi:
a więc
gdzie jest funkcją szeregującą.
Zakładając, że funkcja szeregująca zmniejsza się wraz z rozmiarem problemu przyspieszenie zmierza do jako że zmierza do nieskończoności, jak zamierzono.
W związku z tym, prawo Gustafsona próbuje ratować przetwarzanie równoległe przed efektem prawa Amdahla.
Prawo Gustafsona utrzymuje, że nawet użycie masowych równoległych systemów komputerowych, nie wpływa na szeregową część programu, której czas wykonania jest stały. Tak więc, hipoteza zawarta w prawie Amdahla wynika z pomysłu, że wpływ części szeregowej rośnie wraz ze wzrostem liczby procesorów.
Prawo Amdahla (w przybliżeniu) proponuje:
Prawo Gustafsona (w przybliżeniu) stanowi że:
Niektóre problemy nie posiadają zasadniczo większych zbiorów danych. Na przykład przetwarzanie jednego punktu danych na jednego mieszkańca świata, zwiększa się tylko o mały procent rocznie.
Nieliniowe algorytmy mogą sprawiać trudność w korzystaniu z zalet równoległości ukazanych przez prawo Gustafsona. Snyder wykazał, że algorytmy o złożoności obliczeniowej O(N³) przy podwojeniu współbieżności osiągają tylko 9% wzrostu w rozmiarze problemu. Tak więc, podczas gdy możliwe jest duże wykorzystanie współbieżności, może to przynieść jedynie niewielkie korzyści, nad oryginalnym, mniej współbieżnym rozwiązaniem -- jednak w praktyce występują masowe usprawnienia, szczególnie używające klastrów lub rozproszonych systemów obliczeniowych takich jak HTCondor.[potrzebny przypis]