728x90
CUDA에서는 많은 스레드를 사용하게 된다. 앞에서 메모리의 계층구조를 보면, 공유 메모리라는 것도 있다.
많은 스레드들이 공유 메모리에서 서로 데이터를 '쓰기, 읽기' 를 하기 위해서는 당연히 동기화를 해야만 한다.
이 동기화를 위해 C언어에서는 굉장히 머리 아픈 상황이 많이 발생하지만, CUDA C에서는 다행히 동기화 함수를 제공하고 있다.
__syncthreads() 이 함수는 블록 내의 다른 모든 스레드가 __syncthreads()를 호출해야만 다음 명령어로 넘어가게 되어 있다.
그림 - __syncthreads() 사용 예
스레드 동기화에서 주의 할 점은 일단 동기화 자체가 작업이 먼저 끝난 스레드가 아직 작업이 끝나지 않은 스레드를 기다리는 것이기 때문에 성능에 영향이 갈 것이다. 꼭 사용해야 되는 부분에서만 사용하도록 하자.
728x90
'Parallel Programming > CUDA' 카테고리의 다른 글
CUDA - 그래픽스 상호운용 - 2 (0) | 2016.02.19 |
---|---|
CUDA - 그래픽스 상호운용 - 1 (0) | 2016.02.19 |
CUDA - 메모리의 계층 구조 (0) | 2015.12.10 |
CUDA - 병렬 프로그래밍(스레드를 이용한 벡터의 합) (0) | 2015.12.10 |
CUDA - 동작 단위 (Thread, Warp, Block, Grid) (0) | 2015.12.08 |