Come posso impostare in modo permanente l'affinità di un processo?


17

Ho un gioco che ha problemi con l'utilizzo della CPU, quindi una delle soluzioni è disabilitare un core da una CPU quad core. Da quando lancio il gioco, devo andare manualmente nel Task Manager e inserire manualmente l'affinità, che fa schifo dal momento che il gioco è stato appena rilasciato ma incline a frequenti arresti anomali.

Esiste una soluzione NON SOFTWARE?

Ho cercato alcune soluzioni online e sembrano orientate solo a Windows 7. Esiste una soluzione per gli utenti di Windows 8.1 come me?


Spiega cosa intendi per "immissione manuale dell'affinità"?
Pacerier,

@Pacerier Devo modificare manualmente l'affinità, poiché per impostazione predefinita seleziona tutte le CPU con cui lavorare.
yuritsuki,

Potresti provare a impostare la "Modalità compatibilità" su una versione di Windows abbastanza vecchia, che imposta l'affinità su un singolo core. Ma non ho Win8 a portata di mano per verificare se funziona ancora.
CodesInChaos,

@cyberwebpoweruser, la risposta qui sotto ha funzionato per te?
Pacerier,

Risposte:


24

È possibile creare un collegamento per assegnare l'affinità.

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

Y è esadecimale ed è una maschera di bit:

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

1
penso che tu abbia i primi 3 incasinati
Richie Frame

Oh, dannazione .. sì :) Corretto ..
The_aLiEn

4
@The_aLiEn domanda: se questo processo avvia un altro processo, quel secondo processo eredita l'affinità del primo processo? Ho lo stesso problema con un gioco, ma ho bisogno di cambiare affinità sia sul launcher che su un download manager di terze parti avviato dal launcher per risolverlo.
Nzall,

2
Ti serve la cmd.exe /Cparte o sarebbe sufficiente iniziare start?
deltab,

2
@NateKerkhofs dovrebbe ereditare. Non solo affinità, come tutti i descrittori di sicurezza, gestisce proprietà, ecc.
The_aLiEn

7

Se per "non software" si intende che non richiede software aggiuntivo, è presente. È possibile eseguire il programma da uno script di comandi e utilizzare l'opzione affinity"Start /AFFINITY 20 process.exe"

/AFFINITY 20considera il 20numero esadecimale, con un equivalente binario di 100000, che imposta l'affinità con il core 5 su 0-5 su un processore a 6 core. Una maschera esadecimale simile ti consentirà di disabilitare un core specifico, ad esempio E, che esegue il processo solo su core 1-3 di 0-3 o 0-5.


"non software" significa cmd.
Pacerier,

5

Per chiunque fosse alla ricerca di risposte e non trovasse alcuna soluzione, la soluzione che ho trovato è stata quella di utilizzare un'app chiamata WinAFC (o AffinityChanger). Questa è una GUI parziale, un'app della riga di comando parziale che ti consente di specificare i profili per determinati eseguibili e eseguirà il polling dell'elenco dei processi per essi. Se trova i processi corrispondenti, cambierà l'affinità di tali processi in base alle impostazioni nel profilo caricato.

C'è della documentazione qui: http://affinitychanger.sourceforge.net/

Per i miei scopi, ho creato un profilo simile al seguente:

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

Questo profilo imposta qualsiasi processo convert.exe per utilizzare le prime due coppie di core della CPU (CPU0, CPU1, CPU2 e CPU3), eseguendo il polling ogni secondo. TestModeè un interruttore che ti consente di vedere se il tuo profilo funziona senza realmente impostare affinità.

Spero che qualcuno lo trovi utile!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.