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

Similar documents
名称 : 日本 GPU コンピューティングパートナーシップ (G-DEP) 所在 : 東京都文京区本郷 7 丁目 3 番 1 号東京大学アントレプレナープラザ, 他工場 URL アライアンスパートナー コアテクノロジーパートナー NVIDIA JAPAN ソリュ

CUDA を用いた画像処理 画像処理を CUDA で並列化 基本的な並列化の考え方 目標 : 妥当な Naïve コードが書ける 最適化の初歩がわかる ブロックサイズ メモリアクセスパターン

1. GPU コンピューティング GPU コンピューティング GPUによる 汎用コンピューティング GPU = Graphics Processing Unit CUDA Compute Unified Device Architecture NVIDIA の GPU コンピューティング環境 Lin

07-二村幸孝・出口大輔.indd

Slide 1

GPGPUクラスタの性能評価

Slides: TimeGraph: GPU Scheduling for Real-Time Multi-Tasking Environments

熊本大学学術リポジトリ Kumamoto University Repositor Title GPGPU による高速演算について Author(s) 榎本, 昌一 Citation Issue date Type URL Presentation

1. マシンビジョンにおける GPU の活用


3次多項式パラメタ推定計算の CUDAを用いた実装 (CUDAプログラミングの練習として) Implementation of the Estimation of the parameters of 3rd-order-Polynomial with CUDA

GPU チュートリアル :OpenACC 篇 Himeno benchmark を例題として 高エネルギー加速器研究機構 (KEK) 松古栄夫 (Hideo Matsufuru) 1 December 2018 HPC-Phys 理化学研究所 共通コードプロジェクト

Microsoft PowerPoint - suda.pptx

