17

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?

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

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

  • "non-software" means cmd. – Pacerier May 24 '15 at 15:34
4

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!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.