43
Tarek Madkour Daniel Griffing Group Program Manager QA Lead Microsoft Visual C++ Microsoft Visual C++ Modern C++ Development with Visual C++ 2013

Visual Studio 2013 Conformance Performance Productivity Services Mobile Devices What’s Next

Embed Size (px)

Citation preview

Tarek Madkour Daniel GriffingGroup Program Manager QA LeadMicrosoft Visual C++ Microsoft Visual C++

Modern C++ Developmentwith Visual C++ 2013

Visual Studio 2013ConformancePerformanceProductivityServicesMobile Devices

What’s Next

Agenda

Visual C++: Cadence

• Faster and more regular delivery cadence• Updates provide servicing fixes and new

features• Additional out-of-band releases• CTP compiler with additional C++11/14 conformance• Rename refactoring• PDB-based project• PGO plug-in, SpeedCop

• OSS libraries

VS 2008 VS 2010 VS 2012 VS 2013

VS Updates

Visual Studio 2013

• C++11/14• Performance• Productivity• Services• Mobile Devices

Visual C++ ISO Conformance

• Targeting C++14• Big step improvements in major

releases• Incremental improvements in CTPs• VS Updates focus on compatibility

Explicit conversion operators

Non-static data member initializers

__func__Extended sizeof

Thread-safe function local static

init

Inline namespaces

constexpr (incl. ctors, literal

types)

Raw string literals = defaultImplicit move

generationalignofalignas

Universal character names

in literals

Expression SFINAE

Function template default arguments

= deleteRef-qualifiers:

& and && for *thisnoexcept

(unconditional)noexcept

(incl. conditional)

C++11 preprocessor

(incl. C++98 & C11)

Delegating constructors

“using” aliasesC++14 libs: type

aliases

C++14 decltype(auto)

Inheriting constructors

char16_t, char32_tAttributes

C++98 two-phase lookup

Uniform init & initializer_lists

C99 variable declsC99 _Bool

C++14 auto function return type

deductionUser-defined literals thread_local

C++14 generalized constexpr

Variadic templatesC99 compound

literalsC++14 generic

lambdas (partial)C++14 generalized

lambda captureUnrestricted

unionsC++14 variable

templates

C++14 libs: cbegin/ greater<>/make_uni

que

C99 designated initializers

C++TS? async/await (partial)

C++14 libs: std:: user-defined literals

constexpr (except ctors, literal types)

C++TS concepts lite

C++11/14

VC++ 2013

Explicit conversion operators

Non-static data member initializers

__func__Extended sizeof

Thread-safe function local static

init

Inline namespaces

constexpr (incl. ctors, literal

types)

Raw string literals = defaultImplicit move

generationalignofalignas

Universal character names

in literals

Expression SFINAE

Function template default arguments

= deleteRef-qualifiers:

& and && for *thisnoexcept

(unconditional)noexcept

(incl. conditional)

C++11 preprocessor

(incl. C++98 & C11)

Delegating constructors

“using” aliasesC++14 libs: type

aliases

C++14 decltype(auto)

Inheriting constructors

char16_t, char32_tAttributes

C++98 two-phase lookup

Uniform init & initializer_lists

C99 variable declsC99 _Bool

C++14 auto function return type

deductionUser-defined literals thread_local

C++14 generalized constexpr

Variadic templatesC99 compound

literalsC++14 generic

lambdas (partial)C++14 generalized

lambda captureUnrestricted

unionsC++14 variable

templates

C++14 libs: cbegin/ greater<>/make_uni

que

C99 designated initializers

C++TS? async/await (partial)

C++14 libs: std:: user-defined literals

constexpr (except ctors, literal types)

C++TS concepts lite

C++11/14

VC++ 2013 VC++ Nov 2013 CTP

Explicit conversion operators

Non-static data member initializers

__func__Extended sizeof

Thread-safe function local static

init

Inline namespaces

constexpr (incl. ctors, literal

types)

Raw string literals = defaultImplicit move

generationalignofalignas

Universal character names

in literals

Expression SFINAE

Function template default arguments

= deleteRef-qualifiers:

& and && for *thisnoexcept

(unconditional)noexcept

(incl. conditional)

C++11 preprocessor

(incl. C++98 & C11)

Delegating constructors

“using” aliasesC++14 libs: type

aliases

C++14 decltype(auto)

Inheriting constructors

char16_t, char32_tAttributes

C++98 two-phase lookup

Uniform init & initializer_lists

C99 variable declsC99 _Bool

C++14 auto function return type

deductionUser-defined literals thread_local

C++14 generalized constexpr

Variadic templatesC99 compound

literalsC++14 generic

lambdas (partial)C++14 generalized

lambda captureUnrestricted

unionsC++14 variable

templates

C++14 libs: cbegin/ greater<>/make_uni

que

C99 designated initializers

C++TS? async/await (partial)

