상대적인 전역 메모리 참조 시간

전역 메모리 참조는 상당한 수의 사이클을 소비하기 때문에, 프로그램 수행 시 참조 횟수에 따라 성능이 크게 변한다.

같은 스레드 블록, 그리드 구조의 프로그램은 커널 내부에서 더 적은 횟수의 전역 메모리 참조를 하는 것이 더 빠르다.

여기서 전역메모리 참조라 하는것은 지역메모리 참조도 포함한다.

 

하지만, 전역메모리 참조를 하는데 걸리는 시간은 조건에 따라 크게 달라진다.

같은 전역 메모리 참조라도 커널의 전체 실행시간에 끼치는 영향은 더 클 수도 작을 수도 있는데, 커널에서 전역 메모리 참조를 할 때 발생하는 지연 감춤 때문이다.

 

 

CUDA의 전역 메모리 지연 감춤

명령은 32개씩 워프단위로 실행된다. 하지만 SM 안의 프로세스 코어와 TPC(텍스쳐 프로세서 클러스터)의 전역메모리 읽기/쓰기 단위 개수의 제한이 있기 때문에, 전역메모리 참조는 한 블록 내부에서도 동시에 일어나지 않는다.

 

TPC(텍스쳐 프로세서 클러스터) : SM을 제어하고, 텍스쳐 캐시, 지오메트리 엔진을 담고 있어서 텍스쳐와 지오메트리 쉐이더 같은 연산을 처리한다.

 

전역 메모리 참조가 발생할 때 하나의 TPC 스케줄러는 전역메모리 참조의 긴 시간동안 SM을 쉬게 하는 것이 아니라, SM이 다른 워프를 실행하도록 하여 작업을 계속하도록 한다.

 - 전역메모리 참조가 실행되고 있는 동안에 다른 명령이 실행되며, 이것을 통하여 전역 메모리 참조의 지연 감춤이 일어난다.

 

전역메모리 최적의 지연 감춤 조건

 - 충분한 수의 활성 블록 수가 확보되어야 한다.

 - 커널 내부에서 하나의 전역 메모리 참조 당 충분한 시간의 명령 수행시간이 확보되어야 한다.

활성 블록 수가 주는 영향

블록 하나당 128스레드와 512스레드를 사용할 경우

128일 때는 SM당 활성 블록 수는 8개, 512일 때는 SM당 활성 블록 수는 2개

8개의 활성 블록 수의 경우가 2개의 활성 블록 수에 비해 수행시간이 더 안정화 되어 있다.

 

 

 

 

 

 그림 5, 6, 7은 전역메모리 읽기 및 쓰기 횟수를 변화시키며 곱셈, 나눗셈, 덧셈 실행시간 비교그래프이다.

 

전역메모리 읽기와 쓰기는 실행 시간이 비슷하고, 지연 감춤의 효과도 비슷함을 확인할 수 있다.

덧셈, 곱셈, 나눗셈에 대한 실험결과는 명령 수행 시간 길이가 전역 메모리 참조 시간 길이와 비슷해 질 때까지 전역 메모리 참조 시간만 드러나, 지연 감춤의 효율이 증가함을 보여준다.

명령수행시간 길이가 전역 메모리 참조 시간 길이를 초과할 때부터 커널의 수행시간은 실행해야 할 연산이 증가함에 따라 일정하게 증가함을 알 수 있다.

 

지연 감춤 효과로 인해 더 유연한 전역 메모리의 사용을 가능하게 한다,

그림 5에 따르면 72회 이상의 곱셈 연산에 준하는 명령 수행시간을 가진 커널은 4번 이하의 전역 메모리 참조 시간이 전체 실행 시간에 영향을 주지 않음을 확인할 수 있었다.

더 적은 연산 시간을 가진 커널에서는 전역 메모리 참조 횟수에 따라 커널의 수행 시간이 영향을 받게 된다.

Posted by 긍정왕오킹