Offre Parallèle .NET 4.5 - Part 1
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 :
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).
Les résultats sont incroyablement plus performants.
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
A bientôt
Bruno
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