Microsoft PowerPoint - 高速化WS_ver1.1.1

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

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

GPGPUクラスタの性能評価

RIST ニュース No.64(2018) GPU の気象 気候 海洋モデルへの適用とその最適化を目指した取り組み ActivitiestowardsanapplicationofGPU tonumerical weather/climate/oceanmodelanditsoptimization

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

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

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

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

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

Microsoft PowerPoint - ARCEMB08HayashiSlides.ppt [互換モード]

修士論文

Microsoft PowerPoint - sales2.ppt

Microsoft Word ●IntelクアッドコアCPUでのベンチマーク_吉岡_ _更新__ doc

tabaicho3mukunoki.pptx

PowerPoint プレゼンテーション

DO 時間積分 START 反変速度の計算 contravariant_velocity 移流項の計算 advection_adams_bashforth_2nd DO implicit loop( 陰解法 ) 速度勾配, 温度勾配の計算 gradient_cell_center_surface 速

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

HPC143

この方法では, 複数のアドレスが同じインデックスに対応づけられる可能性があるため, キャッシュラインのコピーと書き戻しが交互に起きる性のミスが発生する可能性がある. これを回避するために考案されたのが, 連想メモリアクセスができる形キャッシュである. この方式は, キャッシュに余裕がある限り主記憶の

Microsoft PowerPoint - 報告会_羽角.ppt [互換モード]

hpc141_shirahata.pdf

<4D F736F F F696E74202D2091E63489F15F436F6D C982E682E992B48D8291AC92B489B F090CD2888F38DFC E B8CDD8

VXPRO R1400® ご提案資料

スライド 1

スライド 1

openmp1_Yaguchi_version_170530

Slide 1

研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI, MPICH, MVAPICH, MPI.NET プログラミングコストが高いため 生産性が悪い 新しい並

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

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

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

Operating System 仮想記憶

N 体問題 長岡技術科学大学電気電子情報工学専攻出川智啓

Microsoft PowerPoint - OpenMP入門.pptx

差分スキーム 物理 化学 生物現象には微分方程式でモデル化される例が多い モデルを使って現実の現象をコンピュータ上で再現することをシミュレーション ( 数値シミュレーション コンピュータシミュレーション ) と呼ぶ そのためには 微分方程式をコンピュータ上で計算できる数値スキームで近似することが必要

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

GPUを用いたN体計算

スライド 1

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

PowerPoint Presentation

<4D F736F F F696E74202D F A282BD94BD959C89F A4C E682528D652E707074>

NUMAの構成

GPU.....

GeoFEM開発の経験から

23 Fig. 2: hwmodulev2 3. Reconfigurable HPC 3.1 hw/sw hw/sw hw/sw FPGA PC FPGA PC FPGA HPC FPGA FPGA hw/sw hw/sw hw- Module FPGA hwmodule hw/sw FPGA h

GPU のアーキテクチャとプログラム構造 長岡技術科学大学電気電子情報工学専攻出川智啓

Microsoft Word - HOKUSAI_system_overview_ja.docx

一般社団法人電子情報通信学会 THE INSTITUTE OF ELECTRONICS, INFORMATION AND COMMUNICATION ENGINEERS 信学技報 IEICE Technical Report A P (2014-6) FDTD 法の並列化技術とオープンソ

OS

N08

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

スライド 1

チューニング講習会 初級編

GPGPUイントロダクション

TSUBAME2.0におけるGPUの 活用方法

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

マルチコアPCクラスタ環境におけるBDD法のハイブリッド並列実装

技術資料 JARI Research Journal OpenFOAM を用いた沿道大気質モデルの開発 Development of a Roadside Air Quality Model with OpenFOAM 木村真 *1 Shin KIMURA 伊藤晃佳 *2 Akiy

GPUコンピューティング講習会パート1

ポスト「京」でのコデザイン 活動報告

にゃんぱすー

Microsoft PowerPoint - ICD2011TakadaSlides.pptx

PowerPoint プレゼンテーション

Microsoft PowerPoint - ARC2009HashiguchiSlides.pptx

EGunGPU

<4D F736F F D20332E322E332E819C97AC91CC89F090CD82A982E78CA982E9466F E393082CC8D5C91A291CC90AB945C955D89BF5F8D8296D85F F8D F5F E646F63>

