CUDA基礎1

Size: px
Start display at page:

Download "CUDA基礎1"

Transcription

1 CUDA 基礎 1 東京工業大学 学術国際情報センター 黄遠雄 2016/6/27 第 20 回 GPU コンピューティング講習会 1

2 ヘテロジニアス コンピューティング ヘテロジニアス コンピューティング (CPU + GPU) は広く使われている Financial Analysis Scientific Simulation Engineering Simulation Data Intensive Analytics Medical Imaging Digital Audio Processing Digital Video Processing Computer Vision Biomedical Informatics Electronic Design Automation Statistical Modeling Numerical Methods Ray Tracing Rendering Interactive Physics 2016/6/27 第 20 回 GPU コンピューティング講習会 2

3 GPU を用いてアプリケーションを高速化する 3 つの方法 Applications Libraries Compiler Directives Programming Languages Easy to use Most Performance Easy to use Portable code Most Performance Most Flexibility 2016/6/27 第 20 回 GPU コンピューティング講習会 3

4 GPU Accelerated Libraries Linear Algebra FFT, BLAS, SPARSE, Matrix NVIDIA cufft, cublas, cusparse Numerical & Math RAND, Statistics NVIDIA Math Lib NVIDIA curand Data Struct. & AI Sort, Scan, Zero Sum GPU AI Board Games GPU AI Path Finding Visual Processing Image & Video NVIDIA NPP NVIDIA Video Encode 2016/6/27 第 20 回 GPU コンピューティング講習会 4

5 Compiler directives:openacc Compiler directives for C, C++, and FORTRAN #pragma acc parallel loop copyin(input1[0:inputlength],input2[0:inputlength]), copyout(output[0:inputlength]) for(i = 0; i < inputlength; ++i) { } output[i] = input1[i] + input2[i]; 2016/6/27 第 20 回 GPU コンピューティング講習会 5

6 GPU Programming Languages Numerical analytics MATLAB, Mathematica, LabVIEW Fortran CUDA Fortran C CUDA C C++ CUDA C++ Python F# PyCUDA, Copperhead, Numba, NumbaPro Alea.cuBase 2016/6/27 第 20 回 GPU コンピューティング講習会 6

7 CUDA - C Applications Libraries Compiler Directives Programming Languages Easy to use Most Performance Easy to use Portable code Most Performance Most Flexibility 2016/6/27 第 20 回 GPU コンピューティング講習会 7

8 CPU と GPU の違い CPU DRAM Control Cache ALU ALU ALU ALU Powerful ALU Reduced operation latency Large caches Convert long latency memory accesses to short latency cache accesses Sophisticated control Branch prediction for reduced branch latency Data forwarding for reduced data latency GPU DRAM Small caches To boost memory throughput Simple control No branch prediction No data forwarding Energy efficient ALUs Many, long latency but heavily pipelined for high throughput Require massive number of threads to tolerate latencies Threading logic Thread state 2016/6/27 第 20 回 GPU コンピューティング講習会 8

9 DeviceQuery >./devicequery >sh rundevicequery.sh./devicequery Starting... CUDA Device Query (Runtime API) version (CUDART static linking) Detected 3 CUDA Capable device(s) Device 0: "Tesla K20Xm" CUDA Driver Version / Runtime Version 7.5 / 7.5 CUDA Capability Major/Minor version number: 3.5 Total amount of global memory: 5760 MBytes ( bytes) (14) Multiprocessors, (192) CUDA Cores/MP: 2688 CUDA Cores GPU Max Clock rate: 732 MHz (0.73 GHz) Memory Clock rate: 2600 Mhz Memory Bus Width: 384-bit L2 Cache Size: bytes Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096) 2016/6/27 第 20 回 GPU コンピューティング講習会 9

10 並列処理 並列計算は タスク並列とデータ並列 に分けられる データ並列の一例 : ベクトル加法 vector A A[0] A[1] A[2] A[N-1] vector B B[0] B[1] B[2] B[N-1] vector C C[0] C[1] C[2] C[N-1] 2016/6/27 第 20 回 GPU コンピューティング講習会 10

11 ベクトル加法 (C Code) // ベクトル加法関数 C = A + B void vecadd(float *A_h, float *B_h, float *C_h, int n) { int i; for (i = 0; i<n; i++) C_h[i] = A_h[i] + B_h[i]; } int main() { // A B C メモリ確保 // A B データ入力 / 初期化 (N 個 ) vecadd(a_h, B_h, C_h, N); } 2016/6/27 第 20 回 GPU コンピューティング講習会 11

12 GPU を用いたベクトル加法 GPU は単独では動かない host(cpu) で実行させ その中から CUDA API と GPU kernel 関数を call void vecadd(float *A_h, float *B_h, float *C_h, ( n int { int size = n* sizeof(float); float *A_d, *B_d, *C_d; // Part 1 // A B C GPU 上のメモリ確保 // A B のデータを host memory から device // memory にコピー Part 1 Part 2 // Part 2 // Kernel code を実行 ( ベクトルの加法 ) Host Memory CPU Device Memory GPU Part 3 } // Part 3 // 計算結果を回収 C のデータを device // memory から host memory にコピー // GPU 上のメモリを解放 2016/6/27 第 20 回 GPU コンピューティング講習会 12

13 CUDA プログラム実行の概念図 GPU device memory host (CPU) code メモリ ポインタ float *f_d, *f_h; CPU CUDA API cudamalloc(&f_d); host memory device code global func(f_d) { } cudamemcpy(f_h, f_d);.... kernel function func<<< N/256, 256>>>(f_d) 2016/6/27 第 20 回 GPU コンピューティング講習会 13

14 CUDA プログラムの実行モデル ヘテロジニアス (CPU + GPU) アプリケーション 逐次処理は Host C Code 並列計算は Device SPMD kernel Code ( host ) Serial Code ( device ) Parallel Kernel KernelA<<< Dg, Db >>>(args);... ( host ) Serial Code ( device ) Parallel Kernel KernelB<<< Dg, Db >>>(args); /6/27 第 20 回 GPU コンピューティング講習会 14

15 CUDA ソースコードのコンパイル CUDA のソースファイルは拡張子.cu を付ける CUDA Toolkit の nvcc でコンパイルする nvcc は CPU で実行するコードと GPU で実行する GPU kernel 関数のコード CUDA の API の部分を分離 CPU で実行するコードは gcc, g++ などにコンパイルを任せる GPU kernel 関数の部分を GPU 用にコンパイルする GPU 用の PTX コードも生成する Library をリンクして 実行ファイルを生成する CUDA core library (cuda) -lcuda CUDA runtime library (cudart) -lcudart Integrated C programs with CUDA extensions NVCC Compiler Host Code Device Code (PTX) Host C Compiler/ Linker Device Just-in-Time Compiler Heterogeneous Computing Platform with CPUs, GPUs, etc. 2016/6/27 第 20 回 GPU コンピューティング講習会 15

16 CUDA Compiler: nvcc 重要なコンパイル オプション -arch sm_52 --maxrregcount <N> Compute Capability に応じたコンパイルを行う DeviceQuery で確認し それ以下を指定す 可能なオプション :sm_20(default), sm_21, sm_30, sm_32, sm_35, sm_50 and sm_52 1 つの kernel 関数当たりに使用するレジスタ数を <N> に制限する このことにより 指定した並列数で thread が実行可能となるが 溢れた部分は local メモリ上に置かれ 実行速度は低下する -use_fast_math 高速な数学関数を利用する -G device コードに対して デバッグを可能にする --ptxas-options=-v レジスタやメモリの使用状況を表示する 2016/6/27 第 20 回 GPU コンピューティング講習会 16

17 CUDA Memory 確保 (1/3) メモリ ポインタ - は device (GPU) memory にも host (CPU) memory にも使える 例 ) 単精度実数 : float *f_d, *f_h; device 上にメモリを確保する runtime API cudamalloc(void **devptr, size_t count); devptr: count: デバイスメモリアドレスへのポインタ 確保したメモリのアドレスが書き込まれる 領域のサイズ 例 ) cudamalloc((void **)&f_d, sizeof(float)*n); f_d[n] の配列が GPU のメモリ上に確保される 2016/6/27 第 20 回 GPU コンピューティング講習会 17

18 CUDA Memory 確保 (2/3) host 側にメモリを確保する ( 通常 ) f_h = (float *) malloc(sizeof(float)*n); f_h = new float[n]; host 側に pinned メモリを確保する (C++) cudamallochost(void **ptr, size_t count); ptr: count: ホストメモリアドレスへのポインタ Page lock (pinned) された確保したメモリのアドレスが書き込まれる 領域のサイズ 例 ) cudamallochost((void **)&f_h, sizeof(float)*n); f_h[n] の配列が Host メモリ上に page lock (pinned) で確保される 通常の pageable メモリとして確保された場合より 転送速度が速い また 非同期通信の場合も page lock メモリに限定される 2016/6/27 第 20 回 GPU コンピューティング講習会 18

