1 points par GN⁺ 2024-04-07 | 1 commentaires | Partager sur WhatsApp

L’alliance de Fortran et de WebAssembly

  • Fortran est un ancien langage de programmation apparu pour la première fois en 1957, plus ancien que le langage C, le CPU Intel 4004 et les ordinateurs mainframe IBM System/360.
  • Fortran a été utilisé pour des tâches intensives en calcul dans les applications scientifiques et d’ingénierie, et certains le considèrent plus efficace que C pour les calculs numériques.
  • Ce billet de blog explique comment compiler du code Fortran existant vers WebAssembly afin de l’exécuter dans un navigateur web.

Quel est le problème ?

  • Il existe différentes façons de compiler Fortran vers WebAssembly, mais aucune ne prend parfaitement en charge toutes les fonctionnalités.
  • Chaque méthode a ses inconvénients, et il ne s’agit pas d’une solution simple de type plug-and-play.

Résumé des compilateurs

  • Il y a eu quelques évolutions autour des compilateurs Fortran basés sur LLVM.
  • L’utilitaire f2c convertit Fortran 77 en code C, mais n’est pas compatible avec le code Fortran moderne.
  • Le compilateur LFortran prend désormais en charge de nombreuses fonctionnalités, mais peut encore poser problème sur certains projets.
  • Dragonegg est un plugin pour GCC qui génère de l’IR LLVM, mais il nécessite d’anciennes versions de GCC et de LLVM.
  • Classic Flang ne prend pas en charge la sortie 32 bits, et LLVM Flang ne génère actuellement pas de sortie WebAssembly par défaut.

Construire et utiliser WebAssembly avec LLVM Flang

  • Il faut modifier les sources de LLVM Flang pour implémenter la cible WebAssembly.
  • On peut exploiter la conception modulaire de LLVM pour utiliser le frontend Flang et le backend WebAssembly.

Appeler une sous-routine Fortran depuis C

  • L’article revient sur la manière de compiler et de lier une sous-routine Fortran comme partie d’un programme C.

Retour à LLVM Flang

  • Il est possible de compiler des sous-routines Fortran avec le compilateur LLVM Flang, mais comme la cible WebAssembly n’est pas encore implémentée, il faut appliquer un patch au code source.

Appeler des routines Fortran depuis JavaScript

  • On peut utiliser Emscripten pour lier des objets Fortran et les appeler directement depuis JavaScript.

Bibliothèque d’exécution Fortran : le chemin vers "Hello, World!"

  • L’article décrit les problèmes qui surviennent lorsqu’on essaie de construire un programme "Hello, World!" en Fortran.
  • Il faut compiler la bibliothèque d’exécution Fortran de LLVM pour WebAssembly.

L’avis de GN⁺

  • Cet article montre une tentative d’intégrer un langage traditionnel comme Fortran aux technologies web modernes. Une telle approche peut être utile pour apporter sur le web des bibliothèques de calcul numérique existantes et éprouvées.
  • Le processus de compilation de Fortran vers WebAssembly illustre bien les défis liés au portage d’une base de code existante vers une nouvelle plateforme. Les problèmes liés à la cross-compilation sont notamment des éléments importants à prendre en compte pour tout portage vers un autre langage ou une autre plateforme.
  • Même si cette technologie est intéressante, exécuter sur le web des calculs numériques exigeant de hautes performances présente encore des limites pratiques. WebAssembly ne fournit pas encore forcément le même niveau de performance que les applications natives traditionnelles.
  • Le développement de LLVM Flang est très actif, et ces efforts devraient avoir un impact positif sur la communauté Fortran. Cependant, les différents problèmes mentionnés dans l’article montrent aussi qu’il reste des défis à résoudre.
  • Cet article fournit des informations utiles aux développeurs qui cherchent à intégrer Fortran aux technologies web, en particulier à ceux qui envisagent de développer des outils web dans les domaines de l’analyse numérique ou du calcul scientifique.

1 commentaires

 
GN⁺ 2024-04-07
Commentaires Hacker News
  • George a étudié Fortran en participant au projet WebR pour exécuter R dans le navigateur

    • Le code source de R contient une quantité importante de code Fortran
    • À l’origine, WebR utilisait f2c, qui convertit Fortran en C, mais grâce à des patches pour LLVM Flang, il est désormais possible de le construire avec un vrai compilateur Fortran
    • George ne l’a pas mentionné directement dans son billet de blog, mais il espère que Flang acceptera ses patches ou mettra en œuvre de meilleurs patches
    • Si de tels patches n’avaient plus besoin d’être maintenus séparément et qu’un Flang non modifié pouvait compiler vers wasm, cela aiderait aussi d’autres projets utilisant Fortran
  • Retour d’expérience sur un travail de compilation FORTRAN chez Xilinx il y a 20 ans

    • Ce qui est resté en mémoire, c’est que le fichier d’en-tête f2c.h contenait une définition nommée barf
  • Recommandation de construire f18 à partir des sources les plus récentes du projet LLVM

    • Le projet LLVM évolue vite, et il est mentionné que perdre du temps à déboguer des problèmes déjà résolus ou à passer à côté de fonctionnalités déjà implémentées est inutile
  • Éloges pour la manière d’expliquer via l’approche du « plus simple exemple non trivial »

    • Il dit avoir beaucoup appris à partir d’un problème concret : « appeler des fonctions BLAS depuis JavaScript »
  • Mention d’un manque de connaissances sur le développement WebAssembly

    • Il se demande si WebAssembly a aujourd’hui quelque chose à offrir aux utilisateurs finaux, ou si tout cela sert surtout à poser les bases d’un avenir de programmes réellement portables
    • Il a entendu dire que WebAssembly aide à restreindre l’accès au réseau et aux fichiers, mais il n’est pas sûr qu’il s’agisse d’un point théorique ou d’une réalité effectivement mise en œuvre
  • Question sur l’existence d’un écosystème prêt pour la « production » pour l’algèbre linéaire en JavaScript

    • En cherchant sur Google, il tombe souvent sur d’anciennes bibliothèques portées en JavaScript, et se demande s’il lui manque quelque chose
  • Avis disant que s’il avait conservé du code Fortran 78 écrit en 1981/82, il aimerait voir s’il serait possible de l’exécuter aujourd’hui

    • Mention d’un formateur de code source pour le langage de programmation Jovial, pour lequel il n’avait à l’époque pas d’autre choix que d’utiliser Fortran
  • Remarque disant qu’il est étrange qu’il n’y ait pas davantage de mentions de LFortran

    • LFortran propose en ligne d’excellents et étonnants exemples en WASM
  • Informations sur l’usage de Fortran dans .NET et Java

    • Cela indique, via des liens associés, que Fortran peut être utilisé dans .NET et Java
  • Partage d’expérience sur la compilation de TensorFlow pour le navigateur

    • TensorFlow utilisant Eigen, cela a heureusement évité beaucoup de travail supplémentaire qui aurait été nécessaire avec des bibliothèques mathématiques populaires écrites en Fortran (BLAS, Lapack)