Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?

212 views
166 views

Published on

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.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
212
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Construire des applications parallèles avec Visual Studio 11 quoi de neuf ?

  1. 1. palais descongrèsParis7, 8 et 9février 2012
  2. 2. Construire des applicationsparallèles avec Visual Studio 11quoi de neuf ? Erwan Herfroy erwanh@microsoft.com Application Development Manager Eric Vernié ericv@microsoft.com http://blogs.msdn.com/b/devosaure/ http://blogs.msdn.com/b/devpara/ @EricVernie
  3. 3. Agenda .NET C++ Rappel sur TPL Rappel sur PPL Nouveautés 4.5 Nouveautés C++  Asynchronisme  Futures/Task  TPL Dataflow  Continuation  …  Algorithmes  C++ AMP*  …
  4. 4. Rappel : Visual Studio 2010Tool Programming Modelss Parallel Parallel LINQ Async ParallelDebugger Agents Pattern Stacks Task Parallel Library Library Library Data Structures Data Structures TasksConcurrency Runtime Visualizer CLR ThreadPool ConcRT CPU Task Scheduler Task Scheduler Threads Resource Manager Resource Manager CoresOperating WindowsSystem Key: Tooling Managed Native
  5. 5. Objectifs & Apports Productivité du Développement Plus simple de formuler le parallélisme Permet l’utilisation de schémas éprouvés Intégration à l’environnement de développement Limite le code de “plomberie” Performance & Exécution Optimisée Réduction du surcoût à l’exécution Permet l’utilisation de schémas performant Meilleure montée en charge Exploitation de la Plateforme Permet une composition efficace Permet de réduire l’utilisation des ressources processeur Amélioration de la cohérence du cache Permet d’exploiter au mieux les nouvelles fonctionnalités de Windows
  6. 6. DEMOTask Parallel Library
  7. 7. Asynchronisme
  8. 8. 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); } }
  9. 9. Appel async (mais bloquant) avec .NET4… 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 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); } }); }
  10. 10. Code async avec .NET4…public void CopyStreamToStream(Stream source, Stream destination) public IAsyncResult BeginCopyStreamToStream( Stream source, Stream destination, AsyncCallback callback, object{ state) { byte[] buffer = new byte[0x1000]; var tcs = new TaskCompletionSource<object>(state); if (callback != null) tcs.Task.ContinueWith(_ => callback(tcs.Task)); int numRead; var buffer = new byte[0x1000]; while ((numRead = source.Read(buffer, 0, buffer.Length)) != 0) Action<IAsyncResult> readWriteLoop = null; { readWriteLoop = iar => { try { destination.Write(buffer, 0, numRead); 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(); }
  11. 11. Code async avec .NET4.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); } }
  12. 12. Code async avec .NET4.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); } }
  13. 13. DEMOasync/await
  14. 14. Nouvelles méthodes de la classe Tasksupportant Async Task.Run Task.Yield Task.Delay Task.ConfigureAwait Task.WhenAll / WhenAny Task.ContinueWith Task.FromResult
  15. 15. DEMOTask WhenAll/WhenAny
  16. 16. Modèle de programmationparallèleExemple de Pipeline
  17. 17. TPL DataflowAperçu 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
  18. 18. TPL DataflowExemple simple Producteur/Consommateur var ab = new ActionBlock<int>(i => ActionBlock<int> Message Queue { Process(i); }); Process(4); Process(3); Process(2); Process(1); Process(0); for(int i = 0; i < 5; i++) { ab.Post(i); } 4 3 2 1 0
  19. 19. DEMOTPL Dataflow en Action
  20. 20. PPL: VS 2010 et VS 11 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_event Containers  concurrent_queue | concurrent_vector | combinable  concurrent_unordered_map | concurrent_unordered_multimap | concurrent_unordered_set | concurrent_unordered_multisetl Agent
  21. 21. DEMOParallel Pattern Library
  22. 22. Nouveautés de la PPL Notion de futur  task<T> t, t.get() Notion de continuation  task<T>.then() Task_completion_event<int> When_all/when_any
  23. 23. Syntaxe des Operateurs Choice: auto t = t1 || t2; // identique à when_any Join: auto t = t1 && t2; // identique à when_all
  24. 24. DEMOQuelques nouveautés de la PPL
  25. 25. Résumé : Nouveautés VS 11Tool Programming Modelss Parallel C#/VB/F# PLINQ DataflowDebugger Async Async Parallel C++ Stacks Agents Pattern Library Library AMP Tasks Task Parallel Library Data Structures Data Structures Watch CPU GPU RuntimeConcurrency ConcRT CLR ThreadPool Visualizer Task Scheduler Task Scheduler CPU GPU DirectX Threads Resource Resource Manager Cores ManagerOperating System Windows Key: Tooling Managed Native New Updated
  26. 26. Pour aller plus loin Prochaines sessions des Dev Camps Chaque semaine, les 10 Live Open Data - Développer des applications riches avec le février DevCamps 2012 16 Meeting protocole Open Data ALM, Azure, Windows Phone, HTML5, OpenData février Live Meeting Azure series - Développer des applications sociales sur la plateforme Windows Azure 2012 http://msdn.microsoft.com/fr-fr/devcamp 17 Live Comprendre le canvas avec Galactic et la librairie février Meeting three.js 2012 Téléchargement, ressources 21 février Live La production automatisée de code avec CodeFluent Meeting Entities et toolkits : RdV sur MSDN 2012 2 mars Live Comprendre et mettre en oeuvre le toolkit Azure pour http://msdn.microsoft.com/fr-fr/ 2012 Meeting Windows Phone 7, iOS et Android 6 mars Live Nuget et ALM 2012 Meeting Les offres à connaître 9 mars 2012 Live Meeting Kinect - Bien gérer la vie de son capteur 90 jours d’essai gratuit de Windows 13 mars 2012 Live Meeting Sharepoint series - Automatisation des tests Azure 14 mars Live TFS Health Check - vérifier la bonne santé de votre www.windowsazure.fr 2012 Meeting plateforme de développement 15 mars Live Azure series - Développer pour les téléphones, les 2012 Meeting tablettes et le cloud avec Visual Studio 2010 Jusqu’à 35% de réduction sur Visual 16 mars Live Applications METRO design - Désossage en règle dun Studio Pro, avec l’abonnement MSDN 2012 Meeting template METRO javascript 20 mars Live Retour dexpérience LightSwitch, Optimisation de www.visualstudio.fr 2012 Meeting laccès aux données, Intégration Silverlight 23 mars Live OAuth - la clé de lutilisation des réseaux sociaux dans 2012 Meeting votre application

×