09-21-2010, 11:24 PM
For a while now, PCSX2 seems to have hit a snag as far as utilizing PC hardware. This is most probably due to the fact that the clock frequency barrier is not likely to go away, and applications now must rely on threading practices to gain higher performance. I'm sure PCSX2 is no exception to this unwritten rule.
I know of a few methods that could make PCSX2 work more effectively, and I'd like to know which can be done, or which are impractical for emulation purposes. I'm certain you already know what these are, I'm just adding detailed info to clarify, just in case I get some terminology wrong.
Hierarchical worker threads - One master thread (The PCSX2 program) controls multiple director threads to do certain tasks. One director thread would be responsible for overseeing translation threads, while another director thread would be responsible for overseeing plugin threads. Yes, I know this is a simplistic view.
Pros: More threading allows for more CPU utilization on multi-core systems
Cons: Not as efficient on CPUs with only two cores
Pre-Processing or Pre-Rendering - The output of the emulation is delayed by a certain amount of "frames" to take advantage of cycles that would have been discarded for the sake of the frame limiter, resulting in smoother performance.
Pros: Increased performance, better frame limiter control
Cons: Input lag, more resource handling
There are a couple other methods which might help, but they escape me at the moment. However, there are some questions I have regarding the emulation itself.
As I recall (I don't recall when), it was stated that EE, IOP, and VUs were all on one thread, and splitting them would require a total re-write of the emulator. Is this still the case?
Also, does an HLE solution appear to be within reach?
Please excuse these questions, as I am sure you guys are tired of seeing them. Anyway, I'm quite impressed with the progress that has been made. Keep up the good work .
I know of a few methods that could make PCSX2 work more effectively, and I'd like to know which can be done, or which are impractical for emulation purposes. I'm certain you already know what these are, I'm just adding detailed info to clarify, just in case I get some terminology wrong.
Hierarchical worker threads - One master thread (The PCSX2 program) controls multiple director threads to do certain tasks. One director thread would be responsible for overseeing translation threads, while another director thread would be responsible for overseeing plugin threads. Yes, I know this is a simplistic view.
Pros: More threading allows for more CPU utilization on multi-core systems
Cons: Not as efficient on CPUs with only two cores
Pre-Processing or Pre-Rendering - The output of the emulation is delayed by a certain amount of "frames" to take advantage of cycles that would have been discarded for the sake of the frame limiter, resulting in smoother performance.
Pros: Increased performance, better frame limiter control
Cons: Input lag, more resource handling
There are a couple other methods which might help, but they escape me at the moment. However, there are some questions I have regarding the emulation itself.
As I recall (I don't recall when), it was stated that EE, IOP, and VUs were all on one thread, and splitting them would require a total re-write of the emulator. Is this still the case?
Also, does an HLE solution appear to be within reach?
Please excuse these questions, as I am sure you guys are tired of seeing them. Anyway, I'm quite impressed with the progress that has been made. Keep up the good work .