none
How to force a GPU response to the OS RRS feed

  • Question

  • Display driver stopped responding and has recovered is the symptom

    I am converting an existing pattern generation application that I originally fielded in 1996. To give an Idea of the nature of the algorithms used, one of 31 patterns generated is a variation on the Mandelbrot Set. I have written several variations in C++ AMP to determine a solution that gives the best timing. The latest version is along the lines of your Mandelbrot sample in that regardless of the data set size the GPU resource use remains constant. The Mandelbrot pattern for a set 1024 on the maximum dimension runs about 0.5 seconds. The test case I use primarily is a fourth order complex expansion. With 1024 on the maximum dimension the minimum time is 0.99 to 1.5 seconds. I frequently see 2 to 1 variations in the time for reasons I have not yet determined. But that is problem for later.

    Now when I increase the data set (and large data sets are the reason for updating the application) to anything over 1600 on the long dimension I get the above error from the OS. I realize that this is a Windows 8 diagnostic when the GPU goes over the OS timeout. Windows responds by resetting the GPU which kills the program and sometimes causes more serious problems. So my question is: Is there a way that I can program a GPU response at some interval less than the OS timeout? Alternatively, how do I change the timeout in Windows 8? This is of course not a solution for a fielded application. But might work for my test bed.

    Tuesday, June 18, 2013 7:51 PM

Answers

  • You can break down your data set into multiple subsets, each individually processed within a p_f_e (it appears that the upper bound on the long dimension is 1600 in your case), and then insert a call to accelerator_view::wait() between the p_f_e calls. There's no other way (within AMP v1) to pre-empt GPU execution arbitrarily / signal back from the accelerator side to host side.
    Wednesday, June 19, 2013 7:07 AM

All replies

  • You can break down your data set into multiple subsets, each individually processed within a p_f_e (it appears that the upper bound on the long dimension is 1600 in your case), and then insert a call to accelerator_view::wait() between the p_f_e calls. There's no other way (within AMP v1) to pre-empt GPU execution arbitrarily / signal back from the accelerator side to host side.
    Wednesday, June 19, 2013 7:07 AM
  • Thanks for the input. I had come to this conclusion with further searching.
    Wednesday, June 19, 2013 1:28 PM