ヘテロジニアスな環境における...

34
ヘテロジニアスな環境における ソフトウェア開発

Upload: others

Post on 20-May-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

ヘテロジニアスな環境におけるソフトウェア開発

Page 2: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

Agenda

• ヘテロジニアスな環境の登場

– ホモジニアスからヘテロジニアスへ

• ヘテロジニアスなアーキテクチャ

– GPU

– CUDA

– OpenACC, XeonPhi

• 自分のプログラムを理解するために

– デバッガ、共通の操作体験

– TotalView

• 続きはブースで

今日の概要

Page 3: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

より速く

ホモジーニアスな並列

• HPC

– 銀河生成、金融のリスク計算、車の衝突解析、製薬、 …

– 大規模、複雑なアルゴリズム、高速、 …

• 単一のCPUコアはクロック数が頭打ち ~ 3GHz

• ホモジーニアスな並列

– マルチスレッド (OpenMP, pthreads)

– CPUクラスタ、マルチプロセス (MPI)

• 高い汎用性、長年の実績とノウハウ

• メモリアクセス速度のボトルネック

• 高価なインターコネクト

• 複雑な非同期プログラミング

The Free Lunch Is OverBy Herb Sutter

Page 4: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

より速く

専用の外付けデバイス

MICコプロセッサ

GPUアクセラレータ

• シンプルで高速な演算器

• 高い並列化効率

• 費用対効果

• 省電力

• 新しい言語拡張の理解

• ハードウェアの理解

ヘテロジニアスな開発環境

Page 5: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

より速く

Top 500, Green 500, …

Page 6: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

ヘテロジニアスな環境

GPUとXeonPhi

GPU• CUDA とOpenACC• Device, SM, CUDA Core, Warp, Lane• block, thread, … • global memory, shared, …

Xeon Phi• offloadディレクティブ• symmetricモード• nativeモード• 512bitのベクトル

Page 7: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

GPUアーキテクチャ

• ホストCPUのアクセラレータとして

– あるいはホストをGPU演算の補助装置として

• 数千コアの並列

• グリッド(デバイス)、SM、CUDAコア(SP)

• 複数CPU x 複数GPU

• 製品ライン

– GeForce, Quadro, Tesla, …

• アーキテクチャ

– Kepler, Fermi, Maxwell, …

ハードウェア

Page 8: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

GPUアーキテクチャ

ハードウェア階層• Grid

• SM (16個 / Grid) (Fermi)

• CUDAコア (SP, 32個 / SM) (Fermi)

• Warp(縦糸, 32スレッド)

– 制御単位。ベクトル

• Thread (撚り糸, 3D, レーン)

– CUDAコアとregisterの組

– 軽量

Grid

SM (Streaming Multiprocessor)

CUDAコア

メモリの種類• オフチップ

– Video memory

• オンチップ

– shared memory (64kB/SM)

– register

– constant cache, texture cache

Page 9: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

CUDA

• GPUベンダーのNVIDIA公式(信頼。ベンダーロック)

• 無償の開発環境。cuFFTやcuBLASなどの数値計算ライブラリ付属。

• OpenCV, MATLAB, IMSLなどツール経由でCUDA利用することも

• ホストはWindows, Linux, Mac

• レイヤーが低く、コードが複雑。

• CUDA 5.0 5.5

– Dynamic Parallelism

• Cuda 6.0

– Unified Memory

NVIDIA CUDA

Page 10: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

CUDAアーキテクチャ

• グリッド (デバイス)

• スレッドブロック (2D/3D)

– SMへの割付単位

• スレッド (3D)

CUDAの論理階層

• ホスト側 (呼び出し)

– MatMulKernel<<<dimGrid, dimBlock>>>(matA, matB, matC);

• デバイス側 (実装)

– __global__ void MatMulKernel(Matrix A, Matrix B, Matrix C) { ... }

• 論理構造を明示的に指定

Kernel関数

Page 11: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

CUDAアーキテクチャ

• 開発者が明示的に指定

メモリ階層(論理的)

Memory Scope Locality

Global Device External

Shared Block Chip

Local Thread Chip

Constant Device Chip (cache)

Texture Device Chip (cache)

Register Thread Chip

shared 16kB

Page 12: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

CUDAプログラミング

• 同一ファイル内に混在可能

• NVCCが振り分けてくれる

• メモリ修飾子

– __device__, __constant__, __shared__

• 関数修飾子

– __global__, __device__, __host__

ホストコードとデバイスコード

• 言語

– C言語の拡張

– コンパイラNVCC

– Python,Javaなどのバインディング

Page 13: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

CUDAプログラミング

単純なプログラムの例

• CUDAサンプルvectorAdd

– 2つの配列の足し算

• データを計算単位に分割する。

• 組み込み変数 blockIdx, threadIdxごとに分ける。

• 何番目のBlock (3D), 何番目のThread (3D)にいるの

