Fortran vs C ++, Fortran a-t-il encore un avantage dans l’parsing numérique de nos jours?

Avec le développement rapide des compilateurs C ++, en particulier des compilateurs Intel, et la possibilité d’appliquer directement les fonctions SIMD dans vos codes C / C ++, Fortran conserve-t-il un réel avantage dans le monde des calculs numériques?

Je travaille dans le domaine des mathématiques appliquées, mon travail implique beaucoup d’parsings numériques, de calculs, d’optimisations, etc., avec une exigence de performance ssortingctement définie.

Je ne connais presque rien à Fortran, j’ai une certaine expérience en C / CUDA / matlab (si vous considérez ce dernier comme un langage informatique pour commencer), et ma tâche quotidienne implique l’parsing de très grandes données (par exemple, une masortingce de 10 Go), et il semble que le programme consacre au moins les 2/3 de son temps à l’access à la mémoire (c’est pour cela que j’envoie une partie de son travail au GPU), est-ce que vous pensez qu’il vaut la peine d’essayer la routine fortran au moins une partie critique de mes codes pour améliorer les performances de mon programme?

Parce que la complexité et les choses doivent être faites, je ne ferai que cette routine si seulement il y a un avantage significatif en termes de performance, merci d’avance.

Fortran a une sémantique ssortingcte d’alias par rapport à C ++ et a été ajusté de manière agressive pour des performances numériques pendant des décennies. Les algorithmes qui utilisent le processeur pour travailler avec des tableaux de données peuvent souvent bénéficier d’une implémentation Fortran.

La prise de vue des langages de programmation ne doit pas être prise trop au sérieux, mais sur les 15 tests de performance, Fortran occupe la première place pour la vitesse sur quatre d’entre eux (pour Intel Q6600 un cœur), plus que toute autre langue. Vous pouvez voir que les points de référence où Fortran brille sont les plus numériques:

  • norme spectrale 27% plus rapide
  • fasta 67% plus rapide
  • mandelbrot 56% plus rapide
  • Pidigits 18% plus rapide

Contre-exemple:

  • k-nucleotide 500% plus lent (cette référence se concentre principalement sur des structures de données plus sophistiquées et le traitement de chaînes, ce qui n’est pas la force de Fortran)

Vous pouvez également voir une page de résumé ” combien de fois plus lente ” qui montre que de toutes les implémentations, le code Fortran est en moyenne le plus proche de l’implémentation la plus rapide pour chaque benchmark – bien que les barres de quantile n’est pas adapté à certaines tâches pour lesquelles C ++ est bon, mais vous devriez déjà le savoir.

Donc, les questions que vous devrez vous poser sont les suivantes:

  1. La rapidité de cette fonction est-elle si critique que sa réimplémentation dans Fortran vaut mon temps?

  2. La performance est-elle si importante que mon investissement dans l’apprentissage de Fortran sera rentable?

  3. Est-il possible d’utiliser une bibliothèque comme ATLAS au lieu d’écrire le code moi-même?

Répondre à ces questions nécessiterait une connaissance approfondie de votre base de code et de votre modèle d’entreprise, donc je ne peux pas y répondre. Mais oui, les implémentations Fortran sont souvent plus rapides que les implémentations C ++.

Un autre facteur dans votre décision est la quantité de code échantillon et la quantité d’implémentations de référence disponibles. La forte histoire de Fortran signifie qu’il existe une multitude de codes numériques à télécharger et même lors d’un voyage à la bibliothèque. Comme toujours, vous devrez passer au crible pour trouver les bonnes choses.

La réponse complète et correcte à votre question est: “oui, Fortran présente certains avantages”.

C ++ offre également des avantages différents. Il en va de même pour Python, R, etc. Ce sont des langues différentes. Il est plus facile et plus rapide de faire certaines choses dans une langue et d’autres dans d’autres. Tous sont largement utilisés dans leurs communautés et pour de très bonnes raisons.

Toute autre chose, en l’absence de questions plus spécifiques, n’est que bruit et langage-appât, et c’est pourquoi j’ai voté pour clore la question et espérer que les autres le feront aussi.

Fortran est tout simplement adapté à la programmation numérique. Vous avez tendance à avoir un grand nombre de numéros dans ces programmes, généralement des tableaux arrangés. Les tableaux sont des citoyens de première classe dans Fortran et il est souvent assez simple de traduire les kernelx numériques de Matlab dans Fortran. En ce qui concerne les avantages potentiels en termes de performances, reportez-vous aux autres réponses, qui couvrent cela très bien. La base de référence est probablement que vous pouvez créer des applications numériques hautement efficaces avec la plupart des langages compilés aujourd’hui, mais vous pouvez sauter quelques boucles pour y arriver. Fortran a été soigneusement conçu pour permettre au compilateur de reconnaître la plupart des points d’optimisation, en raison des fonctionnalités du langage. Bien sûr, vous pouvez aussi écrire du code lent arbitraire avec n’importe quel langage compilé, y compris Fortran. Dans tous les cas, vous devez choisir les outils appropriés. Fortran convient aux applications numériques, C convient au développement lié au système. Sur une remarque finale, apprendre les bases de Fortran n’est pas difficile, et cela vaut toujours la peine de regarder dans d’autres langues. Cela ouvre une vue différente sur les problèmes que vous souhaitez résoudre.

Il convient également de mentionner que Fortran est beaucoup plus facile à maîsortingser que C ++. En fait, Fortran a une spécification de langage plus courte que la version C simple et sa syntaxe est sans doute plus simple. Vous pouvez le récupérer très rapidement.

Cela signifie que si vous êtes seulement intéressé par C ++ ou Fortran pour résoudre un problème spécifique que vous avez actuellement (par exemple, pour accélérer les goulots d’étranglement dans un langage de prototypage), Fortran pourrait vous offrir un meilleur retour sur investissement. .

Le code Fortran est préférable pour les opérations de type masortingciel et vectoriel en général. Mais vous pouvez également produire des performances similaires avec du code c / c ++ en transmettant des astuces / suggestions au compilateur pour produire des instructions vectorielles de qualité similaire. Une option qui m’a donné un bon coup de pouce était de ne pas prendre en compte l’alias de mémoire parmi les variables d’entrée qui sont des objects de tableau. De cette façon, le compilateur peut effectuer de manière agressive le déroulement et le traitement en pipeline de la boucle interne, où il peut chevaucher des charges et stocker des opérations sur des itérations de boucles avec des préfacetages à droite.