• 検索結果がありません。

ストリームを用いたコンカレントカーネルプログラミングと最適化 エヌビディアジャパン CUDAエンジニア森野慎也 GTC Japan 2014

N/A
N/A
Protected

Academic year: 2021

シェア "ストリームを用いたコンカレントカーネルプログラミングと最適化 エヌビディアジャパン CUDAエンジニア森野慎也 GTC Japan 2014"

Copied!
23
0
0

読み込み中.... (全文を見る)

全文

(1)

ストリームを用いた

コンカレントカーネルプログラミングと最適化

エヌビディアジャパン CUDAエンジニア 森野慎也 GTC Japan 2014

(2)

コンカレントな処理の実行

 システム内部の複数の処理を、平行に実行する。 — CPU・GPU — メモリ転送・カーネル実行 — 複数のカーネル間  ストリーム — GPU上の処理キュー — カーネル実行・メモリ転送 の並列性・実行順序。

(3)

DEFAULT STREAM

 Stream : GPU上の処理を管理するキュー

 無指定の場合、Default (NULL) Streamが使用される。

t

Memcpy

Host → Device Kernel 1

Memcpy Device → Host

(4)

CPU/GPUのコンカレンシを考慮していない例

 cudaMemcpy()は、同期的に動作する。

t

Memcpy

Host → Device Kernel 1

Memcpy Device → Host GPU上での実行 t Memcpy Memcpy Device → Host CPUからのタスク発行 CPU上の待ち 処理開始のレイテンシ 同期待ち 処理開始のレイテンシ

(5)

CPU上で別の処理を行う

CPU・GPU間のコンカレンシ

 非同期コピー(cudaMemcpyAsync()) を使用。

t

MemcpyAsync

Host → Device Kernel

MemcpyAsync Device → Host GPU上での実行 t CPUからのタスク発行 Device Synchronize() 処理開始のレイテンシ

(6)

同期版・非同期版のAPI

 memcpy、memset系には、同期・非同期バージョンがある。  基本的には、非同期版を使用。

同期版 非同期版

cudaMemcpy() cudaMemcpyAsync() cudaMemcpy2D() cudaMemcpy2DAsync()

cudaMemcpyToSymbol() cudaMemcpyToSymbolAsync() cudaMemcpyFromSymbol() cudaMemcpyFromSymbolAsync() cudaMemset() cudaMemsetAsync()

(7)

ブロックする処理

 cudaDeviceSynchronize() — 同期API  意図せずBlockする可能性があるのは… — メモリ確保・解放 cudaMalloc()、cudaFree()など。 対応 : あらかじめ確保しておく。 — Pageable Memoryを使用したcudaMemcpy()系API 対応 : cudaHostAlloc()を使用して、Pinned Memoryをアロケート。

(8)

デモ : NSIGHT で タイムラインを見る

t

Memcpy

Host → Device Kernel 1

Memcpy Device → Host

(9)

DRIVER QUEUE LATENCY

 ドライバ内部のキューの処理レイテンシ  Windowsにおけるデバイスドライバのモード — WDDM Mode : ディスプレイドライバ  ミリ秒を超えるレイテンシが発生しやすい。  cudaStreamQuery(NULL) で、デバイスに処理を流し込む。

— TCC Mode : Tesla Compute Cluster

(10)
(11)

ユーザが作成できるSTREAM

 Blocking Stream 例 : cudaStreamCreate(&stm); cudaStreamCreateWithFlags(&stm, cudaStreamDefault);  Non-blocking Stream 例 : cudaStreamCreateWithFlags(&stm, cudaStreamNonBlocking);  Prioritized Stream (今日は説明しません) 例 :

(12)

BLOCKING STREAM

 Default Streamと同期する。 — カーネル間でデータの依存性がある場合に有効。 Default Stream Blocking Stream 1 Blocking Stream 2 Blocking Stream 3 Kernel 1 Kernel 2 Kernel 3 Kernel 順序は保証されない Kernel 1-3を待つ

(13)

NON-BLOCKING STREAM

 Default Streamに対しても非同期。 Default Stream Blocking Stream 1 Blocking Stream 2 Blocking Stream 3 Kernel 1 Kernel 2 Kernel 3 Kernel 順序は保証されない

