1 ポイント 投稿者 GN⁺ 2024-04-07 | 1件のコメント | WhatsAppで共有

FortranとWebAssemblyの組み合わせ

  • Fortranは1957年に初めて登場した古いプログラミング言語で、C言語、Intel 4004 CPU、IBM System/360メインフレームよりも古い。
  • Fortranは科学・工学アプリケーションにおける計算集約的な作業に使われてきており、数値演算ではCより効率的だと考えられることもある。
  • このブログ記事では、既存のFortranコードをWebAssemblyにコンパイルしてWebブラウザで実行できるようにする方法を説明している。

問題は何か?

  • FortranをWebAssemblyにコンパイルする方法はいくつかあるが、すべての機能を完全にサポートする方法はない。
  • どの方法にも欠点があり、簡単なプラグアンドプレイの解決策ではない。

コンパイラの要約

  • LLVMベースのFortranコンパイラにはいくつかの変化があった。
  • f2cユーティリティはFortran 77をCコードに変換するが、現代的なFortranコードとは互換性がない。
  • LFortranコンパイラは多くの機能をサポートするようになったが、それでも一部のプロジェクトでは問題が発生する可能性がある。
  • DragoneggはGCCのプラグインとしてLLVM IRを生成するが、古いバージョンのGCCとLLVMが必要になる。
  • Classic Flangは32ビット出力をサポートしておらず、LLVM Flangも現時点ではWebAssembly出力を標準では生成しない。

LLVM FlangでWebAssemblyをビルドして使う

  • LLVM Flangのソースを修正してWebAssemblyターゲットを実装する必要がある。
  • LLVMのモジュール式設計を活用することで、FlangフロントエンドとWebAssemblyバックエンドを利用できる。

FortranサブルーチンをCから呼び出す

  • FortranサブルーチンをCプログラムの一部としてコンパイル・リンクする方法をおさらいしている。

LLVM Flangに戻る

  • LLVM Flangコンパイラを使ってFortranサブルーチンをコンパイルできるが、WebAssemblyターゲットがまだ実装されていないため、ソースコードにパッチを当てる必要がある。

FortranルーチンをJavaScriptから呼び出す

  • Emscriptenを使ってFortranオブジェクトをリンクし、JavaScriptから直接呼び出せる。

Fortranランタイムライブラリ: "Hello, World!"への道のり

  • Fortranで"Hello, World!"プログラムをビルドしようとしたときに発生する問題を説明している。
  • LLVM FortranランタイムライブラリをWebAssembly向けにコンパイルする必要がある。

GN⁺の意見

  • この記事は、Fortranのような伝統的な言語を現代のWeb技術と統合しようとする試みを示している。このようなアプローチは、既存の実績ある数値計算ライブラリをWebへ持ち込むうえで有用になりうる。
  • FortranをWebAssemblyにコンパイルする過程は、既存コードベースを新しいプラットフォームへ移植する際の課題をよく示している。特にクロスコンパイルに関する問題は、他の言語やプラットフォームへの移植でも重要な検討事項となる。
  • この技術は興味深いものの、実際にWeb上で高性能を要求する数値計算を行うことには、依然として実用上の限界がある。WebAssemblyはまだ従来のネイティブアプリケーション並みの性能を常に提供できるとは限らない。
  • LLVM Flangの開発は非常に活発であり、こうした開発努力はFortranコミュニティに好影響をもたらすと期待される。ただし、この記事で言及されているさまざまな問題点は、なお解決すべき課題があることを示している。
  • この記事は、FortranをWeb技術と統合しようとする開発者に有用な情報を提供しており、特に数値解析や科学計算分野でWebベースのツール開発を検討している人に役立つだろう。

1件のコメント

 
GN⁺ 2024-04-07
Hacker Newsの意見
  • ジョージがWebブラウザでRを実行するためにWebRプロジェクトに参加し、Fortranについて調べた内容

    • Rのソースコードにはかなりの量のFortranコードが含まれている
    • もともとWebRはFortranをCに変換するf2cを使っていたが、LLVM Flangへのパッチにより本物のFortranコンパイラでビルド可能になった
    • ジョージはブログ記事で直接は言及していないが、Flangが彼のパッチを取り込むか、より良いパッチを実装してくれることを期待している
    • このようなパッチを別途保守する必要がなくなり、無改変のFlangがwasmへコンパイルできるようになれば、Fortranを使うほかのプロジェクトにも役立つだろう
  • 20年前にXilinxでFORTRANコンパイラの作業をしていた経験

    • 印象に残っているのは、f2c.hヘッダーファイルにbarfという定義が含まれていたこと
  • LLVMプロジェクトの最新ソースを使ってf18をビルドすることを推奨

    • LLVMプロジェクトの進みは速く、すでに解決済みの問題をデバッグしたり、すでに実装されている機能を見落としたりするのは時間の無駄だと述べている
  • 「最も単純な非自明の例」というアプローチによる説明の仕方への称賛

    • 具体的な問題である「JavaScriptからBLAS関数を呼び出すこと」を基に、多くを学べたという
  • WebAssembly開発に関する知識不足への言及

    • WebAssemblyが現在の利用者に何か提供できるものがあるのか、それともすべてが真に移植可能なプログラムの未来に向けた土台作りなのか気になっている
    • WebAssemblyはネットワークやファイルアクセスの制限に役立つという話を聞いたが、それが理論上の話なのか実際に実装されているのかはよく分からない
  • JavaScriptにおける線形代数向けの「本番運用」対応のエコシステムが存在するかという質問

    • 検索すると、古いライブラリがJavaScriptへ移植されたものをよく見かけるが、何か見落としているものがあるのか気になっている
  • 1981/82年に書いたFortran 78コードを保管していれば、今これを実行できるか試してみたかったという意見

    • 当時はFortranを使うしかなかったJovialプログラミング言語のソースコードフォーマッタにも言及
  • LFortranへの言及がもっと多くないのは不思議だとの指摘

    • LFortranはオンラインで優れた驚くべきWASMの例を提供している
  • .NETとJavaでのFortran利用に関する情報提供

    • 関連リンクを通じて、Fortranが.NETとJavaで利用できることを示している
  • TensorFlowをブラウザ向けにコンパイルした作業経験の共有

    • TensorFlowはEigenを使っていたため、Fortranで書かれた有名な数学ライブラリ(BLAS、Lapack)を使わずに済み、はるかに多くの作業を避けられたことに感謝している