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
720
疎行列圧縮フォーマットの紹介
ryoherisson
0
560
Neural Network Pruning
ryoherisson
0
520
CompML: Introduction to Neural Network Pruning
ryoherisson
1
17k
Deep Neural NetworkのためのGPU演算処理高速化に関する研究
ryoherisson
0
14k
CompML: Precision and Recall for Time Series
ryoherisson
0
230
Other Decks in Programming
See All in Programming
The Evolution of Enterprise Java with Jakarta EE 11 and Beyond
ivargrimstad
1
830
地方に住むエンジニアの残酷な現実とキャリア論
ichimichi
2
610
LINEヤフー データグループ紹介
lycorp_recruit_jp
0
760
単体テストの始め方/作り方
toms74209200
0
510
レガシーシステムの機能調査・開発におけるAI利活用
takuya_ohtonari
0
610
統一感のある Go コードを生成 AI の力で手にいれる
otakakot
0
3k
Spring gRPC で始める gRPC 入門 / Introduction to gRPC with Spring gRPC
mackey0225
2
520
事業戦略を理解してソフトウェアを設計する
masuda220
PRO
22
6.2k
Team topologies and the microservice architecture: a synergistic relationship
cer
PRO
0
910
型付きアクターモデルがもたらす分散シミュレーションの未来
piyo7
0
800
第9回 情シス転職ミートアップ 株式会社IVRy(アイブリー)の紹介
ivry_presentationmaterials
1
190
Enterprise Web App. Development (2): Version Control Tool Training Ver. 5.1
knakagawa
1
120
Featured
See All Featured
Site-Speed That Sticks
csswizardry
10
650
Music & Morning Musume
bryan
46
6.6k
Being A Developer After 40
akosma
90
590k
Code Review Best Practice
trishagee
68
18k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
Why Our Code Smells
bkeepers
PRO
337
57k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Thoughts on Productivity
jonyablonski
69
4.7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
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)