19 CUDA Memory 確保 (3/3) host 側にメモリを確保する ( 通常 ) f_h = (float *) malloc(sizeof(float)*n); f_h = new float[n]; (C++) host 側に確保したメモリを page-lock(pinned) にする cudahostregister(void *ptr, size_t count, unsigned int flags); ptr: count: flags: ホストメモリアドレスへのポインタ 領域のサイズ タイプを指定する定数 cudahostregisterdefault cudahostregisterportable cudahostregistermapped cudahostregisteriomemory 解除するには cudahostunregister(void *ptr); 2016/6/27 第 20 回 GPU コンピューティング講習会 19

20 CUDA データ転送 float *f_d, *f_h; cudamemcpy(void *dst, const void *src, size_t count, enum cudamemcpykind kind) dst: src: count: kind: 転送先メモリ アドレス転送元メモリ アドレス領域のサイズ転送タイプを指定する定数 cudamemcpyhosttodevice cudamemcpydevicetohost cudamemcpydevicetodevice cudamemcpydefault (Fermi GPU, CUDA 4.0 以降 ) 例 ) cudamemcpy (f_d, f_h, sizeof(float)*n, cudamemcpyhosttodevice); host 上の f_h[n] の配列のデータを device 上の f_d[n] にコピーする 2016/6/27 第 20 回 GPU コンピューティング講習会 20

21 CUDA 非同期データ転送 float *f_d, *f_h; cudamemcpyasync(void *dst, const void *src, size_t count, enum cudamemcpykind kind, cudastream_t stream) dst: src: count: kind: 転送先メモリ アドレス転送元メモリ アドレス領域のサイズ 転送タイプを指定する定数 cudamemcpyhosttohost cudamemcpyhosttodevice cudamemcpydevicetohost cudamemcpydevicetodevice 例 ) cudamemcpyasync (f_d, f_h, sizeof(float)*n, cudamemcpyhosttodevice, stream); Host 上の f_h[n] の配列のデータを Device 上の f_d[n] に Host や他の stream( 後述 ) に対して非同期でコピーする 2016/6/27 第 20 回 GPU コンピューティング講習会 21

22 GPU kernel-function call host code の中で次のように call する kernel_function<<< Dg, Db, Ns, S>>>(a, b, c,....); Dg: dim3 タイプの grid のサイズ指定 Db: dim3 タイプの block のサイズ指定 Ns: 実行時に指定する shared メモリのサイズ省略可 : 省略した場合は 0 が設定 S: 非同期実行の stream 番号省略可 : 省略した場合は 0 が設定され 同じ 0 に設定された GPU の kernel が同期実行となる Dg, Db で指定される数の thread が実行される kernel function の実行は CPU に対して絶えず非同期 2016/6/27 第 20 回 GPU コンピューティング講習会 22

23 dim3 宣言 kernel_function<<< Dg, Db, Ns, S>>>(a, b, c,....); の Dg, Db を dim3 で指定する dim3 a; dim3 a(n, m); dim3 a(n, m, k); 等価 等価 等価 dim3 a(1,1,1); dim3 a(n, m, 1); a.x = n; a.y = m; a.z = k; dim3 a(n0, m0, k0); は宣言と共に値の代入であり 随時 a.x = n1; a.y = m1; a.z = k1; と変更可能である 2016/6/27 第 20 回 GPU コンピューティング講習会 23

24 Thread の管理 CUDA Kernel は threads のまとまり (Grid) 単位で実行される Grid の中の全ての threads は同じ Kernel を実行する (Single Program Multiple Data) Thread は各自に ID の持っている i = blockidx.x * blockdim.x + threadidx.x; C[i] = A[i] + B[i]; 2016/6/27 第 20 回 GPU コンピューティング講習会 24

25 Thread の管理 (Block) Thread Block 0 Thread Block 1 Thread Block N i = blockidx.x * blockdim.x + threadidx.x; C[i] = A[i] + B[i]; i = blockidx.x * blockdim.x + threadidx.x; C[i] = A[i] + B[i]; i = blockidx.x * blockdim.x + threadidx.x; C[i] = A[i] + B[i]; いくつかの threads が一つの Block としてまとめられ 全て threads が複数の Block に分割されます 同一 Block 内の threads は shared memory を共有し atomic operations と barrier synchronization など同期が必要な演算を実行できます 異なる Block 間の threads 同期や shared memory の共有はできません 2016/6/27 第 20 回 GPU コンピューティング講習会 25

