본문으로 이동

마이크로아키텍처

위키백과, 우리 모두의 백과사전.
인텔 코어 2 마이크로아키텍처의 다이어그램

일렉트로닉스, 컴퓨터 과학컴퓨터 공학에서 마이크로아키텍처(microarchitecture) 또는 컴퓨터 조직(computer organization)은 주어진 명령어 집합(ISA)이 특정 프로세서에서 구현되는 방식을 말하며, 종종 μarch 또는 uarch로 줄여 쓰기도 한다.[1] 하나의 명령어 집합은 서로 다른 마이크로아키텍처로 구현될 수 있으며,[2][3] 주어진 설계의 목표나 기술의 변화에 따라 구현 방식이 달라질 수 있다.[4]

컴퓨터 구조는 마이크로아키텍처와 명령어 집합의 조합이다.

명령어 집합과의 관계

[편집]
단일 버스를 중심으로 구성된 마이크로아키텍처

ISA어셈블리어 프로그래머나 컴파일러 제작자가 바라보는 프로세서의 프로그래밍 모델과 거의 동일하다. ISA에는 명령어, 실행 모델, 프로세서 레지스터, 주소 및 데이터 형식 등이 포함된다. 마이크로아키텍처는 프로세서의 구성 요소들과, ISA를 구현하기 위해 이들이 어떻게 서로 연결되고 상호 작용하는지를 포함한다.

기계의 마이크로아키텍처는 대개 단일 게이트와 레지스터부터 완전한 산술 논리 장치(ALU) 및 더 큰 요소에 이르기까지 기계의 다양한 마이크로아키텍처 요소의 상호 연결을 설명하는 (다소 상세한) 다이어그램으로 표현된다. 이러한 다이어그램은 일반적으로 데이터패스(데이터가 배치되는 곳)와 제어 경로(데이터를 조종한다고 할 수 있는 곳)를 분리한다.[5]

시스템을 설계하는 사람은 일반적으로 특정 마이크로아키텍처를 일종의 데이터 흐름도로 그린다. 블록 다이어그램과 마찬가지로, 마이크로아키텍처 다이어그램은 산술 논리 장치레지스터 파일과 같은 마이크로아키텍처 요소를 단일 회로 기호로 보여준다. 일반적으로 다이어그램은 이러한 요소를 화살표, 굵은 선 및 가는 선으로 연결하여 세-상태 버스(세-상태 버퍼가 필요한 경우), 단방향 버스(단순한 컴퓨터의 주소 버스가 항상 기억 장치 주소 레지스터에 의해 구동되는 것과 같이 항상 단일 소스에 의해 구동됨) 및 개별 제어선을 구분한다. 매우 단순한 컴퓨터는 단일 데이터 버스 조직을 가지며, 하나의 세-상태 버스를 갖는다. 더 복잡한 컴퓨터의 다이어그램은 대개 여러 개의 세-상태 버스를 보여주며, 이는 기계가 더 많은 작업을 동시에 수행하는 데 도움을 준다.

각 마이크로아키텍처 요소는 다시 이를 구현하는 데 사용되는 논리 게이트의 상호 연결을 설명하는 회로도로 표현된다. 각 논리 게이트는 다시 특정 논리 가족에서 이를 구현하는 데 사용되는 트랜지스터의 연결을 설명하는 회로도로 표현된다. 서로 다른 마이크로아키텍처를 가진 기계라도 동일한 명령어 집합을 가질 수 있으며, 따라서 동일한 프로그램을 실행할 수 있다. 반도체 제조 기술의 발전과 함께 새로운 마이크로아키텍처 및 회로 솔루션이 도입됨으로써, 최신 세대의 프로세서는 동일한 ISA를 사용하면서도 더 높은 성능을 달성할 수 있다.

원칙적으로 단일 마이크로아키텍처는 마이크로코드를 약간만 변경하여 여러 개의 서로 다른 ISA를 실행할 수 있다.

측면

[편집]
인텔 80286 마이크로아키텍처

