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
170
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
430
Multiplying Matrices Without Multiplying
ryoherisson
1
710
疎行列圧縮フォーマットの紹介
ryoherisson
0
550
Neural Network Pruning
ryoherisson
0
500
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
230
Other Decks in Programming
See All in Programming
REST API設計の実践 – ベストプラクティスとその落とし穴
kentaroutakeda
2
320
メモリリークが発生した時にpprofを使用して原因特定した話
zono33lhd
0
100
TVer iOSチームの共通認識の作り方 - Findy Job LT iOSアプリ開発の裏側 開発組織が向き合う課題とこれから
techtver
PRO
0
710
"使いづらい" をリバースエンジニアリングする UI の読み解き方
rebase_engineering
0
110
eBPFを用いたAIネットワーク監視システム論文の実装 / eBPF Japan Meetup #4
yuukit
3
620
TSConfigからTypeScriptの世界を覗く
planck16
2
1.3k
TypeScript製IaCツールのAWS CDKが様々な言語で実装できる理由 ~他言語変換の仕組み~ / cdk-language-transformation
gotok365
7
380
Parallel::Pipesの紹介
skaji
2
870
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
270
ユーザーにサブドメインの ECサイトを提供したい (あるいは) 2026年函館で一番熱くなるかもしれない言語の話
uvb_76
0
170
Use Perl as Better Shell Script
karupanerura
0
650
MLOps Japan 勉強会 #52 - 特徴量を言語を越えて一貫して管理する, 『特徴量ドリブン』な MLOps の実現への試み
taniiicom
2
570
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Docker and Python
trallard
44
3.4k
Why Our Code Smells
bkeepers
PRO
336
57k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
840
Writing Fast Ruby
sferik
628
61k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
47
2.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
45
9.6k
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)