Une question large que je connaisse mais: p>
Quelqu'un a-t-il des conseils généraux sur l'augmentation de la vitesse d'exécution dans les programmes Fortran? p>
6 Réponses :
Une réponse large pour le large quesiton:
Rien de Fortran spécifique, au-delà: P>
Il y a aussi du matériel disponible, optimisation de Fortran Googling par exemple. se présente par ex. Ceci (PDF) et Ce . Cependant, soyez prudent avec la littérature plus ancienne et leurs hypothèses: il n'y a pas si longtemps, les guides d'optimisation pour de nombreuses plateformes (à juste titre) ont supposé que la mémoire était rare, l'accès à la mémoire était bon marché et les instructions étaient chères. Plus aussi. P>
C'est un champ très large, mais ... p>
Si vous faites une matrice arithmétique, envisagez de regarder dans des bibliothèques hors tension pour cela. Ils sont probablement plus rapides et certains soutiennent multithreading, ce qui vous donnera une amélioration de la performance sur les machines multiprocesseurs. P> LI>
profilage, comme le suggère Pierr. Cela vous dira où votre programme passe réellement son temps. Sachant que cela vous permet de concentrer votre attention sur les bits qui ont réellement besoin de réglage. P> li>
Ligne de cache et alignement de mots plus optimiser les morceaux pour s'adapter aux caches de processeur. Celles-ci sont considérées comme une programmation plus germane à C car il est plus facile de contrôler ce genre de chose avec C. Cependant, les mêmes problèmes peuvent causer des problèmes avec les programmes de fortrange pour de nombreuses mêmes raisons.
Le cache manque de pénalité sur un Le processeur moderne est très important et l'optimisation de l'utilisation de cache peut faire une différence de commandement dans certains cas. Si vous identifiez cela comme un problème, vous souhaiterez peut-être ré-écrire le calcul de base en C pour vous donner plus de contrôle à grain fin sur les structures de données. P> LI>
Si vous êtes vraiment cpu lié, vous pouvez obtenir un kilométrage des techniques telles que la programmation GPU. P> LI> ul>
L'utilisation de bibliothèques préexistantes et optimisées pour faire des opérations linéaires d'algèbre / matrice peut faire une différence étonnante.
Comme d'autres ont suggéré de profil de votre code avant de penser à la modifier. p>
Mais la meilleure chose à faire est de lire le manuel du compilateur de près, de la ligne par ligne, du mot par mot et d'accorder une attention particulière à toutes les options qu'il vous donne. D'après mon expérience (j'ai beaucoup d'expérience dans HPC pour l'électromagnétique informatique, pas que vous devriez croire ce que vous avez lu ici!) Vous obtenez la plupart des franges pour votre argent en optimisation de la performance par utilisation intelligente du compilateur. P>
Une fois que vous avez épuisé les possibilités du compilateur (et que vous avez suggéré l'un des autres répondants, assurez-vous d'avoir un bon compilateur - ils ne sont pas chers et que je reçois une diminution de C40% de temps d'exécution pour la plupart des programmes qui vont de G95 à un compilateur payé) alors vous ne devriez pas commencer à faire des choses comme: p>
- boucle déroulante; p>
- Enregistrement des instructions; P>
- Inlinge de fonction; P>
- Autres choses que nous faisions tout le temps de retour dans la journée. P>
La plupart de ces trucs de code-peau sont maintenant terminés, mieux que les formulaires de vie basés sur le carbone américain peuvent le faire, par bon optimisation des compilateurs. P>
Si vous devez bricoler, Tinker avec accès à la mémoire - par exemple, carrelez votre accès aux tableaux pour profiter du cache. Si vous faites cela, paramétrez vos tailles de carreaux (etc.) de sorte que lorsque, l'année prochaine, vous le déplacez à une architecture différente, vous devez seulement modifier quelques paramètres plutôt que de modifier à nouveau le code. P>
Enfin, amusez-vous, optimiser la performance des programmes Fortran est un excellent moyen de passer votre journée de travail! p>
juste parce que personne ne l'a mentionné: p>
(s'il vous plaît, ne me frappe pas :-) ...) p>
Bonne réponse Martin, c'est une autre approche rentable! Compte tenu de ce que nous avons coûté les experts de HPC par jour, USD (ou EUR ou GBP) 3000 sont des boutons et fixés.
Aproplos de cela, je faisais une fois une exécution sur le kit de poste de travail à haute spécification (surtout je reçois des machines comme celle-ci pour des E / S rapides, mais ils ont également tendance à avoir également des processeurs assez rapides;). Il vit à Stackoverflow.com / Questions / 403084 / ...
Le code FORTRAN que je connaisse est très différent du code dans d'autres langues. Dans d'autres langues, la structure de données est beaucoup plus dominante, ainsi que des couches d'abstractions, des piles d'appels profonds et Ralentissement causé par des appels excédentaires . P>
Fortran d'autre part a tendance à être utilisé pour des algorithmes mathématiques, avec de gros tableaux, et pas tant de profondeur d'appel. Dans ces problèmes, les problèmes de la localité en cache se tiennent beaucoup plus volumineux, ainsi que des problèmes d'algorithme. Par exemple, je travaille beaucoup avec une modélisation non linéaire mixte-effet, et des problèmes tels que des tolérances, des gradients de différence en avant ou central, des gradients analytiques sont cruciaux. Les méthodes de résolution des ode telles que Runge-Kutta, les méthodes implicites, l'exposant matriciel ou la forme fermée font d'énormes différences. P>
Aussi, si vous le pouvez (par échantillonnage) identifier des sections de code véridiques taches chaudes (c'est-à-dire où le PC dépense une fraction de temps importante sans appeler des sous-routines) et qui sont en code, vous compilez réellement (pas dans un 3ème -La bibliothèque de PARTY) puis allumant l'optimisation du compilateur, il fera une différence. P>
Personnellement, je ne m'en soucie pas des types d'optimisation des compilateurs de fortrans, brouillage du code pour raser les cycles de code qui utilise moins de 1% de fraction de temps, tout en rendant très difficile la débogage. P>
Semble une question raisonnable pour moi un vote!