80 votes

Apprendre le Fortran à l'ère moderne

J'ai récemment maintenir une grande quantité de calcul scientifique intensif code FORTRAN. Je vais avoir des difficultés à obtenir une poignée sur tous les de la, dire, de nuances, de quarante ans de langue, en dépit de google & deux niveau d'introduction des livres. Le code est en proie à "l'amélioration de la performance des améliorations". Quelqu'un aurait-il des guides ou des conseils pratiques pour de-l'optimisation de FORTRAN dans CS 101 niveaux? Quelqu'un aurait-il connaissance de la façon dont FORTRAN optimisation de code opérés? Y a-typique FORTRAN 'pièges' qui pourrait ne pas se produire à un Java/C++/.NET soulevées développeur de la prise de FORTRAN 77/90 base de code?

88voto

user7116 Points 39829

Vous devez obtenir une "sensation" pour ce que les programmeurs ont dû faire retour dans la journée. La grande majorité du code, je travaille avec est plus âgé que moi et a couru sur des machines qui étaient "nouveaux" quand mes parents étaient au lycée.

Commune FORTRAN-ismes, j'ai traiter avec, qui nuisent à la lisibilité sont:

  • Blocs communs
  • Implicite des variables
  • Deux ou trois FAIRE des boucles avec un partage des instructions continue
  • GOTO à la place de FAIRE des boucles
  • Arithmétique SI les déclarations
  • Calculé GOTO
  • L'équivalence RÉEL/ENTIER/des autres dans certaines communes bloc

Stratégies pour la résolution de ces impliquent:

  1. Obtenir Spag / plusFORT, la peine de l'argent, il résout un grand nombre d'entre eux automatiquement et sans Bug(tm)
  2. Déplacer vers le Fortran 90, si possible, si pas déplacer gratuit-format Fortran 77
  3. Ajouter IMPLICIT NONE pour chaque sous-programme, puis fixer toutes les erreurs lors de la compilation, beaucoup de temps, mais finalement nécessaire, certains programmes peuvent le faire automatiquement pour vous (ou vous pouvez le script)
  4. Déplacer tous les blocs de MODULEs, de fruits mûrs, de la peine
  5. Convertir arithmétique SI les déclarations de SI....ELSEIF ELSE blocs
  6. Convertir calculée GOTOs pour SÉLECTIONNER les CAS les blocs
  7. Convertir tous FAIRE des boucles à la nouvelle syntaxe F90

    myloop: do ii = 1, nloops
        ! do something
    enddo myloop
    
  8. Convertir equivalenced commune bloc membres AFFECTABLES la mémoire allouée dans un module, ou de leur véritable caractère routines si c'est Hollerith être stockés dans un VÉRITABLE

Si vous avait des questions plus précises quant à la façon d'accomplir une partie de la lisibilité des tâches, je peux donner des conseils. J'ai un code de base de quelques centaines de milliers de lignes de Fortran qui a été écrit sur une période de 40 ans que je suis en quelque sorte responsable, donc j'ai probablement courir à travers toutes les "problèmes" vous avez peut être trouvé.

32voto

jaredor Points 1255

Héritage Fortran De Caisse À Savon

J'ai aidé à maintenir/améliorer un héritage code Fortran de base pour un bon moment et pour la plupart pense que sixlettervariables est sur l'argent. Des conseils que si, tend à la technique; un durcissement de la ligne à la houe est dans la mise en œuvre de "bonnes pratiques".

  • Établir un nécessaire de style de codage et des directives de codage.
  • Exiger une révision du code (de plus que le codeur!) pour tout ce qui est soumis au code de base. (Contrôle de Version doit être liée à ce processus.)
  • Démarrer la construction et l'exécution des tests unitaires; idem de référence ou des tests de régression.

