関東GPGPU勉強会資料
-
Upload
kimikazu-kato -
Category
Documents
-
view
1.678 -
download
0
description
Transcript of 関東GPGPU勉強会資料
GPGPUこの 3年でどう変わったか
関東GPGPU勉強会2012/6/2
日本ユニシス株式会社加藤公一
自己紹介加藤公一(かとうきみかず)• Twitter: @hamukazu• 所属:日本ユニシス株式会社• IEICE システム数理と応用研究会専門委員• GPGPU参戦: 2008年• 社内では NVIDIAの回しものと言われている
NVIDIA GTC
• NVIDIA主催の GPGPUのお祭り• 私は 2009年に講演• 今年( 2012年)は聴衆として参加
今日の話• 自分の研究の紹介• GTC 2009と 2012を比べて何が変わったか?
GTC2009での私の講演• You Might Also Like: A Multi-GPU
Recommendation System• GPUでリコメンデーションシステムを作りましょう、という話
全体の処理の流れ
Singular Value Decomposition
K-Nearest Neighbor
K. Kato and T. Hosino. Multi-GPU algorithm for k-nearest neighbor problem. Concurrency and Computation: Practice and Experience, 23, 2011.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, Solving k-Nearest Neighbor Problem on Multiple Graphics Processors, In Proc. CCGrid2010, Melbourne, Australia, pp 769-773, 2010.
k-Nearest Neighbor Algorithm
The algorithm consists of two parts:
Computation of distances andk-partial sort
N-Body Algorithm[Nyland et al. 2008]
Nyland et al. “Fast N-Body Simulation with CUDA”, in GPU Gems III, pp 677—695, 2008
Because of limited size of shared memory
Block 0
Block 1
Block 2
High dimensional case
Block 0
Block 1
Block 2
“Slice” the dimension so that the data can be loaded in a shared memory
部分ソート(上位 k個ソート)アルゴリズム
• GTC2009当時は、かなりトリッキーなアルゴリズムで速度を出していました
• しかし Fermiで試すと、かなり事情が変わっていた–挿入ソートだけでかなりいけた
• 実はこのネタで GTC2012も出そうと思ってたのだが断念
Bench mark (kNN)n 10000 20000 40000 80000
1x GTX280 (a) 2.7 8.6 34.1 131.82x GTX280 (b) 1.8 5.7 17.7 68.6Core i7 (c) 354.2 1419.0 5680.7 22756.9(c)/(a) 131.1 173.3 166.5 172.6(c)/(b) 196.7 248.9 320.9 331.7
n 10000 20000 40000 80000
1x GTX280 (a) 2.6 8.2 32.1 124.82x GTX280 (b) 1.7 5.5 16.9 65.2Core i7 (c) 124.8 503.0 2010.0 8041.4(c)/(a) 48.0 61.3 62.6 64.4(c)/(b) 73.4 91,4 118.9 123.3
Hellinger distance
Euclidian distance
d=256, k=100
そして GTC2012
Efficient k-NN Search Algorithms on GPUsNikos Sismanis, Nikos Pitsianis, Xiaobai Sun
Bitonic sortが最速では、という話
部分ソート、実は深い!• kと nの値で最適アルゴリズムが変わる• さらに GPUの特性によって変わる• Keplerでまたさらに考え直し?• 考えるのは大変だけど楽しい• でもこれだけで一生を終えたくない
その他何が変わったか• 開発環境が劇的に変化(改善)• C言語が Javaになったような感じ(たとえが悪い?)
2009年当時のデバッグ環境• エミュレータのみ• エミュレータで再現しないバグが最悪
エミュレータで再現しないバグの対処法(当時)
• 怪しいところで、メモリのスナップショットをグローバルメモリの別領域に(手動で)コピー
• カーネル関数終了後、スナップショットを device to hostコピー
• それを見て不具合を見つける
ワイルドだろぉ
GTC2009Developer Round Table(だったっけ?)• コンパイラは信用できない• 思ったパフォーマンスが出ないときは、まずコンパイラを疑う
• 普通は、アセンブラ( ptxファイル)を見て確認する
そして今は・・・• NVCC優秀• CUDA-GDB, CUDA-MEMCHECK• Profilerの Eclispeプラグイン• Nsightとか• OpenACC、 CAPS HMPP
まとめ• 3年の間に目覚ましい進歩–次の 3年はどうなるか
• 最適アルゴリズムも進歩に合わせて変化• 革新的な技術に初期のころから手をつけると苦労が大きい–その分メリットも