Jump to content

[FIX] FPS drop on multicore/hyperthread cpus


sephiroth2k

Recommended Posts

I had been experiencing random fps spikes (from ~40fps down to ~9fps) in all areas of Skyrim,

running on a Lenovo y570 i7-2670QM, GT555m, 8GB PC3-10600 DDR3.

 

I fixed this issue by forcing Skyrim to use only 2 physical (not HT) cores. FPS drop == gone.

This may only apply to i7-2670QM, or only my hardware configuration. Who cares, I can play at 30-60fps now! YMMV

 

To try:

1) Launch Task Manager (CTRL+ALT+ESC or CTRL+ALT+DELETE)

2) Launch Skyrim

3) ALT+TAB to task manager

4) Under the Processes tab, right click TESV.exe and click Set Affinity

5) Uncheck <All Processors>, and check CPU 0 and CPU 2

6) ALT+TAB back to Skyrim

 

If the issue is fixed, you can make Skyrim launch this way every time:

1) Open the directory TESV.exe is in.

2) Make a new text document. Rename it to TESV.bat

3) Right click TESV.bat and click edit.

4) Paste this in:

start /high /affinity 0x5 TESV.exe

5) Save file. Create shortcut on desktop to TESV.bat

 

I spent many hours trying to figure out this game breaking issue.

I hope my solution is of use to others.

 

-sephiroth2k

Link to comment
Share on other sites

  • 6 months later...
Ill be trying this as I've been having FPS spikes aswell from 40-50 fps then a sudden shoot to 1 FPS running its way back to 40 or somethin
Link to comment
Share on other sites

EDIT: Sorry about this double post -_- retarded Firefox hanged and made it double post as I refreshed the page. Apologies Edited by AceDC
Link to comment
Share on other sites

Hrm, I thought windows' scheduling was supposed to assign threads to physical cores before using HT cores...

 

Well, in case it doesn't, this would also be useful to people using FX-series AMD CPUs. Those of us using traditional multi-cores (pre-FX AMDs and lower-end or very high-end non-HT Intel processors) should be unaffected.

 

Lastly, doesn't Skyrim.ini have a line for setting the number of hardware threads? Why not use it?

Link to comment
Share on other sites

Under the [General] section: iNumHWThreads=

Two problems: for one, I couldn't get 1 and 2 to work on my quadcore; the game would freeze at the very end of loading a save game. Second, 3 made the first two cores load more heavily, and the latter two comparatively lightly, while 4 seemed to hit core #4 heaviest (though all cores were still showing a light to moderate load). Not at all expected results.

 

It's still worth trying, I guess, but since HT cores aren't arranged in the most effective fashion (I would have made it so they reported to the O/S as cores 2/3 with the physical cores being 0/1, myself, instead of this silly interleaving they have going), it probably won't be as effective as manually setting thread affinities. *shrugs*

 

Edit: http://www.gameskyrim.com/inumhwthreads-does-not-anything-t218648.html

 

These people might have been onto something, they just didn't realize it.

Try putting this under [General]:

iNumHWThreads=2 (alternatively 3 if that freezes)

iHWThread2=3

iHWThread1=1

iHWThread3=4 (if NumHWThreads=3)

 

I currently have the following set:

iNumHWThreads=3

iHWThread3=2

iHWThread2=4

iHWThread1=3

 

Cores 3 and 4 (logical 2 and 3) are being loaded the most, as expected, while the first two cores are seeing only a light load. I'll try mixing it up here in a minute.

 

Further edit:

I can't seem to get the main two threads to "unpair". They always seem to be together somehow; 1/2, 2/3, 3/4, 1/4. No matter what combination of settings I use, I can't get core usage into the staggered pattern that you fellows with HT need.

1/4 might work. 4 is an HT core, but if it's the only serious thing running on it, then that might not matter.

The following got high usage on 1/4:

iNumHWThreads=4

iHWThread2=0

...which is not at all intuitive. Neither were most of the other reactions I got. Something tells me Bethesda didn't actually intend for anyone to use these settings...

 

Setting affinities is probably still best, but give this a shot. I'm curious as to how it goes.

Edited by Septfox
Link to comment
Share on other sites

If HT is disabled, then you'll be running a dual-core instead of a dual-core with two virtual cores. There's no need to make any modifications in that case.

A "quad-core" HT processor, if I'm not mistaken, is laid out like so:

Core 0 (physical core) | Core 1 (virtual thread running on core 0) | Core 2 (physical core) | Core 3 (virtual thread running on core 2)

 

AMD FX processors also have a version of HT, but it's more on the hardware side; there's four/eight actual cores, but they share certain resources like cache.

 

Anyway, the problem normally is that the game loads the first two logical cores, which in an HT-enabled CPU are physical core 0 and HT core 1; essentially, 90% of the game's processing on one physical core. Disable HT, and it'll use physical core 0 and physical core 1 because the virtual "cores" are disabled and cores 1/3 become logical cores 0/1.

 

The CPU will also run cooler, consume less power, and probably actually run better. More overclocking room too because of the reduced heat, if you're into that sort of thing.

 

FX processors are different in that they have pairs of cores called "modules" which share resources. The game automatically loads the first two logical cores, in this case a single module, leading to the same performance issues. On Intel processors you can simply switch off HT; on AMD FX processors, you need to disable every other core, e.g. 1/3/5/7, so you only have one core using a given set of resources.

 

Benefits are largely the same; reduced heat, reduced power, no resource sharing means the individual cores don't fight over resources.

 

TL;DR you don't need to change anything if you turn HT off, the game will run better without any tweaks.

Link to comment
Share on other sites

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...