連載第1回である今回は、「CUDAとは何か」「Jetson TK1とは何か」から、「Linux For Tegraのセットアップ」「サンプルプログラムのコンパイルと実行」までを解説します。実際にプログラミングを行うのは、次回からになります。
CUDAとは
CUDA(Compute Unified Device Architecture)とは、NVIDIA製グラフィックスボードに搭載されているGPU(Graphics Processing Unit)で汎用計算を行うための並列計算プラットフォームとプログラミングモデルです。NVIDIAが開発しました。
GPUで汎用計算を行うことを総称してGPGPU(General-Purpose Computing on Graphics Processing Units)といいます。GPGPUが登場する以前は、コンピュータの汎用計算にはCPUを用いる以外に選択肢はありませんでした。
当初、GPUはグラフィックを表示するためのコントローラでしかありませんでした。その後、画像処理を高速に行うための回路が実装され、画像処理専用のグラフィックアクセラレータとして進化していきます。しかし、レンダリングの機能は固定されていて、ユーザがプログラムを書いて表現方法を変えるといったことまではできませんでした。
さらにGPUの処理能力が向上するにつれて、表現力向上のニーズが高まり、プログラム可能なGPUが登場します。とはいえ、当初開発されたGPUをプログラムするための言語(シェーディング言語)は、あくまで画像処理に用途が限られていました。ところが、シェーディング言語を使って、GPUに高速な汎用計算をさせることも可能だとに気づいたところから、GPGPUの道が開けます。
シェーディング言語の汎用計算への利用は、その記述の複雑さから敷居の高いものでした。今では、GPUで汎用計算を行うためのプログラミング言語が整備され、GPGPUは導入しやすいものになっています。NVIDIAが開発したCUDA C言語は、その名のとおりC言語がベースになっており、Cプログラミングの経験があれば容易に読み書きできます。
Jetson TK1 DevKitとは
Jetson TK1 DevKitは、Keplerアーキテクチャ[1]を採用し、Tegraシリーズ[2]で初めてCUDAに対応したTegra K1 SoC[3]を搭載した開発キットです(Tegra 4まではCUDA非対応)。NVIDIAがこれまでに発表してきたデスクトップ/ワークステーション/サーバー向けGPUと同じアーキテクチャを採用しています。
[1] NVIDIAのハイパフォーマンスコンピューティング(HPC)アーキテクチャ。
[2] NVIDIAのモバイル向けプロセッサシリーズ。電力効率に優れる。
[3] SoCは「System-on-a-Chip」の略で、演算以外の機能も組み込んだプロセッサをいう。
Jetson TK1 DevKitのスペックは次のとおりです。
対象 | スペック |
---|---|
GPU | Keplerアーキテクチャ、192コア(処理性能は326GFLOPS以上) |
CPU | 4 × A15 ARMコア@2.3GHz(MAX)+ NEON(省電力用コア) |
メモリ | 2GB DDR3 933MHz 64ビット CPU/GPU共有 |
消費電力 | 5ワット未満 |
なお、CUDA C言語でプログラムできるNVIDIA製GPUには、次のシリーズがあります。
- 「Tesla」シリーズ
-
ECC対応メモリや、長時間の計算を安定して行うために最適な動作周波数を設定するなど、数値計算用途に最適化されています。映像出力端子はありません。
- 「Quadro」シリーズ
-
OpenGLに最適化されたドライバーが提供されます。ISV各社が動作検証と認証を行っているため、CADをはじめ、ISV各社が販売する多くの商用アプリケーションで公式サポートを受けることができます(参考:菱洋エレクトロ社のWebサイト)。
- 「GeForce」シリーズ
-
DirectXに最適化されたドライバーが提供されます。多くのゲーミングPCに搭載されています。入手しやすい価格であることから、CUDAの入門機としても適しています。
- 「Tegra」シリーズ
-
超低消費電力版GeForceという位置づけです。組み込み向けで、スマートフォンやタブレット型デバイス、自動車にも搭載されています。これまで、車載用途では、Tegra3がデジタルコックピットに、Tegra4がエンターテイメントシステムに利用されてきました。Tegra K1の登場で、歩行者の検知、自動で車庫入れなど、これまでと比べて計算量の多いアプリケーションにもTegra SoCが適用可能となりました。
並列処理・GPUコンピューティング環境が個人の手に
これまで、GPUコンピューティングを行うためには、どんなに小さくてもノートパソコンを用意しなければならないのが一般的でした。「自動車に搭載する」「モバイルロボットに搭載する」といった用途に対し、そのような計算環境を用意することはコストが高く、サイズが大きく、消費電力も大きいため、敷居の高いものでした。
ところが、「Jetson TK1 DevKit(Tegra K1 chip)」の登場により、その敷居はぐんと低くなりました。わずか数万円で「並列計算やGPUコンピューティング」を行うための計算環境が手に入ります。サイズも消費電力も非常に小さくなったため、自動車やモバイルロボットへの搭載も容易になりました。
世界で最もエネルギー効率の良いスーパーコンピュータをランク付けする「The Green500」という組織があります。計算速度一辺倒だったスーパーコンピュータは、速度を追求するあまり、エネルギー効率が無視されてきました。The Green500は、スーパーコンピュータが気候変動のシミュレーションだけを行い、気候変動を作り出す原因とならないよう、業界にエネルギー効率の重要性を知らしめることをミッションとして活動しています。
The Green500が発表している「The Green Lists」は、世界で最もエネルギー効率の良いスーパーコンピュータのランキングです。「2014年6月」のランキングを見ると、1位から10位まですべてのスーパーコンピュータがNVIDIAのGPUをアクセラレータボードとして採用しています。
「2014年11月」では少し様相が変わり、1位はAMD社のGPU,2位はPEZY-CSをアクセラレータとして採用しています。3位から10位はすべてNVIDIAのGPUを採用しています。現状では、エネルギー効率の良いスーパーコンピュータを作るには、GPUなどのアクセラレータを用いることが必須のようです。
ランキングしている多くのスーパーコンピュータは、NVIDIAのTeslaシリーズを搭載しています。Jetson TK1は、これらサーバ向けGPUと同じKeplerアーキテクチャを採用しています。Jetson TK1向けに書いたCUDAプログラムは、そのままTeslaシリーズでも動かすことができます。CUDA C言語で並列計算プログラムの作り方を学習すれば、組み込みからスーパーコンピュータまで通用する並列計算の基礎を学ぶことができるのです。