Ces peut sembler évident choses ces jours-ci, mais au risque de généraliser, j'affirme que la plupart des code Fortran magasins ont une culture bien ancrée, certains ont commencé avant que le terme "génie logiciel" existait, et qu'au fil du temps ce qui vient de dominer est "le faire maintenant". (Ce n'est pas unique à Fortran magasins par tous les moyens.)

Embrassant Pièges

Mais que faire avec une déjà existante, grotty vieil héritage de la base de code? Je suis d'accord avec Joel Spolsky sur la réécriture, ne pas. Cependant, à mon avis sixlettervariables ne point autorisés exception: l'Utilisation des outils logiciels permettant la transition vers une meilleure Fortran constructions. Beaucoup de choses peuvent être pris/corrigés par des analyseurs de code (FORCHECK) et le code graveurs (plusFORT). Si vous devez le faire à la main, assurez-vous que vous avez une raison impérieuse. (Je souhaite que j'avais sous la main une référence pour le nombre de bugs logiciels qui sont venus de la correction de bugs, c'est une leçon d'humilité. Je pense que certains de ces statistiques est en Expert de la Programmation en C.)

Probablement la meilleure attaque en train de gagner le jeu de Fortran pièges est d'avoir la meilleure défense: la connaissance de la langue assez bien. À cette fin, je recommande ... des livres!

Fortran Arbre Mort De La Bibliothèque

Je n'ai eu qu'un succès modeste comme un "QA harceler" au fil des ans, mais j'ai trouvé que l'éducation n'travail, quelques fois, par inadvertance, et que l'un des plus influents des choses est un livre de référence que quelqu'un a sous la main. J'aime et je recommande fortement

Fortran 90/95 pour les Scientifiques et les Ingénieurs, par Stephen J. Chapman

Le livre est également bon avec Fortran 77 en ce qu'il identifie précisément les constructions qui ne devrait pas être utilisé et donne la meilleure des alternatives. Cependant, il est en fait un manuel et peut fonctionner en dehors de la vapeur lorsque vous voulez vraiment connaître les détails de Fortran 95, c'est pourquoi je recommande

Fortran 90/95 Expliqué, par Michael Metcalf Et John K. Reid

que votre go-to de référence (sic) pour Fortran 95. Attention, il n'est pas le plus lucide de l'écriture, mais le voile se lever quand vous voulez vraiment obtenir les la plupart hors d'une nouvelle Fortran 95 fonctionnalité.

Pour se concentrer sur les questions des cours de Fortran 77 pour Fortran 90, j'ai bien aimé

La migration vers le Fortran 90, par Jim Kerrigan

mais le livre est maintenant épuisé. (Je ne comprends pas O'Reilly de l'utilisation de Safari, pourquoi n'est-elle pas chacun de leurs livres imprimés disponibles?)

Enfin, comme à l'héritier du merveilleux, merveilleux classique, Outils Logiciels, ce que je peux proposer

Classique FORTRAN, par Michael Kupferschmid

Ce livre ne montre pas seulement ce que l'on peut faire avec "seulement" Fortran 77, mais il parle aussi de certains des plus subtiles questions qui se posent (par exemple, devraient ou ne devraient pas utiliser la déclaration EXTERNE). Ce livre n'est pas exactement couvrir le même espace que les "Outils Logiciels", mais ils sont deux des trois programmation Fortran livres que je balise comme "fun".... (voici la troisième).

Divers Conseils qui s'applique à presque tous les compilateur Fortran

  • Il y a une option de compilation pour appliquer IMPLICITE AUCUN problème, que vous pouvez utiliser pour identifier le problème routines sans les modifier avec le IMPLICIT NONE déclaration de la première. Ce morceau de conseils ne semblent significatifs qu'après la première fois qu'une construction de bombes en raison d'une IMPLICIT NONE de commande inséré dans un héritage de la routine. (Quoi? Votre examen du code n'a pas l'attraper? ;-)
  • Il y a une option de compilation pour le tableau de la vérification de limites, ce qui peut être utile lors du débogage de Fortran 77 du code.
  • Fortran 90 compilateurs doivent être en mesure de compiler presque tous les Fortran 77 du code et même plus âgés code Fortran. Activer les options de génération de rapports sur votre compilateur Fortran 90, l'exécution de votre code hérité à travers, et vous aurez un début décent sur la vérification de la syntaxe. Certaines entreprises de Fortran 77 compilateurs sont en fait des compilateurs Fortran 90 qui sont en cours d'exécution dans le Fortran 77 mode, donc cela peut être relativement simple option de se tourner pour tout les scripts de compilation que vous avez.

24voto

SumoRunner Points 356

Il y a quelque chose dans la question d'origine que j'aurais de la prudence. Vous dites que le code est en proie à "l'amélioration de la performance des améliorations". Depuis le Fortran problèmes sont généralement d'un scientifique et mathématique de la nature, de ne pas assumer ces astuces sont là pour améliorer la compilation. Ce n'est probablement pas à propos de la langue. En Fortran, la solution est rarement au sujet de l'efficacité du code lui-même, mais les mathématiques sous-jacentes à résoudre le problème. Les options peuvent faire la compilation plus lent, peut même faire de la logique apparaissent en désordre, mais l'intention est de rendre la solution plus rapidement. Sauf si vous savez exactement ce qu'il fait et pourquoi, le laisser seul.

Même simple, comme le changement du muet à la recherche de noms de variables peuvent être un gros piège. Historiquement standard des équations mathématiques dans un domaine donné de la science ont utilisé un abrégée depuis les jours de Maxwell. Donc, pour voir un tableau nommé B(:) dans l'électromagnétisme indique tous les Emag ingénieurs exactement ce qui est en train d'être résolu. Changement à vos risques et périls. Morale, apprendre à connaître la norme de la nomenclature de la science avant de le renommer.

7voto

dagorym Points 2025

Comme quelqu'un ayant de l'expérience dans les deux FORTRAN (77 saveur bien qu'il a été un moment depuis que je l'ai utilisé au sérieux) et C/C++ l'élément à surveiller qui saute immédiatement à l'esprit sont des tableaux. FORTRAN tableaux de commencer avec un indice de 1 au lieu de 0 comme ils le font en C/C++/Java. Aussi, la mémoire, l'arrangement est inversé. Donc incrémenter le premier indice vous donne séquentielle emplacements de mémoire.

Ma femme utilise encore FORTRAN régulièrement et a quelques de code C++, elle a besoin de travailler avec, maintenant que je suis sur le point de commencer à aider son avec. Que de questions lors de sa conversion, je vais essayer de vous les montrer. Peut-être qu'ils vont vous aider.

6voto

J . A. Maruhn Points 41

J'ai utilisé Fortran en commençant par l'66 version depuis 1967 (sur un IBM 7090 avec 32 k mots de mémoire). J'ai ensuite utilisé PL/1 pour un certain temps, mais revint plus tard à Fortran 95, car il est idéalement adapté pour la matrice/complexe-nombre des problèmes que nous avons. Je voudrais ajouter à la cnsoderations qu'une grande partie de la structure alambiquée de vieux codes est tout simplement en raison de la faible quantité de mémoire disponible, forçant une telle chose comme la réutilisation de quelques lignes de code via calculées ou affectés GOTOs. Un autre problème est l'optimisation par la définition des variables auxiliaires pour chaque sous-expression répétée - les compilateurs n'ont tout simplement pas optimiser pour cela. En outre, il n'était pas autorisé à écrire DO i=1,n+1 ; on devait écrire n1=n+1; DO i=1,n1. En conséquence vieux codes sont débordés avec superflu des variables. Quand j'ai réécrit un code en Fortran 95, 10% seulement des variables survécu. Si vous voulez rendre le code plus lisible, je recommande fortement la recherche de variables qui peuvent facilement être éliminés.

Une autre chose que je pourrais mentionner, c'est que pendant de nombreuses années complexe de l'arithmétique et de tableaux multidimensionnels ont été très inefficace. C'est pourquoi vous trouverez souvent des code réécrit pour faire complexe caculations en utilisant uniquement des variables réelles, et les matrices traitées avec un seul linéaire de l'indice.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X