Je pense que je ne trouverai cela dans aucun manuel, car répondre à cela demande de l'expérience. Je suis actuellement au stade de tester/valider mon code/rechercher des bogues pour le mettre en état de production et toute erreur entraînerait de nombreuses souffrances, par exemple le côté obscur.
Quel type d'indicateurs définissez-vous lorsque vous compilez votre programme pour Fortran à des fins de débogage?
Quel type de drapeau définissez-vous pour le système de production?
Que faites-vous avant de vous déployer?
La version de production utilise ifort
comme compilateur, mais je fais mes tests avec gfortran
. Suis-je en train de mal faire?
-Og
/ -O0
-O0
indique au compilateur de ne faire aucune optimisation. L'optimiseur peut supprimer certaines variables locales, fusionner certains blocs de code, etc. et, en conséquence, il peut rendre le débogage imprévisible. Le prix de -O0
l'option est l'exécution de code très lente , mais à partir de la version 4.8, les compilateurs GCC (y compris celui de Fortran) acceptent un niveau d'optimisation nouvellement introduit -Og
:
-Og
Optimiser l'expérience de débogage. -Og permet des optimisations qui n'interfèrent pas avec le débogage. Ce devrait être le niveau d'optimisation de choix pour le cycle standard d'édition-compilation-débogage, offrant un niveau d'optimisation raisonnable tout en maintenant une compilation rapide et une bonne expérience de débogage.
Donc, si possible, utilisez -Og
, sinon utilisez -O0
.
-g
Cette option rend réellement le débogage possible en demandant au compilateur de produire des informations de débogage destinées à être utilisées par le débogueur interactif (GDB).
Il y en a beaucoup. Les plus utiles à mon avis sont:
-Wall
pour "activer tous les avertissements sur les constructions que certains utilisateurs considèrent douteux, et qui sont faciles à éviter (ou à modifier pour éviter l'avertissement), même en conjonction avec des macros."
-Wextra
pour "activer certains indicateurs d'avertissement supplémentaires qui ne sont pas activés par -Wall."
-pedantic
pour générer des avertissements sur les fonctionnalités de langage prises en charge par gfortran mais ne faisant pas partie de la norme officielle Fortran 95. Il est possible d'être encore plus "pédant" et d'utiliser -std=f95
indicateur pour que les avertissements deviennent des erreurs.
-fimplicit-none
pour "spécifier qu'aucune saisie implicite n'est autorisée, sauf si elle est remplacée par des instructions explicites IMPLICIT. C'est l'équivalent de l'ajout d'aucune implicite au début de chaque procédure."
-fcheck=all
pour "activer les tests d'exécution", comme, par exemple, les vérifications des limites du tableau.
-fbacktrace
pour "spécifier que, lorsqu'une erreur d'exécution est rencontrée ou qu'un signal mortel est émis (erreur de segmentation, instruction illégale, erreur de bus ou exception à virgule flottante), la bibliothèque d'exécution Fortran doit générer une trace arrière de l'erreur. "
Pour le débogage, j'utilise: -O2 -fimplicit-none -Wall -Wline-truncation -Wcharacter-truncation -Wsurprising -Waliasing -Wimplicit-interface -Wunused-parameter -fwhole-file -fcheck=all -std=f2008 -pedantic -fbacktrace
. Pour ceux qui ne sont pas déjà expliqués, consultez le manuel de gfortran. -fcheck=all
comprend -fcheck=bounds
.
Pour la production, j'utilise: -O3 -march=native -fimplicit-none -Wall -Wline-truncation -fwhole-file -std=f2008
. Les contrôles d'exécution tels que la vérification des limites augmentent le temps d'exécution de l'exécutable résultant. J'ai trouvé que le coût était souvent étonnamment bas, mais il pouvait être élevé. Par conséquent, aucun contrôle d'exécution sur les compilations pour la production.