samedi 30 mai 2009

Programmation parallèle

Bonjour tous,

J'ai réalisé quelques tests avec les APIs suivantes :
- OPEN MP avec Visual C++ 2008
- Parallel FX(tm) avec la CLR 3.5 et les "parallel extensions"
- CUDA de NVidia(tm)

Le test en question est une multiplication de matrices.

Premier Test :
La machine est un portable DELL XPS 1730, 4 Gigas de RAM, Proc : X9000, 2 coeurs : Core DUO Intel(tm)
La carte graphique est une 8800GTX (SLI x2),
Multiplication de deux matrices 800x800
CUDA contre C# :
C# single thread : 4837 ms
C# avec Parallel FX (2 threads) : 2770 ms
CUDA (langage C), 1024 threads : 44 ms


Second Test :
La machine employée pour les tests est un DLL Studio XPS 435 avec un processeur I7, 8 coeurs : 4 coeurs physiques + 2 hyperthreads par coeur. Windows Vista 64 bits. 6Go de RAM.
Multications de deux matrices 3000x3000
C# contre OPEN MP :
Code C# mono thread : 109 502 ms
Code C# 8 threads : 21 252 ms
C++ mono thread : 69 857 ms
OPEN MP 8 threads : 17 051 ms

Voilà )

Il est à noter que j'ai fait d'autres tests (multiplication de matrices toujours)avec Java (jdk 1.6) contre C# (3.5). En gros il existe une grosse différence entre le code java et dot net (sur 8 threads) :
C# bat java, si java est exécuté avec l'option "java -client"
Java écrase C# si java est exécuté avec l'option "java -server" (2,7ms contre 6,7ms).

Les outils de monitoring utilisé étaient : process explorer (de sysinternals) et Perfmon (performance monitor) de Windows.

Si certains veulent l'étude complète en PDF prière de m'envoyer un mail.

Sur ce bonne journée à tous.

Bertrand.

Aucun commentaire:

Enregistrer un commentaire