400 likes | 485 Views
What’s New in Visual Studio 2013 for C++ Developers. Tarek Madkour Group Program Manager – Visual C++ 2-305. performance. compatibility. portability. Agenda. 0. Windows 8.1 Tools 4. Productivity. 1. Performance 2. Compatibility 3. Portability. Agenda. 0. Windows 8.1 Tools
E N D
What’s New in Visual Studio 2013 for C++ Developers Tarek Madkour Group Program Manager – Visual C++ 2-305
performance compatibility portability
Agenda 0. Windows 8.1 Tools 4. Productivity • 1. Performance • 2. Compatibility • 3. Portability
Agenda • 0. Windows 8.1 Tools • 1. Performance • 2. Compatibility • 3. Portability • 4. Productivity
Connected Windows Store Apps • Visual Studio 2013 makes it easier to: • Update your app tile using mobile services • Send push notifications to your Windows Store app • Accessing Azure mobile services backend capabilities • How? • New C++ library for Azure mobile services • Integrated VS tools
Better XAML Designer • New and updated templates • Improved XAML editor • Rulers and dynamic guides • New Windows 8.1 controls • Improved Designer performance • Better in-place style and template editing
Powerful Graphics Debugging • VS2012 introduced DirectX-based Graphics debugging tools in VS Professional, Premium and Ultimate • VS2013 adds: • Support in VS Express • Capturing frames fromremote machines • Compute shaderdebugging • Faster frame capture
Deeper Diagnostics • Diagnostics hub • XAML UI responsiveness profiling • Energy profiler • CPU profiling • Better WinRT Exception debugging • ‘Just My Code’ debugging • Improved Async debugging • JavaScript/C++ interop debugging • C#/C++ interop debugging * • ARM dump debugging *
C++/CX • Boxed types in WinRTstructs • valuestructPerson { • IBox<int>^ Age; • } • Overriding ToString() • refstructPerson { • public: • String^ Name; • virtualString^ ToString() override • { return Name; } • } • Improved WinRTexceptions • Retains stack trace and message string across the ABI • Developers can specify custom message strings • Faster performance • Ref classes instantiate faster, have more compact layouts in memory • Boxing and factory caching improved to speed up XAML scenarios • Facilitated inlining and other code optimizations
Windows 8.1 Tools demo
Agenda • 0. Windows 8.1 Tools • 1. Performance • 2. Compatibility • 3. Portability • 4. Productivity
Performance Optimizations Recap • Compilation Unit Optimizations • /O2 and friends • Whole Program Optimizations • /GL and /LTCG .obj .cpp .obj .cpp .exe .exe .obj .cpp .obj .cpp Profile-Guided Optimizations /LTCG:PGI and /LTCG:PGO Run Training Scenarios .obj .cpp .exe .exe .obj .cpp
Automatic Vectorization • VS 2012: • Uses “vector” instructions where possible in loops • VS 2013 adds: • Statement level vectorization • Permutation of perfect loop nests • Range propagation optimizations • Support for more operations: min/max, converts, shifts, byteswap, averaging • Reductions into array elements • __restrict support for vector alias checking • Improvements to data dependence analysis • C++ pointer vectorization • Gather / scatter optimizations for (i = 0; i < 1000; i++) { A[i] = B[i] + C[i]; } VECTOR (N operations) SCALAR (1 operation) v2 v1 r2 r1 + + v3 r3 vector length add r3, r1, r2 vadd v3, v1, v2
Automatic Vectorization // STL – pointers everywhere; not even a loop counter variable void transform1(constint * first1, constint * last1, constint * first2, int * result) { while(first1 != last1) { //converted to integer *result++ = *first1++ + *first2++; // make these array references } } // DirectX – no loops here! Vectorize operations on adjacent memory cells voidfour_vector_example(XMVECTOR V) { XMVECTOR Result; Result.vector4_f32[0] = 1.f / V.vector4_f32[0]; Result.vector4_f32[1] = 1.f / V.vector4_f32[1]; Result.vector4_f32[2] = 1.f / V.vector4_f32[2]; Result.vector4_f32[3] = 1.f / V.vector4_f32[3]; return Result; } // Machine Vision Library voidmachine_vision_filter_example (int *A, intboxStart) { for(int i = 0; i < 100; i++) A[boxStart+ i] = A[boxStart + i] + 1; }
Vector Calling Convention struct Particle { __m256 x; __m256 y; __m256 z; __m256 w; }; Particle __vectorcall foo(Particle a, __m256 scale) { Particle t; t.x = _mm256_mul_ps(a.x, scale); t.y = _mm256_mul_ps(a.y, scale); t.z = _mm256_mul_ps(a.z, scale); t.w = _mm256_mul_ps(a.w, scale); return t; } Reduces instruction count Minimizes stack allocation Use /Gv for whole module
C++ AMP • In VS2012: • Programming model for heterogeneous computing • Allowed C++ code to run on the GPU for general-purpose computation • STL-like library for multidimensional data • VS2013 adds: • Shared memory support to eliminate/reduce copying of data between CPU and GPU • Enhanced texture support: texture sampling, mipmap support and staging textures • C++ AMP debugging on Win7 and side-by-side CPU/GPU debugging • Faster C++ AMP runtime: improved copy performance, reduce launch overhead • Better DirectX interop support • Improved C++ AMP runtime diagnostics • Improvements to array_view APIs
Agenda • 0. Windows 8.1 Tools • 1. Performance • 2. Compatibility • 3. Portability • 4. Productivity
C++11 • We have a lot here … • see Herb’s talk on Friday at noon.
Agenda • 0. Windows 8.1 Tools • 1. Performance • 2. Compatibility • 3. Portability • 4. Productivity
C++ REST SDK • Cloud-based client-server communications library for C++ • Basics: • Connecting and interacting with RESTfulservices • Uncompromised performance and productivity • Asynchrony for responsiveness and scalability • Uses modern C++11 patterns • Cross-platform enabled and OSS
C++ REST SDK • HTTP Client to send requests and handle responses • JSON library for constructing, parsing and serializing JSON objects. • Asynchronous Streams and Stream Buffers for reading/writing bytes to/from an underlying medium. • http://casablanca.codeplex.com
Basic HTTP Client • http_client client(L"http://www.myhttpserver.com"); • http_request request(methods::GET); • client.request(request).then([](http_responseresponse) • { • // Perform actions here to inspect the HTTP response... • if(response.status_code() == status_codes::OK) • { • } • });
Make an HTTP request to get a JSON value • voidRequestJSONValue() • { • http_client client(L"http://www.myhttpserver.com"); • client.request(methods::GET).then([](http_responseresponse) • { • if(response.status_code() == status_codes::OK) • { • returnresponse.extract_json(); • } • // Handle error cases, for now return null json value... • returntask_from_result(json::value()); • }) • .then([](json::valuev) • { • // Perform actions here to process the JSON value... • }); • }
C++ REST SDK demo
Agenda • 0. Windows 8.1 Tools • 1. Performance • 2. Compatibility • 3. Portability • 4. Productivity
NuGet • Easy acquisition and usage of compatible libraries in C++ projects • Library vendors can expose their libraries as NuGet packages using available tools http://blogs.msdn.com/b/vcblog/archive/2013/04/26/nuget-for-c.aspx
IDE Enhancements demo
Code Formatting • Configurable options for indentation, space, new lines and wrapping • Automatically applied while typing, pasting or formatting
Header / Code Switching Brace Completion
Code Peek • View type definitions without leaving the current open file
Code Analysis UI Enhancements • Filter on categories and sort on various fields to help focus on important problems first
Async Debugging • Supports Windows Store and Desktop apps • Requires Windows 8.1 • Enhancements to the Call Stack and Tasks window • Answers the questions “Why am I here?” & “What is going on right now?”
“Just My Code” debugging • Helps developer focus on code they authored • Call Stack window hides non-user code • Non-user code defined in configurable .natjmc file • Not used during stepping
Interop debugging • Multiple flavors of interopdebugging enabled: • JavaScript / C++ • C# / VB / C++ • CPython / C++ • GPU / CPU • Enable by choosing an option in the Project Properties • Break in the debugger in either C++ or JS/C#/VB/Python code • Breakpoint | Exception| Break All (pause icon) • Inspect state, e.g. in Locals, Call Stack
Resources • Visual C++ Blog • http://blogs.msdn.com/vcblog • Visual C++ Developer Center • http://msdn.microsoft.com/en-us/visualc/default.aspx • Other C++ Sessions at //BUILD
Give us your feedback! Give us your feedback! • What? • Are you interested in having an impact on the future user experiences in Visual Studio? Come help us shape the future. • When & Where? • Schedule a time with us vsdr@microsoft.com • Room 254 South Moscone, West Mezzanine Level • Why? • Your input and feedback will influence future Microsoft Visual Studio tools
Required Slide *delete this box when your slide is finalized Your MS Tag will be inserted here during the final scrub. Evaluate this session • Scan this QR codeto evaluate this session and be automatically entered in a drawing to win a prize!