A feature request: Auto-configured software rendering threads
#1
Currently the users have to manually configure the number of software rendering threads. It would be nice to have an "Auto" option, which automatically sets the number of rendering threads according to the number of cores.

Also, I think the label "Extra rendering threads" is ambiguous. I tested it and I believe the behavior is as follows:
- 0 ERT: PCSX2 uses 2 threads: EE and GS/software rendering.
- 1 ERT: PCSX2 uses 3 threads: EE, GS, and a software rendering thread.
- 2 ERT: PCSX2 uses 4 threads: EE, GS, and 2 software rendering threads.

"Separate rendering threads" would be more accurate. Actually, a lot of threads are created for PCSX2, but I believe most of them are idle; they are probably created by the OS.
Reply

Sponsored links

#2
I discussed this a little bit once with one of the devs(I forget who lol) and we decided against it. There is just too much variable crap that changes what number of threads is optimal. If you wanna bring it up again you can file a thingy on Github, maybe opinions have changed IDK.
[Image: XTe1j6J.png]
Gaming Rig: Intel i7 6700k @ 4.8Ghz | GTX 1070 TI | 32GB RAM | 960GB(480GB+480GB RAID0) SSD | 2x 1TB HDD
Reply
#3
I don't think it needs to be optimal for all games in every scenario because it's just an option. The users can change it if they want to find out the optimal setting for the games they are playing. It's fine if this has already been discussed. This option isn't for me anyway, but I think it will be good for new users and may improve the reputation of the project a little bit.
Reply
#4
(12-10-2015, 09:44 PM)xemnas99 Wrote: Currently the users have to manually configure the number of software rendering threads. It would be nice to have an "Auto" option, which automatically sets the number of rendering threads according to the number of cores.

Also, I think the label "Extra rendering threads" is ambiguous. I tested it and I believe the behavior is as follows:
- 0 ERT: PCSX2 uses 2 threads: EE and GS/software rendering.
- 1 ERT: PCSX2 uses 3 threads: EE, GS, and a software rendering thread.
- 2 ERT: PCSX2 uses 4 threads: EE, GS, and 2 software rendering threads.

"Separate rendering threads" would be more accurate. Actually, a lot of threads are created for PCSX2, but I believe most of them are idle; they are probably created by the OS.
GS don't know if MTVU is enabled. It depends if CPU are HT or not. Well extra is extra, separate is as good/bad as extra.

However, we could put 2 as default extra rendering thread if we detect a 4 cores. 0 for 2 cores. It won't be optimal but 0 isn't optimal neither.
Reply
#5
(12-11-2015, 01:54 PM)gregory Wrote: GS don't know if MTVU is enabled. It depends if CPU are HT or not. Well extra is extra, separate is as good/bad as extra.

An extra rendering thread should mean an additional rendering thread, but it's not the case. One extra rendering thread results in a single rendering thread, but many users may think that it results in 2 rendering threads. In my opinion, "separate" is clearer. Regarding HT, can it be detected?

(12-11-2015, 01:54 PM)gregory Wrote: However, we could put 2 as default extra rendering thread if we detect a 4 cores. 0 for 2 cores. It won't be optimal but 0 isn't optimal neither.

Yes. I think 2 or 3 is fine for quad-core CPUs. If you're going to do this, I suggest adding an "Auto" option. The number of threads can be changed later; the point is providing a better default value. The users can always change it if they want to experiment.
Reply
#6
Why is one extra rendering thread not one additional thread? According to your list in the first post it is exactly one additional thread.?! Or do you emphasize on 'rendering'? Is the normal gs-thread not rendering at all? Who is rendering the image if 0 ERT?

The problem with HT is that you dont know how to count the optimal parallel threads and this might even depend om the game. Dynamic auto is really hard to create.

I think just setting it to 2 as default value for all systems would help. Dualcores normally can not use sw rendering (maybe except pentium G series). Quadcores are likely minimum and dominating the market (disregarding HT). If you have HT you could enable one or two more. As EE+VU normally <<200% regarding of mtvu for quadcore systems might not be needed. And slightly overuse of threads is not the worst you can do.

Tl;dr default = 2 (for all systems)
Reply
#7
(12-11-2015, 09:22 PM)willkuer Wrote: Tl;dr default = 2 (for all systems)

I vote for this.
[Image: XTe1j6J.png]
Gaming Rig: Intel i7 6700k @ 4.8Ghz | GTX 1070 TI | 32GB RAM | 960GB(480GB+480GB RAID0) SSD | 2x 1TB HDD
Reply
#8
Beside counting core is not crossplatform (the best solution will be to transfer it from core to plugin with a plugin extensions). Otherwise I think 2 is a general good default.

Note value 1 is special. Rendering is done on a separate thread but due to sync, it is as slow as 0.
Reply
#9
(12-11-2015, 09:22 PM)willkuer Wrote: Why is one extra rendering thread not one additional thread? According to your list in the first post it is exactly one additional thread.?! Or do you emphasize on 'rendering'? Is the normal gs-thread not rendering at all? Who is rendering the image if 0 ERT?

If ERT is 0, the GS thread does the rendering. If ERT is 1, the GS thread doesn't do the rendering; it delegates this responsibility to a separate software rendering thread. This means that the workload on the GS thread will be reduced. Thus using 3 ERT makes many games run faster than using 2 ERT on quad-core systems.

It depends on how you interpret it. 1 ERT could mean either an additional rendering thread (which is not the case) or an additional thread that does the rendering.

(12-11-2015, 09:22 PM)willkuer Wrote: The problem with HT is that you dont know how to count the optimal parallel threads and this might even depend om the game. Dynamic auto is really hard to create.

It doesn't need to be able to provide the optimal settings for all games. Two additional threads should be fine for quad-core CPUs with HT. For example, if we use 2 ERT for quad-core CPUs without HT, we can use 4 ERT for quad-core CPUs with HT.

(12-11-2015, 09:22 PM)willkuer Wrote: Tl;dr default = 2 (for all systems)

That should be okay for an initial implementation.
Reply
#10
This is funny. So ERT=1 means the GSThread isnt doing anything during rendering? It waits for 'rendering threads' to join? That's indeed counterintuitive.

Maybe one could jump over the '1'-setting. So
Code:
if (threads>0) threads++;

Anything against that?
Reply




Users browsing this thread: 1 Guest(s)