Smoother gameplay on multi-threaded CPUs

Author: Snuffy

Version: 2 (newest)

Outdated G Doc

Reddit post: 

https://www.reddit.com/r/FortniteCompetitive/comments/b9cvl9/v2_guide_on_smoother_gameplay_on_multithreaded/

Twitter: https://twitter.com/Not_Snuffy

Last updated: 30.09.19 5:00am GMT

Status (v10.40): WORKING

IF YOU HAVE ANY QUESTIONS TWITTER IS THE PLACE!

Building a PC for more guides and Fortnite performance research!

Please SUPPORT if you CAN

code SNUF in the Item Shop

Drama Alert! 

Some people have been copy-pasting my guide without even mentioning the source hence stealing my intellectual property.

Smoother gameplay on multi-threaded CPUs

Disclaimer

Everything you read here is my own assumption based on my experience and small research that I carried out. I’m not confident that provided information is completely correct.

SMOOTHER GAMEPLAY =/= more FPS 

Introduction

This article is aimed towards rather advanced users who have a strong desire to optimize Fortnite for their hardware.

Most of you probably have a problem when neither your multi-threaded (multi-core) CPU nor your GPU is being fully utilized. The reason for this is that Fortnite doesn’t really ‘benefit’ from having a LOT of threads, instead, it tries to split the load evenly between all threads (cores) available, leaving you with 20-30% CPU time utilization on each core on high end CPUs. Communication with multiple threads simultaneously takes a lot of RAM bandwidth and since by its nature Fortnite is heavily RAM frequency bound makes things even worse. If you have Fortnite running on all of these threads while having RAM that can’t keep up with feeding your CPU with data, you will inevitably experience microstutters and choppy gameplay overall.

Solution

Windows allows to choose which CPU threads are being assigned to a specific process through ‘Task Manager’. However, since Fortnite uses Easy Anti-Cheat anti-cheat service, which blocks any modifications to the running Fortnite process, you have to set the cores/threads the game should run on prior to launch. For this, you will have to:

  1. Copy this URL into your browser, don’t press enter just yet
    https://ktzxxr3ujj.execute-api.us-east-1.amazonaws.com/prod/guide/thread/v2?threads=10101010&path=%22%22

  1. Replace highlighted numbers(10101010) with sequence of zeros and ones representing the threads that will be used to run Fortnite (1 – core/thread is enabled, 0 – thread/core is disabled), in my case: only first, second, third and fourth physical cores of CPU will be used to run the game.

The number of zeros and ones depends on how many logical processors you have in your system. To check this open ‘Task Manager’, go to ‘Performance’, choose ‘CPU’:

In my case the total number of zeros and ones is 8

You need at least 6 logical processors in order for this method to work properly!
ENABLE Multithreaded rendering in the game settings if you have this option!

Explanation of sequence (each even number starting from 0 is PHYSICAL core (0, 2, 4…), odd – Hyper Thread)

# (number) of Thread

1/0 (Enabled/Disabled) 

0 (physical core)

1

1 (HT/SMT thread)

0

2 (physical core)

1

3 (HT/SMT thread)

0

4 (physical core)

1

5 (HT/SMT thread)

0

6 (physical core)

1

7 (HT/SMT thread)

0

8 (physical core)

1

9 (HT/SMT thread)

0

10 (physical core)

1

11 (HT/SMT thread)

0

HT – Intel Hyper-Threading Thread

SMT – Simultaneous Multithreading Thread (AMD alternative to Intel Hyper-Threading technology)

To get the threads string, you need to write 0 or 1 one by another from top to bottom.

In this case, the string will be 101010101010 and enable only physical cores on i7 8700/K or Ryzen 5.

ADVISED (NOT NECESSARILY THE BEST) ‘threads’ argument to start with depending on CPU

CPU

‘threads’ argument in the link

i5 8/9th gen

011111

i7 upto 7th gen

10101010

i7 8700/K

101010101010

i7 9700K

00111111

i9 9900K

0000101010101010

Ryzen with 4 cores 8 threads

10101010

Ryzen 5 (6 cores 12 threads)

101010101010

Ryzen 7 (8 cores 16 threads)

0000101010101010

