Can I Run C++ AMP on My Device?

First, let me re-introduce myself… I’m Don McCrady, the development lead for C++ AMP, and formerly the development lead for the concurrency runtime and PPL, so I already have a few blog posts here from my former life.

In this little post I will describe a small utility you can download and run which will answer the question that I posed in the title of this article:  “Can I Run C++ AMP on My Device?”  The utility is called VerifyAmpDevices, which when run on your computer will list all AMP-capable GPU devices that are available to you, or politely tell you that you don’t have any.  We’re providing this utility so you can check whether your system is capable without having to first install the pre-requisite C++ AMP runtime.  VerifyAmpDevices does not use C++ AMP, and instead makes direct calls into the DirectX runtime.

Here’s what it shows on my Lenovo W520 laptop:

Found 1 accelerator device(s) that are compatible with C++ AMP:
1: NVIDIA Quadro 2000M , has_display=true, is_emulated=false

Here, the program found one GPU that is AMP-compatible (that is, DirectX 11), and also tells you that it’s connected to the display, and that it’s not emulated (is_emulated=false, more on that below).  Note that it did not list the other GPU that this laptop has, the integrated graphics chip, because it is not AMP-compatible.

Here’s what it showed when my colleague Bharath ran it on his Windows 8 system:

Found 4 accelerator device(s) that are compatible with C++ AMP:
1: NVIDIA GeForce GTX 480, has_display=true, is_emulated=false
2: ATI Radeon HD 5800 Series, has_display=false, is_emulated=false
3: ATI Radeon HD 5900 Series, has_display=false, is_emulated=false
4: Microsoft Basic Render Driver, has_display=false, is_emulated=true

That’s quite a lot of horsepower!  VerifyAmpDevices lists 4 GPUs (in no particular order).  His first GPU is an NVIDIA GTX480, which is attached to the display (has_display=true).  He also has two AMD (ATI) GPUs, neither of which are attached to the display.

Last is something called the Microsoft Basic Render Driver, also known as WARP, which Daniel Moth describes in this blog post.  It is also not attached to the display, and additionally shows as an emulated device (is_emulated=true).  It’s an emulated device in that, although it is hardware-accelerated using SSE instructions, it still emulates a DirectX discrete device.

One final note:  If you’ve installed Visual Studio and/or the DirectX11 SDK, you actually have one other AMP-capable device on your system, the Reference Rasterizer.  This doesn’t show in the output of this utility program, but it’s there, and you can use it to run C++ AMP code, but don’t expect it to be fast.  It’s also an emulated device, only runs on a single thread, and is completely interpreted.

If you have any questions about what VerifyAmpDevices.exe is telling you, feel free to ask here.  My inner lawyer also compels me to inform you that we are providing this utility as-is without warrantee.