최근 프로세서에서는 ILP(명령어 수준 병렬화, Instruction-level Parallelism) 보다 TLP(쓰레드 수준 병렬화, Thread-level parallelism) 지원의 중요성이 커지고 있다. ILP에서 TLP로 관점이 옮겨간 이유가 두가지 있는데, 하드웨어 설계 상의 한계와 멀티쓰레딩 프로그램의 대두를 들 수 있다. CPU와 메모리의 상대적인 성능 차이로 생기는 메모리 벽(memory wall), 본질적으로 순차적으로 수행되어야 하는 작업, 깊은 파이프라인으로 인해 증가되는 실패 비용 등의 이유로 높은 수준의 ILP를 달성하기가 어려워졌다. 동시에 사용자 응용프로그램(application)과 운영체제에서 한번에 수행되는 쓰레드와 프로세스의 양의 증가가 높은 수준의 TLP를 의미있게 만들었다.

높은 TLP를 활용하기 위해 CMP나 CMT를 사용한다. CMP(칩 레벨 멀티프로세서, Chip-level processors)는 하나의 칩에 복수개의 프로세서를 집어넣은 것이다.

CMT(칩 수준 멀티쓰레딩, Chilp-level Multithreading)은 하나의 코어에서 여러개의 쓰레드가 동시에 수행가능한 것을 의미한다. 물론 이상적으로는 원하는 쓰레드만 만큼 프로세서가 복수개로 존재하는 것이 이상적이지만 적은 수의 트랜지스터의 투자로 효과를 얻을 수 있기 때문에 CMT는 점점 일반적인 방법이 되어간다. 32개의 쓰레드 처리가 필요하다고 해서 32개의 프로세서를 하나의 칩에 넣는 시도는 전체적인 비용, 트랜지스터 예산(transistor budget), 전력 제한 등의 문제에 부딪치게 된다.

CMT를 구성하는 방법은 아래와 같다.

  • TM (시간적 멀티쓰레딩, Temporal Multithreading)
  • SMT (동시 멀티쓰레딩, Simultanous Multithreading)

TM은 싸이클에 따라 다른 쓰레드의 명령이 수행되는 것을 의미하고 SMT는 다른 파이프라인에 다른 쓰레드가 수행이 되는 것을 의미한다.

대게 몇가지 TLP 향상을 위한 기법이 함께 사용되는 경향을 보인다. 이 기법들은 서로 직교적이기 때문에 동시에 사용될 수 있다. 울트라스팍 T1에서는 TM과 CMP가 사용되었고 Power PC에서는 SMT, TM, CMP가 사용되었다.

시간적 멀티쓰레딩

TM은 CDC사가 1979년에 수퍼 컴퓨터 시스템인 Cyber 170에 사용한 이후에 대형 컴퓨터 위주로 사용되었다. 2005년에 와서야 썬에 의해 발표된 울트라스팍(UltraSPARC) T1에 사용되며 범용화되었다.

TM은 시간을 나누어서 여러 쓰레드를 수행하는 기법을 의미한다. 하나의 코어가 복수개의 쓰레드를 수행할 수 있으며 이 쓰레드의 처리 단위를 요소(strand)이라 부른다.

TM은 두가지 형태가 있는데 FgTM, (고운 결 TM, fine-grained TM)와 CgTM(거친 결 TM, coarse-grained TM) 방식이다. 비유적인 표현인데 고운 결 멀티쓰레딩이 여러 쓰레드를 싸이클 마다 번갈아 수행시킨다면 거친 결 멀티쓰레딩은 레이턴시가 증가될 때 교체하는 것을 의미한다. 보통은 메모리 작업이 발생할 때 교체당할 확률이 높다.

일반적인 프로세서는 캐쉬 미스나 파이프라인이 깨어졌을 때 아무런 일을 하지 않고 시간을 허비하게 되지만 TM에서는 허비되는 파이프라인이 극도로 낮아지며 쓰레드의 실시간 응답성이 향상된다.

반면에 TM에도 단점의 단점은 있다. TM에서는 하나의 코어 내의 여러 쓰레드가 동일한 캐쉬를 쓰기 때문에 쓰레드당 캐쉬 효율이 낮아질 수 있다. (공유자원이 있는 구조에서 공통적으로 발생하는 문제다.) 하나의 코어에서 8개의 쓰레드를 제공하는 울트라스팍 T2에서는 4개의 쓰레드가 공유자원을 사용하도록 하여 효율을 높이고 있다.

또 빠른 문맥 교환을 위해 복수개의 레지스터 집합이 필요한게 문제다. 8개의 쓰레드를 하나의 코어에서 작동시키기 위해 8개의 레지스터 집합이 필요하다. 하나의 요소가 하나의 레지스터 집합을 필요한다.

동시 멀티쓰레딩

동시적 멀티쓰레딩은 한 싸이클에 복수개의 쓰레드가 수행되는 것이다. 동시적 멀티쓰레딩을 위해서는 여러개의 파이프라인이 필수적이다. 두개 이상의 쓰레드가 한번에 수행되기 위해서는 역시 별도의 레지스터 집합이 필요하다.

대부분의 동시 멀티쓰레딩 칩은 시간적 멀티쓰레딩도 같이 사용한다. 울트라스팍 T2의 경우 한 싸이클에 2개의 쓰레드가 동작하며 싸이클 마다 다른 쓰레드로 교체한다.

동시 멀티쓰레딩에서도 가장 큰 문제는 공유 자원에 의해 효율이 낮아지는 것이며, 높은 자원을 소모하는 단일 프로세스 작업에서도 효율이 낮아질 수 있다.

논란의 여지 하이퍼 쓰레딩

HT(하이퍼쓰레딩 Hyperthreading)는 논란의 여지가 있다. HT는 여러 쓰레드가 여러 파이프라인에서 수행된다는 점에서 SMT이다. (반면 TM은 아니다.)

하지만 인텔의 칩의 경우 ILP를 향상시키기 위해 슈퍼스칼라를 사용하고 있다. 슈퍼스칼라는 하나의 쓰레드의 하나 이상의 명령이 여러개의 파이프라인에서 나뉘어 수행되는 것을 의미한다. 슈퍼스칼라와 SMT 기술은 상호배타적일 수 밖에 없다. 인텔의 CPU는 여전히 ILP에 집중하고 있기에 이 경우 SMT는 슈퍼스칼라의 유휴 파이프라인만을 이용할 수 있다. 유휴 파이프라인을 적재적소에 활용하는 것은 매우 어려운 일이다. 5% 트랜지스터를 더 사용하여 30%의 성능을 확보했다는데 과연 인텔이 설계한 알고리즘이 모든 문제를 해결해줄까?

한줄 요약: 하이퍼쓰레딩? 말이 쉽지.

PS: 이 글은 제가 2011년 7월 25일 작성한 글을 옮겨온 것입니다.