IPSJ SIG Technical Report Vol.2013-HPC-138 No /2/21 GPU CRS 1,a) 2,b) SpMV GPU CRS SpMV GPU NVIDIA Kepler CUDA5.0 Fermi GPU Kepler Kepler Tesla

4 倍精度基本線形代数ルーチン群 QPBLAS の紹介 [index] 1. Introduction 2. Double-double algorithm 3. QPBLAS 4. QPBLAS-GPU 5. Summary 佐々成正 1, 山田進 1, 町田昌彦 1, 今村俊幸 2, 奥田洋司

NVIDIA Tesla K20/K20X GPU アクセラレータ アプリケーション パフォーマンス テクニカル ブリーフ

システムソリューションのご紹介

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

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

GPU CUDA CUDA 2010/06/28 1

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

< B8CDD8AB B83685D>

本文ALL.indd

三者ミーティング

Slide 1

Microsoft PowerPoint - ARCICD07FukumotoSlides.pptx

最新の並列計算事情とCAE

高性能計算研究室の紹介 High Performance Computing Lab.

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

27_02.indd

Microsoft Word - 2.2_takaki.doc

Microsoft PowerPoint ppt

Microsoft PowerPoint - SWoPP06HayashiSlides.ppt

Fujitsu Standard Tool

Coding theorems for correlated sources with cooperative information

スライド 1

スライド 0

NUMAの構成

