Dans mon programme de doctorat en science computationnelle, nous travaillons presque exclusivement en C ++ et Fortran. Il semble que certains professeurs préfèrent lun à lautre. Je me demande lequel est «meilleur» ou si l’un est meilleur que l’autre dans certaines circonstances.

Commentaires

  • Un mélange de high et un langage de bas niveau est mieux que dutiliser exclusivement lun ou lautre, à mon avis. Par exemple. Jutilise Python + C ++.
  • Les réponses à cette question seront presque purement subjectives et donc je ‘ ne suis pas sûr que cette question soit appropriée.

Réponse

Comme souvent, le choix dépend (1) du problème que vous essayez de résoudre, (2) du vos compétences et (3) les personnes avec lesquelles vous travaillez (à moins que ce ne soit un projet solo). Je vais laisser (3) de côté pour le moment car cela dépend de la situation individuelle de chacun.

Dépendance aux problèmes: Fortran excelle dans le traitement de tableaux. Si votre problème peut être décrit en termes de structures de données simples et en particulier de tableaux, Fortran est bien adapté. Les programmeurs Fortran finissent par utiliser des tableaux même dans des cas non évidents (par exemple pour représenter des graphiques). Le C ++ est mieux adapté aux structures de données complexes et hautement dynamiques.

Dépendance des compétences: il faut beaucoup plus dexpérience en programmation pour écrire de bons programmes C ++ que pour écrire de bons programmes Fortran. Si vous commencez avec peu de programme expérience et que vous navez que peu de temps pour apprendre cet aspect de votre travail, vous obtenez probablement un meilleur retour sur investissement en apprenant Fortran quen apprenant C ++. En supposant, bien sûr, que votre problème est adapté à Fortran.

Cependant, la programmation ne se résume pas à Fortran et C ++. Je recommande à quiconque se lance dans la science informatique de commencer avec un high dynamique -langage de niveau tel que Python. Souvenez-vous toujours que votre temps est plus précieux que le temps CPU!

Commentaires

  •  » Noubliez jamais que votre temps est plus précieux que le temps CPU!  » En tant que personne travaillant dans le HPC, je ne suis pas daccord avec cette partie; tout le reste est parfait.
  •  » Noubliez jamais que votre temps est plus précieux que le temps CPU!  » As quelquun qui travaille dans la recherche scientifique, je ne pourrais pas ‘ être plus daccord avec cette partie.
  •  » Souvenez-vous toujours que votre temps est plus précieux que le temps CPU!  » – Je ‘ d aimerais ajouter mes 2 cents – en utilisant plusieurs centaines de nœuds, chacun avec plus de 10 cœurs pour exécuter un programme pendant plusieurs semaines peut être interprété comme un horrible gaspillage dune ressource très précieuse, si quelques semaines de plus pouvaient produire un code qui sexécute en seulement quelques jours. Ces clusters HPC sont une ressource commune rare et coûteuse.
  •  » Noubliez jamais que votre temps est plus précieux que le temps CPU! « , code pour une semaine mais fonctionne pendant un mois, ce ‘ est tout à fait habituel monsieur!
  •  » Rappelez-vous toujours que votre temps est plus précieux que le temps CPU! « , je préfère coder pendant un mois et courir dans une semaine! – il est possible den faire plus une fois le code écrit et dautres trouveront le code que vous écrivez plus utile aussi.

Réponse

Je pense que C ++ et Fortran sont assez bons et fonctionnent bien.

Cependant, je pense que Fortran est meilleur pour le calcul scientifique numérique , pour les algorithmes qui peuvent être exprimés en utilisant et n’ont pas besoin d’autres structures de données sophistiquées, donc dans des domaines comme les différences / éléments finis, les solveurs PDE, les calculs de structure électronique. Fortran est un langage spécifique à un domaine. En particulier, je pense qu’il est plus facile d’écrire rapidement programmes en Fortran quen C ++, par un scientifique (pas nécessairement un expert en informatique).

