Some of you may already know this, but for me this was new knowledge.
Background information.Back in a day, when GT Legends was released, multicore CPUs were just arriving in home desktops and as it was a new thing and GTL seemed to have next to none advantage running on several cores, the design team made the game start with single core active only. However I came across some videos demonstrating how GTR2 gets quite boost when ran with affinity to set to all available cores. So I decided to test if it was same with GTL, after all, games are based on same engine, just different versions.
BenchmarkingSo, I looked up for track that can't keep up 60fps with everything maxed out in replay mode with my hardware setup (i7-6700, GTX1070, running 2560x1440) when ran with GTL's default affinity. As I knew JCRR's St. Roch being very slow with FULL shadows, I changed shadows high (and kept everything else full). Fired up FRAPS with perfomance logging, loaded up the replay you can see in Giannini thread and started fps logging from replay time code 50.715 seconds. When car crossed the finish line I stopped the fraps and alt tabbed to fraps log folder to see that I had fps for each second logged to CSV.
Next I took the task manager, went to processes and changed gtl.exe affinity to all cores. (that is 8 in my case, as i7-6series has hyperthreading so it's four physical cores shows up as 8 ones.) And did the replay benchmarking again exactly same as I did with single core.
The ResultsDifference in average fps was no biggie, something like 57 fps vs. 59 fps, but the gain in situations where there was big drops in first run was remarkable. Lowest fps in first run was 42 fps. Exactly in same spot in second run, recorded fps was 57 fps. So, having all cores checked helps a lot in points where the fps usually suddenly drops. I did the tests with vsync on, as that's the way I play the game. Of course that limits exact true performance bit more, but most likely it also helps to balance the fps drops. having drop from 60 to 57 fps is not that big than having drop from 150 fps to 57 fps.
I will add here some graphs as soon as I am back home.I also noticed that in the first run Core 1 was capped to 100% on those fps drops and even GTX1070 clocks dropped to 1523MHz. So system was so CPU limited that GFX card had huge amount of idle time to spend. In second run none of the cores reached no more than half of their peak rate and the GFX card kept it's clocks in max 1924MHz. So the efficiency was really better.
Why This happens then? Most likely the process scheduler in Windows XP was not really as efficient as it is now in Windows 10 and 10 to 15 years ago cpus had 2-3 cores, while there's now 4-16 cores That means having always free core to other than GTL task. Another thing is that DirectX's threading capabilities have come long way since early 2000's and while GTL's old DX9 engine cannot use parallerlism available in DX12, The overall multicore efficiency is much better. It could be that DX9 background workers cannot use more cores than what is allowed to it's host application, so as the GTL locks itself in single core, it also locks the background DX processes behind that very same limitation.
So, How to fix it?As windows still does not allow setting default affinities from shortcut properties, there's several more or less easy ways to do this. Most obvious is start GTL and go to task manager to change the affinity. Of course this is not very handy, but more or less annoying. Some people use commericial computer performance analytic tools, which allow adding affinity setup in shortcuts, but as this feature is then part of the quite big suite of tools, it is more or less like killing snail with steam roller.
So, if there's no good solution available, I usually do one by myself.
It's a small program, that you start before GTL and it looks for gtl.exe process and when it finds it, it automatically sets the affinities to settings you have yourself defined. After that it keeps watching every 30 seconds that the affinities stay as you wanted.
I will release this software when I have finalized it.