Je n'utilise que très rarement fortran, mais j'ai été chargé de le réécrire en parallèle. J'utilise gfortran pour mon choix de compilateur. J'ai trouvé d'excellentes ressources au https://computing.llnl.gov/tutorials/openMP/ ainsi que quelques autres.OpenMP in Fortran
Mon problème est le suivant, avant d'ajouter toutes les directives OpenMP, si je compile simplement le programme existant:
gfortran Example1.F90 -o Example1
tout fonctionne, mais activant l'option du compilateur OpenMP même sans ajouter: directives
gfortran -openmp Example1.F90 -o example1
se termine avec une erreur de segmentation quand je lance le programme existant. En utilisant des programmes de test plus petits que j'ai écrits, j'ai réussi à compiler d'autres programmes avec -openmp qui s'exécutent sur plusieurs threads, mais je ne comprends pas pourquoi activer l'option seule et aucune directive entraîne une erreur de segmentation. Je m'excuse si ma question est plutôt simple. Je pourrais poster du code mais c'est plutôt long. Il défauts que j'attribuer des valeurs initiales:
REAL, DIMENSION(da,da) :: uconsold
REAL, DIMENSION(da,da,dr,dk) :: uconsolde
...
uconsold=0.0
uconsolde=0.0
La première affectation à « uconsold » fonctionne très bien, la seconde semble être la source de la faute que quand je commente la ligne les prochaines lignes exécutent allègrement jusqu'à ce que " uconsolde "est utilisé à nouveau.
Merci pour toute aide à ce sujet.
Ce n'est pas un code hérité, pour autant que je puisse le voir. C'est un moyen moderne de déclasser des tableaux. En ce qui concerne openmp, avec tout le respect dû au didacticiel sur le lien, je recommande humblement le livre "Using OpenMP". C'est très amical pour les gens qui n'ont jamais eu affaire à ça http://mitpress.mit.edu/catalog/item/default.asp?ttype=2&tid=11387 ... il y en a un autre, mais je ne fais pas Je l'ai sur mon étagère en ce moment, et je ne peux pas me souvenir de l'auteur. Si vous êtes intéressé, envoyez-moi un commentaire, et je le chercherai quand je rentrerai à la maison. – Rook