4.3 OMPCUDA の評価
4.3.3 実装の手間や記述の容易性に関する評価
4.3 OMPCUDAの評価 122
今回の問題設定では,OMPCUDAデフォルトのCUDA Block数・CUDA Thread 数設定よりも高い性能を得ることができるCUDA Block数・CUDA Thread数の設 定が存在した.常に最も高い性能を得られるようにするためには,デフォルトでよ り適したCUDA Block数・CUDA Thread数が選ばれるような仕組みが必要である.
しかしながら評価1と同様に,OMPCUDAを用いることでGPUの持つ高い並列演 算性能を活用できることが確認できたと言える.
4.3 OMPCUDAの評価 123
る.一方でUseSharedCUDAプログラムの記述量を見てみると,GPUの制御に80行 程度およびGPU上で行う計算の記述に20行程度必要であり,さらにSharedMemory を用いた複数CUDA Block・複数CUDA Threadを用いるCUDAプログラミング手 法の習得が必要であるため,単純な3重ループ・2重ループによる実装と比べると 明らかに実装の手間が大きいことがわかる.
また同じくCUDA向けだがSharedMemoryを用いていない実装である Simple-CUDAと比較した場合,実行時間の面ではOMPCUDA-loop2がSimpleCUDAに 近い性能を得られている.OMPCUDA-loop2とSimpleCUDAの実行時間の差は,
OMPCUDA-loop2が並列実行部で利用するデータを全て送受信しているのに対して
SimpleCUDAでは必要なデータのみを送受信していることと,OMPCUDA-loop2で は並列実行部にループの書き換えのための計算が追加されていることによるもので ある.SimpleCUDAにおけるプログラムの記述量については,GPU上で行う計算 の記述は短い1重ループで記述できるものの,GPUの制御にはUseSharedCUDAと 同様に80行程度必要であり,さらに複数CUDA Block・複数CUDA Threadを用い るCUDAプログラミング手法の習得が必要である.
ATLASを用いた実装は対象演算が関数として提供されているため,アプリケー
ションプログラマが記述するソースコードの行数を比較する意味がない.ATLAS 自体は高度な職人芸によって作られており,一般のアプリケーションプログラマが
ATLASレベルの性能を持つプログラムを記述することは非常に困難である.
既存のCPU向けOpenMPにおける適切な並列度はプログラムを実行する計算機
システムに搭載されているCPUの数(コア数)によって決まる.一方CUDAはCPU と比べて適切な並列度が大きいため,OMPCUDAでは3重ループの OMPCUDA-loop3と比べて2重ループのOMPCUDA-loop2の方が明らかに性能が高かった.こ れはOMPCUDAを用いてGPUの性能を活用し高い性能を得るには,既存のCPU
向けOpenMPを用いる場合と比べてさらに並列性を得やすいようなプログラム記
述を行う必要があること,例えばこの実験で3重ループを2重ループに変更したよ うに,より高い並列度が得られるようなプログラム記述を行う必要があることを意 味する.この性能最適化指標は“並列度が高い記述を行った方が性能が出やすい”と いった単純な情報に変換できるため,大きな手間とはならないと考えられる.
行列積と同様に,円周率の求解を用いた性能評価で実装した各プログラムについ
4.3 OMPCUDAの評価 124
ても,プログラムの行数とGPUに関する知識の必要性および実行時間を表5に示す.
表 5: 円周率求解のプログラム行数とGPUに関する知識の必要性 CPU向け GPU向け GPUに関する
実装 プログラム プログラム 知識の 実行時間
の行数 の行数 必要性 (msec)
OMPCUDA 6 不要 624
SimpleCUDA 80行程度 5 + 60 † 要 620
OmniCPU 4 6 - - 2100
CUDA-CPUreduction 6 不要 375
CUDA-GLOBALreduction 6 不要 130000
† 計算コアは5行だが,リダクション演算に60行程度必要.
今回用いた円周率の求解プログラムは極めて単純かつ高い並列性を持つな問題で あるため,リダクション演算以外に共有メモリを用いた並列高速化を行うべき場所 がない.そのためCUDAを直接用いた場合でもGPUの行う処理の記述は短いもの の,GPUを制御するための記述量は評価1と同様に80行程度必要であり,さらに 複数CUDA Block・複数CUDA Threadを用いるCUDAプログラミング手法の習得 も必要である.
以上から,行列積と円周率の求解のいずれの問題においてもOMPCUDAを用い ることで,アーキテクチャを理解しなくてはならないうえに記述量が多く手間がか かるCUDAプログラミングを行うことなく,容易に高い性能が得られていることが わかる.そのため,OMPCUDAはアプリケーションプログラマに対する習得や実装 の手間と難しさを削減しつつGPUの持つ高い演算性能を利用可能にしたと言える.
125
5 結論
5.1 研究成果の概要
本研究では,GPUの性能向上と普及が進むにともないGPUの性能を画像処理以 外の処理を含めた様々な用途に活用するGPGPUの普及が進み始めている一方で,
さらにGPGPUが普及し広く活用されるには,アプリケーションプログラマにとっ
ての習得や利用の手間と難しさが問題となっていることを指摘した.問題の原因と しては,GPUのアーキテクチャが既存のCPUとは大きく異なること,さらに既存
のGPGPUプログラミング環境はGPUのアーキテクチャと強く結びついているた
め,GPGPUプログラミングのためにはGPUのアーキテクチャやGPGPU用のプ ログラミング環境について学習しまた手間のかかるGPGPUプログラムの実装を行 う必要があることを挙げた.
指摘した問題に対して本研究では,GPUが並列処理による高い演算性能を持つ ハードウェアであることから,現在CPU向けの並列化プログラミングに利用され ている汎用プログラミング環境がGPGPUプログラミングにも利用できればアプリ ケーションプログラマがGPGPUを容易に利用できると考えた.そこで,“並列計 算ライブラリ”と“並列化プログラミング環境”の2つのアプローチにより,アプリ ケーションプログラマに対してGPGPUを容易に利用可能とする機構の提案と実装 を行った.
アプローチ 1 : 並列計算ライブラリ
第1のアプローチである“並列計算ライブラリ”では,計算カーネルのライブラリ 化はアプリケーションプログラマに対して詳細な実装方法や実行環境の差異を隠蔽 するのに効果があるものの,GPGPUにおいてはGPU上での実行に適さない問題 設定に関する課題やCPU-GPU間での負荷分散に関する課題があるため,GPUを 用いた計算カーネルの実装を単純にライブラリとしてまとめただけでは高い性能が 得られない可能性があるという問題を指摘した.
この問題に対して本アプローチでは,“CPU向けのライブラリが持つAPIと同様 のAPIを持ち,対象問題のデータ規模が小さい場合にはCPUのみで演算を行い,
5.1 研究成果の概要 126
データ規模が大きい場合にはCPUとGPUの性能バランスにあわせてCPUとGPU で問題分割・並列実行する機構を持つライブラリ”を提案した.また,提案に基づく ライブラリについてグラフィックスAPIとシェーダ言語を用いた実装を検討し,検 討に基づくライブラリの実装を行った.
実装の検討においては,CPUとGPUを用いて並列処理を行うための基本的な実 装方法を示した.OpenGLとマルチスレッドプログラミングを用いた実装における 性能低下の問題とその対策についても述べた.またCPUとGPUによる適切な問題 分割を行うには実行環境に依存する性能チューニングが必要だが性能チューニング はアプリケーションプログラマにとって大きな手間となること,チューニングスク リプトと問題分割機構を実装・提供しチューニングを行う必要をなくすことでアプ リケーションプログラマの手間が削減できることを指摘した.さらに発展的な計算 機システム向けの検討として,複数のCPUや複数のGPUを搭載した計算機システ ム向けの実装についても検討を行った.
アプローチに基づき,行列積和計算を対象としたライブラリ“GPUPC GEMM Library”を実装した.GPUPC GEMM Libraryは,実行環境に搭載されているCPU とGPU両方の演算性能を活用して行列積和計算を行うライブラリである.対象問題 のデータ規模が小さい場合にはCPUのみで演算を行い,問題サイズが大きくGPU による性能向上が望める場合にのみCPUとGPUによる問題分割・並列実行を行う ことで,CPU向けのライブラリと同様のAPIを持ちながらGPUによる性能向上を 得ることができる.さらに実行環境に依存する性能パラメタについては,自動的に 適切な値を求めることが可能なチューニングスクリプトと,スクリプトによって求 められた値を用いて問題分割・並列実行を行う問題分割機構を実装し,手間をかけ ずに常に高い性能が得られるようにした.
また,テストプログラムやベンチマークプログラムを用いてプログラム作成の手 間と性能に関する評価を行った.性能については,HPLベンチマークに対してCPU のみでHPLを実行したときに比べて最大45.0% の性能向上を達成したことで本提 案が演算性能の面で有効性を持つことを確認した.また本ライブラリを利用するア プリケーションプログラマにとって,プログラムの変更を行うことなくGPUの持 つ高い並列演算性能を利用できることと,チューニングスクリプトと問題分割機構 によって実行対象である計算機システムに搭載されているCPUとGPUの性能バラ