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ść?
13
Odpowiedzi:
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).
źródło
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:
(Źródło: http://www.intel.com/support/processors/sb/CS-017343.htm )
Może więc producent (lub dostawca) chciał zachować ostrożność.
źródło
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.
źródło
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.
źródło
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.
źródło
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.
źródło
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.
źródło