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?
źródło
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?
Jak powiedzieli inni, zależy to całkowicie od zadania.
Aby to zilustrować, spójrzmy na rzeczywisty test porównawczy:
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.
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.
źródło
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.
źródło
Wiele zależy od procesora i obciążenia, jak powiedzieli inni.
Intel mówi :
(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.
źródło