20

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?

4
  • Please explain what do you mean by "manually input the affinity"?
    – Pacerier
    May 2, 2015 at 6:22
  • @Pacerier I have to manually change the affinity, since by default it picks all CPUs to work with.
    – yuritsuki
    May 2, 2015 at 6:47
  • 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. May 2, 2015 at 13:41
  • @cyberwebpoweruser, Did the answer below work for you?
    – Pacerier
    May 24, 2015 at 15:34

4 Answers 4

28

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
7
  • 2
    i think you have the first 3 messed up May 2, 2015 at 8:06
  • Oh, damn.. yes :) Corrected.. May 2, 2015 at 8:08
  • 7
    @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
    May 2, 2015 at 18:59
  • 2
    Do you need the cmd.exe /C part, or would it be enough to start with start?
    – deltab
    May 3, 2015 at 1:38
  • 3
    @NateKerkhofs it should inherit. Not just affinity, like all security descriptors, handles owned, etc. May 3, 2015 at 6:01
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.

2
  • "non-software" means cmd.
    – Pacerier
    May 24, 2015 at 15:34
  • Hope there is a reg option.
    – rint
    Sep 26, 2023 at 4:47
7

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!

2

I'm new here and first time posted on this forum but anyway I've created this chart which makes it much easier to understand, just enter the hex value Y in the command line to enable the number of CPU threads. Enjoy!

CPU - HEX  - BINARY
00 -- 1 ---- 0001
01 -- 3 ---- 0011
02 -- 7 ---- 0111
03 -- F ---- 1111
04 -- 1F --- 0001 1111
05 -- 3F --- 0011 1111
06 -- 7F --- 0111 1111
07 -- FF --- 1111 1111
08 -- 1FF -- 0001 1111 1111
09 -- 3FF -- 0011 1111 1111
10 -- 7FF -- 0111 1111 1111
11 -- FFF -- 1111 1111 1111
12 -- 1FFF - 0001 1111 1111 1111
13 -- 3FFF - 0011 1111 1111 1111
14 -- 7FFF - 0111 1111 1111 1111
15 -- FFFF - 1111 1111 1111 1111

%ComSpec% /c start /affinity Y game.exe

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .