Ile przyspieszenia daje hiperłącze? (W teorii)

38

Zastanawiam się, jakie jest teoretyczne przyspieszenie procesorów hiperwątkowych. Zakładając 100% równoległości i zerową komunikację - dwa procesory przyspieszyłyby o 2. Co z hiperwątkowym procesorem?

Michaił
źródło

Odpowiedzi:

59

Jak powiedzieli inni, zależy to całkowicie od zadania.

Aby to zilustrować, spójrzmy na rzeczywisty test porównawczy:

wprowadź opis zdjęcia tutaj

To zostało zaczerpnięte z mojej pracy magisterskiej (obecnie niedostępnej online).

Pokazuje względne przyspieszenie 1 algorytmów dopasowania łańcucha (każdy kolor to inny algorytm). Algorytmy zostały wykonane na dwóch czterordzeniowych procesorach Intel Xeon X5550 z hyperthreading. Innymi słowy: w sumie było 8 rdzeni, z których każdy może wykonywać dwa wątki sprzętowe (= „hyperthreads”). Dlatego test porównawczy przyspiesza do 16 wątków (jest to maksymalna liczba współbieżnych wątków, które ta konfiguracja może wykonać).

Dwa z czterech algorytmów (niebieski i szary) skalują się mniej więcej liniowo w całym zakresie. Oznacza to, że korzysta z hyperthreading.

Dwa inne algorytmy (czerwony i zielony; niefortunny wybór dla osób niewidomych) skalowane liniowo dla maksymalnie 8 wątków. Potem stagnują. To wyraźnie wskazuje, że te algorytmy nie korzystają z hiperwątkowania.

Powód? W tym konkretnym przypadku jest to obciążenie pamięci; pierwsze dwa algorytmy wymagają więcej pamięci do obliczeń i są ograniczone wydajnością głównej magistrali pamięci. Oznacza to, że podczas gdy jeden wątek sprzętowy czeka na pamięć, drugi może kontynuować wykonywanie; główny przypadek użycia dla wątków sprzętowych.

Pozostałe algorytmy wymagają mniej pamięci i nie muszą czekać na magistralę. Są prawie całkowicie związane z obliczeniami i używają tylko arytmetyki liczb całkowitych (w rzeczywistości operacji bitowych). Dlatego nie ma możliwości równoległego wykonywania i nie ma korzyści z równoległych potoków instrukcji.


1 To znaczy współczynnik przyspieszenia równy 4 oznacza, że ​​algorytm działa cztery razy szybciej, niż gdyby był wykonywany tylko z jednym wątkiem. Z definicji każdy algorytm wykonywany na jednym wątku ma współczynnik względnego przyspieszenia równy 1.

Konrad Rudolph
źródło
Najlepsza odpowiedź :-)
Sklivvz
1
Jakie są rzeczywiste prędkości algorytmów wykreślone względem liczby rdzeni? Czyli jaki jest przyrost prędkości najszybszego algorytmu w tych testach? Zastanawiam się :).
crazy2be
@ crazy2be W przypadku niebieskiej linii ( algorytm Horspoola ) czas działania wynosi od 4,16 sekundy do 0,35 sekundy z 16 wątkami. Przyspieszenie wynosi 11,74. Jest tak jednak w przypadku hiperwątkowości. W przypadku wykresu względem liczby rdzeni przyspieszenie tego algorytmu wynosi 7,17 na 8 rdzeniach.
Konrad Rudolph
5
jedynym problemem z tą odpowiedzią jest to, że mogę ją głosować tylko raz. To zadziwiająco obiektywna odpowiedź na subiektywne pytanie;)
Journeyman Geek
20

Problem polega na tym, że zależy to od zadania.

Pojęcie hiperwątkowania polega na tym, że wszystkie współczesne procesory mają więcej niż jeden problem z wykonaniem. Zwykle bliżej kilkunastu teraz. Podzielony na liczby całkowite, zmiennoprzecinkowe, SSE / MMX / Streaming (jakkolwiek to się dzisiaj nazywa).

Ponadto każda jednostka ma inne prędkości. Tj. Przetwarzanie czegoś może zająć całkowity cykl jednostki matematycznej 3, ale 64-bitowy podział zmiennoprzecinkowy może potrwać 7 cykli. (Są to mityczne liczby, które nie są oparte na niczym).

Wykonywanie poza kolejnością pomaga w utrzymywaniu różnych jednostek tak pełnych, jak to możliwe.

Jednak żadne pojedyncze zadanie nie będzie wykorzystywało każdej jednostki wykonawczej w każdej chwili. Nawet podział wątków może całkowicie pomóc.

Tak więc teoria staje się udawaniem, że istnieje drugi procesor, można na nim uruchomić inny wątek, używając dostępnych jednostek wykonawczych, które nie są używane, powiedzmy, twoje transkodowanie audio, które stanowi 98% SSE / MMX, a jednostki int i float są całkowicie bezczynny, z wyjątkiem niektórych rzeczy.

Dla mnie ma to większy sens w świecie jednego procesora, udawanie drugiego procesora pozwala wątkom łatwiej przekroczyć ten próg przy niewielkim (jeśli w ogóle) dodatkowym kodowaniu do obsługi tego fałszywego drugiego procesora.

Czy w świecie rdzeni 3/4/6/8, posiadającym procesory 6/8/12/16, to pomaga? Dunno. Tak wiele? Zależy od wykonywanych zadań.

Tak więc, aby odpowiedzieć na twoje pytania, będzie to zależeć od zadań w twoim procesie, z jakich jednostek wykonawczych używa, a także w twoim CPU, które jednostki wykonawcze są bezczynne / niewykorzystane i dostępne dla drugiego fałszywego procesora.

