Submit Search
PyOpenCLによるGPGPU入門
23 likes
15,073 views
Yosuke Onoue
1 of 41
Download now
Downloaded 80 times
1
2
3
4
5
6
7
8
9
10
11
12
Most read
13
14
15
16
17
18
Most read
19
20
21
Most read
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
More Related Content
PDF
ChatGPTは思ったほど賢くない
Carnot Inc.
PDF
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
PDF
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
PDF
研究効率化Tips Ver.2
cvpaper. challenge
PPTX
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
Fixstars Corporation
PDF
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
Preferred Networks
PDF
ゲーム開発者のための C++11/C++14
Ryo Suzuki
PDF
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
Fixstars Corporation
ChatGPTは思ったほど賢くない
Carnot Inc.
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
ARM CPUにおけるSIMDを用いた高速計算入門
Fixstars Corporation
研究効率化Tips Ver.2
cvpaper. challenge
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
Fixstars Corporation
続・PFN のオンプレML基盤の取り組み / オンプレML基盤 on Kubernetes 〜PFN、ヤフー〜 #2
Preferred Networks
ゲーム開発者のための C++11/C++14
Ryo Suzuki
マルチレイヤコンパイラ基盤による、エッジ向けディープラーニングの実装と最適化について
Fixstars Corporation
What's hot
(20)
PDF
TensorFlow XLAは、 中で何をやっているのか?
Mr. Vengineer
PDF
Marp Tutorial
Rui Watanabe
PDF
機械学習モデルのサービングとは?
Sho Tanaka
PDF
機械学習で泣かないためのコード設計
Takahiro Kubo
PPTX
冬のLock free祭り safe
Kumazaki Hiroki
PDF
1076: CUDAデバッグ・プロファイリング入門
NVIDIA Japan
PPTX
backbone としての timm 入門
Takuji Tahara
PDF
2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細(様々なメモリの利用)
智啓 出川
PDF
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
PPTX
なぜなにリアルタイムレンダリング
Satoshi Kodaira
PDF
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
PDF
最適輸送の計算アルゴリズムの研究動向
ohken
PPTX
研究者のための Python による FPGA 入門
ryos36
PDF
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
Takateru Yamagishi
PPTX
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
PDF
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
Masashi Shibata
PDF
正しいものを正しくつくる
toshihiro ichitani
PDF
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
Preferred Networks
PDF
C++ マルチスレッドプログラミング
Kohsuke Yuasa
PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
TensorFlow XLAは、 中で何をやっているのか?
Mr. Vengineer
Marp Tutorial
Rui Watanabe
機械学習モデルのサービングとは?
Sho Tanaka
機械学習で泣かないためのコード設計
Takahiro Kubo
冬のLock free祭り safe
Kumazaki Hiroki
1076: CUDAデバッグ・プロファイリング入門
NVIDIA Japan
backbone としての timm 入門
Takuji Tahara
2015年度先端GPGPUシミュレーション工学特論 第5回 GPUのメモリ階層の詳細(様々なメモリの利用)
智啓 出川
関数型プログラミングのデザインパターンひとめぐり
Kazuyuki TAKASE
なぜなにリアルタイムレンダリング
Satoshi Kodaira
テスト文字列に「うんこ」と入れるな
Kentaro Matsui
最適輸送の計算アルゴリズムの研究動向
ohken
研究者のための Python による FPGA 入門
ryos36
CUDAのアセンブリ言語基礎のまとめ PTXとSASSの概説
Takateru Yamagishi
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
サイバーエージェントにおけるMLOpsに関する取り組み at PyDataTokyo 23
Masashi Shibata
正しいものを正しくつくる
toshihiro ichitani
ゼロから始める深層強化学習(NLP2018講演資料)/ Introduction of Deep Reinforcement Learning
Preferred Networks
C++ マルチスレッドプログラミング
Kohsuke Yuasa
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
Tokoroten Nakayama
Ad
Viewers also liked
(6)
PDF
CuPy解説
Ryosuke Okuta
PDF
ディープラーニングフレームワーク とChainerの実装
Ryosuke Okuta
PDF
GPU上でのNLP向け深層学習の実装について
Yuya Unno
PDF
深層学習フレームワーク Chainer の開発と今後の展開
Seiya Tokui
PDF
Chainerチュートリアル -v1.5向け- ViEW2015
Ryosuke Okuta
PDF
Introduction to DEEPstation the GUI Deep learning environment for chainer
Ryo Shimizu
CuPy解説
Ryosuke Okuta
ディープラーニングフレームワーク とChainerの実装
Ryosuke Okuta
GPU上でのNLP向け深層学習の実装について
Yuya Unno
深層学習フレームワーク Chainer の開発と今後の展開
Seiya Tokui
Chainerチュートリアル -v1.5向け- ViEW2015
Ryosuke Okuta
Introduction to DEEPstation the GUI Deep learning environment for chainer
Ryo Shimizu
Ad
Similar to PyOpenCLによるGPGPU入門
(20)
PDF
OpenCLに触れてみよう
You&I
PDF
PEZY-SC programming overview
Ryo Sakamoto
KEY
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
PDF
Pythonによる並列プログラミング -GPGPUも-
Yusaku Watanabe
KEY
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
Yosuke Onoue
PDF
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Mr. Vengineer
PDF
Python で munin plugin を書いてみる
ftnk
PDF
Cuda
Shumpei Hozumi
PDF
GTC Japan 2017
Hitoshi Sato
PDF
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Preferred Networks
PDF
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
PDF
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
智啓 出川
PDF
C base design methodology with s dx and xilinx ml
ssuser3a4b8c
PDF
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
Ryuuta Tsunashima
PDF
Python physicalcomputing
Noboru Irieda
PDF
C#, C/CLI と CUDAによる画像処理ことはじめ
NVIDIA Japan
PDF
Data Parallel C++ と OpenVINO で iGPU, NPU の計算速度とエネルギー効率を測ってみた
Muneyoshi Suzuki
PDF
Anaconda & NumbaPro 使ってみた
Yosuke Onoue
PDF
Lisp Meet Up #19, cl-cuda: a library to use NVIDIA CUDA in Common Lisp
masayukitakagi
PDF
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
Computational Materials Science Initiative
OpenCLに触れてみよう
You&I
PEZY-SC programming overview
Ryo Sakamoto
関東GPGPU勉強会 LLVM meets GPU
Takuro Iizuka
Pythonによる並列プログラミング -GPGPUも-
Yusaku Watanabe
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
Yosuke Onoue
Altera SDK for OpenCL解体新書 : ホストとデバイスの関係
Mr. Vengineer
Python で munin plugin を書いてみる
ftnk
Cuda
Shumpei Hozumi
GTC Japan 2017
Hitoshi Sato
Kubernetes meetup-tokyo-13-customizing-kubernetes-for-ml-cluster
Preferred Networks
[GTCJ2018]CuPy -NumPy互換GPUライブラリによるPythonでの高速計算- PFN奥田遼介
Preferred Networks
2015年度GPGPU実践プログラミング 第3回 GPGPUプログラミング環境
智啓 出川
C base design methodology with s dx and xilinx ml
ssuser3a4b8c
GPU-FPGA 協調計算を記述するためのプログラミング環境に関する研究(HPC169 No.10)
Ryuuta Tsunashima
Python physicalcomputing
Noboru Irieda
C#, C/CLI と CUDAによる画像処理ことはじめ
NVIDIA Japan
Data Parallel C++ と OpenVINO で iGPU, NPU の計算速度とエネルギー効率を測ってみた
Muneyoshi Suzuki
Anaconda & NumbaPro 使ってみた
Yosuke Onoue
Lisp Meet Up #19, cl-cuda: a library to use NVIDIA CUDA in Common Lisp
masayukitakagi
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
Computational Materials Science Initiative
More from Yosuke Onoue
(17)
PDF
Angular 2のRenderer
Yosuke Onoue
PDF
アニメーション(のためのパフォーマンス)の基礎知識
Yosuke Onoue
PDF
AngularJSでデータビジュアライゼーションがしたい
Yosuke Onoue
PDF
GDG DevFest Kobe Firebaseハンズオン勉強会
Yosuke Onoue
PDF
Polymerやってみた
Yosuke Onoue
PDF
asm.jsとWebAssemblyって実際なんなの?
Yosuke Onoue
PDF
AngularFireで楽々バックエンド
Yosuke Onoue
PDF
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
Yosuke Onoue
PDF
AngularJSでの非同期処理の話
Yosuke Onoue
PDF
社会的決定とAHP
Yosuke Onoue
PDF
CUDA 6の話@関西GPGPU勉強会#5
Yosuke Onoue
PDF
PythonistaがOCamlを実用する方法
Yosuke Onoue
KEY
What's New In Python 3.3をざっと眺める
Yosuke Onoue
PPTX
数理最適化とPython
Yosuke Onoue
PPTX
201010ksmap
Yosuke Onoue
PPTX
PyCUDAの紹介
Yosuke Onoue
PPT
Rsa暗号で彼女が出来るらしい
Yosuke Onoue
Angular 2のRenderer
Yosuke Onoue
アニメーション(のためのパフォーマンス)の基礎知識
Yosuke Onoue
AngularJSでデータビジュアライゼーションがしたい
Yosuke Onoue
GDG DevFest Kobe Firebaseハンズオン勉強会
Yosuke Onoue
Polymerやってみた
Yosuke Onoue
asm.jsとWebAssemblyって実際なんなの?
Yosuke Onoue
AngularFireで楽々バックエンド
Yosuke Onoue
AngularJSとD3.jsによるインタラクティブデータビジュアライゼーション
Yosuke Onoue
AngularJSでの非同期処理の話
Yosuke Onoue
社会的決定とAHP
Yosuke Onoue
CUDA 6の話@関西GPGPU勉強会#5
Yosuke Onoue
PythonistaがOCamlを実用する方法
Yosuke Onoue
What's New In Python 3.3をざっと眺める
Yosuke Onoue
数理最適化とPython
Yosuke Onoue
201010ksmap
Yosuke Onoue
PyCUDAの紹介
Yosuke Onoue
Rsa暗号で彼女が出来るらしい
Yosuke Onoue
PyOpenCLによるGPGPU入門
1.
PyOpenCLによる GPGPU入門
2.
お前、誰よ 尾上 洋介(@_likr) 関西大学大学院 総合情報学研究科 M2
ナップザック問題とかやってる PythonとかOCamlも好き
3.
おのうえとGPGPU 2010年夏 卒研のためGPGPUに取り組む 2010年冬 GPGPUで論文投稿 2011年夏 某社でGPGPU関係のインターンに参加 2011年冬 kyoto.pyでPyOpenCLの布教活動 2012年春 修論のためのGPUプログラムを開発中?
4.
GPGPUとは GPGPU : General
Purpose Computing on GPU GPUによる汎目的計算 2003年頃から利用が開始 スパコンなどでも利用 今後モバイルにも普及が進む(?)
5.
GPU処理の特徴 数百∼数千のコア 高速なメモリアクセス 高い費用対効果 演算性能向上率が高い
6.
OpenCLとは ヘテロジニアス並列環境のためのフレームワーク マルチコアCPU、GPU、DSP、FPGA
Host Device CPU Processor Bus Memory Memory
7.
Why OpenCL ? 各社のGPUが対応
NVIDIA、AMD、Intel (Ivy Bridge) 非プラットフォーム依存(建前上は) ピュアなC/C++
8.
Why Python ? ソースコードが簡潔 コンパイル不要 カーネルコードは通常のOpenCLと共通 Pythonの各種ライブラリを利用可能 GPGPU概念の習得、アプリケーション開発に最適
9.
Agenda 1.
概要 2. GPGPUの基礎 3. PyOpenCLによるGPGPU入門 4. PyOpenCLのArray 5. PythonによるOpenCLアプリケーション開発
10.
GPGPUの基礎
11.
ヘテロジニアス環境 異なる種類のプロセッサを組み合わせた ハイブリッドシステム 独立したメモリ領域
Host GPU CPU SM PCIe Memory Memory
12.
GPUのアーキテクチャ Streaming Multiprocessor(SM)
GPU GPUの処理実行単位 SM Streaming Processor(SP) Shared Memory CUDAコア SP Registers GPU全体のリソースと Global Memory SM毎のリソース NVIDIA GPUの構成(簡易)
13.
GPUのメモリ階層
SP毎 SM毎 全体 高速 Register Shared Memory Constant Memory 低速 Local Memory Global Memory
14.
ワークグループとワークアイテム ワークアイテムが処理の 最小単位(≒スレッド) ワークグループは ワークアイテムの集まり ワークグループごとに SMで処理される ワークアイテム、 ワークグループは
OpenCL Specification 1.1より 3次元のIDを持つ
15.
高速なGPU処理のために データ並列
スレッド間の同期を減 らす メモリ転送を減らす 条件分岐を減らす グローバルメモリアク セスを減らす … アクセスが高速なメモ リを使う 処理特性の理解が重要
16.
GPGPUの適用分野 行列・ベクトルの演算 画像処理、音声処理 流体計算、天文計算 線形計画問題、ナップザック問題、 スケジューリング問題、金融工学
17.
PyOpenCLによるGPGPU入門
18.
プラットフォームとデバイス 各社から提供される
NVIDIA OpenCL OpenCLプラットフォームは GPU 1 1台のマシンに同居可能 GPU 2 各プラットフォームには 1個以上のデバイス Intel OpenCL 実行時にプラットフォームと CPU デバイスを選択 GPU
19.
インストール 1.
OpenCL環境のインストール NVIDIA、AMD、Intel、Apple… 2. 依存ライブラリのインストール $ easy_install numpy $ easy_install mako 3. PyOpenCLのインストール $ easy_install pyopencl
20.
OpenCLプログラムの登場人物 Context
Context CommandQueue Host デバイスの制御 Command Queue Buffer GPU上のメモリ GPU Kernel GPUで実行されるプログラム Program Buffer Program Kernelの集まり Kernel
21.
基本手順 1.
Context、CommandQueue、 Programの作成 Host GPU 2. GPUのメモリ確保 CPU SM 3. GPUへのデータ転送 PCIe Memory Memory 4. GPUでの計算 5. GPUからのデータ転送
22.
Contextの作成
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 create_some_context() 4 5 import pyopencl as cl import numpy 実行時にデバイスと 6 7 # Contextの作成 プラットフォームを 8 ctx = cl.create_some_context() 9 選択 10 # CommandQueueの作成 11 queue = cl.CommandQueue(ctx) [onoue@localhost test]$ python sample.py Choose device(s): [0] <pyopencl.Device 'Tesla C2050' on 'NVIDIA CUDA' at 0xfd4000> [1] <pyopencl.Device 'GeForce GT 240' on 'NVIDIA CUDA' at 0xc85df0> Choice, comma-separated [0]:0
23.
Programの作成
13 # Programの作成 カーネル関数は 14 prg = cl.Program(ctx, """//CL// 15 __kernel void sum( OpenCL C言語で実装 16 __global const float *a, 17 __global const float *b, 18 __global float *c Pythonソース内に 19 20 ) { 21 int gid = get_global_id(0); カーネル関数を 22 c[gid] = a[gid] + b[gid]; 23 } 文字列で埋め込む 24 """).build()
24.
デバイス側メモリの確保 ホストとデバイス 26 #
ホスト側メモリ確保 それぞれでメモリ 27 a = numpy.random.rand(50000).astype(numpy.float32) 28 b = numpy.random.rand(50000).astype(numpy.float32) 29 a_plus_b = numpy.empty_like(a) 30 領域を確保 31 # デバイス側メモリ確保 32 mf = cl.mem_flags 33 size = a.nbytes 34 a_buf = cl.Buffer(ctx, mf.READ_ONLY, size) ホスト側には 35 36 b_buf = cl.Buffer(ctx, mf.READ_ONLY, size) dest_buf = cl.Buffer(ctx, mf.WRITE_ONLY, size) numpy.ndarrayを使用
25.
メモリ転送とカーネル呼び出し ホストのメモリはデバイスから直接操作不可 デバイスのメモリはホストから直接操作不可 カーネル関数呼び出し時に ワークアイテム、ワークグループのサイズを指定 38 #
デバイスへのメモリ転送 39 cl.enqueue_copy(queue, a_buf, a) 40 cl.enqueue_copy(queue, b_buf, b) 41 42 # カーネル呼び出し 43 prg.sum(queue, a.shape, None, a_buf, b_buf, dest_buf) 44 45 # デバイスからのメモリ転送 46 cl.enqueue_copy(queue, a_plus_b, dest_buf)
26.
PyOpenCLのArray
27.
pyopencl.array numpyライクなインタフェース ベクトル、行列演算 乱数列生成 リダクション、スキャンのショートカット デバイスを意識せずに演算の高速化が可能
28.
サンプルコード 11 # numpyのarrayをpyopenclのarrayに変換 12
a_host = numpy.random.rand(5000).astype(numpy.float32) 13 a = pyopencl.array.to_device(queue, a_host) 14 15 # ゼロクリアされたarrayの生成 16 b = pyopencl.array.zeros(queue, (5000,), numpy.float32) 17 18 # 値がランダムなarrayの生成 19 c = clrandom.rand(queue, (5000,), numpy.float32) 20 21 # 演算 22 a += 2 23 a /= 3 24 a += c 25 print a.get() 26 27 # 数学関数 28 print clmath.sin(c).get() 29 30 # リダクション 31 print pyopencl.array.sum(b)
29.
リダクション
10 1 8 -1 0 -2 3 5 総和 10 -1 11 4 最小値 最大値 21 3 … 24
30.
Reductionの高速化 共有メモリの使用 warpダイバージェントを減らす 多段リダクション … 考慮する要因がたくさん!
31.
カスタムリダクション
チューニングされたカーネルを必要な部分 の実装のみで利用可能 9 sum_square_expr = '+'.join('x{0}[i] * x{0}[i]'.format(i) for i in range(n)) 10 arguments = ', '.join('__global float* x{0}'.format(i) for i in range(n)) 11 kernel = ReductionKernel( 12 context, 13 numpy.int32, 14 neutral='0', 15 reduce_expr='a + b', 16 map_expr='({0} <= 1.f) ? 1 : 0'.format(sum_square_expr), 17 arguments=arguments)
32.
Pythonによる OpenCLアプリケーション開発
33.
PyOpenCLアプリケーション PythonのWebフレームワーク、GUIツールキット、そ の他ライブラリなどとシームレスに統合可能
34.
デモ1 OpenGL連携 PyOpenGL /
PyOpenCL による流体シミュレーション
35.
デモ2 PyQt4 Gaussian FIlter
36.
ソースコード デモ1 https://bitbucket.org/likr/pyopencl_rungekutta デモ2 https://bitbucket.org/likr/gaussian
37.
最後に
38.
まとめ OpenCLで非プラットフォーム依存な GPUコンピューティングを習得 PyOpenCLによる簡潔なコーディングで OpenCLの概念を素早く吸収 Pythonの各種ライブラリを使った アプリケーション開発
39.
参考資料 CUDA プログラミング入門(白山工業 森野編) http://www.youtube.com/user/NVIDIAJapan はじめてのCUDAプログラミング ー脅威の開発環境[GPU+CUDA]を使いこなす! http://www.amazon.co.jp/dp/4777514773 PyCUDAの紹介 -
PythonとAWSですぐ始めるGPUコンピューティング http://www.slideshare.net/likr/pycuda
40.
参考資料 改訂新版 OpenCL入門 1.2対応 マルチコアCPU・GPUのための並列プログラミング http://www.amazon.co.jp/dp/4844331728 The
OpenCL Specification Version 1.2 http://www.khronos.org/registry/cl/specs/opencl-1.2.pdf PyOpenCL http://mathema.tician.de/software/pyopencl PyOpenCLハンズオン in kyoto.py 資料 http://pykyoto201109-pyopencl.s3-website-ap-northeast-1.amazonaws.com/pyopencl.html
41.
ご清聴ありがとうございました
Editor's Notes
#2:
\n
#3:
\n
#4:
\n
#5:
\n
#6:
\n
#7:
\n
#8:
\n
#9:
\n
#10:
\n
#11:
\n
#12:
\n
#13:
\n
#14:
\n
#15:
\n
#16:
\n
#17:
\n
#18:
\n
#19:
\n
#20:
\n
#21:
\n
#22:
\n
#23:
\n
#24:
\n
#25:
\n
#26:
\n
#27:
\n
#28:
\n
#29:
\n
#30:
\n
#31:
\n
#32:
\n
#33:
\n
#34:
\n
#35:
\n
#36:
\n
#37:
\n
#38:
\n
#39:
\n
#40:
\n
#41:
\n
#42:
\n
Download