Since the first release of C++ AMP in Visual Studio 2012 nearly 8 months ago, we have been working hard to bring you the next set of C++ AMP features. BUILD 2013 day 2 keynote demo provided a snapshot of C++ AMP in Visual Studio 2013. In this post, we will delve into the C++ AMP features available in Visual Studio 2013 Preview.
Support for shared CPU\GPU memory
The CPU\GPU data transfer efficiency on accelerators that share physical memory with CPU is now significantly enhanced due to elimination of redundant copying of data between GPU and CPU memory. Depending upon how the code was written, C++ AMP application that run on integrated GPU and WARP accelerators should see no (or significantly reduced) time spent on copying data. This feature is available only on Windows 8.1 and is turned on by default for WARP and some integrated GPUs. Additionally, developers can also opt into the feature programmatically through a set of APIs.
Enhanced support for textures
In Visual Studio 2013, we added a bunch of features to enhance support for textures. The added features include
- Access to hardware texture sampling capabilities
- Support for staging textures
- Texture_view redesigned (to be more consistent with array_view design)
- A more complete and performant set of texture copy APIs including section copy
- Better interop support for textures including a much bigger set of DXGI formats
- Support for mipmap
Improved C++ AMP debugging experience
The debugging experience for C++ AMP code has been improved in multiple fronts. We had previously announced a series of improvements including
- Availability of C++ AMP GPU debugging on Windows 7 & Windows Server 2008 R2 platforms and
- Availability of remote GPU hardware debugging on Nvidia GPUs.
Apart from these in Visual Studio 2013, we enabled the following set of features
- Side-by-side CPU\GPU debugging. Currently mixed mode debugging is available on Windows 8.1 for the WARP accelerator.
- Ability to debug using the WARP accelerator instead of single threaded ref accelerator. Using WARP for debugging provides a much faster debugging experience.
Faster C++ AMP runtime
We have worked to improve the performance of the C++ AMP runtime in order to provide even faster application performance. The work includes
- Reduced parallel_for_each launch overheads
- Optimized texture copy performance
- Optimized performance of copying small data sizes between the CPU and accelerator
Array_view API improvements
In Visual Studio 2013, the following set of improvements have been made to the array_view abstraction:
- Ability to create array_view without a data source
- Ability to synchronize to a specific accelerator.
- Performant array_view indexing operators on CPU
Apart from the changes listed above, we also took time to refine other parts of C++ AMP too. These changes include:
- New APIs to enable clean AMP runtime shutdown
- Improved the accuracy and helpfulness of C++ AMP runtime exception messages
- Improved the accuracy of ETW events for better profiling experience
- Ability to lock/unlock accelerator_views to allow safe access to shared resources between C++ AMP and Direct3D APIs.
We are excited to bring the next set of features in C++ AMP and in the coming weeks, we will be discussing these new features in depth. We hope you will take the time to download Visual Studio 2013 Preview and send us your feedback, comments and questions – below or in our MSDN forum.