Efficacite d'un algorithme parallele

Salut.

Je viens de realiser trois algorithmes de tri parallele en langage C.
Pour mon rapport de stage, j'ai besoin de mesurer l'efficacite en temps de chacun des trois programmes.

Comme ces algorithmes contiennent des parties non-paralleles qui ne concernent pas l'activite de tri proprement dite (ex: lecture des donnees de l'entree standard puis impression des donnees sur l'ecran apres le tri), je me demande si je dois mesurer le temps d'execution total de mon programme et le comparer avec la version monoprocesseur ou bien comparer uniquement la partie tri, qui s'effectue en parallele.

Comme je travaille sur un nombre reduit de processeurs (4), le temps pris par la lecture et l'impression des donnees reduit serieusement la performance de mon application.

D'apres des mesures preliminaires, il semble que pour le tri, j'obtiens de tres bons resultats (reduction de ~70% du temps avec 4 processeurs).
Est-ce suffisant pour affirmer que mon algorithme est performant, meme si les activites subsidiaires reduisent seulement jusqu'a 50 % le temps initial ?

Merci de votre aide,
Marc.

Réponses

  • L'"amélioration de l'efficacité" est celle qui est perçue par l'utilisateur final du programme. Pour comparer les différents programmes, il faut convenir, avec l'utilisateur final, d'un jeu de tests représentatifs de l'exploitation du programme, exécuter les différents programmes concurrents dans les mêmes conditions (même machine, même charge, même nombre de processeurs) sur ce jeu de tests. Ensuite, le comportement des programmes (sur le jeu de tests) est analysé et leurs caractéristiques internes sont révélées (pourquoi tel programme est-il plus efficace que tel autre dans telle circonstance, pourquoi les gains mesurés ne sont pas les gains attendus, etc.).

    La difficulté de cette démarche consiste à bien identifier qui est l'utilisateur final et à convenir du jeu de tests représentatifs qui fonde la mesure de performance.
  • C'est tout à fait vrai et, de plus très bien exprimé.
    Ceci particulièrement lorsqu'on tavaille sur des applications commerciales ou industrielles.
    Néanmoins, un petit bémol : si c'est dans le cadre d'études de principe sur les algorithmes, le but est plus théorique. On ne cherche alors qu'à comparer des algorithmes ou des parties d'algorithmes répondant à une mème fonctionnalité. Ils peuvent être dans des environnements non optimisés car sans intérêt pour l'étude proprement dire. Dans ce contexte, c'est le temps de calcul intrinsèque de la partie "noble" de l'algorithme qui faudrait pouvoir évaluer et non le temps total, pour que les résultas des comparaisons puissent être mis sous forme de ratios significatifs.
  • bonjour,


    c'est quoi exactement un algorithme ?


    merci


    nicolas
  • D'après le dictionnaire encyclopédique Hachette :

    Début de citation :
    Décrit comme une méthode, un algorithme constitue un ensemble d’instructions qui permettent à une personne agissant mécaniquement ou à une machine d’obtenir, à partir de données et en un nombre fini d’étapes, la solution d’un problème. Les règles sont définies par des opérations élémentaires susceptibles d’être exécutées par un automate, système pouvant occuper un certain nombre d’états en fonction des informations qu’il reçoit. L’automate est caractérisé par la classe d’objets sur lesquels il sait réaliser une action et par les actions élémentaires, appelées primitives, qu’il sait réaliser sur ces objets. Un algorithme est alors la description statique de l’enchaînement dynamique d’un ensemble structuré d’actions primitives. On nomme processeur toute entité (esprit humain ou ordinateur) capable d’identifier des énoncés et de reconnaître la conformité des opérations qu’elle effectue aux instructions qu’elle suit; spécification, les deux états du système avant et après l’exécution de l’algorithme; instruction, la spécification d’une action. L’exécution des instructions transforme l’état du système (ou d’une partie de celui-ci), état représenté par la valeur collective des objets (les variables) que manipule le processeur. L’action la plus élémentaire est l’affectation d’une valeur à une variable. L’exécution d’un algorithme provoque donc une suite d’actions, spécifiées par une instruction et exécutées l’une après l’autre. Cette stricte séquentialité est déterminée par des structures de commande. Les états successifs d’un système donné peuvent être exprimés sous forme de formules logiques, appelées assertions, liant les valeurs des variables. Un couple d’assertions décrit la situation initiale supposée (précondition) et la situation terminale assurée par l’action (postcondition). Les deux principales structures de commande sont les suivantes: l’itération, la plus fréquente, donne l’ordre de répéter une action tant que telle condition est satisfaite; on aura donc la boucle tant que...; la sélection consiste à prendre une décision au cours de l’exécution; on aura les boucles si..., alors..., sinon...

    Fin de citation.
  • merci


    nicolas
  • Bonjours à tous

    Marc peux tu m'envoyer tes codes sources dans ma boite email ci dessous, j'ai mis des jours pour paralleliser un algorithme de tri mais sans succes.
    charrynsasi@yahoo.fr
    Merci
  • Pour info, Marc a écrit ça il y a 8ans, ne t'attends pas forcément à ce qu'il voit ton post.
    Aide les autres comme toi-même car ils sont toi, ils sont vraiment toi
Connectez-vous ou Inscrivez-vous pour répondre.