Mówi się, że niektóre „klasy” obliczeń przynoszą korzyści (niejasno ogólnie). Ale nie ma twardej i szybkiej reguły, a dla niektórych klas spowalnia.

geoffc
źródło
2
Chociaż szukałem czegoś w rodzaju „przyspieszenia czasu 1.7”, ta odpowiedź jest bardzo ładna, ponieważ nie rzuca czarno-białego spojrzenia na ten problem.
Michaił
@Mikhail: Chodzi o to, że nie ma prostego czynnika - to zależy, jak często w życiu :-).
śleske,
4
Istota ma rację. Jeden spór: nie ma a priori powodu, dla którego jeden rdzeń powinien czerpać więcej korzyści z hiperwątkowania niż wiele rdzeni. Złe zadanie nie przynosi zysków. Aby wykonać właściwe zadanie, obaj zyskaj według tego samego czynnika.
Konrad Rudolph
@Konrad: Myślę, że punktem, do którego doszedłem, jest różnica między jednym rdzeniem a dwoma rdzeniami może być bardziej cenna niż różnica między 4 a 8 lub 2 i 4. Tj. Posiadanie drugiego rdzenia, dla źle wątkowej aplikacji może pomóc trochę więcej.
geoffc
„W przypadku aplikacji o słabym wątku” - to ważne. Ale realistycznie, obsługa wątków w większości aplikacji jest słaba, więc masz rację.
Konrad Rudolph
5

Mam trochę niepotwierdzonych dowodów, które mogę dodać do odpowiedzi Geoffca, że tak naprawdę mam Core i7 CPU (4-rdzeniowy) z hyperthreadingiem i grałem trochę z transkodowaniem wideo, co jest zadaniem, które wymaga dużej ilości komunikacji i synchronizacji, ale ma dość równoległość, którą można skutecznie w pełni załadować do systemu.

Moje doświadczenie z graniem z iloma procesorami przypisanymi do zadania, na ogół przy użyciu 4 „dodatkowych” rdzeni z hiperwątkiem, co odpowiada około 1 dodatkowej mocy obliczeniowej procesora. Dodatkowe 4 rdzenie „hyperthreaded” dodawały mniej więcej tyle samo użytecznej mocy obliczeniowej, co przechodzenie z 3 do 4 „prawdziwych” rdzeni.

To prawda, że ​​nie jest to uczciwy test, ponieważ wszystkie wątki kodujące prawdopodobnie konkurowałyby o te same zasoby w procesorach, ale dla mnie wykazały przynajmniej niewielki wzrost ogólnej mocy obliczeniowej.

Jedynym prawdziwym sposobem wykazania, czy to naprawdę pomaga, byłoby uruchomienie kilku różnych testów typu Integer / Floating Point / SSE w tym samym czasie w systemie z włączonym i wyłączonym hyperthreading i zobaczyć, ile mocy obliczeniowej jest dostępne w kontrolowanym środowisko.

Mokubai
źródło
1
Cóż, jasne - to zależy od aplikacji. Jestem pewien, że obliczenia wysokiej komunikacji mogłyby zostać przyspieszone, ponieważ rdzeń 0 i rdzeń 0-h komunikowałyby się przez tę samą pamięć podręczną, bez użycia wolnej pamięci RAM.
Michaił
1
@ Michaił, problem polega na tym, że jeśli oba wątki wymagają dużej mocy obliczeniowej, oba będą konkurować o te same zasoby i znacznie lepiej byłoby komunikować się przez współużytkowaną pamięć podręczną L3 procesora (i7 ma pamięć podręczną L1 i L2 na rdzeń i współużytkowaną pamięć podręczną L3) lub nawet pamięć systemową i wykonywanie ich zadań osobno. To ogromne ćwiczenie na huśtawce i rondzie ...
Mokubai
3

Wiele zależy od procesora i obciążenia, jak powiedzieli inni.

Intel mówi :

Zmierzona wydajność procesora Intel® Xeon® MP z technologią Hyper-Threading pokazuje wzrost wydajności nawet o 30% w porównaniu ze standardowymi testami aplikacji serwerowych dla tej technologii

(Wydaje mi się to nieco konserwatywne.)

Jest jeszcze jeden dłuższy artykuł (którego jeszcze nie przeczytałem) z większą liczbą liczb tutaj . Jednym z interesujących pomysłów na ten artykuł jest to, że hiperwątkowanie może spowolnić wykonywanie cienkich zadań w przypadku niektórych zadań.

Architektura buldożera AMD może być interesująca . Opisują każdy rdzeń jako efektywnie 1,5 rdzeni. Jest to rodzaj ekstremalnego hiperwątkowania lub niespełniających standardów wielordzeniowych w zależności od tego, czy masz pewność co do jego prawdopodobnej wydajności. Liczby w tym fragmencie sugerują przyspieszenie komentarza od 0,5x do 1,5x.

Wydajność zależy również od systemu operacyjnego. Miejmy nadzieję, że system operacyjny wyśle ​​procesy do prawdziwych procesorów zamiast hiperwątków, które jedynie udają procesory. W przeciwnym razie w systemie dwurdzeniowym możesz mieć jeden bezczynny procesor i jeden bardzo zajęty rdzeń z dwoma wątkami. Wydaje mi się, że tak się stało z Windows 2000, choć oczywiście wszystkie współczesne systemy operacyjne są odpowiednio przystosowane.

Stephen Darlington
źródło
1
System operacyjny musi się upewnić, że wątki się nie blokują zegarowo :)
Michaił