• [^] # Re: First touch

    Posté par . En réponse au message Allocation de mémoire NUMA dans un code parallèle (threads). Évalué à 2.

    (il me semble qu'on imagine aisément qu'openMP fait N filaments pour traiter un segment, alors qu'en réalité il en fait au maximum N simultanément et qu'en permanence des filaments naissent vivent et meurent dans l'indifférence générale ;-)

    Non. D’ailleurs dans le code que j’utilise, les filaments [0] sont créés une fois et synchronisés (le plus rarement possible) à coup de « barrier ». C’est à peu près ce que fait automatiquement le compilateur avec l’ordonnanceur « static », mais :

    • le code est plus simple : moins encombré de directives OpenMP;
    • plus facile à comprendre : synchronisation explicite là où elle est nécessaire, plutôt que de se poser toujours la question de l’usage ou non de la règle « nowait »;
    • et plus souple : on peut décider de faire un partage déséquilibré du calcul entre filaments si l’on sait à l’avance que certains traitement seront plus longs que d’autres, sans pour autant compliquer le code avec un ordonnancement dynamique.

    [0] Je ne connaissais pas cette traduction, elle me plaît bien, j’espère qu’elle est assez utilisée pour pouvoir l’adopter définitivement en restant compréhensible.

    Au final, le résultat obtenu ressemble assez à une parallélisation MPI (avec le double avantage de la mémoire partagée et que le code peut toujours se compiler en séquentiel pour déboguer), c’est pourquoi la découpe des tableaux n’aurait pas été si difficile. Suivant vos conseils, je vais quand même me l’épargner si elle n’apporte rien.