C ++ est un langage à usage général, donc on peut y exprimer nimporte quel algorithme, et cest certainement mieux pour les algorithmes qui ne peuvent pas être exprimés en utilisant des tableaux, du champ HPC probablement des graphes, des générateurs de maillage, des manipulations symboliques et ainsi de suite.

Il est également possible décrire des arra y algorithmes en C ++, mais daprès mon expérience, cela nécessite beaucoup plus de connaissances en informatique et en général plus de travail (i.e. il faut créer ou réutiliser des classes pour la manipulation des tableaux, et gérer la gestion de la mémoire à la main ou en utilisant une bibliothèque comme Teuchos de Trilinos). Les non-experts ont tendance à écrire de très bons programmes Fortran, mais dhorribles programmes C ++ (daprès ma propre expérience).

Avertissement: Personnellement, jaime beaucoup Fortran et je le préfère au C ++ pour le calcul numérique. Jai passé plus de 2 ans à programmer quotidiennement en C ++, et presque un an à programmer quotidiennement dans Fortran moderne (dans le domaine des éléments finis). Jutilise aussi beaucoup Python et Cython.

Commentaires

  • Un pour la première réponse étant équilibrée. Je pense que C ++ et Fortran ne sont de loin pas les seules possibilités du HPC contemporain. Je pense quil est bon de connaître la force et les points faibles lorsque vous choisissez Fortran, C ++ ou Python (ou ce que vous voulez). Jai vu 20 000 lignes de Fortran dans un seul fichier, cultivées de manière organique sur plusieurs décennies. Personnellement, je nutiliserais rien dautre que de linformatique à matrice lourde isolée. Pas même pour tout ce qui concerne la sortie. Jusquà présent, pour un commentaire biaisé.
  • Je ne pourrais pas ‘ être plus en désaccord avec cette réponse. Notre code par éléments finis naurait pas été possible décrire en Fortran. En fait, il a commencé il y a 15 ans comme un mélange de C et de Fortran (ce dernier étant pour les parties numériquement intensives de la méthode), et il est progressivement passé au C pur, puis au C ++ au cours de plusieurs années. Le code était constamment plus court, plus rapide et plus facile à comprendre, et il était plus performant après chaque itération. Je suis daccord avec dautres qui soulignent que C ++ vous donne beaucoup de corde pour vous tirer dessus. Choisissez la langue avec laquelle vous ‘ êtes le plus à laise.
  • Bill, avez-vous utilisé le Fortran moderne (90 et versions ultérieures?). Cest très important (jaurais dû être plus explicite dans ma réponse à ce sujet). Bien sûr,  » 20 000 lignes de Fortran « , ou f77 nest généralement pas meilleur quun C ++ bien écrit.
  • @ OndřejČert í k: Je pense que si vous pensez que les programmes modernes par éléments finis utilisent  » simple  » structures de données, alors vous navez ‘ regardé aucune dentre elles récemment. Essayez dimplémenter des éléments finis adaptatifs, des méthodes hp ou des multigrilles sur des maillages non structurés à laide de structures de données simples. Bill est parfait et je pense pouvoir parler en son nom en disant que lutilisation de  » Fortran moderne  » naurait guère fait plus quun petit différence.
  • @WolfgangBangerth, voir par exemple Phaml ( math.nist.gov/phaml ) pour une implémentation Fortran de pratiquement tout ce qui vous avez mentionné.

Réponse

Je « jette aussi mes deux cents en quelque sorte en retard, mais je » Je viens de voir ce fil et je pense que, pour la postérité, il y a quelques points qui doivent désespérément être soulignés.

Notez dans ce qui suit que je parlerai de C et non de C ++. Pourquoi? Eh bien, sinon, il est facile de comparer un langage orienté objet à part entière à typage dynamique avec quelque chose daussi statique que Fortran. Oui, certaines implémentations modernes des dernières normes Fortran peuvent faire plus que cela, mais très peu de gens en fait utilisez-les, et donc quand nous parlons de Fortran, nous pensons à un langage simple, statique et impératif. Cest là que C est aussi, donc je vais remplacer C par C ++ pour ce qui suit.