파이프라인데이터패스는 오늘날 마이크로아키텍처에서 가장 일반적으로 사용되는 데이터패스 설계이다. 이 기술은 대부분의 현대적인 마이크로프로세서, 마이크로컨트롤러DSP에서 사용된다. 파이프라인 아키텍처는 조립 라인과 마찬가지로 여러 명령어가 실행 단계에서 겹치도록 허용한다. 파이프라인은 마이크로아키텍처 설계의 기본이 되는 몇 가지 서로 다른 단계로 구성된다.[5] 이러한 단계에는 명령어 페치(fetch), 명령어 디코드, 실행 및 라이트백(write back) 등이 포함된다. 일부 아키텍처에는 메모리 접근과 같은 다른 단계가 포함되기도 한다. 파이프라인의 설계는 핵심적인 마이크로아키텍처 작업 중 하나이다.

실행 장치 또한 마이크로아키텍처에 필수적이다. 실행 장치에는 산술 논리 장치(ALU), 부동소수점 장치(FPU), 로드/스토어 장치, 분기 예측 및 SIMD가 포함된다. 이러한 장치들은 프로세서의 연산이나 계산을 수행한다. 실행 장치의 수, 지연 시간(latency) 및 처리량(throughput)의 선택은 핵심적인 마이크로아키텍처 설계 작업이다. 시스템 내 메모리의 크기, 지연 시간, 처리량 및 연결성 또한 마이크로아키텍처상의 결정 사항이다.

메모리 컨트롤러와 같은 주변기기를 포함할지 여부와 같은 시스템 수준의 설계 결정도 마이크로아키텍처 설계 과정의 일부로 간주될 수 있다. 여기에는 이러한 주변기기의 성능 수준과 연결성에 대한 결정이 포함된다.

특정 성능 수준을 달성하는 것이 주 목표인 아키텍처 설계와 달리, 마이크로아키텍처 설계는 다른 제약 조건에 더 세심한 주의를 기울인다. 마이크로아키텍처 설계 결정은 시스템에 들어가는 요소에 직접적인 영향을 미치기 때문에 칩 면적/비용, 전력 소비, 논리 복잡성, 연결 용이성, 제조 가능성, 디버깅 용이성 및 테스트 가능성 등의 문제에 주의를 기울여야 한다.

마이크로아키텍처 개념

[편집]

명령 주기

[편집]

프로그램을 실행하기 위해 모든 단일 칩 또는 다중 칩 CPU는 다음 과정을 거친다.

  1. 명령어를 읽고 해석(디코드)한다.
  2. 명령어를 처리하는 데 필요한 관련 데이터를 찾는다.
  3. 명령어를 처리한다.
  4. 결과를 써낸다.

명령 주기는 전원이 꺼질 때까지 계속해서 반복된다.

다중 주기 마이크로아키텍처

[편집]

역사적으로 초기 컴퓨터는 다중 주기(multicycle) 설계였다. 가장 작고 저렴한 컴퓨터들은 여전히 이 기술을 사용하는 경우가 많다. 다중 주기 아키텍처는 대개 가장 적은 수의 논리 요소를 사용하며 적절한 양의 전력을 소비한다. 결정론적인 타이밍과 높은 신뢰성을 갖도록 설계될 수 있다. 특히 조건부 분기나 인터럽트가 발생할 때 지연(stall)될 파이프라인이 없다. 그러나 다른 마이크로아키텍처는 동일한 논리 가족을 사용하면서도 단위 시간당 더 많은 명령어를 수행하는 경우가 많다. "성능 향상"을 논할 때, 그 향상은 종종 다중 주기 설계와 비교한 상대적인 것이다.

다중 주기 컴퓨터에서 기계는 여러 클럭 주기에 걸쳐 네 단계를 순차적으로 수행한다. 일부 설계는 교차하는 클럭 에지에서 연속적인 단계를 완료함으로써 두 클럭 주기 만에 시퀀스를 수행할 수 있으며, 더 긴 연산은 메인 주기 외부에서 발생할 수도 있다. 예를 들어, 첫 번째 주기의 상승 에지에서 1단계, 첫 번째 주기의 하강 에지에서 2단계가 수행되는 방식이다.

