Jakie mogą być powody, dla których programista chce wyłączyć hiperwątkowanie?

13

Moja firma właśnie kupiła nowe komputery, aby zastąpić stare maszyny Windows XP o pojemności 2 GB. Ktoś z mojego zespołu zauważył, że przyszli z wyłączonym hipertekstem i kazał wszystkim zrestartować komputer i włączyć go. Czy programowanie na komputerze z wyłączonym hyperthreadingiem ma jakąś korzyść?

Wyskakuje
źródło
1
Jakiego modelu procesorów Intel używasz, np. Core i5 lub i7?
JB King
@JBK Dobre pytanie, nie wiem, sam nie mam jednej z tych maszyn.
Wyskakuje
Na starym notebooku Pentium 4, aby zmniejszyć ciepło i hałas wentylatora, a może sprawić, że bateria będzie działać jeszcze przez kilka minut. Nie odpowiedź, ponieważ powinna być historią starożytną i nie powinna mieć zastosowania w twoim przypadku.
Steve314,
W grze Lucasarts Grim Fandango silnik dźwiękowy wpadł w stan wyścigowy podczas pracy z hiperwątkiem.

Odpowiedzi:

14

Tak, pracowałem nad aplikacją, która działała lepiej, gdy działała na maszynie z wyłączoną HT .

Stało się tak, że oryginalny kod utworzyłby dwa razy więcej wątków, gdy byłby uruchamiany na maszynie z hiperwątkiem (co, jak można założyć, jest czymś w rodzaju HT). Jednak przepustowość tych wątków była bardzo wrażliwa na ilość pamięci podręcznej dostępnej dla wątku. Przy dwukrotnie większej liczbie wątków walczących o ustaloną ilość pamięci podręcznej, pamięć podręczna dostępna dla każdego wątku była zbyt niska i wystąpiło przeładowanie: byłoby więcej braków pamięci podręcznej, więcej dostępu do pamięci głównej, a wydajność znacznie spadła w porównaniu z uruchomieniem z mniej wątków i więcej pamięci podręcznej na wątek (co otrzymujesz, jeśli uruchomisz aplikację na komputerze z wyłączoną HT).

Ostatecznym rozwiązaniem było sprawienie, by aplikacja lepiej sprawdzała platformę sprzętową i brała pod uwagę rozmiary pamięci podręcznej oraz ilość pamięci podręcznej uznaną za potrzebną dla każdego wątku przy podejmowaniu decyzji, ile wątków utworzyć. W każdym razie problem szybko zniknął z następną generacją procesorów, które podwoiły rozmiar pamięci podręcznej (i wtedy zaczęliśmy dostrzegać niewielką korzyść z HT). Jednak cały odcinek pozostawił długą i trwałą spuściznę zalecania HT zawsze na dowolnej platformie, na której działał nasz SW, a kolana „ ta maszyna nie ma włączonej HT, prawda? ” Reaguje na każdy problem z wydajnością. (Myślę, że podstawowym problemem jest to, że większość nie-maniaków po prostu nie rozumie, czym właściwie jest HT).

czas
źródło
11

Nie znam szczegółów technicznych, ale najwyraźniej jeśli aplikacja (lub system operacyjny) nie jest zoptymalizowana pod kątem hiperwątkowości, hiperwątkowość może faktycznie obniżyć wydajność.

Nawet Intel zaleca wyłączenie go w tym przypadku:

Następujące stacjonarne systemy operacyjne nie są zalecane do użytku z technologią Hyper-Threading. Jeśli używasz jednego z następujących systemów operacyjnych dla komputerów stacjonarnych, zaleca się wyłączenie technologii Hyper-Threading w programie konfiguracji systemu BIOS: [...]

