multi-coe“urs?

tabliertablier Membre
16:34 modifié dans Actualités #1
Question (probablement) naà¯ve sur ce sujet!  ???
Les processeurs multi-coe“urs sont-ils des multi-processeurs? Le bénéfice obtenu est-il réellement proportionnel au nombre de coe“urs?
Il y quelques années nous utilisions Flux3D sur des machines Sun. Les collègues ont essayé de parallèliser les simulations et de passer sur le Crey à  je ne sais combien de processeurs du centre de calcul. Le gain en temps sur une simulation n'était que de 30%!!
Alors, je m'interroge sur les multi-coe“urs et les tâches non parallèlisables!

Réponses

  • schlumschlum Membre
    16:34 modifié #2
    dans 1257371036:

    Question (probablement) naà¯ve sur ce sujet!  ???
    Les processeurs multi-coe“urs sont-ils des multi-processeurs? Le bénéfice obtenu est-il réellement proportionnel au nombre de coe“urs?
    Il y quelques années nous utilisions Flux3D sur des machines Sun. Les collègues ont essayé de parallèliser les simulations et de passer sur le Crey à  je ne sais combien de processeurs du centre de calcul. Le gain en temps sur une simulation n'était que de 30%!!
    Alors, je m'interroge sur les multi-coe“urs et les tâches non parallèlisables!


    Non, ce n'est pas exactement pareil ; il me semble qu'il y a des trucs partagés (bus et co.)
  • NseaProtectorNseaProtector Membre
    16:34 modifié #3
    C'est une bonne question. Je crois que seul l'expérimentation peut apporter un semblant de réponse.
  • AliGatorAliGator Membre, Modérateur
    16:34 modifié #4
    Multiplier par deux le nombre de processeurs n'a jamais fait aller les choses deux fois plus vite. Multiplier le nombre de coeurs non plus.
    Ca permet juste de paralléliser les traitements qui sont parallélisables. Mais pour ça faut que les tâches à  exécuter soit parallélisables de façon un minimum autonômes, et il faut aussi tenir compte du fait qu'utiliser plusieurs coeurs pour une même tâche nécessite d'avoir un échange ou partage de données entre ces deux coeurs.
    - Qui dit échange de données d'un coeur ou processeur à  l'autre dit temps de transfert entre les deux coeurs via des bus de communications ;
    - Qui dit partage de données dit nécessité de protections (pour éviter d'écrire pendant que l'autre lit par exemple) avec des Mutex, donc ralentissements et blocages potentiels d'un coeur pendant que l'autre accède à  une donnée.
    - Qui dit une tâche sur plusieurs coeurs dit un scheduleur qui a plus de boulot pour orchestrer tout cela


    Bien sûr par exemple s'il s'agit de multiplier par deux tous les éléments d'un tableau, on peut filer la moitié du tableau à  un processeur ou un coeur et l'autre moitié du tableau à  l'autre. Y'a besoin d'un pré-traitement pour transférer la moitié des données du tableau à  l'autre coeur ou processeur le temps du traitement (temps de transfert des données), mais une fois que c'est fait les deux coeurs peuvent faire la multiplication de leur partie du tableau chacun en même temps et en parallèle sans déranger l'autre. Et après rapatrier les deux moitiés du tableau dans un unique tableau. Au final, on n'aura pas divisé le temps de traitement par deux, mais pas loin.

    Par contre s'il s'agit d'ajouter à  chaque case du tableau la valeur de la case précédente, là  ça ne devient plus parallélisable, puisque pour calculer la case n+1 il faut déjà  avoir calculé la case n, qui nécessite d'avoir calculé avant la case n-1, qui nécessite d'avoir calculé la case n-2, ... Du coup on ne peut pas paralléliser. Bon par contre on peut externaliser ce traitement dans un processeur séparé, pour que pendant qu'il s'effectue on puisse continuer à  faire autre chose et que ça ne nous bloque pas, mais le traitement, lui, ne se fera pas deux fois plus rapidement du tout.

    De même, quand on a deux applications ou process ou daemon en tâche de fond, s'ils sont sur le même processeur, le scheduler va donner un peu de temps à  l'un, puis un peu de temps à  l'autre (c'est ce que l'on voit quand on lance le moniteur d'activité pour voir l'activité de toutes les applications, on voit le pourcentage de temps qui est alloué pour chaque application). C'est son boulot, en fonction de la charge de chaque application et de la priorité de chacune, d'allouer plus ou moins de temps processeur à  chaque process. Si c'est deux applications tournent sur des processeurs différents, chaque processeur ayant sa vie indépendante de l'autre, le premier process ne va pas être interrompu le temps de laisser tourner un peu le second process, ils vont pouvoir tourner en parallèle. Donc chaque process sera moins souvent interrompu et pourra terminer ses traitements plus vite, mais pas forcément deux fois plus vite pour autant (selon les accès disques, accès à  la mémoire partagée, etc)



    Bref c'est loin d'être aussi simple, et doubler le nombre de processeur ne double pas la vitesse d'un ordi tout comme avoir un processeur avec une fréquence double ne veut pas forcément dire que les process iront deux fois plus vite (ça dépend de l'architecture du ou des processeurs, des divers niveaux de caches disponibles, de la vitesse des bus, ...)

    Quant à  la différence entre processeurs et coeurs, il me semble en effet que des processeurs différents sont sur des puces différentes, et communiquent via des bus de données, alors qu'un processeur multicoeurs c'est un processeur composé de multiples unités de calcul interconnectées entre elles mais partageant la même cache et même peut-être bien les mêmes registres... bref ils ont tous les mêmes choses à  portée de main sans avoir à  transiter par un bus de données pour communiquer entre eux, tellement les éléments sont proches et étant sur la même puce.
  • tabliertablier Membre
    16:34 modifié #5
    Rien d'évident donc!
    L'explication permet de ce faire une idée des différences entre multi-coe“urs et multi-processeurs et l'on voit bien apparaà®tre le problème de la parallélisation des tâches.
  • DrakenDraken Membre
    16:34 modifié #6
    Alala, on n'est pas aidé par la technique !

    Oui, je => []




Connectez-vous ou Inscrivez-vous pour répondre.