(14)

STREAMに対する同期プリミティブ

 状態確認・同期・イベント同期 API 説明 cudaStreamQuery() Stream上の処理が完了しているか確認 cudaStreamSynchronize() Stream上の処理完了を確認。同期。 cudaStreamWaitEvent() Stream上でEventを待つ。

(15)

今日のお題

フィルタ付き動画プレーヤー

動かしてみる。

(16)

フィルタ付き動画プレーヤー

 3 CPUスレッドでパイプラインを構成 Draw to Window Decode (YV12) YV12 → RGB (half float) Draw to OpenGL Tex Decoder Thread Processing Thread App Main Thread

Windows Media Foundation

CUDA

OpenGL

R G B Convolution

(17)

データフロー (PROCESSING THREAD)

YV12 → RGB (half float) Draw to OpenGL Tex GPU YV12 Frame RGB (3 plane) Half float 入力(CPU) 出力(CPU) RGB (3 plane) Half float R G B Convolution Filter R G B Host Buffer

(18)

DEFAULT STREAMを使用した場合…

 実行時間 : 4.17 ms  データ転送 : 1.42 ms  カーネル : 2.43 ms Default Stream Convolution Filter NV12 R G B Memcpy Device→Host Memcpy Host→Device YV12→RGB R Draw to OpenGL Tex G B

(19)

メモリ転送をコンカレントに実行(オーバーラップ)

 実行時間 : 2.85 ms  データ転送 : 1.25 ms  カーネル : 2.42 ms

Default Stream Convolution Filter

NV12 R G B Memcpy Device→Host Non-blocking Stream 1 Non-blocking Stream 2 Memcpy Host→Device

(20)

カーネルも並列実行

 実行時間 : 2.78 ms, データ転送 : 1.15 ms, カーネル : 2.37 ms B NV12 Default Stream R G R G B Memcpy Device→Host Blocking Stream 1 Blocking Stream 2 Blocking Stream 3 Non-blocking Stream 1 Non-blocking Stream 2 Convolution Filter Memcpy Host→Device

(21)

性能比較

 メモリ転送のオーバーラップ分、速くなった。  カーネルのオーバーラップは、”今回は” ちょっとだけ効果あり。 # 実装 処理時間 短縮分 メモリ転送時間 実行時間カーネル 1 Default Streamのみ 4.17 ms ー 1.42 ms 2.43 ms 2 メモリ転送をオーバーラップ 2.85 ms 1.32 ms 1.25 ms 2.42 ms 3 カーネル実行もオーバーラップ 2.78 ms 1.39 ms 1.15 ms 2.37 ms

(22)

カーネル実行もオーバーラップする

 別ストリームで実行 — 「順序に依存しない」、「データの依存性がない」 — 効果のある事例については、機会を改めて。(Hyper-Qも扱いたい) オーバーラップしている オーバーラップしていない

(23)

まとめ

1. CPU・GPU間のコンカレンシ。

— 非同期APIの使用。

2. カーネルとメモリ転送のコンカレンシ

— Dual Copy Engine

3. カーネル間のコンカレンシ

— カーネル間のデータ依存性

 ストリーム

参照

関連したドキュメント

定理 ( 長谷川 ) 直積を持つ圏と、トレース付きモノイダル圏の間のモ ノイダル随伴関手から、 dinaturality

ü  modeling strategies and solution methods for optimization problems that are defined by uncertain inputs.. ü  proposed by Ben-Tal & Nemirovski

本節では本研究で実際にスレッドのトレースを行うた めに用いた Linux ftrace 及び ftrace を利用する Android Systrace について説明する.. 2.1

CPU待ち時間 PCとPSWを 専用レジスタ

CleverGet Crackle 動画ダウンロードは、すべての Crackle 動画を最大 1080P までのフル HD

Abstract: The method to calculate the damping ratio of the system relevant to chatter vibration and to identify the time series model using the adaptive filter are

第一の場合については︑同院はいわゆる留保付き合憲の手法を使い︑適用領域を限定した︒それに従うと︑将来に

 今日のセミナーは、人生の最終ステージまで芸術の力 でイキイキと生き抜くことができる社会をどのようにつ