tout, toute discussion sur Fortran / C ayant de meilleurs compilateurs est sans objet. Les compilateurs C / Fortran dédiés appartiennent au passé. Les deux gcc / gfortran et icc / ifc sont juste des front-end différents pour le même back-end, cest-à-dire votre programme sera transformé en description abstraite par le front-end puis optimisé et assemblé par le back-end. Si vous écrivez, sémantiquement, le même code en Fortran ou en C, le compilateur produira, dans les deux cas, le même assemblage qui fonctionnera tout aussi vite.

Ceci mamène maintenant à mon deuxième point: pourquoi voyons-nous encore des différences érences? Le problème est que la plupart des comparaisons sont faites par des programmeurs Fortran essayant quelque chose en C ou vice-versa. Avez-vous déjà remarqué comment la plupart des auteurs ou poètes préfèrent écrire dans leur langue maternelle? Voudriez-vous écrire de la poésie dans une langue dans laquelle vous ne vous sentez pas complètement à laise ou à la maison? Bien sûr que non … Je considère moi-même C comme mon langage de programmation « natif ». Jai cependant passé trois ans travaillant dans un groupe qui nutilisait que Fortran, dans lequel jai atteint un certain niveau de fluidité. Cependant, je nécrirais jamais rien de mon propre chef dans Fortran car je suis plus à l aise avec C et, par conséquent, le code qui en résulte sera meilleur , peu importe ce que vous définissez comme cela.

La principale différence réside donc dans le programmeur, pas dans le langage. Il ny a donc pas de différences? Enfin, pas tout à fait. Voici quelques exemples:

  • SIMD: Que ce soit SSE, SSE3 ou AltiVec, si vous voulez les utiliser dans Fortran, vous feriez mieux d’espérer et de prier pour que le compilateur devine exactement ce que vous voulez et faites-le. Bonne chance. En C, vous avez généralement des fonctions intrinsèques pour chaque architecture, ou, plus récemment, des types de vecteurs SIMD généraux dans gcc . La plupart des compilateurs Fortran nutiliseront que des instructions SIMD pour dérouler les boucles, mais si vous avez un noyau qui fonctionne sur de courts vecteurs de données dune manière non évidente, le compilateur ne le verra probablement pas.

  • Différentes architectures matérielles: toute larchitecture CUDA est construite autour de noyaux en C. Oui, le groupe de Portland a maintenant un CUDA -capable fortran compiler aussi, mais cest commercial, et surtout, ce nest pas de NVIDIA. Il en va de même pour OpenCL, pour lequel le meilleur que jai pu trouver est un projet récent qui ne prend en charge que quelques appels de base.

  • Programmation parallèle: Oui, MPI et OpenMP fonctionnent très bien avec C et Fortran. Cependant, si vous voulez un vrai contrôle de vos threads, cest-à-dire si vous avez un calcul entièrement dynamique en mémoire partagée, vous serez dans le froid avec Fortran. En C, vous avez les pthreads standard qui, bien que non chaleureux et flous, seront vous permet de traverser la tempête. En général, la plupart des calculs qui reposent sur l’accès au système d’exploitation, par exemple les threads, les processus, le système de fichiers, etc. sont mieux servis avec C. Oh, et n’essayez pas de faire le vôtre réseautage avec Fortran.

  • Facilité dutilisation: Fortran est plus proche de Matlab que C. Une fois que vous « avez compris tous les différents mots-clés et comment déclarer des variables, le reste du code ressemble à Matlab, ce qui le rend plus accessible aux utilisateurs ayant une expérience de programmation limitée.

  • Interopérabilité: lorsque vous créez une structure en C, la mise en page des données réelles est simple et déterministe. Dans Fortran, si vous utilisez des tableaux de pointeurs ou des données structurées, la mise en page réelle des données dépend fortement du compilateur, pas directement. en avant, et généralement complètement non documenté. Vous pouvez appeler C depuis Fortran et vice-versa, mais ne commencez pas à penser quil peut être aussi facile de passer autre chose quun tableau statique de lun à lautre et inversement.

