5
$\begingroup$

GPU rendering causes some screen lag while rendering, with the amount depending on how heavy the render is. I understand this is due to the display driver being busy.

What I don't get is why it happens on a computer with multiple screens and graphics cards. I have 3 screens: 1 running on a GTX titan and running Blender, and the other two on a 770. When I render, it is only with the Titan. So why do my other two screen running off the 770's also lag? Is there a way to stop this?

System info: Windows 7 GTX Titan (primary screen) Geforce 770 (second and third screen) 32gb RAM CPU: Intel i7-4771 quad core, 3.5GHz.

I have had this same problem on previous systems with different graphics cards and CPUs (but always windows 7.)

$\endgroup$
9
  • $\begingroup$ Are you sure that you are rendering on the Titan and displaying on the 770? Or rather, are you sure they are not by accident linked in the Nvidia Panel? $\endgroup$
    – AdamTM
    Commented Jul 11, 2017 at 8:16
  • $\begingroup$ @AdamTM I'm sure that the 770 is not enabled in Blender's settings. I'm not aware of them being linked in the Nvidia Panel. What settings would that be? They are not in SLI (and couldn't be.) $\endgroup$
    – Ascalon
    Commented Jul 11, 2017 at 8:43
  • $\begingroup$ I have a similar setup with one monitor hooked to a GTX 580 and another to a 980Ti and I also experience some cross lag, never could quite solve it or understand why $\endgroup$ Commented Jul 11, 2017 at 17:47
  • $\begingroup$ What OS? What CPU? $\endgroup$
    – bertmoog
    Commented Jul 15, 2017 at 4:12
  • $\begingroup$ @bertmoog added more system info to main post $\endgroup$
    – Ascalon
    Commented Jul 15, 2017 at 4:15

1 Answer 1

2
+50
$\begingroup$

This may not be the answer you're looking for, but I'm pretty sure it has to do with how Blender interfaces with the GPU and how the Windows kernel reacts to that. When the OS gets an interrupt requesting the GPU, it's put into a queue until the GPU becomes available. When Blender gets assigned the GPU, it doesn't let go of it for an eternity in processing time... say, 60ms or so. During that time, the Windows Desktop has to wait on Blender before it can update.

You obviously know that the most efficient way to render is by keeping the GPU load as close to 100% for as long as possible. In order to do this and keep the monitor updating the screen, lag is introduced when the GPU becomes unresponsive for short periods of time.

When the driver becomes unresponsive to the Windows kernel (i.e. when Blender is using it)... it must wait until it responds. You can see this when you enable Branched Path Tracing in the Sampling options. If you set the samples too high, the GPU will become unresponsive long enough that Windows will actually reset the GPU driver and crash Blender (the operating system doesn't like when it's not sovereign over the affairs of the PC).

The point is that Windows is monitoring this. When the Titan is your primary display and it goes unresponsive, the OS takes it's cues from that driver for the desktop display. In other words, if Windows can't display the desktop at 60Hz refresh on your primary monitor, then it won't on the others. I'm pretty sure Windows uses a complex queuing system for sending and receiving messages from the display adapters to keep them all in sync.

I don't have multiple monitors but I have multiple GPUs. When I render with the two GPUs that are not hooked to my monitor, I get zero lag, and I'm running Windows 7. You can try using the 770 as your primary and render using the Titan, but if my guess is right, if Windows is using the Titan as a display device, the 770 will also lag.

Maybe someone else will have a more promising answer/solution. It's possible that Microsoft changed the way that it handles multiple displays in version 10, but I have no experience with it.

$\endgroup$
3
  • $\begingroup$ I've heard something along these lines before, so that is probably the case. I guess then I either need to use only the 770 for displays (a hassle, and then I lose my titan for gaming) or try to find some way to tell windows not to keep them all in sync, or whatever it's doing. I've dealt with the problem of it crashing if unresponsive too long in the past. There's a number in the registry you can change for how long windows will tolerate. Perhaps something similar here? $\endgroup$
    – Ascalon
    Commented Jul 16, 2017 at 20:36
  • $\begingroup$ The registry entry will only keep Windows from resetting the driver. The lag will still be there. Like I said, I don't have another monitor to test, but I'd be interested in knowing if you used the 770 for primary display, rendered on the Titan, and used the Titan for secondary display, if you would see lag. My guess is that you would. I don't know if there's a way to change how Windows handles display interrupts. It might be a single queue for all adapters, therefore, there's no "getting out of line". $\endgroup$
    – bertmoog
    Commented Jul 16, 2017 at 22:33
  • $\begingroup$ It's the same as if you were gaming on triple monitor system, it wouldn't be right to have one display running at 60fps, one at 25, and one at 40. All three should be synced at 25. $\endgroup$
    – bertmoog
    Commented Jul 16, 2017 at 22:39

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .