2012-03-08 MSS研究会
-
Upload
kimikazu-kato -
Category
Technology
-
view
1.117 -
download
0
description
Transcript of 2012-03-08 MSS研究会
GPGPUの産業への適用 について
2012/3/8 システム数理と応用研究会
JAIST東京サテライト
日本ユニシス株式会社 加藤公一
目次
• GPGPUとは
• CUDAによるGPGPUプログラミング紹介
• GPGPUの応用例
• 今後の展望
自己紹介
加藤公一(かとうきみかず)
所属:日本ユニシス株式会社
総合技術研究所
2008年情報理工学博士@東大
現在の仕事:
研究開発
新規製品開発におけるアルゴリズム設計
会社紹介 (簡易版)
日本ユニシス株式会社
業種:情報システムに関連サービス
いわゆるB2Bセクター
開発・保守が収益の柱
GPGPUとは
• General Purpose GPU
• 本来描画専用プロセッサであったGPUを描画以外の目的に使うこと
• 計算速度や消費電力でメリットがある
NVIDIA CUDA
• NVIDIA社による開発環境
• C言語(C++)の拡張
• GPGPUの分野ではほぼデファクト
歴史
• 2003年:データパラレル言語Brook (I.Buck)
• 2006年:NVIDIA社がCUDAを発表
• 2007年:NVIDIAチーフサイエンティストD.Kirk(当時)が東大でCUDAに関する講義
• 2008年:東工大TSUBAMEがTesla(NVIDIAの計算専用GPU)を導入
• 2008年:Apple社がOpenCLを提案
私はここから参戦
アプリケーション (TSUBAMEの例)
• 津波のシミュレーション
• 気象のシミュレーション
• 金属凝固のシミュレーション
–祝!ゴードンベル賞!
スパコンから企業システムへ
• 科学技術分野は、弊社ビジネスからは遠い
• 一方GPGPUは科学技術以外にも使えるはずだ
• GPGPUはスパコン以外で使えるはずだ
消費電力
• GPGPUは計算量当たりの消費電力が非常に小さいのも魅力の一つ
• しかし、待機電力は無視できない
• ITサービスのクラウド化が進む中、省電力はサービス提供側にメリット
–処理系のブラックボックス化
– とはいってもGPGPUクラウドは発展途上
GPGPUの難しさ
• 並列計算アルゴリズム設計の難しさ
• GPUの特性に合わせたアルゴリズム設計の難しさ
• どのような計算がGPGPUに向いているかという「目利き」が必要
Free Lunch is Over!
Herb Sutter, Free Lunch is Over : A Fundamental Turn Toward Concurrency in Software
今までは・・・
1. プログラムを書く
2. 放っておいても2年後くらいには2倍の速度で動くようになる
3. 速くなったから新たな機能を追加できる
4. 1.に戻る
以上エンジニアの「タダ飯」サイクル
これから(2003年くらいから)は
• コア1個当たりの計算性能はあまり向上していない
• しかし、チップ自体の性能はまだムーアの法則にしたがっている –マルチコア・メニーコアによるマジック
• したがって、チップの性能を引き出すには「うまく」設計する必要がある –並列計算は難しい
• その中の一つの選択肢としてのGPGPU
つまり・・・
• 並列計算は難しい
• GPGPUはもっと難しい
• でもその難しさを避け続けると、ソフトウェアに付加価値をつけられなくなる
GPUのパフォーマンス
NVIDIA CUDA Programming Guideより
やはりGPUすごい! でも、「タダ飯」は食えない
ではどうタダ飯ではないのか? 以下CUDAの概説
CUDAのプログラミングモデル
• 速度を出すには数千~数万スレッドが必要
• CPUからGPUのデータの受け渡しはPCIeで
• いくつかのスレッドのかたまりは、スレッドブロックと呼ばれ、処理の単位になる
• 同一スレッドブロック内の同期のコストは低い、スレッドブロックをまたがる同期のコストは高い
メモリ構成
• 全体から参照できるグローバルメモリ
• スレッドブロック内で共有する共有メモリ
–ブロックあたり16k~48kByteしかないので注意
–速いのでキャッシュのように使う
• スレッドから参照されるレジスタ
共有メモリ
グローバルメモリ
共有メモリ
Thread Block 0 Thread Block 1
コアレスアクセス Coalesced Memory Access
• 同じブロック内のスレッドがグローバルアドレスをアクセスする際、同時に一続きのアドレスにアクセスすると動作が速い
–一度のメモリフェッチですべて持ってくる
Thread0
Thread1
Thread2
Thread3
Thread0
Thread1
Thread2
Thread3
・ ・ ・
・ ・ ・
ポイント
• CPU、GPUの間のメモリ転送に気をつける
• スレッド間同期の粒度に気をつける
• メモリアクセスは、できるだけお行儀を良く(=コアレスになるように)する
• 数千並列で計算できる • メモリアクセスが規則的 • 同期をあまりとらなくてもいい
• あまり細かく並列化できない
• メモリアクセスがランダムにちかい
• 同期が頻繁に必要(特にグローバルな同期) • 規模が小さい
GPGPUが得意な計算 苦手な計算
たとえば・・・
• 次元が小さいベクトル計算を含む漸化式 • 辞書を引くような処理が多発 • 配列の要素の総和
リコメンデーションエンジン
基本原理
W X Y Z
A 5 4
B 4 3 3
C 3
D 4
E 1 5
person
movie
列ベクトルについて、一番近いものを探す
「映画Xが好きな人は、映画Wも好き」
全体構成
特異値分解 (SVD)
k最近傍探索 (kNN)
入力:大規模な疎行列
x30
x130
対CPU比計算速度
我々の成果!
K.Kato and T.Hosino, Solving k-Nearest Neighbor Problem on Multiple Graphics Processors, In Proc. CCGrid2010, Melbourne, Australia, pp 769-773, 2010. K.Kato and T.Hosino, Singular Value Decomposition for Collaborative Filtering on a GPU, IOP Conference Series: Materials Science and Engineering 10 012017, 2010. K.Kato and T.Hosino. Multi-GPU algorithm for k-nearest neighbor problem. Concurrency and Computation: Practice and Experience, 23, 2011.
論文
(注:CPUシングルコアとの比較)
k最近傍問題(kNN)
• 与えられたn個のd次元ベクトルについて、それぞれのベクトルから近い順にk個列挙せよという問題
• Nは数百万~数億、dは数百くらいがターゲット
アルゴリズム
• ベクトル間の距離を計算して昇順にソートすればよい
• 上位k位までの比較で十分(部分ソート)
• 距離計算はN体問題の計算アルゴリズムの応用
N体問題のアルゴリズム
Nyland et al. “Fast N-Body Simulation with CUDA”, in GPU Gems III, pp 677—695, 2008
少しずつ共有メモリにコピーする
Block 0
Block 1
Block 2
N体問題をkNNに適用するときの問題
• 次元が大きすぎるので共有メモリの容量が不十分
解決策
Block 0
Block 1
Block 2
次元方向に刻んで、スライスごとに共有メモリに読み込む
K.Kato and T.Hosino, Solving k-Nearest Neighbor Problem on Multiple Graphics Processors, In Proc. CCGrid2010, Melbourne, Australia, pp 769-773, 2010. K.Kato and T.Hosino. Multi-GPU algorithm for k-nearest neighbor problem. Concurrency and Computation: Practice and Experience, 23, 2011.
部分ソートは?
• 論文を書いたときとは、GPUのスペックが違って、今では挿入ソートで十分速い
結果
• 商品としては売れてません
• しかし、これをきっかけに仕事の受注も
NVIDIA GPU Technology Conferenceでのメディア取材
製造業への応用
• もともとCAD(設計システム)では大量の図形を取り扱うので、GPGPUとは相性がいいのではないか
• 計算速度が問題となるアプリケーションが多い
• 弊社としてのビジネス実績もある
ノイズ除去
対CPU比約30倍の計算速度を達成
実物のスキャンデータからCADデータを生成したい
(陰関数曲面を利用したアルゴリズム)
土江、谷本:陰関数曲面を利用したノイズ除去とGPGPUによる高速化 型技術 Vol.25, No.12, pp38-39 (日刊工業新聞社), 2010年
今後に向けて:CAE
• CAE(物理シミュレーション)は、製造業の設計工程で大きなウェートを占める
–計算に時間がかかる:数日間計算機を回すことも
–試作品作成コストを考えると省略できない
• なので、計算を速くすることのメリットは大きい
• 構造計算(有限要素法)では、疎行列の逆行列の計算が、一番のネック
並列計算法
• 反復法を利用
–前処理付き共役勾配法
• 反復の1回分を並列化
While 収束するまで do 並列計算(行列ベクトル積、ベクトルの内積など) End While
GPU化されたCAEエンジン (疎行列ソルバ)
• オープンソース
– CUSP
– CUDA SDK Sample
• 商用
– ANSYS
大体、対CPU(4コア)比2倍くらいの速さ
なぜあまり速くならないか
• 計算時間の大半は、行列×ベクトルの計算と、三角行列の逆行列の計算
–つまり内積計算が大量に
疎行列ソルバの今後の高速化
• 数列和の高速化のための特殊回路などがGPUに組み込まれるとうれしいなあ
–他力本願 (^^;)
• NVIDIAはそれなりに力を入れている様子
• とはいっても、GPUを支えているのはゲーマーであることを忘れてはならない
– コモディティの力
まとめ
• GPGPUはスパコンのためだけのものではない –実際に商用ソフトも出てきている
–例えば、リコメンデーションシステム、スキャンデータのノイズ除去など
• なんでもGPGPU化すれば速くなるわけではない –でもそれはCPUでも同じ話
–何が速くなりそうか、何が価値を生みそうか、という「目利き」が重要