セミナーレポート
車載カメラで危険を検知し,安全運転を可能にする(株)豊田中央研究所 町田 貴史
本記事は、画像センシング展2012にて開催された特別招待講演を記事化したものになります。
ソフトウエアと組み合わせ,汎用演算が可能に
コンピューターグラフィックスでは,リアルな映像生成のために光のシミュレーションが必須です。最も有名なのがレイトレース法で,カメラから光線(レイ)を飛ばして,その物体がどういうものかを見ます。そこでは,光線を無数に飛ばさなくてはならず,数百万,数千万のレイの衝突を計算するのに,膨大な時間がかかってしまい,リアルタイムでは使えません。けれども,1本1本のレイの計算は独立しているので,並列に処理をしても問題はありません。そこで,GPUを使うことで処理が高速化され,リアルタイムで表現することができます。このように,3次元処理に使われてきたGPUを汎用計算で使えるようにしたものがGPGPU(General-Purpose Computing on GPU)です。GPGPUは2000年前半から研究が行われてきましたが,2007年にそのためのソフトウエアライブラリである「nVidia CUDA」がリリースされてから,大きな注目を集めるようになりました。GPGPUではレイを演算する処理を他の汎用計算に置き換えることで,さまざまな処理を行います。特に,同じ演算が繰り返し行われる処理で大きな力を発揮するため,流体計算や気候,天体などのシミュレーションを行うスパコンや暗号解読,音声処理,画像処理に使われています。
GPUのハードウエアには,nVidia社製のPC搭載用で比較的安価な「GeForceシリーズ」とスパコン用で高価な「Teslaシリーズ」,AMD/ATI社の「Randeonシリーズ」「Fire Streamシリーズ」があります。また,ソフトウエアには「nVidia CUDA(Compute Unified Device Architecture)」と「OpenCL」,マイクロソフト独自でDirectX11用の「DirectX Compute」があります。CUDAはnVidiaGPU専用で,C/C++言語を拡張したもので,現在最も普及しています。OpenCLはApple社による提案で始まり,標準化団体によって制定されたもので,Nvidia以外のGPU用のものです。
CUDAは軽量スレッドを用いたマルチスレッドの並列化で,専用ハードウエアにより数千単位のスレッドの作成とスケジューリングを高速実行します。データレベルの並列性をもとにした並列化が一般的で,大規模配列に対して,ほぼ同列の処理を適用します。処理の最小単位はスレッドで,スレッドをまとめたスレッドブロック,全スレッドブロックの集合であるブロックで,スレッド全体を階層的にまとめて管理します。
<次ページへ続く>
株式会社豊田中央研究所 町田 貴史
1998年大阪大学基礎工学部情報工学科卒業。2002年奈良先端科学技術大学院大学・情報科学研究科博士後期課程単位取得退学。同年大阪大学サイバーメディアセン ター助手。2006年(株)豊田中央研究所入社。博士(工学)。コンピュータービジョン,コンピューターグラフィックスの研究に従事。情報処理学会,IEEE各会員。