C++ AMP open spec published

Feb 2012: Published original v0.9. May 2012: Attachment Updated to v0.99. August 2012: Updated to v1.0. December 2013: Published v1.2.

When we announced C++ AMP in June 2011, we also announced that it would be an open specification. Since then we have made multiple interim releases (of both the product and the open spec) with the final v1 release this month. To learn more about C++ AMP, visit one of the links on the right.

Microsoft supports and encourages anyone to implement the C++ AMP open specification on any platform, and we are actively working with interested parties already. If you are a compiler, hardware, or operating system vendor who is interested in C++ AMP support for your platform, read the spec and feel free to get in touch.

Even if you are not such a vendor, I think you’ll enjoy reading the 140 pages as much as we enjoyed writing them, so go ahead and open the pdf now:

To assist you in implementing the C++ AMP open specification, we are making available certain header files from our Visual Studio implementation under an Apache 2.0 license – you can download the headers in the attached ZIP file.

Spectacular work. I have a bunch of detailed comments that I think would give some good recommendations from the scientific computing community (and probably also represent the financial services industry since I do research in economics). Is sending you an email the right forum for giving formal comments on this specification, post everything to this blog, etc.?

"Suggestions" in particular should be accompanied by a scenario (ideally with code) showing clearly why the existing API does not suffice.

If you have extensive number of suggestions or otherwise feel that the MSDN forum approach suggested above will not work for your kind of feedback, we can also start on email (cppampfeedback at …) and can even have a follow up conference call to discuss further if needed.

Whatever mechanism you use, we look forward to your comments and thank you for your interest.

Hi Zooba, you can treat the URL of this blog entry as the permalink to the open spec info. This blog post will be kept updated with the latest info on the location of the C++ AMP open specification, and this blog URL will never change:

How many versions of C++ AMP will there be? CUDA has six so far and this fragmentation is dreadful…

Since newer versions would only remove limitations and bring us back closer to plain C++, why not just stick to C++ in the first place and auto-vectorize anything suitable? This would hide the hardware specific details from the developer and keep the code compatible regardless of the platform or compiler.

GCC and LLVM are already preparing to support auto-vectorization for AVX2, which compared to scalar code will offer a massive leap in performance. And it's not even tied to a specific language.

The Visual C++ compiler shipping with Visual Studio 11 has auto-vectorization and auto-parallelization built in. So for some class of user and some class of problem, that would really help. We hope to invest even more in future releases.

With Visual Studio 2010 (and with further investments in Visual Studio 11) we also offer a library for more advanced multi-core scenarios: Parallel Patterns Library.

With Visual Studio 11, we are enhancing our offerings with heterogeneous support in the form of a library (plus one key language feature): C++ AMP. As you read here, we are also making it an open specification, so everyone can potentially benefit everywhere.

Please choose your preferred mechanism of parallelization on our platform or others. For any additional feedback, feel free to use our MSDN Forum: