mirror of
https://github.com/libretro/parallel-ps2.git
synced 2026-11-09 11:31:34 -10:00
A rasterizer worker is fed a job a draw by the GS thread and drains them faster than they come, so it parks many times a frame, and each park on the asymmetric eventcount is a process-wide barrier: 157 a frame on a game in play. The asymmetric protocol spares the EE a locked instruction a GS packet; here the producer is the GS thread and a locked increment a draw is nothing against the barriers. The eventcount gains a symmetric init, and the job queues use it: a park is a kernel wait and no more. MTGS and MTVU are as they were. 200 frames of the game on the software renderer, twice each: 157 barriers a frame become 19, wall 10.2 and 9.7 s become 9.3 and 9.1, CPU 17.1 and 16.3 s become 15.7 and 15.3. tests/spsc worksema: the producer/worker contract on the symmetric pair too, plain and under TSan.