slide1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
The Future of Parallel Programming in Visual Studio PowerPoint Presentation
Download Presentation
The Future of Parallel Programming in Visual Studio

Loading in 2 Seconds...

play fullscreen
1 / 31

The Future of Parallel Programming in Visual Studio - PowerPoint PPT Presentation


  • 152 Views
  • Uploaded on

The Future of Parallel Programming in Visual Studio . Stephen Toub Parallel Computing Platform Microsoft Corporation. DISCLAIMER. This is a talk about the future… All content is very subject to change Some of the technology being discussed… …is available in CTP form now

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'The Future of Parallel Programming in Visual Studio' - russ


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
the future of parallel programming in visual studio

The Future of Parallel Programming in Visual Studio

Stephen Toub

Parallel Computing Platform

Microsoft Corporation

disclaimer
DISCLAIMER
  • This is a talk about the future…
    • All content is very subject to change
    • Some of the technology being discussed…
      • …is available in CTP form now
      • …will likely be available in CTP form soon
      • …may be available in CTP form some time in the future
      • …may never actually ship (but hopefully it all will)
agenda
Agenda
  • Present
    • Visual Studio 2010 Recap
  • Future
    • Visual Studio
    • .NET
    • C++
visual studio 2010 tools programming models runtimes
Visual Studio 2010Tools, Programming Models, Runtimes

Tools

Programming Models

Parallel LINQ

  • Concurrency Visualizer

F#

Parallel Pattern Library

Async

AgentsLibrary

Task Parallel

Library

Parallel Tasks

Data Structures

Data Structures

Concurrency Runtime

Task Scheduler

ThreadPool

Parallel Stacks

Task Scheduler

Resource Manager

Resource Manager

Operating System

Windows

Key:

Managed

Native

Tooling

Platform

future tools programming models runtimes
Future Tools, Programming Models, Runtimes

“DryadLINQ”

Programming Models

Tools

  • Concurrency Visualizer

C#, VB, & F#

Parallel

LINQ

TPL

Dataflow

Async

AgentsLibrary

Data Parallel Extensions to C++

Parallel Pattern Library

  • MPI /GPU Profiler

Task Parallel Library

MPI Debugger

Data Structures

Data Structures

  • GPU Debugger

Runtime

Task Scheduler

ThreadPool

Parallel Watch

DirectX

  • HPC Server

Task Scheduler

Parallel Tasks

Resource Manager

Resource Manager

Parallel Stacks

Operating System

Windows

Platform

Key:

Managed

Native

Tooling

future tools programming models runtimes1
Future Tools, Programming Models, Runtimes

“DryadLINQ”

Programming Models

Tools

  • Concurrency Visualizer

C#, VB, & F#

Parallel

LINQ

TPL

Dataflow

Async

AgentsLibrary

Data Parallel Extensions to C++

Parallel Pattern Library

  • MPI /GPU Profiler

Task Parallel Library

MPI Debugger

Data Structures

Data Structures

  • GPU Debugger

Runtime

Task Scheduler

ThreadPool

Parallel Watch

DirectX

  • HPC Server

Task Scheduler

Parallel Tasks

Resource Manager

Resource Manager

Parallel Stacks

Operating System

Windows

Platform

Key:

Managed

Native

Tooling

this is your synchronous code with net 4
This is your synchronous code with .NET 4…

public voidCopyStreamToStream(Stream source, Stream destination){byte[] buffer = newbyte[0x1000];intnumRead;while ((numRead= source.Read(buffer, 0, buffer.Length)) != 0)    {destination.Write(buffer, 0, numRead);}}

this is an expert s asynchronous code with net 4
This is an expert’s asynchronous code with .NET 4…

publicIAsyncResultBeginCopyStreamToStream(

Stream source, Stream destination){vartcs = newTaskCompletionSource<object>();byte[] buffer = newbyte[0x1000];

Action<IAsyncResult> readWriteLoop = null;readWriteLoop = iar =>    {try        {for (boolisRead = iar == null; ; isRead = !isRead)            {switch (isRead)                {casetrue:iar = source.BeginRead(buffer, 0, buffer.Length, 

readResult =>                        {if (readResult.CompletedSynchronously) return;readWriteLoop(readResult);                        }, null);if (!iar.CompletedSynchronously) return;break;casefalse:intnumRead = source.EndRead(iar);if (numRead == 0)                        {tcs.TrySetResult(null);return;                        }iar = destination.BeginWrite(buffer, 0, numRead,

writeResult =>                        {if (writeResult.CompletedSynchronously) 

return;destination.EndWrite(writeResult);readWriteLoop(null);                        }, null);if (!iar.CompletedSynchronously) return;destination.EndWrite(iar);break;                }            }        }catch (Exception e) { tcs.TrySetException(e); }    };readWriteLoop(null);

returntcs.Task;}

