SlideShare uma empresa Scribd logo
1 de 26
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 erwanh@microsoft.com
 Application Development Manager

 Eric Vernié ericv@microsoft.com
 http://blogs.msdn.com/b/devosaure/
 http://blogs.msdn.com/b/devpara/
 @EricVernie
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*
                         …
Rappel : Visual Studio 2010

Tool          Programming Models
s Parallel
                    Parallel LINQ                                                   Async          Parallel
Debugger                                                                           Agents          Pattern
   Stacks
                Task Parallel Library                                              Library         Library




                                           Data Structures

                                                             Data Structures
    Tasks



Concurrency                                                                                          Runtime
 Visualizer       CLR ThreadPool                                                            ConcRT
    CPU
                    Task Scheduler                                                       Task Scheduler
   Threads
                  Resource Manager                                                      Resource Manager
    Cores


Operating
                                          Windows
System
                 Key:   Tooling      Managed                                   Native
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
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);
   }
 }
Appel async (mais bloquant) 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 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)   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();
                                                                    }
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
Nouvelles méthodes de la classe Task
supportant Async

  Task.Run                 Task.Yield

  Task.Delay               Task.ConfigureAwait


  Task.WhenAll / WhenAny   Task.ContinueWith


  Task.FromResult
DEMO

Task WhenAll/WhenAny
Modèle de programmation
parallèle
Exemple de Pipeline
TPL Dataflow
Aperç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
TPL Dataflow
Exemple 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
DEMO

TPL Dataflow en Action
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
DEMO

Parallel Pattern Library
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
Syntaxe des Operateurs

  Choice:
 auto t = t1 || t2; // identique à when_any

  Join:
 auto t = t1 && t2; // identique à when_all
DEMO

Quelques nouveautés de la PPL
Résumé : Nouveautés VS 11

Tool                  Programming Models
s Parallel                          C#/VB/F#
                       PLINQ                         Dataflow
Debugger                             Async                                                               Async       Parallel
                                                                                                                                  C++
       Stacks                                                                                           Agents       Pattern
                                                                                                        Library      Library      AMP
        Tasks              Task Parallel Library




                                                                  Data Structures

                                                                                    Data Structures
       Watch

 CPU            GPU

                                                                                                                                Runtime
Concurrency                                                                                                     ConcRT
                               CLR ThreadPool
 Visualizer
                                Task Scheduler                                                             Task Scheduler
  CPU           GPU
                                                                                                                                 DirectX
   Threads                                                                                                      Resource
                               Resource Manager
        Cores                                                                                                   Manager

Operating System                                                 Windows
                        Key:     Tooling   Managed      Native        New                             Updated
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 d'un
         Studio Pro, avec l’abonnement MSDN     2012     Meeting   template METRO javascript

                                               20 mars    Live     Retour d'expérience LightSwitch, Optimisation de
          www.visualstudio.fr                   2012     Meeting   l'accès aux données, Intégration Silverlight

                                               23 mars    Live     OAuth - la clé de l'utilisation des réseaux sociaux dans
                                                2012     Meeting   votre application

Mais conteúdo relacionado

Destaque

Java dans Windows Azure Cloud Services, big data avec hd insight et les nouve...
Java dans Windows Azure Cloud Services, big data avec hd insight et les nouve...Java dans Windows Azure Cloud Services, big data avec hd insight et les nouve...
Java dans Windows Azure Cloud Services, big data avec hd insight et les nouve...Microsoft
 
Introduction au développement Windows Phone 8
Introduction au développement Windows Phone 8Introduction au développement Windows Phone 8
Introduction au développement Windows Phone 8Microsoft
 
Java sur Azure: OpenJDK mieux que vous n'avez jamais osé le demander ...
Java sur Azure: OpenJDK mieux que vous n'avez jamais osé le demander ...Java sur Azure: OpenJDK mieux que vous n'avez jamais osé le demander ...
Java sur Azure: OpenJDK mieux que vous n'avez jamais osé le demander ...Microsoft
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?내훈 정
 
Arte en Roma: arquitectura, escultura, pintura
Arte en Roma: arquitectura, escultura, pinturaArte en Roma: arquitectura, escultura, pintura
Arte en Roma: arquitectura, escultura, pinturasantisolera
 

Destaque (8)

Java dans Windows Azure Cloud Services, big data avec hd insight et les nouve...
Java dans Windows Azure Cloud Services, big data avec hd insight et les nouve...Java dans Windows Azure Cloud Services, big data avec hd insight et les nouve...
Java dans Windows Azure Cloud Services, big data avec hd insight et les nouve...
 
Introduction au développement Windows Phone 8
Introduction au développement Windows Phone 8Introduction au développement Windows Phone 8
Introduction au développement Windows Phone 8
 
Java sur Azure: OpenJDK mieux que vous n'avez jamais osé le demander ...
Java sur Azure: OpenJDK mieux que vous n'avez jamais osé le demander ...Java sur Azure: OpenJDK mieux que vous n'avez jamais osé le demander ...
Java sur Azure: OpenJDK mieux que vous n'avez jamais osé le demander ...
 
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
시즌 2: 멀티쓰레드 프로그래밍이 왜이리 힘드나요?
 
Arte en Roma: arquitectura, escultura, pintura
Arte en Roma: arquitectura, escultura, pinturaArte en Roma: arquitectura, escultura, pintura
Arte en Roma: arquitectura, escultura, pintura
 
ARQUITECTURA ROMANA
ARQUITECTURA ROMANAARQUITECTURA ROMANA
ARQUITECTURA ROMANA
 
La Pintura Romana
La Pintura RomanaLa Pintura Romana
La Pintura Romana
 
