Freigeben über


Offre Parallèle .NET 4.5 - Part 1

image 

    Avec le Framework .NET 4.0 et Visual Studio 2010, Microsoft a introduit de nombreuses nouveautés pour supporter le parallélisme. Vous utilisez peut-être les librairies TPL et PLINQ dans vos propres traitements. Pour supporter ces nouveautés, le Thread Pool 4.0 a été modifié en conséquence (Architecture type « Work Stealing »). Du côté de Visual Studio 2010, de nouvelles fenêtres pour observer, optimiser vos programmes parallèles ont été ajoutées.

 

Avec la préversion de Visual Studio 11, l’offre parallèle .NET s’est encore étoffée. Cependant, la plus grosse nouveauté se trouve du côté des performances. En effet, les équipes de Redmond ont énormément travaillé pour offrir des performances époustouflantes à vos applications.

 

Exécutons le code ci-dessous avec Visual Studio 2010:

using System;

using System.Diagnostics;

using System.Threading.Tasks;

 

namespace ConsoleApplication15

{

    class Program

    {

        static void Main()

        {

            var sw = new Stopwatch();

 

            while (true)

            {

                GC.Collect();

                GC.WaitForPendingFinalizers();

                GC.Collect();

 

                var tcs = new TaskCompletionSource<object>();

                var t = tcs.Task;

 

                sw.Restart();

 

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

                    t = t.ContinueWith(_ => (object)null);

 

                var elapsed = sw.Elapsed;

                GC.KeepAlive(tcs);

                Console.WriteLine(elapsed);

            }

        }

    }

}

 

En compilant ce code en mode Release sur mon portable quadcœur, j’obtiens les résultats suivants :

image

 

En lançant l’exécutable sur la même machine, mais sur une autre partition Windows 7 avec la préversion Visual Studio 11 installée (donc avec le Framework 4.5). 

image

 

Les résultats sont incroyablement plus performants.

image

 

Naturellement, l’exemple est très simple et ne ressemble sans doute pas à la complexité d’une application professionnelle. Cependant, ce petit exemple révèle d’énormes progrès du côté des performances avec le Framework .NET 4.5, ce qui devrait vous faire plaisir Smile

 

A bientôt

 

Bruno

boucard.bruno@free.fr

Comments

  • Anonymous
    November 21, 2011
    Ça montre que le coût de l'infrastructure multi thread/tâche/etc. est bien inférieur entre 4.0 et 4.5 (ici la boucle ne fait rien), mais vu que dans la vrai vie, ce coût est en général négligeable par rapport au coût utile (le travail réel) que l'on souhaite paralléliser, quel est l’intérêt de ce genre d'optimisation?

  • Anonymous
    November 23, 2011
    Bonjour Simon L’objectif de ce billet était de montrer combien le Framework 4.5 a été optimisé pour offrir de meilleures performances à l'offre parallèle .NET. Dans un prochain billet, je donnerai plus de détails sur ce sujet. Sans vouloir effleurer trop le sujet, j’aimerai ajouter que l’équipe du ThreadPool  a encore une fois réalisé un « miracle ». C’est donc une excellente nouvelle pour les utilisateurs de TPL et PLINQ qui vont obtenir de meilleures performances sans même recompiler leurs applications. Bruno