Wyłącz funkcję Hyperthreading w rejestrze systemu Windows 7

18

Niektóre bios nie mają opcji wyłączania Hyperthreading procesora, istnieje sposób na wyłączenie go w rejestrze systemu Windows 7? Lub narzędzie lub oprogramowanie?

Wiem o karcie rozruchowej msconfig (opcje zaawansowane) i wyłączaniu tam procesorów, nie jestem pewien, czy wyłącza pełne rdzenie lub hiperwątki, ani jak to powiedzieć.

32-bitowy lub 64-bitowy system Windows 7

EDYTOWAĆ:

Załóżmy, że jest to dual core lub więcej z hyperthreading.

W Menedżerze urządzeń pokazuje 4 procesory na moim procesorze Intel i5 i nie można ich też wyłączyć, cholera.

Moab
źródło
5
Myślę, że to niemożliwe pytanie miesiąca.
Moab
Naprawdę nie możesz tego wyłączyć w BIOS-ie? Czy to najnowsza wersja?
KCotreau
2
To komputer HP, znany z kalekich bios bez względu na wersję.
Moab
1
Nie wszystkie układy scalone i5 są sobie równe, niektóre mają wyłączone 4 rdzenie fizyczne i hiperwątkowość, a niektóre mają włączone 2 rdzenie i hiperwątkowość - zwykle w notatnikach używa się hiperwątkowości, a chipy na pulpicie są bardziej prawdopodobne na czterordzeniowe. Czy używasz komputera stacjonarnego lub notebooka i znasz model i5?
Dustin G.
Nie martwiłbym się zbytnio o Hyperthreading. Od czasu P4 nastąpił duży postęp. W dzisiejszych czasach nie wysysa wydajności.
surfasb

Odpowiedzi:

3

Z arkusza danych procesora Intel Core, tom 1 , strona 38:

Technologia Hyper-Threading firmy Intel

[...] Ta funkcja musi być włączona w systemie BIOS i wymaga obsługi systemu operacyjnego.

To dlatego hyperthreading jest rzeczywista sprzętu fizycznego na matrycy procesora, a tym samym mogą być włączone / wyłączone na poziomie sprzętowym tylko .

Jeśli wiesz, która aplikacja nie działa dobrze z hiperwątkiem, możesz użyć narzędzia takiego jak StartAffinity, jeśli masz XP.

Jeśli używasz systemu Windows 7, istnieje wbudowane startpolecenie, które może to zrobić. Użyj następującego polecenia, aby uruchomić proces z określonym powinowactwem do procesora (ponownie /AFFINITYargument został dodany tylko w systemie Windows 7):

start /AFFINITY <mask> "C:\yourprogram.exe" 

Gdzie <mask>należy zastąpić maską szesnastkową dla procesorów, które chcesz uruchomić (maska ​​procesora jest tylko maską binarną włączającą / wyłączającą to powinowactwo, więc 00000101 włącza CPU0 i CPU2, a 00000010 tylko CPU1).

Aby obliczyć wartość szesnastkową, możesz albo przekonwertować maskę binarną, albo wziąć sumę 2 do mocy rdzeni, na których chcesz uruchomić program (od 0), i przekonwertować tę wartość na szesnastkową.

Na przykład, jeśli mam system czterordzeniowy i chcę, aby proces był wykonywany tylko na CPU0 i CPU2, dodałbym 2 0 + 2 2 = 1 + 4 = 5. Konwertuj 5 na hex, który jest tylko 5, i ustaw to jako swoje <mask>. Możesz również po prostu przekonwertować 00000101 na heksadecymalny. Jeśli nie wiesz, jak przekonwertować te zasady, możesz po prostu skorzystać z tej tabeli konwersji .

