Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CompML CUDA C Hello World!
Search
ryoherisson
November 30, 2020
Programming
0
160
CompML CUDA C Hello World!
CompMLで発表した、CUDA Cプログラミングに関する発表資料です。
ryoherisson
November 30, 2020
Tweet
Share
More Decks by ryoherisson
See All by ryoherisson
論文紹介: tSNE-CUDA
ryoherisson
0
400
Multiplying Matrices Without Multiplying
ryoherisson
1
650
疎行列圧縮フォーマットの紹介
ryoherisson
0
510
Neural Network Pruning
ryoherisson
0
450
CompML: Introduction to Neural Network Pruning
ryoherisson
1
16k
Deep Neural NetworkのためのGPU演算処理高速化に関する研究
ryoherisson
0
13k
CompML: Precision and Recall for Time Series
ryoherisson
0
200
Other Decks in Programming
See All in Programming
Open source software: how to live long and go far
gaelvaroquaux
0
640
第3回 Snowflake 中部ユーザ会- dbt × Snowflake ハンズオン
hoto17296
4
370
CI改善もDatadogとともに
taumu
0
120
ソフトウェアエンジニアの成長
masuda220
PRO
11
1.4k
How mixi2 Uses TiDB for SNS Scalability and Performance
kanmo
37
14k
CSS Linter による Baseline サポートの仕組み
ryo_manba
1
110
定理証明プラットフォーム lapisla.net
abap34
1
1.8k
XStateを用いた堅牢なReact Components設計~複雑なClient Stateをシンプルに~ @React Tokyo ミートアップ #2
kfurusho
1
910
SwiftUIで単方向アーキテクチャを導入して得られた成果
takuyaosawa
0
270
動作確認やテストで漏れがちな観点3選
starfish719
6
1k
GoとPHPのインターフェイスの違い
shimabox
2
190
Rails アプリ地図考 Flush Cut
makicamel
1
120
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
35
1.6k
How GitHub (no longer) Works
holman
314
140k
Documentation Writing (for coders)
carmenintech
67
4.6k
Visualization
eitanlees
146
15k
Building Applications with DynamoDB
mza
93
6.2k
The Art of Programming - Codeland 2020
erikaheidi
53
13k
Making the Leap to Tech Lead
cromwellryan
133
9.1k
GitHub's CSS Performance
jonrohan
1030
460k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
21
2.5k
Java REST API Framework Comparison - PWX 2021
mraible
28
8.4k
GraphQLとの向き合い方2022年版
quramy
44
13k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
9
440
Transcript
CompML CUDA “Hello World!” Ryohei Izawa
CompML CUDA “Hello World!” +PIO$IFOH .BY(SPTTNBO 5Z.D,FSDIFS $6%"$ϓϩϑΣογϣφϧ ϓϩάϥϛϯά JNQSFTTUPQHFBSγϦʔζ
ΠϯϓϨε 1 主に,「CUDA C プロフェッショナル プログラミング」を 参考にしながら,CUDA Cについて学ぶこと ⽬的 本資料では,並列コンピューティングやGPUアーキテクチャ, CUDA Cプログラミングの初歩的な処理の流れを概観する.
CompML 並列コンピューティング
CompML 並列プログラミング 逐次プログラム 並列プログラム 問題を⼩さな計算(タスク)に分割し、逐次的に実⾏ データ依存性のない複数のタスクを同時に実⾏ 3 ※多くの場合は逐次的に処理する部分も含まれる +PIO$IFOH ଞ
QQ
CompML 並列化 タスク並列化 データ並列化 4 機能を複数のコアに分散させて実⾏する. 個別に処理することが可能で,かつ⼤部分を並⾏して実⾏できるタスクや関数が⼤量にある場合に可能. データを複数のコアに分散させて実⾏する. 同時に処理できるデータ要素が⼤量にある場合に可能. ⇨
CUDAプログラミングは特にデータ並列化に適している. +PIO$IFOH ଞ QQ
CompML コンピュータアーキテクチャ フリンの分類 5 命令 Single Multiple Single Multiple データ
Single Instruction Multiple Data (SIMD) Multiple Instruction Multiple Data (MIMD) Single Instruction Single Data (SISD) Multiple Instruction Single Data (MISD) SISD (Single Instruction Single Data) 逐次アーキテクチャ.1つのコアで,単⼀の命令ストリームで、 単⼀のデータを操作する. SIMD (Single Instruction Multiple Data) 並列アーキテクチャ.複数コアが全て同じ命令ストリーム を,別々のデータに対して実⾏ MISD (Multiple Instruction Single Data) 各コアが別々の命令ストリームを通じて,同じデータスト リームを実⾏. MIMD (Multiple Instruction Multiple Data) 並列アーキテクチャ.複数のコアが複数のデータストリー ムを処理し,それぞれ別の命令を実⾏する. +PIO$IFOH ଞ QQ
CompML 並列化の⽬的 6 遅延の低減 演算の開始から完了までにかかる時間.μ秒で表⽰されることが多い. 帯域幅の改善 単位時間あたりに処理できるデータ量.MB/s または GB/sで表⽰される. スループットの改善
単位時間あたりに処理できる演算量.GFLOPS※で表⽰される. ※ 1秒間に10億回の浮動⼩数点数演算を実⾏できること. +PIO$IFOH ଞ Q
CompML メモリ構成に基づくアーキテクチャ 7 マルチノード 分散メモリを使⽤ マルチプロセッサ シェアードメモリ使⽤ プロセッサ キャッシュ メモリ
相互接続ネットワーク プロセッサ キャッシュ メモリ プロセッサ キャッシュ メモリ … … … 複数のプロセッサがそれぞれのローカルメモリ の内容をネットワーク経由でやりとりする. プロセッサ キャッシュ シェアードメモリ プロセッサ キャッシュ プロセッサ キャッシュ … … バス 数⼗〜数百のプロセッサが物理的に同じメモリ に接続する. +PIO$IFOH ଞ QQ
CompML GPU
CompML ヘテロジニアスアーキテクチャ 9 ホモジニアス(同種)システム :同じアーキテクチャのプロセッサを使ってアプリケーションを実⾏ ヘテロジニアス(異種)システム:複数のプロセッサアーキテクチャを使ってアプリケーションを実⾏ ALU ALU ALU ALU
CU キャッシュ DRAM CPU DRAM DRAM GPU PCI Express GPUはCPUのコプロセッサ ⇨ CPU:ホスト GPU:デバイス ヘテロジニアスアーキテクチャ キャッシュ SM SM SM … Giga Thread Engine +PIO$IFOH ଞ Q
CompML GPUの性能評価 10 GPUの性能は,主に以下の特性によって表現される. GPUのパフォーマンスを表す指標 単位時間あたりに処理できる単精度または倍精度浮動⼩数点数演算量. GFLOPSまたはTFLOPSで表⽰される. • ピーク性能評価 メモリからデータを読み取る,またはメモリにデータを格納する時のレート.
GB/sで表⽰される. • メモリ帯域幅 • CUDAコアの数 • メモリのサイズ +PIO$IFOH ଞ QQ
CompML CUDAプログラミング
CompML CUDAプログラムの処理の流れ 12 CPU GPU 1. CPUメモリからGPUメモリにデータをコピー 2. カーネルを呼び出し,GPUメモリにあるデータ を操作
3. GPUメモリからCPUメモリにデータをコピー 1. GPUへデータをコピー 2. CUDAカーネル実⾏ 3. CPUへデータをコピー GPUでの演算 ホスト デバイス /WJEJB+BQBO Q
CompML スレッドの構成 13 CPU GPU グリッド カーネル ホスト デバイス グリッド
ブロック (0, 0) ブロック (1, 0) ブロック (2, 0) ブロック (0, 1) ブロック (1, 1) ブロック (2, 1) ブロック スレッド (0, 0) スレッド (1, 0) スレッド (1, 0) スレッド (2, 0) スレッド (1, 1) スレッド (1, 2) スレッド (3, 0) スレッド (1, 3) スレッド (2 0) スレッド (2, 1) スレッド (2, 2) スレッド (2, 3) • CPUから呼び出される. • グリッド内のスレッドは1つのグローバルメモリ 空間を共有. ブロック • ブロック内のスレッド間の同期が可能 • ブロック内でメモリを共有. スレッド • 最⼩の実⾏単位 +PIO$IFOH ଞ Q
CompML Streaming Multiprocessor 14 演算器の集まり CUDAプログラム ブロック (0, 0) ブロック
(1, 0) ブロック (2, 0) ブロック (0, 1) ブロック (1, 1) ブロック (2, 1) ブロック (3, 0) ブロック (3 1) CUDAプログラム ブロック (0, 0) ブロック (1, 0) ブロック (2, 0) ブロック (0, 1) ブロック (1, 1) ブロック (2, 1) ブロック (3, 0) ブロック (3 1) SM SM SM SM 各ブロックはSMに割り当てられる • 複数のSMにまたがらない • ブロック内部ではSMのリソースを活⽤可能 各ブロックは独⽴に⾮同期に処理を実⾏ • 実⾏順序の保証はない • ブロック間の通信・同期は⾏わない /WJEJB+BQBO QQ
CompML Warp 15 並列実⾏の最⼩単位 ブロック (0, 0) ブロック Warp Warp
Warp Warp … スレッド スレッド スレッド スレッド … スレッド 32 スレッド Core Core Core Core … Core 1命令を32並列実⾏ SM • 各ブロックは32個の連続するスレッドで構成され たワープに分割される. • ワープ内のスレッドは全て同じ命令を実⾏する. ワープ1 ワープ2 ワープ3 スレッド0, スレッド1, … , スレッド31 スレッド32, スレッド33, … , スレッド63 スレッド64, スレッド65, … , スレッド95 128個のスレッドを含むブロックの構成 ワープ4 スレッド96, スレッド97, … , スレッド127 /WJEJB+BQBO Q
CompML CUDA “Hello World!” 16 処理の流れ 1. デバイスメモリのアロケーション 2. ホストメモリからデバイスメモリへのデータコピー
3. カーネルの呼び出し 4. 同期 5. 処理終了
CompML References 17 • John Cheng, Max Grossman, Ty McKercher,
CUDA C プロフェッショナル プログラミング, impress top gearシリーズ,インプレス, 2015. • NVIDIA Japan, CUDAプログラミング⼊⾨, https://www.slideshare.net/NVIDIAJapan/cuda- 57590006, 2016. (参照2020-11-26)