일반적 주장:
하지만 아래 두 개념은 잘못되었음
레이턴시 숨김 (Hide latency) 란 레이턴시 동안 다른 연산을 수행하여 빠르게 작업을 마치는 것을 말한다.
Thread-level parprallelism (TLP) 과 Instruction-leel parallelism (ILP):
왼: TLP, 오: ILP
위 예시는 ILP 없이 TLP만을 사용했을 때. 한 스레드에서 처리하기에는 너무너무 가벼운 연산이라 사이클의 낭비임 (idle cycle).
이렇게 ILP=2 를 사용해주면
TLP만 쓸 때보다 (점선) 더 적은 쓰레드 개수로 100% 유틸라이즈 가능
ILP를 더 늘리면?
idle cycle인지 어떻게 알지.. 직접 계산하는건가
음 일단 쓰레드별로 연산을 사이클에 꽉차게 쓰는게 좋다는거
Note, threads don’t stall on memory access
– Only on data dependency
Note, local arrays are allocated in registers if possible
이렇게 float을 카피하는 연산이 있을 때, 한 쓰레드에서 많은 float을 한번에 copy하면
훨씬 유리함
memory intensive kernel 을 만들자!
이는 개별 쓰레드에서 여러개의 아웃풋을 계산함으로써도 달성될 수 있다.
예를 들어
근데 이제 각 쓰레드에서 최대로 쓸 수 있는 레지스터 용량도 정해져있으니까 이건 참고하기
출처: https://www.nvidia.com/content/gtc-2010/pdfs/2238_gtc2010.pdf