こんにちは。Fixstars Solutionsの飯塚です。この度、2/17(土)に開催された、FPGAエクストリーム・コンピューティング第10回にて、「Halideでつくる、Domain Specific Architectureの世界」というタイトルで発表してきました。
Domain Specific Architecture、DSA という概念は、かの有名な Computer Architecture(通称ヘネパタ) 6th Edition により”第7章 Domain-Specific Architectures”が新設され、初めて体系だった説明が試みられました。曰く、DSAとは:
- Use dedicated memories to minimize the distance over which data is moved.
- Invest the resources saved from dropping advanced microarchitectural optimizations into more arithmetic units or bigger memories.
- Use the easiest form of parallelism that matches the domain.
- Reduce data size and type to the simplest needed for the domain.
- Use a domain-specific programming language to port code to the DSA.
John L. Hennessy and David Patterson. (2017), Computer Architecture
つまり、以下の5点、
- 固有の専用メモリを持ち、データの移動量を最小限に抑えられること
- マイクロアーキテクチャ最適化のための様々な機構を排し、演算器やメモリそのものにハードウェアリソースを配分できること
- ドメインに適した、もっともシンプルな並列性を有すること
- ドメインに必要な、最小限のデータサイズ/データ型を提供していること
- DSAに移植可能な Domain-Specific Programming Language、DSL を提供していること
これを満たすアーキテクチャがDSAである、と定義しています。ご存知の通り、デナードスケーリングが終焉を迎えたことで、半導体技術に閉じた世界だけでプロセッサの電力効率を上げるのは、非常にコストがかかる時代になりました。この問題に対して、アプリケーションという高次の文脈から一石を投じる試みが DSA であると言えるでしょう。
昨今の汎用マイクロプロセッサは、その電力の殆どがデータ移動とオーバヘッドに費やされていることが分かっています(R. Hameed, W. Qadeer, M. Wachs, O. Azizi, A. Solomatnikov, B. C. Lee, S. Richardson, C. Kozyrakis, and M. Horowitz. (2010), Understanding sources of inefficiency in general-purpose chips)。DSAは、実行するアプリケーションのドメインを限定することで、複雑な命令デコーダやキャッシュのスヌープ機構、各種クロスバースイッチと言った消費電力を増加させるハードウェアを排しつつ、プログラミングの手間はDSLでカバーするという両建ての構造になっているのが特徴です。
FPGAエクストリーム・コンピューティングでは、DSA自体をDSLからコンパイラによって自動生成し、FPGA上に実装するという内容の発表を行いました。いまや、FPGAはNANDと共に最先端の半導体プロセスを牽引する存在となっており、その適用範囲は組み込みからデータセンタと多岐にわたります。画像処理や認識処理、畳み込みニューラルネットワークをストリーミングで多段に接続し、ハードウェアとして実行するための技術、Halide to FPGA は、これからますます適用範囲が広がっていくと予想しています。
フィックスターズは、DSL/DSAのような最先端の技術を活用し、これからも次世代の並列化プログラミングの手法を追求していきます。
コンピュータビジョンセミナーvol.2 開催のお知らせ - ニュース一覧 - 株式会社フィックスターズ in Realizing Self-Driving Cars with General-Purpose Processors 日本語版
[…] バージョンアップに伴い、オンラインセミナーを開催します。 本セミナーでは、...
【Docker】NVIDIA SDK Managerでエラー無く環境構築する【Jetson】 | マサキノート in NVIDIA SDK Manager on Dockerで快適なJetsonライフ
[…] 参考:https://proc-cpuinfo.fixstars.com/2019/06/nvidia-sdk-manager-on-docker/ […]...
Windowsカーネルドライバを自作してWinDbgで解析してみる① - かえるのほんだな in Windowsデバイスドライバの基本動作を確認する (1)
[…] 参考:Windowsデバイスドライバの基本動作を確認する (1) - Fixstars Tech Blog /proc/cpuinfo ...
2021年版G検定チートシート | エビワークス in ニューラルネットの共通フォーマット対決! NNEF vs ONNX
[…] ONNX(オニキス):Open Neural Network Exchange formatフレームワーク間のモデル変換ツー...
YOSHIFUJI Naoki in CUDAデバイスメモリもスマートポインタで管理したい
ありがとうございます。別に型にこだわる必要がないので、ユニバーサル参照を受けるよ...