「アプリケーション改変不要の使用プロセッサ切替手法」
研究成果報告書
政策・メディア研究科(CI・ITSP) 修士課程2年 堀川 哲郎
研究課題
近年,PCでは動画変換やブラウザ等,GPU(Graphics Processing Unit)を用いて高速化を図るアプリケーションが増加している.それらのアプリケーションとゲーム等のアプリケーションが同時にGPUを利用した場合,描画性能の低下等によりユーザーエクスペリエンスが低下する.しかし,ハイパフォーマンスコンピューティング分野等GPUリソース分割に関する既存研究ではこのような問題は十分に考慮されていないという問題がある.本研究ではPCの利用状況に応じたアプリケーションの動的な使用CPU/GPUの切り替えを実現し,描画性能の低下等を防止出来る.また,プロセッサ切り替えにアプリケーションのバイナリ変更を不要とし,特定のハードウェア構成に制約されない機構とすることで,互換性および著作権等の法的問題を同時にクリア出来る.
研究の背景と問題意識
近年,PC等で用いられるグラフィック処理用のプロセッサ,GPU(Graphics Processing Unit)を汎用利用に用いるGPGPU(General-Purpose computing on Graphics Processing Units)が盛んに行われている.GPUはCPU(Central Processing Unit)と比較して並列性の高い処理を高速に実行出来るため,動画のトランスコードや物理シミュレーション等のアプリケーションにおいてGPGPUは効果的で,対応アプリケーションも増加している.
GPUを利用したアプリケーションの高速化はGPGPU以外の方法によっても行われており,ブラウザのレンダリングにおけるGPU利用や,動画再生や動画の画質改善のためのGPU利用など,様々なアプリケーションが存在する.
GPUの活用が進む中で,PCでは将来的にPC特有の問題が生じると考えられる.PCにおいてはユーザーエクスペリエンスの低下を防ぐことが極めて重要であり,場合によっては単位時間あたりの処理能力の向上等よりも優先される.例えば,GPUを積極的に利用するアプリケーションを複数実行した場合,他のアプリケーションの描画性能及び応答性が低下し,特に3Dゲームではフレームレートの落ち込み等の問題を引き起こす.
今後もGPUを利用するアプリケーションの増加傾向は続くと見込まれるため,GPUリソース利用の競合によるユーザーエクスペリエンス低下が顕著になると考えられる.したがって,GPUのリソース利用の競合時にOS・またはランタイム等の実行環境が一部のアプリケーションに対して,CPUを利用するよう強制,あるいは指示出来るようにするシステムの構築が,第1の課題となる.
既存研究として,使用プロセッサの動的な切り替えとCPU・GPU間のタスクスケジューリングを実現する手法は多数提案されているが,それらの研究の大部分はHPC(High Performance Computing)分野を対象としており,PCを対象とする研究においてもGPGPU以外のGPU利用に関しては十分に考慮されていない.そのため,既存の手法をPCに適用した場合,ユーザーエクスペリエンスの低下を防ぐことが出来ないケースが生じる.
また,既存の手法では動的な使用プロセッサの切り替えを実現するにあたり,アプリケーションを専用に設計する,もしくはアプリケーションを改変して対応することが必要である.しかし,PCにインストールされるアプリケーションは,知的財産の保護という法的な側面,及びソフトウェアのライセンスという側面から,改変は多くの場合不可能である.仮に協力的な一部のベンダーがアプリケーションを再設計し,使用プロセッサの動的な切り替えに対応させたとしても,ごく一部のアプリケーションでのみ使用プロセッサを切り替えられるだけでは,GPU利用のリソース競合を防ぐことは不可能である.したがって,アプリケーションのソースコードからバイナリまで,一切の変更を必要とせずに動的な使用プロセッサの切り替えを実現することが,第2の課題となる.
ここまで,GPUのリソース利用が競合した場合にCPUを利用させるという例を挙げて説明を行ってきたが,実際の問題はそれほど単純ではない.HPC分野においては,使用プロセッサ選択の指針がパフォーマンスの最大化や消費電力の最小化等に限られているのに対して,PCではその指針はユーザーの希望に大きく依存する.例えば,アプリケーションの描画性能低下に対する不満の度合いはユーザーによって異なるうえ,GPUを利用しようとするアプリケーションの実行速度と他のアプリケーションの描画性能との間のトレードオフの間でどちらを優先するかは,同一ユーザーであっても時と場合によって異なる.例えば,3Dゲームに没入したい場合には他のアプリケーションによるGPUの利用を控えてゲームアプリケーションの描画能力を維持するべきであるが,ゲームはただの暇つぶしであり,バックグラウンドで行っている動画のトランスコード速度の方が重要な場合には,動画のトランスコードにGPUを利用させるべきである.特定のアプリケーションによるGPUの占有により,画面の更新が滞りPCの応答が無くなったように見えることを防止するだけでは,高いユーザーエクスペリエンスを確保出来ないのである.したがって,このように常に変化するユーザーの希望を反映出来る仕組みを構築し,ユーザーの希望を自動的に推測することで,ユーザー自身による希望の入力という負担を軽減することが,第3の課題となる.
提案したシステムとアプローチ
前述の第1の課題及び第3の課題を解決するため,本研究ではユーザの好みに基づいた使用プロセッサ割り当てを行う.そのために,本研究ではその割り当ての指示を表記するための手法を提案した.(詳細は「修士論文執筆」の節に記載.)
また,第2の課題を解決するため,本研究の提案するシステムでは以下のようなステップを繰り返し,使用プロセッサの決定と切り替えを行う.
- アプリケーションの使用プロセッサ決定関数呼び出し時に,本システムが使用すべきプロセッサを問い合わせる
- 本システムに含まれるリソースマネージャがPCの使用状況やユーザーの要求元に使用すべきプロセッサをアプリケーションに対して返答する
- 使用プロセッサの指示を受けたアプリケーションが,実際にプロセッサの使用を開始する
バイナリ互換性の確保に関しては,図 1のようにシステムをミドルウェアとして実装することで実現する.APIフックを用いることで,使用するプロセッサの指定をオーバーライドすることが基本的な手法であるが,実際にはその指定のみを変更した場合,アプリケーションが正常に動作しない事例が多数発生する.アプリケーションが,本来使用を試みていたプロセッサと異なるプロセッサを利用していることに気付いた場合,アプリケーションがエラーとして処理を停止してしまったり,あるいはアプリケーションが正常に動作出来なくなったりしてしまう.そのため,本研究ではアプリケーションに対するプロセッサ情報の提示内容を変更したり,アプリケーションに対してアプリケーションが指定した本来のプロセッサを使用しているように偽装を行ったりすることにより,アプリケーションに対する互換性を確保する.
本研究では,動的な使用プロセッサ切り替えを実現するアプリケーションについて,コンセプトとしてはCPU・GPU双方のプロセッサが利用可能なアプリケーションをその対象としているが,プロトタイプの実装ではオープンスタンダードなフレームワーク,OpenCL(Open Compute Language)を用いて実装されたアプリケーションを対象とした.そのため,OpenCLが持つ使用プロセッサの指定を行う全てのAPIをフックし,使用プロセッサ指定の問い合わせと指定の書き換えを行う.使用プロセッサ問い合わせによるオーバーヘッドを最小化するため,問い合わせ結果を積極的にキャッシュし,再問い合わせ回数を削減している.

