無職になり電験の勉強をする傍ら、 おもむろに 「massively」というRust製ライブラリの開発をはじめた。 この記事では、massivelyとは一体何なのか、なぜ作ったのかを話す。
https://github.com/akiradeveloper/massively
massivelyとは一体何なのか
massivelyとは、GPU並列アルゴリズムを提供するライブラリである。 CubeCLという抽象化基盤の上に構築されているため、実行するGPUを特定しない (各社のdGPU, iGPU, eGPU問わず実行出来る)。
どんなコードが書けるようになるか調べるには例を見るのがいい。 以下はtransform(あるいはmapということもある)の例である。
| |
合計で40個以上のアルゴリズムを実装しており、 多様なGPU並列アプリケーションを実装可能である。 詳しくはリポジトリのexampleディレクトリを参照されたい。
あと、モンテカルロ法で円周率を求めるサンプルプログラムも書いたので、 興味があったら動かしてみてほしい。
https://github.com/akiradeveloper/pi-monte-carlo
なぜmassivelyが必要なのか
GPU並列計算というと一般には科学計算を思い浮かべがちであるが、 おれはmassivelyのメインターゲットは科学計算だとは考えていない。 むしろ、科学計算をするのであればより特化したハードウェアの上に特化した実装を行うのが正しい。 また、それだけのコストをかける経済的価値がある。 (プロトタイプとしてmassivelyを使うのは当然構わないが)
おれがmassivelyの売りはピーキーな性能ではなく、使いやすさ(Ease of Use)や ポータビリティであると考えるのは、システム(ストレージ、言語ランタイム、ウェブバックエンドなど) へのGPUアプリケーションをメインに考えているからである。
実は、こういったシステムにおいてGPUを適用し、 アクセラレータとして使ったりオフローディングを行う研究・製品開発はすでに存在する。
- 研究
- GPUs as an Opportunity for Offloading Garbage Collection
- ECS2: A Fast Erasure Coding Library for GPU-Accelerated Storage Systems with Parallel Direct IO
- LUDA: Boost LSM Key Value Store Compactions with GPUs
- gLSM: Using GPGPU to Accelerate Compactions in LSM-tree-based Key-value Stores
- GPComp: Using GPU and SSD-GPU Peer to Peer DMA to Accelerate LSM-Tree Compaction for Key-Value Store
- 製品
また、今までいくつかのウェブバックエンドに関わってきた経験からすると、 大抵のバックエンドにはこれらと似たようなバッチ処理(例えば集計処理とか)のようなものが走っており、 それらの中にはGPUで実行することが可能なものも少なくないように思う。 そしてそうすることで処理時間の短縮に繋がったり、 GPUへのオフローディングによってシステム全体の性能が実現出来る場合も多いはずである。
そして昨今では、これらのシステムはRust言語で書かれることが非常に多くなってきた。 だから、massivelyが存在すれば、これらのシステムをGPUでさらに最適化することが容易になる。 という理屈である。
仕事を探してます。