CUDA技術を利用したGPUコンピューティングの実際(前編) ―― グラフィックス分野で磨かれた並列処理技術を汎用数値計算に応用

下馬場 朋禄,伊藤 智義

tag: 組み込み 半導体

技術解説 2008年6月18日

 図1のように,入力データ(テクスチャに格納)はまず頂点シェーダで処理され,続いてピクセル・シェーダで処理されます.図1のGPUは頂点シェーダが8本,ピクセル・シェーダが24本あり,これらのシェーダが同時に並列処理を行うことで,計算処理を高速化しています.各シェーダでは,目的の計算を行わせるようにシェーダ言語でプログラミングを行います.このような構造で汎用計算を行わせるには,まずテクスチャに入力データをセットし,シェーダ言語でテクスチャに含まれたデータを加工していきます.計算結果はフレーム・メモリに格納されます.

 このような工程を経るため,3Dグラフィックスの視点や視線方向などの設定の仕方によっては,入力データを格納したテクスチャが変形する現象が起こる場合があります.つまり,自分が意図したデータとは異なるデータへと変形されてしまい,正しい計算結果が得られないわけです.これを避けるため,テクスチャが変形しないように頂点シェーダの設定を正しく行う必要があります.また,テクスチャなどの3Dグラフィックス処理や,それを操作する3Dグラフィックス・ライブラリ(OpenGLやDirectX)の知識が不可欠となります.このようなことが,GPU上で汎用計算を行わせる場合に問題となります.

● NVIDIA社がCUDAと呼ばれる環境を用意

 そこで,このような制約に束縛されず,GPU上で自由に汎用計算を行わせるための「CUDA(Compute Unified Device Architecture:クーダ)」と呼ばれる新しいハードウェア・アーキテクチャ,およびソフトウェア環境がNVIDIA社によって開発されました.CUDAはC言語に似た言語仕様になっており,3Dグラフィックス・ライブラリを使用せずに,GPU上へ汎用計算をマッピングすることができます.

 詳細は後述しますが,CUDA対応のGPUは,図1のGPUが持つ頂点シェーダとピクセル・シェーダを廃止し,すべてのシェーダが同じ機能を持つ統合シェーダと呼ばれるアーキテクチャを採用しています.統合シェーダそのものは単精度浮動小数点演算を行える小型のプロセッサ・コアとして設計されています.例えばGeForce 8800 GTXというGPUでは統合シェーダを128個搭載し,これらが並列動作することで,ピーク性能で単精度345.6GFLOPS注3の演算性能を持ちます.

注3;FLOPS(Floating Point Number Operations Per Second)とは,1秒間に何回の浮動小数点演算を実行できるかを示す.例えばIBM社,東芝,ソニーの3社が共同開発したCellプロセッサはピーク性能で単精度256GFLOPS.

 現時点でCUDAに対応したGPUとして,NVIDIA社のGeForce 8シリーズやQuadro FX 5600/4600などがあります.GPUはグラフィックス・ボードに搭載された形で提供されます.GPUの演算能力を支えるため,データを格納しておく外部メモリ(グラフィックス・ボード上に搭載されるGDDR3メモリ)とGPUの間は300ビット以上のバスで結ばれています.さらにGPUの内部にも高速なオンチップ・メモリ(メモリ・コア)が用意されています.

● 並列プロセッサをフル稼働させるスレッド

 CUDA対応GPUの特徴は,統合シェーダだけではありません.統合シェーダを休みなくフル稼働させられるように,「スレッド」と呼ばれる概念を導入したことも特徴の一つです.

 ある処理をGPU上で実行する際には,ハードウェアが自動的にその処理をスレッドと呼ばれる単位に分割し,各スレッドを時分割でそれぞれの統合シェーダへ割り当てます.スレッド化のメリットとして,例えば外部メモリ(GDDR3メモリ)からデータを読み込む場合などが挙げられます.あるスレッドがリード命令を発行してからGPUが実際にデータを受け取るまでのレイテンシ時間は,外部メモリでは(GPUのクロック・サイクルに比べて)非常に長い時間が必要となります.スレッドがデータを待っていると,その間,統合シェーダはアイドル状態になってしまいます.そこで,ハードウェアが自動的にスレッドの切り替えを行い,別スレッドを統合シェーダに割り当て,統合シェーダが休みなく稼働するようになっています.

 このように,GPUとGDDR3メモリの間の高速データ転送能力,スレッド処理と高速なオンチップ・メモリの導入,複数個の統合シェーダによる多数のスレッドの並列処理により,CUDA対応GPUは,非常に高い演算性能を発揮できるようになりました.

 ソフトウェアにおいては,新しいハードウェア・アーキテクチャをより効率的に使用できるように,CUDAを用いたプログラミングに,「スレッド」,「ブロック」,「グリッド」,「カーネル」などの新しい概念が導入されました.また,数値計算などでよく使われる初等関数やFFT(高速フーリエ変換),行列計算の基本的なライブラリも実装されており,本格的な信号処理計算や科学技術計算にも耐えうる仕様になっています.

 以降では,これからCUDAに取り組む方を対象に,Windows XP上でのCUDA環境の構築,およびCUDAで導入された新しい概念について,事例(行列の積とFFTを使用した応用例)を示しながら解説していきます.

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日