Tout cela est quelque peu geek, de bas niveau, mais cest du calcul haute performance dont nous parlons, non? Si vous nêtes pas intéressé par la meilleure façon dexploiter le matériel sous-jacent paradigmes, cest-à-dire implémenter et / ou développer des algorithmes qui conviennent le mieux à la mémoire partagée / distribuée, aux threads, à la vectorisation SIMD , GPU utilisant SIMT, et ainsi de suite, alors vous ne faites que des maths sur un ordinateur.

Cela est devenu beaucoup plus long que tout ce que je voulais, alors voici un résumé – un ensemble de choses à emporter messages de toutes sortes:

  • Vous écrirez le meilleur code que vous pouvez dans la langue que vous connaissez le mieux.
  • Il ny a aucune différence dans la qualité du code produit par deux compilateurs qui utilisent le même back-end – cest nous qui écrivons du mauvais code dans une langue ou une autre.
  • Bien que se sentant plus bas niveau, Fortran est une abstraction de haut niveau et ne vous permettra pas daccéder directement à certaines fonctionnalités matérielles / OS, par exemple SIMD, threads, mise en réseau, etc …

Commentaires

  • Bonne réponse. Je ne ‘ cependant pas que votre commentaire final est nécessairement vrai. Je ‘ suis moi-même un programmeur C, mais vous avez accès à des éléments de bas niveau dans Fortran grâce à de bonnes pratiques de programmation. La façon idéale dutiliser des choses comme les opérations SIMD est décrire du code qui le suggère fortement (bloquer les boucles, par exemple) et de laisser le compilateur le faire pour vous. Pour le threading, utilisez simplement openMP (pthreads est également utilisable avec un peu de travail supplémentaire). Fortran a tout ce que vous mentionnez quil ne ‘ t, juste à un niveau qui compte pour son utilisateur typique: numérique.
  • @ Reid.Atcheson: Eh bien , si vous bloquez tout de manière à ce que le compilateur lattrape, alors il fonctionnera automatiquement en C et en Fortran. Le problème est, cependant, dans quelle mesure voulez-vous faire confiance à votre compilateur? Et pourquoi voulez-vous lui faire confiance dans les cas où vous savez exactement ce que vous voulez faire? OpenMP fait du threading, oui, mais par bloc. Vous pouvez le tromper en demandant à différents pools de threads de faire des choses différentes, mais cest juste une mauvaise utilisation dOpenMP. Les Pthreads pour Fortran ne sont que des wrappers pour les fonctions C. Je conviens, cependant, que Fortran est plus facile si vous ‘ nêtes pas dans les détails.
  • Bien sûr que vous nêtes pas ‘ T va obtenir une efficacité maximale de 99% en se basant sur le compilateur, mais vous pouvez facilement vous en approcher. Au-delà de cela, vous devez soit utiliser intrinsèques ou ASM en ligne. Vous devez faire des concessions quelque part pour lefficacité globale du programmeur, que ‘ explique pourquoi les langages de programmation existent en premier lieu. Au stade où vous êtes en fait assez fou pour entrer dans les détails des intrinsèques ou de lASM (je lai été à quelques reprises), Fortran nest ‘ quune béquille. De toute façon, vous ‘ savez comment créer un lien dans votre code assemblé optimisé à la main.
  • @ Reid.Atcheson: Eh bien, je ‘ Je soutiens que pour les applications HPC parallèles, vous risquez de vous retrouver bien en deçà de 99% defficacité maximale … Et les types de vecteurs gcc font de lutilisation des intrinsèques un non-problème 🙂
  • @Pedro, Message génial. Absolument brillant. Merci beaucoup davoir posté ça.Je viens de le trouver en fouillant au hasard dans des fils intéressants.

Réponse

