Remember. A couple of weeks back, just before we were about to close 2014, I was lamenting the fact that while we had a bunch of great developments in 2014, there were a few disappointments, and among them was the lack of DSP usage. Bsp had brought the DSP function to life through his work, Notaz had included it in the firmware for everyone to use, and then… Poof. Nothing happened. Until yesterday. Notaz has just released a new version of his PS1 Emulator, now using the DSP.
So, what’s in it for you if you like PS1 emulation ? This was covered by Notaz’s own post on the subject:
Notaz: This time I’ve set myself a goal to make use of pandora’s DSP, and did it by moving SPU processing on it.
This was actually quite hard to do without breaking many games and not using excessive copying, as the emulator wasn’t designed for parallelism, so I had to rework how audio is emulated internally. Even after restructuring the code in a way I thought was thread safe and what worked fine on dualcore PC, there were many problems to take care of in DSP version, most of which were related to syncing the caches between ARM and DSP. One problem was neighbor data getting overwritten with old data by the DSP writing to unrelated data, because it would get caught on the same cacheline. Another was race condition between ARM writing new commands and DSP evicting cachelines at the same memory location (I was invalidating before reading new commands but it was too late). It was time consuming, but I’m glad I’ve fully understood the issues and was able to fix them. After this it’s now clear that programming for “normal” multicore processors (which is considered hard) is actually a blessing because hardware takes care of cache coherency there, something you don’t get programming asymmetric processors like C64x DSP on OMAP.
The result is something like 0-20% overall performance improvement (measured while hires rendering is off), depending on how the game uses PSX SPU. If the game only streams audio from CD, there will be no improvement; while if the game uses tracker music with lots of samples, there will be upto 20% improvement. You should be able to see lower CPU usage if you enable CPU usage display or something like live sysinfo.
So there you have it. I did a quick and dirty test yesterday with a couple of games. Note that if you really want to see a difference, you need to disable Frameskip (especially on a 1Ghz unit) and potentially go in high-res mode. I could observe the following on Gran Turismo, for example:
- Gran Turismo 1 high res, frameskip off, speed hack on, DSP OFF, 1Ghz: The game stutters once in a while and the CPU is between 70 and 100% Load while staying on average around 80-85% I feel.
- Gran Turismo 1 high res, frameskip off, speed hack on, DSP ON, 1Ghz: The game only stutters in extreme cases (once per circuit or something) and the CPU is between 60 and 80% most of the time.
This seems to indicate you now have a good chance to turn off frameskipping completely for most games (certainly at low res, high res may still be a challenge sometimes) on a 1Ghz unit. For older units such as CC and Rebirth models, you can now probably enjoy even better looking emulation (with added smoothness) once you turn the DSP on.
I will definitely come back with Notaz for a longer article on the subject with proper benchmarking, but in the meantime, this is great news, and the first great achievement of 2015! Let’s hope many more will come in time on the Pandora.
PS: note that the new version may not show as an update in PNDManager. Grab it anyway.