C++14 libs: std:: user-defined literals

constexpr (except ctors, literal types)

C++TS concepts lite

C++11/14

VC++ 2013 VC++ Nov 2013 CTP VC++ Next CTP

Explicit conversion operators

Non-static data member initializers

__func__Extended sizeof

Thread-safe function local static

init

Inline namespaces

constexpr (incl. ctors, literal

types)

Raw string literals = defaultImplicit move

generationalignofalignas

Universal character names

in literals

Expression SFINAE

Function template default arguments

= deleteRef-qualifiers:

& and && for *thisnoexcept

(unconditional)noexcept

(incl. conditional)

C++11 preprocessor

(incl. C++98 & C11)

Delegating constructors

“using” aliasesC++14 libs: type

aliases

C++14 decltype(auto)

Inheriting constructors

char16_t, char32_tAttributes

C++98 two-phase lookup

Uniform init & initializer_lists

C99 variable declsC99 _Bool

C++14 auto function return type

deductionUser-defined literals thread_local

C++14 generalized constexpr

Variadic templatesC99 compound

literalsC++14 generic

lambdas (partial)C++14 generalized

lambda captureUnrestricted

unionsC++14 variable

templates

C++14 libs: cbegin/ greater<>/make_uni

que

C99 designated initializers

C++TS? async/await (partial)

C++14 libs: std:: user-defined literals

constexpr (except ctors, literal types)

C++TS concepts lite

C++11/14Yes

Maybe

Visual Studio 2013

• C++11/14• Performance• Productivity• Services• Mobile Devices

Performance Optimizations Recap• Compilation Unit

Optimizations• /O2 and friends

• Whole Program Optimizations

• /GL and /LTCG

.cpp

.cpp .obj

.obj

.exe

.cpp

.cpp .obj

.obj

.exe

.cpp

.cpp .obj

.obj

.exe

Run TrainingScenario

s

.exe

Profile-Guided Optimizations• /LTCG:PGI and /LTCG:PGO

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];}

+

r1 r2

r3

add r3, r1, r2

SCALAR(1 operation)

v1 v2

v3

+

vectorlength

vadd v3, v1, v2

VECTOR(N operations)

Automatic Vectorization// STL – pointers everywhere; not even a loop counter variablevoid transform1(const int * first1, const int * last1, const int * 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 cellsvoid four_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 Libraryvoid machine_vision_filter_example (int *A, int boxStart) { 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

#include <iostream>#include <amp.h>using namespace concurrency;

int main(){ int v[11] = {'G','d','k','k','n',31,'v','n','q','k','c'}; array_view<int> av(11, v); parallel_for_each(av.extent, [=](index<1> idx) restrict(amp) { av[idx] += 1; }); for(unsigned int i = 0; i < 11; i++) std::cout << static_cast<char>(av[i]); }

C++ AMP

VS2013 focused on:• Cross-platform support• More runtime performance gains• Developer productivity

For example:• Targeting Linux, iOS and Android• 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

Visual Studio 2013

• C++11/14• Performance• Productivity• Services• Mobile Devices

IDE Enhancements

demo

Tour of the VS2013 IDE

• Code formatting, brace completion• Rename refactoring• Header/cpp switching• Code peek• Find All References• Code analysis• PDB project• NuGet for native code• Native multi-targeting• Code understanding using dependency graph

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

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

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 interop debugging 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

PDB Project

Visual Studio 2013

• C++11/14• Performance• Productivity• Services• Mobile Devices

C++ REST SDK

• Cloud-based client-server communications library for C++

• Basics:

• Connecting and interacting with RESTful services

• 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_response response){ // Perform actions here to inspect the HTTP response... if(response.status_code() == status_codes::OK) { }});

Make an HTTP request to get a JSON value

void RequestJSONValue(){ http_client client(L"http://www.myhttpserver.com"); client.request(methods::GET).then([](http_response response) { if(response.status_code() == status_codes::OK) { return response.extract_json(); } // Handle error cases, for now return null json value... return task_from_result(json::value()); }) .then([](json::value v) { // Perform actions here to process the JSON value... });}

Visual Studio 2013

• C++11/14• Performance• Productivity• Services• Mobile Devices

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 from

remote machines• Compute shader

debugging• 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 WinRT structs• value struct Person {• IBox<int>^ Age;• }

• Overriding ToString()• ref struct Person {• public:• String^ Name;• virtual String^ ToString()

override • { return Name; }• }

• Improved WinRT exceptions• 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

Visual Studio 2013ConformancePerformanceProductivityServicesMobile Devices

What’s Next

Agenda

On our mind now• Build throughput

Important• Multi-device / cross-platform

What’s Next?

• Performance• Productivity• Libraries: full acquisition story• Gaming and DX• Parallel paradigms: parallel STL, await• Native Desktop UI

More

© 2013 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.