Unreliable timing in steady-state evoked potential experiment (Windows 10)

OS (Win10):
PsychoPy version (2022.1.1):
Standard Standalone? (y)

I have a Builder experiment in which I present a new stimulus every 10 frames (167 msec on 60 Hz display). This is a steady-state evoked potential study, so the timing of the stimuli needs to be reliably 167 msec. In addition to displaying a 320x320px image, I draw a white rectangle to the corner of the screen so that I can test actual onset times with a photodiode. The rectangle appears with the stimulus at the start of a trial, but only stays on for 5 frames, whereas the stimulus stays on for 10 frames. Unfortunately, I’ve tested the experiment from both a MacBook and a Desktop PC (Win 10) and neither produced accurate and reliable timing. Much to my surprise, the laptop actually did significantly better (both the internal display, and a connected external display) then did the Windows machine. The Windows machine, which is ultimately the machine I want to use, is connected via HDMI to two mirrored 24" displays driven by dual ports on an NVIDIA 8GB GTX 1080 GPU. From both machines there are trials in which the SOA is short by a frame, and other trials in which it’s a frame too long. Across 240 trials, the MAC had 3 errors and the PC had 101(!) So my questions would be:

  1. Why is the PC performance so much worse than the Mac? I would expect the high-end graphics card would buy me accurate timing. Most importantly, how can I improve things?

  2. How can I improve the Builder experiment so as to get reliable timing regardless of operating system? I’d be happy to share the psyexp file, but it really is as simple as loop in which the image appears and stays on for 10 frames, the rectangle appears and stays on for 5 frames, and a fixation cross appears and stays on for 10 frames. I am sure that preloading the images into the graphics card memory would help, but I don’t know how to do this.

Thanks in advance for any help or suggestions!