SlideShare a Scribd company logo
1 of 51
aokomoriuta (2013-06-01): 関東GPGPU勉強会
青子守歌
ライブラリを使って
大規模疎行列線形方程式を解いてみよう
- 2 -
aokomoriuta (2013-06-01): 関東GPGPU勉強会
まずはじめに
- 3 -
aokomoriuta (2013-06-01): 関東GPGPU勉強会
感謝を述べましょう
Thank you!!!!!!!!!!!!!!
山田さん
&
YamadaSysems
<まずはじめに>
- 4 -
aokomoriuta (2013-06-01): 関東GPGPU勉強会
自己紹介
- 5 -
aokomoriuta (2013-06-01): 関東GPGPU勉強会
名前とアバター
青子守歌 / aokomoriuta
※call me “あお”
<自己紹介>
- 6 -
aokomoriuta (2013-06-01): 関東GPGPU勉強会
いろんなとこのアカウント
twitter: @aokomorita
github: aokomoriuta
web: j.mp/ao_komoriuta
<自己紹介>
- 7 -
aokomoriuta (2013-06-01): 関東GPGPU勉強会
専門分野
分類:
土木工学
>水理学
>計算力学
粒子法(MPS法)を用いた計算力学
@土木工学(主に水工学分野)
<自己紹介>
- 8 -
aokomoriuta (2013-06-01): 関東GPGPU勉強会
計算力学とは
実験空間 計算空間
File:Coastal defences, Beesands - geograph.org.uk - 69707.jpg
by Nigel Chadwick : CC-BY-SA 2.0 Generic
File:Gileston20.jpg
by Mick Lobbi : CC-BY-SA 2.0 Generic
File:Dolos.jpg
by Adam Brinki : CC-BY-SA 3.0 Unported
現実空間
海岸工学・水工学分野において
代替となりうるか?
<自己紹介>
- 9 -
aokomoriuta (2013-06-01): 関東GPGPU勉強会
こんなこと言ってますので
プログラマじゃないです!!
計算力学屋です!
<自己紹介>
(超重要)
- 10 -
aokomoriuta (2013-06-01): 関東GPGPU勉強会
だから
カーネルがりがり
低レイヤー最適化
<自己紹介>
嫌!!
- 11 -
aokomoriuta (2013-06-01): 関東GPGPU勉強会
というわけで
ライブラリを使って
らくらく
<自己紹介>
- 12 -
aokomoriuta (2013-06-01): 関東GPGPU勉強会
解法の紹介
- 13 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
共役勾配法
連立一次方程式の解法
<解法の紹介>
ベクトル・行列演算を
収束するまで繰り返す
Ax=bを解く
x・Ax/2 - x・bを最小化
※Aが対称正定値のみ
- 14 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
共役勾配法アルゴリズム
ap=Ax
r2=r・r
ap=Ap
α=r2 / p・ap
x'=x + αp
p=r
r=b - ap
r'=r - αap
r2'=r'・r'
β=r2'/r2
p=r' + βp
収束するまで繰り返し
<解法の紹介>
- 15 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
共役勾配法の内訳
ap=Ax
r2=r・r
ap=Ap
α=r2 / p・ap
x'=x + αp
p=r
r=b - ap
r'=r - αap
r2'=r'・r'
β=r2'/r2
収束するまで繰り返し
p=r' + βp
行列とベクトルの積
ベクトル同士の加減
ベクトルの複製
ベクトルの内積
行列とベクトルの積
ベクトルの内積
ベクトルの内積
ベクトル同士の加減
ベクトル同士の加減
ベクトル同士の加減
浮動小数点演算
<解法の紹介>
- 16 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
共役勾配法は
<解法の紹介>
GPGPU向き?
行列・ベクトル演算
だけで解ける!!
- 17 -
aokomoriuta (2013-06-01): 関東GPGPU勉強会
GPGPU行列演算ライブラリ
- 18 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
GPGPU行列演算ライブラリ
<ライブラリ>
・CUBLAS/cuSPARSE
・MAGMA
・APPML
・ViennaCL
CUDA
OpenCL
両方
- 19 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
一番速いのは
<ライブラリ>
おそらく
CUBLAS/cuSPARSE
(※もちろん環境による)
- 20 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
一番手軽なのは
<ライブラリ>
(※もちろん環境による)
おそらく
ViennaCL
- 21 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
今日は
<ライブラリ>
(せっかくTitanが使えるので)
CUBLAS/cuSPARSE
- 22 -
aokomoriuta (2013-06-01): 関東GPGPU勉強会
CUBLAS/cuSPARSE
- 23 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
CUBLAS
<CUBLAS/cuSPARSE>
(CUDA SDKに標準付属)
BLASがCUDAで使える
ライブラリ
by NVIDIA
- 24 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
cuSPARSE
<CUBLAS/cuSPARSE>
(CUDA SDKに標準付属)
CUBLAS=密行列
cuSPARSE=疎行列
- 25 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
再掲:共役勾配法
ap=Ax
r2=r・r
ap=Ap
α=r2 / p・ap
x'=x + αp
p=r
r=b - ap
r'=r - αap
r2'=r'・r'
β=r2'/r2
収束するまで繰り返し
p=r' + βp
行列とベクトルの積
ベクトル同士の加減
ベクトルの複製
ベクトルの内積
行列とベクトルの積
ベクトルの内積
ベクトルの内積
ベクトル同士の加減
ベクトル同士の加減
ベクトル同士の加減
浮動小数点演算
<CUBLAS/cuSPARSE>
- 26 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
必要な演算
・行列=ベクトル積
・ベクトル加減
・ベクトル内積
・ベクトルの複製
・浮動小数点演算
<CUBLAS/cuSPARSE>
- 27 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
ベクトル複製
<CUBLAS/cuSPARSE>
cublasDcopy_v2(cublas,
count,
x, offsetX
y, offsetY);
count: ベクトルのサイズ
offsetX, offsetY: 演算を開始するベクトルの先頭(通常は1)
cublas: 後述@p.27
COPY
y = x
- 28 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
ベクトル加減
<CUBLAS/cuSPARSE>
cublasDaxpy_v2(cublas,
count,
&alpha,
x, offsetX
y, offsetY);
count: ベクトルのサイズ
offsetX, offsetY: 演算を開始するベクトルの先頭(通常は1)
cublas: 後述@p.27
AXPY
y = αx + y
- 29 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
ベクトル内積
<CUBLAS/cuSPARSE>
cublasDdot_v2(cublas,
count,
x, offsetX,
y, offsetY,
&z);
count: ベクトルのサイズ
offsetX, offsetY: 演算を開始するベクトルの先頭(通常は1)
cublas: 後述@p.27
DOT
z = x・y
- 30 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
行列=ベクトル積
<CUBLAS/cuSPARSE>
cusparseDcsrmv_v2(cusparse,
CUSPARSE_OPERATION_NON_TRANSPOSE,
count, count, elementsCount,
&alpha,
matDescr,elements, rowOffsets, columnIndeces,
x,
&beta, y);
y = αAx + βy
count: 行列のサイズ
elementsCount: 行列の非ゼロ要素数
elements, rowOffset, columnIndeces: 係数行列AのCSR形式
cusparse, matDescr: 後述@p.27
CSRMV
- 31 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
準備するもの
<CUBLAS/cuSPARSE>
cublasHandle/cusparseHandle
// CUBLASハンドルを作成
::cublasHandle_t cublas;
::cublasCreate(&cublas);
// cuSPARSEハンドルを作成
::cusparseHandle_t cusparse;
::cusparseCreate(&cusparse);
cusparseMatDescr
// 行列形式を作成
// * 一般的な形式
// * 番号は0から開始
::cusparseMatDescr_t matDescr;
::cusparseCreateMatDescr(&matDescr);
::cusparseSetMatType(matDescr, CUSPARSE_MATRIX_TYPE_GENERAL);
::cusparseSetMatIndexBase(matDescr, CUSPARSE_INDEX_BASE_ZERO);
- 32 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
詳しくは
<CUBLAS/cuSPARSE>
リファレンス見てね!
・http://docs.nvidia.com/cuda/cublas/index.html
・http://docs.nvidia.com/cuda/cusparse/index.html
- 33 -
aokomoriuta (2013-06-01): 関東GPGPU勉強会
コード解説・デモ
- 34 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
URLはこちら
<コード解説・デモ>
https://github.com/aokomoriuta/ConjugateGradient/
tree/master/SimpleConjugateGradient
Titanで動かしてみます!
- 35 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
CPUは?
<コード解説・デモ>
boost::numeric::ublas
割と最適化されてて
速いらしい
- 36 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
比較しなきゃ!!
<コード解説・デモ>
01:30 就寝
08:00 起床
11:11 GPU側コード書き終わり
12:47 資料作成終わり
13:57 会場入り(遅刻)
14:00 エクストリームコーディング開始
- 37 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
エクストリームコーディング1
<コード解説・デモ>
serializationなんて用意してない
@手元のノートPC
- 38 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
エクストリームコーディング2
<コード解説・デモ>
型チェック(?)で怒られる
@YamadaSystem
- 39 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
頑張ったよ!
<コード解説・デモ>
CPUとの比較ができませんでしたぁぁ!!
私が無能なばかりに(略)
- 40 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
はい
<コード解説・デモ>
<お断り>
前のページは、主宰者はじめ周囲からの圧
力があったので入れたかっただけです。
- 41 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
結論
<コード解説・デモ>
GPGPUライブラリを使うと
簡単に線形方程式が
解けますね!
- 42 -
aokomoriuta (2013-06-01): 関東GPGPU勉強会
余談
- 43 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
GPGPU勉強会
<余談>
関西・関東GPGPU勉強会
盛り上がってるなー
- 44 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
でも
<余談>
個人的には
なんか
不完全燃焼な感じ
- 45 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
なんで
<余談>
GPGPUが
専門じゃないから!!
- 46 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
みなさんの
<余談>
専門/興味分野は
なんですか?
- 47 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
やりませんか
<余談>
計算シミュレーション
勉強会
- 48 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
計算シミュレーション勉強会
<余談>
計算機を使って
シミュレーション
してる人たちの
勉強会?
- 49 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
シミュレーション
<余談>
「シミュレーション」
と言えればなんでも!
(自称/他称問わず)
- 50 -
aokomoriuta (2012-09-11): 関東GPGPU勉強会
構想段階
<余談>
Coming not soon...
aokomoriuta (2012-10-13): 関東GPGPU勉強会
一部で特別な指定があるものを除き、全ての文章と画像は
クリエイティブ・コモンズ 表示-継承または表示-非営利 3.0 非移植で利用可能です。
Otherwise noted, all text and images are available
under the Creative Commons Attribution-Share Alike or Attribution-Noncommercial 3.0 Unported.
CC-BY-SA: http://creativecommons.org/licenses/by-sa/3.0 CC-BY-NC: http://creativecommons.org/licenses/by-nc/3.0
return 0;

