프로세서가 데이터를 이동시키는 방법




 

최근의 마이크로프로세서는 트랜지스터가 천억 개 이상 있다. 만약 이 수많은 트랜지스터 중 하나를 따라 걸어간다고 하면 완전히 길을 잃을 수도 있을 것이다. 그러나 예전이나 지금이나 프로세서가 기본적인 기능을 수행하는 방법에는 변함이 없다. 마이크로프로세서에는 많게는 8개의 실행 코어(core)와 다수의 캐시(cache)가 있을 수 있지만, 단일 코어를 갖는 펜티엄 III 프로세서와 마찬가지로 모두 어떻게 데이터를 장애 없이 빠르게 전송하느냐 하는 문제를 갖고 있다.

 

프로세서와 프로세서에 연결된 캐시는 동일한 인터페이서를 사용해 컴퓨터의 정보에 접근한다. 해당 코드로 처리된 프로그램 코드나 데이터는 컴퓨터의 최대 버스 속도로 칩 안팎을 이동한다. 컴퓨터 아키텍처는 대부분 프로세서가 동작을 완료하지 않고도 클럭 사이클(컴퓨터가 어떤 일을 할 수 있는 최소한의 시간)을 최소화함으로써 병목현상을 줄인다.

 

BIU(Bus Interface Unit)를 통해 프로세서로 정보를 입력하면 BIU는 정보를 복제하고 복사본 하나를 프로세서 코언 안에 있는 CPU의 가장 가까운 데이터 캐시로 전송한다. BIU는 프로그램 코드를 레벨 1 명령어 캐시 또는 1-캐시로 전송하고, 코드에서 사용할 데이터를 또 다른 L1 캐시인 데이터 캐시(D-cache)로 전송한다.

 

페치(fetch)/디코드(decode) 장치가 1-캐시에서 명령을 불러올 동안 BTB(Branch Target Buffer)는 각 명령을 별도의 버퍼에 저장된 것과 비교해 이전에 사용한 명령이 있는지 알아본다. BTB는 특히 프로그램 실행이 두 경로 중 하나를 따를 수 있는 상황인 분기(branching)를 포함하고 있는 명령이 잇는지 찾는다. BTB가 분기 명령을 찾으면 과거 경험을 기준으로 어느 경로를 택할지 예측한다. 예측치는 92%이상 정확하다.

 

BTB가 예측한 순서대로 페치/디코드 장치가 명령을 불러오면 병렬로 작동하는 3개의 디코더는 좀 더 복잡한 명령을 작은 마이크로 연산(micro-operations)μops로 쪼갠다. 배치(dispatch)/실행(execution) 장치는 상위 레벨의 단일 명령을 처리하는 것보다 여러 개의 μops를 더 빠르게 처리한다.

 

디코드(decode) 장치는 모든 μops를 리오더 버퍼(Reorder buffer)라고도 하는 명령 풀(pool)로 보낸다. 여기에는 정수와 관련된 연산을 모두 처리하는 ALU(Arithmetic Logic Units)가 두 개 들어 있다. ALUBTB가 예측한 순서대로 μops를 포함하고 헤드와 꼬리가 있는 원형 버퍼(circular buffer)를 사용한다.

 

배치/실행 장치는 버퍼의 각 μop을 검사하여 처리에 필요한 정보가 모두 있는지 확인하고, 처리 준비가 완료된 μop를 발견하면 이를 실행해 그 결과를 마이코로옵(micro-op) 자체에 저장하며, 완료도 표기한다.

 

μop이 메모리에서 데이터가 필요하면 실행 장치는 이를 건너뛰고 프로세서는 L1 캐시 가까이에 있는 정보를 찾는다. 그곳에 데이터가 없으면 프로세서는 다음 캐시 레벨인 L2를 확인한다. 캐시의 크기와 구조는 프로세서 설계에 따라 다르지만 캐시에서 데이터를 불러오는 데 필요한 용량과 시간에서 각 캐시의 레벨이 증가한다.

 

정보를 불러올 동안 실행 장치는 가만히 있는 것이 아니라 버퍼의 각 μop을 검사해 실행할 수 있는지 본다. 이를 예측 실행(speculative execution)이라고 하는데, 원형 버퍼에서 μops의 순서가 BTB의 분기 예측을 따르기 때문이다. 실행 장치는 최대 5개의 μop을 동시에 처리한다. 실행장치가 버퍼의 끝에 도달하면 헤드 부분에서 다시 시작하여 실행해야 할 데이터를 수신한 μop이 있는지 모두 재확인한다.

 

연산에 3.14.333333과 같은 부동 소수점 숫자가 있으면 ALU는 이러한 숫자를 빠르게 처리할 수 있는 부동 소수점 연산 장치로 작업을 넘긴다.

 

지연되었던 μop이 최종 처리되면 실행 장치는 이 결과를 BTB가 예측한 결과와 비교한다. 예측이 실패한 경우 JEU(Jump Execution Unit)라는 구성요소는 마지막 μop의 끝 표시(end marker)를 잘못 예측한 μop으로 옮긴다. 이는 끝 표시 뒤에 있는 μop를 모두 무시하라는 뜻이며 새로운 μop으로 대체할 수 있다는 의미이다. BTB는 예측이 잘못되었음을 알게 되고, 이 정보를 미래 예측에 사용한다.

 

한편 리타이어먼트(retirement) 장치도 원형 버퍼를 검사한다. 이 장치는 먼저 버퍼의 헤드에 있는 μop이 실행되었는지 확인하고, 그렇지 않을 경우 처리가 완료될 때까지 계속 확인한다. 그런 다음 두 번째, 세 번째 μop을 검사한다. 이미 처리가 되었다면 최대 3개의 결과값을 저장 버퍼로 전송한다. 여기서 예측 장치는 결과가 시스템 RAM으로 전송되기 전에 마지막으로 한 번 더 확인한다.

 


+ Recent posts