CPU/GPU の協調動作を支援する動画像処理プログラミング環境の提案

平成 26 年度創成シミュレーション工学専攻修士論文梗概集
計算システム工学分野
CPU/GPU の協調動作を支援する動画像処理プログラミング環境の提案と実装
学籍番号 25413567 氏名 松永 拓也
指導教員名
1 はじめに
津邑
により,プログラマが簡単な記述のみで高性能なプ
動画像処理を扱う情報機器の普及と,ヘテロジニ
ログラムを開発可能な環境を提供する.
アスな計算機環境が一般的となりつつあることから,
3 動画像処理プログラミング環境の提案
ヘテロジニアスな計算機上で動画像処理プログラム
を開発する機会が増加しているが,このような環境
公暁
3.1 高い抽象度を持つ動画像処理言語
本言語では,“処理単位@処理範囲”という記述方
で高性能なプログラムを開発することは困難である.
式を用いることで,統一的な記述が可能となる.処
そこで,動画像処理ライブラリRaVioli[1]が提案さ
理単位とは,画像あるいは動画像の構成要素のこと
れている.
RaVioliでは動画像処理プログラミングを
であり,処理範囲とは,処理を施したい画像あるい
抽象化し,プログラマの負担を軽減している.しか
は動画像の範囲および対象のことである.
しRaVioliには,
まだ動画像処理を抽象化しきれてい
3.2 2 種類の CPU/GPU 協調動作手法
ない問題と,プロセッサの性能を十分に活かし切れ
CPU と GPU を混載したシステムの性能を引き出すた
ていない問題が存在する.本稿では,これら2つの問
めには,各ユニットが遊休状態になる時間を短縮す
題点を解決するプログラミング環境を提案する.
ることが重要である.そこで提案手法では,画像,
2 動画像処理ライブラリ RaVioli
動画像処理に存在する 2 つの並列性に着目し,2 種
RaVioli は,プログラマから解像度を隠蔽するこ
類の協調動作手法を提供する.まず,画像処理には
とで,抽象度の高い動画像処理プログラミングを実
一般的にデータ並列性が存在する.
このような場合,
現している.さらに,RaVioli の GPU 向け拡張とし
画像を領域分割し,各部分領域を並列に処理するこ
て RaVioli/CUDA が提案されている.RaVioli/CUDA
とで高速な処理を実現できる.そこで,図 1 のよう
は,
CUDA を用いる際に必要な記述をライブラリ内部
に画像を 2 つに領域分割し,各部分領域に対する処
に隠蔽することでプログラマの負担を軽減している.
理を CPU/GPU へそれぞれ割り当て,並列に実行する
しかし,
RaVioli/CUDA には問題点が2 つ存在する.
ことで高速な処理を実現する.なお,本稿ではこれ
1 つ目は,RaVioli/CUDA がまだ動画像処理を十分に
を空間的協調と呼ぶ.
抽象化できていない点である.RaVioli/CUDA では,
CUDA が提供するデータ転送 API などを隠蔽してい
るものの,関数内で各スレッドが担当する画素の指
定などが必要であり,
プログラマは CUDA の知識が必
要となる.もう 1 つの問題は,ヘテロジニアスな環
境を十分に活かし切れていない点である.
RaVioli/CUDA では GPU が画像処理を実行中,CPU が
遊休状態となってしまい,CPU/GPU の 2 つのユニッ
トを効率的に活用できない.
図 1:空間的協調の様子
一方,動画像処理は基本的に複数のステージから
そこで本研究では,RaVioli/CUDA よりも高抽象度
構成されるため,このステージ間にタスク並列性が
な言語を提案する.また,RaVioli/CUDA を CPU/GPU
存在する.このような場合,パイプライン化による
が協調動作するように拡張する.さらに,提案言語
高速化が有効である.そこで図 2 のように,CPU/GPU
プログラムから拡張した RaVioli/CUDA プログラム
それぞれに対してステージを割り当て,処理をパイ
へと自動変換するトランスレータを提供する.これ
プライン的に実行することで高速な処理を実現する.
平成 26 年度創成シミュレーション工学専攻修士論文梗概集
なお本稿ではこれを時間的協調と呼ぶ.
計算システム工学分野
合の結果を図3に示す.図3は10本のバーで構成され
ており,各バーはGPU へ割り当てる画像の割合を0
~100%まで10%刻みで変化させた場合の実行時間を
示している.図3より,トランスレータにより生成さ
れた空間的協調を利用するプログラムでは高速な処
図 2:時間的協調の様子
理を実現できることを確認した.
4 2 種類の協調動作手法の実現方法
2 つのCPU/GPU の 協調手法を実現 するために
RaVioli/CUDAを拡張した.
4.1 空間的協調用高階メソッド
空間的協調を利用した提案言語プログラムから
RaVioli/CUDAプログラムへ変換する際に生成される
高階メソッドの処理の流れについて説明する.この
関数ではまず,指定された値に応じて入力画像を2
つに分割する.そしてGPUへ割り当てる部分画像を
図3:画像処理(空間的協調利用)の実行時間比較
GPUへ転送し,GPU用の構成要素関数を呼び出す.次
次に,
時間的協調を利用した場合の結果を図5に示
に,GPUの実行と並行してCPUは自身が担当する部分
す.図4より,トランスレータにより生成された時間
を並列に処理する.CPUの処理が完了すると,GPU の
的協調を利用するプログラムでは高速な処理を実現
処理結果を受け取りCPU/GPUそれぞれの処理結果を
できることを確認した.
統合する.このように空間的協調用高階メソッドで
は,
CPU/GPUが並行動作し,
高速な処理を実現できる.
4.2 時間的協調用高階メソッド
時間的協調を利用した提案言語プログラムから
RaVioli/CUDAプログラムへ変換する際に生成される
高階メソッドの処理の流れについて説明する.この
関数では“AUTO”を引数として呼び出されることで
4:動画像処理(時間的協調利用)の実行時間比較
自動的に適切なステージの割り当てを算出し,その
6 おわりに
割り当てで処理を実行できる.
“AUTO”を引数として
本研究では,より直感的に動画像処理プログラム
呼び出されると,
まず1フレーム目に対して動画像処
を記述できる言語と,
CPU/GPUの協調動作を実現する
理の全ステージをCPUで実行し,
このときの各ステー
RaVioli/CUDAの拡張を提案した.さらに,提案言語
ジの実行に要した時間を計測する.
次に2フレーム目
プログラムから拡張したRaVioli/CUDAプログラムへ
に対して全ステージをGPUで実行し,
同様に各ステー
と自動変換するトランスレータも提案した.これに
ジの実行に要した時間を計測する.そしてこれらの
より,
プログラマが簡単な記述をするのみでCPU/GPU
結果を用いて,
最も高速化が見込めるCPU/GPUのステ
を混載したシステムの性能を引き出すことができる
ージ割り当てを算出し,
CPU/GPUへ各ステージを割り
動画像処理処理プログラミング環境を実現した.
当てる.
その後3フレーム目以降に対してパイプライ
7 参考文献
ン実行を行う.このようにすることでプログラマは
[1] 岡田慎太郎, 桜井寛子, 津邑公暁, 松尾啓志: 解像度非
各ステージの処理量を意識することなく,自動的に
依存型動画像処理ライブラリ RaVioli の提案と実装, 情報
効率的なパイプライン実行を実現できる.
処理学会論文誌コンピュータビジョンとイメージメディア
5 評価
(CVIM), Vol. 2, No. 1, pp. 63–74 (2009).
トランスレータにより生成されたプログラムの実
行時間を比較した.まず,空間的協調を利用した場