ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • CUDA 메모리 구조(2)
    CUDA 2010. 9. 9. 15:41
    반응형

    CUDA 연산의 개념은 아래 그림과 같은 구조로 되어 있습니다.

    여기서 Thread라고 되어 있는 것들이 CUDA연산에서 가장 작은 단위인 것입니다.
    이 Thread들은 Block의 하위에 있고 Block들은 다시 Grid의 하위에 있습니다.
    그래서 프로그래머가 연산을 하려면

    '몇번Grid의 몇번Block의 몇번Thread를 사용하여 계산하겠다'

    를 지정해 주어야 합니다.

    여기서 각 Thread는 자신만의 local memory를 가지게 됩니다.
    각 Thread 간에 data 공유를 위한 shared memory는 따로 있습니다.
    그리고 Block들의 집합인 Grid간에 data 공유를 위한 Global memory가 있습니다.
    구조는 아래와 같습니다.


    이 memory들을 어떻게 사용하느냐에 따라서 같은 연산을 하는 CUDA프로그램이라 하더라도 큰 성능차이를 내게 됩니다.
    memory간의 data를 이동시키는 비용이 꽤 크기 때문에 적절한 알고리즘을 작성하지 않는다면 계산하는데서 단축한 시간을 data 이동시키는데서 다 까먹을 수 있게 됩니다.
    각 memory들의 속도 또한 차이가 있어서 이런 여러가지 요소를 고려하기 시작하면 복잡해지기 시작하는 겁니다.
    결국 CUDA 프로그래밍의 핵심은 각 memory들의 특성을 파악해서 최대한 효율적인 알고리즘을 만드는데 있습니다.

    아래 그림은 Grid를 이용해 계산한다는 것이 코드로는 어떻게 표현되는지를 나타냅니다.

    결국 template project에서 보았던 kernel을 실행시키는 부분이 kernel에 해당하는 Grid를 실행시킨다는 것을 알 수 있습니다.
    반응형

    'CUDA' 카테고리의 다른 글

    CUDA 프로그래밍 기본개념  (0) 2010.11.25
    불친절한 CUDA 설치하기 정리  (0) 2010.11.25
    cuda template project(2)  (0) 2010.11.16
    CUDA 메모리 구조(1)  (0) 2010.04.07
    CUDA 시작 글  (0) 2010.04.07

    댓글

Designed by Tistory.