GPGPUイントロダクション

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

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

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

今回の内容 GPU の発展 GPU のアーキテクチャ CPU の発展 性能の変化 シングルコアからマルチコア GPU の応用例 6

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

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

( CUDA CUDA CUDA CUDA ( NVIDIA CUDA I

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

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

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

スライド 1

最新の並列計算事情とCAE

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

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

GPGPUクラスタの性能評価

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

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

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

スライド 1

N08

スライド 1

supercomputer2010.ppt

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

計算機アーキテクチャ

Microsoft PowerPoint - GPU_computing_2013_01.pptx


GPU.....

PowerPoint プレゼンテーション

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

スライド 1

PowerPoint プレゼンテーション

TopSE並行システム はじめに

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

工学院大学建築系学科近藤研究室2000年度卒業論文梗概

Microsoft PowerPoint - suda.pptx

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

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

スライド 1

CELSIUSカタログ(2012年7月版)

NUMAの構成

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

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

Microsoft Word - HOKUSAI_system_overview_ja.docx

GPUを用いたN体計算

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

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

PowerPoint プレゼンテーション

本文ALL.indd

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

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

CELSIUSカタログ(2012年5月版)

1 OpenCL OpenCL 1 OpenCL GPU ( ) 1 OpenCL Compute Units Elements OpenCL OpenCL SPMD (Single-Program, Multiple-Data) SPMD OpenCL work-item work-group N

untitled

27_02.indd

Operating System 仮想記憶

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

Slide 1

修士論文

Slide 1

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

ホワイトペーパー

WebGL OpenGL GLSL Kageyama (Kobe Univ.) Visualization / 57

情報解禁日時 :12 月 20 日 ( 木 )11:00 以降 株式会社マウスコンピューター News Release MousePro 第 9 世代インテル CPU 搭載ビジネス向けデスクトップパソコンを 12 月 20 日 ( 木 ) 販売開始! ビジネス向けデスクトップパソコン MousePr

2 09:30-10:00 受付 10:00-12:00 HA-PACS ログイン GPU 入門 13:30-15:00 OpenACC 入門 15:15-16:45 OpenACC 最適化入門と演習 17:00-18:00 OpenACC の活用 (CUDA 連携とライブラリの活用 )

Insert your Title here

untitled

PowerPoint Presentation

main.dvi

CCS HPCサマーセミナー 並列数値計算アルゴリズム

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

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

コンピュータグラフィックス

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

製品開発の現場では 各種のセンサーや測定環境を利用したデータ解析が行われ シミュレーションや動作検証等に役立てられています しかし 日々収集されるデータ量は増加し 解析も複雑化しており データ解析の負荷は徐々に重くなっています 例えば自動車の車両計測データを解析する場合 取得したデータをそのまま解析

iiyama PC、「SENSE∞(センス インフィニティ)」より、3Dプリント・3D CAD制作[Fusion 360]向けデスクトップパソコンを発売を販売開始

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

System Requirements for Geomagic

tabaicho3mukunoki.pptx

OpenGL GLSL References Kageyama (Kobe Univ.) Visualization / 58

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

ComputerArchitecture.ppt

PowerPoint プレゼンテーション

概要 目的 CUDA Fortran の利用に関する基本的なノウハウを提供する 本チュートリアル受講後は Web 上で公開されている資料等を参照しながら独力で CUDA Fortran が利用できることが目標 対象 CUDA Fortran の利用に興味を抱いている方 前提とする知識 Fortran

適応フィルタのSIMD最適化

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

Microsoft PowerPoint - OpenMP入門.pptx

Microsoft Word - SmartManager User's Manual-2 3 0_JP.docx

OS

理研スーパーコンピュータ・システム

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

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

VXPRO R1400® ご提案資料

2 09:00-09:30 受付 09:30-12:00 GPU 入門,CUDA 入門 13:00-14:30 OpenACC 入門 + HA-PACS ログイン 14:45-16:15 OpenACC 最適化入門と演習 16:30-18:00 CUDA 最適化入門と演習

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

富士通セミコンダクターのプラットフォームSoCとJavaへの取り組み概要

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

untitled

スライド 1

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

Transcription:

大島聡史 ( 並列計算分科会主査 東京大学情報基盤センター助教 ) GPGPU イントロダクション 1

目的 昨今注目を集めている GPGPU(GPU コンピューティング ) について紹介する GPGPU とは何か? 成り立ち 特徴 用途 ( ソフトウェアや研究例の紹介 ) 使い方 ( ライブラリ 言語 ) CUDA GPGPU における課題 2

GPGPU とは何か? GPGPU General-Purpose computation using GPUs GPU を用いた汎用計算 GPU Graphics Processing Unit 画像処理用のハードウェア ビデオカード ( 上の LSI) NVIDIA: GeForce, Quadro, Tesla AMD(ATI): Radeon, FireGL, FireStream Intel: Intel HD Graphics 役割 :3D 描画 HD 出力 動画エンコード デコード etc. 3

GPGPU の成り立ち 背景 高速 複雑な三次元画像処理への要求 GPU ハードウェアの並列化とプログラマブル化 描画処理プロセスにおける汎用数値演算の導入 汎用演算への利用可能性 ビデオカード 4

性能 GFLOPS GPU イントロダクション GPU と CPU の性能 10000 GPU: 並列処理による高性能 1000 100 CPU: 周波数向上が頭打ち 消費電力問題 マルチコア化へ ( 性能向上が鈍化 ) CPU GPU 10 1 5

GPGPU の特徴 (GPU と CPU の HW の違い ) GPU 並列度 : 高 (100~) クロック : 低 (~2GHz) 計算コア : 単純 ストリーミング性能重視 ( 戦略的に ) 隠されたアーキテクチャ CPU 並列度 : 低 (~8) クロック : 高 (2GHz~) 計算コア : 複雑 キャッシュ性能重視 ( 比較的 ) 透明性のあるアーキテクチャ 6

ハードウェアの特徴 = 性能の特性 GPU の得意とする計算 並列度が高い 計算内容が単純 ( 分岐が少ない ) 連続メモリアクセスが多い アーキテクチャの改良によって不得意な計算は減りつつある 分岐や不連続メモリアクセスがあっても性能が落ちにくくなってきている 7

使い方 ( ライブラリ 言語 ) GPGPU 黎明期 グラフィックスプログラミング DirectX + HLSL OpenGL + GLSL 描画処理を用いて計算 画像処理の知識が必要 ( 習得が大変 ) 画像処理と直接関係のない情報が提供されない ( 最適化が非常に困難 ) 現在 CUDA, OpenCL, etc. CPU 向けのプログラミングに近づいた GPU に対応したライブラリや言語 数値計算ライブラリ CUDA 対応言語 8

グラフィックスプログラミングの例 グラフィックス API(DirectX, OpenGL) による描画処理 + シェーダ言語 (HLSL, GLSL) による演算 void gpumain(){ vec4 ColorA = vec4(0.0, 0.0, 0.0, 0.0); vec4 ColorB = vec4(0.0, 0.0, 0.0, 0.0); vec2 TexA = vec2(0.0, 0.0); vec2 TexB = vec2(0.0, 0.0); TexA.x = gl_fragcoord.x; TexA.y = gl_fragcoord.y; TexB.x = gl_fragcoord.x; TexB.y = gl_fragcoord.y; ColorA = texrect( texunit0, TexA ); ColorB = texrect( texunit1, TexB ); gl_fragcolor = F_ALPHA*ColorA + F_BETA*ColorB; } void main(){ glutinit( &argc, argv ); glutinitwindowsize(64,64);glutcreatewindow("gpgpuhelloworld"); glgenframebuffersext(1, &g_fb); glbindframebufferext(gl_framebuffer_ext, g_fb); glgentextures(4, g_ntexid); // create (reference to) a new texture glbindtexture(opt1, texid); gltexparameteri(opt1, GL_TEXTURE_MIN_FILTER, GL_NEAREST); gltexparameteri(...); glteximage2d(opt1, 0, opt2, width, height, 0, GL_RGBA, GL_FLOAT, 0); ( 以下省略 ) GPU の処理 (GLSL) 各ピクセルに対して実行される シェーダ言語を用いた配列加算 (vc=a*va + b*vb) の例 CPU の処理 (OpenGL) 9

グラフィックスプログラミングの例 グラフィックス API(DirectX, OpenGL) による描画処理 + シェーダ言語 (HLSL, GLSL) による演算 void gpumain(){ vec4 ColorA = vec4(0.0, 0.0, 0.0, 0.0); vec4 ColorB = vec4(0.0, 0.0, 0.0, 0.0); vec2 TexA = vec2(0.0, 0.0); vec2 TexB = vec2(0.0, 0.0); TexA.x = gl_fragcoord.x; TexA.y = gl_fragcoord.y; TexB.x = gl_fragcoord.x; TexB.y = gl_fragcoord.y; ColorA = texrect( texunit0, TexA ); ColorB = texrect( texunit1, TexB ); gl_fragcolor = F_ALPHA*ColorA + F_BETA*ColorB; } プログラミングの難しさ が GPGPUの最大の課題 ( 普及の障害 ) と言っても過言ではなかった void main(){ glutinit( &argc, argv ); glutinitwindowsize(64,64);glutcreatewindow("gpgpuhelloworld"); glgenframebuffersext(1, &g_fb); glbindframebufferext(gl_framebuffer_ext, g_fb); glgentextures(4, g_ntexid); // create (reference to) a new texture glbindtexture(opt1, texid); gltexparameteri(opt1, GL_TEXTURE_MIN_FILTER, GL_NEAREST); gltexparameteri(...); glteximage2d(opt1, 0, opt2, width, height, 0, GL_RGBA, GL_FLOAT, 0); ( 以下省略 ) GPUの処理 (GLSL) 各ピクセルに対して実行される シェーダ言語を用いた配列加算 (vc=a*va + b*vb) の例 GPGPU 用の言語 ( ストリーミング言語など ) の研究なども行われたが 普及はしなかった ここでは割愛 CPU の処理 (OpenGL) 10

CUDA NVIDIA 社製 GPU のアーキテクチャ 開発環境 (2007 年に一般公開 ) GPU の内部 をある程度公開 開発環境を無料で提供 画像処理の知識がなくても利用可能 ( まともな ) 最適化が可能 11

5 分でわかる ( かもしれない )CUDA ハードウェアの概要 ソフトウェアの概要 最適化の基本戦略 12

CUDA ハードウェアの概要 階層的な演算器とメモリ GPU MP (SM, Multiprocessor) GPU あたり 1~30 ( 浮動小数点 ) 演算ユニット 全 SP でばらばらの計算を行うことは想定されていない ( 非常に遅くなる いわゆる SIMD) SP (CUDA Core) MP あたり 8~48 局所的な高速共有メモリ キャッシュ PCIe CPU MainMemory 大域的な共有メモリ 13

実行イメージ ポイント GPUはCPUからの指示で動く GPUの実行単位は関数 関数呼び出し時に並列度を指定 Block Thread 14

time GPU イントロダクション CPU 初期化 計算に使うデータの配置 演算開始指示 ( 別の処理を実行可能 ) GPU 初期化 演算 演算終了待ち ( 演算終了 ) 計算結果データの取得 15

CUDA プログラムの概要 CUDA C C/C++ を若干拡張した言語 関数指示詞 :GPU 上で実行する関数を明示 メモリ指示詞 :GPU 上のメモリ配置を明示 GPU 制御記述 :GPU に処理を行わせる記法 専用の API:GPU の制御用 必要なもの toolkit + sdk PGI が提供する Fortran 版もあります Windows,Linux,MaxOSX 用が公開されている デバッガや性能解析ツールも公開されている GCC や VisualStudio も必要 16

CUDA プログラムの例 1/2 シンプルな配列加算の例 global void gpumain (float* vc, float* va, float* vb, int nsize, float a, float b){ for(int i=0; i<nsize; i++){ vc[i] = a*va[i] + b*vb[i]; } } GPU の処理 blocks,threads で指定された数だけ実行される (CPU から GPU 上のプロセッサを個別に操作しない ) void main(){ CUT_DEVICE_INIT(); cudamalloc((void**)&d_va, n); cudamalloc((void**)&d_vb, n); cudamalloc((void**)&d_vc, n); cudamemcpy(d_va, h_va, n, cudamemcpyhosttodevice); cudamemcpy(d_vb, h_vb, n, cudamemcpyhosttodevice); gpumain<<< blocks, threads >>>(d_vc, d_va, d_vb, nsize, alpha, beta); cudamemcpy(h_vc, d_vc, n, cudamemcpydevicetohost); } CUDA を用いた配列加算 (vc=a*va + b*vb) の例 CPU の処理 17

CUDA プログラムの例 2/2 シンプルな配列加算の例 ( 並列計算版 ) global void gpumain (float* vc, float* va, float* vb, int nsize, float a, float b){ int begin = blockidx.x*blockdim.x + threadidx.x; int step = griddim.x*blockdim.x; for(int i=begin; i<nsize; i+=step){ vc[i] = a*va[i] + b*vb[i]; } } ( シェーダと比べて ) 非常にわかりやすくなった CUDAに関する理解は必要 void main(){ CUT_DEVICE_INIT(); cudamalloc((void**)&d_va, n); cudamalloc((void**)&d_vb, n); cudamalloc((void**)&d_vc, n); cudamemcpy(d_va, h_va, n, cudamemcpyhosttodevice); cudamemcpy(d_vb, h_vb, n, cudamemcpyhosttodevice); gpumain<<< blocks, threads >>>(d_vc, d_va, d_vb, nsize, alpha, beta); cudamemcpy(h_vc, d_vc, n, cudamemcpydevicetohost); } GPU の処理 blocks,threads で指定された数だけ実行される CUDA を用いた配列加算 (vc=a*va + b*vb) の例 CPU の処理 18

Block と Thread イメージとしては CPU コアとプロセスおよびスレッドとの関係 Block は SM に Thread は SP に割り当てられて実行される 物理数を超えたら時分割実行 基本的に全 Block の全 Thread が同一の関数を実行する ( 最近の GPU では緩和された ) ID を利用すれば計算対象データを選択可能 同一 Block 内の Thread に同じ処理をさせると高性能 ( 正確には 32 個単位 ) 19

最適な Block Thread 数 CPU プログラミング コア数を超えないプロセス スレッド数が常識 CUDA プログラミング SP 数を大きく超えた Thread 数が常識 SP の切り替えが高速なため メモリアクセス待ちの間に切り替えて実行することが可能 20

特性の異なる複数種類のメモリ Register SP 毎に持つレジスタ ( 高速 ) GlobalMemory( device 変数 ) GPU 全体で持つ共有メモリ ( 高速 高レイテンシ ランダムアクセスが遅い ~1GB 程度 ) SharedMemory( shared 変数 ) MP 毎に持つ共有メモリ ( 高速 低レイテンシ ランダムアクセスも高速 16KB/48KB) 関数単位 TextureMemory GPU 全体で持つ読み取り専用メモリ ( キャッシュ効果や補完機能のある GlobalMemory) ConstantMemory( constant 変数 ) GPU 全体で持つ読み取り専用メモリ ( キャッシュ効果のある GlobalMemory 64KB) 21

特性の異なる複数種類のメモリ Threadが同時に連続アドレスをアクセスすると (GPU 内部では ) 一命令でまとめてアクセス可能 = 性能向上 ( コアレスなメモリアクセス ) Register SP 毎に持つレジスタ ( 高速 ) GlobalMemory( device 変数 ) GPU 全体で持つ共有メモリ ( 高速 高レイテンシ ランダムアクセスが遅い ~1GB 程度 ) SharedMemory( shared 変数 ) MP 毎に持つ共有メモリ ( 高速 低レイテンシ ランダムアク セスも高速 16KB/48KB) 関数単位 ( メモリがバンクに分かれているため ) 特定のアドレス幅 TextureMemory で同時にアクセスすると衝突 = 性能低下 ( バンクコンフリクト回避 ) GPU 全体で持つ読み取り専用メモリ ( キャッシュ効果や補 完機能のある GlobalMemory) ConstantMemory( constant 変数 ) GPU 全体で持つ読み取り専用メモリ ( キャッシュ効果のある GlobalMemory 64KB) 22

CUDA 最適化プログラミングの基本戦略 1. 多数の Block/Thread を密に動かす 並列度を上げる 動作がばらつかないようにする 2. メモリを適切に利用する コアレスメモリアクセス バンクコンフリクト回避 3. 分岐をなくす ループ展開する GPU は分岐処理に弱い 4. データ転送の隠蔽 CPU の活用 データ転送と演算のオーバーラップが可能 場合によっては CPU での計算も行う 基本的には GPU で全ての演算を行えるようにするべきだが 計算とメモリのどちらが頭打ちになるか考える 23

5 分でわかる ( かもしれない )CUDA ( おわかりいただけましたか?) 正しく動かすだけならそれほど難しくはない 性能最適化は大変 特に最近はアーキテクチャの更新が頻繁で大変 無料で公開されている +GPU が無くても試行は可能なので 是非使ってみてください 24

GPGPU 対応ソフトウェアや研究の例 GPGPU 黎明期 描画処理の中の計算 描画処理を用いた計算 照明 陰影計算中の算術演算 衝突判定 etc. 行列積 LU 分解 etc. 現在 ( 主に CUDA) 動画編集ソフト ( リアルタイム編集 形式変換 ) BLAS FFT N 体問題 etc. CG 法などのソルバー ( アルゴリズム ) プログラミング言語 その他ライブラリ ( 描画関連 ) 25

GPGPU(CUDA) の現状と将来 CUDA のトレンド 倍精度演算の性能向上 ECC メモリ対応 統合開発環境 (nsight) の公開 ユーザのニーズに応えて性能 機能向上 GPU の CPU 化? スーパーコンピューターへの採用 圧倒的な演算性能は必要不可欠 TSUBAME 2.0( 東工大 ) 中国スパコン 課題 複数 GPU 利用 実用アプリケーション 言語 PCI-Express の帯域やメインメモリ容量の消費 プログラミングの難しさ GPU クラスタの活用 最適な問題分配 チェックポイント メモリの最適利用 26

GPGPU(GPU) の現状と将来 GPU の将来 ( 予想 ) ~5 年後 さらなる性能向上 機能追加 CPU に近づく GPU は汎用化し CPU に近づく CPU はメニーコア化し GPU に近づく GPU スパコンの増加 GPU アプリケーションの増加 ~10 年後 GPU ではなくなる? グラフィックスハードウェアとしての要求と HPC ハードウェアとしての要求が乖離 GPU のような何か 27

おわりに ( 非常に簡単ではありますが ) GPU と GPGPU について紹介しました GPGPU の魅力の一つは 試しやすさ だと思うので 是非使ってみてください 秋葉原で 1 万円未満から買えます 良い効果は得られないことも多いと思いますが それが現在の GPU です 特定の問題でしか良い性能は得にくいです まだまだ利用コストは高いですが 挑戦する価値はあると思います 28