Léa-Linux & amis :   LinuxFR   GCU-Squad   GNU
tirer parti processeur multi core
Envoyé par: raggadoll

Bonjour à la communauté libre !

Voilà nouveau venu dans ce forum, j'ai une question qui m'est importante :

Je travail dans un labo de recherches qui effectue pas mal de calculs scientifiques. Donc je me demande comment tirer à profit des PC dont le processeur est multi core (core 2 quad par exemple).


s'agissant de programmes fortran compilés qui effectuent les calculs,je pense que c'est le choix du compilateur qui est le plus important (en effet le compilateur doit tirer parti du la spécificité du processeur) mais

_ Est ce que le choix de la distribution influence la rapidité de calculs ?

_ Existe t il une distribution qui leur est plus adaptée ? Par exemple ubuntu est pas mal pour recompiler les programmes (pas ceux en fortran) en toute simplicité.

_ Ou alors faut il recompiler le noyau avec les bonnes options (lequels ?), en vaut il la peine (attention aux trolls).


Merci pour vos réponses !

Poste le Wednesday 7 November 2007 18:12:11
Répondre     Citer    
Re: tirer parti processeur multi core
Envoyé par: alpha_one_x86

Le noyau doit étre smp, pour la prise en charge des multicpu, (voir uname -a). Pour que le programme marche sur les 4 coeur du cpu il faut que le programme soit conçu pour (il faut qu'il soit theader). Le compilateur n'as que peu d'influance sur l'utilisation en multicoeur, par contre l'exploitation des processeurs sera optimisé avec les options du compilateurs qui feron que ton programme au mieux ton cpu (pour étré précis les spécificité de ton cpu soit les instructions, 64bits, sse3, ...) utilise une distribution 64bits.

Mon projet Qt/KDE de copieur de fichiers multi-plateformes, multi-protocoles, intégration par défaut dans un maximum d'OS:
[ultracopier.first-world.info]

Poste le Wednesday 7 November 2007 19:06:49
Répondre     Citer    
Re: tirer parti processeur multi core

En fait il faut prévoir explicitement le parallèlisme dans le code de calcul, on peut utiliser MPI, PVM, OpenMP (supporté par les versions récentes de gcc et autres.

Sinon, on peut lancer quelques calculs indépendants en parallèle. Les outils de gestion de batch (au minimum la commande batch, et aussi des choses plus puissantes NQS?) peuvent aider.

A priori (sauf sur un serveur de calcul haut de gamme) les options de compilation du noyau importent peu.

Pour avoir longtemps fait du conseil (en interne au CEA) sur ces questions, j'ai quelques conseils (politiquement incorrects) qui sont utiles surtout aux jeunes numériciens (moins de 45 ans):

* s'investir dans l'apprentissage du génie logiciel est à terme un gain de temps

* coder en autre chose que Fortran (même 95) est utile, voire indispensable. Et savoir changer de langage de programmation dans sa carrière aussi!

* apprendre un peu de programmation système ou parallèle (MPI, Pthread, Posix, ...) est un plus

* il peut être utile, pour la plupart des codes de calcul, de les architecturer avec un langage de haut niveau, parfois interprété (comme Ocaml, Python, Ruby, Octave, Scilab) qui pilote quelques routines de bas niveau -solveurs, calculs matriciels- qui font la plupart des calculs (et consomment 95% de la CPU).

* ne pas oublier les aspects mathématiques, numériques, et la précision des calculs.

* ne pas oublier qu'un code de calcul devient nécessairement gros (voire monstrueux) avec l'âge: s'investir dans l'architecture du logiciel est gagnant à terme.

* bien connaître les logiciels libres (et éviter les logiciels propriétaires, qui n'ont pas la pérennité attendu des numériciens).

* coupler des logiciels distincts, codés dans des langages différents, est parfois gagnant

* apprendre (et c'est difficile) à faire des bonnes interfaces. Selon le domaine, ca peut être des interfaces graphiques, textuelles, web, ...

* dans pas mal de domaines, s'investir dans l'informatique est mal perçu par la vieille hiérarchie des physiciens/numériciens/.... mais c'est un investissement utile.

Par curiosité, j'aimerais bien connaître le domaine d'applications.

----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Wednesday 7 November 2007 19:54:57
Répondre     Citer    
Re: tirer parti processeur multi core

Citation
raggadoll
s'agissant de programmes fortran compilés qui effectuent les calculs,je pense que c'est le choix du compilateur qui est le plus important (en effet le compilateur doit tirer parti du la spécificité du processeur)

Non, le compilateur n'aidera pas à profiter de plusieurs coeurs (ou plusieurs processeurs). Le parallèlisme doit être explicité par le programmeur.

Un bon compilateur, convenablement configuré, peut néanmoins utiliser au mieux les ressources (les unités de calcul, le cache) d'un seul coeur, mais la parallèlisation automatique (effective et efficace!) de programmes codés dans des langages de bas niveau comme C++, Ada ou Fortran95 est un leurre.

Mais il faut toujours optimiser en dernier lieu, et d'abord concevoir un programme juste (et parallèle).

----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Thursday 8 November 2007 07:26:03
Répondre     Citer    
Re: tirer parti processeur multi core
Envoyé par: raggadoll

Bonjour,

Tout d'abord merci pour vos réponses détaillées. J'apprécie.

Je me rends compte que tout est dans la programmation. C'est évident. Je travail dans un labo des sciences de la Terre qui est axé, entre autre, dans la modélisation hydrologique. Nous avons un petit cluster et les chercheurs travaillent aussi sur PC multicore. Je suis pas numéricien mais pur informaticien de moins de 45ans grinning smiley . Je suis tout à fait d'accord avec Basile, et je milite activement pour une approche génie logiciel pour la recherche.

Mon boulot est de grosso modo d'intégrer les codes des modélisateurs dans un Système d'Information Géographique pour une utilisation plus facile.

N'étant pas expert, j'aimerai ton avis sur les bibliothèques MPI, PVM, OpenMP. Quelle est d'après vous la plus simple d'utilisation et la plus efficace (pas forcement les deux).

Merci.

Poste le Friday 9 November 2007 11:53:38
Répondre     Citer    
Re: tirer parti processeur multi core

Citation
raggadoll
N'étant pas expert, j'aimerai ton avis sur les bibliothèques MPI, PVM, OpenMP. Quelle est d'après vous la plus simple d'utilisation et la plus efficace (pas forcément les deux).

Il semble que PVM soit de plus en plus démodé.

Quant à choisir entre MPI et OpenMP, ça dépend vraiement des problèmes, et de la granularité du parallèlisme. Toutefois, les applications parallèles par envoi de message (donc MPI) passent -quand elles sont correctement conçues pour- mieux à l'échelle, surtout si elles évitent d'échanger trop de messages (mais juste ce qu'il faut).

Par contre, puisque tu es informaticien, je t'invites à creuser aussi la piste des langages de haut niveau (Ocaml ou Jocaml ou Acute par exemple) pilotant des routines de bas niveau (codées en C).

Enfin, il existe des tas de projets en rapport avec ça. J'avais entendu parler de Salomé mais il y a beaucoup d'autres choses (autrefois Sisal).

Au CEA/DAM voir aussi teratec




----

Basile STARYNKEVITCH

Membre de l'APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!

Projet logiciel libre: RefPerSys

Poste le Friday 9 November 2007 12:58:09
Répondre     Citer    
Re: tirer parti processeur multi core
Envoyé par: raggadoll

Oui j'ai oublié, je code en java et piloterai les routines fortran grâce à JNI.

Je vais voir les projets que tu as nommé.

Poste le Friday 9 November 2007 13:21:31
Répondre     Citer    

Veuillez vous authentifier auparavant pour commenter.

 

Ce forum !
tirer parti processeur multi core
Posez dans ce forum les questions qui ne trouvent pas place dans les autres...

Sauf mention contraire, les documentations publiées sont sous licence Creative-Commons