More Related Content

Viewers also liked

メールサーバをちゃんとする
メールサーバをちゃんとするメールサーバをちゃんとする
メールサーバをちゃんとする
yaasita
 
Iod2014 原稿用 近藤
Iod2014 原稿用 近藤Iod2014 原稿用 近藤
Iod2014 原稿用 近藤
Miho Kondoh
 
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解 (線形連立一次方程式)
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解(線形連立一次方程式)2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解(線形連立一次方程式)
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解 (線形連立一次方程式)
智啓 出川
 
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
Yosuke Onoue
 
Rsa暗号で彼女が出来るらしい
Rsa暗号で彼女が出来るらしいRsa暗号で彼女が出来るらしい
Rsa暗号で彼女が出来るらしい
Yosuke Onoue
 
CUDA 6の話@関西GPGPU勉強会#5
CUDA 6の話@関西GPGPU勉強会#5CUDA 6の話@関西GPGPU勉強会#5
CUDA 6の話@関西GPGPU勉強会#5
Yosuke Onoue
 
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
智啓 出川
 
社会的決定とAHP
社会的決定とAHP社会的決定とAHP
社会的決定とAHP
Yosuke Onoue
 

Viewers also liked (20)

Nagareyama hyakka fix_2
Nagareyama hyakka fix_2Nagareyama hyakka fix_2
Nagareyama hyakka fix_2
 
