기술

하루에도 수만개의 글자를 읽고 있습니다. 하루에도 수백장의 종이를 들춰 읽습니다.
이것은 그 읽기에 대한 일기입니다.

CUDA 병렬 프로그래밍 (20121023)

CUDA 병렬 프로그래밍, 정영훈 저, 이한디지털리

2. CUDA의 기본

  • 하나의 SP(CUDA 코어)는 4개의 스레드를 처리
  • G80/GT200은 하나의 SM에 SP가 8개 (32개의 스레드)
  • G80은 하나의 TPC에 2개의 SM (64개의 스레드)
  • GT200은 하나의 TPC에 3개의 SM (96개의 스레드)
  • GT200은 하나의 SM에 SP가 10개
  • 페르미 GF100는 TPC가 사라지고 1개의 SM에 32개의 SP (128개의 스레드)

3. 프로그래밍 준비

  • __global__ 디바이스에서 실행, 호스트에서 호출 가능, 디바이스에서 호출 불가능, 함수내 static 변수 불가, 호출 즉시 반환하여 비동기 동작

4. 스레드 블록 아키텍쳐

  • __global__ void kernel<<<Dg, Db, Ns, S>>>();
    Dg : Dimensions of the grid
    Db : Dimensions of the block
    Ns : Number of bytes shared memory dynamically allocated per block
    S : associated cudaStream_t
  • 문맥교환을 최소로 하기 위하여 남는 레지스터를 실행하지 않는 스레드가 사용할 수 있도록 할당하고, 스위칭 없이 스레드를 다 처리하고 다음 스레드를 처리하는 구조
  • 동시에 실행하는 스레드 간에는 똑같은 연산을 동시에 실행하며 진행하는 구조. 따라서 분기가 발생하면 하나의 조건을 실행할 동안 다른 조건에 해당하는 스레드는 쉬고 있다. if(a % 32 == 0) 이런 구조의 분기는 1/32의 효율을 가져올 것.
  • 워프 : 하나의 SM에서 처리되는 스레드들. 따라서 코드는 워프단위로 실행된다.


Add a Comment Trackback