Przełom
źródło
Rozumiem powinowactwo, ale nie wyłączy to hiperwątku, a jedynie pełny rdzeń. Nie sądzę, aby możliwe było wyłączenie w systemie operacyjnym Tylko hiperwątkowanie, tylko w biosach, ale niektóre biosy nie mają tej opcji, głównie na komputerach HP, miałem nadzieję, że ktoś może udowodnić, że się mylę.
Moab
1
Każdy rdzeń fizyczny pojawia się w systemie operacyjnym jako dwa logiczne. Jeśli wyłączysz jeden z tych rdzeni logicznych , skutecznie wyłączysz hiperwątkowanie, ponieważ instrukcje są wysyłane tylko do jednego z dwóch rdzeni logicznych, więc tak naprawdę nie jest wykonywany hipertekst - kolejka instrukcji jest wysyłana bezpośrednio do fizycznego rdzenia.
Przełom
Rozumiem, ale wyłącza tylko hiperwątkowanie dla tego jednego rdzenia. Potrzebuję obu niepełnosprawnych.
Moab
1
@Moab Następnie wystarczy włączyć wszystkie rdzenie parzyste lub nieparzyste, aby wyłączyć wszystkie pozostałe za pomocą masek wymienionych powyżej. Więc jeśli masz cztery rdzenie logiczne, użyj 00000101 lub 5 w postaci heksadecymalnej, jako maski heksadecymalnej, aby ustawić tylko CPU0 i CPU2 jako włączone. Jeśli masz 8 rdzeni logicznych, twoją maską bitów będzie 01010101 lub 55 w trybie szesnastkowym (aby włączyć tylko CPU0, 2, 4 i 6).
Przełom
2
@Moab nie ma znaczenia technicznego, o ile wyłączysz każdy inny rdzeń. Każdy zestaw dwóch rdzeni logicznych stanowi obsługę wątków dla pojedynczego rdzenia fizycznego.
Przełom
2

Wyłączenie Hyper-Threading jest sprawą związaną tylko z BIOS-em.

Zakładam, że chcesz wyłączyć Hyper-Threading, ponieważ masz aplikację, która nie jest zoptymalizowana pod kątem tej funkcji i może mieć obniżoną wydajność?

Patrząc na numerację procesora, rdzenie fizyczne są nieparzyste - więc w dwurdzeniowym systemie HT rdzenie 1 i 3 byłyby „prawdziwymi” procesorami. Jeśli wybierzesz 2 rdzenie w msconfig, 1 i 2 procesora zostaną włączone, więc będziesz mieć aktywny procesor fizyczny i logiczny (HT) - nie przyniesie to korzyści, jeśli masz problemy z oprogramowaniem, które ma problemy z HT.

Zasypka.
źródło
Tak, ale ... możesz użyć Menedżera zadań, aby ustawić powinowactwo do procesorów 1 i 3.
Ben Voigt
Dustin G, tak myślałem, ale znalezienie jakichkolwiek artykułów na ten temat jest prawie niemożliwe. Dzięki.
Moab
0

W systemie Windows najłatwiejszym sposobem jest zmiana powinowactwa programu explorer.exe, ponieważ każdy uruchomiony z niego proces odziedziczy maskę powinowactwa. Nadal jest daleki od ideału, ale przynajmniej robisz to tylko raz na sesję.

E. Attia
źródło
Nie jestem pewien, czy to odpowiada na pytanie, ponieważ powinowactwo procesu nie jest tym samym, co Hyperthreading.
Doktoro Reichard
Na szczęście rzeczy nie są oparte na tym, co jesteś pewien, czy nie, ale na tym, jak są określone w MSDN (na przykład) msdn.microsoft.com/en-us/library/windows/desktop/… GetLogicalProcessorInformation daje powinowactwa procesowe obróbce fizycznej / logicznej procesory (jest to dokładny sposób). W systemach hyperthreading z 2-logicznymi rdzeniami SMT (takich jak hyperthreading) Rdzeń 0 to bit 0 i 1, Rdzeń 1 bit 2 i 3 maski koligacji itp. (Jest to sposób empiryczny). Byłbym wdzięczny, gdybyś mógł uniknąć głosowania na rzeczy, na których masz tylko intuicję ...
E. Attia