SlideShare a Scribd company logo
Enviar pesquisa
Carregar
Entrar
Cadastre-se
関東GPGPU勉強会 LLVM meets GPU
Denunciar
Takuro Iizuka
Seguir
Programmer em Fixstars Corporation
2 de Jun de 2012
•
0 gostou
•
4,805 visualizações
1
de
52
関東GPGPU勉強会 LLVM meets GPU
2 de Jun de 2012
•
0 gostou
•
4,805 visualizações
Baixar agora
Baixar para ler offline
Denunciar
Takuro Iizuka
Seguir
Programmer em Fixstars Corporation
Recomendados
きつねさんでもわかるLlvm読書会 第2回
Tomoya Kawanishi
9.7K visualizações
•
56 slides
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
10.7K visualizações
•
45 slides
llvm入門
MITSUNARI Shigeo
16.6K visualizações
•
19 slides
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
MITSUNARI Shigeo
14.5K visualizações
•
45 slides
フラグを愛でる
MITSUNARI Shigeo
7.7K visualizações
•
24 slides
LLVM最適化のこつ
MITSUNARI Shigeo
7.4K visualizações
•
27 slides
Mais conteúdo relacionado
Mais procurados
Prosym2012
MITSUNARI Shigeo
2.7K visualizações
•
33 slides
条件分岐とcmovとmaxps
MITSUNARI Shigeo
5.6K visualizações
•
24 slides
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
MITSUNARI Shigeo
8.4K visualizações
•
22 slides
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
MITSUNARI Shigeo
5.2K visualizações
•
20 slides
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
Ryo Sakamoto
8.8K visualizações
•
45 slides
GPGPU deいろんな問題解いてみた
Ryo Sakamoto
2.3K visualizações
•
39 slides
Mais procurados
(20)
Prosym2012
MITSUNARI Shigeo
•
2.7K visualizações
条件分岐とcmovとmaxps
MITSUNARI Shigeo
•
5.6K visualizações
準同型暗号の実装とMontgomery, Karatsuba, FFT の性能
MITSUNARI Shigeo
•
8.4K visualizações
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
MITSUNARI Shigeo
•
5.2K visualizações
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
Ryo Sakamoto
•
8.8K visualizações
GPGPU deいろんな問題解いてみた
Ryo Sakamoto
•
2.3K visualizações
Emcjp item33,34
MITSUNARI Shigeo
•
1.6K visualizações
optimal Ate pairing
MITSUNARI Shigeo
•
2.5K visualizações
PyOpenCLによるGPGPU入門
Yosuke Onoue
•
14.9K visualizações
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
•
14.9K visualizações
Wavelet matrix implementation
MITSUNARI Shigeo
•
6.4K visualizações
研究動向から考えるx86/x64最適化手法
Takeshi Yamamuro
•
6K visualizações
組み込み関数(intrinsic)によるSIMD入門
Norishige Fukushima
•
46.9K visualizações
20180728 halide-study
Fixstars Corporation
•
3.3K visualizações
WASM(WebAssembly)入門 ペアリング演算やってみた
MITSUNARI Shigeo
•
3.3K visualizações
From IA-32 to avx-512
MITSUNARI Shigeo
•
3.2K visualizações
Effective Modern C++ 読書会 Item 35
Keisuke Fukuda
•
10.9K visualizações
Boost.SIMD
Akira Takahashi
•
4.6K visualizações
ElGamal型暗号文に対する任意関数演算・再暗号化の二者間秘密計算プロトコルとその応用
MITSUNARI Shigeo
•
1.3K visualizações
新しい並列for構文のご提案
yohhoy
•
29.6K visualizações
Destaque
Code iq interpretation_tanaka_publish
Fixstars Corporation
3.7K visualizações
•
9 slides
SQL+GPU+SSD=∞ (Japanese)
Kohei KaiGai
9.5K visualizações
•
27 slides
[計算シミュレーション勉強会#1] 粒子法の復習(陽解法と陰解法の比較から)
aokomoriuta
12.8K visualizações
•
49 slides
Webの未来 〜 PNaClとasm.jsでカワルミライ - いま、モバイルWebの先端で起こっていること
Kei Nakazawa
36.5K visualizações
•
42 slides
並列プログラミング入門!&おさらい!
道化師 堂華
10.5K visualizações
•
46 slides
OpenMPSみんな使ってねー[第36回オープンCAE勉強会@関東]
aokomoriuta
5.1K visualizações
•
25 slides
Destaque
(10)
Code iq interpretation_tanaka_publish
Fixstars Corporation
•
3.7K visualizações
SQL+GPU+SSD=∞ (Japanese)
Kohei KaiGai
•
9.5K visualizações
[計算シミュレーション勉強会#1] 粒子法の復習(陽解法と陰解法の比較から)
aokomoriuta
•
12.8K visualizações
Webの未来 〜 PNaClとasm.jsでカワルミライ - いま、モバイルWebの先端で起こっていること
Kei Nakazawa
•
36.5K visualizações
並列プログラミング入門!&おさらい!
道化師 堂華
•
10.5K visualizações
OpenMPSみんな使ってねー[第36回オープンCAE勉強会@関東]
aokomoriuta
•
5.1K visualizações
TechFeedのつくりかた - Angular2/Webpack/Ionic2/Cordova実践入門
Shumpei Shiraishi
•
40K visualizações
1075: .NETからCUDAを使うひとつの方法
NVIDIA Japan
•
4.8K visualizações
C#, C/CLI と CUDAによる画像処理ことはじめ
NVIDIA Japan
•
7K visualizações
CUDAプログラミング入門
NVIDIA Japan
•
29K visualizações
Similar a 関東GPGPU勉強会 LLVM meets GPU
Python physicalcomputing
Noboru Irieda
1.5K visualizações
•
58 slides
Let's play with Goldfish
Tetsuyuki Kobayashi
5.9K visualizações
•
24 slides
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
Izumi Tsutsui
7.2K visualizações
•
43 slides
20210515 cae linux_install_vb
YohichiShiina
280 visualizações
•
56 slides
Dalvik仮想マシンのアーキテクチャ 改訂版
Takuya Matsunaga
5.3K visualizações
•
20 slides
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
Computational Materials Science Initiative
4.2K visualizações
•
67 slides
Similar a 関東GPGPU勉強会 LLVM meets GPU
(20)
Python physicalcomputing
Noboru Irieda
•
1.5K visualizações
Let's play with Goldfish
Tetsuyuki Kobayashi
•
5.9K visualizações
NetBSDのクロスビルドのしくみとインストール済みLive Imageの作成
Izumi Tsutsui
•
7.2K visualizações
20210515 cae linux_install_vb
YohichiShiina
•
280 visualizações
Dalvik仮想マシンのアーキテクチャ 改訂版
Takuya Matsunaga
•
5.3K visualizações
CMSI計算科学技術特論B(14) OpenACC・CUDAによるGPUコンピューティング
Computational Materials Science Initiative
•
4.2K visualizações
WebAssemblyとBlazor 、WebAssembly System Interfaceでコンテナライズの設計を解説
Takao Tetsuro
•
486 visualizações
HaskellではじめるCortex-M3組込みプログラミング
Kiwamu Okabe
•
2.8K visualizações
130710 02
openrtm
•
1.4K visualizações
IL2CPPに関する軽い話
Wooram Yang
•
18.1K visualizações
マイクロサービス時代の生存戦略 with HashiCorp
Masahito Zembutsu
•
5.8K visualizações
Pythonによる並列プログラミング -GPGPUも-
Yusaku Watanabe
•
5K visualizações
DE0でラジコンカー作ってみた 関西de0 fpga勉強会20120519
Yasuhiro Ishii
•
3K visualizações
GTC Japan 2017
Hitoshi Sato
•
828 visualizações
The Next Generation for C# Developers
Takayoshi Tanaka
•
5K visualizações
Xbyakの紹介とその周辺
MITSUNARI Shigeo
•
7.8K visualizações
JTF2020 クロスコンパイルだけが能ではない組み込みLinuxシステムのCI/CDインフラ構築
yaegashi
•
156 visualizações
20130819 jjugnslt
Shinya Takebayashi
•
2K visualizações
Hello, DirectCompute
dasyprocta
•
6.5K visualizações
NetBSD on Google Compute Engine
Ryo ONODERA
•
733 visualizações
関東GPGPU勉強会 LLVM meets GPU
1.
LLVM meets GPU
twitter : iitaku
2.
LLVMってなによ?
3.
Low L e ve
l Vi r t ua l M a c hi ne
4.
ろーれべる・・・ばーちゃるましん?
5.
高級
低級 低級な空想上の機械?
6.
ちがいます
7.
説明しよう!CV:富山敬
8.
LLVMとは! コンパイル時、リンク時、実行時などあらゆる時点で プログラムを最適化するように設計された、
任意のプログラミング言語に対応可能な コンパイラ基盤である! by wikipedia
9.
That’s it!
10.
なんか・・・よくわからないけど?
11.
LLVMの仕事
C X86 Lexer Optimize Parser Generate Asm Generate IR C++ ARM LLVM IR Obj-C Power JIT Yet Another Programming Language Program Yet Another Hardware Platform
12.
ようするに • ククク・・・俺の最強言語(ことだま)で 世界を書き換えてやるよ • やれやれ・・この程度の最適化、奴にまかせておけ •
いつの間にこんな速く・・・?! 動的コード生成・・だとッ・・・・? • ああ・・どうやら新たなチップらしい。・・・わかっ
13.
なんてことができます
14.
さて、そろそろGPUの話を
15.
去年あたりから、 LLVMにはNVIDIA GPU向けの実装が入っています
16.
CUDA Frontend
PTX Backend など。しかしこれとは別に・・・
17.
May, 2012 @GTC2012 CUDA
Compiler SDK Preview Launched !
18.
なにができるの?
CUDA Compiler SDK Preview NVVM IR PTX Optimize, Codegen Yet Another NVIDIA Programming Language GPU
19.
・・・んん?
20.
なにができるの?
CUDA Compiler SDK Preview NVVM IR PTX Optimize, Codegen Yet Another NVIDIA Programming Language GPU
21.
誤植ではありません
22.
説明しよう!(2回目)
23.
NVVM IRとは! GPUのカーネルを表現するためにデザインされた、
LLVM IRのサブセットである! LLVM IRにwell-formedなため、既存のツールチェイ ンからはLLVM IRとして取り扱うことが可能である!
24.
細かい話 •
__device__、 __constant__などはLLVMのaddress space number という概念で表される • __global__関数、__device__関数などの種別はmetadataという 仕組みで表される • 追加の組み込み関数が幾つか(nvvm.*) • 同期、テクスチャ/サーフェス、特殊レジスタ、etc..
25.
NVVM Library API •
Start and Shutdown • Create Compiler Unit • Verify • Compile To PTX • Get Result
26.
おや、いいところに・・・
28.
!
29.
・・・しつれいしました
31.
PyCUDA
32.
1 import pycuda.driver
as drv 2 import pycuda.tools 3 import pycuda.autoinit 4 import numpy 5 import numpy.linalg as la 6 from pycuda.compiler import SourceModule 7 8 mod = SourceModule(""" 9 __global__ void multiply_them(float *dest, float *a, float *b) 10 { 11 const int i = threadIdx.x; 12 dest[i] = a[i] * b[i]; 13 } 14 """) 15 16 multiply_them = mod.get_function("multiply_them") 17 18 a = numpy.random.randn(400).astype(numpy.float32) 19 b = numpy.random.randn(400).astype(numpy.float32) 20 21 dest = numpy.zeros_like(a) 22 multiply_them( 23 drv.Out(dest), drv.In(a), drv.In(b), 24 block=(400,1,1)) 25 26 print dest-a*b PythonからGPUプログラミングが簡単にできる!
33.
でも・・・
34.
4 import numpy
5 import numpy.linalg as la 6 from pycuda.compiler import SourceModule 7 8 mod = SourceModule(""" 9 __global__ void multiply_them(float *dest, float *a, float *b) 10 { 11 const int i = threadIdx.x; 12 dest[i] = a[i] * b[i]; 13 } 14 """) 15 16 multiply_them = mod.get_function("multiply_them") 17 18 a = numpy.random.randn(400).astype(numpy.float32) 19 b = numpy.random.randn(400).astype(numpy.float32) 20 21 dest = numpy.zeros_like(a) 22 multiply_them( 23 drv.Out(dest), drv.In(a), drv.In(b), 24 block=(400,1,1))
35.
8 mod =
SourceModule(""" 9 __global__ void multiply_them(float *dest, float *a, float *b) 10 { 11 const int i = threadIdx.x; 12 dest[i] = a[i] * b[i]; 13 } 14 """)
36.
ダサッ☆
38.
1 import pycuda.driver
as drv 2 import pycuda.tools 3 import pycuda.autoinit 4 import numpy 5 import numpy.linalg as la 6 from pycuda.compiler import SourceModule 7 8 @kernel 9 def multiply_them(dest, a, b): 10 i = threadIdx.x 11 dest[i] = a[i] * b[i]; 12 こんなかんじで書きたい 13 a = numpy.random.randn(400).astype(numpy.float32) 14 b = numpy.random.randn(400).astype(numpy.float32) 15 16 dest = numpy.zeros_like(a) 17 multiply_them( 18 drv.Out(dest), drv.In(a), drv.In(b), 19 block=(400,1,1)) 20 21 print dest-a*b
39.
実装してみた pynvvm
40.
@kernelデコレータで 1 import
numpy as np 2 3 from pynvvm.kernel import kernel コード生成 4 from pynvvm.nvtype import array, float32, int32 5 6 @kernel(array(float32), array(float32), array(float32), float32(), int32(), int32()) 7 def saxpy(z, x, y, a, w, h): 8 xidx = pynvvm_ctaid_x() * pynvvm_ntid_x() + pynvvm_tid_x() 9 yidx = pynvvm_ctaid_y() * pynvvm_ntid_y() + pynvvm_tid_y() 10 11 if yidx < h and xidx < w: 専用のintrinsic 12 i = yidx * w + xidx 13 z[i] = a * x[i] + y[i] 14 15 return 16 17 n = 1024 18 19 x = np.random.randn(n*n).astype(np.float32) 20 y = np.random.randn(n*n).astype(np.float32) 21 a = np.float32(2.71828183) 22 23 z = np.zeros_like(x) 24 25 bsz = (16, 16, 1) In, Outはコード生成時に 26 gsz = ((n+16-1)/16, (n+16-1)/16, 1) 27 28 saxpy(bsz, gsz)(z, x, y, a, np.int32(n), np.int32(n)) 解析して自動転送 29 30 print(z)
41.
ast.parse()
@kernel decorator AST inspect.getsource() 型推論 kernel function Typed AST NVVM Codegen GO GPU! PTX Codegen PTX NVVM IR
42.
こんなのがサクッとできるので、 NVVMはえらいとおもいます!
43.
つくったもの • LLVM
LibraryのPython Binding • boost::pythonすばらしい • NVVM LibraryのPython Binding • CTypesすばらしい • Python AST -> NVVM IRのトランスレータ
44.
で、速いの? • saxpy •
numpy : 0.052 • pynvvm : 0.051 • python : 10.88
45.
結論:numpyすげえ
46.
• saxpyだと計算量少なすぎる • じゃあsgemmでも実装しよう
47.
ast.Forのトランスレータ書いてないから
実装できないやんけ!
48.
pynvvm current status •
対応していない構文いっぱい • 対応していない命令いっぱい • 対応していない関数いっぱい • バグも(たぶん)いっぱい
49.
http://bitbucket.org/iitaku/pynvvm
50.
まとめ • NVVM
IRはLLVM IR Builderで作れるので オレオレ言語をGPUで動かすのもカンタン! • アホなIR作っても色々最適化してくれるのでハッピー • みんなもCUDA Compiler SDKであそぼう
51.
Related Works •
py2llvm • python -> LLVM IR • http://code.google.com/p/py2llvm/ • copperhead • 自動並列化 • http://code.google.com/p/copperhead/
52.
Any Question?
Notas do Editor
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n