
2026/05/16 18:50
「Futhark」の入門指南
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Futhark は、GPU 実験を目的に設計された IT ランゲージであり、「Parallel Programming in Futhark」書籍および基本計算から複雑な科学シミュレーションに至る厳選された例を通じて、単純なプログラムから高度な並列計算プロジェクトまでの構造化された学習経路を提供しています。汎用言語とは異なり、多様な例(图形処理:「Diving Beet 粒子シミュレーター」、高パフォーマンスシステム:「Futball のボール衝突回避」、フラクタル:「Futswirl」、モンテカルロ法による πの推定)を通じてハードウェアアクセラレーションへの直感的理解を提供します。言語エコシステムは、Dex(依存型 typed フルンシャル配列言語)からのポートによって恩恵を受け、初心者がインタラクティブなウェブカメラフィルター(Futcam)やブルートフォースレイトレーサー(Futracer)を構築するための堅牢な基盤を提供しています。主な機能には、自動微分、アレイ、タプル、レコード、並列処理、総和型、ループ、そして AD ベンチマーク行列乗算、Radix/Merge ソート、複素数、乱数、ガウシアンぼかしなどの高度なトピック、および Python インテグレーションが含まれます。Literate Futhark は、ビデオ生成、ファイル I/O、gnuplot プロットングをサポートします。科学計算の例には、格子ボルツマン法(Palathark)、Peter Shirley のレイ 트레이シング書籍、Filecoin 用の Poseidon ハッシュ関数を実装する Neptune などがあります。OCaml-GPU ワードカウント例などの外部ツールは相互運用性を示し、Pareas コンパイラやリアルタイム非実装の BVH レイトレーシングなどの高度なプロジェクトは専門的なアプリケーションを強調しています。究極的には、Futhark は理論的なコンピュータサイエンスと実用的な GPU 利用を結びつけ、単純なスクリプトから高パフォーマンスシミュレーションまでを容易に可能にします。
本文
以下は、注釈付きプログラムのコレクションを通じて実践的に Futhark を紹介するものです。これらプログラムは、概ね複雑さが増す順に並んでいます。これらのプログラムをインタプリタに読み込んで実行し、試してみることをお勧めします。言語についての体系的な導入としては、『Futhark における並行プログラミング』がより適しているかもしれません。さらに多くの例をお求めの場合は、我々が実装したベンチマークもご参照ください。また、Futhark を採用しているプロジェクトのリストも Maintaining しております。いくつかの実例プログラムでは、プロットやグラフィックの描画のためのディレクティブを使用しています。
基本言語機能
- ファクターIAL 関数を用いた基本的な使用法
- プライミティブ値
- 異なる型へ値の変換
- 数学関数
- 関数(第 1 級)
- アレイ(配列)
- 最小値と最大値
- 型アスペクション(型注釈)
- 基本的な並行性
- タプルとレコード
- サイズ強制変換(size coercions)
- リージョン(範囲)
- バッククォート演算子
- スキャンと削減計算
- パラメトリック多態性
- 多態的な最小値と最大値
- ガザーとスカッター(収集と散開)
- 排他的スキャン(exclusive scans)
- 排他的累積和(前項和)
- パイプ演算子
- 複合リージョン
- 和型(Sum types)とパターンマッチング
- ループ
- アレイの扁平化・再構成(Flattening and Unflattening)
- インプレース更新(In-place updates)
プログラミング技法
- ベンチマーク実行
- 条件を満たす要素数のカウント
- 最小値のインデックス取得(argmin)
- フィルタ結果の削減計算
- フィルタ結果の散開計算
- サイズパラメータ
- 行列乗算
- ペアワイズ L₁距離の計算
- アウトプロダクト(外積)
- アレイの等価性比較
- 探索(サーチ)
- オプション型(Option type)
- ヒストグラム計算
- 移動平均
- 平均値(Means)
- アレイ内の 2 つの要素交換
- 整数対数(integer logarithm)
- レジッドソート
- キーによるレジッドソート
- メージソート
- 重複要素の除去
- 抽象データ型
- 複素数
- 結合律の検出
- 単位元を必要としない削減・スキャン計算
- ホール(穴埋め)
- カハン総和法
- ランダム数生成
- ガウシアンぼかし(Python との統合例)
- 3 次元ベクトル
- ノミナル型の模倣
- 三角行列
- バイナリサーチ
- デュアル数を用いた自動微分(AD)
- 分散計算
- 括弧のマッチングチェック
- 多項式の評価
- 直線フィッティング
- MNIST データファイルのデコード
自動微分
- フォワードモードの自動微分
- リバースモードの自動微分
- ニュートン法
リテラット・フサート(Literate Futhark)
- リテラット・フサートの基本的な利用法
- リテラット・フサートによるビデオ生成
- リテラット・フサートを用いたファイルの読み書き
プロッティング リテラット・フサートでは gnuplot を直接使用できます。以下は簡潔で一般的なケースを示す例です。
- ヒストグラムのプロット
Dex からの移植例 以下の例は、ループ処理を記述する方法がやや異なる依存型付関数型アレイ言語「Dex」からポートされたものです。可能な限り、元の命名規則とプログラミングスタイルを保つよう尽力しました。
- Prelude(予備定義)
- マンデルブロ集合の生成
- 多段階のレイトレーサー
- モンテカルロ法による円周率の推定
- ブラウン運動のシミュレーション
- シエフスキィ三角形の生成
外部から引用された例
- OCaml-GPU による単語数カウント(Futhark を呼び出す例)
Futhark を使用するプロジェクト 書かれた Futhark コードの大部分はまだ、Futhark の自テストスイートやベンチマークスイートに過ぎない可能性があります。しかし、コンパイラのテスト以外の目的で、「このツールが課題に適している」と判断されて Futhark で記述されたプログラムも存在します。以下は可能な限り網羅したリストです:
- Diving Beet: 落下する砂をシミュレートするシンプルなパーティクル・シミュレータ・トーイであり、主に美しいビジュアル効果を生み出すことを目的としています。詳細と動画はブログ記事で確認できます。
- Futball: ボールに当たらないよう回避するゲームです。レンダリングエンジンは Futhark で書かれたレイトレーサーです。
- Futcam: ウェブカメラストリームに、インタラクティブに設定可能なフィルタのスタックを適用するアプリケーションであり、フィルタの実装に Futhark を使用しています。
- Futracer: 比較的低速ですが完全な力によるレイトレーサーで、Futhark で実装されています。
- Futswirl: イテレート関数系に基づくフラクタルジェネレーターです。
- Neptune: Filecoin を対象にチューニングされた Poseidon ハッシュ関数の実装で、GPU 部分は Futhark で実装されています。
- Palathark: 格子ボルツマン法の実装(Futhark ベース)。
- 「週末でレイトレーシング in Futhark」と「The Next Week in Futhark」: Peter Shirley の書籍シリーズに基づく実装です。これらはリアルタイムレイトレーサーではありませんが、高度なエフェクトをサポートし、BVH トリートなどの加速構造を活用しています。
- Pareas: Futhark と C++ で実装されたコンパイラです。