beta 11

AMD and the Visual Studio 11 Beta

Today marks the release of the Beta of Visual Studio 11, an exciting new version of Visual Studio that contains a number of enhancements and improvements over prior versions.  While I won’t get into a full feature breakdown (see my links to Microsoft blogs below for what’s new), there are a few specific areas that I’d like to touch on that I believe will help developers make the most of their AMD hardware platforms – across APU, CPU, and GPU.

C++ AMP

C++ AMP is new to Visual Studio and helps enable easy development of data parallel programs which are able to take advantage of underlying APU and GPU hardware that support DirectX 11.  C++ AMP consists of an extension to the C++ language in the form of a new keyword (restrict), infrastructure plumbing, and libraries.  By executing data parallel code directly on the APU/GPU – such as on an AMD A-Series APU or AMD Radeon™ HD 7970 GPU – performance and power savings are possible over code executing on the CPU alone (even SSE vectorized code).  The tight integration of C++ AMP as a C++ language extension and relative ease of use are key benefits that will help drive widespread adoption of heterogeneous computing and lower the barrier of entry for data-parallel computation.

Support for new instructions

Visual Studio 11 includes a number of new intrinsics to support AMD’s processors, including the upcoming 2nd generation APU codenamed “Trinity”.  The processor core in “Trinity” has new instructions for three-operand FMA, also known as FMA3, as well as instructions for bit manipulation (BMI and TBM) and half-float conversion (F16C), all of which are supported via C++ intrinsics in Visual Studio 11.  For more information on the new instructions, see the AMD Software Optimization Guide located here.

Auto-vectorization

Also new to C++ in Visual Studio 11 is an auto-vectorizer, which is on by default.  The compiler will vectorize loops where possible to improve performance using vector instructions on the processor (such as SSE2 and SSE4.x).  Take the following code snippet example:

float A[1000], B[1000], C[1000];

for (i = 0; i < 1000; i++) {

A[i] = B[i] + C[i];

}

The C++ compiler can vectorize this loop in order to execute multiple iterations simultaneously, improving performance significantly with instructions available on modern processors.

In addition to the vectorizer, the auto-parallelizer will execute loops across multiple CPU processors in the system, getting better effective utilization out of the underlying hardware.  The parallelizer requires input from the programmer to indicate those loops that should be parallelized, and can also be used in conjunction with the auto-vectorizer.

Finally, the Visual C++ compiler includes targeted code generation improvements to help improve the overall performance of applications that are built with it.  For more on specific C++ improvements in Visual Studio 11, check out Diego Dagum’s blog.

Support for Windows 8 Metro-style applications

Of course, one of the significant highlights of Visual Studio 11 is support for Metro-style applications and WinRT.  With WinRT, developers can use C++, JavaScript, and managed languages (such as C# and VB) to build new Metro-style applications for Windows 8.  Metro-style applications are hardware accelerated and use the APU or GPU for rendering to enable a smooth user experience.  C++ AMP can also be used in a Metro-style application for even more performance benefits!

In short, Visual Studio 11 has a number of great features to get the most out of the underlying hardware.  This spans AMD’s product line – from APU to CPU to GPU.  We’re excited to see what kind of great new applications developers will build with Visual Studio 11!  To get started with Visual Studio 11, read about what’s new in Jason Zander’s blog, and download the beta.


Robin Maffeo is a Software Engineering Manager on the Microsoft team at AMD. His postings are his own opinions and may not represent AMD’s positions, strategies or opinions. Links to third party sites, and references to third party trademarks, are provided for convenience and illustrative purposes only.  Unless explicitly stated, AMD is not responsible for the contents of such links, and no third party endorsement of AMD or any of its products is implied.

Leave a Reply