How do I permanently set the affinity of a process?

18

7

I have a game that has issues with CPU usage, so one of the fixes is to disable one core out of a quad core cpu. Since everytime I launch the game I have to manually go into the Task Manager and manually input the affinity, which sucks since the game is newly released yet prone to frequent crashes.

Is there a NON SOFTWARE solution?

I've looked up some solutions online and they seem to be geared towards Windows 7 only. Is there a solution for Windows 8.1 users like me?

yuritsuki

Posted 2015-05-02T06:17:49.687

Reputation: 1 506

Please explain what do you mean by "manually input the affinity"? – Pacerier – 2015-05-02T06:22:32.863

@Pacerier I have to manually change the affinity, since by default it picks all CPUs to work with. – yuritsuki – 2015-05-02T06:47:23.083

You could try setting the "Compatibility mode" to an old enough version of windows, which sets affinity to a single core. But I don't have win8 at hand to check if this still works. – CodesInChaos – 2015-05-02T13:41:38.000

@cyberwebpoweruser, Did the answer below work for you? – Pacerier – 2015-05-24T15:34:41.203

Answers

25

You can create a shortcut to assign affinity.

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

Y is hexadecimal and is a bit 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

The_aLiEn

Posted 2015-05-02T06:17:49.687

Reputation: 1 431

1i think you have the first 3 messed up – Richie Frame – 2015-05-02T08:06:30.437

Oh, damn.. yes :) Corrected.. – The_aLiEn – 2015-05-02T08:08:01.413

4@The_aLiEn question: If this process starts another process, does that second process inherit the affinity of the first process? I have the same problem with a game, but I need to change affinity on both the launcher and a 3rd party download manager that is started by the launcher for it to be solved. – Nzall – 2015-05-02T18:59:05.230

@NateKerkhofs: Yes it should. I made my own start-with-affinity wrapper once that did nothing besides set its own affinity and then spawn the target application. – Ben Voigt – 2015-05-02T22:33:04.223

2Do you need the cmd.exe /C part, or would it be enough to start with start? – deltab – 2015-05-03T01:38:10.440

2@NateKerkhofs it should inherit. Not just affinity, like all security descriptors, handles owned, etc. – The_aLiEn – 2015-05-03T06:01:58.950

thanks a lot! this helped me to change the affinity in my C# program! – ihavenokia – 2017-08-21T12:00:37.190

7

If by "non software" you mean not requiring additional software, there is. You can run the program from a command script and use the affinity switch "Start /AFFINITY 20 process.exe"

/AFFINITY 20treats the 20 as a hexidecimal number, with a binary equivalent of 100000, which sets affinity to core 5 out of 0-5 on a 6 core processor. A similar hex mask will let you disable a specific core, such as E, which only runs the process on cores 1-3 out of 0-3 or 0-5.

Richie Frame

Posted 2015-05-02T06:17:49.687

Reputation: 1 555

"non-software" means cmd. – Pacerier – 2015-05-24T15:34:17.807

5

For anyone else looking for answers to this and not finding any, the solution I found was to use an app called WinAFC (or AffinityChanger). This is a partial GUI, partial command line app that allows you to specify profiles for certain executables, and will poll the process list for them. If it finds matching processes, it will change the affinity of those processes according to the settings in the loaded profile.

There is some documentation here: http://affinitychanger.sourceforge.net/

For my purposes, I created a profile that looked like this:

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

This profile sets any convert.exe process to use the first two CPU core pairs (CPU0, CPU1, CPU2, and CPU3), polling every second. TestMode is a toggle that allows you to see if your profile is working without actually setting affinities.

Hope someone finds this useful!

Jake

Posted 2015-05-02T06:17:49.687

Reputation: 277