アプリケーション並びにハードウェア構成に対する互換性向上のため,本研究ではAMD, Intel, nVidia全てのOpenCLプラットフォームを対象として,3つ以上のGPUを搭載するPCやCPUに内蔵されるGPUを搭載するPCを対象として互換性の試験を行っている.既存の実装を上回る互換性を実現するため,表1のような手法を新たに提案・実装した.結果的に,GIMPを含む実アプリケーション8つ中7つのアプリケーションにおいてバイナリ互換の使用プロセッサの切り替えを実現出来た.
プロセッサタイプの偽装 | プロセッサタイプのみを本来と異なる情報に変更する.(例:CPU→GPU) |
コンテキスト作成時の使用プロセッサ切り替え |
コンテキスト作成時に使用プロセッサを決定・固定する. |
コンテキスト内包プロセッサの単一化 |
コンテキスト作成時に単一のプロセッサのみを含めることで,互換性とパフォーマンスを向上する. |
プロセッサ表示数の変更 |
アプリケーションから認識可能なプロセッサ数を制御し,1つのアプリケーションが利用可能なデバイス数を管理する. |
研究成果
SFC Openc Research Forum
昨年に引き続き,SFC ORFにおいて,ポスター展示と資料配付のほか,デモによる発表を行った.デモでは,Intelの内蔵GPUを持つCPUとnVidiaのGPUを搭載する複雑なハードウェア構成のPCを設置し,以下のようなステップで研究のコンセプトの説明を行った.
- GPUを用いた動画再生中に他のアプリケーションがGPUを利用すると,動画再生のフレームレートが大幅に低下し,コマ落ちによってユーザエクスペリエンスが低下することを示す.(図2)
- 次に,提案するシステムを利用して,他のアプリケーションの使用するプロセッサを動画再生に利用しているGPUとは異なるものに設定すると,コマ落ちが完全に防止され,ユーザエクスペリエンスの低下が防止出来るという状況を示す.
- 最後に,さらに多くのアプリケーションが動画再生用のGPUを利用しようとした場合であっても,CPUを割り当てるなどによってユーザエクスペリエンスの低下を防げることを示す.

