Another .NET Blog

To content | To menu | To search

Tuesday 24 June 2008

Programmation parallèle

Je suis tombé hier soir (pas de mal, merci) sur cette page, qui fait office de présentation des extensions parallèles pour .NET.

Je ne m'étais jusqu'à maintenant jamais vraiment intéressé à ce pan de la programmation, et cette lecture m'a permis de me rendre compte à quel point la programmation parallèle va revêtir une importance de plus en plus cruciale avec l'avènement des processeurs multi-coeurs, et qui n'est pas prêt de s'arrêter.

Je n'en suis qu'au début de mes lectures sur ce sujet, mais je suis déjà impressionné par la facilité avec laquelle il est déjà possible d'intégrer ça dans nos programmes.

De manière très simplifiée, il suffit par exemple de changer ça:

for (int i = 0; i < MAX; i++)
{
//Traitement
}

en

Parallel.For(0, MAX, (int i)=>
{
//Traitement
});

pour que votre boucle soit parallélisée sur tous vos processeurs!

A cela s'ajoutent également de nouvelles collections génériques prenant en charge le traitement multi-processeurs (list, queue, stack...), la fonction Parallel.Invoke qui permet de réaliser des tâches asynchrones, la synchronisation de tâches via les classes Task et Future, et enfin la possibilité d'utiliser les extensions parallèles avec LINQ. Vous l'aurez compris, beaucoup de choses!

En ce qui concerne les liens, il y a déjà l'introduction dont j'ai parlé plus haut, ensuite il y a le blog de la team qui développe ces extensions, la page de download, et une page MSDN.

N'oubliez pas d'aller jeter un oeil dans le répertoire d'installation des extensions, et surtout dans le dossier Samples, avec des exemples très intéressants (dont un RayTracer en LINQ dont vous me direz des nouvelles ;) )

Have fun !

Monday 2 June 2008

Project Euler #1

Si vous ne connaissez pas, le [Projet Euler] consiste en une série de problèmes mathématiques à résoudre par programmation. Vous résolvez le problème, vous entrez la solution, et si c'est bon, vous avez accès à un forum où vous pouvez lire les solutions et/ou commentaires trouvées par d'autres personnes, grâce à d'autres (ou pas) langages de programmation. A mon sens, c'est donc intéressant pour 2 points de vue:

  • Se creuser la tête sur des problématiques "simples" (j'en suis au début pour l'instant), mais pouvant déboucher sur des solutions poussées
  • Comparer sa solution avec ce que les autres ont trouvé, ce qui ne peut-être que bénéfique

Pour ma part, je vais essayer à chaque fois de trouver la solution à chaque problème de 2 manières:

  • Une approche brute de fonderie en utilisant les "bases" du C#
  • une approche fondée sur l'utilisation de LINQ

Ca permettra ainsi de comparer (là encore) les solutions et de constater que même si LINQ est un très bel outil de requête sur des données, il a malheureusement un coût important qui se manifeste par une plus longue exécution pour trouver le même résultat.

Mais sans plus attendre, voici mes solutions pour le premier problème...

Continue reading...

Thursday 15 May 2008

Serialisation XML et LINQ To XML

Dans un précédent billet j'expliquais comment sérialiser facilement et à moindre frais en XML avec le framework .NET.

Voici maintenant la même chose, mais en utilisant les objets de LINQ To XML, notamment XElement.

Continue reading...