スラム街出身のフィリピン人海外稼ぎ労働者安全な海外就労に対する考察 -ナボタス町サント・ニーョ村 C3 地区を対象に -
スラム街出身のフィリピン人海外稼ぎ労働者安全な海外就労に対する考察 -ナボタス町サント・ニーョ村 C3 地区を対象に -スラム街出身のフィリピン人海外稼ぎ労働者安全な海外就労に対する考察 -ナボタス町サント・ニーョ村 C3 地区を対象に -
スラム街出身のフィリピン人海外稼ぎ労働者安全な海外就労に対する考察 -ナボタス町サント・ニーョ村 C3 地区を対象に -
 
FOSS4G 2014 Tokyo懇親会 突然振られるプレゼン課題スライド
FOSS4G 2014 Tokyo懇親会 突然振られるプレゼン課題スライドFOSS4G 2014 Tokyo懇親会 突然振られるプレゼン課題スライド
FOSS4G 2014 Tokyo懇親会 突然振られるプレゼン課題スライド
 
シビック・テクノロジーによるまちづくり 自治体トピックスセミナー
シビック・テクノロジーによるまちづくり 自治体トピックスセミナーシビック・テクノロジーによるまちづくり 自治体トピックスセミナー
シビック・テクノロジーによるまちづくり 自治体トピックスセミナー
 
