반응형
이번 포스팅에서는 constant memory를 활용하여 어플리케이션 성능을 향상시킬 수 있는 방법에 대해서 다룬다.
또, event라는 것을 활용하여 어플리케이션의 성능을 평가할 수 있는 방법을 다룬다.
Constant Memory
- constant memory 라는 이름과 같이, 변하지 않는 값의 변수에 대한 정보를 저장하는 메모리이다.
- NVIDIA 하드웨어에서는 64kb의 constant 메모리를 제공한다.
- 앞에 __constant__ 키워드를 활용하여 선언할 수 있다.
__constant__ SomeStruct s[S];
- 이렇게 된다면 cudaMalloc 또는 cudaFree를 해줄 필요가 없다는 장점이 있다.
Constance Memory를 사용했을 때의 performance
- constant 메모리를 64kb의 constant 메모리에 저장했을 때 왜 global memory에서 읽었을 때보다 좋을까?
- cache로 되어 있기 때문에 memory traffic이 없다.
- 주변 thread 에 broadcasting이 가능하다. 여기서 주변이라는 것은 warp를 의미한다.
- warp란? 같이 실행되는 32개의 thread 묶음을 의미한다.
- broadcasting은 이 warp의 절반 정도까지 가능하다.
- 16개의 thread가 모두 같은 주소를 읽을 때에는 퍼포먼스가 향상된다.
- 단, 16개의 thread가 각기 다른 주소를 참조하고자 할때는 퍼포먼스가 크게 떨어질 수 있다.
- broadcasting을 위한 16번 만큼의 작업이 필요하기 때문이다. 따라서 이 경우에는 global memory 보다 느릴 수 있다.
Event로 퍼포먼스 알아보기
- event는 GPU time stamp이다. cpu timer로는 측정할 수 없는 값들을 측정할 수 있도록 도와준다.
- 다음과 같이 사용 가능하다.
cudaEvent_t start;
cudaEvent_t end;
cudaEventCreate(&start);
cudaEventCreate(&end);
cudaEventRecord(start,0);
//작업
cudaEventRecord(end,0);
cudaEventSynchronize(end);
- cudaEvent_t : 로 time 을 담을 변수 선언
- cudaEventRecord
- cudaEventSynchronize
- cudaEventElapsedTime : cudaEvent_t 변수 들 간 시간 얼마나 지났는지 계산해주는 함수.
- cudaEventDestroy : 생성한 변수 제거 , 삭제
반응형
'Programming > CUDA' 카테고리의 다른 글
[CUDA] CUDA로 threading & shared memory (0) | 2023.05.02 |
---|---|
[CUDA] Parallel Programming in CUDA (0) | 2023.05.01 |
[CUDA] CUDA C 기초 (0) | 2023.05.01 |
[CUDA] GPU Programming을 하는 이유 (0) | 2023.05.01 |