か?(論理階層)

• 何番目のdevice, SM, Warp, Laneにいるのか?(物理

階層)

kernel関数の定義

ホストメモリ確保

ホストデータ初期化

デバイスメモリ確保

メモリ転送

kernel関数呼び出し

デバイスメモリ解放

ホストメモリ解放

Page 14: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

OpenACC

• Fortran, C/C++。有償

• ディレクティブ指向

– OpenMPとの類似

– ホストコードのみ記述

– 通常のCPUコードとしても使える

• コンパイラが多くの仕事を担当

– ループの検出

– GPUの側のメモリ管理

– CPUとGPUの間のデータ移動

– Kernel関数を作成するかどうか

• オープン規格

• Cray, PGI, NVIDIAがサポート

• CUDAと組み合わせることができる。

OpenACCの特徴

OpenACC CUDA

gang threadblock

worker warp

vector warp内のスレッド

OpenACCの論理階層

Page 15: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

Xeon Phi

• ホストCPU にPCI Expressで接続するボード。

• MICアーキテクチャのx86互換のコプロセッサ。

– 汎用的なCPU用に書かれたコードの移植性が高い

• コアごとに512bitのSIMD処理(16命令/clock, ベクトル長)

• 独立したOS(Linux)が動作し、sshなどによるアクセス

Intel Xeon Phi コプロセッサ

• Offloadモデル

– ディレクティブ。必要な部分だけコプロセッサに投げる。

• シンメトリックモデル

– ホストとコプロセッサの間でMPIなどを使ってやりとりする

• Nativeモデル

– コプロセッサ上でのみ実行。 既存のコードをそのまま使える

柔軟な実行モデル

Page 16: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

Xeon Phi

offloadのコード例void test08() {

float pi = 0.0f;const int count = 10000;int i;

#pragma offload target (mic)#pragma omp parallel for num_threads(4) private(i)

reduction(+:pi)for (i = 0; i < count; ++i) {

float t = (float)((i + 0.5f) / count);pi += 4.0f / (1.0f + t * t);

}pi /= count;

}

host

host

MIC

t1t0 t2 t3

MIC

offload

OpenMP

Page 17: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

コードを理解する

• ハードウェアやプログラミングモデルの特性を理解

• メモリの制約を理解してエラーを回避する

• 複数言語、複数パラダイム

• クラスタ、スレッド、ヘテロジニアス、vector

様々なヘテロジニアス環境

• プログラムは意図したとおりではなく書かれたとおりに動く

• At Operation. 仕様書ではなくコードが全て

• 複数人による作業

• 引き継ぎ

• 移植

自分のコードがどう振る舞うか

γνῶθι σεαυτόν (汝自身を知れ, Know thyself)

Page 18: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

コードを理解する

効率的なデバッガ

• code reading, ペアプログラミング、ベアプログラミング

• どの処理がデバイス上でどのように振舞っているか想像する

• デバッグはコーディングの2倍大変

• 開発時間の制約

• 手ぶらで立ち向かうのは危険

自分のコードと仲良くなるために

Page 19: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

TotalView

• 幅広いコンパイラ、プラットフォーム

– C, C++, Fortran 77 & 90

– Unix, Linux, MacOS X,

– ラップトップからスパコンまで

• 並列デバッグ

– マルチスレッド、MPIデバッグ

– CUDA, Intel Xeon Phi, OpenACC

• メモリ・デバッグ機能: MemoryScape

• リバース・デバッグ機能: ReplayEngine

• パワフルで軽量、使いやすい GUI

• パッチ機能breakpoint: Evaluation Point

• スクリプト用の CLI,バッチ・デバッグ

• リモートデバッグ

TotalView

Page 20: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

TotalView

• HPCwire 影響力のあるミドルウェア20 (2014/6)

• 世界中の企業や研究機関

Page 21: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

TotalView

様々な動作画面

OpenACC CUDA(デバイスコード)

XeonPhiホスト コプロセッサ

同じインターフェイス

• breakpoint, ステップ実行, 関数の呼出履歴、配列の表示, …

Page 22: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

TotalView

CUDAのデバッグ画面

GPUフォーカススレッドの論理座標

スタックトレースとインライン関数

warpのPC

CUDAグリッドとブロックの次元、warp/レーン、warp/SM、warp数

パラメータ、レジスタ、局所変数と共有変数

Page 23: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

TotalView

CUDA:2つの座標をマッピング

物理座標 論理座標

Grid, SM, Warp, Lane Grid, Block, Thread

Page 24: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

Summary

• 開発は大変

– 開発者や研究者はGPU, Xeon-Phiなどの新しいデバイスになじまなければならない

– 同時に従来のOpenMPやMPIの手法も知っておく必要がある

– それぞれの環境ごとのプログラムの挙動の違いをイメージする

– これらを限られた時間の制約の中で行わなければならない