Hello, DirectCompute
Hello, DirectComputeHello, DirectCompute
Hello, DirectCompute
 
Xamarin入門(技術というより心構え編)
Xamarin入門(技術というより心構え編)Xamarin入門(技術というより心構え編)
Xamarin入門(技術というより心構え編)
 
2016年11月.NETラボLT:超余談ゲームプラットフォームの話
2016年11月.NETラボLT:超余談ゲームプラットフォームの話2016年11月.NETラボLT:超余談ゲームプラットフォームの話
2016年11月.NETラボLT:超余談ゲームプラットフォームの話
 
メールサーバをちゃんとする
メールサーバをちゃんとするメールサーバをちゃんとする
メールサーバをちゃんとする
 
Iod2014 原稿用 近藤
Iod2014 原稿用 近藤Iod2014 原稿用 近藤
Iod2014 原稿用 近藤
 
Common LispでGPGPU
Common LispでGPGPUCommon LispでGPGPU
Common LispでGPGPU
 
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解 (線形連立一次方程式)
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解(線形連立一次方程式)2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解(線形連立一次方程式)
2015年度先端GPGPUシミュレーション工学特論 第10回 Poisson方程式の求解 (線形連立一次方程式)
 
3D勉強会 第1回 3Dプログラミングのススメ
3D勉強会 第1回 3Dプログラミングのススメ3D勉強会 第1回 3Dプログラミングのススメ
3D勉強会 第1回 3Dプログラミングのススメ
 
教育機関でのJetsonの活用の可能性
教育機関でのJetsonの活用の可能性教育機関でのJetsonの活用の可能性
教育機関でのJetsonの活用の可能性
 
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
PyOpenCLによるGPGPU入門 Tokyo.SciPy#4 編
 
Rsa暗号で彼女が出来るらしい
Rsa暗号で彼女が出来るらしいRsa暗号で彼女が出来るらしい
Rsa暗号で彼女が出来るらしい
 
CUDA 6の話@関西GPGPU勉強会#5
CUDA 6の話@関西GPGPU勉強会#5CUDA 6の話@関西GPGPU勉強会#5
CUDA 6の話@関西GPGPU勉強会#5
 
