Libraries for C++ AMP

Many of you have been wondering about availability of additional C++ AMP libraries. As part of the shipping product you already have C++ AMP which itself is a library, and also the C++ AMP Math library. But you have been asking about additional libraries, typically domain-specific libraries.

Given that C++ AMP directly builds on and (slightly) extends the C++ 11 standard, and given that C++ AMP itself is an open specification, it made sense to continue the openness for additional library work.

We are happy to announce that the way we plan to deliver additional libraries is in open source form, and evolved transparently on CodePlex, under the Apache License 2.0. We will kick start the library projects, our engineers will submit changesets, and you are also invited to contribute (there is an External Contribution Guidelines document for you to read on our CodePlex library projects). This also means that customers of other implementers of the C++ AMP open spec can also contribute and benefit from this effort.

Here is the current list of library projects (we’ll update this when we add new ones):

  1. C++ AMP Algorithms Library (STL-style Algorithms)
  2. C++ AMP RNG Library (Random Number Generator)
  3. C++ AMP FFT Library (Fast Fourier Transform)
  4. C++ AMP BLAS Library (Basic Linear Algebra Subroutines)
  5. C++ AMP LAPACK Library (Linear Algebra Package)
  6. your suggestion here

At the time of writing, these projects are in their infancy (some more so than others), but we wanted to share the news now, rather than wait for them to reach Alpha quality. Please join us on CodePlex to file your suggestions, ask questions, and to consume and contribute as you see fit.

Comments (7)

  1. Just checked the BLAS and LAPACK library, and.

    OK, fine, they are what the names suggest. But come on, no sane C++ programmer wants to do that any more – calling DGEMM on double pointers? Good luck filling out all 21 parameters of DGESVX correctly on the first try..

    I want a Matrix class, with a Matrix operator*(const Matrix&, const Matrix&). I guess this is a good candidate for a library.

  2. DanielMoth says:

    Hi David

    Please keep your feedback on specific libraries on the corresponding codeplex library so the sub-team working on each can receive your feedback directly, and there can be discussion with other interested parties.

    To answer your question, first we will support libraries with interfaces based on *standards*, then we will focus on C++ wrappers. Yes those interfaces seem to be C-style, and that will facilitate porting existing code that other developers have. From your message it is obvious that you do not have existing code using these libraries. So you can either create your own wrappers, or join/start the discussion on each project for what C++ -style interface should look like, and you can even submit code to that effect.

    Thanks for your feedback, and please keep it coming on each library project, on codeplex.



  3. I'm Hungarian, so it's Robert, but never mind that.

    I explicitly suggested here because I understand that it is not the scope of BLAS/LAPACK to provide a C++ -style interface, that is a different library. (Point 6: "your suggestion here")

    We do have existing code for BLAS/LAPACK usage, and that is exactly a C++-style wrapper, but unfortunately we don't have resources to maintain it properly, and the overall quality is low. There are a lot of possibilities in expression templates, delayed evaluations, etc. Eigen ( is good in that, but it is not C++AMP.

  4. DanielMoth says:

    Hi Robert. I see, you are asking for additional libraries, not criticizing our choice of existing libraries – my bad for misinterpreting. Yes, we would probably offer a C++ wrapper in the same library on codeplex, not create a new one. So feedback for a BLAS C++ interface should go to that existing project on codeplex. Also thanks for the pointer to eigen, we'll check it out.

  5. Pierre says:

    Is is possible to have an update on the status of these libraries?  Some appear to have formal 'Alpha' releases.  But I am also curious as to projected timelines for their completion.



  6. Wallhood says:

    Thank you so much for these libraries. I have been very excited about C++ AMP but for my work research I need a high quality RNG which can run on the GPU along with the rest of the programs code. The addition of the C++ AMP RNG Library is a critical step for me to move forward. Thank you for your efforts!

  7. A library for image processing (and signal processing in general) would be great. Operations such as Malvar demosaicing, geometric and color space transformations are all really good candidates for C++Amp.

    I noticed one of your blogs which mentioned C++ Amp being utilized by Kinect for 3D scene reconstruction. If we could create a library of which can offload most of the processing done to the GPU, Kinect/C++Amp development would really take off. Of course, that would open the door to research and industrial applications too, which often employ real-time signal processing solutions.