スライド 1

Size: px
Start display at page:

Download "スライド 1"

Transcription

1 GTC Japan 2013 PGI Accelerator Compiler 新 OpenACC 2.0 の機能と PGI アクセラレータコンパイラ 2013 年 7 月 加藤努株式会社ソフテック

2 本日の話 OpenACC ディレクティブで出来ることを改めて知ろう! OpenACC 1.0 の復習 ディレクティブ操作で出来ることを再確認 OpenACC 2.0 の新機能 プログラミングの自由度の向上へ PGI Accelerator Compiler 2013 PGI Accelerator Programming Model 準拠 OpenACC 1.0 準拠 OpenACC 2.0 の機能は 毎月のリビジョンで順次追加 プラス PGI Extension( 先取り機能 ) 1

3 PGI Accelerator / OpenACC Release Map PGI Accelerator Programming Model 公開 (OpenACC の原型モデル ) PGI Accelerator Compiler リリース (PGI 2010) OpenACC 1.0 準拠 PGI Compiler リリース (PGI 2012) PGI 提供開始 OpenACC 2.0 順次取込 (PGI 2013) NVIDIA CUDA release OpenACC API 1.0 release OpenACC API 2.0 final PGI は 2009 年より提供開始 OpenMP 4.0 with extensions for Accelerators 2

4 OpenACC Programming Model オフロードモデル 重い処理部分 をアクセラレータ側で処理するモデル ホスト側 CPU 重い計算部分の処理をオフロード Accelerator 側 Device Main Memory Device Memory 並列処理によるスループット改善 1 処理の並列化 ( 分割指示 ) 2 データの移動管理 3

5 OpenACC ディレクティブの主な構成 ホスト ( 処理 ) Accelerator 1 CPU 重い計算部分の処理をオフロード 3 GPGPU Main Memory 2 ( データ ) Device Memory 1 Accelerate Compute 構文 (offload 領域指示 ) 2 Data 構文 ( データ移動指示 ) 3 Loop 構文 (Mapping for parallel/vector, Tuning) 4

6 OpenACC 1.0 ディレクティブの復習 まだ ハードルが高いあなたに! 1 どこをオフロードの対象とするか? コンパイラに対する指示 ユーザが行う最初のステップ 2 データ マネージメントの方法データの移動指示 コンパイラが自動的に行う ユーザによる明示的な指示ホスト上 デバイス上にコピー 3 並列処理の分割方法の指示 Mapping ( 並列チューニング ) の directives 後は コンパイラに任せる 5