Cuda fortranの利便性を高めるfortran言語の機能
Cuda fortranの利便性を高めるfortran言語の機能Cuda fortranの利便性を高めるfortran言語の機能
Cuda fortranの利便性を高めるfortran言語の機能
 
GPGPU Education at Nagaoka University of Technology: A Trial Run
GPGPU Education at Nagaoka University of Technology: A Trial RunGPGPU Education at Nagaoka University of Technology: A Trial Run
GPGPU Education at Nagaoka University of Technology: A Trial Run
 
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
GPGPU Seminar (Accelerataion of Lattice Boltzmann Method using CUDA Fortran)
 
社会的決定とAHP
社会的決定とAHP社会的決定とAHP
社会的決定とAHP
 

Recently uploaded

Recently uploaded (11)

Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 

[関東GPGPU勉強会#2] ライブラリを使って大規模疎行列線形方程式を解いてみよう

  • 2. - 2 - aokomoriuta (2013-06-01): 関東GPGPU勉強会 まずはじめに
  • 3. - 3 - aokomoriuta (2013-06-01): 関東GPGPU勉強会 感謝を述べましょう Thank you!!!!!!!!!!!!!! 山田さん & YamadaSysems <まずはじめに>
  • 4. - 4 - aokomoriuta (2013-06-01): 関東GPGPU勉強会 自己紹介
  • 5. - 5 - aokomoriuta (2013-06-01): 関東GPGPU勉強会 名前とアバター 青子守歌 / aokomoriuta ※call me “あお” <自己紹介>
  • 6. - 6 - aokomoriuta (2013-06-01): 関東GPGPU勉強会 いろんなとこのアカウント twitter: @aokomorita github: aokomoriuta web: j.mp/ao_komoriuta <自己紹介>
  • 7. - 7 - aokomoriuta (2013-06-01): 関東GPGPU勉強会 専門分野 分類: 土木工学 >水理学 >計算力学 粒子法(MPS法)を用いた計算力学 @土木工学(主に水工学分野) <自己紹介>
  • 8. - 8 - aokomoriuta (2013-06-01): 関東GPGPU勉強会 計算力学とは 実験空間 計算空間 File:Coastal defences, Beesands - geograph.org.uk - 69707.jpg by Nigel Chadwick : CC-BY-SA 2.0 Generic File:Gileston20.jpg by Mick Lobbi : CC-BY-SA 2.0 Generic File:Dolos.jpg by Adam Brinki : CC-BY-SA 3.0 Unported 現実空間 海岸工学・水工学分野において 代替となりうるか? <自己紹介>
  • 9. - 9 - aokomoriuta (2013-06-01): 関東GPGPU勉強会 こんなこと言ってますので プログラマじゃないです!! 計算力学屋です! <自己紹介> (超重要)
  • 10. - 10 - aokomoriuta (2013-06-01): 関東GPGPU勉強会 だから カーネルがりがり 低レイヤー最適化 <自己紹介> 嫌!!
  • 11. - 11 - aokomoriuta (2013-06-01): 関東GPGPU勉強会 というわけで ライブラリを使って らくらく <自己紹介>
  • 12. - 12 - aokomoriuta (2013-06-01): 関東GPGPU勉強会 解法の紹介
  • 13. - 13 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 共役勾配法 連立一次方程式の解法 <解法の紹介> ベクトル・行列演算を 収束するまで繰り返す Ax=bを解く x・Ax/2 - x・bを最小化 ※Aが対称正定値のみ
  • 14. - 14 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 共役勾配法アルゴリズム ap=Ax r2=r・r ap=Ap α=r2 / p・ap x'=x + αp p=r r=b - ap r'=r - αap r2'=r'・r' β=r2'/r2 p=r' + βp 収束するまで繰り返し <解法の紹介>
  • 15. - 15 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 共役勾配法の内訳 ap=Ax r2=r・r ap=Ap α=r2 / p・ap x'=x + αp p=r r=b - ap r'=r - αap r2'=r'・r' β=r2'/r2 収束するまで繰り返し p=r' + βp 行列とベクトルの積 ベクトル同士の加減 ベクトルの複製 ベクトルの内積 行列とベクトルの積 ベクトルの内積 ベクトルの内積 ベクトル同士の加減 ベクトル同士の加減 ベクトル同士の加減 浮動小数点演算 <解法の紹介>
  • 16. - 16 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 共役勾配法は <解法の紹介> GPGPU向き? 行列・ベクトル演算 だけで解ける!!
  • 17. - 17 - aokomoriuta (2013-06-01): 関東GPGPU勉強会 GPGPU行列演算ライブラリ
  • 18. - 18 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 GPGPU行列演算ライブラリ <ライブラリ> ・CUBLAS/cuSPARSE ・MAGMA ・APPML ・ViennaCL CUDA OpenCL 両方
  • 19. - 19 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 一番速いのは <ライブラリ> おそらく CUBLAS/cuSPARSE (※もちろん環境による)
  • 20. - 20 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 一番手軽なのは <ライブラリ> (※もちろん環境による) おそらく ViennaCL
  • 21. - 21 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 今日は <ライブラリ> (せっかくTitanが使えるので) CUBLAS/cuSPARSE
  • 22. - 22 - aokomoriuta (2013-06-01): 関東GPGPU勉強会 CUBLAS/cuSPARSE
  • 23. - 23 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 CUBLAS <CUBLAS/cuSPARSE> (CUDA SDKに標準付属) BLASがCUDAで使える ライブラリ by NVIDIA
  • 24. - 24 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 cuSPARSE <CUBLAS/cuSPARSE> (CUDA SDKに標準付属) CUBLAS=密行列 cuSPARSE=疎行列
  • 25. - 25 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 再掲:共役勾配法 ap=Ax r2=r・r ap=Ap α=r2 / p・ap x'=x + αp p=r r=b - ap r'=r - αap r2'=r'・r' β=r2'/r2 収束するまで繰り返し p=r' + βp 行列とベクトルの積 ベクトル同士の加減 ベクトルの複製 ベクトルの内積 行列とベクトルの積 ベクトルの内積 ベクトルの内積 ベクトル同士の加減 ベクトル同士の加減 ベクトル同士の加減 浮動小数点演算 <CUBLAS/cuSPARSE>
  • 26. - 26 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 必要な演算 ・行列=ベクトル積 ・ベクトル加減 ・ベクトル内積 ・ベクトルの複製 ・浮動小数点演算 <CUBLAS/cuSPARSE>
  • 27. - 27 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 ベクトル複製 <CUBLAS/cuSPARSE> cublasDcopy_v2(cublas, count, x, offsetX y, offsetY); count: ベクトルのサイズ offsetX, offsetY: 演算を開始するベクトルの先頭(通常は1) cublas: 後述@p.27 COPY y = x
  • 28. - 28 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 ベクトル加減 <CUBLAS/cuSPARSE> cublasDaxpy_v2(cublas, count, &alpha, x, offsetX y, offsetY); count: ベクトルのサイズ offsetX, offsetY: 演算を開始するベクトルの先頭(通常は1) cublas: 後述@p.27 AXPY y = αx + y
  • 29. - 29 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 ベクトル内積 <CUBLAS/cuSPARSE> cublasDdot_v2(cublas, count, x, offsetX, y, offsetY, &z); count: ベクトルのサイズ offsetX, offsetY: 演算を開始するベクトルの先頭(通常は1) cublas: 後述@p.27 DOT z = x・y
  • 30. - 30 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 行列=ベクトル積 <CUBLAS/cuSPARSE> cusparseDcsrmv_v2(cusparse, CUSPARSE_OPERATION_NON_TRANSPOSE, count, count, elementsCount, &alpha, matDescr,elements, rowOffsets, columnIndeces, x, &beta, y); y = αAx + βy count: 行列のサイズ elementsCount: 行列の非ゼロ要素数 elements, rowOffset, columnIndeces: 係数行列AのCSR形式 cusparse, matDescr: 後述@p.27 CSRMV
  • 31. - 31 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 準備するもの <CUBLAS/cuSPARSE> cublasHandle/cusparseHandle // CUBLASハンドルを作成 ::cublasHandle_t cublas; ::cublasCreate(&cublas); // cuSPARSEハンドルを作成 ::cusparseHandle_t cusparse; ::cusparseCreate(&cusparse); cusparseMatDescr // 行列形式を作成 // * 一般的な形式 // * 番号は0から開始 ::cusparseMatDescr_t matDescr; ::cusparseCreateMatDescr(&matDescr); ::cusparseSetMatType(matDescr, CUSPARSE_MATRIX_TYPE_GENERAL); ::cusparseSetMatIndexBase(matDescr, CUSPARSE_INDEX_BASE_ZERO);
  • 32. - 32 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 詳しくは <CUBLAS/cuSPARSE> リファレンス見てね! ・http://docs.nvidia.com/cuda/cublas/index.html ・http://docs.nvidia.com/cuda/cusparse/index.html
  • 33. - 33 - aokomoriuta (2013-06-01): 関東GPGPU勉強会 コード解説・デモ
  • 34. - 34 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 URLはこちら <コード解説・デモ> https://github.com/aokomoriuta/ConjugateGradient/ tree/master/SimpleConjugateGradient Titanで動かしてみます!
  • 35. - 35 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 CPUは? <コード解説・デモ> boost::numeric::ublas 割と最適化されてて 速いらしい
  • 36. - 36 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 比較しなきゃ!! <コード解説・デモ> 01:30 就寝 08:00 起床 11:11 GPU側コード書き終わり 12:47 資料作成終わり 13:57 会場入り(遅刻) 14:00 エクストリームコーディング開始
  • 37. - 37 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 エクストリームコーディング1 <コード解説・デモ> serializationなんて用意してない @手元のノートPC
  • 38. - 38 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 エクストリームコーディング2 <コード解説・デモ> 型チェック(?)で怒られる @YamadaSystem
  • 39. - 39 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 頑張ったよ! <コード解説・デモ> CPUとの比較ができませんでしたぁぁ!! 私が無能なばかりに(略)
  • 40. - 40 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 はい <コード解説・デモ> <お断り> 前のページは、主宰者はじめ周囲からの圧 力があったので入れたかっただけです。
  • 41. - 41 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 結論 <コード解説・デモ> GPGPUライブラリを使うと 簡単に線形方程式が 解けますね!
  • 42. - 42 - aokomoriuta (2013-06-01): 関東GPGPU勉強会 余談
  • 43. - 43 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 GPGPU勉強会 <余談> 関西・関東GPGPU勉強会 盛り上がってるなー
  • 44. - 44 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 でも <余談> 個人的には なんか 不完全燃焼な感じ
  • 45. - 45 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 なんで <余談> GPGPUが 専門じゃないから!!
  • 46. - 46 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 みなさんの <余談> 専門/興味分野は なんですか?
  • 47. - 47 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 やりませんか <余談> 計算シミュレーション 勉強会
  • 48. - 48 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 計算シミュレーション勉強会 <余談> 計算機を使って シミュレーション してる人たちの 勉強会?
  • 49. - 49 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 シミュレーション <余談> 「シミュレーション」 と言えればなんでも! (自称/他称問わず)
  • 50. - 50 - aokomoriuta (2012-09-11): 関東GPGPU勉強会 構想段階 <余談> Coming not soon...
  • 51. aokomoriuta (2012-10-13): 関東GPGPU勉強会 一部で特別な指定があるものを除き、全ての文章と画像は クリエイティブ・コモンズ 表示-継承または表示-非営利 3.0 非移植で利用可能です。 Otherwise noted, all text and images are available under the Creative Commons Attribution-Share Alike or Attribution-Noncommercial 3.0 Unported. CC-BY-SA: http://creativecommons.org/licenses/by-sa/3.0 CC-BY-NC: http://creativecommons.org/licenses/by-nc/3.0 return 0;