Pintura Romana
Pintura RomanaPintura Romana
Pintura Romana
 

Mais de Microsoft

Uwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuUwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuMicrosoft
 
La Blockchain pas à PaaS
La Blockchain pas à PaaSLa Blockchain pas à PaaS
La Blockchain pas à PaaSMicrosoft
 
Tester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileTester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileMicrosoft
 
Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo Microsoft
 
Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.Microsoft
 
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Microsoft
 
Créer un bot de A à Z
Créer un bot de A à ZCréer un bot de A à Z
Créer un bot de A à ZMicrosoft
 
Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Microsoft
 
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Microsoft
 
Administration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsAdministration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsMicrosoft
 
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...Microsoft
 
Plan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryPlan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryMicrosoft
 
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Microsoft
 
Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.Microsoft
 
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Microsoft
 
Introduction à ASP.NET Core
Introduction à ASP.NET CoreIntroduction à ASP.NET Core
Introduction à ASP.NET CoreMicrosoft
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Microsoft
 
Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...Microsoft
 
Azure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursAzure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursMicrosoft
 

Mais de Microsoft (20)

Uwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuUwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieu
 
La Blockchain pas à PaaS
La Blockchain pas à PaaSLa Blockchain pas à PaaS
La Blockchain pas à PaaS
 
Tester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobileTester, Monitorer et Déployer son application mobile
Tester, Monitorer et Déployer son application mobile
 
Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo Windows 10, un an après – Nouveautés & Démo
Windows 10, un an après – Nouveautés & Démo
 
Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.Prenez votre pied avec les bots et cognitive services.
Prenez votre pied avec les bots et cognitive services.
 
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
Office 365 Dev PnP & PowerShell : exploitez enfin le potentiel de votre écosy...
 
Créer un bot de A à Z
Créer un bot de A à ZCréer un bot de A à Z
Créer un bot de A à Z
 
Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?Microsoft Composition, pierre angulaire de vos applications ?
Microsoft Composition, pierre angulaire de vos applications ?
 
Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016Les nouveautés SQL Server 2016
Les nouveautés SQL Server 2016
 
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
Conteneurs Linux ou Windows : quelles approches pour des IT agiles ?
 
Administration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs AnalyticsAdministration et supervision depuis le Cloud avec Azure Logs Analytics
Administration et supervision depuis le Cloud avec Azure Logs Analytics
 
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
Retour d'expérience de projets Azure IoT "large scale" (MicroServices, portag...
 
Plan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site RecoveryPlan de Reprise d'Activité avec Azure Site Recovery
Plan de Reprise d'Activité avec Azure Site Recovery
 
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
Modélisation, déploiement et gestion des infrastructures Cloud : outils et bo...
 
Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.Transformation de la représentation : De la VR à la RA, aller & retour.
Transformation de la représentation : De la VR à la RA, aller & retour.
 
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
Quelles architectures pour vos applications Cloud, de la VM au conteneur : ça...
 
Introduction à ASP.NET Core
Introduction à ASP.NET CoreIntroduction à ASP.NET Core
Introduction à ASP.NET Core
 
Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?Open Source et Microsoft Azure, rêve ou réalité ?
Open Source et Microsoft Azure, rêve ou réalité ?
 
Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...Comment développer sur la console Xbox One avec une application Universal Win...
Comment développer sur la console Xbox One avec une application Universal Win...
 
Azure Service Fabric pour les développeurs
Azure Service Fabric pour les développeursAzure Service Fabric pour les développeurs
Azure Service Fabric pour les développeurs
 

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

  • 1. palais des congrès Paris 7, 8 et 9 février 2012
  • 2. Construire des applications parallèles avec Visual Studio 11 quoi 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. 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. Rappel : Visual Studio 2010 Tool Programming Models s Parallel Parallel LINQ Async Parallel Debugger Agents Pattern Stacks Task Parallel Library Library Library Data Structures Data Structures Tasks Concurrency Runtime Visualizer CLR ThreadPool ConcRT CPU Task Scheduler Task Scheduler Threads Resource Manager Resource Manager Cores Operating Windows System Key: Tooling Managed Native
  • 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
  • 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. Appel async (mais bloquant) 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 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. Code async avec .NET 4… 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. 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); } }
  • 12. 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); } }
  • 14. Nouvelles méthodes de la classe Task supportant Async Task.Run Task.Yield Task.Delay Task.ConfigureAwait Task.WhenAll / WhenAny Task.ContinueWith Task.FromResult
  • 17. TPL Dataflow Aperç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. TPL Dataflow Exemple 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
  • 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
  • 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. Syntaxe des Operateurs Choice: auto t = t1 || t2; // identique à when_any Join: auto t = t1 && t2; // identique à when_all
  • 25. Résumé : Nouveautés VS 11 Tool Programming Models s Parallel C#/VB/F# PLINQ Dataflow Debugger Async Async Parallel C++ Stacks Agents Pattern Library Library AMP Tasks Task Parallel Library Data Structures Data Structures Watch CPU GPU Runtime Concurrency ConcRT CLR ThreadPool Visualizer Task Scheduler Task Scheduler CPU GPU DirectX Threads Resource Resource Manager Cores Manager Operating System Windows Key: Tooling Managed Native New Updated
  • 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 d'un Studio Pro, avec l’abonnement MSDN 2012 Meeting template METRO javascript 20 mars Live Retour d'expérience LightSwitch, Optimisation de www.visualstudio.fr 2012 Meeting l'accès aux données, Intégration Silverlight 23 mars Live OAuth - la clé de l'utilisation des réseaux sociaux dans 2012 Meeting votre application