Rejestruj równoległe wykresy skalowania / wydajności


17

Wiele moich własnych prac dotyczy ulepszania skalowania algorytmów, a jednym z preferowanych sposobów wykazania równoległego skalowania i / lub wydajności równoległej jest wykreślenie wydajności algorytmu / kodu na podstawie liczby rdzeni, np.

sztuczny równoległy wykres skalowania

gdzie oś reprezentuje liczbę rdzeni, a oś pewną miarę, np. pracę wykonaną na jednostkę czasu. Różne krzywe pokazują równoległe wydajności wynoszące odpowiednio 20%, 40%, 60%, 80% i 100% przy 64 rdzeniach.yxy

Niestety, w wielu publikacjach wyniki te są wykreślane za pomocą skalowania dziennika , np. Wyniki w tym lub w tym dokumencie. Problem z tymi wykresami dziennika jest taki, że niezwykle trudno jest ocenić rzeczywiste równoległe skalowanie / wydajność, np

wprowadź opis zdjęcia tutaj

Który jest taki sam wykres jak powyżej, ale ze skalowaniem log-log. Zauważ, że teraz nie ma dużej różnicy między wynikami dla wydajności równoległej 60%, 80% lub 100%. Tutaj napisałem o tym trochę więcej .

Oto moje pytanie: jakie jest uzasadnienie pokazywania wyników w skalowaniu dzienników? Regularnie używam skalowania liniowego, aby pokazywać własne wyniki, i regularnie jestem wbijany przez sędziów, którzy twierdzą, że moje własne równoległe wyniki skalowania / wydajności nie wyglądają tak dobrze, jak (log-log) wyniki innych, ale przez całe moje życie nie rozumiem, dlaczego powinienem zmieniać style fabuły.

Odpowiedzi:


16

Obecnie piszemy artykuł, który zawiera wiele porównywalnych fabuł i mniej więcej mieliśmy ten sam problem. Artykuł dotyczy porównania skalowania różnych algorytmów w stosunku do liczby rdzeni, która wynosi od 1 do 100 000 w BlueGene. Powodem użycia wykresów dziennika w tej sytuacji jest liczba rzędów wielkości. Nie ma możliwości wykreślenia 6 rzędów wielkości w skali liniowej.

I rzeczywiście, podczas rysowania czasu na podstawie liczby rdzeni w dzienniku, algorytmy nie są bardzo rozróżnialne, jak widać na poniższym wykresie. Czasy szeregu algorytmów w skali loglog.  Różne algorytmy są trudne do rozróżnienia.

mip=T.1/(pT.p)T.1T.pppmipp

mip=T.rmifa/(pT.p)T.rmifa

Wykreślenie względnej wydajności równoległej w skali semilog pokazuje dość wyraźnie skalowanie algorytmu, a także pokazuje, w jaki sposób algorytmy działają względem siebie. Względna wydajność równoległa szeregu algorytmów w stosunku do liczby rdzeni.


2
x

Zauważ, że wykresy nie wyglądają tak imponująco jak inne wykresy skalujące, ponieważ dość szybko wypadają na skali logarytmicznej. Teoretycznie możesz również wykreślić efektywność na wykresie dziennika, aby zobaczyć więcej szczegółów na prawej krawędzi. Zauważ jednak, że oznacza to, że patrzysz szczegółowo na bardzo niskie wydajności, co prawdopodobnie nie jest bardzo interesujące.
olenz

14

Georg Hager napisał o tym w Fooling the Mas - Stunt 3: Skala dziennika jest twoim przyjacielem .

Chociaż prawdą jest, że wykresy logarytmiczne silnego skalowania nie są zbyt wymagające w wysokiej klasie, pozwalają one na pokazanie skalowania na wiele innych rzędów wielkości. Aby zobaczyć, dlaczego jest to przydatne, weź pod uwagę problem 3D z regularnym udoskonalaniem. W skali liniowej można rozsądnie wykazać wydajność dla około dwóch rzędów wielkości, np. 1024 rdzeni, 8192 rdzeni i 65536 rdzeni. Czytelnik nie jest w stanie stwierdzić z wykresu, czy prowadziłeś coś mniejszego, i realistycznie, fabuła w większości porównuje tylko dwa największe przebiegi.

Załóżmy teraz, że możemy zmieścić w pamięci 1 milion komórek siatki na rdzeń, co oznacza, że ​​po silnym skalowaniu dwa razy 8-krotnie możemy nadal mieć 16k komórek na rdzeń. Jest to wciąż spory rozmiar subdomeny i możemy oczekiwać, że wiele algorytmów będzie tam działać wydajnie. Omówiliśmy spektrum wizualne wykresu (od 1024 do 65536 rdzeni), ale nie weszliśmy nawet w reżim, w którym silne skalowanie staje się trudne.

