단일 명령, 다중 스레드
Single instruction, multiple threads싱글 명령, 멀티 스레드(SIMT)는 싱글 명령, 멀티 데이터(SIMD)를 멀티스레딩과 조합하는 병렬 컴퓨팅에서 사용되는 실행 모델입니다.이는 모든 "스레드"의 모든 명령이 잠금 단계로 실행된다는 점에서 SPMD와 다릅니다.SIMT 실행 모델은 여러 GPU에 구현되었으며 그래픽 처리 장치(GPGPU)의 범용 컴퓨팅과 관련이 있습니다.예를 들어 일부 슈퍼컴퓨터는 CPU와 GPU를 결합합니다.
프로세서, 예를 들어 숫자 p는 p 태스크보다 훨씬 많은 태스크를 실행하는 것으로 보입니다.이것은, 각 프로세서에 의해서 행해지는 복수의 「스레드」(또는 「워크 항목」또는 「SIMD 레인 동작의 시퀀스」)를 가지는 것으로, SIMD [1]레인과 유사합니다.
SIMT를 이해하는 가장 간단한 방법은 멀티코어 시스템을 상상하는 것입니다.여기서 각 코어는 자체 레지스터 파일, 자체 ALU(SIMD와 스칼라 모두) 및 자체 데이터 캐시를 가지고 있지만, 복수의 독립된 명령 캐시와 디코더, 그리고 복수의 독립된 프로그램 카운터 레지스터를 가지고 있는 표준 멀티코어 시스템과 달리 명령어를 가지고 있습니다.루션은 단일 명령 캐시와 단일 프로그램 카운터를 사용하여 명령을 읽는 단일 명령 디코더를 사용하여 단일 장치에서 모든 SIMT 코어로 동기적으로 브로드캐스트됩니다.
SIMT 레인과 SIMD 레인의 주요 차이점은 각 SIMT 코어가 완전히 다른 스택 포인터를 가지고 있을 수 있다는 것입니다(따라서 완전히 다른 데이터 세트에 대한 연산을 수행합니다). 반면 SIMD 레인은 단순히 ALU의 일부로서 메모리 자체에 대해 전혀 알지 못합니다.
역사
SIMT는 Nvidia가 G80 [2][3]칩을 탑재한 Tesla GPU 마이크로아키텍처에 도입했습니다.ATI Technologies(현 AMD)는 2007년 5월 14일 경쟁 제품인 TeraScale 1 기반의 "R600" GPU 칩을 출시했습니다.
묘사
일반적인 모든 RAM 타입(DDR SDRAM, GDDR SDRAM, XDR DRAM 등)의 액세스 시간이 아직 비교적 길기 때문에 엔지니어들은 각 메모리 액세스에 수반되는 레이텐시를 숨기기 위한 아이디어를 생각해냈습니다.엄밀히 말하면 레이텐시 숨김은 최신 GPU에 의해 구현되는 오버헤드 제로 스케줄링의 기능입니다.이는 'SIMT' 자체의 속성으로 간주될 수도 있고 그렇지 않을 수도 있습니다.
SIMT는 메모리 액세스에 따른 명령 취득 오버헤드([4]즉, 메모리 액세스에 따른 레이텐시)를 제한하는 것을 목적으로 하고 있습니다.또, 메모리 액세스 조작의 레이텐시가 큰폭의 레이텐시에도 높은 퍼포먼스를 실현하기 위해서, 최신의 GPU(Nvidia 나 AMD 등)에 사용되고 있습니다.이 경우 프로세서가 계산 태스크에 오버서브스크라이브되어 메모리 상에서 대기해야 할 태스크 간에 빠르게 전환할 수 있습니다.이 전략은 CPU의 멀티스레딩과 비슷합니다(멀티코어와 [5]혼동하지 마십시오).SIMD와 마찬가지로 제어 로직을 여러 데이터 레인으로 공유하여 계산 밀도를 높인다는 점도 큰 장점입니다.제어 로직을 N번 복제하는 대신 1개의 제어 로직 블록으로 N개의 데이터 레인을 관리할 수 있습니다.
SIMT 실행의 단점은 스레드 고유의 제어 플로우가 "마스킹"을 사용하여 실행된다는 점이며 프로세서의 스레드가 다른 제어 플로우 경로를 따를 경우 사용률이 낮다는 점입니다.예를 들어 프로세서의 다양한 스레드가 서로 다른 경로를 실행하는 IF-ELSE 블록을 처리하려면 모든 스레드가 실제로 두 경로를 모두 처리해야 합니다(프로세서의 모든 스레드가 항상 잠금 스텝으로 실행됨). 그러나 마스킹은 다양한 스레드를 적절하게 비활성화 및 활성화하기 위해 사용됩니다.제어 플로우가 프로세서의 스레드에 대해 일관성이 있는 경우, 즉 모든 스레드가 동일한 실행 경로를 따를 경우 마스킹이 회피됩니다.마스킹 전략은 SIMT를 일반 SIMD와 구별하는 것이며 [6]프로세서의 스레드 간 동기화가 저렴하다는 장점이 있습니다.
Nvidia CUDA | OpenCL | 헤네시 & 패터슨[7] |
---|---|---|
실 | 작업 항목 | SIMD 차선 운영 순서 |
휘다 | 웨이브프런트 | SIMD 명령 스레드 |
블록 | 워크그룹 | 벡터화 루프의 본체 |
격자무늬 | 엔드리지 | 벡터화 루프 |
「 」를 참조해 주세요.
레퍼런스
- ^ Michael McCool; James Reinders; Arch Robison (2013). Structured Parallel Programming: Patterns for Efficient Computation. Elsevier. p. 52.
- ^ "Nvidia Fermi Compute Architecture Whitepaper" (PDF). www.nvidia.com/. NVIDIA Corporation. 2009. Retrieved 2014-07-17.
- ^ Lindholm, Erik; Nickolls, John; Oberman, Stuart; Montrym, John (2008). "NVIDIA Tesla: A Unified Graphics and Computing Architecture". IEEE Micro. 28 (2): 6 (Subscription required.). doi:10.1109/MM.2008.31.
- ^ Rul, Sean; Vandierendonck, Hans; D’Haene, Joris; De Bosschere, Koen (2010). An experimental study on performance portability of OpenCL kernels. Symp. Application Accelerators in High Performance Computing (SAAHPC). hdl:1854/LU-1016024.
- ^ "Advanced Topics in CUDA" (PDF). cc.gatech.edu. 2011. Retrieved 2014-08-28.
- ^ Michael McCool; James Reinders; Arch Robison (2013). Structured Parallel Programming: Patterns for Efficient Computation. Elsevier. pp. 209 ff.
- ^ John L. Hennessy; David A. Patterson (1990). Computer Architecture: A Quantitative Approach (6 ed.). Morgan Kaufmann. pp. 314 ff.