• コードを知るにはデバッガが便利!

• TotalViewは複数のホストとデバイス、幅広いアーキテクチャに対し同一の操作体験

• Accelerating Great Code

ヘテロジニアスな環境

TotalViewで定時に帰ろう!!

結論

Page 25: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

XeonPhi

http://www.eetindia.co.in/ART_8800700109_1800012_NT_af7fa4b9_2.HTM

Page 26: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

Xeon Phi

The spectrum of models

CPU中心 Intel® Xeon Phi 中

ホスト

コプロセッサ

マルチコアのホスト メニーコアのホストシンメトリックoffload

Main( )Foo( )MPI_*()

Main( )Foo( )MPI_*()

Main( )Foo( )MPI_*()

Foo( ) Main()Foo( )MPI_*()

Main( )Foo( )MPI_*()

PCIe

汎用的なシリアル

および並列計算ディレクティブで並列化

対等なMPI ネイティブ

Page 27: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

How can TotalView help you?

• Threads and/or MPI

– Deadlocks and hangs

– Race conditions

– It provides

• Asynchronous thread control

• Powerful group mechanism

• Fortran and/or C++

– Complex data structures

• Diving and recursive dive

– STL Collection Classes

• STLView

– Rich class hierarchies

• Powerful type-casting

features

Effective Debugging requires the capability to control and examine specific instances of

program execution in detail

• Memory Analysis

– Leaks and Bounds Errors

• Automatic error detection

tools

– Out of Memory Errors

• Analysis of heap memory

usage by file, function and

line

• Numerical errors

– Extensible data visualization

– Slicing and filtering of arrays

– Powerful expression system

– Conditional watchpoints

TotalView provides an answer to the question : “What is my program really doing?”

Page 28: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

TotalView

• CUDA 4.2, 5.0, 5.5, 6.0対応

• CUDAの統一メモリ(unified memory)

• CUDAの動的モードのプログラム

• 1つのセッション内でホストとデバイスのコードをデバッグ

• TeslaやFermiなどのハードウェア上のCUDA

• LinuxおよびGPUデバイス上のスレッドを可視化

• デバイス、ブロック、スレッドメモリの階層構造を完全に可視化

• デバイスのスレッドを論理座標とデバイス座標の両方で操作可能

• CUDAの関数呼び出し、ホストのピン止めされたメモリ領域、CUDAコンテ

クストを可視化

• CUDAの関数をインラインでもスタック上でもハンドリング

• 使いやすい軽量なGUIと、自動化に適したCLI(コマンドライン)

• 複数のNVIDIAデバイスを使うアプリケーション

• CUDAで高速化されたクラスタ上のMPIアプリケーション

• 統一された仮想アドレスとGPUDirect

• メモリエラーを検知してレポート、CUDAの例外をハンドリング

NVIDIA CUDA

Page 29: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

TotalView

CUDAのデバッグ画面

スレッド (x,y,z)

ブロック (x,y,z)

GPUフォーカス・スレッド・セレクタでCUDAスレッドのブロック(x,y) やスレッド (x,y,z) インデクスを変更する

ボックスの中にある行番号をクリックしてbreakpointを置く

TotalViewのスレッドID0以上: ホストスレッド0より小さい: GPUスレッド

Page 30: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

TotalView

CUDAの例

GPUフォーカススレッドの論理座標

スタックトレースとインライン関数

warpのPCを指す矢印

CUDAグリッドとブロックの次元、レーンあたりのwarp、SMあたり

のワープ、ワープ数などなど

パラメータ、レジスタ、局所変数と共有変数

Page 31: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

TotalView

GPUデバイスの情報を表示

デバイス情報

論理情報

Page 32: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

TotalView

• ホストCPU/GPUどちらでもス

テップ実行

• コンパイラ Cray CCE 8.x

OpenACC

OpenACC

Page 33: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

TotalView

• シンメトリックモデルのデバッグができる初め

てのデバッガ

• 付属のMemoryScapeでネイティブおよびシン

メトリックモデルのメモリデバッグ(オフロード

は8.13では未対応)

• ホストとコプロセッサ両方のスレッドを完全に

可視化

• MPI プログラムの完全サポート

• オフロードコードによる異種混合アプリケー

ションのシンメトリックデバッグ

• Xeon Phi ネイティブ・アプリケーションのリ

モートデバッグ

• Xeon および Xeon Phi 両方の非同期スレッド

制御

• マルチホスト、マルチカード

• リバースデバッグは未対応

Intel Xeon Phi

Page 34: ヘテロジニアスな環境における ソフトウェア開発on-demand.gputechconf.com/gtc/2014/jp/sessions/6005.pdf · –Kepler, Fermi, Maxwell, … ハードウェア. GPUアーキテクチャ

TotalView

1つのデバッグセッションで同じ操作体験ホスト コプロセッサ