제어 논리에서 주기 카운터, 주기 상태(높음 또는 낮음) 및 명령어 디코드 레지스터의 비트 조합은 컴퓨터의 각 부분이 정확히 무엇을 해야 하는지를 결정한다. 제어 논리를 설계하기 위해 각 명령어의 각 주기에서 컴퓨터의 각 부분에 전달되는 제어 신호를 설명하는 비트 테이블을 작성할 수 있다. 그런 다음 이 논리 테이블을 테스트 코드를 실행하는 소프트웨어 시뮬레이션에서 테스트할 수 있다. 논리 테이블이 메모리에 배치되어 실제 컴퓨터를 실행하는 데 사용된다면 이를 마이크로프로그램이라고 한다. 일부 컴퓨터 설계에서 논리 테이블은 일반적으로 논리를 최적화하는 컴퓨터 프로그램을 사용하여 논리 게이트로 만들어진 조합 논리 형태로 최적화된다. 초기 컴퓨터는 모리스 윌크스가 이 테이블 방식의 접근법을 발명하고 이를 마이크로프로그래밍이라고 부르기 전까지 제어를 위해 임시방편적인(ad-hoc) 논리 설계를 사용했다.[6]

실행 속도 향상

[편집]

이 단순해 보이는 일련의 단계들을 복잡하게 만드는 사실은, 캐싱, 기본 메모리하드 디스크와 같은 비휘발성 저장 장치(프로그램 명령어와 데이터가 상주하는 곳)를 포함하는 메모리 계층 구조가 항상 프로세서 자체보다 느려왔다는 점이다. 단계 (2)는 컴퓨터 버스를 통해 데이터가 도착하는 동안 종종 (CPU 관점에서) 긴 지연을 발생시킨다. 이러한 지연을 최대한 피하기 위한 설계에 상당한 양의 연구가 투입되었다. 수년 동안 핵심 목표는 더 많은 명령어를 병렬로 실행하여 프로그램의 유효 실행 속도를 높이는 것이었다. 이러한 노력으로 복잡한 논리 및 회로 구조가 도입되었다. 초기에는 이러한 기술에 필요한 회로의 양 때문에 고가의 메인프레임이나 슈퍼컴퓨터에서만 구현될 수 있었다. 반도체 제조가 진보함에 따라 이러한 기술들이 점차 단일 반도체 칩에서 구현될 수 있게 되었다. 무어의 법칙을 참조하라.

명령어 집합의 선택

[편집]

명령어 집합은 수년 동안 원래 매우 단순한 것에서 (다양한 측면에서) 때로는 매우 복잡한 것으로 변화해 왔다. 최근 몇 년 동안은 로드-스토어 아키텍처, VLIWEPIC 아키텍처 유형이 유행했다. 데이터 병렬성을 다루는 아키텍처로는 SIMD벡터 프로세서가 있다. CPU 아키텍처의 부류를 나타내는 데 사용되는 일부 명칭은 그다지 서술적이지 않은데, 특히 CISC라는 명칭이 그러하다. 소급하여 "CISC"라고 명명된 많은 초기 설계들은 사실 여러 측면에서 현대의 RISC 프로세서보다 현저히 단순하다.

그러나 명령어 집합 구조의 선택은 고성능 장치를 구현하는 복잡성에 큰 영향을 미칠 수 있다. 첫 RISC 프로세서를 개발하는 데 사용된 주요 전략은 개별적인 의미론적 복잡성을 최소화하면서 높은 인코딩 규칙성과 단순성을 결합하여 명령어를 단순화하는 것이었다. 이러한 균일한 명령어는 파이프라인 방식으로 쉽게 페치, 디코드 및 실행되었으며, 높은 동작 주파수에 도달하기 위해 논리 레벨의 수를 줄이는 단순한 전략이었다. 명령어 캐시 메모리는 높은 동작 주파수와 본질적으로 낮은 코드 밀도를 보상했으며, (느린) 메모리 접근을 최대한 줄이기 위해 대규모 레지스터 세트가 사용되었다.