publicvoidEndCopyStreamToStream(IAsyncResultasyncResult){    ((Task)asyncResult).Wait();}

public voidCopyStreamToStream(Stream source, Stream destination){byte[] buffer = newbyte[0x1000];intnumRead;while ((numRead= source.Read(buffer, 0, buffer.Length)) != 0)    {destination.Write(buffer, 0, numRead);}}

this is your asynchronous code with the visual studio async ctp
This is your asynchronous code with the Visual Studio Async CTP…

public voidCopyStreamToStream(Stream source, Stream destination){byte[] buffer = newbyte[0x1000];intnumRead;while ((numRead= source.Read(buffer, 0, buffer.Length)) != 0)    {destination.Write(buffer, 0, numRead);}}

public asyncTaskCopyStreamToStreamAsync(Stream source, Stream destination){byte[] buffer = newbyte[0x1000];intnumRead;while ((numRead= awaitsource.ReadAsync(buffer, 0, buffer.Length)) != 0)    {awaitdestination.WriteAsync(buffer, 0, numRead);}}

public asyncTaskCopyStreamToStreamAsync(Stream source, Stream destination){byte[] buffer = newbyte[0x1000];intnumRead;while ((numRead= await source.ReadAsync(buffer, 0, buffer.Length)) != 0)    { await destination.WriteAsync(buffer, 0, numRead);}}

asynchronous methods just like synchronous programming
Asynchronous Methods“Just Like Synchronous Programming”
  • Language
    • “async” modifier: marks method or lambda as asynchronous
    • “await” operator: yields control until awaited task completes
  • Framework
    • Use Task and Task<T> to represent “ongoing operations”
      • Could be async I/O, background work, anything...
      • Single object for status, result, and exceptions
      • Composable callback model
        • “await” rewrites to use continuations
responsive user interfaces

Responsive User Interfaces

Asian Option Pricing in Excel with Async and PLINQ

demo

http://msdn.com/vstudio/async

related additions
Related Additions
  • Combinators
    • Task.WhenAll, Task.WhenAny, …
  • Timer integration
    • Task.Delay(ms), new CancellationTokenSource(ms)
  • Task Scheduling
    • ConcurrentExclusiveSchedulerPair
  • Fine-Grained Control
    • TCO.DenyChildAttach, EnumerablePartitionerOptions
tpl dataflow
TPL Dataflow
  • Primitives for in-process message passing
    • Think “buffering + processing”
    • Built on Tasks, concurrent collections, …
    • “Dataflow blocks” can be linked together to create networks
  • Based on concepts / designs from
    • Decades of computer science research / history
    • Related Microsoft implementations
      • Asynchronous Agents library in Visual C++ 2010
      • CCR from Microsoft Robotics
example async posting
Example: Async Posting

ActionBlock<int>

varc = new ActionBlock<int>(i =>

{

Process(i);

});

for(int i=0; i<5; i++)

{

c.Post(i);

}

Message Queue

Process(4);

Process(0);

Process(1);

Process(2);

Process(3);

4

0

1

2

3

asynchronous agents

Asynchronous Agents

Real Estate Simulation with Async and TPL Dataflow

demo

http://msdn.com/vstudio/async

dryadlinq
“DryadLINQ”
  • PLINQ
    • “Just add .AsParallel()”
  • “DryadLINQ”
    • “Just add .AsDistributed()”
  • Enable developers to scale out to process large, partitioned data and computations
    • Using existing tools and skills
  • Built on a runtime that provides
    • Support for Windows HPC Server and (eventually) Azure
    • Robustness and fault tolerance
    • Runtime-level optimizations behind the scenes
linq query
LINQ Query
  • varbabies = (IEnumerable<BabyInfo>)...;
  • varresults = from baby in babies
  • where baby.Name == queryName &&
  • baby.State == GetState(stateCode) &&
  • baby.Year >= yearStart &&
  • baby.Year <= yearEnd
  • orderbybaby.Yearascending
  • select baby;
  • foreach(var result in results)
  • {
  • ...
  • }
parallel linq query
Parallel LINQ Query
  • varbabies = ... .AsParallel();
  • varresults = from baby in babies
  • where baby.Name == queryName &&
  • baby.State == GetState(stateCode) &&
  • baby.Year >= yearStart &&
  • baby.Year <= yearEnd
  • orderbybaby.Yearascending
  • select baby;
  • foreach(var result in results)
  • {
  • ...
  • }
dryadlinq query with local data
DryadLINQ*Query With Local Data
  • varbabies = ... .AsDistributed();
  • varresults = from baby in babies
  • where baby.Name == queryName &&
  • baby.State == GetState(stateCode) &&
  • baby.Year >= yearStart &&
  • baby.Year <= yearEnd
  • orderbybaby.Yearascending
  • select baby;
  • foreach(var result in results)
  • {
  • ...
  • }
dryadlinq query with partitioned data
DryadLINQ*Query With Partitioned Data
  • varbabies = DistributedData.Open<BabyInfo>("hpcdsc://MyCluster/BabyInfo");
  • varresults = from baby in babies
  • where baby.Name == queryName &&
  • baby.State == GetState(stateCode) &&
  • baby.Year >= yearStart &&
  • baby.Year <= yearEnd
  • orderbybaby.Yearascending
  • select baby;
  • await results.ExecuteAsync("hpcdsc://MyCluster/MyBabiesResults");

Research download available from:

research.microsoft.com/projects/dryadLINQ/

parallel pattern library new and improved
Parallel Pattern LibraryNew and Improved
  • More container templates
      • concurrent_unordered_map
      • concurrent_unordered_multimap
      • concurrent_unordered_set
      • concurrent_unordered_multiset
      • + R-value support
  • More algorithm templates
      • parallel_transform
      • parallel_reduce
      • parallel_sort
      • parallel_radixsort
      • parallel_buffered_sort
  • First Class Tasks

intn = 40;

task<int> t([=]() { return fib(n); }

… // do other work, come back later

printf("%d\n", t.get());

task_completion_event<int> tce;

task<int> t(tce);

foo(tce); // eventually sets tce

… // do other work, come back later

printf("%d\n", t.get());

task<int> t([]() { return fib(40); }

t.continue_with([](int n) { printf("%d\n", t.get()); }

autoresult = when_any(t1,t2,t3).continue_with

([&](string result) -> int {

printf("Got one element '%s'\n", result.c_str());

return g();

});

result.wait();

autotaskResult= when_all(t1,t2,t3).continue_with(

[&](vector<string> results) -> int {

printf("Got all %d elements\n", results.size());

for each(auto result inresults)

printf("'%s'\n",result.c_str());

returnf();

});

result.wait();

parallel sorting with c

Parallel Sorting with C++

parallel_sort, parallel_buffered_sort, parallel_radixsort

demo

http://code.msdn.microsoft.com

/ConcRTExtras

data parallel and gpu acceleration
Data Parallel and GPU Acceleration
  • Opportunity for extreme performance for certain kinds of computation
  • But…
    • Difficult to program today
    • Often hardware vendor specific

Ray tracing

Computed Tomography

GPU

CPU

Over 32x increase

> 1 TFlops at 5% CPU

data parallel e xtensions to c
Data Parallel Extensions to C++
  • Small set of extensions to C++
    • Data parallel algorithms
    • Subset of C++ language used within kernel functions
      • C++ abstraction features and compilation model
      • Type checking
      • Separate compilation units supported
  • Built on DirectX 11
    • Device portability through DX
  • Integrated debugging and profiling tools
data parallel programming example c a b
Data Parallel ProgrammingExample: C = A + B

0

1

2

3

n

A

CPU

GPU

0

1

2

3

n

B

ALU

ALU

Control

0

2

4

6

2n

ALU

ALU

C

Cache

DRAM

DRAM

float* A = newfloat[size];

float* B = newfloat[size];

float* C = newfloat[size];

...

for(int i = 0; i < n; i++ ) {

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

}

float* A = new float[size];

float* B = new float[size];

float* C = new float[size];

...

parallel_for(0, n, [&](int i) {

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

});

float* A = new float[size];

float* B = new float[size];

float* C = new float[size];

...

auto rv = get_default_resource_view();

extent<1> e(size)

array<1,float> fA(e, A, rv);

array<1,float> fB(e, B, rv);

array<1,float> fC(e, C, rv);

forall([=](index<1> i) {

fC[i] = fA[i] + fB[i];

}, fC, fA, fB);

fC.copy_out(C, size);

release_resource_view(rv);

Where

Shape

Device Copy

What

summary
Summary
  • Visual Studio 2010
    • A great environment for writing parallel applications
  • The Future is very bright
    • Visual Studio
      • Parallel Watch, cluster and GPU profiling and debugging
    • .NET
      • Async, TPL Dataflow, “DryadLINQ”, …
    • C++
      • PPL vNext, Data Parallel Extensions to C++, ...
    • … // stay tuned
session evaluations

Session Evaluations

Tell us what you think, and you could win!

All evaluations submitted are automatically entered into a daily prize draw* 

Sign-in to the Schedule Builder at http://europe.msteched.com/topic/list/

* Details of prize draw rules can be obtained from the Information Desk.

slide31

© 2010 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.