PyCUDAの紹介

14,557 views

Published on

Published in: Technology
0 Comments
22 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
14,557
On SlideShare
0
From Embeds
0
Number of Embeds
1,091
Actions
Shares
0
Downloads
65
Comments
0
Likes
22
Embeds 0
No embeds

No notes for slide

PyCUDAの紹介

  1. 1. PyCUDAの紹介<br />PythonとAWSですぐ始める<br />GPUコンピューティング<br />
  2. 2. お前、誰よ<br />尾上洋介(おのうえようすけ)<br />関西大学総合情報学部4年<br />CUDA,PyCUDAは卒研で使用<br />4月から同大学院<br />数理最適化アルゴリズムの開発,応用<br />株式会社スプーキーズアルバイト<br />Web開発,ソーシャルアプリ,Androidアプリなど<br />Twitter: @_likr<br />
  3. 3. GPGPU<br />
  4. 4. GPU処理の特徴<br />コア数が多い<br />メモリアクセスが高速<br />演算能力の費用対効果が高い<br />近年の性能向上率が高い<br />
  5. 5. 極端な誤解<br />何でも速くなるって聞いたんだけど!<br />何でも速くなるわけではない<br />うまく並列化できればCPUシングルスレッドの100倍ぐらいは出ることも<br />条件分岐が苦手って聞いたんだけど!<br />CPUとは条件分岐の機構がちょっと違う<br />条件分岐を工夫すれば速くなる場合もある<br />メモリアクセスの最適化の方が大事<br />
  6. 6. GPGPUの適用分野<br />画像処理,音声処理<br />流体計算,天体シミュレーション<br />線形計画問題,ナップサック問題,スケジューリング問題,金融工学<br />行列演算<br />
  7. 7. GPGPUのアーキテクチャ<br />ヘテロジニアスコンピューティング<br />メモリ間の転送がボトルネックになる<br />手続きが複雑<br />ホストのメモリの確保<br />デバイスのメモリ確保<br />デバイスへのデータ転送<br />デバイスでの計算<br />デバイスからのデータ転送<br />デバイスのメモリ解放<br />ホストのメモリ解放<br />Host<br />Memory<br />Device<br />Memory<br />Device<br />Memory<br />
  8. 8. `<br />BlockとThread<br />行列をうまく扱うような仕組み<br />const inti=blockDim.x* blockIdx.x + threadIdx.x;out[i] = 2 * in[i];<br />Block内のThread同士は同期可能<br />Block間の同期は不可能<br />Hostに戻す<br />Blocks<br />Threads<br />Grid<br />
  9. 9. CUDA<br />NVIDIA GPU向けの統合開発環境<br />パフォーマンスを上げるためにはカーネル関数内でのメモリアクセスの最適化が重要<br />カーネル関数はCや他言語のものと共通<br /> ->Pythonでも十分速くなる!<br />
  10. 10. Amazon EC2Cluster GPU Instance<br />
  11. 11. スペック<br />Intel Xeon X5570 × 2<br />64bit 4コア<br />NVIDIA Tesla M2050 × 2<br />448GPUコア<br />単精度ピーク時1.03Tflops<br />倍精度対応<br />Memory 22GB<br />高速なネットワーク<br />同一Placement Group内は高速通信可能<br />CentOS 5.5<br />同程度のマシンを買うと80〜100万円ぐらい?<br />
  12. 12. 費用<br />On-Demand Instance<br />$2.1 / hour (¥178.5 / hour)<br />1年¥1,563,660,3年¥4,690,980,…<br />Reserved Instance<br />1年 $5,630 (¥478,550)<br />$0.65 / hour (¥55 / hour)<br />3年 $8,650 (¥735,250)<br />$0.33 / hour (¥28 / hour)<br />+EBS料金など(月$2〜)<br />※$1 = ¥85で計算<br />
  13. 13. PyCUDA<br />
  14. 14. PyCUDA<br />CUDAのPythonバインディング<br />高度な抽象化<br />実行時コンパイル<br />
  15. 15. cf. PyOpenCl<br />NVIDIA以外のGPUや,マルチコアCPUでのヘテロジニアスコンピューティング<br />結局チューニングはデバイスに依存?<br />どっちがいいの?<br />好きな方を<br />http://wiki.tiker.net/PyCuda/FrequentlyAskedQuestions#Should_I_use_PyOpenCL_or_PyCUDA.3F<br />
  16. 16. インストール<br />NVIDIAドライバのインストール<br />CUDA Toolkitのインストール<br />pip install pycuda<br />
  17. 17. GPU Instanceへのインストール<br />CentOSだしちょっと面倒…<br />http://d.hatena.ne.jp/likr/20110213#1297602704<br />http://d.hatena.ne.jp/likr/20110214#1297664336<br />Cluster GPU InstanceにPython2.7とPyCUDAなどをインストールしたAMIを公開中<br />501488653145/PythonGPU<br />
  18. 18. SourceModule<br />カーネル関数をJITコンパイル<br />numpy.ndarrayを使ってデータの転送<br />
  19. 19. Cだと<br />
  20. 20. PyCUDAだと<br />
  21. 21. GPUArray<br />numpy.ndarrayライクなAPI<br />データがGPU上のメモリに確保される<br />演算はGPUで並列計算される<br />
  22. 22.
  23. 23.
  24. 24.
  25. 25.
  26. 26. ElementwiseKernelReductionKernel<br />毎回書くには面倒な定形処理を抽象化<br />
  27. 27. CでReduction<br />Shared Memory使ったり,条件分岐を工夫したり,入力サイズに応じて処理を変えたり…<br />サンプルで500行ぐらいあったから割愛!<br />
  28. 28. PyCUDAでReduction<br />
  29. 29. その他<br />Stream<br />Texture<br />Multi GPU<br />メタプログラミング<br />高速フーリエ展開等々<br />
  30. 30. 参考文献<br />Amazon EC2 Documentation<br />http://aws.amazon.com/documentation/ec2/<br />PyCUDA Documentation<br />http://documen.tician.de/pycuda/<br />PyCUDA wiki<br />http://wiki.tiker.net/PyCuda<br />はじめてのCUDAプログラミング青木尊之,額田彰(I・O BOOKS) <br />
  31. 31. Enjoy GPU Computing !<br />
  32. 32. ご清聴ありがとうございました<br />

×