명령어 파이프라인

[편집]

성능을 향상시키기 위한 초기이자 가장 강력한 기술 중 하나는 명령어 파이프라인의 사용이다. 초기 프로세서 설계는 다음 명령어로 넘어가기 전에 한 명령어에 대해 위의 모든 단계를 수행했다. 회로의 많은 부분이 어느 한 단계에서 유휴 상태로 남게 되었다. 예를 들어, 명령어 디코딩 회로는 실행 중에 유휴 상태가 되는 식이었다.

파이프라인은 여러 명령어가 동시에 프로세서를 통과하도록 허용함으로써 성능을 향상시킨다. 동일한 기본 예시에서, 프로세서는 마지막 명령어가 결과를 기다리는 동안 새 명령어의 디코드(1단계)를 시작한다. 이를 통해 한 번에 최대 4개의 명령어가 "비행 중(in flight)"일 수 있게 되어 프로세서가 4배 빠른 것처럼 보이게 한다. 어떤 한 명령어가 완료되는 데 걸리는 시간은 여전히 동일하지만(여전히 4단계가 필요함), CPU 전체적으로는 명령어를 훨씬 더 빨리 "완료(retire)"시킨다.

RISC는 명령어 프로세스의 각 단계를 깔끔하게 분리하고 각 단계가 동일한 시간(한 주기)이 걸리도록 함으로써 파이프라인을 더 작고 구축하기 쉽게 만든다. 프로세서 전체는 조립 라인 방식으로 작동하며, 한쪽에서 명령어가 들어오고 다른 쪽에서 결과가 나온다. 고전적 RISC 파이프라인의 복잡성이 줄어든 덕분에 파이프라인 코어와 명령어 캐시를 CISC 설계에서 코어만 들어갈 수 있었던 동일한 크기의 다이(die)에 배치할 수 있었다. 이것이 RISC가 더 빨랐던 진짜 이유였다. SPARCMIPS와 같은 초기 설계는 동일한 클럭 속도와 가격에서 인텔모토로라 CISC 솔루션보다 10배 이상 빠른 속도로 실행되는 경우가 많았다.

파이프라인은 결코 RISC 설계에만 국한되지 않는다. 1986년경 최고 사양의 VAX 구현체(VAX 8800)는 고도로 파이프라인된 설계였으며, 이는 최초의 상업용 MIPS 및 SPARC 설계보다 약간 앞선 것이었다. 오늘날 대부분의 현대적 CPU(임베디드 CPU 포함)는 파이프라인화되어 있으며, 파이프라인이 없는 마이크로코드 CPU는 면적이 극도로 제한된 임베디드 프로세서에서만 볼 수 있다. VAX 8800부터 현대의 인텔 및 AMD 프로세서에 이르는 대형 CISC 기계들은 마이크로코드와 파이프라인을 모두 사용하여 구현된다. 파이프라인과 캐싱의 개선은 프로세서 성능이 기반이 되는 회로 기술과 보조를 맞출 수 있게 해준 두 가지 주요 마이크로아키텍처적 진보이다.

캐시

[편집]

칩 제조 기술의 발전으로 다이에 더 많은 회로를 배치할 수 있게 되자 설계자들은 이를 활용할 방법을 찾기 시작했다. 가장 일반적인 방법 중 하나는 다이에 점점 더 많은 양의 캐시 메모리를 추가하는 것이었다. 캐시는 매우 빠르고 비싼 메모리이다. 기본 메모리와 "통신"하는 데 필요한 많은 주기와 달리 몇 주기 만에 접근할 수 있다. CPU에는 캐시 읽기 및 쓰기를 자동화하는 캐시 컨트롤러가 포함되어 있다. 데이터가 이미 캐시에 있다면 거기서 접근하여 상당한 시간을 절약할 수 있지만, 그렇지 않다면 캐시 컨트롤러가 이를 읽어오는 동안 프로세서는 "지연"된다.

