• トップ
  • G-DEPについて
  • ご購入ガイド
  • サポート
  • お問い合わせ

G-DEPトップ  >  G-DEPの高速演算記  >  高速演算記 第10回 「特別寄稿」東北大学大学院情報科学研究科 滝沢寛之先生

高速演算記 第10回 「特別寄稿」東北大学大学院情報科学研究科 滝沢寛之先生

今回の高速演算記第10回は前回に引き続き私共G-DEPが技術指導を頂いております東北大学大学院情報科学研究科の滝沢寛之先生にGPUとCPUの性能比較について寄稿頂きました。

滝沢寛之先生 プロフィール
 

1.はじめに

最近、「GPUを使ったら××倍の速度向上を達成できました!!」というような景気のよい宣伝文句をよく聞くようになりました。速度向上率が3桁の数字になっていることも、さほど珍しいことではありません。確かに、アプリケーションによってはGPUを利用することでケタ違いの速度向上を達成することもできます。しかし、GPUは魔法の道具ではありませんので、何でもかんでも無条件に高速化できるわけではありません。そのような劇的な速度向上にはそれなりの理由があるはずです。

ISCA'10という国際会議で、「数値流体シミュレーション(LBM)に対してGPUを使うことでCPUと比較して114倍もの速度向上を得られたと過去の論文では報告されていたが、CPU側もちゃんと最適化したら実際の速度差は5倍"しか"なかった。」という調査結果を報告するショッキングな論文が発表されています[1]。この事例の場合、100倍を超える飛躍的な速度向上の最大の要因は、残念ながら、比較対象であるCPU用のプログラムがあまり真面目に性能最適化されていなかったということだったようです。もちろん、実効性能が5倍も高くなるような技術というのはそう簡単に存在するものではないので、5倍という速度向上率の数字だけをみればGPUコンピューティングの有用性を示す格好の事例と言えなくもないのですが、先に114倍という数字を出されてしまうと、5倍の速度向上がやたらと些細なことのように思えてしまいます。このように速度向上の要因が議論されずに速度向上率の数字だけが一人歩きすれば、「GPUコンピューティングって何か胡散臭いセールストーク?」と疑われてしまうのではないかと危惧しています。 

図1: Intel Core i7-960に対するNVIDIA GeForce GTX280の相対実効性能[1] 

上述の論文[1]において、GPUの利用によって得られる平均の速度向上率は"わずか"2.5倍だったと報告されています。図1に示すとおり、彼らが試したアプリケーションの中にはGPUを使うことでCPUだけを使うよりも15倍ほど速くなるもの(GJK)がある一方で、1.25倍ほど遅くなるもの(Sort)もあります。GJKはGPU本来の描画処理ハードウェア支援機構であるテクスチャサンプリングユニットをうまく利用することで大幅な速度向上を果たしたアプリケーションの事例ですし、SortはCPU向けのスカラ演算を多用するアルゴリズムの使用を避けてGPUに適したアルゴリズムを選択したことで、アルゴリズムの差でCPUに負けた事例です。この性能評価で使用されているCPUとGPUのピーク演算性能差はおよそ10倍ですが、テクスチャサンプリングユニットという裏技が使われているために、GPUの利用によって10倍以上の速度向上を達成できている事例がGJKだと言えます。また、GPUプログラムの実装上の制約から最良のアルゴリズムを選択できない場合があり、10倍以上のピーク演算性能差をもってしても、アルゴリズム面での劣勢を跳ね返せないこともあるということがSortの事例で示されています。

論文[1]で述べられている平均速度向上率2.5倍を大きいと見るか小さいと見るかは、意見が分かれるところだと思います。性能評価につかうアプリケーションの種類によって、その平均速度向上率も大きく変化することでしょう。とにかく、GPUを使うことで大幅な速度向上を達成できるHPCアプリケーションが少なからずあることは間違いありません。しかし、キーワード先行でGPUに過剰に期待するのではなく、期待される速度向上率を冷静な目で検討し、適材適所での利用を心がけたいものです。 
 

2. ルーフラインモデル

プログラムをあるプロセッサで実行した場合に達成可能な実効性能の上限と、その性能ボトルネックを解析するためのシンプルな(そして有名な)性能モデルとして、ルーフラインモデル[2]があります。ルーフラインモデルに基づいて、GPUに期待できる速度向上率を考えてみましょう。

まず、個々のアプリケーションで演算回数とメモリアクセス回数の比は異なります。これをアプリケーションの演算強度(Operational Intensity)と呼びます(単位はflop/B)。これとは別に、プロセッサ自身のピーク演算性能(システムが出せる最大演算性能, flop/s)とピークメモリバンド幅(システムが出せる最大メモリバンド幅, B/s.)もあることに注意してください。これらの数字を使うと、最も基本的な性能モデルが以下の式で与えられます。 

達成可能な演算性能= min {ピーク演算性能, ピークメモリバンド幅×アプリケーションの演算強度}

実際に達成され得る実効演算性能がピーク演算性能を超えることはあり得ません。また、演算強度が低いアプリケーションにおいてはメモリバンド幅不足になって演算器へのデータ供給が間に合わず、その結果としてメモリバンド幅に律速されて実効演算性能が決まることを示している簡単な式です。まさに算数レベルのお話で、この式自体には何も難しい理屈はありません。この関係を、縦軸を実効演算性能、横軸を演算強度にしてグラフに描くと図2のようになります。この性能モデルは、そのグラフがちょうど屋根の形になるので、ルーフライン(roofline)モデルと呼ばれています。

現代のプロセッサは、任意の条件下で高い演算性能やメモリバンド幅を達成できるわけではありません。CPUでもGPUでも、達成可能な演算性能を制限するいくつかの壁(シーリング, ceiling)が存在します。そのような制約条件を図2に書き加えていくことで、最終的な性能モデルが完成します。

図1で比較されているCore i7-960とGeForce GTX280のルーフラインを描いてみると(図2)、どの演算強度においても後者(GPU)の屋根の方が高いということが分かります。したがって、仮にCPUとGPUが共にピーク演算性能やピークメモリバンド幅を発揮できる条件下であれば・・・

 

続きを読むには...

この記事は会員限定のため、G-DEP会員登録(無料)が必要となります。
未登録の方は「登録」ボタンをクリックしG-DEP会員登録を行ってください。
※会員登録をされますと記事の閲覧の他、コメント投稿も可能になります。

新規登録  ログイン