none
Application(exe) C++ mono thread dans Processeur Multi-coeurs RRS feed

  • Question

  • J'ai une application(exe) développer avec C++ monothread qui tourne en batch de nuit.
    On a un client qui a un serveur Windows 2008R2 avec un processeur à 8 coeurs et 16 Gbit de RAM.
    Or notre application n'utilise qu'un seul coeur du processeur, donc l'application n'exploite pas toute la puissance de la machine.
    Est il possible de trouver un moyen ou un configuration ou encore un parametrage pour que l'application utilise plus d'un coeur du processeur
    Est ce que un processeur mono coeur mais plus rapide pourrait garantir un gain de performance?
    Merci par avance pour votre aide.

    Cordialement

    vendredi 14 mars 2014 16:15

Réponses

  • Il faut paralléliser le traitement.

    Pour cela, il est nécéssaire de faire des modifications dans votre application.

    Si votre algorithme est déjà parallélisable, et si vous avez une architecture simple et "propre", cette parallélisation peu se faire avec très peu de modifications.

    Pour ne pas avoir de modification dans l'application, il faut que votre application ait été pensée avec la possibilité de spécifier des périmètres fonctionnels disjoints. Il aurait suffit alors de lancer plusieurs fois l'exécutable en passant en paramètre un ensemble fonctionnel différent.

    Les outils de programmations parallèles sont de plus en plus répandus, il est donc assez facile d'en prendre un pour parallèliser assez facilement les traitements.

    >Est ce que un processeur mono coeur mais plus rapide pourrait garantir un gain de performance?

    Aucune garantie, c'est fonction d'un nombre énorme de paramètre et c'est très aléatoire.


    Paul Bacelar, Ex - MVP VC++

    • Proposé comme réponse Aurel Bera lundi 17 mars 2014 07:58
    • Marqué comme réponse Aurel Bera lundi 24 mars 2014 08:14
    vendredi 14 mars 2014 18:22
    Modérateur

Toutes les réponses

  • Il faut paralléliser le traitement.

    Pour cela, il est nécéssaire de faire des modifications dans votre application.

    Si votre algorithme est déjà parallélisable, et si vous avez une architecture simple et "propre", cette parallélisation peu se faire avec très peu de modifications.

    Pour ne pas avoir de modification dans l'application, il faut que votre application ait été pensée avec la possibilité de spécifier des périmètres fonctionnels disjoints. Il aurait suffit alors de lancer plusieurs fois l'exécutable en passant en paramètre un ensemble fonctionnel différent.

    Les outils de programmations parallèles sont de plus en plus répandus, il est donc assez facile d'en prendre un pour parallèliser assez facilement les traitements.

    >Est ce que un processeur mono coeur mais plus rapide pourrait garantir un gain de performance?

    Aucune garantie, c'est fonction d'un nombre énorme de paramètre et c'est très aléatoire.


    Paul Bacelar, Ex - MVP VC++

    • Proposé comme réponse Aurel Bera lundi 17 mars 2014 07:58
    • Marqué comme réponse Aurel Bera lundi 24 mars 2014 08:14
    vendredi 14 mars 2014 18:22
    Modérateur
  • Bonjour,

    L'application date des années 90, est en vérité c'est 98% C et 2% C++. c'est juste un upgrade de C vers C/C++

    mais le code source est resté le même, dans l'application est difficilement parallélisable.

    Je pensais aux méthodes virtualisation d'OS, n y a il pas des outils de des paramétrages qui permettent à une machine virtuelle d'exploiter la pleine puissance de la machine physique?


    Cordialement

    lundi 17 mars 2014 08:46
  • Si, mais il faut que le traitement soit parrallélisable.

    Qu'il soit en C ou en C++, qu'il date des années 70 ou d'il y a moins de 2 semaines, cela ne change en rien la difficulté de parrallélisation.

    Si l'algorithme est parrallélisable, vous aurez une victoire facile, mais il faut quand même analyser l'algorithme. Que cela vous embête de regardez un code datant de 20 ans ni change rien.

    Dans les années 90, les threads et les fibres et les bibliothèques de calcul parrallèle comme MPI existaient déjà. S'ils s'en sont servi vous n'avez qu'a changer le paramétrage pour mieux profiter des architectures actuelles.


    Paul Bacelar, Ex - MVP VC++

    lundi 17 mars 2014 13:11
    Modérateur
  • Oui, je pense que les traitements sont parallélisable. il s'agit d'une suite de traitements séquentiels avec E/S sur des fichiers binaires et des calculs.

    Vous avez cité plus haut outils de programmations parallèles, pouvez-vous me donner un exemple? ou alors il faut développer la couche (en .Net par exemple).


    Cordialement

    lundi 17 mars 2014 17:25
  • traitements séquentiels

    Un traitement séquentiel, c'est le contraire de parallélisable.

    Si vous avez plusieurs fichiers en entrée, il suffit de lancer plusieurs fois votre programme avec chacun un sous ensemble de ces fichiers. C'est une parrallélisation avec 0 modifs ;-). Le seul tuning est de faire en sorte que le traitement de chacun des sous ensembles ait un temps de traitement comparable.

    Il faut déterminer le type de parallélisme vous devez appliquer pour choisir les outils adéquates, si nécessaire.


    Paul Bacelar, Ex - MVP VC++

    lundi 17 mars 2014 17:36
    Modérateur
  • Bien sur, un traitement séquentiel n'est pas parallélisable.

    C'est plutôt la suite des traitements qui est parallélisable. le programme exécute une suite de traitements dans un ordre bien précis.

    Les fichiers en question est une base de données propriétaire

    exemple:

    1- lacer traitement 1 (MAJ de la base) (traitement plus rapide)

    2- lancer traitement 2 (calculs) & traitement 1 à 30%


    Cordialement

    vendredi 21 mars 2014 13:43
  • Sans détail sur les dépendances des données en entré et en sortie de chaque traitement, il est assez difficile de dire s'il existe des traitements parallélisables ou pas.

    Si vous pouvez découper les données en parties indépendantes, vous n'avez qu'à paramétrer votre exe de traitement pour lui spécifié une partie.

    Ainsi vous pourrez lancer votre exe plusieurs fois en même temps, un par partie indépendantes, et ainsi optimiser votre utilisation CPU.


    Paul Bacelar, Ex - MVP VC++

    vendredi 21 mars 2014 16:46
    Modérateur