Upload
microsoft
View
111
Download
3
Embed Size (px)
DESCRIPTION
C'est une réalité aujourd'hui. Les PC, les tablettes et autres périphériques mobiles sont désormais munis pour la majorité de multi-coeurs. Mais comment les programmer ? Dans cette session, nous vous proposons de faire un tour d'horizon des nouvelles innovations de Visual Studio 11 en termes de parallélismes, qui viennent enrichir celles de Visual Studio 2010. Alors que vous soyez développeur .NET ou Développeur C++, ou les deux ou même pas du tout, cette session vous permettra d'avoir une vue générale sur les nouvelles fonctionnalités de Visual Studio 11 en termes de parallélisme.
Citation preview
palais des congrès Paris
7, 8 et 9 février 2012
Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?
Erwan Herfroy [email protected] Development Manager
Eric Vernié [email protected]://blogs.msdn.com/b/devosaure/http://blogs.msdn.com/b/devpara/@EricVernie
.NET C++
Rappel sur TPLNouveautés 4.5
Asynchronisme TPL Dataflow …
Rappel sur PPLNouveautés C++
Futures/Task Continuation Algorithmes C++ AMP* …
Agenda
Rappel : Visual Studio 2010
Parallel Pattern LibraryTask Parallel Library
Parallel LINQ
Managed NativeKey:
WindowsOperating System
Runtime
Programming Models
CLR ThreadPool
Task Scheduler
Resource Manager
Data Structures D
ata
Stru
ctur
es
Tools
Tooling
Parallel Debugger
Concurrency Visualizer
AsyncAgentsLibrary
Stacks
Tasks
Threads
Cores
ConcRT
Task Scheduler
Resource Manager
CPU
Productivité du DéveloppementPlus simple de formuler le parallélismePermet l’utilisation de schémas éprouvésIntégration à l’environnement de développementLimite le code de “plomberie”
Performance & Exécution OptimiséeRéduction du surcoût à l’exécutionPermet l’utilisation de schémas performantMeilleure montée en charge
Exploitation de la PlateformePermet une composition efficacePermet de réduire l’utilisation des ressources processeurAmélioration de la cohérence du cachePermet d’exploiter au mieux les nouvelles fonctionnalités de Windows
Objectifs & Apports
DEMO
Task Parallel Library
Asynchronisme
Appel synchrone avec .NET 4…
public void CopyStreamToStream(Stream source, Stream destination){ byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = source.Read(buffer, 0, buffer.Length)) != 0) { destination.Write(buffer, 0, numRead); }}
public void CopyStreamToStream(Stream source, Stream destination){ byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = source.Read(buffer, 0, buffer.Length)) != 0) { destination.Write(buffer, 0, numRead); }}
Appel async (mais bloquant) avec .NET 4…
public Task CopyStreamToStreamAsync(Stream source, Stream destination){ return Task.Factory.StartNew(() => { byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = source.Read(buffer, 0, buffer.Length)) != 0) { destination.Write(buffer, 0, numRead); } });}
Code async avec .NET 4…public void CopyStreamToStream(Stream source, Stream destination){ byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = source.Read(buffer, 0, buffer.Length)) != 0) { destination.Write(buffer, 0, numRead); }}
public IAsyncResult BeginCopyStreamToStream( Stream source, Stream destination, AsyncCallback callback, object state){ var tcs = new TaskCompletionSource<object>(state); if (callback != null) tcs.Task.ContinueWith(_ => callback(tcs.Task)); var buffer = new byte[0x1000];
Action<IAsyncResult> readWriteLoop = null; readWriteLoop = iar => { try { for (bool isRead = iar == null; ; isRead = !isRead) { switch (isRead) { case true: iar = source.BeginRead(buffer, 0, buffer.Length, readResult => { if (readResult.CompletedSynchronously) return; readWriteLoop(readResult); }, null); if (!iar.CompletedSynchronously) return; break;
case false: int numRead = 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); return tcs.Task;}
public void EndCopyStreamToStream(IAsyncResult asyncResult) { ((Task)asyncResult).Wait();}
Code async avec .NET 4.5…
public void CopyStreamToStream(Stream source, Stream destination){ byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = source.Read(buffer, 0, buffer.Length)) != 0) { destination.Write(buffer, 0, numRead); }}
public async Task CopyStreamToStreamAsync(Stream source, Stream destination){ byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = await source.ReadAsync(buffer, 0, buffer.Length)) != 0) { await destination.WriteAsync(buffer, 0, numRead); }}
Code async avec .NET 4.5…public void CopyStreamToStream(Stream source, Stream destination)
{ byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = source.Read(buffer, 0, buffer.Length)) != 0) { destination.Write(buffer, 0, numRead); }}
public async Task CopyStreamToStreamAsync(Stream source, Stream destination){ byte[] buffer = new byte[0x1000]; int numRead; while ((numRead = await source.ReadAsync(buffer, 0, buffer.Length)) != 0) { await destination.WriteAsync(buffer, 0, numRead); }}
DEMO
async/await
Task.Run
Task.Delay
Task.WhenAll / WhenAny
Task.FromResult
Task.Yield
Task.ConfigureAwait
Task.ContinueWith
Nouvelles méthodes de la classe Task supportant Async
DEMO
Task WhenAll/WhenAny
Modèle de programmation parallèleExemple de Pipeline
System.Threading.Tasks.Dataflow.dll
Primitives de passage de messages “Des blocs” qui manipulent des données A utiliser individuellement ou liés ensemble afin de créer
un réseau
Repose sur des principes Vieux de dizaines d’années Inspirée par
Asynchronous Agents Library dans Visual C++ 2010 Le projet Axum en incubation CCR de Microsoft Robotics
TPL DataflowAperçu
ActionBlock<int>Message Queue
0123
Process(0);Process(1);Process(2);Process(3);
4
Process(4);
var ab = new ActionBlock<int>(i =>{ Process(i);});
for(int i = 0; i < 5; i++){ ab.Post(i);}
TPL DataflowExemple simple Producteur/Consommateur
DEMO
TPL Dataflow en Action
Algorithmes parallèle parallel_for | parallel_for_each | parallel_invoke parallel_transform | parallel_reduce | parallel_sort |
parallel_buffered_sort | parallel_radixsort
Tâches task_handle | task_group | structured_task_group task<T>
then<T> | when_all<T> | when_any<T> operateurs &&, ||
task_completion_eventContainers
concurrent_queue | concurrent_vector | combinable concurrent_unordered_map | concurrent_unordered_multimap |
concurrent_unordered_set | concurrent_unordered_multisetl
Agent
PPL: VS 2010 et VS 11
DEMO
Parallel Pattern Library
Notion de futur task<T> t, t.get()
Notion de continuation task<T>.then()
Task_completion_event<int>
When_all/when_any
Nouveautés de la PPL
Choice:
auto t = t1 || t2; // identique à when_any
Join:
auto t = t1 && t2; // identique à when_all
Syntaxe des Operateurs
DEMO
Quelques nouveautés de la PPL
www.buildwindows.com
Résumé : Nouveautés VS 11
Parallel Pattern LibraryTask Parallel Library
PLINQ
Managed NativeKey:
WindowsOperating System
Runtime
Programming Models
CLR ThreadPool
Task Scheduler
Resource Manager
Data Structures D
ata
Stru
ctur
es
Tools
Tooling
Parallel Debugger
Concurrency Visualizer
AsyncAgentsLibrary
Stacks
Tasks
Watch
CPU
Threads
Cores
C#/VB/F#
Async Dataflow
C++AMP
DirectX
GPU
CPU GPU
ConcRT
Task Scheduler
Resource Manager
New Updated
Chaque semaine, les DevCampsALM, Azure, Windows Phone, HTML5, OpenDatahttp://msdn.microsoft.com/fr-fr/devcamp
Téléchargement, ressources et toolkits : RdV sur MSDNhttp://msdn.microsoft.com/fr-fr/
Les offres à connaître90 jours d’essai gratuit de Windows Azure www.windowsazure.fr
Jusqu’à 35% de réduction sur Visual Studio Pro, avec l’abonnement MSDN www.visualstudio.fr
Pour aller plus loin
10 février 2012
Live Meeting
Open Data - Développer des applications riches avec le protocole Open Data
16 février 2012
Live Meeting
Azure series - Développer des applications sociales sur la plateforme Windows Azure
17 février 2012
Live Meeting
Comprendre le canvas avec Galactic et la librairie three.js
21 février 2012
Live Meeting
La production automatisée de code avec CodeFluent Entities
2 mars 2012
Live Meeting
Comprendre et mettre en oeuvre le toolkit Azure pour Windows Phone 7, iOS et Android
6 mars 2012
Live Meeting
Nuget et ALM
9 mars 2012
Live Meeting
Kinect - Bien gérer la vie de son capteur
13 mars 2012
Live Meeting
Sharepoint series - Automatisation des tests
14 mars 2012
Live Meeting
TFS Health Check - vérifier la bonne santé de votre plateforme de développement
15 mars 2012
Live Meeting
Azure series - Développer pour les téléphones, les tablettes et le cloud avec Visual Studio 2010
16 mars 2012
Live Meeting
Applications METRO design - Désossage en règle d'un template METRO javascript
20 mars 2012
Live Meeting
Retour d'expérience LightSwitch, Optimisation de l'accès aux données, Intégration Silverlight
23 mars 2012
Live Meeting
OAuth - la clé de l'utilisation des réseaux sociaux dans votre application
Prochaines sessions des Dev Camps