De mes 15 années de réflexion sur les logiciels scientifiques : Si votre code sexécute 25% plus vite parce que vous lécrivez dans Fortran, mais quil vous faut 4 fois plus de temps pour lécrire (pas de STL, difficulté à implémenter des structures de données complexes, etc.), alors Fortran ne gagne que si vous dépensez une fraction significative de votre journée à tourner les pouces et à attendre que vos calculs soient terminés. Étant donné que pour presque tous, la chose la plus précieuse est notre propre temps, la conclusion est la suivante: utilisez le langage qui vous permet de développer, déboguer et tester votre code le plus rapidement, en ignorant quil peut être plus lent que peut-être possible si vous lavez écrit en Fortran.

Réponse

Mon approche a été dutiliser C ++ pour tout sauf les noyaux de calcul, qui sont généralement les meilleurs écrit en assemblée; cela vous permet dacquérir toutes les performances de lapproche HPC traditionnelle, mais vous permet de simplifier linterface, par exemple en surchargeant des noyaux de calcul tels que SGEMM / DGEMM / CGEMM / ZGEMM dans une seule routine, dit Gemm. Il est clair que le niveau dabstraction peut être augmenté beaucoup plus haut en évitant les pointeurs bruts et en passant à des classes opaques, mais cest une bonne première étape.

Je trouve que le plus gros inconvénient du C ++ est en grande partie laugmentation du temps de compilation, mais, daprès mon expérience, les économies de temps de développement compensent largement cela. Un autre inconvénient est que les compilateurs C ++ des éditeurs ont tendance à avoir plus de bogues que les compilateurs C et Fortran. Au cours de lannée écoulée, je pense avoir rencontré près de dix bogues dans les compilateurs C ++.

Cela dit, je pense que lannulation de paquets scientifiques écrits dans des langages de bas niveau (et Fortran) est la réticence à exposer des interfaces pratiques pour des structures de données sophistiquées: la plupart des gens sont satisfaits de linterface Fortran BLAS, car elle ne nécessite que des pointeurs et des dimensions de premier plan pour décrire les matrices, mais peu de gens diront que linterface habituelle du solveur direct clairsemé Fortran à 40 entiers est tout près de pratique (cf. UHM, SuperLU, PETSc et Trilinos).

En résumé, je préconise dutiliser lassembly pour les noyaux de calcul de bas niveau, mais des langages de niveau supérieur pour tout le reste, en particulier lorsque vous travaillez sur des structures de données non triviales.

Notez que ceci post a donné cette comparaison des performances de C et Fortran sur le noyau $ y: = \ alpha x + y $ .

Commentaires

  • Pourquoi ne ‘ t vous feriez-vous pas confiance à un compilateur C standard avec loptimisation appropriée activée dans le but de compiler de petits noyaux? À ce niveau de taille et de complexité du code, la différence entre ce quun compilateur pourrait en retirer nest pas claire.
  • Jai parlé avec plusieurs personnes qui mont dit que, même avec une utilisation restrictive appropriée, leur Fortran était toujours plus rapide que leur code C et / ou C ++ pour certaines opérations comme une transposition de matrice explicite. Je ‘ je ne dis pas quil ‘ est impossible de rendre le code C ou C ++ aussi rapide, mais que le compilateur Fortran a tendance à faire un meilleur travail.
  • Jai la même expérience avec le mot-clé  » restrict  » (mon code Fortran simple était toujours un peu plus vite). Mais mon expertise est limitée et je nai ‘ pas le temps dinvestir dans la compréhension de lassemblage généré à partir de gcc. Jutilise donc simplement Fortran, il est ‘ simple et ‘ rapide.
  • @JackPoulson: Le compilateur Largument est quelque chose que jentends un peu de la communauté Fortran. Malheureusement, la plupart des compilateurs, par exemple gcc ou ifc / icc, utilisez des interfaces linguistiques différentes pour le même back-end. La machinerie qui effectue loptimisation et la génération de code est identique et donc les différences dans les résultats sont très probablement dues à des différences dans la familiarité du programmeur avec le langage sous-jacent …
  • Juste pour donner un peu de perspective sur laffirmation souvent répétée et rarement validée selon laquelle Fortran est plus rapide sur les noyaux numériques: il y a quelque temps, nous avons remarqué que la multiplication de matrice-vecteur clairsemée dans Trilinos ‘ Epetra package était 30% plus lente que celui en cause.II. Le premier était écrit en simple Fortran 77, le second en C simple sans utiliser ‘ restrict ‘. Les deux avaient environ 10 à 15 lignes de code. Aujourdhui, Trilinos utilise le morceau de code extrait de deal.II. Je ‘ je suis sûr que lon peut trouver beaucoup de cas où F77 est plus rapide que C. Le fait est que ce nest ‘ pas universellement donc plus aujourdhui.