AMD FX (8 cores 8 threads)

00111111

AMD FX (6 cores 6 threads)

001111

AMD FX (4 cores 8 threads)

10101010

i5 below 8 gen

Not supported

any i3/Pentium/Core Duo/Core Quad

Not supported

  1. If Fortnite is installed in default location C:\Program Files, skip this step
    If Fortnite is not installed in default location C:\Program Files, you need to find where it is:

  • Launch the game

  • Open task manager

  • Right click on Fortnite process -> Open file location

  • Click on URL in File Explorer and copy the folder location:

  • Paste the location to the URL in the path variable between %22 replacing each backslash(\) with a slash(/)
    %22HERE%22

Example:

%22D:/Fortnite/Epic Games/Fortnite/FortniteGame/Binaries/Win64%22

4. Now you can press enter in your browser. Something like this should pop up:

5. Open your Fortnite location (…\Win64 folder)

  • Select View tab and tick ‘File name extensions’ box


  • Create a new Text Document in Fortnite location (…\Win64 folder)

  • Open it and paste the Script from your browser to the Text Document

  • Save and close

  • Rename it to notsnuffy.ps1 changing the .txt file extension



6. Go to your desktop

  • Right click it -> New -> Shortcut

  • Paste this string from your browser

Into this:

 

The shortcut should look like this:

Important:

Now EXIT Epic Games launcher:

Double click the shortcut ONCE and wait till the game launches. 

This is how you have to launch the game from now on (Closing Epic Games launcher EACH time and using the created shortcut)! 

Monitoring

You can use ‘Task Manager’ to to monitor your threads/cores utilization.

In my case (4 cores without Hyper Threads) I used the string and shortcut item location from the following URL: https://ktzxxr3ujj.execute-api.us-east-1.amazonaws.com/prod/guide/thread/v2?threads=10101010&path=%22%22

When the game is launched, you can go to ‘Task Manager’ -> ‘Performance’ -> ‘CPU’ -> right click on the ‘% Utilization’  graph -> Change graph to -> Logical processors

This is what type of CPU utilization I get when I use the shortcut

As you can see, physical cores are doing work, while Hyper Threads are resting.

Tests

All tests were run on the following config using MSI Afterburner benchmark feature:

CPU: i7 6700HQ

RAM: DDR4 2x8GB 2133Mhz (2 channel) 

GPU: GTX970M 3GB

STORAGE: 970 EVO 256GB

All ingame setting were the lowest possible, resolution was 1440×1080.

For benchmarking I chose a 160 second Blackheart Cup Semi-Final endzone footage running in Replay mode.

FPS benchmark using different number of threads to run Fortnite

# of Threads

0.1% Low (FPS)

1% Low (FPS)

Average (FPS)

3

22.1

46.9

83.8

4

30.7

54.6

93.0

5

27.5

51.8

89.8

6

22.1

52.3

90.3

8

24.0

52.9

89.1

FPS difference in percentages relative to the best option (4 threads)

# of Threads

0.1% Low (%)

1% Low (%)

Average (%)

3

72.0

86.0

90.1

4

100

100

100

5

89.6

94.9

96.6

6

72.0

95.8

97.1

8

78.2

96.9

95.8

0.1% Low – The lowest 0.1% of frames by frametime

1% Low – The lowest 1% of frames by frametime

Conclusion

It turned out that using only 4 physical cores on my system (avoiding Hyper-Threading) is the sweet spot in terms of performance for ME. I managed to improve my 0.1% low FPS by 28% when compared with using all 8 threads by default. 

Your results may vary, you just have to play with it and see what gives you the best performance. If you have Hyper-Threading or SMT, I suggest you start with disabling HT or SMT THREADS (NOT IN BIOS) and check if it helps. 

Ideally, the THREADS/CORES (not overall CPU usage) you chose should have utilization of 80-90% with UNLIMITED FPS setting. If threads utilization is less than 80-90%, then lower the thread/core count (e.g go from 8 to 7 or 6 etc.) and check again. 

Unfortunately, I could not test this trick on different hardware hence any feedback would be greatly appreciated (:

Leave a Comment

Your email address will not be published. Required fields are marked *