科学技術計算におけるソフトウェア自動チューニング:<ソフトウェア自動チューニング技術の応用>10.GPUコンピューティングにおけるソフトウェア自動チューニング
5
0
0
全文
(2) 特集)科学技術計算におけるソフトウェア自動チューニング しかし,GPU コンピューティングには従来の CPU と. SM15 16 SM StreamMulti-processor. は異なる複雑なプログラミング手法が必要となり,CPU のみを使う場合と比較してコードの移植性と保守性が著. Instruction Decorder & Controller Stream Processor. Stream Processor. Stream Processor. Stream Processor. Register File Shared Memory Constant Cache Memory. Double Precision Floating-point Unit Special Function Unit Special Function Unit. Texture Cache Memory. Device. High Bandwidth Device Memory 図 -2 CUDA(GT200 世代 ) のハードウェアモデル. しく低下する.ハードウェア構成を強く意識した,抽象 度の低いプログラミング手法であるために,GPU の仕 様変更や拡張の影響を受けやすい.また,ハードウェア が性能を出しやすいように配慮してプログラマがコード を記述する必要がある.速度を度外視してただ単に希望 どおりの動作をするだけの 「動くコード」 と,ハードウェ ア側の事情に配慮して記述された 「速く動くコード」には 非常に大きな性能差がある. この「動くコード」 を「速く動くコード」 に変換するいわ ゆる最適化の方法論は確立されておらず,現在の GPU コンピューティング向けアプリケーション開発では,速 く動くコードを試行錯誤で探るアプローチが一般的であ る.この試行錯誤のため,最適化作業には多大な労力が 必要となる.そのような最適化作業を補助する,さらに は自動化するために,筆者らは自動チューニング技術に. SPRAT(Stream Programming with Runtime Auto-Tuning). 着目している.以下では,適材適所で CPU と GPU を. プロジェクト2)を紹介する.. 使い分けることに特に注目し,「適切なプロセッサを実 行時に自動選択する」という実行時自動チューニング機. GPU コンピューティングの課題 GPU を描画処理以外に用いる研究の黎明期では,対 象アプリケーションの計算を描画処理の一部として記述 することで,OpenGL や DirectX などの描画用 API を介. 能を備える SPRAT を紹介する.. Use SPRAT to catch a whale! 〜手軽に GPU コンピューティング〜. して間接的に GPU の演算能力が利用されてきた.この. SPRAT は GPU による大幅な高速化を期待できるスト. 場合,対象アプリケーションを描画処理に当てはめて記. リーム処理を明示的に記述するために C 言語の拡張文. 述するために,演算効率の悪い実装方法を選択しなけれ. 法を定義し,さらにその処理を担当するプロセッサを自. ばならない場合が多かった.. 動的に選択する機能を備えるプログラミングフレームワ. 近年,NVIDIA 社の CUDA(Compute Unified Device. ークとして,筆者らが現在開発しているものである.異. 3). Architecture) などの GPU コンピューティング向け開. 種複数のプロセッサの存在を意識することなく記述され. 発環境が広く利用されている.現在の GPU は,図 -2. たコードから,それぞれの長所を活かすようなプロセッ. に示すとおり多数のストリームプロセッサ(SP)を搭載. サの使い分けを実現する実行時自動チューニング方式を. するマルチコアプロセッサであり,たとえば NVIDIA. 確立することを目指している.これまでに,実行時間 2). GeForce GTX280 は 240 基もの SP を搭載している.また,. や消費エネルギー 4)の観点から適切なプロセッサを自動. 8 つの SP をまとめた Stream Multiprocessor(SM)という. 選択する機能が実装・評価されている.また,SPRAT. 単位があり,同一 SM 内の SP 間でのみデータの共有や. 言語で記述されたコードを CUDA コードに変換する際. スレッドの同期を行うことができる.さらには,複数の. に,最適化作業の一部を自動化(共有メモリの利用や非. メモリ領域が用意されており,それぞれ性能を発揮でき. 効率メモリアクセスの回避など) する SPRAT コンパイラ. るアクセスパターンや記憶容量に厳しい制約があるため. (トランスレータ) も開発されている 5).. に,それらを適切に使いこなす必要がある.GPU コン ピューティング向けの開発環境では,そのように複雑な. ⿎⿎SPRAT 言語処理系. 構成を持つ GPU を柔軟に制御できるため,その演算性. SPRAT 言語では,ストリーム処理の対象となるデー. 能をより効果的に引き出すことができる.. タ集合(ストリーム)を stream 型変数に保持する.スト. 528. 情報処理 Vol.50 No.6 June 2009.
(3) 10 GPU コンピューティ 1 ソフトウェア自動チューニングの枠組み ングにおけるソフトウェア自動チューニング ソフトウェア自動チューニング技術の応用. /*1要素の計算手順をカーネル関数として定義 */ kernel map saxpy( float a, in stream<float> x, in stream<float> y, out stream<float> z){ z = a * x + y; } int main(int argc, char** argv) { stream<float> sX(N,M), sY(N,M), sZ(N,M); float x[N*M], y[N*M], z[N*M], pi=3.14f;. }. SPRAT. Compiler. init_array( x, y); /* 配列の初期化*/ streamRead(sX, x); /* 配列xをsXに複製*/ streamRead(sY, y); /* 配列yをsYに複製*/ saxpy(pi, sX, sY, sZ); /* CPU/GPUで計算*/ streamWrite(sZ, z); /* sZを配列zへ複製*/ print_array(z); return0;. C++. (for CPU). C++ Compiler. CPU object. CUDA. CUDA Compiler. GPU object. (for GPU). 図 -3 SPRAT コードの例. 図 -4 SPRAT 言語処理系. リームの各要素に対する処理の内容は,修飾子 kernel. 多くの場合,ストリーム処理の速度はメモリバンド. を付けて定義されるカーネル関数内に記述される.スト. 幅に律速されるため,その実行時間は処理対象となる. リームは並列に処理可能なデータの集合であり,カーネ. ストリームサイズに対して比例する傾向にある.現在. ル関数内でのみ各要素にアクセス可能である.このよう. の SPRAT では,データ転送時間およびカーネル実行時. な構文は他のストリーム処理記述言語でも採用されてお. 間の双方を最小二乗法による線形近似によって予測する.. 6). り(たとえば BrookGPU ) ,ストリーム処理の記述のた. それぞれ切片(立ち上がり時間)と傾き(実効バンド幅あ. めの標準的な構文であると言える.SPRAT コードの例. るいはスループット)を事前に計測し,実行時に任意の. を図 -3 に示す.. データサイズに対する実行時間の予測に用いる.. プログラマによって記述された SPRAT 言語のソース. CPU と GPU を搭載するシステムで,あるカーネル k. コードは,図 -4 に示すとおり SPRAT コンパイラによ. を実行する場合を考える.CPU と GPU がカーネル関. って標準的な C++ 言語と GPU 向けの CUDA コードに. 数 k の実行に要する時間をそれぞれ TC (k), TG (k) とす. 変換される.C++ および GPU 向けの CUDA コードは,. る.また,カーネル関数 k の実行に必要なストリームを. それぞれのコンパイラによってオブジェクトコードに変. CPU から GPU へと転送するために必要な時間を TC → G. 換されたのち,SPRAT 実行時ライブラリやその他必要 なライブラリとリンクされ,最終的に実行ファイルが生 成される.. とする.同様に GPU から CPU への転送の時間を TG → C. とする.この場合,カーネル関数 k が実行されるたびに, その実行を担当するプロセッサによって u TC(k)2TG(k)u. の実行時間の差が生じる.この実行時間の差の累積(累. ⿎⿎SPRAT の実行時自動チューニング機能. 積実行時間差と呼ぶ)が他方のプロセッサ側へのデータ. CPU と GPU はそれぞれ独自のメモリ空間を持ってお. 転送に要する時間(現在の実行担当プロセッサが CPU. り,CPU によるカネル実行ではメインメモリ上のデ. の場合には TC → G)よりも大きくなる場合には,担当プ. ータ,GPU によるカーネル実行ではグラフィックカー. ロセッサを他方に切り替える方が結果的にアプリケーシ. ドに搭載されているビデオメモリ上のデータが使われる.. ョンの実行に要する実行時間は少なくなる.しかし,カ. このため,カーネルの実行を担当するプロセッサを切り. ーネル関数の実行時間を予測するためにはストリームサ. 替えるためには CPU と GPU との間のデータ転送が必. イズが必要となるが,将来のカーネル呼び出しで引数と. 要となる.この CPU-GPU 間のデータ転送にはある程. なるストリームのサイズを求めるのは容易ではなく,不. 度の時間を要するため,安易なプロセッサ切り替えはア. 可能である場合もある.このため SPRAT ではプログラ. プリケーション全体の性能低下につながる.したがって,. ム中に周期性があることを仮定し,過去の累積実行時間. 各プロセッサの得手不得手や転送のオーバヘッドを考慮. 差に基づいてプロセッサ選択を行う.過去の累積実行時. して,適切なタイミングで担当プロセッサを切り替える. 間差がデータ転送に要する時間を超過している場合には,. 必要がある.. 将来の実行においてもデータ転送時間以上の累積実行時 情報処理 Vol.50 No.6 June 2009. 529.
(4) 特集)科学技術計算におけるソフトウェア自動チューニング. C2Q GF88GTX(SPRAT). GF88GTX GF86GTS(SPRAT). C2Q. GF86GTS. GF88GTX. GF86GTS. GTX280. 10.0. 1.5 演算性能[Gflop/s]. 演算性能[Gflop/s]. 8.0. 1.0. 0.5. 0.0. 6.0 4.0 2.0 0.0. 0. 200. 400. 600. 800. 1000. 0. 500. 1000. 1500. 2000. 行列サイズ. 行列サイズ 図 -5 LU 分解におけるプロセッサ自動切り替え. 図 -6 GPU の世代による特性の違い. 間差が生じると判断し,プロセッサを切り替える.. すとおり,SPRAT では常に C2Q を使用して LU 分解を. 以上,実行時間を判断基準としてプロセッサ切り替え. 実行している(図中青の点線参照) .86GTS と同世代の. ポリシーを説明したが,別の判断基準で適切と判断され. より高性能な GPU である NVIDIA 8800GTX(88GTX). るプロセッサに切り替えることも可能である.たとえば,. ですら,C2Q に拮抗する程度の性能しか達成できてい. アプリケーション実行に要するエネルギー消費の観点か. ない.88GTX と C2Q の性能は,行列サイズによって. ら適切なプロセッサを選択することもできる 4).. 逆転する.この場合,SPRAT は各サイズにおいて速い 方のプロセッサをほぼ的確に予測し,適切に切り替えて. ⿎⿎実行時自動チューニングの効果. いることが分かる(図中赤の実線参照.行列サイズが小. SPRAT によるプロセッサ切り替えの有効性を示しや. さい場合には C2Q,大きい場合には 88GTX を使用し. すい例として,連立方程式の解法として一般的に用い. ている) .. られる LU 分解(ピボット選択なし)の処理を SPRAT で. 本評価から分かるように,SPRAT ではプロセッサ間. 実装・評価した結果を図 -5 に示す.図 -5 の縦軸の単位. の実効性能差がデータ転送のコストと比較して十分大き. である flop/s は HPC における標準的な演算性能の尺度. いと過去の履歴から判断される場合に,高速な方のプロ. であり,たとえば 1 Gflop/s であれば浮動小数点演算を. セッサに処理が切り替わる.本実装では 2 種類のカーネ. 1 秒間に 10 億回実行するだけの性能を達成できたこと. ルを繰り返し実行する比較的シンプルなアプリケーショ. を表している.. ンを用いたが,より多くのカーネルから構成されるアプ. メ モ リ ア ク セ ス が 効 率 的 に な る 条 件(Coalesced. リケーションにおいても,SPRAT による適切なプロセ. Memory Access の条件,文献 3)参照)を満たさない場合,. ッサ切り替えを期待できる.. GPU のメモリアクセス性能は極端に低下するため,実. また,図 -6 に示すとおり,同じプログラムを世代の. 効演算性能も低くなる.本評価で実装した LU 分解で. 新しい GPU である NVIDIA GeForce GTX280 で実行す. は,処理対象となる配列の先頭アドレスが変化し,その. る場合,十分に大きい行列では 9.4 Gflop/s 以上の実効. ☆1. 条件を満たさないメモリアクセスが頻発する. .その結. 演算性能を達成できる.これは,効率的なメモリアクセ. 果,NVIDIA GeForce 8600GTS(86GTS)という普及型. スのための条件を満たしていない場合の性能低下が,新. の GPU では,一般的な CPU である Intel Core 2 Quad. 世代 GPU では軽減されているためである.このように,. E6600(C2Q)の 1 コアだけ使って実行するよりも常に. 同じコードであっても GPU の世代によって大きく特性. 低い実効性能しか達成できない.この場合,図 -5 に示. が異なる.このため,CPU と GPU を適材適所で使い分 けるためには,単一の記述から複数の実装を自動生成し,. ☆1. SPRAT では GPU の存在を意識しないことを前提にしているので, 本実装のように,GPU にとって都合の悪いコードをプログラマが記 述する可能性がある.プログラマがハードウェアの都合を考えない 以上,この状況を回避するのは現状では困難であるため (現在,一部 ,性能が低い場合には本評価のように GPU の使用を は回避可能 5)) 避けるのが SPRAT の基本戦略である.. 530. 情報処理 Vol.50 No.6 June 2009. 実行時に(システムに搭載されている CPU や GPU の性 能・型番が分かった時点で)選択する実行時自動チュー ニング機能が有用である..
(5) 10 GPU コンピューティ 1 ソフトウェア自動チューニングの枠組み ングにおけるソフトウェア自動チューニング. 2008 年 6 月,LINPACK の実効性能で史上初めて 1 ペ タフロップスの壁を突破したのは,2 種類の異なるプ ロセッサ(AMD Opteron と IBM PowerXCell 8i)を搭載す る複合型の HPC システムであった(LANL RoadRunner) . 日本国内でも,東京工業大学学術国際情報センターの. TSUBAME や筑波大学計算科学研究センターの FIRST に代表されるように,特長の異なる複数のプロセッサを 搭載し,それらを連携させることによって高性能化を目 指す HPC システムがすでに運用されている.東北大学 サイバーサイエンスセンターでも NEC SX-9 という専用 ベクトル型スパコンと Itanium2 プロセッサ搭載の TX7/. i9610 を運用しており,得手不得手の大きく異なる複数. 博士,および東北大学大学院情報科学研究科の佐藤功人 氏と小山賢太郎氏に深く感謝する. 参考文献 1)Owens, J. D., et al. : A Survey of General-Purpose Computation on. Graphics Hardware, Computer Graphics Forum, Vol.26, No.1, pp.80-113 (Mar. 2007). 2)滝沢寛之,白取寛貴,佐藤功人,小林広明 : SPRAT : 実行時自動チュー ニング機能を備えるストリーム処理記述用言語,情報処理学会論文誌 コンピューティングシステム,Vol.1, No.2, pp.207-220 (Aug. 2008). 3)NVIDIA Corp. : CUDA Programming Guide 2.0 (2008). 4)Takizawa, H., Sato, K. and Kobayashi, H. : SPRAT : Runtime Processor Selection for Energy-aware Computing, Proc. of the 2008 IEEE International Conference on Cluster Computing, pp.386-393 (Sep. 2008). 5)佐藤功人,滝沢寛之,小林広明 : GPU を効率的に利用するための言 語拡張と自動最適化手法,情報処理学会研究報告 (2008-HPC-116), pp.199-204 (Aug. 2008). 6 )Buck, I., et al. : Brook for GPUs : Stream Computing on Graphics Hardware, ACM Transactions on Graphics, Vol.23, No.3, pp.777-786 (Aug. 2004). (平成 21 年 3 月 22 日受付). のシステムから構成される複合型の計算環境を提供して いるといえる.また,IBM PowerXCell や Intel Larrabee といった新世代のプロセッサでは,内部に特長の異なる 演算部を複数搭載している.今後はさまざまなレベルで 複合化が進み,より一層,適材適所を考慮したソフトウ ェア開発が求められるようになるであろう.そのような 時代の HPC ソフトウェア開発には課題が山積しており,. 滝沢 寛之(正会員) [email protected]. その中でも最も深刻なプログラミングの問題,特に最適. 平成 11 年東北大学大学院情報科学研究科博士課程修了.博士(情報 科学).同年新潟大学総合情報処理センター助手,平成 15 年東北大学 情報シナジーセンター助手,平成 16 年同大学院情報科学研究科講師を 経て,平成 21 年より現職.高性能計算システム,コンピュータアーキ テクチャとその応用分野に興味を持ち,特に近年では GPU や Cell 等 のアクセラレータに関する研究に取り組んでいる.平成 16 年 ISPA04 最優秀論文賞,平成 18 年船井情報科学奨励賞,平成 20 年本会東北支 部野口研究奨励賞受賞.電子情報通信学会,IEEE CS 各会員.. 化の労力を削減するために自動チューニング技術が必要 不可欠な存在になると筆者は確信している. 謝辞 本稿執筆にあたり,ご協力いただいた東北大学 サイバーサイエンスセンターの小林広明教授と小松一彦. 情報処理 Vol.50 No.6 June 2009. 531. ソフトウェア自動チューニング技術の応用. 今後の展望.
(6)
関連したドキュメント
また,文献 [7] ではGDPの70%を占めるサービス業に おけるIT化を重点的に支援することについて提言して
2.1で指摘した通り、過去形の導入に当たって は「過去の出来事」における「過去」の概念は
[r]
謝辞 SPPおよび中高生の科学部活動振興プログラムに
ベクトル計算と解析幾何 移動,移動の加法 移動と実数との乗法 ベクトル空間の概念 平面における基底と座標系
テキストマイニング は,大量の構 造化されていないテキスト情報を様々な観点から
一階算術(自然数論)に議論を限定する。ひとたび一階算術に身を置くと、そこに算術的 階層の存在とその厳密性
[r]