TDR error, please help! RRS feed

  • Question

  • I've read through the page on handling TDRs but still can't really understand what on earth is going on here. I have a parallel_for_each loop that does its thing and then passes an array_view object with the results to another function. Here is that function:

    // Does nothing particularly interesting
    void Synchronize(concurrency::array_view<float> const& view)
    	view.synchronize(); // copy the error data back from the accelerator
    	auto blarghh = view.data(); // TDR error... Why??

    Why does this happen, and how do I debug it? In the VC++ debugger I just see this message:

    D3D11: Removing Device.
    D3D11 ERROR: ID3D11Device::RemoveDevice: Device removal has been triggered for the following reason (DXGI_ERROR_DEVICE_HUNG: The Device took an unreasonable amount of time to execute its commands, or the hardware crashed/hung. As a result, the TDR (Timeout Detection and Recovery) mechanism has been triggered. The current Device Context was executing commands when the hang occurred. The application may want to respawn and fallback to less aggressive use of the display hardware). [ EXECUTION ERROR #378: DEVICE_REMOVAL_PROCESS_AT_FAULT]
    First-chance exception at 0x761EC41F in EDIN.exe: Microsoft C++ exception: Concurrency::accelerator_view_removed at memory location 0x002AEEF0.

    Then in the call stack there's a bunch of concurrency:: calls that I can't access (file "dpcrt.cpp", "d3dresourceview.cpp", etc. can't be found). I have no idea how to debug this; the synchronization and parallel_for_loop all run very quickly, but the program just hangs on that view.data() call, which seems really odd to me.

    The source of the view is a concurrency::array.

    • Edited by arman_sch Friday, May 24, 2013 4:28 AM
    Friday, May 24, 2013 4:28 AM


  • I was able to find the problem by enabling GPU - software debugging.
    • Marked as answer by arman_sch Saturday, May 25, 2013 8:51 AM
    Saturday, May 25, 2013 8:51 AM