Our parallel debugging team, headed by architect Paul Maybee and development lead Maria Blees have been putting extra hours working jointly with nVidia engineers to enable live on-hardware GPU debugging for C++ AMP, which visitors to SC'11 can now play with at our Microsoft Parallel Computing booth. Here is a snapshot of (from left to right) Paul Maybee (Microsoft) with nVidia's engineers Magnus Strengert, Chris VanderKnyff and Sebastien Domine showing off their mutual creation:
And here's a closer snapshot of the debugging session:
You can watch Daniel Moth's video on C++ AMP debugging to understand what is being shown here in greater detail, but, briefly:
1. Locals are evaluated on the GPU and shown in the Locals window (bottom left)
2. The call stack is shown on the bottom right. Note: the call stack is in reality completely inlined when generating code for the GPU, but we have enough symbolic information to reconstitute it and allow you to query it, as if it still existed.
3. The parallel stack window now show all threads in flight on the GPU (top right)
4. The main code window (top left) shows we're stopped at a breakpoint and at the line of code above the breakpoint you can also see a little indicator (green hued) showing that there are other threads currently there, at that position in their execution.
Compared to debugging on the reference accelerator, true hardware debugging really shows you what's going on on the graphics card, for example, you can see how mathematical operations may have different precision than that which is calculated on the CPU, and as another example, you will see many more threads and thread tiles in flight.
This is yet another illustration of the close relationship we have with hardware partners. The debugging interfaces are open for all hardware vendors to implement and we are very excited that nVidia has been there to work with us and enable this important feature on time for the Super Computing conference and the upcoming Beta release of the next version of Visual Studio.