RISC 설계는 1980년대 중후반부터 대개 총 4KB 정도의 캐시를 추가하기 시작했다. 이 수치는 시간이 지나면서 증가하여 현재 일반적인 CPU는 최소 2MB를 보유하고 있으며, 더 강력한 CPU는 4, 6, 12MB 또는 심지어 32MB 이상을 장착하기도 한다. 최근 출시된 EPYC Milan-X 라인업은 메모리 계층 구조의 여러 수준으로 구성된 최대 768MB의 캐시를 탑재하고 있다. 일반적으로 캐시가 많을수록 지연이 줄어들어 성능이 향상된다.

캐시와 파이프라인은 완벽한 조화를 이루었다. 이전에는 오프칩(off-chip) 메모리의 접근 지연 시간보다 빠르게 실행될 수 있는 파이프라인을 구축하는 것이 큰 의미가 없었다. 대신 온칩(on-chip) 캐시 메모리를 사용함으로써 파이프라인이 캐시 접근 지연 시간만큼의 훨씬 짧은 시간 속도로 실행될 수 있게 되었다. 이를 통해 프로세서의 동작 주파수는 오프칩 메모리의 주파수보다 훨씬 빠른 속도로 증가할 수 있었다.

분기 예측

[편집]

명령어 수준 병렬성을 통해 더 높은 성능을 달성하는 데 있어 한 가지 장벽은 분기로 인한 파이프라인 지연 및 플러시(flush)이다. 보통 조건부 분기가 실행될지 여부는 조건부 분기가 레지스터의 결과에 의존하기 때문에 파이프라인의 후반부에서야 알 수 있다. 프로세서의 명령어 디코더가 조건부 분기 명령어를 만났음을 파악한 시점부터 결정적인 레지스터 값을 읽을 수 있는 시점까지 파이프라인은 몇 주기 동안 지연되어야 하며, 만약 지연되지 않고 분기가 실행된다면 파이프라인을 비워야(flush) 한다. 클럭 속도가 높아짐에 따라 파이프라인의 깊이도 함께 깊어지며, 일부 현대 프로세서는 20단계 이상의 단계를 가질 수 있다. 평균적으로 실행되는 명령어 5개 중 하나는 분기이므로, 아무런 조치가 없다면 매우 많은 양의 지연이 발생한다.

분기 예측투기적 실행과 같은 기술은 이러한 분기 패널티를 줄이기 위해 사용된다. 분기 예측은 하드웨어가 특정 분기가 실행될지에 대해 근거 있는 추측을 하는 것이다. 실제로는 분기의 한쪽 또는 다른 쪽이 다른 쪽보다 훨씬 더 자주 호출된다. 현대적인 설계는 과거 분기 결과를 감시하여 미래를 더 높은 정확도로 예측하는 상당히 복잡한 통계적 예측 시스템을 갖추고 있다. 이 추측을 통해 하드웨어는 레지스터 읽기를 기다리지 않고 명령어를 미리 가져올(prefetch) 수 있다. 투기적 실행은 예측된 경로의 코드를 단순히 미리 가져오는 것뿐만 아니라, 분기 여부가 확정되기 전에 실제로 실행까지 하는 한 단계 나아간 기술이다. 추측이 맞았을 때는 더 나은 성능을 낼 수 있지만, 추측이 틀렸을 때는 명령어를 취소해야 하므로 막대한 패널티의 위험이 있다.

슈퍼스칼라

[편집]

위에서 설명한 개념들을 지원하는 데 필요한 모든 추가적인 복잡성과 게이트에도 불구하고, 반도체 제조의 발전은 곧 더 많은 논리 게이트의 사용을 가능하게 했다.