26 blockidx と threadidx kernel 関数 <<< 第 1 引数, 第 2 引数 >>> で指定 第 1 引数 :blockidx: 1D, 2D, or 3D (CUDA 4.0 以降 ) の範囲を指定 第 2 引数 :threadidx: 1D, 2D, or 3D の範囲を指定 多次元データを計算する場合にアドレス計算が簡単になる Image processing Solving PDEs on volumes device Grid Block (0, 0) Block (1, 0) Block (0, 1) Block (1, 1) Block (1,1) (1,0,0) (1,0,1) (1,0,2) (1,0,3) Thread (0,0,0) Thread (0,1,0) Thread (0,0,1) Thread (0,1,1) Thread (0,0,2) Thread (0,1,2) Thread (0,0,3) Thread Thread (0,0,0) (0,1,3) 2016/6/27 第 20 回 GPU コンピューティング講習会 26

27 実習 : 最初の CUDA プログラム #include <stdio.h> global void helloworld_kernel( void ) { printf("hello from GPU [thread %d of block %d] n", threadidx.x, blockidx.x); printf("good bye from GPU [thread %d of block %d] n", threadidx.x, blockidx.x); } int main(int argc, char *argv[]) { printf("hello from CPU n"); helloworld_kernel<<< 256, 1 >>>(); cudadevicesynchronize(); printf("good bye from CPU n"); } return 0; >nvcc HelloWorld.cu >./a.out Sample Code: simplecuda/helloworld 2016/6/27 第 20 回 GPU コンピューティング講習会 27

28 Built-in 変数 Device code の中で宣言せずに引用でき 書き換え不可 griddim blockidx blockdim threadidx griddim.x, griddim.y, griddim.z grid の各方向のサイズ blockidx.x, blockidx.y, blockidx.z block の各方向の index blockdim.x, blockdim.y, blockdim.z block の各方向のサイズ threadidx.x, threadidx.y, threadidx.z thread の各方向の index 2016/6/27 第 20 回 GPU コンピューティング講習会 28

29 C 言語の拡張 関数型の Qualifier () DeviceFunc device float () KernelFunc global void () HostFunc host float global device device 上でのみ実行される host 側からのみ call される return 値は void 限定 device 上でのみ実行される device からのみ call される Executed on the: device device host Only callable from the: device host host host host と device host 上でのみ実行される host 側からのみ call される ( 普通の CPU 上のプログラムの関数で 特に宣言する必要はない ) 両方同時に指定する事が可能 2016/6/27 第 20 回 GPU コンピューティング講習会 29

30 host と device host devcie void Cal_func(..) { C = A + B; } CPU for(..) { Cal_func( ); } GPU global kernel(.) { Cal_func( ); } 2016/6/27 第 20 回 GPU コンピューティング講習会 30