(Źródło: http://www.intel.com/support/processors/sb/CS-017343.htm )

Może więc producent (lub dostawca) chciał zachować ostrożność.

Śleske
źródło
Wiadomo również, że niektóre gry działają wolniej niż przy wyłączonym hyperthreadingu.
Klaim
4
Byłoby interesujące, gdyby martwili się wydajnością gier granych w pracy.
dietbuddha
W systemie wielordzeniowym dwa wątki mogą być przypisane do dwóch hiperwątków na tym samym rdzeniu, pozostawiając wszystkie pozostałe rdzenie bezczynne i dając znacznie mniejszą wydajność niż umieszczanie każdego wątku na innym rdzeniu. Dopóki systemy operacyjne nie
zauważą
1
@ Steve314: Z pewnością tak było w przypadku Windows2000 (i wyłączenie HT było zdecydowanie dobrym pomysłem, jeśli działasz), ale Windows XP miał być świadomy HT (patrz np. Download.microsoft.com/download/5/7/ 7 /… ) i nie wpaść w taką pułapkę. Zakładam, że podobna logika została wbudowana w Linuksa z jakiejś wersji jądra.
dzisiaj
6

Bardziej niż prawdopodobne, OEM był po prostu konserwatywny. OEM często są dostarczane z wyłączonymi zaawansowanymi funkcjami (takimi jak HT, bit bez wykonywania, vt itp.). Powodem jest to, że niektóre rzadkie okoliczności mogą sprawić, że te ustawienia zawiodą, a osoby, które naprawdę chcą tych funkcji, mogą równie łatwo je włączyć.

Ponadto niektóre rzadkie błędy w systemach operacyjnych prowadzą do potencjalnych problemów bezpieczeństwa, gdy niektóre funkcje są włączone. Na przykład technologia wirtualizacji miała kiedyś taki problem. Więc to tylko konserwatywny sprzedawca.

Hyperthreading jest ogólnie przydatny w przypadku interaktywnych komputerów stacjonarnych, takich jak maszyny do programowania. Chociaż niektóre osoby mogą chcieć to wyłączyć, jeśli Twoje aplikacje będą działać na serwerach bez HT. Tylko w celu zmniejszenia potencjalnych różnic sprzętowych.

Erik Funkenbusch
źródło
2
Tak jest prawie zawsze w przypadku maszyn z wyłączonym HT. Maksymalna kompatybilność i uratowanie dostawcy przed zalewem dziwnych połączeń z pomocą techniczną.
Patrick Hughes,
5

Hyperthreading nie dodaje nowych rdzeni do procesora. Nadal masz jedną jednostkę arytmetyczną / logiczną, jedną jednostkę zmiennoprzecinkową (...) na rdzeń. Więc jeśli masz wiele wątków / procesów, które robią bardzo różne rzeczy, HTT może poprawić wydajność. Ale jeśli masz wiele wątków, które wykonują mniej więcej te same czynności (nierzadko w aplikacjach do łamania liczb), wydajność może w rzeczywistości bardzo negatywnie wpłynąć na HTT.

nikie
źródło
2

Może problemy ze spójnością pamięci podręcznej w ogromnie wielowątkowym kodzie? Jeśli masz dyskretne pamięci podręczne procesora, teoretycznie możliwe jest, aby dwa wątki miały te same dane w pamięci podręcznej i modyfikowały je jednocześnie z różnymi wartościami. Jeśli masz ujednoliconą pamięć podręczną w pewnym momencie między procesorami a pamięcią główną (L2 lub L3), prawdopodobnie istnieje jakiś mechanizm, który to zapobiegnie, ale na niższych procesorach z mniejszymi buforami, może nie.

Ewentualnie możliwe jest, że włączenie hiperwątkowania na chipach, które go nie obsługują, spowoduje wyrzucenie kodu podczas testu POST, więc dostawca systemu BIOS po prostu go opuszcza, ponieważ nie wie, jaki procesor będzie miał system.

TMN
źródło
Domyślam się, że istnieje mechanizm pozwalający rozwiązać ten problem ze spójnością, ale może mieć znaczny spadek wydajności. IIRC, konkretnej strony pamięci nie można swobodnie załadować na dowolną stronę pamięci podręcznej - zwykle jest to mechanizm mapowania tego adresu na jedną z tych kilku stron. Może dwa wątki mogą walczyć o kilka stron pamięci podręcznej, pozostawiając resztę niewykorzystaną? (może nawet z wielordzeniowym, choć przypuszczalnie mniejszym ryzykiem).
Steve314,
0

Jednym z powodów, dla których nie należy wyłączać hiperwątkowania na maszynie programisty, jest to, że może ona ukrywać subtelne błędy wielowątkowe. Ale tak naprawdę dotyczy to tylko jednordzeniowego komputera jednoprocesorowego. Multi-core ujawni więcej błędów wielowątkowych podczas testowania.

OTOH, wątpię, czy zobaczysz procesor jednordzeniowy z domyślnie wyłączonym hyperthreadingiem. Mój głos dotyczy odpowiedzi Sleskesa.

Steve314
źródło
0

Wiele starych programów zostało napisanych na maszynach jednordzeniowych i mogły mieć w nim błędy podczas uruchamiania na maszynie wielordzeniowej. Prawdopodobnie instrukcja naprawdę miała na celu powiedzenie „To nie działa na maszynach wielordzeniowych”, po prostu przez długi czas hiperwątkowanie było jedyną prawdopodobną maszyną wielordzeniową, którą zobaczysz w powszechnym użyciu.

JohnB
źródło