7 1 並列化 ( オフロード ) 領域の対象は? Q. どこをオフロードの対象とするのか? ( どこに directive を入れるか ) A. 並列化可能な ループ ループの集合体 Single Loops for( i = 0; i < n; ++i ) a[i] = b[i] + c[i]; tightly Nested Loops OpenACC directive 挿入 for (i = 0; i < n; i++){ for (j = 0; j < n; j++){ for (k = 0; k < n; k++){ C[i*n+j] = A[i*n+k] * B[k*n+j]; Non-tightly Nested Loops for( i = 0; i < nrows; ++i ){ double val = 0.0; int nstart = rowindex[i]; int nend = rowindex[i+1]; for( n = nstart; n < nend; ++n ) val += m[n] * v[colndx[n]]; r[i] = val; Ajacent( 隣接 ) Loops for( i = 0; i < n; ++i ) a[i] = b[i] + cdd[i]; for( i = 1; i < n-1; ++i ) c[i] = 0.5 * a[i-1] + a[i+1]; 6

8 プログラム シーケンス上でのオフロード対象 for (cgit = 1; cgit <= cgitmax; cgit++) { rho0 = rho; d = 0.0;rho = 0.0; for (j = 1; j <= lastrow-firstrow+1; j++) { sum = 0.0; for (k = rowstr[j]; k < rowstr[j+1]; k++) { sum = sum + a[k]*p[colidx[k]]; w[j] = sum; q[j] = sum; (snip) for (j = 1; j <= lastcol-firstcol+1; j++) { d = d + p[j]*q[j]; alpha = rho0 / d; ( ホスト上でスカラ演算 ) for (j = 1; j <= lastcol-firstcol+1; j++) { double new_rj = r[j] - alpha*q[j]; z[j] = z[j] + alpha*p[j]; r[j] = new_rj; rho = rho + new_rj*new_rj; (snip) beta = rho / rho0; ( ホスト上でスカラ演算 ) (snip) 外側繰り返しループ OpenACC directive Nested loop ( 並列化可能 ) OpenACC directive Single loop ( 並列化可能 ) OpenACC directive Single loop ( 並列化可能 ) 外側繰り返しループ 7

9 並列化 ( オフロード ) できないループ do k = 1, d3 do jj = 0, d2 - fftblock, fftblock do j = 1, fftblock do i = 1, d1 y1(j,i) = x(i,j+jj,k) enddo enddo call cfftz (is, logd1, d1, y1, y2) do j = 1, fftblock do i = 1, d1 xout(i,j+jj,k) = y1(j,i) enddo enddo enddo enddo ループ内に Function call K ループはオフロード化できない Nested loop ( 並列化可能 ) ループ内に Procedure Call があると並列化出来ない Nested loop ( 並列化可能 ) 並列化を行うには インライン展開するしかなかった! OpenACC API 1.0 では並列化できない NVIDIA CUDA 5.0 から GPU カーネルのリンカー機能が追加されたことのより OpenACC 2.0 で可能となる 8

10 2 OpenACC におけるデータ移動の基本 ホストとデバイス 間のデータ交換のタイミングポイントは? コンパイラのデフォルト動作 OpenACC 並列化構文 (acc kernels や acc parallel) の始点と終点でその領域内で使われている配列 スカラ変数を解析し ホスト と デバイス 間のデータコピーを行うコードを暗黙に自動生成!$acc kernels do k=1,n do j=1,n do i=1,n a(i,j.k)=b(i,j,k)*c(i,j,k) enddo enddo enddo!$acc end kernels!$acc parallel Gang Gang Gang!$acc end parallel ユーザが明示的にコピー配列名を指示 (copy clause) することができる live スカラ変数は デフォルトで copyin/copyout されている ( スカラ変数の移動管理は明示的に必要なし ) 9

11 データ マネージメントの基本的考え方 ホスト と デバイス 間のデータの移動を最小化すること プログラミング上の鉄則 デバイス上で可能な限りのデータ常駐化 ホスト側から一度 デバイスへコピー (copyin) された配列データは デバイス側の計算で役目が終わらない限り ホスト側へデータ (copyout) を戻さない ユーザが明示的にデータ移動を管理するための構文 Data 構文 directive の活用 Fortran!$acc data [clause ]...!$acc end data C #pragma acc data [clause ] {... Data 構文で指示された配列は data 構文領域の中で常駐化する 10

12 デバイス内にデータを常駐化する デバイス側の処理 Main routine (host 側 ) Host 側メモリ A(100) A!$acc data copy (a(100)) copyin copyout!$acc data present(a(100)) A A A call call call プログラムの流れ デバイス側メモリ resident A(100) time 2 A present と言う状態!$acc end data Data 構文 で挟まれたプログラム領域に適用できる 11

13 データの同期 update directive( 実行文 ) Host 側メモリ デバイス側メモリ A(100) copyin copyout resident A(100) present と言う状態!$acc data present(a(100)) デバイス側の処理 A A A Main routine (host 側 ) A call call call A A!$acc data copy (a(100)) 細かな操作が可能 Device to host!$acc update host (a(10:20)) Host to device!$acc update device (a(10:20))!$acc end data 12

14 実際のプログラムで directive の適用 int main(int argc, char **argv) { read_input(); domain(); setcoeff(); #pragma acc data create(u,rsd,frct,flux,a,b,c,d) copyin(ce) copyout(u) { setbv(); setiv(); erhs(); ssor(); /* end acc data */ error(); function call Main ルーチン +Subroutine タイプ データの移動管理の directive OpenACC data directive Accelerator Data 領域管理下 static void ssor(void) { for (istep = 1; istep <= itmax; istep++) { /* perform SSOR iteration */ #pragma acc kernels present(rsd) for (i = ist; i <= iend; i++) { for (j = jst; j <= jend; j++) { for (k = 1; k <= nz - 2; k++) { for (m = 0; m < 5; m++) { rsd[i][j][k][m] = dt * rsd[i][j][k][m]; ( 以下 略 ) 並列領域指定の directive OpenACC directive Nested loop ( 並列化可能 ) 13

15 3 並列処理の対象と方法を指示する構文 アクセラレータ上で並列実行を行う領域を指定するための directive その領域内で使用する データ を転送するコードを生成 (Implicit xfer) 2 種類の Accelerator Compute 構文 Parallel 構文 (1 つのカーネル構成でコード生成 ) C #pragma acc parallel { 並列実行領域 Fortran!$acc parallel { 並列実行領域!$acc end parallel Kernels 構文 (tightly loops を対象 複数のカーネルで構成 ) C #pragma acc kernels { 並列ループ領域 Fortran!$acc kernels { 並列ループ領域!$acc end kernels 14

16 役目 並列処理分割の指示を行う Loop 構文 直下の ループ の並列の分割方法 (gang, worker, vector) 指示 Acceleratorハードウェアの並列構造にマッピングを行うためのclause ループ内プライベートとなる変数の宣言 リダクション処理の指定 Fortran C!$acc loop [clause ] #pragma acc loop [clause ] Clause( 節 ) collapse (n) gang [ ( expression ) ] worker [ ( expression ) ] vector [ ( expression ) ] seq independent private( list ) reduction ( operator : list) 15

17 OpenACC Parallelism 3 階層 Gang Worker Vector PEs : プロセッサ要素の基本集合体 each PE : マルチスレッディング処理 Each thread of the PE : ベクトル命令処理 あまり深刻に考えなくてよい = H/W とのマッピングが難しい PE worker thread Multithreaded Vector 命令 ( 長さ ) NVIDIA case Gang Worker PEs => Streaming Multiprocessors thread Multithreading => warps within SM (PE 内の Max. Threads per Thread Block) Vector_length => warp 内スレッド数 32 16

18 並列処理分割の指示 loop 構文 #pragma acc kernels #pragma acc loop independent ( 並列対象指示 ) for (i = 1; i < n+1; i++) { #pragma acc loop independent Loop 構文 for (j = 1; j < n+1; j++) { ( 並列分割指示 ) #pragma acc loop independent for (k = 1; k < n+1; k++) { a1[i*sz*sz+j*sz+k] = ( a0[i*sz*sz+(j-1)*sz+k] + a0[i*sz*sz+(j+1)*sz+k] + 省略 a0[i*sz*sz+j*sz+(k-1)] + a0[i*sz*sz+j*sz+(k+1)] ) * fac; コンパイラが自動分割 Accelerate Compute 構文 161, Loop is parallelizable Accelerator kernel generated 161, #pragma acc loop gang /* blockidx.x */ 165, #pragma acc loop vector(128) /* threadidx.x */ 17

19 並列分割の指示 loop 構文 #pragma acc kernels #pragma acc loop independent gang(32) ( 並列対象指示 ) for (i = 1; i < n+1; i++) { #pragma acc loop independent Loop 構文 for (j = 1; j < n+1; j++) { ( 並列分割指示 ) #pragma acc loop independent vector(32) for (k = 1; k < n+1; k++) { a1[i*sz*sz+j*sz+k] = ( a0[i*sz*sz+(j-1)*sz+k] + a0[i*sz*sz+(j+1)*sz+k] + 省略 a0[i*sz*sz+j*sz+(k-1)] + a0[i*sz*sz+j*sz+(k+1)] ) * fac; 明示的に分割指示 161, Loop is parallelizable Accelerator kernel generated 161, #pragma acc loop gang(32) /* blockidx.x */ 165, #pragma acc loop vector(32) /* threadidx.x */ Accelerate Compute 構文 18

20 OpenACC API 2.0 in PGI Accelerator Compilers 19

21 OpenACC API 2.0 New features 手続きの呼び出し と 分離コンパイル ( 効果 ) プログラム移行性向上 ライブラリとしてモジュール化可能 入れ子 (Nested) 並列 ( 効果 ) parallel/kernels 構文を有するルーチン モジュールを構成可能 デバイス特有なチューニング, 複数のデバイス使用 ( 効果 ) デバイス種に依存しない 性能互換性 の向上 グローバル データへの対応 ( 効果 ) ルーチン間での 広域データ の使用の単純化 データ マネージメント自由度向上 ( 効果 ) unstructured data lifetimes( 自由にデータ領域を構築 ) 新しい Data API ルーチン ( より自由にデータ移動が可能 ) Loop 構文の parallelism 3 階層の明確化と auto tile 節の追加 ( 効果 ) 並列性 3 階層の整理 ユーザ チューニングの簡易化 非同期操作の向上 その他 20

22 現在 手続きの呼び出しがあると? #pragma acc parallel loop num_gangs(200) for ( int i = 0; i < n; ++i ) { v[i] += rhs[i]; matvec( v, x, a, i, n ); // デバイスへの function call Accelerator Compute 領域の中の call 文を含むループは 並列化できない OpenACC 1.0 では 関数 手続きをソースレベルでインライン展開をするしかなかった OpenACC 2.0 では可能になる 21

23 OpenACC 2.0 Function Call support #pragma acc routine worker extern void matvec(float* v, float* x, ); #pragma acc parallel loop num_gangs(200) for ( int i = 0; i < n; ++i ){ v[i] += rhs[i]; matvec( v, x, a, i, n ); // デバイスへの function call omp end parallel 1 手続きのプロトタイプ に指示 worker レベルの並列処理を指示する例 Function 内で worker レベルの並列処理を指示する場合は その上位の parallel/kernels 構文内の上位 loop の並列レベルは gang レベルである必要がある 同じ worker レベルは駄目 22

24 OpenACC 2.0 routine directive #pragma acc routine worker extern void matvec(float* v, float* x, ); #pragma acc parallel loop num_gangs(200) for ( int i = 0; i < n; ++i ){ v[i] += rhs[i]; matvec( v, x, a, i, n ); // デバイスへの function call omp end parallel 1 手続きのプロトタイプ に指示 worker レベルの並列処理を指示する例 2 手続き への routine 指示 分離コンパイルも可能 orphaned loop directive #pragma acc routine worker void matvec( float* v, float* x, float* a, int i, int n ) { float xx = 0; #pragma acc loop reduction(+:xx) for ( int j = 0; j < n; ++j ) xx += a[i*n+j]*v[j]; x[i] = xx; 23

25 OpenACC 2.0 Nested Parallelism (1) #pragma acc routine extern void matvec(float* v,float* x, ); 1 #pragma acc parallel loop for ( int i = 0; i < n; ++i ) matvec( v, x, i, n );end parallel 実際は i 毎にデバイスの中のシングル スレッドで次々に開始する parallel or kernels 領域内のループ内から call function function 側でも parallel or kernels loop を構成できる #pragma acc routine void matvec( ) { 2 #pragma acc parallel loop for ( int i = 0; i < n; ++i ) { matvec 内で 指定された parallelism を launch する 24

26 OpenACC 2.0 Nested Parallelism (2) #pragma acc routine extern void matvec(float* v,float* x, ); 1 #pragma acc parallel loop num_gangs(1) { matvec( v0, x0, i, n );e matvec( v1, x1, i, n );end matvec( v2, x2, i, n );e 一つのデバイス スレッドで次々に matvec を起動する #pragma acc routine void matvec( ) { 2 #pragma acc parallel loop for ( int i = 0; i < n; ++i ) { matvec 内で 指定された parallelism を launch する 25

27 異なるデバイスへの指示 device_type #pragma acc parallel loop num_gangs(200) for ( int i = 0; i < n; ++i ) { v[i] += rhs[i]; matvec( v, x, a, i, n ); omp end parallel 複数の異なる target 用に clause を指示する device_type(target) デバイス毎にチューニング 例えば NVIDIA 用と AMD Radeon 用に mapping を変える #pragma acc parallel loop \ device_type(nvidia) num_gangs(200) \ device_type(radeon) num_gangs(400) for ( int i = 0; i < n; ++i ) { v[i] += rhs[i]; matvec( v, x, a, i, n ); omp 26

28 Global data のハンドリング float a[ ]; #pragma acc routine worker extern void matvec( ); #pragma acc parallel loop for( i = 0; i < m; ++i ) { matvec( v, x, i, n ); 分離コンパイル機能の追加により ルーチン間に跨る グローバル変数 のデータ管理をサポートする必要がある declare 文を使う 4 つの方法 extern float a[]; #pragma acc routine worker void matvec ( float* v, float* x,int i, int n ) { #pragma acc loop worker for( int j = 0; j < n; ++j ) x[i] += a[i*n+j]*v[j]; 27

29 1 Global Static data のハンドリング declare 文 float a[ ]; #pragma acc declare create(a) #pragma acc routine worker extern void matvec( ); #pragma acc parallel loop for( i = 0; i < m; ++i ) { matvec( v, x, i, n ); declare 文は routine の 宣言セクション で使用 declareの機能プログラム ルーチン内のデータ領域等で implicit に visible copy を生成 広域変数を宣言した後に directive を指定 declare create(a) static data をホストとデバイス両方に生成 ホストとデバイス間の明示的なデータ同期は update directive を使用して維持する extern float a[]; #pragma acc declare create(a) #pragma acc routine worker void matvec ( float* v, float* x,int i, int n ) { #pragma acc loop worker for( int j = 0; j < n; ++j ) x[i] += a[i*n+j]*v[j]; 28

30 2 Global Pointer のハンドリング declare 文 float *a; #pragma acc declare create(a) #pragma acc routine worker extern void matvec( ); #pragma acc parallel loop \ copyin(a[0:n*m]) for( i = 0; i < m; ++i ) { matvec( v, x, i, n ); ホスト側の割付 データ管理はユーザの責任で行う ポインタを宣言した後に directive を指定 declare create(a) static にポインタをホストとデバイス両方に生成 copy はユーザの責任で行う data clause 中に copy 等を明示するとデバイスにデータ割付とコピーを行うコードを生成 extern float *a; #pragma acc declare create(a) #pragma acc routine worker void matvec ( float* v, float* x,int i, int n ) { #pragma acc loop worker for( int j = 0; j < n; ++j ) x[i] += a[i*n+j]*v[j]; 29

31 3 Global data のハンドリング declare link 節 float a[ ]; #pragma acc declare link(a) #pragma acc routine worker extern void matvec( ); #pragma acc parallel loop \ copyin(a[0:n*m]) for( i = 0; i < m; ++i ) { matvec( v, x, i, n ); link () の引数は必ず global 変数 declare link(a) ホスト上にデータ生成 デバイス上のデータへのリンク生成 data clause 中に copy 等を明示する時だけデバイスにデータ割付とコピーを行うコードを生成 extern float a[]; #pragma acc declare link(a) #pragma acc routine worker void matvec ( float* v, float* x,int i, int n ) { #pragma acc loop worker for( int j = 0; j < n; ++j ) x[i] += a[i*n+j]*v[j]; 30

32 4 device_resident in declare 文 float a[ ]; #pragma acc declare device_resident(a) #pragma acc routine worker extern void matvec( ); #pragma acc parallel loop for( i = 0; i < m; ++i ) { matvec( v, x, i, n ); 変数を宣言した後にdirectiveを指定 declare device_resident(a) static dataをデバイス上のみに生成 ホスト側には a[ ] は生成されない device 上のみで動作 nohost が必要 他に declare link( ) extern float a[]; #pragma acc declare device_resident(a) #pragma acc routine worker nohost void matvec ( float* v, float* x,int i, int n ) { #pragma acc loop worker for( int j = 0; j < n; ++j ) x[i] += a[i*n+j]*v[j]; 31

33 enter data と exit data 構文 #pragma acc data copyin(a[0:n]) \ create(b[0:n]) { 構造化ブロック.. Data lifetime を自由に設定する OpenACC 1.0 では 構造化ブロック の前後にデータ領域を指定するのみ データ領域の開始 enter データ領域の終了 exit を任意の場所に #pragma acc enter data copyin(a[0:n]) \ create(b[0:n]) #pragma acc exit data delete(a[0:n]) #pragma acc exit data copyout(b[0:n]) 32

34 Unstructured data lifetimes #pragma acc data copyin(a[0:n]) \ create(b[0:n]) { 構造化ブロック.. init ルーチンの中で enter fini ルーチンの中で exit Data lifetime を自由に設定する 任意の場所に! void init ( ) { #pragma acc enter data copyin(a[0:n]) \ create(b[0:n]) void fini ( ) { #pragma acc exit data copyout(b[0:n]) 33

35 新しい data API ルーチンの提供 data directive 構文の copy 節等の機能が API ルーチンとして提供 より自由にデータ移動 管理が可能 acc_copyin ( ptr, bytes ) acc_create ( ptr, bytes ) acc_copyout ( ptr, bytes ) acc_delete ( ptr, bytes ) acc_is_present ( ptr, bytes ) acc_update_device ( ptr, bytes ) acc_update_local ( ptr, bytes ) acc_deviceptr ( ptr ) acc_hostptr ( devptr ) acc_map_data ( devptr, hostptr, bytes ) acc_unmap_data ( hostptr ) 34

36 loop 構文 OpenACC 並列 3 階層をより厳密に整理 gang ループ : gang ループを含んではならない : 一番外側ループへの適用とする worker ループ : gang worker ループを含んではならない vector ループ : gang worker vector ループを含んではならない : 一番内側ループへの適用とする auto の新設 : コンパイラが選択する gang / worker / vector の実行モードの用語を明確に定義 gang redundant vs. gang partitioned mode worker single vs. worker partitioned mode vector single vs. vector partitioned mode an accelerator thread = a single vector lane of a single worker of a single gang 35

37 Nested loops における tiling!$acc parallel!$acc loop gang do i = 1, n!$acc loop vector do j = 1, m a(j,i) = (b(j-1,i)+b(j+1,i)+ & b(j,i-1)+b(j,i+1))*0.25 enddo enddo!$acc end parallel arallel ループのタイル化 2 次元における分割化指示 cache の有効利用 64 x 4 タイルの worker 構成を gang 間で並列に実行 内側ループ (j) tile clause (64 x 4) 外側ループ (i)!$acc parallel!$acc loop tile(64, 4) gang vector do i = 1, n do j = 1, m a(j,i) = (b(j-1,i)+b(j+1,i)+ b(j,i-1)+b(j,i+1))*0.25 enddo enddo!$acc end parallel 36

38 OpenACC API 機能向上 The OpenACC Application Programming Interface (OpenACC API) for offloading programs written in C, C++ and Fortran programs from a host CPU to an attached accelerator device 様々な OS 様々なホスト 様々なデバイス上で使用可能とする 出来得る限り 実行部分を デバイス 側で可能にする プログラミングの自由度を高めてゆくこと 今後も機能向上を続ける 37

39 PGI OpenACC 機能ロードマップ ( 予定 ) 予告なしに変更することがあります ACC Fortran texture 2.0 取込 OpenACC AMD Radeon OpenACC 2.0 AMD Radeon/APU 機能 Multi-device improve C++ OpenACC Code Generation Tuning Unstructured Acc Data Func Call lifetimes Nested Acc Compute OpenACC 1.0 Xeon Phi OpenACC 2.0 NVIDIA 対応プラットフォーム Kepler AMD Radeon OpenACC 2.0 仕様決定 AMD APU NVIDIA Maxell CUDA 4.2 CUDA 5.0 CUDA 5.x Xeon Phi 月 月

40 終わり 39

41 本ドキュメントに記述された各製品名は 各社の商標または登録商標です Copyright 2013 SofTek Systems Inc. All Rights Reserved. 40

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

GPU チュートリアル :OpenACC 篇 Himeno benchmark を例題として 高エネルギー加速器研究機構 (KEK) 松古栄夫 (Hideo Matsufuru) 1 December 2018 HPC-Phys 理化学研究所 共通コードプロジェクト GPU チュートリアル :OpenACC 篇 Himeno benchmark を例題として 高エネルギー加速器研究機構 (KEK) 松古栄夫 (Hideo Matsufuru) 1 December 2018 HPC-Phys 勉強会 @ 理化学研究所 共通コードプロジェクト Contents Hands On 環境について Introduction to GPU computing Introduction

More information

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

CUDA 連携とライブラリの活用 2 1 09:30-10:00 受付 10:00-12:00 Reedbush-H ログイン GPU 入門 13:30-15:00 OpenACC 入門 15:15-16:45 OpenACC 最適化入門と演習 17:00-18:00 OpenACC の活用 (CUDA 連携とライブラリの活用 ) CUDA 連携とライブラリの活用 2 3 OpenACC 簡単にGPUプログラムが作成できる それなりの性能が得られる

More information

XACCの概要

XACCの概要 2 global void kernel(int a[max], int llimit, int ulimit) {... } : int main(int argc, char *argv[]){ MPI_Int(&argc, &argc); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); dx

More information

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

1. GPU コンピューティング GPU コンピューティング GPUによる 汎用コンピューティング GPU = Graphics Processing Unit CUDA Compute Unified Device Architecture NVIDIA の GPU コンピューティング環境 Lin Windows で始める CUDA 入門 GTC 2013 チュートリアル エヌビディアジャパン CUDA エンジニア森野慎也 1. GPU コンピューティング GPU コンピューティング GPUによる 汎用コンピューティング GPU = Graphics Processing Unit CUDA Compute Unified Device Architecture NVIDIA の GPU コンピューティング環境

More information

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

Slides: TimeGraph: GPU Scheduling for Real-Time Multi-Tasking Environments 計算機アーキテクチャ第 11 回 マルチプロセッサ 本資料は授業用です 無断で転載することを禁じます 名古屋大学 大学院情報科学研究科 准教授加藤真平 デスクトップ ジョブレベル並列性 スーパーコンピュータ 並列処理プログラム プログラムの並列化 for (i = 0; i < N; i++) { x[i] = a[i] + b[i]; } プログラムの並列化 x[0] = a[0] + b[0];

More information

Copyright 2009, SofTek Systems, Inc. All rights reserved.

Copyright 2009, SofTek Systems, Inc. All rights reserved. PGI Visual Fortran Release 9.0 SofTek Copyright 2009, SofTek Systems, Inc. All rights reserved. \\\ \\ \\\ \\ \\ SofTek Systems, Inc \ SofTek Systems, Inc SofTek Systems, Inc SofTek Systems, Inc SofTek

More information

Microsoft PowerPoint - GTC2012-SofTek.pptx

Microsoft PowerPoint - GTC2012-SofTek.pptx GTC Japan 2012 PGI Accelerator Compiler 実践! PGI OpenACC ディレクティブを使用したポーティング 2012 年 7 月 加藤努株式会社ソフテック 本日の話 OpenACC によるポーティングの実際 OpenACC ディレクティブ概略説明 Accelerator Programming Model Fortran プログラムによるポーティング ステップ三つのディレクティブの利用性能チューニング

More information

Microsoft PowerPoint - GDEP-GPG_softek_May24-2.pptx

Microsoft PowerPoint - GDEP-GPG_softek_May24-2.pptx G-DEP 第 3 回セミナー PGI OpenACC Compiler PGIコンパイラ使用の実際 新しい OpenACC によるプログラミング 2012 年 5 月 加藤努株式会社ソフテック OpenACC によるプログラミング GPU / Accelerator Computing Model のデファクト スタンダードへ OpenACC Standard 概略説明 Accelerator Programming

More information

OpenACCによる並列化

OpenACCによる並列化 実習 OpenACC による ICCG ソルバーの並列化 1 ログイン Reedbush へのログイン $ ssh reedbush.cc.u-tokyo.ac.jp l txxxxx Module のロード $ module load pgi/17.3 cuda ログインするたびに必要です! ワークディレクトリに移動 $ cdw ターゲットプログラム /srcx OpenACC 用のディレクトリの作成

More information

Slide 1

Slide 1 CUDA プログラミングの基本 パート II - カーネル CUDA の基本の概要 パート I CUDAのソフトウェアスタックとコンパイル GPUのメモリ管理 パート II カーネルの起動 GPUコードの具体像 注 : 取り上げているのは基本事項のみです そのほか多数の API 関数についてはプログラミングガイドを ご覧ください GPU 上でのコードの実行 カーネルは C 関数 + 多少の制約 ホストメモリはアクセスできない戻り値型は

More information

01_OpenMP_osx.indd

01_OpenMP_osx.indd OpenMP* / 1 1... 2 2... 3 3... 5 4... 7 5... 9 5.1... 9 5.2 OpenMP* API... 13 6... 17 7... 19 / 4 1 2 C/C++ OpenMP* 3 Fortran OpenMP* 4 PC 1 1 9.0 Linux* Windows* Xeon Itanium OS 1 2 2 WEB OS OS OS 1 OS

More information

Vol.214-HPC-145 No /7/3 C #pragma acc directive-name [clause [[,] clause] ] new-line structured block Fortran!$acc directive-name [clause [[,] c

Vol.214-HPC-145 No /7/3 C #pragma acc directive-name [clause [[,] clause] ] new-line structured block Fortran!$acc directive-name [clause [[,] c Vol.214-HPC-145 No.45 214/7/3 OpenACC 1 3,1,2 1,2 GPU CUDA OpenCL OpenACC OpenACC High-level OpenACC CPU Intex Xeon Phi K2X GPU Intel Xeon Phi 27% K2X GPU 24% 1. TSUBAME2.5 CPU GPU CUDA OpenCL CPU OpenMP

More information

HPC143

HPC143 研究背景 GPUクラスタ 高性能 高いエネルギー効率 低価格 様々なHPCアプリケーションで用いられている TCA (Tightly Coupled Accelerators) 密結合並列演算加速機構 筑波大学HA-PACSクラスタ アクセラレータ GPU 間の直接通信 低レイテンシ 今後のHPCアプリは強スケーリングも重要 TCAとアクセラレータを搭載したシステムに おけるプログラミングモデル 例

More information

NUMAの構成

NUMAの構成 GPU のプログラム 天野 アクセラレータとは? 特定の性質のプログラムを高速化するプロセッサ 典型的なアクセラレータ GPU(Graphic Processing Unit) Xeon Phi FPGA(Field Programmable Gate Array) 最近出て来た Deep Learning 用ニューロチップなど Domain Specific Architecture 1GPGPU:General

More information

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

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 GPU 1 1 2 1, 3 2, 3 (Graphics Unit: GPU) GPU GPU GPU Evaluation of GPU Computing Based on An Automatic Program Generation Technology Makoto Sugawara, 1 Katsuto Sato, 1 Kazuhiko Komatsu, 2 Hiroyuki Takizawa

More information

Slide 1

Slide 1 CUDA プログラミングの基本 パート I - ソフトウェアスタックとメモリ管理 CUDA の基本の概要 パート I CUDAのソフトウェアスタックとコンパイル GPUのメモリ管理 パートII カーネルの起動 GPUコードの具体項目 注 : 取り上げているのは基本事項のみです そのほか多数の API 関数についてはプログラミングガイドを ご覧ください CUDA インストレーション CUDA インストレーションの構成

More information

Microsoft PowerPoint - OpenMP入門.pptx

Microsoft PowerPoint - OpenMP入門.pptx OpenMP 入門 須田礼仁 2009/10/30 初版 OpenMP 共有メモリ並列処理の標準化 API http://openmp.org/ 最新版は 30 3.0 バージョンによる違いはあまり大きくない サポートしているバージョンはともかく csp で動きます gcc も対応しています やっぱり SPMD Single Program Multiple Data プログラム #pragma omp

More information

Microsoft PowerPoint - 09.pptx

Microsoft PowerPoint - 09.pptx 情報処理 Ⅱ 第 9 回 2014 年 12 月 22 日 ( 月 ) 関数とは なぜ関数 関数の分類 自作関数 : 自分で定義する. ユーザ関数 ユーザ定義関数 などともいう. 本日のテーマ ライブラリ関数 : 出来合いのもの.printf など. なぜ関数を定義するのか? 処理を共通化 ( 一般化 ) する プログラムの見通しをよくする 機能分割 ( モジュール化, 再利用 ) 責任 ( あるいは不具合の発生源

More information

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

CUDA を用いた画像処理 画像処理を CUDA で並列化 基本的な並列化の考え方 目標 : 妥当な Naïve コードが書ける 最適化の初歩がわかる ブロックサイズ メモリアクセスパターン CUDA 画像処理入門 エヌビディアジャパン CUDA エンジニア森野慎也 GTC Japan 2014 CUDA を用いた画像処理 画像処理を CUDA で並列化 基本的な並列化の考え方 目標 : 妥当な Naïve コードが書ける 最適化の初歩がわかる ブロックサイズ メモリアクセスパターン RGB Y( 輝度 ) 変換 カラー画像から グレイスケールへの変換 Y = 0.299 R + 0.587

More information

Microsoft Word - openmp-txt.doc

Microsoft Word - openmp-txt.doc ( 付録 A) OpenMP チュートリアル OepnMP は 共有メモリマルチプロセッサ上のマルチスレッドプログラミングのための API です 本稿では OpenMP の簡単な解説とともにプログラム例をつかって説明します 詳しくは OpenMP の規約を決めている OpenMP ARB の http://www.openmp.org/ にある仕様書を参照してください 日本語訳は http://www.hpcc.jp/omni/spec.ja/

More information

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

研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI, MPICH, MVAPICH, MPI.NET プログラミングコストが高いため 生産性が悪い 新しい並 XcalableMPによる NAS Parallel Benchmarksの実装と評価 中尾 昌広 李 珍泌 朴 泰祐 佐藤 三久 筑波大学 計算科学研究センター 筑波大学大学院 システム情報工学研究科 研究背景 大規模な演算を行うためには 分散メモリ型システムの利用が必須 Message Passing Interface MPI 並列プログラムの大半はMPIを利用 様々な実装 OpenMPI,

More information

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

TSUBAME2.0 における GPU の 活用方法 東京工業大学学術国際情報センター丸山直也第 10 回 GPU コンピューティング講習会 2011 年 9 月 28 日 TSUBAME2.0 における GPU の 活用方法 東京工業大学学術国際情報センター丸山直也第 10 回 GPU コンピューティング講習会 2011 年 9 月 28 日 目次 1. TSUBAMEのGPU 環境 2. プログラム作成 3. プログラム実行 4. 性能解析 デバッグ サンプルコードは /work0/gsic/seminars/gpu- 2011-09- 28 からコピー可能です 1.

More information

Microsoft PowerPoint - 03_What is OpenMP 4.0 other_Jan18

Microsoft PowerPoint - 03_What is OpenMP 4.0 other_Jan18 OpenMP* 4.x における拡張 OpenMP 4.0 と 4.5 の機能拡張 内容 OpenMP* 3.1 から 4.0 への拡張 OpenMP* 4.0 から 4.5 への拡張 2 追加された機能 (3.1 -> 4.0) C/C++ 配列シンタックスの拡張 SIMD と SIMD 対応関数 デバイスオフロード task 構 の依存性 taskgroup 構 cancel 句と cancellation

More information

概要 OpenACC とは OpenACC について OpenMP, CUDA との違い OpenACC の指示文 並列化領域指定指示文 (kernels/parallel) データ移動指示文 ループ指示文 OpenACC の実用例 実習 コンパイラメッセージの見方 OpenACC プログラムの実装

概要 OpenACC とは OpenACC について OpenMP, CUDA との違い OpenACC の指示文 並列化領域指定指示文 (kernels/parallel) データ移動指示文 ループ指示文 OpenACC の実用例 実習 コンパイラメッセージの見方 OpenACC プログラムの実装 第 74 回お試しアカウント付き 並列プログラミング講習会 GPU プログラミング入門 in 名古屋 星野哲也 ( 助教 ) hoshino@cc.u-tokyo.ac.jp 大島聡史 ( 助教 ) ohshima@cc.u-tokyo.ac.jp 2016 年 3 月 14 日 ( 火 ) 東京大学情報基盤センター 概要 OpenACC とは OpenACC について OpenMP, CUDA との違い

More information

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

ストリームを用いたコンカレントカーネルプログラミングと最適化 エヌビディアジャパン CUDAエンジニア森野慎也 GTC Japan 2014 ストリームを用いたコンカレントカーネルプログラミングと最適化 エヌビディアジャパン CUDAエンジニア森野慎也 GTC Japan 2014 コンカレントな処理の実行 システム内部の複数の処理を 平行に実行する CPU GPU メモリ転送 カーネル実行 複数のカーネル間 ストリーム GPU 上の処理キュー カーネル実行 メモリ転送の並列性 実行順序 DEFAULT STREAM Stream : GPU

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 1 サンプルソースコードは ITO の /home/tmp/gpu 以下に置いてあります 実質的に 演習の答え となるものもあるので注意 PGI compiler 19.4 で実行した場合の出力に準拠 18.10 でも 19.4 でも基本的には同じであるが 18.10 では出力されていた Accelerator kernel generated ( 並列実行カーネルが作成できた旨 ) が出力されなくなったことを反映

More information

PowerPoint Presentation

PowerPoint Presentation ヘテロジニアスな環境におけるソフトウェア開発 Agenda 今日の概要 ヘテロジニアスな環境の登場 ホモジニアスからヘテロジニアスへ ヘテロジニアスなアーキテクチャ GPU CUDA OpenACC, XeonPhi 自分のプログラムを理解するために デバッガ 共通の操作体験 TotalView 続きはブースで より速く ホモジーニアスな並列 HPC 銀河生成 金融のリスク計算 車の衝突解析 製薬

More information

コードのチューニング

コードのチューニング OpenMP による並列化実装 八木学 ( 理化学研究所計算科学研究センター ) KOBE HPC Spring School 2019 2019 年 3 月 14 日 スレッド並列とプロセス並列 スレッド並列 OpenMP 自動並列化 プロセス並列 MPI プロセス プロセス プロセス スレッドスレッドスレッドスレッド メモリ メモリ プロセス間通信 Private Private Private

More information

HPC146

HPC146 2 3 4 5 6 int array[16]; #pragma xmp nodes p(4) #pragma xmp template t(0:15) #pragma xmp distribute t(block) on p #pragma xmp align array[i] with t(i) array[16] 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Node

More information

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

Microsoft PowerPoint - GPGPU実践基礎工学(web).pptx GPU のプログラム構造 長岡技術科学大学電気電子情報工学専攻出川智啓 今回の内容 GPU プログラミング環境 (CUDA) GPU プログラムの実行の流れ CUDA によるプログラムの記述 カーネル (GPU で処理する関数 ) の構造 記述方法とその理由 GPU 固有のパラメータの確認 405 GPU(Graphics Processing Unit) とは 画像処理専用のハードウェア 具体的には画像処理用のチップ

More information

XcalableMP入門

XcalableMP入門 XcalableMP 1 HPC-Phys@, 2018 8 22 XcalableMP XMP XMP Lattice QCD!2 XMP MPI MPI!3 XMP 1/2 PCXMP MPI Fortran CCoarray C++ MPIMPI XMP OpenMP http://xcalablemp.org!4 XMP 2/2 SPMD (Single Program Multiple Data)

More information

XACC講習会

XACC講習会 www.xcalablemp.org 1 4, int array[max]; #pragma xmp nodes p(*) #pragma xmp template t(0:max-1) #pragma xmp distribute t(block) onto p #pragma xmp align array[i] with t(i) int array[max]; main(int argc,

More information

02_C-C++_osx.indd

02_C-C++_osx.indd C/C++ OpenMP* / 2 C/C++ OpenMP* OpenMP* 9.0 1... 2 2... 3 3OpenMP*... 5 3.1... 5 3.2 OpenMP*... 6 3.3 OpenMP*... 8 4OpenMP*... 9 4.1... 9 4.2 OpenMP*... 9 4.3 OpenMP*... 10 4.4... 10 5OpenMP*... 11 5.1

More information

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

熊本大学学術リポジトリ Kumamoto University Repositor Title GPGPU による高速演算について Author(s) 榎本, 昌一 Citation Issue date Type URL Presentation 熊本大学学術リポジトリ Kumamoto University Repositor Title GPGPU による高速演算について Author(s) 榎本, 昌一 Citation Issue date 2011-03-17 Type URL Presentation http://hdl.handle.net/2298/23539 Right GPGPU による高速演算について 榎本昌一 東京大学大学院工学系研究科システム創成学専攻

More information

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

07-二村幸孝・出口大輔.indd GPU Graphics Processing Units HPC High Performance Computing GPU GPGPU General-Purpose computation on GPU CPU GPU GPU *1 Intel Quad-Core Xeon E5472 3.0 GHz 2 6 MB L2 cache 1600 MHz FSB 80 GFlops 1 nvidia

More information

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

Microsoft PowerPoint - CproNt02.ppt [互換モード] 第 2 章 C プログラムの書き方 CPro:02-01 概要 C プログラムの構成要素は関数 ( プログラム = 関数の集まり ) 関数は, ヘッダと本体からなる 使用する関数は, プログラムの先頭 ( 厳密には, 使用場所より前 ) で型宣言 ( プロトタイプ宣言 ) する 関数は仮引数を用いることができる ( なくてもよい ) 関数には戻り値がある ( なくてもよい void 型 ) コメント

More information

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

3次多項式パラメタ推定計算の CUDAを用いた実装 (CUDAプログラミングの練習として)  Implementation of the Estimation of the parameters of 3rd-order-Polynomial with CUDA 3 次多項式パラメタ推定計算の CUDA を用いた実装 (CUDA プログラミングの練習として ) Estimating the Parameters of 3rd-order-Polynomial with CUDA ISS 09/11/12 問題の選択 目的 CUDA プログラミングを経験 ( 試行錯誤と習得 ) 実際に CPU のみの場合と比べて高速化されることを体験 問題 ( インプリメントする内容

More information

演習1: 演習準備

演習1: 演習準備 演習 1: 演習準備 2013 年 8 月 6 日神戸大学大学院システム情報学研究科森下浩二 1 演習 1 の内容 神戸大 X10(π-omputer) について システム概要 ログイン方法 コンパイルとジョブ実行方法 OpenMP の演習 ( 入門編 ) 1. parallel 構文 実行時ライブラリ関数 2. ループ構文 3. shared 節 private 節 4. reduction 節

More information

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

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

More information

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い

SuperH RISC engineファミリ用 C/C++コンパイラパッケージ V.7~V.9 ご使用上のお願い ツールニュース RENESAS TOOL NEWS 2014 年 02 月 01 日 : 140201/tn1 SuperH RISC engine ファミリ用 C/C++ コンパイラパッケージ V.7~V.9 ご使用上のお願い SuperH RISC engine ファミリ用 C/C++ コンパイラパッケージ V.7~V.9の使用上の注意事項 4 件を連絡します 同一ループ内の異なる配列要素に 同一の添え字を使用した場合の注意事項

More information

(Microsoft PowerPoint \215u\213`4\201i\221\272\210\344\201j.pptx)

(Microsoft PowerPoint \215u\213`4\201i\221\272\210\344\201j.pptx) AICS 村井均 RIKEN AICS HPC Summer School 2012 8/7/2012 1 背景 OpenMP とは OpenMP の基本 OpenMP プログラミングにおける注意点 やや高度な話題 2 共有メモリマルチプロセッサシステムの普及 共有メモリマルチプロセッサシステムのための並列化指示文を共通化する必要性 各社で仕様が異なり 移植性がない そして いまやマルチコア プロセッサが主流となり

More information

OpenACC

OpenACC 109 OpenMP/OpenACC, hoshino @ cc.u-tokyo.ac.jp nakajima @ cc.u-tokyo.ac.jp 1 n Reedbush n $ ssh -Y reedbush.cc.u-tokyo.ac.jp l txxxxx n module n $ module load pgi/18.7 # n n $ cdw n OpenACC_samples n $

More information

インテル(R) Visual Fortran Composer XE 2013 Windows版 入門ガイド

インテル(R) Visual Fortran Composer XE 2013 Windows版 入門ガイド Visual Fortran Composer XE 2013 Windows* エクセルソフト株式会社 www.xlsoft.com Rev. 1.1 (2012/12/10) Copyright 1998-2013 XLsoft Corporation. All Rights Reserved. 1 / 53 ... 3... 4... 4... 5 Visual Studio... 9...

More information

Microsoft PowerPoint - 002_OpenMP 5.0_2018_Part2

Microsoft PowerPoint - 002_OpenMP 5.0_2018_Part2 インテル コンパイラー V19.0 による並列プログラミング : OpenMP* 5.0 プレビュー Part 2 2018 年 10 月 isus 編集部すがわらきよふみ 1 このセッションの目的 明示的な並列プログラミング手法として注目されてきた OpenMP* による並列プログラミングに加え インテル コンパイラーがサポートする OpenMP* 4.0 と 4.5 の機能を使用したベクトル プログラミングとオフロード

More information

NUMAの構成

NUMAの構成 メッセージパッシング プログラミング 天野 共有メモリ対メッセージパッシング 共有メモリモデル 共有変数を用いた単純な記述自動並列化コンパイラ簡単なディレクティブによる並列化 :OpenMP メッセージパッシング 形式検証が可能 ( ブロッキング ) 副作用がない ( 共有変数は副作用そのもの ) コストが小さい メッセージパッシングモデル 共有変数は使わない 共有メモリがないマシンでも実装可能 クラスタ

More information

( CUDA CUDA CUDA CUDA ( NVIDIA CUDA I

(    CUDA CUDA CUDA CUDA (  NVIDIA CUDA I GPGPU (II) GPGPU CUDA 1 GPGPU CUDA(CUDA Unified Device Architecture) CUDA NVIDIA GPU *1 C/C++ (nvcc) CUDA NVIDIA GPU GPU CUDA CUDA 1 CUDA CUDA 2 CUDA NVIDIA GPU PC Windows Linux MaxOSX CUDA GPU CUDA NVIDIA

More information

Microsoft PowerPoint - suda.pptx

Microsoft PowerPoint - suda.pptx GPU の HWアーキテクチャと高性能化手法 須田礼仁 ( 東京大学 ) 2011/03/22 GPU 高性能プログラミング GPU のハードウェアを理解する CUDA のソフトウェアを理解する CUDA でプログラムを書くのは難しくないが, CUDA で高速なプログラムを書くのは難しい どうすれば遅くなるかを理解する! 効果が大きいものから順に説明します 1 高性能プログラミングの手順 1. 現在のコードの,

More information

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

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 GPU CRS 1,a),b) SpMV GPU CRS SpMV GPU NVIDIA Kepler CUDA5.0 Fermi GPU Kepler Kepler Tesla K0 CUDA5.0 cusparse CRS SpMV 00 1.86 177 1. SpMV SpMV CRS Compressed Row Storage *1 SpMV GPU GPU NVIDIA Kepler

More information

情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 )

情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 ) 情報処理 Ⅱ 2007 年 11 月 26 日 ( 月 ) 本日学ぶこと 関数と変数 目的 関数を自分で定義し, 変数の利用方法 範囲を明示的に制限することで, 適切な機能分割 ( モジュール化, 再利用 ) を図る. してはいけないこと main 関数のみで 100 行以上のプログラム グローバル変数を駆使するプログラム プログラムを読みやすくする 保守性向上 入 p.109 2 関数 (Function)

More information

1.overview

1.overview 村井均 ( 理研 ) 2 はじめに 規模シミュレーションなどの計算を うためには クラスタのような分散メモリシステムの利 が 般的 並列プログラミングの現状 半は MPI (Message Passing Interface) を利 MPI はプログラミングコストが きい 標 性能と 産性を兼ね備えた並列プログラミング 語の開発 3 並列プログラミング 語 XcalableMP 次世代並列プログラミング

More information

NUMAの構成

NUMAの構成 共有メモリを使ったデータ交換と同期 慶應義塾大学理工学部 天野英晴 hunga@am.ics.keio.ac.jp 同期の必要性 あるプロセッサが共有メモリに書いても 別のプロセッサにはそのことが分からない 同時に同じ共有変数に書き込みすると 結果がどうなるか分からない そもそも共有メモリって結構危険な代物 多くのプロセッサが並列に動くには何かの制御機構が要る 不可分命令 同期用メモリ バリア同期機構

More information

Microsoft PowerPoint - GPU_computing_2013_01.pptx

Microsoft PowerPoint - GPU_computing_2013_01.pptx GPU コンピューティン No.1 導入 東京工業大学 学術国際情報センター 青木尊之 1 GPU とは 2 GPGPU (General-purpose computing on graphics processing units) GPU を画像処理以外の一般的計算に使う GPU の魅力 高性能 : ハイエンド GPU はピーク 4 TFLOPS 超 手軽さ : 普通の PC にも装着できる 低価格

More information

目次 1 はじめに 本文書の概要 PVF ソフトウェアと VISUAL STUDIO PVF ソフトウェアの種類 MICROSOFT VISUAL STUDIO の日本語化について VISUAL STUDIO

目次 1 はじめに 本文書の概要 PVF ソフトウェアと VISUAL STUDIO PVF ソフトウェアの種類 MICROSOFT VISUAL STUDIO の日本語化について VISUAL STUDIO PGI Visual Fortran のための Microsoft Visual Studio 導入ガイド 2016 年版 日本語環境の Visual Studio の構築について PGI インストール関係の日本語ドキュメントは 以下の URL に全てアーカイブしてありま す オンラインでご覧になりたい場合は 以下の URL にアクセスしてください http://www.softek.co.jp/spg/pgi/inst_document.html

More information

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - 計算機言語 第7回.ppt 計算機言語第 7 回 長宗高樹 目的 関数について理解する. 入力 X 関数 f 出力 Y Y=f(X) 関数の例 関数の型 #include int tasu(int a, int b); main(void) int x1, x2, y; x1 = 2; x2 = 3; y = tasu(x1,x2); 実引数 printf( %d + %d = %d, x1, x2, y);

More information

Microsoft PowerPoint pptx[読み取り専用]

Microsoft PowerPoint pptx[読み取り専用] 情報処理 Ⅱ 第 8 回 2009 年 12 月 7 日 ( 月 ) 本日学ぶこと 関数と変数 目的 関数を自分で定義し, 変数の利用方法 範囲を明示的に制限することで, 適切な機能分割 ( モジュール化, 再利用 ) を図る. してはいけないこと 問題 main 関数のみで 100 行以上のプログラム グローバル変数を駆使するプログラム プログラムを読みやすくする 保守性向上 多項式関数 f(x)

More information

Microsoft PowerPoint - 演習1:並列化と評価.pptx

Microsoft PowerPoint - 演習1:並列化と評価.pptx 講義 2& 演習 1 プログラム並列化と性能評価 神戸大学大学院システム情報学研究科横川三津夫 yokokawa@port.kobe-u.ac.jp 2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 1 2014/3/5 RIKEN AICS HPC Spring School 2014: プログラム並列化と性能評価 2 2 次元温度分布の計算

More information

Microsoft PowerPoint - 阪大CMSI pptx

Microsoft PowerPoint - 阪大CMSI pptx 内容に関する質問は katagiri@cc.u-tokyo.ac.jp まで 第 3 回 OpenMP の基礎 東京大学情報基盤センター 片桐孝洋 1 講義日程と内容について (1 学期 : 木曜 3 限 ) 第 1 回 : プログラム高速化の基礎 2015 年 4 月 9 日 イントロダクション ループアンローリング キャッシュブロック化 数値計算ライブラリの利用 その他第 2 回 :MPIの基礎

More information

プログラミング実習I

プログラミング実習I プログラミング実習 I 05 関数 (1) 人間システム工学科井村誠孝 m.imura@kwansei.ac.jp 関数とは p.162 数学的には入力に対して出力が決まるもの C 言語では入出力が定まったひとまとまりの処理 入力や出力はあるときもないときもある main() も関数の一種 何かの仕事をこなしてくれる魔法のブラックボックス 例 : printf() 関数中で行われている処理の詳細を使う側は知らないが,

More information

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

TSUBAME2.0におけるGPUの 活用方法 GPU プログラミング 基礎編 東京工業大学学術国際情報センター 1. GPU コンピューティングと TSUBAME2.0 スーパーコンピュータ GPU コンピューティングとは グラフィックプロセッサ (GPU) は グラフィック ゲームの画像計算のために 進化を続けてきた 現在 CPU のコア数は 2~12 個に対し GPU 中には数百コア その GPU を一般アプリケーションの高速化に利用! GPGPU

More information

Microsoft PowerPoint - KHPCSS pptx

Microsoft PowerPoint - KHPCSS pptx KOBE HPC サマースクール 2018( 初級 ) 9. 1 対 1 通信関数, 集団通信関数 2018/8/8 KOBE HPC サマースクール 2018 1 2018/8/8 KOBE HPC サマースクール 2018 2 MPI プログラム (M-2):1 対 1 通信関数 問題 1 から 100 までの整数の和を 2 並列で求めなさい. プログラムの方針 プロセス0: 1から50までの和を求める.

More information

GPGPU

GPGPU GPGPU 2013 1008 2015 1 23 Abstract In recent years, with the advance of microscope technology, the alive cells have been able to observe. On the other hand, from the standpoint of image processing, the

More information

AICS 村井均 RIKEN AICS HPC Summer School /6/2013 1

AICS 村井均 RIKEN AICS HPC Summer School /6/2013 1 AICS 村井均 RIKEN AICS HPC Summer School 2013 8/6/2013 1 背景 OpenMP とは OpenMP の基本 OpenMP プログラミングにおける注意点 やや高度な話題 2 共有メモリマルチプロセッサシステムの普及 共有メモリマルチプロセッサシステムのための並列化指示文を共通化する必要性 各社で仕様が異なり 移植性がない そして いまやマルチコア プロセッサが主流となり

More information

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

DO 時間積分 START 反変速度の計算 contravariant_velocity 移流項の計算 advection_adams_bashforth_2nd DO implicit loop( 陰解法 ) 速度勾配, 温度勾配の計算 gradient_cell_center_surface 速 1 1, 2 1, 2 3 2, 3 4 GP LES ASUCA LES NVIDIA CUDA LES 1. Graphics Processing Unit GP General-Purpose SIMT Single Instruction Multiple Threads 1 2 3 4 1),2) LES Large Eddy Simulation 3) ASUCA 4) LES LES

More information

XMPによる並列化実装2

XMPによる並列化実装2 2 3 C Fortran Exercise 1 Exercise 2 Serial init.c init.f90 XMP xmp_init.c xmp_init.f90 Serial laplace.c laplace.f90 XMP xmp_laplace.c xmp_laplace.f90 #include int a[10]; program init integer

More information

プログラミングI第10回

プログラミングI第10回 プログラミング 1 第 10 回 構造体 (3) 応用 リスト操作 この資料にあるサンプルプログラムは /home/course/prog1/public_html/2007/hw/lec/sources/ 下に置いてありますから 各自自分のディレクトリにコピーして コンパイル 実行してみてください Prog1 2007 Lec 101 Programming1 Group 19992007 データ構造

More information

memo

memo 数理情報工学演習第一 C プログラミング演習 ( 第 5 回 ) 2015/05/11 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 今日の内容 : プロトタイプ宣言 ヘッダーファイル, プログラムの分割 課題 : 疎行列 2 プロトタイプ宣言 3 C 言語では, 関数や変数は使用する前 ( ソースの上のほう ) に定義されている必要がある. double sub(int

More information

Microsoft PowerPoint - sales2.ppt

Microsoft PowerPoint - sales2.ppt 並列化の基礎 ( 言葉の意味 ) 並列実行には 複数のタスク実行主体が必要 共有メモリ型システム (SMP) での並列 プロセスを使用した並列化 スレッドとは? スレッドを使用した並列化 分散メモリ型システムでの並列 メッセージパッシングによる並列化 並列アーキテクチャ関連の言葉を押さえよう 21 プロセスを使用した並列処理 並列処理を行うためには複数のプロセスの生成必要プロセスとは プログラム実行のための能動実態メモリ空間親プロセス子プロセス

More information

MPI usage

MPI usage MPI (Version 0.99 2006 11 8 ) 1 1 MPI ( Message Passing Interface ) 1 1.1 MPI................................. 1 1.2............................... 2 1.2.1 MPI GATHER.......................... 2 1.2.2

More information

Slide 1

Slide 1 OpenFoam のための C/C++ 第 3 回 OpenFoam で勉強るテンプレート 田中昭雄 1 目的 この勉強会の資料があれば OpenFoam カスタマイズ時に C/C++ で迷わない 2 予定 第 1 回メモリ管理 第 2 回 CFDの例で勉強するクラス 第 3 回 OpenFOAMで勉強するテンプレート 第 4 回 OpenFOAMカスタマイズ 第 5 回未定 第 6 回未定 3 今回のテーマ

More information

main.dvi

main.dvi PC 1 1 [1][2] [3][4] ( ) GPU(Graphics Processing Unit) GPU PC GPU PC ( 2 GPU ) GPU Harris Corner Detector[5] CPU ( ) ( ) CPU GPU 2 3 GPU 4 5 6 7 1 toyohiro@isc.kyutech.ac.jp 45 2 ( ) CPU ( ) ( ) () 2.1

More information

Microsoft PowerPoint - sales2.ppt

Microsoft PowerPoint - sales2.ppt 最適化とは何? CPU アーキテクチャに沿った形で最適な性能を抽出できるようにする技法 ( 性能向上技法 ) コンパイラによるプログラム最適化 コンパイラメーカの技量 経験量に依存 最適化ツールによるプログラム最適化 KAP (Kuck & Associates, Inc. ) 人によるプログラム最適化 アーキテクチャのボトルネックを知ること 3 使用コンパイラによる性能の違い MFLOPS 90

More information

memo

memo 計数工学プログラミング演習 ( 第 3 回 ) 2017/04/25 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 内容 ポインタの続き 引数の値渡しと参照渡し 構造体 2 ポインタで指されるメモリへのアクセス double **R; 型 R[i] と *(R+i) は同じ意味 意味 R double ** ポインタの配列 ( の先頭 ) へのポインタ R[i]

More information

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

GPUコンピューティング講習会パート1 GPU コンピューティング (CUDA) 講習会 GPU と GPU を用いた計算の概要 丸山直也 スケジュール 13:20-13:50 GPU を用いた計算の概要 担当丸山 13:50-14:30 GPU コンピューティングによる HPC アプリケーションの高速化の事例紹介 担当青木 14:30-14:40 休憩 14:40-17:00 CUDA プログラミングの基礎 担当丸山 TSUBAME の

More information

Introduction to OpenMP* 4.0 for SIMD and Affinity Features with Intel® Xeon® Processors and Intel® Xeon Phi™ Coprocessors

Introduction to OpenMP* 4.0 for SIMD and Affinity Features with Intel® Xeon® Processors and Intel® Xeon Phi™ Coprocessors OpenMP* 4.0 における SIMD およびアフィニティー機能の導入 法務上の注意書きと最適化に関する注意事項 本資料に掲載されている情報は インテル製品の概要説明を目的としたものです 本資料は 明示されているか否かにかかわらず また禁反言によるとよらずにかかわらず いかなる知的財産権のライセンスを許諾するものではありません 製品に付属の売買契約書 Intel's Terms and Conditions

More information

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数

関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数 関数 C 言語は関数の言語 関数とは 関数の定義 : f(x) = x * x ; 使うときは : y = f(x) 戻り値 引数 関数の定義 戻り値の型 関数名 引数の型 引数の名前 int funcname ( int a, char b) { int c ; c = a * b ; return c ; 引数の型 引数の名前 戻り値 戻り値の型は int 変数 c の型も int return

More information

OpenACC入門

OpenACC入門 第 87 回 OpenMP/OpenACC による マルチコア メニィコア並列プログラミング 入門 星野哲也 (hoshino@cc.u-tokyo.ac.jp) 東京大学情報基盤センター 2017/11/1 ( 水 ) スケジュール (11 月 1 日 ) 13:00 14:30 GPUについて GPUのアーキテクチャ GPUプログラミングで気をつけるべきこと OpenACC OpenMPとOpenACCの違い

More information

講習No.9

講習No.9 日本語は通常 2 バイトの文字コード.JIS コード, シフト JIS コード, Unicode (UTF-8) 等の様々な文字コードがある. アスキーコード表 (ASCII code) アスキーコード ( 値 ) 漢字変換無しでキーボードから直接入力できる半角文字 32 48 0 64 @ 80 P 96 ` 112 p 33! 49 1 65 A 81 Q 97 a 113 q 34 " 50

More information

概要 プログラミング論 変数のスコープ, 記憶クラス. メモリ動的確保. 変数のスコープ 重要. おそらく簡単. 記憶クラス 自動変数 (auto) と静的変数 (static). スコープほどではないが重要.

概要 プログラミング論 変数のスコープ, 記憶クラス. メモリ動的確保. 変数のスコープ 重要. おそらく簡単. 記憶クラス 自動変数 (auto) と静的変数 (static). スコープほどではないが重要. 概要 プログラミング論 変数のスコープ, 記憶クラス. メモリ動的確保. 変数のスコープ 重要. おそらく簡単. 記憶クラス 自動変数 (auto) と静的変数 (static). スコープほどではないが重要. http://www.ns.kogakuin.ac.jp/~ct13140/progc/ C-2 ブロック 変数のスコープ C 言語では, から をブロックという. for( ) if( )

More information

! 行行 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

! 行行 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 ! OpenCL [Open Computing Language] 言 [OpenCL C 言 ] CPU, GPU, Cell/B.E.,DSP 言 行行 [OpenCL Runtime] OpenCL C 言 API Khronos OpenCL Working Group AMD Broadcom Blizzard Apple ARM Codeplay Electronic Arts Freescale

More information

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード]

Microsoft PowerPoint - C言語の復習(配布用).ppt [互換モード] if 文 (a と b の大きい方を表示 ) C 言語 Ⅰ の復習 条件判定 (if, 条件式 ) ループ (for[ 二重まで ], while, do) 配列 ( 次元 次元 ) トレース int a, b; printf( 整数 a: ); scanf( %d, &a); printf( 整数 b: ); scanf( %d, &b); //つのif 文で表現する場合間違えやすい どっちに =

More information

PGIコンパイラ導入手順

PGIコンパイラ導入手順 1 注意この資料は PGI compiler 18.10 が最新であるときに作成した資料を元にしています PGI compiler 19.4 がリリースされましたが インストール手順や利用手順は 18.10 と変わりません 資料中の 1810 を 194 に 18.10 を 19.4 に読み替えてください 2019 年 6 月版 2 大きく分けて以下の 3 つの方法が利用可能 1. 手元のウェブブラウザでダウンロードして

More information

program7app.ppt

program7app.ppt プログラム理論と言語第 7 回 ポインタと配列, 高階関数, まとめ 有村博紀 吉岡真治 公開スライド PDF( 情報知識ネットワーク研 HP/ 授業 ) http://www-ikn.ist.hokudai.ac.jp/~arim/pub/proriron/ 本スライドは,2015 北海道大学吉岡真治 プログラム理論と言語, に基づいて, 現著者の承諾のもとに, 改訂者 ( 有村 ) が加筆修正しています.

More information

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用

RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用 RX ファミリ用 C/C++ コンパイラ V.1.00 Release 02 ご使用上のお願い RX ファミリ用 C/C++ コンパイラの使用上の注意事項 4 件を連絡します #pragma option 使用時の 1 または 2 バイトの整数型の関数戻り値に関する注意事項 (RXC#012) 共用体型のローカル変数を文字列操作関数で操作する場合の注意事項 (RXC#013) 配列型構造体または共用体の配列型メンバから読み出した値を動的初期化に用いる場合の注意事項

More information

アクセラレータのデモと プログラミング手法

アクセラレータのデモと プログラミング手法 アクセラレータのデモと プログラミング手法 会津大学中里直人 アクセラレータボードを使った高速化スクール 2009/12/07 アクセラレータとは (1) ホスト計算機を補佐して特定の計算を高速化する計算機デバイス ホスト (CPU) で動作するプログラムを補佐 アクセラレータの例 Cell/PowerXCell8iブレード ボード : 計算 GPU ボード (NVIDIA, AMD, S3) :

More information

04-process_thread_2.ppt

04-process_thread_2.ppt オペレーティングシステム ~ 保護とシステムコール ~ 山田浩史 hiroshiy @ cc.tuat.ac.jp 2015/05/08 復習 : OS の目的 ( 今回の話題 ) 裸のコンピュータを抽象化 (abstraction) し より使いやすく安全なコンピュータとして見せること OS はハードウェアを制御し アプリケーションの効率的な動作や容易な開発を支援する OS がないと 1 つしかプログラムが動作しない

More information

GPU CUDA CUDA 2010/06/28 1

GPU CUDA CUDA 2010/06/28 1 GPU CUDA CUDA 2010/06/28 1 GPU NVIDIA Mark Harris, Optimizing Parallel Reduction in CUDA http://developer.download.nvidia.com/ compute/cuda/1_1/website/data- Parallel_Algorithms.html#reduction CUDA SDK

More information

Microsoft PowerPoint - 阪大CMSI pptx

Microsoft PowerPoint - 阪大CMSI pptx 内容に関する質問は katagiri@cc.u-tokyo.ac.jp まで 第 3 回 OpenMP の基礎 東京大学情報基盤センター 片桐孝洋 1 講義日程と内容について (1 学期 : 木曜 3 限 ) 第 1 回 : プログラム高速化の基礎 2013 年 4 月 11 日 イントロダクション ループアンローリング キャッシュブロック化 数値計算ライブラリの利用 その他第 2 回 :MPIの基礎

More information

Intel® Compilers Professional Editions

Intel® Compilers Professional Editions 2007 6 10.0 * 10.0 6 5 Software &Solutions group 10.0 (SV) C++ Fortran OpenMP* OpenMP API / : 200 C/C++ Fortran : OpenMP : : : $ cat -n main.cpp 1 #include 2 int foo(const char *); 3 int main()

More information

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション OpenMP 並列解説 1 人が共同作業を行うわけ 田植えの例 重いものを持ち上げる 田おこし 代かき 苗の準備 植付 共同作業する理由 1. 短時間で作業を行うため 2. 一人ではできない作業を行うため 3. 得意分野が異なる人が協力し合うため ポイント 1. 全員が最大限働く 2. タイミングよく 3. 作業順序に注意 4. オーバーヘッドをなくす 2 倍率 効率 並列化率と並列加速率 並列化効率の関係

More information

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科 ポインタ変数の扱い方 1 ポインタ変数の宣言 int *p; double *q; 2 ポインタ変数へのアドレスの代入 int *p; と宣言した時,p がポインタ変数 int x; と普通に宣言した変数に対して, p = &x; は x のアドレスのポインタ変数 p への代入 ポインタ変数の扱い方 3 間接参照 (

More information

memo

memo 計数工学プログラミング演習 ( 第 3 回 ) 2016/04/26 DEPARTMENT OF MATHEMATICAL INFORMATICS 1 内容 ポインタ malloc 構造体 2 ポインタ あるメモリ領域 ( アドレス ) を代入できる変数 型は一致している必要がある 定義時には値は不定 ( 何も指していない ) 実際にはどこかのメモリを指しているので, #include

More information

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留

数はファイル内のどの関数からでも参照できるので便利ではありますが 変数の衝突が起こったり ファイル内のどこで値が書き換えられたかわかりづらくなったりなどの欠点があります 複数の関数で変数を共有する時は出来るだけ引数を使うようにし グローバル変数は プログラムの全体の状態を表すものなど最低限のものに留 第 10 章分割コンパイル 1 ソースを分割する今まで出てきたソースは全て一つのソースファイルにソースを記述してきました しかし ソースが長くなっていくと全てを一つのファイルに書くと読みづらくなります そこで ソースを複数のファイルに分割してコンパイルを行う分割コンパイルをします 今章は章名にもなっている 分割コンパイルの方法についてやります 分割コンパイルする時は大抵 関連性のある機能ごとにファイルにまとめます

More information

I I / 47

I I / 47 1 2013.07.18 1 I 2013 3 I 2013.07.18 1 / 47 A Flat MPI B 1 2 C: 2 I 2013.07.18 2 / 47 I 2013.07.18 3 / 47 #PJM -L "rscgrp=small" π-computer small: 12 large: 84 school: 24 84 16 = 1344 small school small

More information

gengo1-11

gengo1-11 関数の再帰定義 自然数 n の階乗 n! を計算する関数を定義してみる 引数は整数 返却値も整数 n! = 1*2*3*... * (n 1)*n である ただし 0! = 1 とする int factorial(int n) int i, tmp=1; if( n>0 ) for(i=1; i

More information

Microsoft PowerPoint - compsys2-06.ppt

Microsoft PowerPoint - compsys2-06.ppt 情報基盤センター天野浩文 前回のおさらい (1) 並列処理のやり方 何と何を並列に行うのか コントロール並列プログラミング 同時に実行できる多数の処理を, 多数のノードに分配して同時に処理させる しかし, 同時に実行できる多数の処理 を見つけるのは難しい データ並列プログラミング 大量のデータを多数の演算ノードに分配して, それらに同じ演算を同時に適用する コントロール並列よりも, 多数の演算ノードを利用しやすい

More information

目次 1 はじめに 本文書の概要 WINDOWS 上での PVF ソフトウェアの実装 PVF コンパイラの利用方法 PVF コンパイラのコマンド オプションについて PVF コンパイラの起動 (Microsoft

目次 1 はじめに 本文書の概要 WINDOWS 上での PVF ソフトウェアの実装 PVF コンパイラの利用方法 PVF コンパイラのコマンド オプションについて PVF コンパイラの起動 (Microsoft PGI (Accelerator) Visual Fortran 2011 For Microsoft Visual Studio Windows 版 (Release 2011) - 入門ガイド - PGI インストール関係の日本語ドキュメントは 以下の URL に全てアーカイブしてあります オンラインでご覧になりたい場合は 以下の URL にアクセスしてください http://www.softek.co.jp/spg/pgi/inst_document.html

More information

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf("hello, n"); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a "hello" printf("hello") 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は

C 言語の式と文 C 言語の文 ( 関数の呼び出し ) printf(hello, n); 式 a a+4 a++ a = 7 関数名関数の引数セミコロン 3 < a hello printf(hello) 関数の引数は () で囲み, 中に式を書く. 文 ( 式文 ) は C 言語復習 C 言語の基礎 来週もこの資料を持参してください C 言語, ソースファイルの作成, コンパイル, 実行 1 C 言語 C 言語プログラミングの手順 とは, 計算機を動かす手順を記述したもの. 計算機に命令を与えて動かすには を作成する ことになる. C 言語はプログラミング言語の 1 個 手続き型言語に分類される. C/C++ は非常に多くの場面で使われる言語 C++ は C 言語をオブジェクト指向に拡張したもの

More information

Microsoft PowerPoint - GDEP-GPG_softek_May24-1.pptx

Microsoft PowerPoint - GDEP-GPG_softek_May24-1.pptx G-DEP 第 3 回セミナー ツールで始める GPGPU なぜ ディレクティブベースのプログラミングが有望なのか? 失敗しない並列プログラミングの始め 2012 年 5 月 加藤努株式会社ソフテック なぜ GPU プログラミング? GPU computing 時代の本流に! 今 何が起きているのか? HPC アーキテクチャはどこへ向かうのか? 確実に移行中 Why? CPU + GPU ハイブリッド型へ

More information

2012年度HPCサマーセミナー_多田野.pptx

2012年度HPCサマーセミナー_多田野.pptx ! CCS HPC! I " tadano@cs.tsukuba.ac.jp" " 1 " " " " " " " 2 3 " " Ax = b" " " 4 Ax = b" A = a 11 a 12... a 1n a 21 a 22... a 2n...... a n1 a n2... a nn, x = x 1 x 2. x n, b = b 1 b 2. b n " " 5 Gauss LU

More information