( CUDA CUDA CUDA CUDA ( NVIDIA CUDA I

OpenFOAM(R) ソースコード入門 pt1 熱伝導方程式の解法から有限体積法の実装について考える 前編 : 有限体積法の基礎確認 2013/11/17 オープンCAE 富山富山県立大学中川慎二

CLEFIA_ISEC発表

Pervasive PSQL v11 のベンチマーク パフォーマンスの結果

高性能計算研究室の紹介 High Performance Computing Lab.

偏微分方程式の差分計算 長岡技術科学大学電気電子情報工学専攻出川智啓

MATLAB® における並列・分散コンピューティング ~ Parallel Computing Toolbox™ & MATLAB Distributed Computing Server™ ~

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

Transcription:

非静力学海洋モデル kinaco の GPU による高速化 平成 28 年度高速化ワークショップ ~ 京 を中核とするHPCI メニーコアを見据えて~ 平成 29 年 3 月 24 日秋葉原 UDXカンファレンス 山岸孝輝 1, 松村義正 2 1 高度情報科学技術研究機構 2 東京大学大気海洋研究所 Ver. 1.1

発表の概要 GPU の基本 ハードの特徴実行モデル プログラミングモデル性能を引き出すための基本 海洋モデルのGPUによる高速化事例まとめ ( 本発表では NVIDIA GPU を前提 ) 2

GPU の基本 3

GPU の構造 NVIDIA Kepler GPU のブロックダイアグラム 単純な構造でリソースの大半は演算 多数のコア 4

ハード性能 ( 演算 ) 低クロックのコアを多数 バルクで高い演算性能 高並列計算コア内パイプライン化あり 複雑な機構は無し インオーダで処理無し : プリフェッチ 分岐予測 etc. 高い演算性能 高並列計算単純な命令スケジューリング 5

ハード性能 ( メモリ キャッシュ ) 高いメモリバンド幅 高レイテンシ GDDR5 の性質 キャッシュ :CPU より弱い ( 階層による ) 演算にリソースを多く割り当てた結果 高いメモリバンド幅 高レイテンシ弱いキャッシュ 6

CPU/GPU 実行モデル CPU 逐次処理 GPU 並列処理 スレッド 0 0 1 2 3 4 3 0 3 1 64 65 66 67 68 94 95 64 65 66 67 68 94 95 1 スレッドが連続データを処理 CPU コア数 = スレッド数 基本は 1 スレッドが 1 データを処理 GPU コア数 << スレッド数 各々のハードウェアの特徴によるもの 7

カーネルの CUDA 化 CPU 逐次処理 GPU 並列処理 組み込み命令でスレッド管理 void func(){ global void func(){ for(i=0;i<n;i++){ JST[i] = UTC[i] + 9; } int i = threadidx.x; JST[i] = UTC[i] + 9; 関数利用時にスレッドの総数 形状を指定 1 スレッドが連続データを処理 1 スレッドが 1 データを処理 CUDA: NVIDIA GPU 用の原語拡張 書くだけなら結構簡単だが スレッドとデータの対応付けは完全に書き手に任されている ハードウェア 実行モデル プログラミングモデルの理解のもとでスレッドとデータの対応をつける必要あり 8

CPU 依存性のある命令 時間 実行 待ち データ読み込み待ちが発生 1 スレッドが逐次で処理 do i = 1, N tmp = data( i ) out(i) = tmp + 2.0 end do プリフェッチ キャッシュ ソフトウェアパイプラインなど様々な手段で対応 9

GPU スレッドの切り替え : 実行 : 待ち ( ストール ) : 待機 (active) 0 1 2 3 ストールしたスレッド 待機していた他のスレッドに入れ替え 他のスレッドにもレジスタを割り当てて 準備をさせておく 外部メモリなどへの待避無しにすぐに切り替え可能 時間 本当は 32 スレッドごとに入れ替わる ( ここでは省略 ) 0 1 2 3 0 コアが常に稼働する状態 10

スレッドの切り替え ( 続き ) 効率的にレイテンシを隠蔽するには スレッドが多い方がよいスレッド間の同期はなるべくとりたくない スレッドを 自由に レイテンシを隠蔽出来れば GPU の利点 高い演算性能 と 広いメモリバンド幅 を活用出来る 11

スレッドの階層とメモリの階層 NVIDIA K20c スレッド レジスタ 65K ブロック ( 例 : 256 スレッド ) L1/ シェアードメモリ 48KB グリッド ( 全スレッド ) L2 1MB メモリ 5GB 各階層でどこまでデータを共有できるかを把握する レジスタと L1/ シェアードメモリは複数のスレッド ( 最大で 2048) でリソースを分け合うことに注意 12

コアレスアクセス 0 1 2 3 4 64 65 66 67 68 94 95 3 0 3 1 インデックスが連続したスレッド群 + アドレスが連続したメモリ領域 0 1 2 64 65 66 67 68 94 95 1 5 ex. ストライド2のアクセス メモリ帯域が半分無駄に!! 両方とも連続するようなアルゴリズムが望ましいまたはシェアードメモリの活用 13

スレッドレベルの並列性 独立なスレッドを複数用意スレッドを切り替えてレイテンシを隠蔽 thread 0 thread 1 thread 2 thread 3 x = x + c x = x + b x = x + a y = y + c y = y + b y = y + a z = z + c z = z + b z = z + a w = w + c w = w + b w = w + a 4 つの独立な命令 Volkov (2010) より 14

命令レベルの並列性 thread 0 w = w + b z = z + b y = y + b x = x + b w = w + a z = z + a y = y + a x = x + a 4 つの独立な命令 独立な命令をスレッドの中で並列処理 Volkov (2010) より 15

スレッドレベルの並列性 vs 命令レベルの並列性 基本はデータ並列性 多数のスレッドを用意する 複数データ /1 スレッドを試してみる どこかに最適解がある どちらが良いかは処理の内容次第余計なデータロードの削減も期待できる 16

ここまでのまとめ GPU のハード性能 Good: 高い演算性能 高バンド幅 Bad: 高レイテンシ 弱いキャッシュ GPU の実行モデルとプログラミングモデル スレッドの切り替えによるレイテンシの隠蔽階層化されたスレッドとメモリ 両者の対応 その他性能を引き出すために重要なこと コアレスアクセス命令レベルの並列性 17

海洋モデルの GPU による高速化事例 18

非静力学海洋モデル kinaco ウェッデル海における南極低層水形成の再現シミュレーション - 3 次元 Navier-Stokes 方程式 移流拡散方程式 - 静水圧近似なし 3 次元の流れを陽に計算 - 等方構造格子 - ポワソン / ヘルムホルツ方程式をマルチグリッド法を用いた前処理付き CG 法で求解 - 詳細は Matsumura and Hasumi (2008) CPU 向けの最適化実績有り ~1km のスケールの運動を詳細に表現 GPU 向けの最適化 : - Yamagishi and Matsumura (2016) - SC15, SC16 Poster session 19

3 種類のカーネル最適化事例を紹介 Case1: コアレスアクセス Case2: 命令レベルの並列性 Case3: スレッドレベルの並列性 20

Case1: 疎行列 - ベクトル積 7 点ステンシル計算に相当 CPU 実装 DO k=1, n3 DO j=1, n2 DO i=1, n1 out(i,j,k) = a(-3,i,j,k) * x(i, j, k-1) & + a(-2,i,j,k) * x(i, j-1,k ) & + a(-1,i,j,k) * x(i-1,j, k ) & + a( 0,i,j,k) * x(i, j, k ) & + a( 1,i,j,k) * x(i+1,j, k ) & + a( 2,i,j,k) * x(i, j+1,k ) & + a( 3,i,j,k) * x(i, j, k+1) END DO END DO 係数行列 END DO 係数の空間的配置 2 3-1 1-2 -3 0 a(-3,i,j,k)~a( 3,i,j,k) -3-2 -1 0 1 2 3 キャッシュライン上に 7 点をまとめる 21

GPU でコアレスアクセス a(-3,i,j,k) a(-3,i+1,j,k) a(-3,i+2,j,k) thread(id) thread(id+1) thread(id+2) GPU の各スレッドがストライドアクセス (7 間隔 ) a(i,j,k,-3) a(i+1,j,k,-3) a(i+2,j,k,-3) a(-3:3,i,j,k) a(i,j,k,-3:3) thread(id) thread(id+2) thread(id+1) 次元の入れ替えでコアレスアクセス 22

Case 2: 命令レベルの並列性 できる限り多くのスレッドを設定 (i, j, k) 3 次元スレッド (i, j, k) 1 スレッド for 1 データ i = threadidx%x + blockdim%x * (blockidx%x-1) j = threadidx%y + blockdim%y * (blockidx%y-1) k = threadidx%z + blockdim%z * (blockidx%z-1) out(i,j,k) = a(i,j,k,-3) * x(i, j, k-1) & + a(i,j,k,-2) * x(i, j-1,k ) & + a(i,j,k,-1) * x(i-1,j, k ) & + a(i,j,k, 0) * x(i, j, k ) & + a(i,j,k, 1) * x(i+1,j, k ) & + a(i,j,k, 2) * x(i, j+1,k ) & + a(i,j,k, 3) * x(i, j, k+1) スレッドを切り替えることでレイテンシを隠蔽 23

命令レベルの並列性を確保 独立な命令をスレッド内で繰り返し (i, j) 2 次元スレッド (i, j) 1 スレッド for 1 カラム i = threadidx%x + blockdim%x * (blockidx%x-1) j = threadidx%y + blockdim%y * (blockidx%y-1) DO k=1, n3 out(i,j,k) = a(i,j,k,-3) * x(i, j, k-1) & + a(i,j,k,-2) * x(i, j-1,k ) & + a(i,j,k,-1) * x(i-1,j, k ) & + a(i,j,k, 0) * x(i, j, k ) & + a(i,j,k, 1) * x(i+1,j, k ) & + a(i,j,k, 2) * x(i, j+1,k ) & + a(i,j,k, 3) * x(i, j, k+1) END DO 命令を重ねてレイテンシ隠蔽 本カーネルでは 2 次元スレッドの設定の方が高速 24

Case 3: スレッドレベルの並列性 物理過程の 1 カーネル 処理の概要 DO i,j,k loop tx(i,j,k) = Fx( A(i,j,k) ) ty(i,j,k) = Fy( B(i,j,k) ) tz(i,j,k) = Fz( C(i,j,k) ) END DO DO i,j,k loop out(i,j,k) = Fout( tx(i,j,k), tx(i-1,j,k), ty(i,j,k), ty(i,j-1,k), tz(i,j,k), tz(i,j,k-1) ) END DO i-1 j-1 k-1 (i,j,k) 実際のカーネルはより複雑 要点だけ抽出 25

CPU tuned DO k loop DO i,j loop tz0(i,j) = tz1(i,j) tx (i,j,k) = Fx( A(i,j,k) ) ty (i,j,k) = Fy( B(i,j,k) ) tz1(i,j) = Fz( C(i,j,k) ) END DO 2 次元データでブロック化キャッシュに DO i,j loop out(i,j,k) = Fout( tx(i,j,k), tx(i-1,j,k), ty(i,j,k), ty(i,j-1,k), tz1(i,j), tz0(i,j) ) END DO END DO k 軸のデータは使い回しする 26

i=threadidx%x; j=threadidx%y DO k loop r_tz0 = r_tz1 r_tx = Fx( A(i,j,k) ) r_ty = Fy( B(i,j,k) ) r_tz1 = Fz( C(i,j,k) ) r_tx_im1 = Fx( A(i-1,j,k) ) r_ty_jm1 = Fy( B(i,j-1,k) ) レジスタで確保 GPU tuned 2 次元でスレッドを生成 out(i,j,k) = Fout( r_tx, r_tx_im1, r_ty, r_ty_jm1, r_tz1, r_tz0 ) END DO 隣接格子上の計算を付加 (i,j,k) i-1 j-1 k-1 1 スレッド K 軸ループ 各スレッドが独立同期が不要 27

Case3 次に 何をやるべきか 複数データ /1 スレッドレジスタ増えるがロードストア 演算が減少シェアードメモリの利用 tx, ty, tz を各スレッドで計算させた後スレッド間で共有スレッド間で同期をとる必要あり以上はプロセッサのリソースとのバランスが重要レジスタ シェアードメモリ増加 割り当てスレッド数減少 レイテンシ隠蔽が非効率化 28

海洋モデル高速化 上記以外の施策 カーネルの分割 融合シェアードメモリによるスレッド間での共有 CPU-GPU 間転送の最小化混合精度演算 ( 連立方程式ソルバ前処理を単精度化 ) 粒子追跡コードにてメモリアクセスの改善テクスチャメモリの活用参考 :Yamagishi and Matsumura (2016), SC(15, 16)Poster Session 29

性能評価事例実験設定 CPU (Fujitsu SPARC64VIIIfx) vs GPU (NVIDIA K20c) 1 CPU vs 1 GPU 傾圧不安定を伴う対流混合実験 Visbeck et al. (1996) 外部強制 : 温度 forcing, コリオリ力 等方構造格子 size: (256, 256, 32) 時間ステップ / 総時間 2min/5hours (150 steps) 32 256 スレッド数 256 3 次元 : 200 万 2 次元 : 6 万

性能比較 経過時間 [s]: CPU vs GPU CPU GPU Speedup all components 174.2 37.3 4.7 Poisson/Helmholtz solver 36.8 10.5 3.5 others 137.4 26.8 5.1 演算, メモリ性能 : CPU vs GPU CPU dp: double precision, sp: single precision GPU Computational performance (GFLOPS) 7.7 42.3(dp)/3.8(sp) GFLOPS/PEAK (%) 6.0 3.6(dp)/0.1(sp) Memory throughput (GB/S) 22.2 114.1 GPU は CPU 比較で 4.7 倍高速 31

まとめ GPU の基本を説明 ハードの特長 実行モデル プログラミングモデル GPU で性能を引き出すための基本 非静力学海洋モデルの高速化事例紹介 コアレスアクセス 命令レベルの並列性 レジスタ活用によるスレッドレベルの並列性 紹介しきれなかった細かい工夫も多数 CPU 比較で 5 倍弱の高速化 32

References NVIDIA 公式資料 CUDA C Best Practices Guide, CUDA C Programming Guide Programming Massively Parallel Processors, Third Edition, David B. Kirk, Wen-mei W. Hwu, Morgan Kaufmann. CUDA C プロフェッショナルプログラミング, John Cheng ら, インプレス. V. Volkov. Better performance at lower occupancy. GPU Technology Conference 2010. Dan Cyca. Essential CUDA Optimization Techniques. 2014. http://on-demand.gputechconf.com/gtc/2014/video/s4702- essential-cuda-optimization-techniques-acceleware-part-4.mp4 Matsumura, Y. and Hasumi, H., 2008. A non-hydrostatic ocean model with a scalable multigrid Poisson solver. Ocean Modelling. Yamagishi, T. and Matsumura, Y., 2016. GPU Acceleration of a Nonhydrostatic Ocean Model with a Multigrid Poisson/Helmholtz Solver. Procedia Computer Science 80, 1658-1669. 出川智啓, GPGPU 実践プログラミング, http://www.toffee.jp/streaming/gpgpu/index.html 33