Réponse

Depuis que je suis nouveau ici, jai parcouru danciennes questions et jai trouvé celle-ci. Espérons que ce nest pas tabou de répondre aux anciens!

Puisque personne dautre na mentionné cela, jai pensé que je le ferais. Fortran 2003 est presque entièrement pris en charge par la plupart des principaux compilateurs (intel, ibm, cray, NAG, PCG), même gcc avec le (bientôt) dernière version 4.7. Fortran 2003 (et 2008) est un langage orienté objet, bien quun peu plus verbeux que C ++. Une des choses que je trouve agréable à propos de Fortran est le fait que le comité de normalisation considère linformatique scientifique comme son public principal (je remercie Damian Rouson de me lavoir signalé lautre jour).

Jévoque tout cela non pas pour que les programmeurs C ++ deviennent des programmeurs Fortran, mais pour que les gens de Fortran sachent quils ont maintenant plus doptions que de passer au C ++ ou démuler des concepts orientés objet dans Fortran 90/95.

One la mise en garde que jajouterai est quil y a un coût à être à la pointe de ce qui est implémenté dans les compilateurs. Si vous entreprenez un projet majeur dans Fortran 2003 en ce moment, vous tomberez sur des bogues et devrez continuellement mettre à jour votre compilateur (en particulier si vous utilisez gcc), bien que cela s’est considérablement amélioré ces derniers mois!

Réponse

Le problème avec C ++ est que vous avez de nombreuses chances de ruiner les performances, par exemple en utilisant aveuglément STL, exceptions, classes (surcharge virtuelle plus alignm problèmes), la surcharge dopérateurs (redondants / suppressions) ou les modèles (une compilation sans fin et des erreurs cryptiques semblent bénignes, mais vous pouvez perdre des heures de cette façon).

Cependant, plus vous aurez un meilleur accès aux bibliothèques générales et éventuellement une meilleure visibilité de votre code (bien que cela dépende fortement du champ, et que vous ayez toujours du C pur). Et vous pouvez toujours compenser le manque de flexibilité du Fortran en enveloppant son code dans un langage de script comme R, Lush, Matlab / Scilab ou même Python, Ruby ou Lua.

Commentaires

  • Cest généralement une mauvaise idée dappliquer des techniques de bas niveau dans des langages de haut niveau. Par exemple, la STL est conçue pour fonctionner à un niveau très abstrait. Il faut être conscient de ce que linterface est conçu pour, utilisez-le pour cette tâche, puis sortez de la voie des compilateurs.
  • Je pense que mbq ‘ s et Martin sont injustes. Oui, il existe des moyens de se tirer une balle dans le pied si vous essayez dimplémenter un vecteur numérique à des fins dalgèbre linéaire en utilisant std :: list < double >. Mais ce ‘ est un argument idiot: au moins C ++ a une classe de liste chaînée que vous peut utiliser, alors que Fortran ne ‘ t. Cela ‘ est comme dire  » Les voitures roulent à une vitesse telle que vous pourriez vous écraser contre un mur et vous blesser; vous devriez utiliser des calèches à la place.  » Ce ‘ est juste une idée stupide de détruire un langage de haut niveau qui prend également en charge le bas -des trucs de niveau (par exemple C ++) pour avoir des fonctionnalités de haut niveau.
  • @WolfgangBangerth Non, maintenant vous faites du mal à Fortran – cest comme  » de bas niveau  » car les bactéries sont  » moins évoluées  » que les humains . Si vous voulez une analogie avec une voiture, cela devrait ressembler davantage à « , vous pouvez utiliser à la fois Jeep et Lexus pour traverser une route marécageuse, mais utiliser la première fait moins mal « .
  • Japprécie votre opinion, mais je maintiens que Fortran nest ‘ t aussi évolué que le C ++: -)