( CUDA CUDA CUDA CUDA ( NVIDIA CUDA I

! 行行 CPUDSP PPESPECell/B.E. CPUGPU 行行 SIMD [SSE, AltiVec] 用 HPC CPUDSP PPESPE (Cell/B.E.) SPE CPUGPU GPU CPU DSP DSP PPE SPE SPE CPU DSP SPE 2

Microsoft PowerPoint - GPGPU実践基礎工学(web).pptx

de:code 2019 CM04 Azure Kinect DK 徹底解説 ~ 進化したテクノロジーとその実装 ~ 技術統括室 千葉慎二 Ph.D.

Microsoft PowerPoint - GPGPU実践基礎工学(web).pptx

TCC は Tesla Compute Cluster を意味します NVidia for Windows によって開発された特別なドライバです Windows Display Driver Model(WDDM) をバイパスし GPU が CPU とより高速で通信できるようにします TCC の欠点

Microsoft PowerPoint - GPU_computing_2013_01.pptx


スライド 1

TSUBAME2.0 における GPU の 活用方法 東京工業大学学術国際情報センター丸山直也第 10 回 GPU コンピューティング講習会 2011 年 9 月 28 日

160311_icm2015-muramatsu-v2.pptx

GPUコンピューティングの現状と未来

Linuxのベンチマーク評価 とボトルネック解析

アジェンダ Renesas Synergy TM プラットフォーム構成 ThreadX とは ThreadX の状態遷移 ThreadX とμITRONの機能比較 まとめ ページ 2

GTC Japan, 2018/09/14 得居誠也, Preferred Networks Chainer における 深層学習の高速化 Optimizing Deep Learning with Chainer

GPGPU

CUDA基礎1

Microsoft Word - dg_sataahciip_refdesign_jp.doc

1 OpenCL Work-Item Private Memory Workgroup Local Memory Compute Device Global/Constant Memory Host Host Memory OpenCL CUDA CUDA Compute Unit MP Proce


Lagopus SDN/OpenFlow switch: yet another SDN/OF switch agent and high-performance software switch

04-process_thread_2.ppt

1 GPU GPGPU GPU CPU 2 GPU 2007 NVIDIA GPGPU CUDA[3] GPGPU CUDA GPGPU CUDA GPGPU GPU GPU GPU Graphics Processing Unit LSI LSI CPU ( ) DRAM GPU LSI GPU

netmapによる 実践パケット処理プログラミング

マルチコア時代の並列プログラミング

ESOTERIC ASIO USB DRIVER インストールマニュアル Windows 用 システム推奨条件 2 インストールで使用する言語を選択して 次へ ボタンをクリックする Intel Core 2 Duo 以上のプロセッサー搭載コンピュータ 搭載メモリ 1GB 以上 対応 OS Windo

リソース制約下における組込みソフトウェアの性能検証および最適化方法

仮想マシンの高速ライブマイグレーション技術 Yabusame: Postcopy Live Migration for Qemu/KVM

いまからはじめる組み込みGPU実装

JS2-14 マルチコアCPU時代の Javaプログラミング

CUDA 連携とライブラリの活用 2

GPU GPU CPU CPU CPU GPU GPU N N CPU ( ) 1 GPU CPU GPU 2D 3D CPU GPU GPU GPGPU GPGPU 2 nvidia GPU CUDA 3 GPU 3.1 GPU Core 1



GNU Emacs GNU Emacs

untitled

POSIXプログラミング Pthreads編

LSI MegaRAID SAS Device Driver Installation Guide - 日本語

Images per Second Images per Second VOLTA: ディープラーニングにおける大きな飛躍 ResNet-50 トレーニング 2.4x faster ResNet-50 推論 TensorRT - 7ms レイテンシ 3.7x faster P100 V100 P10

Developer Camp

DSDネイティブ再生方法

スライド 1

KiwiSyslogServer/KiwiLogViewer製品ガイド

VECLOS Audio Driver インストールマニュアル Windows 用 2 次へ ボタンをクリックする 対応 OS Windows 7 (32bit 版 64bit 版 ) Windows 8( 32bit 版 64bit 版 ) Windows 8.1( 32bit 版 64bit 版

MS5145 USB シリアル エミュレーション モードの設定

情報処理学会研究報告 IPSJ SIG Technical Report Vol.2016-CSEC-75 No /12/1 ハッシュ関数 Keccak の GPU 実装 グェンダットトゥオン 1 1 岩井啓輔 1 黒川恭一 概要 : 次世代ハッシュ関数 SHA-3 の候補であった Ke

Maser - User Operation Manual

rank ”«‘‚“™z‡Ì GPU ‡É‡æ‡éŁÀŠñ›»

PGIコンパイラ導入手順

Microsoft PowerPoint - CAEworkshop_ _01.ver1.3

PowerPoint プレゼンテーション

DSDネイティブ再生方法

GPGPU によるアクセラレーション環境について

R6A-51E29 Windows 10 用デバイスドライバ更新手順 ご注意 1. このデバイスドライバ ( 以降ドライバといいます ) の更新は お手持ちのパソコンを Windows 10 へアップデートした後に 本書の手順に添っておこなってください 2. 対象型番以外のパソコンでドライバの更新を

改訂履歴 改訂日付 改訂内容 2014/11/01 初版発行 2017/01/16 Studuino web サイトリニューアルに伴う改訂 2017/04/14 Studuino web サイトリニューアルに伴う改訂 2018/01/22 ソフトウェア OS のバージョンアップに伴う改訂

コンバートスター15シリーズ 製品パンフレット

Transcription:

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

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

DEFAULT STREAM Stream : GPU 上の処理を管理するキュー 無指定の場合 Default (NULL) Stream が使用される Memcpy Host Device Kernel 1 Memcpy Device Host Default (NULL) Stream t

CPU/GPU のコンカレンシを考慮していない例 cudamemcpy() は 同期的に動作する Memcpy CPU からのタスク発行 処理開始のレイテンシ同期待ち CPU 上の待ち 処理開始のレイテンシ Memcpy Device Host t GPU 上での実行 Memcpy Host Device Kernel 1 Memcpy Device Host t

CPU GPU 間のコンカレンシ 非同期コピー (cudamemcpyasync()) を使用 CPU からのタスク発行 CPU 上で別の処理を行う Device Synchronize() t 処理開始のレイテンシ GPU 上での実行 MemcpyAsync Host Device Kernel MemcpyAsync Device Host t

同期版 非同期版の API memcpy memset 系には 同期 非同期バージョンがある 基本的には 非同期版を使用 同期版 cudamemcpy() cudamemcpy2d() cudamemcpytosymbol() cudamemcpyfromsymbol() cudamemset() 非同期版 cudamemcpyasync() cudamemcpy2dasync() cudamemcpytosymbolasync() cudamemcpyfromsymbolasync() cudamemsetasync() CUDA Runtime API のリファレンスから抜粋

ブロックする処理 cudadevicesynchronize() 同期 API 意図せず Block する可能性があるのは メモリ確保 解放 cudamalloc() cudafree() など 対応 : あらかじめ確保しておく Pageable Memoryを使用したcudaMemcpy() 系 API 対応 : cudahostalloc() を使用して Pinned Memoryをアロケート

デモ : NSIGHT でタイムラインを見る Memcpy Host Device Kernel 1 Default (NULL) Stream Memcpy Device Host t

DRIVER QUEUE LATENCY ドライバ内部のキューの処理レイテンシ Windows におけるデバイスドライバのモード WDDM Mode : ディスプレイドライバ ミリ秒を超えるレイテンシが発生しやすい cudastreamquery(null) で デバイスに処理を流し込む TCC Mode : Tesla Compute Cluster レイテンシは 数十 μ 秒

ストリームを使用したコンカレントプログラミング

ユーザが作成できる STREAM Blocking Stream 例 : cudastreamcreate(&stm); cudastreamcreatewithflags(&stm, cudastreamdefault); Non-blocking Stream 例 : cudastreamcreatewithflags(&stm, cudastreamnonblocking); Prioritized Stream ( 今日は説明しません ) 例 : cudastreamcreatewithpriority(&stm, cudastreamdefault, priority);

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

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

STREAM に対する同期プリミティブ 状態確認 同期 イベント同期 API cudastreamquery() cudastreamsynchronize() cudastreamwaitevent() 説明 Stream 上の処理が完了しているか確認 Stream 上の処理完了を確認 同期 Stream 上でEventを待つ

今日のお題 フィルタ付き動画プレーヤー 動かしてみる

フィルタ付き動画プレーヤー 3 CPU スレッドでパイプラインを構成 Decoder Thread Decode (YV12) Windows Media Foundation Processing Thread YV12 RGB (half float) Convolution Filter R G B Draw to OpenGL Tex CUDA App Main Thread OpenGL Draw to Window

データフロー (PROCESSING THREAD) 入力 (CPU) YV12 Frame GPU YV12 RGB (half float) RGB (3 plane) Half float Convolution Filter R G B RGB (3 plane) Half float Draw to OpenGL Tex 出力 (CPU) Host Buffer R G B

DEFAULT STREAM を使用した場合 実行時間 : 4.17 ms データ転送 : 1.42 ms カーネル : 2.43 ms Memcpy Host Device Convolution Filter Default Stream NV12 YV12 RGB R G B Draw to OpenGL Tex Memcpy Device Host R G B

メモリ転送をコンカレントに実行 ( オーバーラップ ) 実行時間 : 2.85 ms データ転送 : 1.25 ms カーネル : 2.42 ms Non-blocking Stream 1 Non-blocking Stream 2 Memcpy Host Device NV12 Memcpy Device Host R G B Default Stream YV12 RGB Convolution Filter R G B Draw to OpenGL Tex

カーネルも並列実行 実行時間 : 2.78 ms, データ転送 : 1.15 ms, カーネル : 2.37 ms Non-blocking Stream 1 Non-blocking Stream 2 Memcpy Host Device NV12 Memcpy Device Host R G B Convolution Filter Blocking Stream 1 Blocking Stream 2 Blocking Stream 3 Default Stream YV12 RGB R G B Draw to OpenGL Tex

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

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

まとめ 1. CPU GPU 間のコンカレンシ 非同期 API の使用 2. カーネルとメモリ転送のコンカレンシ Dual Copy Engine 3. カーネル間のコンカレンシ カーネル間のデータ依存性 ストリーム Default / Blocking / Non-blocking Stream