31 ベクトル加法 (Host Code) ( n void vecadd(float *A_h, float *B_h, float *C_h, int { int size = n* sizeof(float); float *A_d, *B_d, *C_d; // Part 1: A B C GPU 上のメモリ確保 cudamalloc( (void**) &A_d, size ); cudamalloc( (void**) &B_d, size ); cudamalloc( (void**) &C_d, size ); // Part 1: A B のデータを host memory から device memory にコピー cudamemcpy( A_d, A_h, size, cudamemcpyhosttodevice ); cudamemcpy( B_d, B_h, size, cudamemcpyhosttodevice ); // Part 2: Kernel code を実行 ( ベクトルの加法 ) vectoradd_kernel<<< n / BLOCK_SIZE, BLOCK_SIZE >>>( C_d, A_d, B_d ); } // Part 3: 計算結果を回収 C のデータを device memory から host memory にコピー cudamemcpy( c_h, c_d, size, cudamemcpydevicetohost ) // Part 3: GPU 上のメモリを解放 cudafree( A_d ); cudafree( B_d ); cudafree( C_d ); 2016/6/27 第 20 回 GPU コンピューティング講習会 31

32 ベクトル加法 (Device Kernel) vectoradd_kernel<<< n / BLOCK_SIZE, BLOCK_SIZE >>>( C_d, A_d, B_d ); blockdim の値と threadidx の値の範囲を決めます griddim の値と blockidx の値の範囲を決めます global void vectoradd_kernel ( float *C, // array pointer of the global memory float *A, // array pointer of the global memory float *B // array pointer of the global memory ) { unsigned int index = blockidx.x * blockdim.x + threadidx.x; } C[index] = A[index] + B[index]; Sample Code: simplecuda/simplevectoradd 2016/6/27 第 20 回 GPU コンピューティング講習会 32

33 2 次元データ アクセス NX*NY の 1 次元配列データであるが 2 次元的にアクセス dim3 grid(nx/16, NY/16), block(16, 16); iy blockdim.x = 16 grid サイズの最大値の制限から開放 NY ix ix = blockidx.x * blockdim.x + threadidx.x; iy = blockidx.x * blockdim.x + threadidx.x; index = iy * NX + ix; 2016/6/27 第 20 回 GPU コンピューティング講習会 NX

34 Warp スケジューリング Block 1 Warps Block 2 Warps Block 3 Warps t0 t1 t2 t31 t0 t1 t2 t31 t0 t1 t2 t31 block 内の thread は Streaming Multiprocessor によって Warp=32 thread 毎に並列実行される Warp: block 内の 32 thread のかたまり ( 例 :block 内に 256 thread = Warp 8 個 ) 1 Warp の thread の数は将来変わる可能性がある プログラム上には現れない 考慮しなくても正しいプログラムを書くことは可能 ただし 実行性能を引き出すためには考慮する必要がある 2016/6/27 第 20 回 GPU コンピューティング講習会 34

35 Warp 多次元分配 多次元 Thread blocks の場合 Warp は行優先で割り当てられる 最初 X それから Y 最後は Z 2016/6/27 第 20 回 GPU コンピューティング講習会 35

36 Compute Capability Compute Capability Technical Specifications 2.x Warp size 32 Maximum number of resident blocks per multiprocessor Maximum number of resident warps per multiprocessor Maximum number of resident threads per multiprocessor (= 64 x 32) Number of 32-bit registers per multiprocessor 32 K 64 K 128 K 64 K Maximum number of 32-bit registers per thread block 32 K 64 K 32 K Maximum number of 32-bit registers per thread Maximum amount of shared memory per multiprocessor Maximum amount of shared memory per thread block 48 KB 112 KB 64 KB 96 KB 64 KB 48 KB Number of shared memory banks 32 Amount of local memory per thread Constant memory size 512 KB 64 KB 2016/6/27 第 20 回 GPU コンピューティング講習会 36

37 同時実行可能な thread block 数 thread の使用する Register 数 : Nr Shared Memory 量 : Ns [byte] block 当たりの thread 数 : Db Compute Capability 5.2 (Maxwell 世代 GPU) の場合 : Warp per SM = Db/32 Active block = Min(32, 64/(Db/32), 98304/Ns, 65536/(Db*Nr) ) (block 当たりの最大 64 Warp) (Shared Memory の制限 ) (Register の制限 ) 2016/6/27 第 20 回 GPU コンピューティング講習会 37

38 Warp 内の thread 実行仕組み Warp 内の 32 thread は同一命令を実行 SIMD (Single Instruction Multiple Data) Warp 内の thread indices はインクリメント Warp 0 は thread 0 からスタート Warps 実行される順番は一定ではない 例えば Warp 8 が Warp 7 より先に実行される場合がある Threads の間の依存関係 ( 計算順序など ) は必ず syncthreads() を使う 2016/6/27 第 20 回 GPU コンピューティング講習会 38

39 Thread の中の条件分岐 プログラム上では任意の分岐を記述可能 ハードウェア上での分岐命令の処理 Warp 内全 thread が同一パスに分岐する場合は全 thread が分岐先 ( のみ ) を実行する Warp 内の thread が異なるパスに分岐する場合は全スレッドが両方の命令を実行 (diverged branch) し 最後に適合する方だけを採用する 性能低下の原因の一つ 2016/6/27 第 20 回 GPU コンピューティング講習会 39

40 Control Divergence Warp 内に条件分岐やループの違いがある場合 Control Divergence が発生する Control Divergence が発生しないようにするには Warp 内で 全ての if-then-else で同じ条件分岐とする 全てのループの反復回数を同じとする Control Divergence が発生する場合の例 : If ( threadidx.x > 2 ) { do_something(); } else{ do_other_thing(); } Thread ID によって違い操作 分岐単位 < warp size Control Divergence が発生しない場合の例 : If ( blockidx.x > 2 ) ) { do_something(); } else{ do_other_thing(); } block ID によって違い操作 分岐単位は block = warp size の倍数 2016/6/27 第 20 回 GPU コンピューティング講習会 40

41 例 : Vector Addition Kernel // Compute vector sum C = A + B Device Code // Each thread performs one pair-wise addition global void vectoradd_kernel(float* C, float* A, float* B, int n) { int i = threadidx.x + blockdim.x * blockidx.x; if(i<n) C[i] = A[i] + B[i]; } 2016/6/27 第 20 回 GPU コンピューティング講習会 41

42 Vector size (n=1,000) で計算すると BLOCK_SIZE = 256 に設定 8 warps per block Block 0, 1, 2 の全ての Threads は範囲内 i = 0 ~ 767 全て i < 1000 Block 3 の多くの Warps は Control Divergence が発生しない 6 warps は (i < 1000) の範囲内 Block 3 の中の一つの Warp は Control Divergence が発生する Thread ID 992 ~ 999 は範囲内 Thread ID 1000 ~ 1023 は範囲外 この例では Control Divergence の影響は少ない 1/32 warp は Control Divergence が発生する 性能に影響は 3% 以下 2016/6/27 第 20 回 GPU コンピューティング講習会 42

43 Memory Coalescing Coalesced Loads T 0 T 1 T 2 T 3 Coalesced Loads T 0 T 1 T 2 T Burst section Burst section Burst section Burst section 一つの warp の中の全ての threads が一斉にデータをロード 全てのデータアクセスが同じ burst section の場合 一回の DRAM request のみで終了する (fully coalesced) 2016/6/27 第 20 回 GPU コンピューティング講習会 43

44 Un-coalesced Accesses Un-coalesced Loads T 0 T 1 T 2 T 3 Un-coalesced Loads T 0 T 1 T 2 T Burst section Burst section Burst section Burst section データアクセスが別々の burst section になる場合 : Coalescing fails 何回かの DRAM requests が必要 アクセスは not fully coalesced 一部の転送されたデータは使われない 2016/6/27 第 20 回 GPU コンピューティング講習会 44

45 HEIGHT 例 : 行列の乗法のアクセスパターン M 0,0 M 0,1 M 0,2 M 0,3 M 1,0 M 1,1 M 1,2 M 1,3 M M 2,0 M 2,1 M 2,2 M 2,3 M 3,0 M 3,1 M 3,2 M 3,3 M 0,0 M 0,1 M 0,2 M 0,3 M 1,0 M 1,1 M 1,2 M 1,3 M 2,0 M 2,1 M 2,2 M 2,3 M 3,0 M 3,1 M 3,2 M 3,3 linearized order in increasing address A B T1 T2 (Thread) T1 (Thread) T2 i はループの変数 A は m n, B は n k のマトリックス Col = blockidx.x*blockdim.x + threadidx.x WIDTH A[Row*n+i] B[i*k+Col] 2016/6/27 第 20 回 GPU コンピューティング講習会 45

46 A Accesses are Not Coalesced Load iteration 1 T 0 T 1 T 2 T 3 Load iteration 0 T 0 T 1 T 2 T 3 A 0,0 A 0,1 A 0,2 A 0,3 A 1,1 A 1,0 A 1,2 A 1,3 A 2,0 A 2,1 A 2,2 A 2,3 A 3,0 A 3,1 A 3,2 A 3,3 Access direction in kernel code A 0,0 A 0,1 A 0,2 A 0,3 A 1,0 A 1,1 A 1,2 A 1,3 A 2,0 A 2,1 A 2,2 A 2,3 A 3,0 A 3,1 A 3,2 A 3,3 2016/6/27 第 20 回 GPU コンピューティング講習会 46

47 B accesses are coalesced N Load iteration 0 T 0 T 1 T 2 T 3 Load iteration 1 T 0 T 1 T 2 T 3 B 0,0 B 0,1 B 0,2 B 0,3 B 1,1 B 1,0 B 1,2 B 1,3 B 2,0 B 2,1 B 2,2 B 2,3 B 3,0 B 3,1 B 3,2 B 3,3 Access direction in kernel code B 0,0 B 0,1 B 0,2 B 0,3 B 1,0 B 1,1 B 1,2 B 1,3 B 2,0 B 2,1 B 2,2 B 2,3 B 3,0 B 3,1 B 3,2 B 3,3 2016/6/27 第 20 回 GPU コンピューティング講習会 47

48 所要時間計測 経過時間を計測することで GPU Computing のパフォーマンスを確認でき ハードウェア実行の様子を想像することができる また チューニングのためには必須 cudaevent_t start, stop; cudaeventcreate(&start); cudaeventcreate(&stop); float elapsedtime; cudaeventrecord(start,0); 計測範囲 kernel<<< grid, block>>>(a_d, b_d); elapsedtime に経過時間 (msec) cudaeventrecord(stop,0); cudaeventsynchronize(stop); cudaeventelapsedtime(&elapsedtime,start,stop); 2016/6/27 第 20 回 GPU コンピューティング講習会 48

49 エラー処理 (API) CUDA の API は全て return 値が cudaerror_t 型の error の status を返すようになっている cudaerror_t err = cudamemcpy( ); if (err!= cudasuccess) { fprintf(stderr, Memcopy failed: %s. n, cudageterrorstring(err)); } もし cudamalloc しないで cudamemcpy(); を実行してしまった場合などは invalid device pointer が返ってくる 2016/6/27 第 20 回 GPU コンピューティング講習会 49

50 エラー処理 ( kernel 関数 ) kernel 関数には return 値はない cudagetlasterror() で直前のエラーを拾い cudageterrorstring() でメッセージを表示させる vec_add<<<,,, >>>(... ); cudaerror_t err = cudagetlasterror(); if (err!= cudasuccess) { fprintf(stderr, kernel launch failed: %s n, cudageterrorstring(err)); exit(-1); } 例えば grid, block のサイズが最大値を超えていると invalid configuration argument が表示される 2016/6/27 第 20 回 GPU コンピューティング講習会 50

51 Device マネージメント API Device の情報を取得する API が準備されている cudagetdevicecount(int *count) システム ( ノード ) 上の CUDA の動作する GPU の個数を返す cudasetdevice(int device_no) それ以降の実行を device_no の GPU に向ける cudagetdevice(int *current_device) 現在指定されている GPU の device 番号を返す cudagetdeviceproperties(int *device, cudadeviceprop *prop) devicequery のような情報を prop のメンバーとして取得 Tips: これらは 同一ノード内に複数 GPU がある場合は必須 2016/6/27 第 20 回 GPU コンピューティング講習会 51

52 Developer Tools - Debuggers NSIGHT CUDA-GDB CUDA MEMCHECK NVIDIA Provided 3 rd Party /6/27 第 20 回 GPU コンピューティング講習会 52

53 Developer Tools - Profilers NSIGHT NVVP NVPROF NVIDIA Provided TAU VampirTrace 3 rd Party /6/27 第 20 回 GPU コンピューティング講習会 53

54 NVIDIA s Visual Profiler (NVVP) Timeline Guided System Analysis 2016/6/27 第 20 回 GPU コンピューティング講習会 54

55 IDE(NSIGHT) CUDA enabled Integrated Development Environment Source code editor: syntax highlighting, code refactoring, etc Build Manger Visual Debugger Visual Profiler Linux/Macintosh Editor = Eclipse Debugger = cuda-gdb with a visual wrapper Profiler = NVVP Windows Integrates directly into Visual Studio Profiler is NSIGHT VSE 2016/6/27 第 20 回 GPU コンピューティング講習会 55

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

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 PowerPoint - suda.pptx

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

More information

Slide 1

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

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

Slide 1

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

More information

untitled

untitled GPGPU NVIDACUDA Learn More about CUDA - NVIDIA http://www.nvidia.co.jp/object/cuda_education_jp.html NVIDIA CUDA programming Guide CUDA http://www.sintef.no/upload/ikt/9011/simoslo/evita/2008/seland.pdf

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

( 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

GPU 画像 動画処理用ハードウェア 低性能なプロセッサがたくさん詰まっている ピーク性能が非常に高い GPUを数値計算に用いるのがGPGPU Graphics Processing Unit General Purpose GPU TSUBAME2.0: GPUスパコン 本演習ではNVIDIA社の

GPU 画像 動画処理用ハードウェア 低性能なプロセッサがたくさん詰まっている ピーク性能が非常に高い GPUを数値計算に用いるのがGPGPU Graphics Processing Unit General Purpose GPU TSUBAME2.0: GPUスパコン 本演習ではNVIDIA社の 演習II (連続系アルゴリズム) 第2回: GPGPU 須田研究室 M1 本谷 徹 motoya@is.s.u-tokyo.ac.jp 2012/10/19 GPU 画像 動画処理用ハードウェア 低性能なプロセッサがたくさん詰まっている ピーク性能が非常に高い GPUを数値計算に用いるのがGPGPU Graphics Processing Unit General Purpose GPU TSUBAME2.0:

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

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

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

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

NUMAの構成

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

More information

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

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

More information

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

1. マシンビジョンにおける GPU の活用 CUDA 画像処理入門 GTC 213 チュートリアル エヌビディアジャパン CUDA エンジニア森野慎也 1. マシンビジョンにおける GPU の活用 1. 医用画像処理における GPU の活用 CT や MRI から画像を受信して三次元画像の構築をするシステム 2 次元スキャンデータから 3 次元 4 次元イメージの高速生成 CUDA 化により画像処理速度を約 2 倍に高速化 1. CUDA で画像処理

More information

1 4 1.1........................................... 4 1.2.................................. 4 1.3................................... 4 2 5 2.1 GPU.....

1 4 1.1........................................... 4 1.2.................................. 4 1.3................................... 4 2 5 2.1 GPU..... CPU GPU N Q07-065 2011 2 17 1 1 4 1.1........................................... 4 1.2.................................. 4 1.3................................... 4 2 5 2.1 GPU...........................................

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

概要 目的 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

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

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

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

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

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

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 GPU 4 2010 8 28 1 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 Register & Shared Memory ( ) CPU CPU(Intel Core i7 965) GPU(Tesla

More information

GPGPUクラスタの性能評価

GPGPUクラスタの性能評価 2008 年度理研 HPC シンポジウム第 3 世代 PC クラスタ GPGPU クラスタの性能評価 2009 年 3 月 12 日 富士通研究所成瀬彰 発表の概要 背景 GPGPU による高速化 CUDA の概要 GPU のメモリアクセス特性調査 姫野 BMT の高速化 GPGPU クラスタによる高速化 GPU Host 間のデータ転送 GPU-to-GPU の通信性能 GPGPU クラスタ上での姫野

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

Intel Memory Protection Extensions(Intel MPX) x86, x CPU skylake 2015 Intel Software Development Emulator 本資料に登場する Intel は Intel Corp. の登録

Intel Memory Protection Extensions(Intel MPX) x86, x CPU skylake 2015 Intel Software Development Emulator 本資料に登場する Intel は Intel Corp. の登録 Monthly Research Intel Memory Protection Extensions http://www.ffri.jp Ver 1.00.01 1 Intel Memory Protection Extensions(Intel MPX) x86, x86-64 2015 2 CPU skylake 2015 Intel Software Development Emulator

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

CPU Levels in the memory hierarchy Level 1 Level 2... Increasing distance from the CPU in access time Level n Size of the memory at each level 1: 2.2

CPU Levels in the memory hierarchy Level 1 Level 2... Increasing distance from the CPU in access time Level n Size of the memory at each level 1: 2.2 FFT 1 Fourier fast Fourier transform FFT FFT FFT 1 FFT FFT 2 Fourier 2.1 Fourier FFT Fourier discrete Fourier transform DFT DFT n 1 y k = j=0 x j ω jk n, 0 k n 1 (1) x j y k ω n = e 2πi/n i = 1 (1) n DFT

More information

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

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

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

memo

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

More information

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

GPU のアーキテクチャとプログラム構造 長岡技術科学大学電気電子情報工学専攻出川智啓 GPU のアーキテクチャとプログラム構造 長岡技術科学大学電気電子情報工学専攻出川智啓 今回の内容 GPU のアーキテクチャ CUDA CUDA によるプログラミング 58 GPU(Graphics Processing Unit) とは 画像処理専用のハードウェア 具体的には画像処理用のチップ チップ単体では販売されていない PCI Ex カードで販売 ( チップ単体と区別せずに GPU と呼ぶことも多い

More information

memo

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

More information

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

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

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

名称 : 日本 GPU コンピューティングパートナーシップ (G-DEP) 所在 : 東京都文京区本郷 7 丁目 3 番 1 号東京大学アントレプレナープラザ, 他工場 URL   アライアンスパートナー コアテクノロジーパートナー NVIDIA JAPAN ソリュ GPUDirect の現状整理 multi-gpu に取組むために G-DEP チーフエンジニア河井博紀 (kawai@gdep.jp) 名称 : 日本 GPU コンピューティングパートナーシップ (G-DEP) 所在 : 東京都文京区本郷 7 丁目 3 番 1 号東京大学アントレプレナープラザ, 他工場 URL http://www.gdep.jp アライアンスパートナー コアテクノロジーパートナー

More information

AquesTalk プログラミングガイド

AquesTalk プログラミングガイド AquesTalk プログラミングガイド ( 株 ) アクエスト 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと サウンドデバイスに出力する 2 種類があります 使用するアプリケーションに応じて選択してください

More information

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

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 23 FPGA CUDA Performance Comparison of FPGA Array with CUDA on Poisson Equation (lijiang@sekine-lab.ei.tuat.ac.jp), (kazuki@sekine-lab.ei.tuat.ac.jp), (takahashi@sekine-lab.ei.tuat.ac.jp), (tamukoh@cc.tuat.ac.jp),

More information

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

Microsoft PowerPoint - GPGPU実践基礎工学(web).pptx GPU のメモリ階層 長岡技術科学大学電気電子情報工学専攻出川智啓 今回の内容 GPU のメモリ階層 グローバルメモリ 共有メモリ モザイク処理への適用 コンスタントメモリ 空間フィルタへの適用 577 GPU の主要部品 基盤 GPU( チップ )+ 冷却部品 画面出力端子 電源入力端子 メモリ 特性の把握が重要 電源入力端子 画面出力端子 メモリ チップ PCI Ex 端子 http://www.geforce.com/whats

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

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 講座準備 講座資料は次の URL から DL 可能 https://goo.gl/jnrfth 1 ポインタ講座 2017/01/06,09 fumi 2 はじめに ポインタはC 言語において理解が難しいとされる そのポインタを理解することを目的とする 講座は1 日で行うので 詳しいことは調べること 3 はじめに みなさん復習はしましたか? 4 & 演算子 & 演算子を使うと 変数のアドレスが得られる

More information

program7app.ppt

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

More information

NUMAの構成

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

More information

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1 7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 10001 番地とすると, そこから int 型のサイズ, つまり 4 バイト分の領域が確保される.1

More information

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

いまからはじめる組み込みGPU実装 いまからはじめる組み込み GPU 実装 ~ コンピュータービジョン ディープラーニング編 ~ MathWorks Japan アプリケーションエンジニアリング部シニアアプリケーションエンジニア大塚慶太郎 2017 The MathWorks, Inc. 1 コンピュータービジョン ディープラーニングによる 様々な可能性 自動運転 ロボティクス 予知保全 ( 製造設備 ) セキュリティ 2 転移学習を使った画像分類

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

AquesTalk Win Manual

AquesTalk Win Manual AquesTalk Win マニュアル 株式会社アクエスト http://www.a-quest.com/ 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと サウンドデバイスに出力する 2

More information

GPGPUイントロダクション

GPGPUイントロダクション 大島聡史 ( 並列計算分科会主査 東京大学情報基盤センター助教 ) GPGPU イントロダクション 1 目的 昨今注目を集めている GPGPU(GPU コンピューティング ) について紹介する GPGPU とは何か? 成り立ち 特徴 用途 ( ソフトウェアや研究例の紹介 ) 使い方 ( ライブラリ 言語 ) CUDA GPGPU における課題 2 GPGPU とは何か? GPGPU General-Purpose

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

untitled

untitled A = QΛQ T A n n Λ Q A = XΛX 1 A n n Λ X GPGPU A 3 T Q T AQ = T (Q: ) T u i = λ i u i T {λ i } {u i } QR MR 3 v i = Q u i A {v i } A n = 9000 Quad Core Xeon 2 LAPACK (4/3) n 3 O(n 2 ) O(n 3 ) A {v i }

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

インテル(R) Visual Fortran Composer XE

インテル(R) Visual Fortran Composer XE Visual Fortran Composer XE 1. 2. 3. 4. 5. Visual Studio 6. Visual Studio 7. 8. Compaq Visual Fortran 9. Visual Studio 10. 2 https://registrationcenter.intel.com/regcenter/ w_fcompxe_all_jp_2013_sp1.1.139.exe

More information

PowerPoint Presentation

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

More information

slide5.pptx

slide5.pptx ソフトウェア工学入門 第 5 回コマンド作成 1 head コマンド作成 1 早速ですが 次のプログラムを head.c という名前で作成してください #include #include static void do_head(file *f, long nlines); int main(int argc, char *argv[]) { if (argc!=

More information

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

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

More information

CudaWaveField

CudaWaveField CudaWaveField 2012 3 22 2 CudaWaveField Rel 1.0.0 Rel 1.0 CudaWaveField ( cwfl) / cwfl cwfl http://www.laser.ee.kansai-u.ac.jp/wavefieldtools Note Acrobat Reader 3 I CudaWaveField 9 1 11 1.1 CudaWaveField......................

More information

スライド 1

スライド 1 GPU クラスタによる格子 QCD 計算 広大理尾崎裕介 石川健一 1.1 Introduction Graphic Processing Units 1 チップに数百個の演算器 多数の演算器による並列計算 ~TFLOPS ( 単精度 ) CPU 数十 GFLOPS バンド幅 ~100GB/s コストパフォーマンス ~$400 GPU の開発環境 NVIDIA CUDA http://www.nvidia.co.jp/object/cuda_home_new_jp.html

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

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 7 ( 水 5) 12: コマンドライン引数 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2016-06-29 1 まとめ : ポインタを使った処理 内容呼び出し元の変数を書き換える文字列を渡す 配列を渡すファイルポインタ複数の値を返す大きな領域を確保する

More information

/ SCHEDULE /06/07(Tue) / Basic of Programming /06/09(Thu) / Fundamental structures /06/14(Tue) / Memory Management /06/1

/ SCHEDULE /06/07(Tue) / Basic of Programming /06/09(Thu) / Fundamental structures /06/14(Tue) / Memory Management /06/1 I117 II I117 PROGRAMMING PRACTICE II 2 MEMORY MANAGEMENT 2 Research Center for Advanced Computing Infrastructure (RCACI) / Yasuhiro Ohara yasu@jaist.ac.jp / SCHEDULE 1. 2011/06/07(Tue) / Basic of Programming

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

,,,,., C Java,,.,,.,., ,,.,, i

,,,,., C Java,,.,,.,., ,,.,, i 24 Development of the programming s learning tool for children be derived from maze 1130353 2013 3 1 ,,,,., C Java,,.,,.,., 1 6 1 2.,,.,, i Abstract Development of the programming s learning tool for children

More information

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

Microsoft PowerPoint - GPUシンポジウム _d公開版.ppt [互換モード] 200/0/9 数値流体解析の並列効率とその GPU による高速化の試み 清水建設 ( 株 ) 技術研究所 PHAM VAN PHUC ( ファムバンフック ) 流体計算時間短縮と GPU の活用の試み 現 CPUとの比較によりGPU 活用の可能性 現 CPU の最大利用 ノード内の最大計算資源の利用 すべてCPUコアの利用 適切なアルゴリズムの利用 CPU コア性能の何倍? GPU の利用の試み

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

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

N 体問題 長岡技術科学大学電気電子情報工学専攻出川智啓 N 体問題 長岡技術科学大学電気電子情報工学専攻出川智啓 今回の内容 天体の運動方程式 天体運動の GPU 実装 最適化による性能変化 #pragma unroll 855 計算の種類 画像処理, 差分法 空間に固定された観測点を配置 観測点 ( 固定 ) 観測点上で物理量がどのように変化するかを追跡 Euler 型 多粒子の運動 観測点を配置せず, 観測点が粒子と共に移動 Lagrange 型 観測点

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

PowerPoint プレゼンテーション

PowerPoint プレゼンテーション 2018/10/05 竹島研究室創成課題 第 2 回 C 言語演習 変数と演算 東京工科大学 加納徹 前回の復習 Hello, world! と表示するプログラム 1 #include 2 3 int main(void) { 4 printf("hello, world! n"); 5 return 0; 6 } 2 プログラム実行の流れ 1. 作業ディレクトリへの移動 $ cd

More information

MPI または CUDA を用いた将棋評価関数学習プログラムの並列化 2009/06/30

MPI または CUDA を用いた将棋評価関数学習プログラムの並列化 2009/06/30 MPI または CUDA を用いた将棋評価関数学習プログラムの並列化 2009/06/30 目次 1. まえがき 3 2. 計算方法 4 3. MPI を用いた並列化 6 4. CUDA を用いた並列化 11 5. 計算結果 20 6. まとめ 24 2 1. まえがき 目的将棋の評価関数を棋譜から学習するボナンザメソッドの簡易版を作成し それを MPI または CUDA を用いて並列化し 計算時間を短縮することを目的とする

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 Word - Sample_CQS-Report_English_backslant.doc

Microsoft Word - Sample_CQS-Report_English_backslant.doc ***** Corporation ANSI C compiler test system System test report 2005/11/16 Japan Novel Corporation *****V43/NQP-DS-501-1 Contents Contents......2 1. Evaluated compiler......3 1.1. smp-compiler compiler...3

More information

AquesTalk for WinCE プログラミングガイド

AquesTalk for WinCE プログラミングガイド AquesTalk for WinCE プログラミングガイド ( 株 ) アクエスト 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk for WinCE ( 以下 AquesTalk) をアプリケーションに組み込んで使用するためのプログラミングに関して 方法および注意点を示したものです AquesTalk には 2 種類のライブラリがあります 音声データをメモリ上に生成するものと

More information

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint - 11.pptx ポインタと配列 ポインタと配列 配列を関数に渡す 法 課題 : 配列によるスタックの実現 ポインタと配列 (1/2) a が配列であるとき, 変数の場合と同様に, &a[0] [] の値は配列要素 a[0] のアドレス. C 言語では, 配列は主記憶上の連続領域に割り当てられるようになっていて, 配列名 a はその配列に割り当てられた領域の先頭番地となる. したがって,&a[0] と a は同じ値.

More information

数値計算

数値計算 プログラム作成から実行まで 数値計算 垣谷公徳 17 号館 3 階電子メール : kimi@ee.ous.ac.jp Source program hello.c printf("hello\n"); コンパイラ Library libc.a 0011_printf000101001 1101_getc00011100011 1011_scanf1110010100 コンパイル Object module

More information

AquesTalk2 Win マニュアル

AquesTalk2 Win マニュアル 株式会社 AQUEST http://www.a-quest.com/ AquesTalk2 Win Manual 1. 概要 本文書は 規則音声合成ライブラリ AquesTalk2 Win をアプリケーションに組み込んで使用するためのプログラミングに関しての方法および注意点を示したものです AquesTalk2 は 簡単に小型機器への組み込みが出来る音声合成ミドルウェアです このライブラリを用いることで

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

Insert your Title here

Insert your Title here マルチコア マルチスレッド環境での静的解析ツールの応用 米 GrammaTech 社 CodeSonar によるスレッド間のデータ競合の検出 2013 GrammaTech, Inc. All rights reserved Agenda 並列実行に起因する不具合の摘出 なぜ 並列実行されるプログラミングは難しいのか データの競合 デッドロック どのようにして静的解析ツールで並列実行の問題を見つけるのか?

More information

gengo1-8

gengo1-8 問題提起その 1 一文字ずつ文字 ( 数字 ) を読み込み それぞれの文字が何回入力されたかを数えて出力するプログラム int code, count_0=0, count_1=0, count_2=0, count_3=0,..., count_9=0; while( (code=getchar())!= EOF ){ } switch(code){ case 0 : count_0++; break;

More information

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 総機 1 ( 月 1) 11: 動的メモリ確保 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2015-06-22 1 まとめ : ポインタを使った処理 内容 説明 呼び出し元の変数を書き換える第 9 回 文字列を渡す 配列を渡す 第 10 回 ファイルポインタ

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

第1回 プログラミング演習3 センサーアプリケーション

第1回 プログラミング演習3 センサーアプリケーション C プログラミング - ポインタなんて恐くない! - 藤田悟 fujita_s@hosei.ac.jp 目標 C 言語プログラムとメモリ ポインタの関係を深く理解する C 言語プログラムは メモリを素のまま利用できます これが原因のエラーが多く発生します メモリマップをよく頭にいれて ポインタの動きを理解できれば C 言語もこわくありません 1. ポインタ入門編 ディレクトリの作成と移動 mkdir

More information

64bit SSE2 SSE2 FPU Visual C++ 64bit Inline Assembler 4 FPU SSE2 4.1 FPU Control Word FPU 16bit R R R IC RC(2) PC(2) R R PM UM OM ZM DM IM R: reserved

64bit SSE2 SSE2 FPU Visual C++ 64bit Inline Assembler 4 FPU SSE2 4.1 FPU Control Word FPU 16bit R R R IC RC(2) PC(2) R R PM UM OM ZM DM IM R: reserved (Version: 2013/5/16) Intel CPU (kashi@waseda.jp) 1 Intel CPU( AMD CPU) 64bit SIMD Inline Assemler Windows Visual C++ Linux gcc 2 FPU SSE2 Intel CPU double 8087 FPU (floating point number processing unit)

More information

スライド 1

スライド 1 RX62N 周辺機能紹介データフラッシュ データ格納用フラッシュメモリ ルネサスエレクトロニクス株式会社ルネサス半導体トレーニングセンター 2013/08/02 Rev. 1.00 00000-A コンテンツ データフラッシュの概要 プログラムサンプル 消去方法 書き込み方法 読み出し方法 FCUのリセット プログラムサンプルのカスタマイズ 2 データフラッシュの概要 3 データフラッシュとは フラッシュメモリ

More information

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ 今回のプログラミングの課題 次のステップによって 徐々に難易度の高いプログラムを作成する ( 参照用の番号は よくわかる C 言語 のページ番号 ) 1. キーボード入力された整数 10 個の中から最大のものを答える 2. 整数を要素とする配列 (p.57-59) に初期値を与えておき

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

02: 変数と標準入出力

02: 変数と標準入出力 C プログラミング入門 基幹 2 ( 月 4) 11: 動的メモリ確保 Linux にログインし 以下の講義ページを開いておくこと http://www-it.sci.waseda.ac.jp/ teachers/w483692/cpr1/ 2014-06-22 1 まとめ : ポインタを使った処理 内容 説明 呼び出し元の変数を書き換える第 9 回 文字列を渡す 配列を渡す 第 10 回 ファイルポインタ

More information

1 return main() { main main C 1 戻り値の型 関数名 引数 関数ブロックをあらわす中括弧 main() 関数の定義 int main(void){ printf("hello World!!\n"); return 0; 戻り値 1: main() 2.2 C main

1 return main() { main main C 1 戻り値の型 関数名 引数 関数ブロックをあらわす中括弧 main() 関数の定義 int main(void){ printf(hello World!!\n); return 0; 戻り値 1: main() 2.2 C main C 2007 5 29 C 1 11 2 2.1 main() 1 FORTRAN C main() main main() main() 1 return 1 1 return main() { main main C 1 戻り値の型 関数名 引数 関数ブロックをあらわす中括弧 main() 関数の定義 int main(void){ printf("hello World!!\n"); return

More information

A Responsive Processor for Parallel/Distributed Real-time Processing

A Responsive Processor for Parallel/Distributed Real-time Processing E-mail: yamasaki@{ics.keio.ac.jp, etl.go.jp} http://www.ny.ics.keio.ac.jp etc. CPU) I/O I/O or Home Automation, Factory Automation, (SPARC) (SDRAM I/F, DMAC, PCI, USB, Timers/Counters, SIO, PIO, )

More information

Microsoft PowerPoint ppt

Microsoft PowerPoint ppt 基礎演習 3 C 言語の基礎 (5) 第 05 回 (20 年 07 月 07 日 ) メモリとポインタの概念 ビットとバイト 計算機内部では データは2 進数で保存している 計算機は メモリにデータを蓄えている bit 1bit 0 もしくは 1 のどちらかを保存 byte 1byte 1bitが8つ集まっている byte が メモリの基本単位として使用される メモリとアドレス メモリは 1byte

More information

25 2 ) 15 (W 力電 idle FMA(1) FMA(N) 実行コード Memcopy matmul 1 N occupancy gridsize N=256 Memcopy blocksize 288x288 (matmu

25 2 ) 15 (W 力電 idle FMA(1) FMA(N) 実行コード Memcopy matmul 1 N occupancy gridsize N=256 Memcopy blocksize 288x288 (matmu GPU 1, 2 1, 2 1, 2 1, 2 1, 2, 3 GPU NVIDIA GeForce GTX285 Tesla S17 1 GPU GPU GPU 2W CPU GPU GPU GPU GPGPU 92.8% GPU GPU Correlative Analysis of Performance Counters and Power Consumption on GPUs Hitoshi

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

Microsoft PowerPoint - 講義:コミュニケータ.pptx

Microsoft PowerPoint - 講義:コミュニケータ.pptx コミュニケータとデータタイプ (Communicator and Datatype) 2019 年 3 月 15 日 神戸大学大学院システム情報学研究科横川三津夫 2019/3/15 Kobe HPC Spring School 2019 1 講義の内容 コミュニケータ (Communicator) データタイプ (Datatype) 演習問題 2019/3/15 Kobe HPC Spring School

More information

1.overview

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

More information

strtok-count.eps

strtok-count.eps IoT FPGA 2016/12/1 IoT FPGA 200MHz 32 ASCII PCI Express FPGA OpenCL (Volvox) Volvox CPU 10 1 IoT (Internet of Things) 2020 208 [1] IoT IoT HTTP JSON ( Python Ruby) IoT IoT IoT (Hadoop [2] ) AI (Artificial

More information

4.1 % 7.5 %

4.1 % 7.5 % 2018 (412837) 4.1 % 7.5 % Abstract Recently, various methods for improving computial performance have been proposed. One of these various methods is Multi-core. Multi-core can execute processes in parallel

More information

Cプログラミング1(再) 第2回

Cプログラミング1(再) 第2回 C プログラミング 1( 再 ) 第 2 回 講義では Cプログラミングの基本を学び演習では やや実践的なプログラミングを通して学ぶ 1 前回のレポートから 前回の宿題 数あてゲーム の説明において 次のように書いていたものがいた : これはコンピュータがランダムに設定した数字を人間が当てるゲームである この説明でどこかおかしなところはないだろうか? 2 コンピュータの用語と日常的な用語の違い 物理において

More information

Slide 1

Slide 1 GPUコンピューティング入門 2015.08.26 エヌビディア合同会社 CUDAエンジニア 村上真奈 エヌビディアのGPUについて (20 分 ) GPUコンピューティングとは?(10 分 ) OpenACC 入門 (90 分 ) CUDA 入門 (90 分 ) Agenda 2 エヌビディアのGPUについて (20 分 ) GPUコンピューティングとは?(10 分 ) OpenACC 入門 (90

More information