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
350
Multiplying Matrices Without Multiplying
ryoherisson
1
600
疎行列圧縮フォーマットの紹介
ryoherisson
0
460
Neural Network Pruning
ryoherisson
0
400
CompML: Introduction to Neural Network Pruning
ryoherisson
1
15k
Deep Neural NetworkのためのGPU演算処理高速化に関する研究
ryoherisson
0
12k
CompML: Precision and Recall for Time Series
ryoherisson
0
190
Other Decks in Programming
See All in Programming
よくできたテンプレート言語として TypeScript + JSX を利用する試み / Using TypeScript + JSX outside of Web Frontend #TSKaigiKansai
izumin5210
6
1.7k
とにかくAWS GameDay!AWSは世界の共通言語! / Anyway, AWS GameDay! AWS is the world's lingua franca!
seike460
PRO
1
900
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
RubyLSPのマルチバイト文字対応
notfounds
0
120
エンジニアとして関わる要件と仕様(公開用)
murabayashi
0
300
Amazon Bedrock Agentsを用いてアプリ開発してみた!
har1101
0
340
3 Effective Rules for Using Signals in Angular
manfredsteyer
PRO
1
100
ActiveSupport::Notifications supporting instrumentation of Rails apps with OpenTelemetry
ymtdzzz
1
250
受け取る人から提供する人になるということ
little_rubyist
0
250
AWS Lambdaから始まった Serverlessの「熱」とキャリアパス / It started with AWS Lambda Serverless “fever” and career path
seike460
PRO
1
260
ヤプリ新卒SREの オンボーディング
masaki12
0
130
Hotwire or React? ~アフタートーク・本編に含めなかった話~ / Hotwire or React? after talk
harunatsujita
1
120
Featured
See All Featured
Testing 201, or: Great Expectations
jmmastey
38
7.1k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
Agile that works and the tools we love
rasmusluckow
327
21k
Rebuilding a faster, lazier Slack
samanthasiow
79
8.7k
The Cult of Friendly URLs
andyhume
78
6k
Designing for humans not robots
tammielis
250
25k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
What's new in Ruby 2.0
geeforr
343
31k
Optimizing for Happiness
mojombo
376
70k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
Building a Scalable Design System with Sketch
lauravandoore
459
33k
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)