위의 개요에서 프로세서는 한 번에 단일 명령어의 일부를 처리한다. 여러 명령어가 동시에 처리된다면 컴퓨터 프로그램은 더 빨리 실행될 수 있다. 이것이 바로 ALU와 같은 기능 장치를 복제하여 슈퍼스칼라 프로세서가 달성하는 바이다. 기능 장치의 복제는 단일 발행(single-issue) 프로세서의 다이 면적이 더 이상 안정적으로 제조할 수 있는 한계에 부딪히지 않게 되었을 때 비로소 가능해졌다. 1980년대 후반부터 슈퍼스칼라 설계가 시장에 등장하기 시작했다.

현대적인 설계에서는 대개 두 개의 로드 장치, 한 개의 스토어(많은 명령어는 저장할 결과가 없음), 두 개 이상의 정수 연산 장치, 두 개 이상의 부동소수점 장치, 그리고 종종 어떤 형태의 SIMD 장치를 찾아볼 수 있다. 명령어 발행 논리는 메모리에서 방대한 명령어 목록을 읽어 들여 그 시점에 유휴 상태인 서로 다른 실행 장치에 전달함으로써 복잡성이 증가한다. 결과는 마지막에 수집되어 다시 정렬된다.

비순차적 명령어 처리

[편집]

캐시의 추가는 메모리 계층 구조에서 데이터를 가져오기를 기다림으로써 발생하는 지연의 빈도나 기간을 줄여주지만, 이러한 지연을 완전히 제거하지는 못한다. 초기 설계에서 캐시 미스는 캐시 컨트롤러가 프로세서를 지연시키고 기다리게 만들었다. 물론 그 시점에 데이터가 캐시에 준비된 프로그램의 다른 명령어가 있을 수 있다. 비순차적 명령어 처리는 이전 명령어가 캐시를 기다리는 동안 준비된 명령어를 처리할 수 있게 허용하며, 나중에 결과를 재정렬하여 모든 것이 프로그램된 순서대로 일어난 것처럼 보이게 한다. 이 기술은 또한 지연 시간이 긴 부동소수점 연산이나 다른 다중 주기 연산의 결과를 기다리는 명령어와 같은 다른 피연산자 의존성 지연을 피하기 위해서도 사용된다.

레지스터 이름 변경

[편집]

레지스터 이름 변경은 프로그램 명령어들이 동일한 레지스터를 재사용하기 때문에 발생하는 불필요한 직렬 실행을 피하기 위해 사용되는 기술을 말한다. 동일한 레지스터를 사용하는 두 그룹의 명령어가 있다고 가정하자. 한 세트의 명령어가 레지스터를 다른 세트에 넘겨주기 위해 먼저 실행되어야 하지만, 다른 세트에 다른 유사한 레지스터를 할당한다면 두 세트의 명령어를 병렬로(또는 연속적으로) 실행할 수 있다.

다중 처리 및 멀티스레딩

[편집]

컴퓨터 설계자들은 CPU 동작 주파수와 DRAM 접근 시간 사이의 커지는 불일치로 인해 난관에 봉착했다. 하나의 프로그램 내에서 명령어 수준 병렬성(ILP)을 활용하는 어떤 기술도 기본 메모리에서 데이터를 가져와야 할 때 발생하는 긴 지연을 보상할 수 없었다. 또한, 더 진보된 ILP 기술에 필요한 방대한 트랜지스터 수와 높은 동작 주파수는 더 이상 저렴하게 냉각할 수 없는 수준의 전력 소모를 요구했다. 이러한 이유로 새로운 세대의 컴퓨터들은 단일 프로그램이나 프로그램 스레드 외부에서 존재하는 더 높은 수준의 병렬성을 활용하기 시작했다.

이러한 경향은 때때로 처리량 컴퓨팅(throughput computing)으로 알려져 있다. 이 아이디어는 온라인 트랜잭션 처리가 단일 트랜잭션의 실행 속도뿐만 아니라 방대한 수의 트랜잭션을 처리하는 능력을 강조했던 메인프레임 시장에서 유래했다. 지난 10년 동안 네트워크 라우팅 및 웹 서버 서비스와 같은 트랜잭션 기반 애플리케이션이 크게 증가함에 따라, 컴퓨터 산업은 용량과 처리량 문제를 다시 강조하게 되었다.

