행렬 M * 벡터 V = 결과 W 의 최적화
알고리즘, 블록, 메모리, 분기문 중 알고리즘 파트 봤고
이번에는 블록과 메모리 최적화 부분이다.
블록 최적화
스레드 블록 크기 : 블록 당 최대 스레드 수,
그리드 크기 : SM의 수 X 2 (60)
스레드는 그렇다치는데 그리드는 SM의 수 X 2가 왜 최적화일까?
- 활성화 비율을 고려하여 SM당 2개의 블록이 할당되도록 한다.
- 여러개의 블록이 할당 될 경우 뱅크충돌이 일어나구 그러면 성능에 악영향을 미친다
메모리 최적화
초기방법 : 커널의 입력데이터 행렬 M과 벡터 V의 인수저장에는 전역메모리 사용
개선방법 : 행렬 M의 행은 변하지만 곱해지는 벡터 V는 계속 같은 내용이 호출되기 때문에
전역메모리보다 빠른 텍스쳐 메모리에 벡터 V를 저장하여 성능향상을 유도한다.
공유메모리의 크기 : 블록 당 쓰레드 개수 * 부동 소수점 데이터 크기
- 한 행의 곱을 위해 공유메모리 설정
- 공유메모리의 합을 구하는 과정에서 블록 내 스레드가 같은 뱅크에 중복 접근하여 뱅크 충돌이
발생하지 않도록 공유메모리 참조
입력행렬 M : 전역메모리
대상벡터 V : 텍스쳐메모리
결과행렬 W : 전역메모리
행렬계산 중 : 공유메모리
'Graphics > GPU' 카테고리의 다른 글
GPU 최적화 기초 - 결론 (0) | 2014.06.09 |
---|---|
GPU 최적화 기초 - 분기문과 __syncthreads() 제거 (0) | 2014.06.09 |
GPU 최적화 기초 - 알고리즘 최적화 (0) | 2014.06.09 |
GPU 최적화 기초 - 지연 감춤과 __syncthreads() (0) | 2014.06.09 |
GPU 최적화 기초 - 전역메모리 참조시간, 지연감춤 (0) | 2014.06.09 |