Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CUDA Memo

CUDA Memo

ytakano

May 31, 2016
Tweet

More Decks by ytakano

Other Decks in Technology

Transcript

  1. Maxwellのブロック図 GM107 GPU には、1 基の GPC、5 基の Maxwell ストリーミング・プロセッサ(SMM)、2 基の

    64 ビッ ト・メモリ・コントローラ(合計 128 ビット)が搭載されています。これは、同チップのフル実装であり、 GeForce GTX 750 Ti での出荷時と同じ構成になっています。 緑色の四角がCUDA Core CUDA Coreの中で 複数スレッドが同時に実行される 2
  2. Hello World #include <stdio.h> __kernel__ void hello() { if (threadIdx.x

    == 0 & blockIdx.x == 0) { printf(“Hello World!”); } } void main() { hello<<<2, 10>>>(); cudaThreadSynchronize(); // Χʔωϧؔ਺ͷऴྃΛ଴ͭ } 7
  3. WARP ベクトル演算グループ SP内では32スレッド単位でSIMT実行 SIMT: single instruction multiple thread add add

    add add add add add add mul mul mul mul mul mul mul mul setp setp setp setp setp setp setp setp bra L1 bra L1 bra L1 bra L1 bra L1 bra L1 bra L1 bra L1 sub sub sub bra L2 bra L2 bra L2 add add add add add mov mov mov mov mov mov mov mov thread time L1 L2 9
  4. GPUのメモリレイアウト CPU Memory GPU Global Memory L2 Cache Shared Memory

    texture memory Constant memory L1/texture cache Shared Memory L1/texture cache local memory register register GPU CPU SM 13
  5. 共有メモリ L1キャッシュ 1ブロックあたりの容量 48 KB 共有メモリ,16 KB キャッシュ 16 KB

    共有メモリ,48 KB キャッシュ アクセス速度(レイテンシ) グローバルメモリの100倍程度高速 http://devblogs.nvidia.com/parallelforall/ using-shared-memory-cuda-cc/ 14
  6. コンスタントメモリへの データ転送 __constant__ int foo; __constant__ int bar[100]; int func()

    { int i = 100; int j[100]; cudaMemcpyToSymbol(foo, &i, sizeof(i)); cudaMemcpyToSymbol(bar, j, sizeof(j)); } 配列でも,そうじゃなくても&はいらない 18
  7. グローバルメモリの利用 __kernel__ void func(int *arg, int n) { for (int

    i = 0; i < n; i++) { printf(“%d\n”, arg[d]); } } int func() { int val[3] = {1, 3, 5}; int *d_val; cudaMalloc((void**)&d_val, sizeof(val)); cudaMemcpy(d_val, val, sizeof(val), cudaMemcpyHostToDevice); func<<<1, 1>>>(d_val, 3); } 19