Jak na stałe ustawić powinowactwo procesu?

17

Mam grę, która ma problemy z wykorzystaniem procesora, więc jedną z poprawek jest wyłączenie jednego rdzenia z procesora czterordzeniowego. Ponieważ za każdym razem, gdy uruchamiam grę, muszę ręcznie przejść do Menedżera zadań i ręcznie wprowadzić powinowactwo, które jest do bani, ponieważ gra jest nowo wydana, ale jest podatna na częste awarie.

Czy istnieje rozwiązanie NON SOFTWARE?

Szukałem niektórych rozwiązań online i wydaje się, że są one ukierunkowane tylko na Windows 7. Czy istnieje rozwiązanie dla użytkowników systemu Windows 8.1 takich jak ja?

yuritsuki
źródło
Wyjaśnij, co rozumiesz przez „ręczne wprowadzenie powinowactwa”?
Pacerier
@Pacerier Muszę ręcznie zmienić powinowactwo, ponieważ domyślnie wybiera wszystkie procesory do pracy.
yuritsuki
Możesz spróbować ustawić „tryb zgodności” na wystarczająco starą wersję systemu Windows, która ustawia powinowactwo do jednego rdzenia. Ale nie mam pod ręką Win8, aby sprawdzić, czy to nadal działa.
CodesInChaos
@cyberwebpoweruser, Czy poniższa odpowiedź działała dla Ciebie?
Pacerier

Odpowiedzi:

24

Możesz utworzyć skrót do przypisania powinowactwa.

X:\Windows\System32\cmd.exe /C start /affinity Y game.exe

Y jest szesnastkowy i jest trochę maską:

0x1 - 0001 - Core0
0x2 - 0010 - Core1
0x3 - 0011 - Core1 & Core0
0x4 - 0100 - Core2
0x5 - 0101 - Core2 & Core0
0x6 - 0110 - Core2 & Core1
0x7 - 0111 - Core2 & Core1 & Core0
0x8 - 1000 - Core3
0x9 - 1001 - Core3 & Core0
0xA - 1010 - Core3 & Core1
0xB - 1011 - Core3 & Core1 & Core0
0xC - 1100 - Core3 & Core2
0xD - 1101 - Core3 & Core2 & Core0
0xE - 1110 - Core3 & Core2 & Core1
0xF - 1111 - Core3 & Core2 & Core1 & Core0
Obcy
źródło
1
myślę, że masz pierwsze 3 pomieszane
Richie Frame
Och, cholera .. tak :) Poprawione ..
The_aLiEn
4
@The_aLiEn pytanie: jeśli ten proces rozpoczyna inny proces, czy ten drugi proces dziedziczy powinowactwo pierwszego procesu? Mam ten sam problem z grą, ale muszę zmienić koligację zarówno w programie uruchamiającym, jak i zewnętrznym menedżerze pobierania uruchomionym przez program uruchamiający, aby można go było rozwiązać.
Nzall
2
Potrzebujesz cmd.exe /Cczęści, czy może wystarczyłby na początek start?
deltab
2
@NateKerkhofs powinien odziedziczyć. Nie tylko powinowactwo, jak wszystkie deskryptory zabezpieczeń, uchwyty itp.
The_aLiEn
7

Jeśli przez „nie oprogramowanie” masz na myśli, że nie potrzebujesz dodatkowego oprogramowania, jest. Możesz uruchomić program ze skryptu poleceń i użyć przełącznika koligacji"Start /AFFINITY 20 process.exe"

/AFFINITY 20traktuje tę 20liczbę jako liczbę szesnastkową z binarnym odpowiednikiem 100000, która ustawia powinowactwo do rdzenia 5 z 0-5 na procesorze 6-rdzeniowym. Podobna maska ​​szesnastkowa pozwala wyłączyć określony rdzeń, taki jak E, który uruchamia proces tylko na rdzeniach 1-3 z 0-3 lub 0-5.

Ramka Richiego
źródło
„inne niż oprogramowanie” oznacza cmd.
Pacerier
5

Dla wszystkich, którzy szukają odpowiedzi na to pytanie i nie znajdują żadnej, znalazłem rozwiązanie polegające na użyciu aplikacji o nazwie WinAFC (lub AffinityChanger). Jest to częściowy GUI, częściowa aplikacja wiersza poleceń, która pozwala określić profile dla niektórych plików wykonywalnych i przeszukuje dla nich listę procesów. Jeśli znajdzie pasujące procesy, zmieni powinowactwo tych procesów zgodnie z ustawieniami w załadowanym profilu.

Jest tu trochę dokumentacji: http://affinitychanger.sourceforge.net/

Na moje potrzeby utworzyłem profil, który wyglądał tak:

TestMode = 0
TimeInterval = 1
*\convert.exe := PAIR0+PAIR1

Ten profil ustawia dowolny proces convert.exe na użycie pierwszych dwóch par rdzenia procesora (CPU0, CPU1, CPU2 i CPU3), odpytujących co sekundę. TestModeto przełącznik, który pozwala zobaczyć, czy Twój profil działa bez faktycznego ustawiania koligacji.

Mam nadzieję, że ktoś uzna to za przydatne!

Jake
źródło