発表に際して,動画のコマ落ちが目に見えるようにするなど,一般の来場者にシステムの必要性並びにコンセプトが伝わりやすくなるよう工夫を行った.そのため,多くの情報技術に関する専門的知識を持たないような来場者に対してもデモを見せることが出来た.
題目 | CODA : バイナリ変更不要の使用プロセッサ切り替えによるユーザエクスペリエンス向上手法 |
開催場所 |
東京ミッドタウンホール B1F |
開催日時 |
2012/11/22 - 2012/11/23 |
発表日時 |
2012/11/22 - 2012/11/23 10:00 - 18:00 |

修士論文執筆
修士論文執筆にあたってはクリアしなければいけない技術的問題が多数あり,設計・実装の大幅な変更を行った.具体的には,仮想コンテキストの廃止とコンテキスト作成時の使用デバイス確定機能の実装を行い,またコンテキストへ組み込むデバイスを1つに行うことで,OpenCL Cコンパイル時間の圧縮とコンテキスト内のデバイス間における対応エクステンションの差によるパフォーマンス・互換性低下の防止を実現した.これらの改良に伴い,Intel/AMD/nVidia全てのOpenCLプラットフォームにおいて,プロセッサの切り替えを実現出来た.またGIMPなど,一般に広く利用されているアプリケーションにおける切り替え動作も確認している.
加えて,ユーザの好みに基づいたプロセッサ割り当てを行うためのスキームの定義を行った.具体的には,以下の割り当て方法を定義した.
- Fixed Assignment
- Monopoly
- Virtual
- Prioritized Assignment
- Priority Level
- Secondary Device
- Forbidden Device
異種プロセッサをどのようにユーザの好みに基づいて割り当てるというコンセプトに関して,プロセッサ割り当てルール記述方法を提案することが出来た.
修士論文最終発表
最終発表においては,単にスライドを用いた説明をするのみでなく,ビデオを用いた説明を行った.(動画1) UIやユビキタスコンピューティング等の分野ではなく,システム分野における研究発表としてビデオを用いることはあまり一般的ではないが,発表を通じて,ビデオがシステムの効果を説明するうえで一定の役割を果たしたと実感している.論文投稿
修士論文の研究内容をまとめ,オペレーティングシステム・ミドルウェア分野におけるトップカンファレンス(SFCホワイトリスト)のUSENIX ATC'13(full paper)への論文投稿を行った.フォーマットは2カラム12ページ,現在査読結果待ちである.
Copyright © 2012-2013 Tetsuro Horikawa. All Rights Reserved.