
2026/05/16 22:42
加速——高演算能力向けの埋め込み型言語による配列計算
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Data.Array.Accelerate は、マップ、リダクション、置換などのパラメータ付き集団演算を用いて、多次元の規則的な配列に対する高性能計算のための埋め込み言語を定義する。同ライブラリは LLVM PTX を用いた NVIDIA GPU(グラフィックス処理ユニット)における CUDA 対応のコンパイル機能を有し、最適化機能として robust な性能を発揮する。また、マルチコア CPU 上での実行も可能である。Hackage および GitHub(AccelerateHS/accelerate)からアクセス可能で、インストールには GHCup ツールチェーンが用いられる。BLAS や FFT などの科学計算エコシステムとシームレスに統合される。エコシステムには
accelerate-llvm-native(CPU)、accelerate-llvm-ptx(GPU)、accelerate-bignum、accelerate-fft、accelerate-blas など、ドメイン固有のツールや各種 I/O ユーティリティ(accelerate-io*)などを含む多数の追加パッケージが含まれる。使用可能な例は多岐にわたり、単純な点積計算から LULESH ベンチマーク、分子動力学ソルバー、N-体シミュレーション、エッジ検出やレイ・トレーシングなどのグラフィックスアプリケーションまでをカバーする。プロジェクトはコア開発者である Trevor McDonell および Manuel Chakravarty の指導のもと、より広いコミュニティによって支えられており、継続的な新機能の統合と要望された機能の実装を通じて、迅速なイノベーションを可能にする動的な環境を提供する。ただし、API はまだ安定していない点に注意が必要であり、完全な成熟に至るまでインターフェースの一部は変更の対象となり得るため、ライブラリの進化に合わせてコードの適応が求められる。
Text to translate:
Data.Array.Accelerate defines an embedded language for high-performance computing on multi-dimensional regular arrays using parameterised collective operations like maps, reductions, and permutations. It compiles computations online to run on multicore CPUs or CUDA-enabled NVIDIA GPUs (compute capability 3.0+), utilizing LLVM PTX for graphics processing units as part of its robust optimization capabilities. The library is accessible via Hackage and GitHub (AccelerateHS/accelerate) and relies on the GHCup toolchain for installation, integrating seamlessly with scientific ecosystems like BLAS and FFT. Its ecosystem includes extensive add-on packages such as
accelerate-llvm-native for CPUs, accelerate-llvm-ptx for GPUs, and domain-specific tools like accelerate-bignum, accelerate-fft, accelerate-blas, and various I/O utilities (accelerate-io*). Users can leverage this framework with a vast array of examples ranging from simple tasks like dot products to complex benchmarks including LULESH, molecular dynamics solvers, N-body simulations, and graphics applications like edge detection and ray-tracing. Led by core developers Trevor McDonell and Manuel Chakravarty along with the broader community, the project supports a dynamic environment for rapid innovation through continuous integration of new capabilities and requested features. However, users should note that the API is not yet stable; parts of the interface remain subject to change before full maturity is reached, requiring developers to adapt their code as the library evolves.本文
高速並列配列のための Haskell
Data.Array.Accelerate は、Haskell における高性能計算向けに配列計算の埋め込み言語を定義しています。多次元の規則的な配列に対する計算は、パラメータ付きの集団演算(例:マッピング、演算子簡約、置換)の形式で表現されます。これらの計算はオンラインコンパイルされ、多様なアーキテクチャ上で実行可能です。
詳細については以下の論文をご覧ください:
- 「Multicore GPUs を用いた Haskell 配列コードの高速化」
- 「純粋関数型 GPU プログラムの最適化(スライド)」
- 「外部コードの埋め込み」
- 「型安全なランタイムコード生成:Accelerate から LLVM へ(スライド)」「同会議でのビデオ発表」
- 「ストリーミング非規則配列(ビデオ)」
また、Accelerate に関するいくつかのパッチェンのスライドもあります:
- 「Haskell における高性能計算のための埋め込み言語」
- 「Accelerate を用いた Haskell による GPGPU プログラミング(スライド)」「同ワークショップでのビデオ発表」
Simon Marlow 著の書「Parallel and Concurrent Programming in Haskell」第 6 章には、Accelerate のチュートリアル紹介が収められています。Trevor L. McDonell 氏による博士論文には、フロントエンド最適化および CUDA バックエンドに関する設計と実装の詳細が記載されています。
目次
- 高速化された配列計算のための埋め込み言語
- 簡単な例
- 入手可能性
- 追加コンポーネント
- 要件
- ドキュメント
- 事例
- 当チームは誰か?
- メーリングリストと連絡先
- Accelerate の引用について
- 尚未完の機能
A simple example(簡単な例)
まず、単精度浮動小数点数からなる 2 つのベクトルの内積を計算する事例を見てみましょう:
dotp :: Acc (Vector Float) -> Acc (Vector Float) -> Acc (Scalar Float) dotp xs ys = fold (+) 0 (zipWith (*) xs ys)
型定義を除けば、このコードはリスト(Float のリスト)に対する対応する Haskell コードとほとんど同じです。型指定は、当該計算がパフォーマンス向上のためにオンザフライでコンパイル可能であることを示しています。例えば、
Data.Array.Accelerate.LLVM.PTX.run を使用すれば、GPU への実行負荷をオンラインで行うことも可能です。
Availability(入手可能性)
Accelerate パッケージは以下の方法で入手できます:
- Hackage:
— Cabal ファイルに単独して追加するだけです。accelerate - GitHub: AccelerateHS/accelerate — ソースコードは
で取得可能です。git clone https://github.com/AccelerateHS/accelerate.git
Haskell ツールチェーンのインストールについては、GHCup をお試しください。
Additional components(追加コンポーネント)
以下のサポートされている拡張機能は、独立したパッケージとして入手できます:
- accelerate-llvm-native: マルチコア CPU をターゲットとするバックエンド
- accelerate-llvm-ptx: CUDA 対応 NVIDIA GPU をターゲットとするバックエンド。compute capability 3.0 以上を持つ GPU を必要とします(Wikipedia の表を参照ください)
- accelerate-examples: Accelerate の利用例を示す計算ケルノおよび完全なアプリケーション、並びにリグレッションテストスイート(関数テストおよびパフォーマンステスティングをサポート)
フォーマット間の変換用コンポーネント:
- accelerate-io: ローカルポインタ間への直接データコピー用
- accelerate-io-array: 不変配列向け
- accelerate-io-bmp: 圧縮されていない BMP イメージファイル向け
- accelerate-io-bytestring: コンパクトで不変のバイナリデータ向け
- accelerate-io-cereal: cereal を用いた配列のバイナリシリアライゼーション
- accelerate-io-JuicyPixels: 各種画素形式のイメージ向け
- accelerate-io-repa: もう一つの Haskell の高速並列配列ライブラリとの連携
- accelerate-io-serialise: serialise を用いた配列のバイナリシリアライゼーション
- accelerate-io-vector: 効率的なボックス化されたおよびアンボックス化された一次元配列向け
その他コンポーネント:
- accelerate-fft: FFT インプリメンテーション、最適化済みの実装に対する FFI バインディング付き
- accelerate-blas: BLAS および LAPACK 演算子、最適化済みの実装に対する FFI バインディング付き
- accelerate-bignum: 固定幅の大規模整数算術
- colour-accelerate: Accelerate におけるカラー表現(RGB、sRGB、HSV、HSL)
- containers-accelerate: ハッシングに基づくコンテナ型
- gloss-accelerate: Gloss イメージの生成
- gloss-raster-accelerate: リスターイメージおよびアニメーションへの並列レンダリング
- hashable-accelerate: ハッシュ値に変換できる型のクラス
- lens-accelerate: Accelerate 型に対するレンズ演算子
- linear-accelerate: Accelerate における線形ベクトル空間
- mwc-random-accelerate: 高品質擬似乱数で埋められた Accelerate 配列の生成
- numeric-prelude-accelerate: numeric-prelude の Accelerate への lifting
- wigner-ville-accelerate: Wigner-Ville タイム−周波数分布
これらすべては Hackage で入手可能です。
Documentation(ドキュメント)
Hackage に個別のパッケージリリースが提供される際、Haddock ドキュメントも添付されておりリンクされています。
また、ライブラリで使用されている HOAS(higher-order abstract syntax)による de-Bruijn 変換の背後にある考え方は、別途説明されています。
Examples(事例)
accelerate-examples
accelerate-examples パッケージは、計算ケルノの範囲と少数の完全アプリケーションを提供します。含まれる事例には:
- Canny エッジ検出アルゴリズムの実装
- 対話的なマンデルブロ集合ジェネレーター
- 固体粒子間の重力引力による N ボディシミュレーション
- PageRank アルゴリズムの実装
- シンプルなレイトラサ(ray-tracer)
- 安定流体流れのパーティクルベースシミュレーション
- セラリアオオトマタ(cellular automata)シミュレーション
- パスワードリカバリツール(MD5 ハッシュ辞書探索用)
これらを実行するには、Hackage から
cabal get accelerate-examples でソースを取得するか、git リポジトリをクローンし、個別の実行ファイルに対して cabal run を使用してください。
LULESH
LULESH-accelerate は、Livermore Unstructured Lagrangian Explicit Shock Hydrodynamics(LULESH)ミニアプリケーションの実装です。LULESH は ALE3D などの典型的な水力学コードを表しますが、非常に簡略化されたアプリケーションであり、非構造ヘキサメデッシュ上の Sedov 爆発問題をハードコーディングで解決するように設計されています。
追加事例
Accelerate ユーザー自身もいくつかの有意義なアプリケーションを構築しています。ご自身の事例を追加いただけると幸いです:
- Jonathan Fraser: GPUVAC — 明示的なアドベクションマグネトハイドロダイナミクスシミュレーション
- David van Balen: Sudokus — サンドク solver
- Trevor L. McDonell: lol-accelerate — Λ ○ λ(Lol)ライブラリ向けのリングベース格子暗号のバックエンド
- Henning Thielemann: patch-image — 重なり合うイメージのコラージュ合成
- apunktbau: bildpunkt — レイマーキング距離場レンダラー
- klarh: hasdy — Accelerate を用いた Haskell の分子動力学
- Alexandros Gremm: 2014 CSCS サマースクールの一部として Accelerate を使用(コード)
Who are we?(当チームは誰か?)
Accelerate チーム(過去のおよび現在のメンバー)は以下の通りです:
- Manuel M T Chakravarty (@mchakravarty)
- Gabriele Keller (@gckeller)
- Trevor L. McDonell (@tmcdonell)
- Robert Clifton-Everest (@robeverest)
- Frederik M. Madsen (@fmma)
- Ryan R. Newton (@rrnewton)
- Joshua Meredith (@JoshMeredith)
- Ben Lever (@blever)
- Sean Seefried (@sseefried)
- Ivo Gabe de Wolff (@ivogabe)
- Tom Smeding (@tomsmeding)
Accelerate の維持管理者および主要開発者は Trevor L. McDonell です(連絡先:trevor.mcdonell@gmail.com)。
Mailing list and contacts(メーリングリストと連絡先)
- メーリングリスト: accelerate-haskell@googlegroups.com(利用に関する討論および開発に関する話題の両方を歓迎します)。登録は Accelerate Google Groups ページで行ってください。
- バグレポートおよび課題追跡:GitHub プロジェクトページ
- チャット:gitter をご利用ください
Citing Accelerate(Accelerate の引用について)
Accelerate を学術研究で使用する際は、以下の論文を引用することをお勧めします(ただし必須ではありません):
- Manuel M. T. Chakravarty, Gabriele Keller, Sean Lee, Trevor L. McDonell, and Vinod Grover. "Accelerating Haskell Array Codes with Multicore GPUs." In DAMP '11: Declarative Aspects of Multicore Programming, ACM, 2011.
- Trevor L. McDonell, Manuel M. T. Chakravarty, Gabriele Keller, and Ben Lippmeier. "Optimising Purely Functional GPU Programs." In ICFP '13: The 18th ACM SIGPLAN International Conference on Functional Programming, ACM, 2013.
- Robert Clifton-Everest, Trevor L. McDonell, Manuel M. T. Chakravarty, and Gabriele Keller. "Embedding Foreign Code." In PADL '14: The 16th International Symposium on Practical Aspects of Declarative Languages, Springer-Verlag, LNCS, 2014.
- Trevor L. McDonell, Manuel M. T. Chakravarty, Vinod Grover, and Ryan R. Newton. "Type-safe Runtime Code Generation: Accelerate to LLVM." In Haskell '15: The 8th ACM SIGPLAN Symposium on Haskell, ACM, 2015.
- Robert Clifton-Everest, Trevor L. McDonell, Manuel M. T. Chakravarty, and Gabriele Keller. "Streaming Irregular Arrays." In Haskell '17: The 10th ACM SIGPLAN Symposium on Haskell, ACM, 2017.
Accelerate は主に学術研究者によって開発されており、引用が極めて重要です。また、引用いただくことにより Accelerate の認知度と潜在的なユーザー(そして開発者)ベースを拡大できるため、これはすべての Accelerate ユーザーにとっての利点となります。ありがとうございます!
What's missing?(尚未完の機能)
以下は現在実装されていない機能の一覧です:
- 初期化 API(API の一部が後のリリースで変更される可能性があります)
- より多くの機能... ご連絡ください!