728x90

CUDA에서는 많은 스레드를 사용하게 된다. 앞에서 메모리의 계층구조를 보면, 공유 메모리라는 것도 있다. 

많은 스레드들이 공유 메모리에서 서로 데이터를 '쓰기, 읽기' 를 하기 위해서는 당연히 동기화를 해야만 한다.

이 동기화를 위해 C언어에서는 굉장히 머리 아픈 상황이 많이 발생하지만, CUDA C에서는 다행히 동기화 함수를 제공하고 있다. 

__syncthreads() 이 함수는 블록 내의 다른 모든 스레드가 __syncthreads()를 호출해야만 다음 명령어로 넘어가게 되어 있다.


그림 - __syncthreads() 사용 예


스레드 동기화에서 주의 할 점은 일단 동기화 자체가 작업이 먼저 끝난 스레드가 아직 작업이 끝나지 않은 스레드를 기다리는 것이기 때문에 성능에 영향이 갈 것이다. 꼭 사용해야 되는 부분에서만 사용하도록 하자.


728x90

+ Recent posts