Deploying apps built with C++ AMP

This blog post addresses what has very quickly become an FAQ in the last few days: “What must I deploy on customer machines for my app that uses C++ AMP to function?”

vcamp110.dll

Beyond the optional Visual Studio tooling support, C++ AMP consists of compiler enhancements (they are baked into the Visual C++ compiler), a library (mostly in <amp.h>), and a runtime (vcamp110.dll).

So at runtime your app that uses C++ AMP needs to find vcamp110.dll. You cannot statically link to the C++ AMP runtime, so your app has to somehow find that DLL on the machine where it executes, i.e. only dynamic linking is supported.

Note that vcamp110.dll has a dependency on the MS C runtime libraries (msvcr110.dll and msvcp110.dll). In Beta, the vcamp110.dll used the static version of these libraries and hence did not require them to be available. For RTM, it uses the DLL version of the C runtime libraries.

Also note that, as per the typical pattern, there is a debug version (vcamp110d.dll) which you probably wouldn’t be deploying unless you wanted to perform remote debugging.

Deployment Mechanism

The deployment story is the same as for any C++ application, and as documented on this MSDN page for deployment of C++ apps in VS2010.

In other words, vcamp110.dll (and its dependencies) are part of the “Microsoft Visual C++ 11 Redistributable Package” aka “VCRedist”.

Quick Dirty Deployment Test

To test a deployment to a specific machine, that does not rely on the VCRedist, you can try the DeployAMP.zip from here. To test a machine to see if it has a capable card, you can try the utility from here.