이러한 병렬성이 달성되는 한 가지 기술은 여러 개의 CPU를 가진 컴퓨터 시스템인 다중 처리 시스템을 통한 것이다. 한때 고성능 메인프레임슈퍼컴퓨터의 전유물이었으나, 소규모(2~8개) 다중 프로세서 서버는 이제 소규모 비즈니스 시장에서 흔해졌다. 대기업의 경우 대규모(16~256개) 다중 프로세서가 일반적이다. 1990년대 이후로는 여러 개의 CPU를 가진 개인용 컴퓨터도 등장했다.

반도체 기술의 발전으로 트랜지스터 크기가 더욱 축소됨에 따라, 동일한 실리콘 칩에 여러 개의 CPU가 구현된 멀티 코어 CPU가 등장했다. 초기에는 더 단순하고 작은 CPU를 하나의 실리콘에 여러 개 배치할 수 있는 임베디드 시장용 칩에서 사용되었다. 2005년경에는 반도체 기술을 통해 두 개의 고성능 데스크톱 CPU를 갖춘 CMP 칩을 대량 생산할 수 있게 되었다. 썬 마이크로시스템즈울트라스팍 T1과 같은 일부 설계는 하나의 실리콘 조각에 더 많은 프로세서를 넣기 위해 더 단순한(스칼라, 순차적) 설계로 회귀하기도 했다.

최근에 더 인기를 끌고 있는 또 다른 기술은 멀티스레딩이다. 멀티스레딩에서 프로세서가 느린 시스템 메모리로부터 데이터를 가져와야 할 때, 데이터가 도착하기를 기다리며 지연되는 대신 실행 준비가 된 다른 프로그램이나 프로그램 스레드로 전환한다. 이것이 특정 프로그램이나 스레드의 속도를 높이지는 않지만, CPU가 유휴 상태인 시간을 줄여 전체 시스템 처리량을 높인다.

개념적으로 멀티스레딩은 운영 체제 수준의 문맥 교환과 동일하다. 차이점은 멀티스레드 CPU가 문맥 교환에 통상적으로 필요한 수백 또는 수천 클럭 주기가 아닌 단 한 클럭 주기 만에 스레드 전환을 할 수 있다는 점이다. 이는 각 활성 스레드에 대해 상태 하드웨어(레지스터 파일프로그램 카운터 등)를 복제함으로써 달성된다.

한 단계 더 나아간 발전은 동시 멀티스레딩이다. 이 기술은 슈퍼스칼라 CPU가 동일한 주기에 서로 다른 프로그램/스레드의 명령어를 동시에 실행할 수 있게 한다.

같이 보기

[편집]

각주

[편집]
  1. Curriculum Guidelines for Undergraduate Degree Programs in Computer Engineering (PDF). Association for Computing Machinery. 2004. 60쪽. 2017년 7월 3일에 원본 문서 (PDF)에서 보존된 문서. Comments on Computer Architecture and Organization: Computer architecture is a key component of computer engineering and the practicing computer engineer should have a practical understanding of this topic...
  2. Murdocca, Miles; Heuring, Vincent (2007). Computer Architecture and Organization, An Integrated Approach. Wiley. 151쪽. ISBN 9780471733881.
  3. Clements, Alan. Principles of Computer Hardware 4판. 12쪽.
  4. Flynn, Michael J. (2007). An Introduction to Architecture and Machines. Computer Architecture Pipelined and Parallel Processor Design. Jones and Bartlett. 13쪽. ISBN 9780867202045.
  5. 1 2 Hennessy, John L.; Patterson, David A. (2006). Computer Architecture: A Quantitative Approach 4판. Morgan Kaufmann. ISBN 0-12-370490-1.
  6. Wilkes, M. V. (1969). The Growth of Interest in Microprogramming: A Literature Survey. ACM Computing Surveys 1. 139–145쪽. doi:10.1145/356551.356553. S2CID 10673679.