행렬 M * 벡터 V = 결과 W 의 최적화

 

알고리즘, 블록, 메모리, 분기문 중 알고리즘 파트 봤고

이번에는 블록과 메모리 최적화 부분이다.

 

 

블록 최적화

스레드 블록 크기 : 블록 당 최대 스레드 수,

그리드 크기 : SM의 수 X 2 (60)

스레드는 그렇다치는데 그리드는 SM의 수 X 2가 왜 최적화일까?

 - 활성화 비율을 고려하여 SM당 2개의 블록이 할당되도록 한다.

 - 여러개의 블록이 할당 될 경우 뱅크충돌이 일어나구 그러면 성능에 악영향을 미친다

 

 

메모리 최적화

초기방법 : 커널의 입력데이터 행렬 M과 벡터 V의 인수저장에는 전역메모리 사용

개선방법 : 행렬 M의 행은 변하지만 곱해지는 벡터 V는 계속 같은 내용이 호출되기 때문에

               전역메모리보다 빠른 텍스쳐 메모리에 벡터 V를 저장하여 성능향상을 유도한다.

공유메모리의 크기 : 블록 당 쓰레드 개수 * 부동 소수점 데이터 크기

 - 한 행의 곱을 위해 공유메모리 설정

 - 공유메모리의 합을 구하는 과정에서 블록 내 스레드가 같은 뱅크에 중복 접근하여 뱅크 충돌이

   발생하지 않도록 공유메모리 참조

 

입력행렬 M : 전역메모리

대상벡터 V : 텍스쳐메모리

결과행렬 W : 전역메모리

행렬계산 중 : 공유메모리

Posted by 긍정왕오킹