Réponse

Trois faits:

  • style F77 à n dimensions tableaux en C: aucun problème lors de lutilisation de CnD (un plug sans vergogne, certes)

  • F90 « s module system est mal conçu et hostile à la construction denvironnements. (Le nom dun module ne doit pas nécessairement correspondre à son nom de fichier, par exemple)

  • Fortran ne prend pas bien en charge la refactorisation. Extraire quelques fonctionnalités dune fonction vous oblige à toucher quatre endroits: le code réel, les déclarations de variables, les déclarations darguments et la liste darguments. C se débrouille avec deux endroits à toucher. Cela aggrave leffet de léchec de la gestion des données (desc nervuré ci-dessous): Comme la modularité à petite échelle est si pénible, presque tout le monde écrit des sous-programmes gigantesques.

Une impression personnelle:

  • Fortran ne fonctionne pas bien pour la gestion des données. Essayez de renvoyer un pointeur vers une structure de données opaque par lutilisateur dans F77 ou F90. (transfer(), nous y voilà)

Commentaires

  • Salut Andreas! CnD est intéressant, je ne savais pas ‘. Ah, vous lavez écrit. 🙂 (f90 prend également en charge le découpage, allouable pour les tableaux et surtout – la syntaxe de tableau pour la multiplication, laddition, etc.) Jutilise CMake avec Fortran et cela fonctionne très bien avec les modules.Quest-ce que la  » liste darguments  » exactement? Je ne ‘ pas penser que je les utilise, donc seulement 3 endroits sont nécessaires pour modifier. En C, vous devez généralement modifier le code réel, les paramètres et un fichier den-tête, de sorte quil ‘ se trouve également à 3 emplacements (très certainement en C ++). Oui, transfer () nest ‘ t super sympa, mais en général, vous nen avez ‘ pas besoin en pratique.
  • Refactoriser le fortran moderne est trivial avec les IDE appropriés, comme Photran dans eclipse.
  •  » Un module ‘ nom ne doit pas ‘ correspondre à son nom de fichier, par exemple  » Vous devez plaisanter, vous pouvez avoir plusieurs modules dans un fichier. Certains dentre eux ne sétendent que sur quelques lignes. Ils sont beaucoup plus faciles à créer si vous navez pas à créer de fichier pour chacun deux.
  • Je voulais juste ajouter à ce que @ user389 a dit que, alors que Photran est génial et est le seul Fortran IDE qui permet refactorings, son analyseur échoue tout le temps. Dun autre côté, il ny a ‘ pas besoin de commenter le fait quEclipse est gourmande en mémoire.

Réponse

Fortran est optimisé pour les calculs de tableaux / matrices et est une tâche difficile à utiliser pour tout type danalyse de texte. C et C ++ peuvent ne pas correspondre à Fortran en calcul numérique (cest proche), mais je trouve quil est beaucoup plus facile de traiter du texte et dorganiser des données (cest-à-dire des structures de données personnalisées) avec C / C ++.

Comme dautres ont mentionné, ne comptez pas les langages interprétés dynamiques (Python et al). Ils noffrent peut-être pas la vitesse de fusion du visage de Fortan, mais ils vous permettent de vous concentrer davantage sur la résolution de votre problème de calcul que sur tous les détails de la mise en œuvre. Souvent, vous pouvez implémenter une solution en Python, et si les performances sont inacceptables, effectuez un profilage, identifiez les zones à problèmes et optimisez ce code à laide de Cython ou ré-implémentez lensemble du programme dans un langage compilé. Une fois que vous avez étoffé la logique de résolution de problèmes, le reste nest que la mise en œuvre et, avec une bonne compréhension des principes de base de linformatique, devrait être simple à représenter dans nimporte quelle variété de langages de programmation.

