|Products | Features | Sales | What's New | Download | Support | Tutorials | Newsletter | DOTM | About|
Notes on TDR - Timeout Detection & Recovery
How to configure it for long PuppyRay GPU renderings
|Howler - what's new? - download - tutorials - sales - help|
Back to Tips & Tricks
When you render a scene in Puppy Ray GPU, you may occasionally have seen a problem whereby Windows has reset the graphics driver, because it thought that the GPU was stuck (not responding) for too long. When Windows thinks that the graphics driver has hung, i.e. is stuck in an endless loop or otherwise locked up and won't respond, it resets the graphics driver, in order to re-gain control of your display. This is good, and normal. The default timeout is 2 seconds. Windows will reset the graphics driver, causing the GPU-based rendering to stop, and subsequently causing PD Howler to fail and exit.
If indeed you rendered a scene at 'Final Render' quality or beyond, it is possible to exceed that timeout of 2 seconds, especially with older, slower GPUs, or on high resolution images. Note that a final render is usually done in many, multiple passes, such as 10, 20 or even more anti-aliasing (AA) passes. The overal time to complete such rendering is likely dozens of seconds, even one or more minutes when using 50, 100 or more passes. We are not concerned about this total time here. What we are concerned with is the time for each single pass, when comparing to the TDR - Timeout Detection and Recovery. If a single one of these rendering passes takes more than 2 seconds, then you'll have a problem.
To prevent this, you can adjust two parameters in the Windows registry, which determine how long the GPU is allowed to be busy and unresponsive before Windows takes over. You may want to set it to around 8-10 seconds, so as to be prepared for very high quality renderings, or renderings on a slow GPU.
Below we will show you step by step how to do this.
For more details and information about TDR from Microsoft, explore this:
Timeout Detection and Recovery (TDR)
Note: There are other parameters related to TDR. For our use with Project Dogwaffle and PD Howler / PD Artist, only the TdrLevel and TdrDelay are generally needed.
How to set TdrLevel and TdrDelay for Project Dogwaffle
Here is an example as a detailed step-by-step walk-through of how to increase the TDR delay from 2 to 8 seconds.
Warning: you will use the Registry Editor. Be careful, use at your own risk.
Note: You will need to reboot the PC at the end for the changes to take effect.
Launch the Registry Editor
Run regedit - You can launch it from a cmd (command) tool window, or search it from the Start Menu. The details vary by version of Windows.
For example, here is on Windows 10, entering regedit in the Search box (1) next to the Sstart menu, and selecting the top result (2): regedit
You may see a popup dialog from User account control, asking if you want to allow regedit to make changes to this computer. Click OK to continue with it.
Finding the Proper Subcategory
If you are familiar with the Registry Editor, find this subcategory:
HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Control > GraphicsDrivers:
You can then continue here to add the new entries.
If you are not yet familiar with the registry editor, here is a step by step approach:
Look for the category named HKEY_LOCAL_MACHINE
Click the 'great-than' sign (>) next to it, in order to open that category's detailed list.
Continue on to HKEY_LOCAL_MACHINE > SYSTEM :
Continue on to HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet (you will likely need to resize the window to see it all)
Continue on to HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Control
And finally, scroll down to find HKEY_LOCAL_MACHINE > SYSTEM > CurrentControlSet > Control > GraphicsDrivers:
Strictly speaking, you don't have to open that category: Just click on GraphicsDrivers, it will show the parameters that are defined at the top of that category:
So, here is a look at it, having selected the GraphicsDrivers subcategory: Note that this is actually AFTER having set the two parameters for TDR: TdrDelay, and TdrLevel.
On your system, unless you entered the TDR values in the past, you probably should not yet see those two entries.
Before adding the new entries, be sure to double-check the Path info, showing in the Status bar at the bottom left of the window.
Note: if your Registry Editor window does not show the status bar, be sure to enable it from the View menu.
You will likely see a few entries there already. They could be different from what's in our view example.
Adding the two new entries: TdrLevel, and TdrDelay
Now add the two entries for TDR control. First, the TDR Level (name: TdrLevel). This parameter indicates whether or not WIndows should look for GPU timeout condition, and reset the GPU. You could set it to 0 to turn it off, but we don't recommend that. If indeed the graphics card is stuck, you want Windows to have a chance to reset it. Thus, set the level to 3. Here is how:
Right-click in the white background pane, and select New > DWORD (32-bit)
There are several types of new data entries possible. Be sure to use DWORD, a 32-bit value
You should be able to then set the name of this new entry:
If you missed the opportunity to give it a name, such as if you accidentally clicked outside of it, no worries. Right-click the entry, to chose Rename
Then you can enter the name for this entry: TdrLevel
After you have set the name for it, it's time to set its value. Right-click the newly created entry and select Modify to change it's value(s).
Note: instead of right-clicking it, you can also double-click it, since the default action should be Modify...
In the Modify (Edit DWORD) dialog, set the value to 3. (which means enabled, i.e. still allow Windows to recover on timeout detection).
Warning: If you leave it at 0, TDR is disabled. We don't usually recommend that.
Note: you can set the value of the Base to Decimal, but it won't matter in this case, since Decimal 3 is the same as Hexadecimal 3.
Click OK to save the new values.
Summary of 1st new entry:
Name = TdrLevel
Value data = 3
Base = Decimal
After setting the TdrLevel's entry and value, repeat it for the second entry: TdrDelay
This entry is also of the same type: DWORD (32-bit)
Set the name of the entry to TdrDelay - this will stand for the delay, in seconds, before Windows decides that there was a timeout condition.
Set the value to a value higher than 2. The default is 2 seconds for the timeout delay. The value you'll need will vary and depend on the particulars of your system and GPU.
Try a value of 8, for example.
Note: As long as you use a single-digit value, up to 9, it doesn't matter if you define it as Decimal or Hexadecimal. If you enter a 2-digit value, such as 10, be sure to also set the Base to Decimal if you meant that value to be a decimal value. For example, 10 seconds. Otherwise, it will default to being interpreted as a hexadecimal value. And 10 hex seconds is 16 decimal seconds! 20 hex is 32 decimal. 40 hex is 64 seconds, over a minute!
Summary for 2nd new entry:
Name = TdrDelay
Value data = 8
Base = Decimal
Finally, you will need to reboot your PC so that these new entrys may take effect.
Watch this video for more details:
TDRs - notes on using the GPU in Project Dogwaffle