Załóżmy zamiast tego, że zaczęliśmy od 16 rdzeni, również z 1 milionem komórek siatki na rdzeń. Teraz, jeśli skalujemy do 65536 rdzeni, będziemy mieli tylko 244 komórki na rdzeń, co będzie znacznie bardziej wymagające. Oś logarytmiczna jest jedynym sposobem wyraźnego przedstawienia widma od 16 rdzeni do 65536 rdzeni. Oczywiście nadal możesz używać osi liniowej i podpisu, że „punkty danych dla 16, 128 i 1024 rdzeni pokrywają się na rysunku”, ale teraz używasz słów zamiast samej figury do wyświetlenia.

Skala log-logu pozwala również skalowaniu „odzyskać” atrybuty maszyny, takie jak przejście poza pojedynczy węzeł lub stelaż. Od Ciebie zależy, czy jest to pożądane, czy nie.


xy

1
Jest to znacznie trudniejsze do silnej skali jeden problem, o współczynnik 4096 skalę niż do dwóch różnych rozmiarach problem przez współczynnik 64 każdy. W podanym przeze mnie przykładzie łatwo jest sprawić, by dwa niezależne przypadki wykazywały wydajność wyższą niż 95%, ale sprawienie, by pojedynczy połączony przypadek miał mniej niż 30% wydajności. W nauce i przemyśle nie ma z góry określonego powodu, dla którego pożądany czas zawracania mieści się w wąskim przedziale rozmiarów, w którym algorytm jest „wygodny”.
Jed Brown

Całkowicie się zgadzam, że skalowanie od jednego do tysięcy jest wielkim wyzwaniem! Powodem, dla którego uważam różne wielkości za różne problemy, jest to, że będzie to oznaczało różne rzeczy dla użytkownika końcowego. Np. W MD większość biologów nie ma BlueGene w piwnicy, ale ma kilka wielordzeniowych stacji roboczych, a nawet stypendium na jakiś czas na klastrze średniej wielkości (niewielka liczba węzłów), a ludzie patrzą na duże Problemy z CFD nie będą jednak zbytnio obchodzić przypadku z jednym węzłem, ponieważ problem nie mieści się w pamięci. Nie chodzi o komfort algorytmu, ale o konfigurację użytkownika.
Pedro

2

Zgadzam się ze wszystkim, co Jed miał do powiedzenia w swojej odpowiedzi, ale chciałem dodać następujące. Stałem się fanem sposobu, w jaki Martin Berzins i jego koledzy pokazują skalowanie dla swojego środowiska Uintah. Wykreślają słabe i silne skalowanie kodu na osiach log-log (wykorzystując czas działania na krok metody). Myślę, że pokazuje to, jak dobrze skaluje się kod (chociaż odchylenie od idealnego skalowania jest trochę trudne do ustalenia). Patrz na przykład strony 7 i 8, rysunki 7 i 8 tego * artykułu. Podają także tabelę z liczbami odpowiadającymi każdej skali.

Zaletą tego jest to, że po podaniu liczb recenzent nie może wiele powiedzieć (a przynajmniej niewiele, czego nie można obalić).

*JOT. Luitjens, M. Berzins. „Poprawa wydajności Uintah: wielkoskalowe środowisko obliczeniowe adaptacyjnej siatki”, w toku 24. sympozjum międzynarodowego przetwarzania równoległego i rozproszonego IEEE (IPDPS10), Atlanta, GA, str. 1--10. 2010. DOI: 10.1109 / IPDPS.2010.5470437


Czy jest szansa, że ​​umieścisz obraz bezpośrednio w swojej odpowiedzi?
Aron Ahmadia

Choć prawdopodobnie pożyczają swoje figury, to wolę kierować ruch na stronę autorów. Może skończę liczby i własny wykres i wrócę później z postacią.
Bill Barth

Z tej perspektywy możesz owinąć obraz, aby zawierał linki do strony autora, a także zwiększyć ilość tekstu w łączu. Jeśli chcesz o tym więcej dyskutować, mogę otworzyć wątek meta / chat.
Aron Ahmadia

@BillBarth Twój link teraz przekierowuje teraz na ich stronę główną. Czy możesz to naprawić lub osadzić zamierzony obraz?
Jed Brown

1
Edytowano link @JedBrown. Dodano pełne odniesienie. Dodano DOI.
Bill Barth
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.