Commentaires

  • Cest ‘ qui a raison. Pour lanalyse de texte, jutilise également Python.
  • Vous pouvez également implémenter une partie dun script Python dans un langage compilé, par exemple C ++ et accrochez-le. Par exemple. Boost Python, Swig, etc.

Réponse

Je « travaille actuellement dans lun des laboratoires nationaux. La plupart des gens autour de moi sont des ingénieurs en mécanique. En discutant avec certains des membres des groupes HPC, ils font principalement Linux et surtout C ++. Le groupe dans lequel je suis actuellement fait principalement des applications de bureau et nous utilisons Windows et dans lordre décroissant: C #, FORTRAN, Python, VBA et VB (6, pas .NET). Certains des les moteurs de simulation que nous utilisons ont été écrits dans dautres laboratoires nationaux de FORTRAN.

Réponse

Désolé davoir déterré un vieux fil mais il semble que même en 2015, Fortran soit beaucoup utilisé.

Je viens de tomber sur ceci (alternative link ) qui est essentiellement une liste de 13 codes approuvés par le service OCLF du DOE pour fonctionner sur la machine 300-petaFLOPS Summit qui sera mise à la disposition des chercheurs en 2018 . Jai essayé de trouver la langue principale utilisée pour le code (sur la base dune recherche rapide sur Google) et voici ce que jai trouvé:

XGC Fortran SPECFEM Fortran ACME Fortran (Bunch of climate codes) DIRAC Fortran (Mostly) FLASH Fortran GTC Fortran HACC C/C++ LS-DALTON Fortran (some C) NAMD C/C++ NUCCOR Fortran NWCHEM Fortran QMCPACK C++ RAPTOR Fortran 

Donc sur 13 codes, au moins 10 (daprès ma recherche rapide) semblent être écrits en Fortran. Pas mal pour une langue de 50 ans.

NOTE: Je suis bien conscient que les comparaisons de langues sont inutiles mais étant donné le nombre de personnes (spécialement les utilisateurs de C ++) qui font la mauvaise bouche à Fortran, jai pensé quil pourrait être utile de le mentionner.

Commentaires

  • Je ne suis pas daccord, car mon expérience dans les laboratoires nationaux a été le contraire. La plupart des nouveaux projets que je vois chez Lawrence Livermore sont écrits en C ++, et la plupart des nouvelles bibliothèques open source (ou activement maintenues) de pointe dans les solveurs ODE, les discrétisations FEM et les bibliothèques de calcul scientifique à usage général semblent être en C ou C ++. Fortran semble être principalement utilisé dans les projets qui utilisent des bibliothèques existantes / héritées; Je ‘ ne vois pas beaucoup de grands et nouveaux projets utilisant Fortran, indépendamment de ce que je pense du langage.
  • Quelques codes de théorie fonctionnelle de la densité également écrits en Fortran inclut VASP et CASTEP , mais comme le souligne @GeoffOxberry, nouveau les projets tendent peut-être vers le C ++.
  • @blochwave Comme vous pouvez le lire dans le lien, les projets concernent une nouvelle machine (avec accélérateurs, etc.) qui sera en ligne en 2018.Ce nest donc pas comme sils prenaient un code de 25 ans et le compilaient, dans lespoir de fonctionner avec de bonnes performances. Je suis sûr que de grandes parties des codes de la liste ci-dessus ont été ou sont réécrites, comme dans le nouveau code. Un certain nombre de  » nouveaux  » codes climatiques sont également à Fortran et utilisés par de nombreuses agences dans un certain nombre de pays.

Réponse

Ce que Jack P. essaie de dire, je pense, cest que vous devez mélanger et assortir. Un bon logiciel est soigneusement superposé. Différentes couches peuvent être mappées plus naturellement ou plus efficacement vers différentes langues. Vous devez choisir la langue la plus appropriée pour chaque couche. Vous devez également comprendre comment les langues peuvent interagir, ce qui peut affecter la langue que vous choisissez pour quelle couche.

Une meilleure question est de savoir quels sont les exemples de logiciels parfaitement conçus qui valent la peine dêtre étudiés pour apprendre à concevoir des logiciels en couches.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *