Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#1 Le 06/07/2013, à 20:51

dva2tlse

parallélisation en fortran 90

Bonjour, bonsoir le forum,
ce post fait suite à ces autres : http://www.developpez.net/forums/d13567 … voire-cpp/ et http://forum.ubuntu-fr.org/viewtopic.php?id=1310981, où je demandais quel langage de programmation choisir entre le fortran et le C voire le C++. J'ai finalement choisi de coder en fortran, parce que c'est le langage que je connais le mieux, et que j'envisage par la suite que la plupart du travail soit effectuée en parallèle sur plusieurs processeurs. (il y a des serveurs de calcul qui tournent déjà sur quarante proc's dans ma boite, pour d'autres applications)
Le travail en question est la traduction d'un fichier d'entrée d'environ deux millions de lignes, en une suite de valeurs numériques déterminées d'après les informations de chaque ligne, et avec d'autres infos que l'on récupère dans deux autres fichiers d'entrée de quelques centaines de lignes chacun; on m'a informé sur ce forum ou sur celui de développez.com où j'ai exposé le problème aussi, que le travail en question s'apparentait à un "jointure" de bases de données.
La première fois où le programme a tourné correctement jusqu'au bout, il a mis environ vingt minutes; suite aux discussions sur les forums, j'en suis arrivé à deux minutes environ (en améliorant sensiblement la logique de l'algo et les I/O), et aujourd'hui vendredi, en passant d'une vieille HP9000 à bout de souffle, à un bon PC sous linux avec un (seul) processeur itanium, j'en suis à 21 secondes.
Le but du "jeu" est d'exécuter trois cents mille fois le programme en une semaine (1 semaine = 7j x 24h x 3600s = 604800s) soit environ deux secondes par instance du programme en monoprocesseur, ou vingt secondes sur dix proc's.
  Il me parait illusoire d'espérer atteindre deux secondes, mais j'ai assez confiance en moi (quelle modestie) pour parvenir à paralléliser le travail convenablement, bien que je ne l'aie jamais fait.
Merci de me donner  toutes les idées, même farfelues, que vous inspire ce post', car n'étant pas informaticien mais mécanicien (en calcul de structures), mon imagination et mes connaissances sont assez pauvres dans ces domaines,
merci encore,

Dernière modification par dva2tlse (Le 07/07/2013, à 12:35)


P.S.: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

#2 Le 16/07/2013, à 19:09

Haleth

Re : parallélisation en fortran 90

Utilise OpenMP, à grand renfort de #pragma !

Exemple


Ubuntu is an ancien African word which means "I can't configure Debian"

Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.

Hors ligne

#3 Le 05/09/2013, à 08:19

dva2tlse

Re : parallélisation en fortran 90

Oui merci à retardement; mais j'ai trouvé de mon côte que openMP semblait être ce qui convenait bien. (Et mieux que MPI dans mon cas)
  Par contre je n'ai pas vraiment de #pragma vu que je code en fortran.
  En tous cas merci,
David


P.S.: Dis toto, pourquoi l'univers existe-t'il ?
Je vais y réfléchir avec Morphée et lui dès avant 22h55, donc ici, il faut se contacter auparavant.

Hors ligne

Haut de page ↑