ストリームを用いたコンカレントカーネルプログラミングと最適化 エヌビディアジャパン 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

Slide 1

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

組込み Linux の起動高速化 株式会社富士通コンピュータテクノロジーズ 亀山英司 1218ka01 Copyright 2013 FUJITSU COMPUTER TECHNOLOGIES LIMITED

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

研究報告用MS-Wordテンプレートファイル

NUMAの構成

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 の欠点

SMG Field Computex 2011 New Category Update

Contents 1. 自己紹介 2. ブート時間短縮のアプローチ 3. Snapshotブートの実装 4. Snapshot 取得位置と起動時間 5. より高速なSnapshotブートへのアプローチ 2 1. 自己紹介 3 2

Microsoft PowerPoint - GPU_computing_2013_01.pptx

Microsoft PowerPoint - sp ppt [互換モード]


Jackson Marusarz 開発製品部門

スライド 1

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

Microsoft PowerPoint - GPUシンポジウム _d公開版.ppt [互換モード]

MS5145、MS7120,USB通信の設定

160311_icm2015-muramatsu-v2.pptx

untitled

Microsoft Word - Quadro Mシリーズ_テクニカルガイド_R1-2.doc

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

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

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

目的と目次 OpenCL はこれからのマルチコアプログラミングの主流 ( かも ) GPU (NVIDIA, AMD/ATI) Cell B.E. 組み込みプロセッサ 共通コードとして OpenCL に対応するために必要な準備を考える 目次 基礎編 ( 今回 ) OpenCL とは 実践編 高速化の

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

hpc141_shirahata.pdf

GPGPU

CUDA基礎1

Microsoft Word - dg_sataahciip_refdesign_jp.doc

untitled

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

並列・高速化を実現するための 高速化サービスの概要と事例紹介

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

fse7_time_sample

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

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

Microsoft PowerPoint - SWoPP2010_Shirahata

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

<4C696E A B835E A CC8A D20838A B835E B838982CC8EC08CB

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

PowerPoint プレゼンテーション

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

Microsoft PowerPoint - 鵜飼裕司講演資料shirahama_egg.ppt [互換モード]

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

HPC143

April 2014 Flash-aware MySQL フラッシュが MySQL を変える Takeshi Hasegawa Senior Sales Engineer APAC Japan Fusion-io

Maser - User Operation Manual

IPSJ SIG Technical Report Vol.2012-ARC-202 No.13 Vol.2012-HPC-137 No /12/13 Tightly Coupled Accelerators 1,a) 1,b) 1,c) 1,d) GPU HA-PACS

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

untitled

PGIコンパイラ導入手順

RTM セミナー RT ミドルウェアによる実時間ロボット 制御系の構築とソフトウェア教育 静岡大学大学院工学研究科機械工学専攻 清水昌幸

Microsoft PowerPoint - CAEworkshop_ _01.ver1.3

PowerPoint プレゼンテーション

<4D F736F F F696E74202D208C7997CA89BB8E9E8AD491AA92E B2E B8CDD8AB B83685D>

OS

05-scheduling.ppt

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 のバージョンアップに伴う改訂

- 2 -

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

CudaWaveField

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