IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Delphi Discussion :

Multithreading et multicoeur


Sujet :

Contribuez Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut Multithreading et multicoeur
    Bonjour,

    Suite à un article de Eric Grange (bien connu pour GLScene) sur les performances de Delphi face à Javascript, j'ai rédigé un article montrant une application pratique du multithreading dans le calcul d'un ensemble de Mandelbrot.



    Multithreading : à quoi ça sert d'avoir plusieurs coeurs ?

    L'article propose notamment le source d'une classe TParalellizer qui facilite la mise en oeuvre du multithreading.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  2. #2
    Membre émérite
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Août 2006
    Messages
    992
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Août 2006
    Messages : 992
    Par défaut
    Ah vraiment très bien, et intéressant.

    Merci.

  3. #3
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Alors, juste une précision (que j'ai ajouté en fin d'article)

    Suite à la publication de ce billet, j'ai contacté Eric (je trouve ça normal vu que je parle de sa page), et en fait il me dit que Javascript n'est pas multithreadé ... et à la vu de l'activité de ma CPU je pense qu'il a en effet raison...ceci dit la démo reste intéressante.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  4. #4
    Membre très actif
    Homme Profil pro
    Santé
    Inscrit en
    Septembre 2010
    Messages
    290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Santé
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 290
    Par défaut
    Enfin !
    Un article pour exploiter intelligemment les architectures multicoeurs.
    Merci !


    Un truc un peu décevant quand même, c'est que les performances ne sont pas directement proportionnelles au nombre de Threads:
    - on gagne beaucoup en passant de 1 à 2 Threads
    - en revanche, passer de 3 à 4 Threads n'apporte pas grand'chose.

    Peut-être un goulet d'étranglement dû à la carte graphique ? [c'est une question.]

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 093
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 093
    Par défaut
    Joli article !
    J'ignorais que le JS était pré-compilé !
    Ils sont fort les développeurs de script quand même pour optimiser à ce point un code (et cela sans multi-thread)
    Delphi
    Si j'ai le courage, faudrait que je convertisse le code en C++Builder XE3 ! Par Curiosité

    Sympa, ton exemple et la démarche aboutissant au TParalellizer

    Ce qui est intéressant aussi c'est l'échange sur DelphiTools !
    Mon anglais n'est pas terrible mais bcp certains se sont focalisés sur le Bitmap et merci de l'avoir remarqué pour nous, le fait que cela concerne purement le calcul

    J'ai souri lorsqu'un dénommé Victor a fait remarquer qu'en Delphi, ScanLine(), un ‘special trick’, serait moins "connu" que l'équivalent getImageData() du JavaScript alors que j'ai l'impression que ScanLine() revient souvent sur le forum

    Et que dirait Victor de SetDIBitsToDevice ? surtout que ce n'est plus de la VCL mais directement une API !


    Entre la version JS et la version Delphi de Eric Grange, c'est 2x à 3x plus lent sur mon i5-3750 (3.40HGz) !

    Au moins Delphi n'est pas le dernier, reste IE9, j'espère pour MS qu'il n'est pas codé en C#

    EDIT :

    Citation Envoyé par Caribensila Voir le message
    Peut-être un goulet d'étranglement dû à la carte graphique ? [c'est une question.]
    Si tu évoques le code de Paul Toth et son TParalellizer, l'unité Mandelbrot utilise un gros tableau de cardinal en mémoire, juste de la manipulation de "nombre" qui transforme une coordonnée en une couleur
    Paul Toth a justement isolé le plus que possible sont calculs d'éléments parasites comme le dessin !

    le temps mesuré n'inclu pas l'affichage via SetDIBitsToDevice + TImage

    Mais c'est vrai que le gain entre 3 et 4 est assez mininime, peut-être lié à la répartition des taches propres à windows et au fonctionnement de Interlock... dont l'utilisation est très intéressante et change de celle du TInterfacedObject

    Pour Info sur i5-3750 (3.40HGz)
    1 - 150 à 167 ms
    2 - . 84 à . 97 ms
    3 - . 59 à . 70 ms
    4 - . 39 à . 63 ms
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Eric a fait d'autres tests de performance ici.

    Pour l'étranglement, je pense pas qu'on puisse faire mieux...sauf peut-être à répartir d'office les tâches, avec autant de pixels pour chaque tâche en évitant du coup l'interlock....
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  7. #7
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Mise à jour de l'article avec des tests comparatifs Delphi 6, XE2 32 et 64 bits,

    en fait ça dépote sous XE2 64bits
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Par défaut
    N'y aurait il pas une erreur dans les mesures à la fin?
    Delphi 6 32 bits, 1 thread 190ms
    Delphi XE2 32 bits, 1 thread 190ms

    alors qu'en début d'article il y a ces mesures :
    1 seul thread : 450ms
    2 threads: 250 ms
    3 threads: 190 ms
    4 threads: 180 ms

  9. #9
    Expert éminent
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Par défaut
    Citation Envoyé par tenpigs Voir le message
    N'y aurait il pas une erreur dans les mesures à la fin?
    Delphi 6 32 bits, 1 thread 190ms
    Delphi XE2 32 bits, 1 thread 190ms

    alors qu'en début d'article il y a ces mesures :
    1 seul thread : 450ms
    2 threads: 250 ms
    3 threads: 190 ms
    4 threads: 180 ms
    non, ce n'est pas la même image

    en début d'article j'utilise un zoom sur une partie plus complexe afin d'avoir des temps plus parlants, sur la fin c'est l'image de base qui prend moins de temps à calculer.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

Discussions similaires

  1. Tomcat Multithreading et serveur multicoeurs
    Par root76 dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 18/03/2014, 16h49
  2. [WinAPI C++] MultiThreading et PostMessage
    Par Gruik dans le forum Windows
    Réponses: 7
    Dernier message: 29/03/2004, 15h58
  3. [WinAPI C++] MultiThreading?
    Par Gruik dans le forum Windows
    Réponses: 2
    Dernier message: 25/03/2004, 00h08
  4. [Win32]App multithread
    Par billyboy dans le forum Windows
    Réponses: 5
    Dernier message: 25/09/2003, 09h57
  5. Multithreading sous HP Ux 11
    Par pykoon dans le forum Autres éditeurs
    Réponses: 1
    Dernier message: 18/10/2002, 23h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo