KR101497807B1 - 제로 사이클 로드 - Google Patents

제로 사이클 로드 Download PDF

Info

Publication number
KR101497807B1
KR101497807B1 KR1020130068008A KR20130068008A KR101497807B1 KR 101497807 B1 KR101497807 B1 KR 101497807B1 KR 1020130068008 A KR1020130068008 A KR 1020130068008A KR 20130068008 A KR20130068008 A KR 20130068008A KR 101497807 B1 KR101497807 B1 KR 101497807B1
Authority
KR
South Korea
Prior art keywords
register
instruction
load instruction
load
renaming
Prior art date
Application number
KR1020130068008A
Other languages
English (en)
Other versions
KR20130140582A (ko
Inventor
삼세 제라드 알. 윌리암스
존 에이치. 마이리우스
콘라도 블라스코-알루
Original Assignee
애플 인크.
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 애플 인크. filed Critical 애플 인크.
Publication of KR20130140582A publication Critical patent/KR20130140582A/ko
Application granted granted Critical
Publication of KR101497807B1 publication Critical patent/KR101497807B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

로드 연산들의 레이턴시를 줄이기 위한 시스템 및 방법. 프로세서 내의 레지스터 개명 유닛은 디코딩된 로드 명령어가 제로 사이클 로드 연산으로의 변환에 적격인지를 결정한다. 그러한 경우, 제어 논리는 더 오래된 의존 저장 명령어의 소스 피연산자와 관련된 물리 레지스터 식별자를 로드 명령어의 목적지 피연산자에 할당한다. 게다가, 레지스터 개명 유닛은 로드 명령어가 메모리로부터 저장 명령어의 소스 피연산자와 관련된 데이터를 판독하는 것을 방지하기 위해 로드 명령어에 마킹한다. 복제 개명으로 인해, 이 데이터는 물리 레지스터 파일로부터 더 새롭고 로드 명령어에 의존하는 명령어들로 전송될 수 있다.

Description

제로 사이클 로드{ZERO CYCLE LOAD}
본 발명은 마이크로프로세서에 관한 것으로서, 구체적으로는 로드 연산들의 레이턴시 및 전력의 효율적 감소에 관한 것이다.
통상적으로 마이크로프로세서들은 중첩된 파이프라인 스테이지들 및 명령어들의 비순차적 실행을 포함한다. 게다가, 마이크로프로세서들은 동시적인 멀티-스레딩을 지원하여 처리량을 증가시킬 수 있다. 이러한 기술들은 소스 코드에서의 명령어 레벨 병렬성(ILP)을 이용한다. 각각의 클럭 사이클 동안, 마이크로프로세서는 파이프라인의 각각의 스테이지에 대해 스레드당 최대 수 N개의 명령어의 유용한 실행을 이상적으로 생성하며, 여기서 N은 1보다 큰 정수이다. 그러나, 제어 의존성 및 데이터 의존성은 마이크로프로세서의 최대 처리량을 사이클당 N개의 명령어 아래로 저하시킨다.
소스 코드에서의 제어 의존성에도 불구하고 명령어들의 병렬 실행을 수행하기 위해 명령어들의 추론적 실행이 이용된다. 명령어의 피연산자가 프로그램 순서에서 더 오래된 명령어의 결과에 의존할 때 데이터 의존성이 발생한다. 데이터 의존성은 직선 코드 세그먼트 내의 후속 명령어들 사이에서 또는 후속 루프 반복들에 속하는 명령어들의 피연산자들 사이에서 나타날 수 있다. 직선 코드에서는, 기록후 판독(RAW), 판독후 기록(WAR) 또는 기록후 기록(WAW) 의존성들을 만날 수 있다. WAR 및 WAW 의존성들에도 불구하고 명령어들의 병렬 실행을 가능하게 하기 위해 레지스터 개명이 이용된다. 그러나, 진정한 의존성, 즉 RAW 의존성은 여전히 그대로 남는다. 따라서, 목적지 레지스터로서 그리고 이어서 소스 레지스터로서 반복적으로 사용되는 구조적 레지스터들(architectural registers)은 관련 소스 코드 세그먼트들에 대한 명령어 실행의 직렬화를 유발한다.
구조적 레지스터와 관련된 일반적인 RAW 의존성의 일례는 로드 명령어 또는 판독 연산이 자신의 결과들을 메모리 위치로 아직 커미트하지 않은 (프로그램 순서에서) 더 오래된 저장 명령어에 의해 변경된 메모리 위치를 판독하려고 시도하는 것이다. 이러한 타입의 RAW 의존성은 프로그램 실행 동안에 자주 발생할 수 있다. 메모리 위치의 판독은 상당한 레이턴시를 포함하며, 프로세서 처리량을 낮출 수 있다.
위의 사항을 고려할 때, 로드 연산들의 레이턴시를 효율적으로 줄이기 위한 효율적인 방법들 및 메커니즘들이 필요하다.
로드 연산들의 레이턴시를 효율적으로 줄이기 위한 시스템들 및 방법들. 일 실시예에서, 프로세서는 디코딩된 명령어들을 수신하고, 디코딩된 주어진 명령어가 제로 사이클 로드 연산에 적격인지를 결정하는 레지스터 개명 유닛을 포함한다. 적격자의 일례는 주어진 저장 명령어에 관한 주어진 로드 명령어의 예측 메모리 의존성을 포함할 수 있다. 게다가, 적격자는 주어진 물리 레지스터 번호에 대한 맵핑들의 복제 카운트를 유지하기 위해 이용 가능 지원의 검출이 존재하는 것을 포함할 수 있다. 결정이 참인 경우, 레지스터 개명 유닛은 주어진 저장 명령어의 소스 피연산자와 관련된 물리 레지스터 번호를 주어진 로드 명령어의 목적지 피연산자에 할당할 수 있다.
또한, 레지스터 개명 유닛 내의 제어 논리는 주어진 로드 명령어를 마킹하여, 그가 메모리로부터 저장 명령어의 소스 피연산자와 관련된 데이터를 판독하는 것을 방지할 수 있다. 복제 개명으로 인해, 이 데이터는 물리 레지스터 파일로부터 (프로그램 순서에서) 더 새롭고 주어진 로드 명령어에 의존하는 명령어들로 전송될 수 있다. 더 늦은 파이프라인 스테이지에서, 예측 메모리 의존성이 검증될 수 있다. 메모리 의존성이 올바른 경우, 주어진 로드 명령어는 메모리(데이터 캐시)로부터 또는 저장 버퍼로부터 피연산자 데이터를 판독하지 않고도 완전한 것으로 간주될 수 있다. 메모리 의존성이 올바르지 않은 경우, 주어진 로드 명령어 및 (프로그램 순서에서) 더 새로운 명령어들은 파이프라인으로부터 제외되고 리플레이될 수 있다.
이들 및 다른 실시예들은 아래의 설명 및 도면들을 참조하여 더 이해될 것이다.
도 1은 컴퓨터 시스템의 일 실시예의 일반화된 블록도이다.
도 2는 제로 사이클 로드 연산들과 더불어 수퍼스칼라 비순차적 실행을 수행하는 프로세서 코어의 일 실시예의 일반화된 블록도이다.
도 3은 제로 사이클 로드 연산들을 검출하기 위한 방법의 일 실시예의 일반화된 흐름도이다.
도 4는 제로 사이클 로드 연산들을 처리하기 위한 방법의 일 실시예의 일반화된 흐름도이다.
도 5는 제로 사이클 로드 연산들을 포함하는 명령어들을 커미트하기 위한 방법의 일 실시예의 일반화된 흐름도이다.
본 발명은 다양한 변경들 및 대안 형태들이 가능하지만, 본 발명의 특정 실시예들이 도면들에 예시되고, 본 명세서에서 상세히 설명될 것이다. 그러나, 도면들 및 그에 대한 상세한 설명은 본 발명을 개시되는 특정 형태로 한정하는 것을 의도하는 것이 아니라, 첨부된 청구항들에 의해 정의되는 바와 같은 본 발명의 사상 및 범위 내에 속하는 모든 변경들, 균등물들 및 대안들을 포함하는 것을 의도한다. 본원 전반에서 사용될 때, 단어 "~일(할) 수 있다(may)"는 강제의 의미(즉, 해야 한다(must)는 의미)가 아니라 허가의 의미(즉, 가능성을 갖는다는 의미)로 사용된다. 유사하게, 단어 "포함한다(include, includes)" 및 "포함하는(including)"은 포함하지만 그에 한정되지 않는다는 것을 의미한다.
다양한 유닛들, 회로들 또는 다른 컴포넌트들이 작업 또는 작업들을 수행하도록 "구성되는" 것으로 설명될 수 있다. 그러한 상황들에서, "구성되는"은 동작 동안 작업 또는 작업들을 수행하는 "회로를 갖는" 것을 일반적으로 의미하는 구조의 광범위한 기재이다. 따라서, 유닛/회로/컴포넌트는 유닛/회로/컴포넌트가 현재 온 상태가 아닌 때에도 작업을 수행하도록 구성될 수 있다. 일반적으로, "구성되는"에 대응하는 구조를 형성하는 회로는 하드웨어 회로들을 포함할 수 있다. 유사하게, 다양한 유닛들/회로들/컴포넌트들은 설명의 편의를 위해 작업 또는 작업들을 수행하는 것으로서 설명될 수 있다. 이러한 설명들은 "구성되는"이라는 표현을 포함하는 것으로 해석되어야 한다. 하나 이상의 작업을 수행하도록 구성되는 유닛/회로/컴포넌트의 기재는 그러한 유닛/회로/컴포넌트에 대해 35 U.S.C.§112, 제6 단락의 해석을 적용하지 않는 것을 명백히 의도한다.
아래의 설명에서는 본 발명의 충분한 이해를 제공하기 위해 다수의 특정 상세가 설명된다. 그러나, 이 분야의 통상의 기술자는 본 발명이 이러한 특정 상세 없이도 실시될 수 있다는 것을 알아야 한다. 일부 예들에서는 본 발명의 불명확하게 하지 않기 위해 공지 회로, 구조 및 기술은 상세히 설명되지 않았다.
도 1을 참조하면, 컴퓨터 시스템(100)의 일 실시예의 일반화된 블록도가 도시되어 있다. 도시된 바와 같이, 마이크로프로세서(110)는 하나 이상의 주변 장치(150a-150b), 및 디스크 메모리(130) 및 동적 랜덤 액세스 메모리(DRAM)(140)와 같은 외부 컴퓨터 메모리에 접속될 수 있다. 디스크 메모리(130)는 컴퓨터 시스템(100)용 운영 체제(OS)를 저장할 수 있다. 소프트웨어 애플리케이션의 명령어들은 마이크로프로세서(110) 내의 캐시 메모리 서브시스템(116) 내에 로딩될 수 있다. 소프트웨어 애플리케이션은 디스크 메모리(130), DRAM(140) 및 주변 장치들(150a-150b) 중 하나 중 하나 이상에 저장되었을 수 있다.
단일 프로세서 코어가 도시되지만, 마이크로프로세서(110)는 다수의 프로세서 코어를 포함할 수 있다. 각각의 프로세서 코어는 관련 캐시 메모리 서브시스템에 접속될 수 있다. 또한, 각각의 프로세서 코어는 다른 캐시 메모리 서브시스템을 공유할 수 있다. 예를 들어, 다수의 프로세서 코어 각각은 관련 레벨 1(L1) 캐시 및 레벨 2(L2) 캐시를 사용할 수 있으며, 게다가 다른 프로세서 코어들과 레벨 3(L3) 캐시를 공유할 수 있다. 도시된 바와 같이, 프로세서 코어(112)는 캐시 메모리 서브시스템(116)으로부터 소프트웨어 애플리케이션 명령어들을 로딩하고, 명령어들을 처리할 수 있다. 일반적으로, 소프트웨어 프로그래머들이 알고리즘 또는 방법에 따라 작업을 수행할 애플리케이션들을 작성할 때, 프로그래머들은 변수들을 이용하여 임시 및 결과 데이터를 참조한다. 이러한 데이터는 컴퓨터 메모리 내에 할당된 공간을 이용한다. 운영 체제는 소프트웨어 애플리케이션을 위한 메모리의 영역들을 할당한다.
프로세서 코어(112)는 물리 레지스터 파일 내에 다수의 물리 레지스터(114)를 포함할 수 있다. 물리 레지스터들(114)은 소프트웨어 프로그래머 및/또는 컴파일러가 소프트웨어 애플리케이션 내에서 식별할 수 있는 구조적으로 명백한 레지스터들을 포함할 수 있다. 또한, 물리 레지스터들(114)은 개명된 레지스터 식별자들에 의해 식별되는 구조적이 아닌(추론적인(speculative)) 레지스터들을 포함할 수 있다. 구조적으로 명백한 레지스터들은 주어진 명령어 세트 구조(ISA)와 연관된다. 애플리케이션의 처리 동안, 데이터는 할당된 메모리 영역들로부터 캐시 메모리 서브시스템(116) 내로 로딩될 수 있다. 물리 레지스터들(114) 중 하나 이상은 임시 데이터 및 결과 데이터를 로딩 및 저장하는 데 사용될 수 있다. 프로세서 코어(112) 내의 하드웨어는 주어진 ISA에 따라 명령어들을 처리하기 위한 회로를 포함한다. 하드웨어 회로는 구조적 레지스터들, 기능 유닛들, 파이프라인 스테이징 요소들 및 제어 논리의 관련 세트를 적어도 포함한다. ARM 명령어 세트 구조가 주어진 ISA에 대해 선택될 수 있다. 대안으로서, Alpha, PowerPC, SPARC, MIPS, x86 또는 임의의 다른 ISA가 선택될 수 있다.
주어진 ISA는 메모리의 영역들을 선언 및 할당하기 위한 방법을 선택하는 데 사용될 수 있다. 주어진 ISA는 물리 레지스터들(114)을 포함하는 마이크로프로세서(110)와 디스크 메모리(130), DRAM(140) 및 주변 장치들(150a-150b) 중 하나 이상 내의 메모리 위치들 사이에서 데이터를 전송하는 데 사용되는 선택된 어드레싱 모드를 더 결정할 수 있다. 로드 및 저장 명령어들 양쪽은 통상적으로 메모리와 마이크로프로세서(110) 사이에서 그리고 캐시 메모리 서브시스템(116)과 물리 레지스터들(114) 사이에서 데이터를 전송하는 데 사용된다. 컴퓨터 시스템(100) 내에 도시된 점선들은 로드 및 저장 연산들에 의해 수행되는 데이터 전송들의 예들을 나타낸다. 상당한 지연이 이러한 데이터 전송들 각각과 연관될 수 있다.
수퍼스칼라 마이크로 구조 내의 실행 유닛들로의 명령어들의 비순차적 발행에 더하여, 프로세서 코어(112)는 레지스터 개명을 수행하여 처리량을 증가시킬 수 있다. 하드웨어를 사용하여, 프로세서 코어(112)는 목적지 피연산자에 대해 사용되는 구조적 레지스터 식별자를 동적으로 개명한다. 목적지 피연산자와 동일한 구조적 레지스터 식별자를 갖는 소스 피연산자들이 목적지 피연산자에 대해 사용되는 동일한 개명된 레지스터 식별자를 이용하여 개명될 수 있다.
일 실시예에서, 프로세서 코어(112)는 초기 파이프라인 스테이지에서 저장 명령어들을 검출하고 적어도 관련 어드레스 피연산자 식별자들을 버퍼링하는 제어 논리를 포함한다. 초기 파이프라인 스테이지들은 명령어들을 순차적으로 처리할 수 있는 반면, 더 늦은 파이프라인 스테이지들에서는 명령어들이 비순차적으로 발행하고 실행될 수 있다. 주어진 저장 명령어의 어드레스 피연산자는 더 늦은 실행 파이프라인 스테이지에서 저장 어드레스를 생성하는 데 사용된다. 어드레스 피연산자들은 기본 레지스터 ID로서 사용되는 구조적 레지스터 식별자(ID) 및 오프셋으로서 사용되는 즉석 값을 포함할 수 있다.
초기 파이프라인 스테이지에서, 프로세서 코어(112) 내의 제어 논리는 후속 명령어들을 모니터링하여, 이들 명령어 중 하나 이상이 주어진 저장 명령어에 대한 하나 이상의 어드레스 피연산자를 변경하는지를 결정할 수 있다. 예를 들어, 어드레스 피연산자 ID는 하나 이상의 후속 명령어에서 목적지 피연산자 ID들과 매칭되는 것으로 밝혀질 수 있다. 이러한 모니터링은 비순차적 발행 및 실행 파이프라인 스테이지들 전의 파이프라인 스테이지에서 이루어질 수 있다.
제어 논리는 물리 레지스터 파일 내의 대응하는 엔트리가 할당 해제될 때까지 주어진 저장 명령어에 대한 후속 명령어들을 계속 모니터링할 수 있다. 이 엔트리는 관련된, 개명된 레지스터 식별자가 맵핑 테이블로부터 제거되고 프리 리스트(free list)로 반환되는 것에 응답하여 할당 해제될 수 있다. 예컨대, 저장 명령어에 (프로그램 순서에서) 후속하는 명령어가 주어진 저장 명령어의 소스 피연산자 식별자(소스 구조적 레지스터 식별자)와 동일한 목적지 피연산자 식별자(목적지 구조적 레지스터 식별자)를 가질 수 있다. 후속 명령어가 커미트될 때, 후속 명령어의 목적지 피연산자에 이전에 할당된 개명된 레지스터 식별자는 다른 명령어에 의한 재사용을 위해 프리 리스트 내에 배치된다. 이러한 자유로워진 개명된 레지스터 식별자는 주어진 저장 명령어의 소스 피연산자에 대해 사용되는 것과 동일한 식별자이다. 위의 조건의 검출에 응답하여, 주어진 저장 명령어에 대한 모니터링이 종료될 수 있다. 추가적인 상세들 및 일례가 간단히 제공된다.
일 실시예에서, 모니터링 동안, 제어 논리는 후속 로드 연산이 매칭 어드레스 피연산자들을 주어진 저장 명령어로서 갖고, 이러한 어드레스 피연산자들이 개재 명령어들에 의해 변경되지 않은 것으로 결정할 수 있다. 게다가, 제어 논리는 주어진 저장 명령어와 로드 명령어 사이에 동일 어드레스 피연산자들을 갖는 어떠한 다른 저장 명령어도 배치되지 않은 것으로 결정할 수 있다. 즉, 주어진 저장 명령어는 어드레스 피연산자들을 갖는 가장 새로운 저장 명령어이다. 이러한 결정에 응답하여, 이 로드 명령어와 주어진 저장 명령어 사이의 RAW 의존성의 지시가 설정 또는 표명될 수 있다. 다른 실시예에서, 적어도 명령어 태그들 및 프로그램 카운터 값들과 같은 추가적인 정보가 비교되거나 예측 테이블들을 색인하는 데 사용될 수 있다. 제어 논리는 이러한 초기 파이프라인 스테이지에서 이 로드 명령어와 주어진 저장 명령어 사이에 RAW 의존성이 존재한다는 것을 예측할 수 있다. 이러한 RAW 의존성의 결정 또는 예측은 레지스터 개명과 동일한 파이프라인 스테이지에서 이루어질 수 있다. 대안으로서, 결정 또는 예측은 레지스터 개명에 사용되는 스테이지보다 더 이른 파이프라인 스테이지에서 이루어질 수 있다. 이러한 RAW 의존성의 일례가 여기에 제공된다.
ADD r7, r3, r5
STORE [r10 + 4], r7 // 어드레스 피연산자들은 r10 및 4이다.
MOV r12, r16
LOAD r14, [r10 + 4] // 어드레스 피연산자들은 r10 및 4이다.
SUB r2, r6, r14 // r14에 대해, 저장 연산의 소스 피연산자 r7
// 로부터의 전송된 데이터를 사용한다.
ADD r11, r14, r13 // r14에 대해, 저장 연산의 소스 피연산자 r7
// 로부터의 전송된 데이터를 사용한다.
이 예에서는, 목적지 피연산자가 먼저 명령어 연상 기호 뒤에 나열되고, 하나 이상의 소스 피연산자가 이어진다. 레지스터들은 레지스터 식별자가 뒤따르는 "r"의 일반적 명명법을 사용한다. 예를 들어, 레지스터 7은 "r7"로 표시된다. 위의 예의 명령어들은 의사 코드 예 및 언어 불가지론적인 것을 의도한다. 위에서 알 수 있듯이, 로드 명령어는 저장 명령어와 동일한 어드레스 피연산자들을 갖는다. 어떠한 개재 명령어도 어드레스 피연산자들 (r10)을 변경하지 않는다. 따라서, 제어 논리는 로드 명령어가 저장 명령어에 대해 RAW 의존성을 갖는 것으로 결정할 수 있다. 다른 실시예들에서는 도시의 편의를 위해 도시되지 않은 명령어 태그들의 비교와 같은 예측 적격화가 이용될 수 있다.
RAW 의존성의 결정 또는 예측에 응답하여, 로드 명령어의 목적지 피연산자 식별자 (ID) (r14)가 저장 명령어의 소스 피연산자 ID (r7)에 대해 사용되는 것과 동일한 개명된 레지스터 식별자로 개명될 수 있다. 예를 들어, 저장 명령어의 소스 피연산자 ID (r7)이 개명된 레지스터 식별자 P44로 개명되는 경우, 로드 명령어의 목적지 피연산자 ID (r14)는 동일 식별자 (P44)로 개명될 수 있다. 유사하게, 감산 명령어 및 최소 가산 명령어 각각에 대한 소스 피연산자 ID r14는 동일한 개명된 레지스터 식별자 (P44)로 개명될 수 있다.
프로세서 코어(112) 내의 제어 논리는 로드 명령어 및 후속 명령어들을 비순차적으로 발행할 수 있다. 이 경우, 감산 명령어 및 최종 가산 명령어 각각은 로드 명령어가 완료되지 않았더라도 로드 명령어 전에, 그 동안에 또는 그 직후에 발행될 수 있다. 레지스터 식별자 r6 및 r13에 대한 소스 피연산자들이 이용 가능한 경우, 감산 명령어 및 최종 가산 명령어는 로드 명령어가 완료되는 것은 말할 것도 없고 발행되기 전에 발행될 수 있다. 이러한 명령어들은 저장 명령어에 대한 소스 피연산자 ID인 구조적 소스 레지스터 ID r7로부터 전송된 데이터와 함께 발행될 수 있다. 레지스터 개명을 사용함에 따라, 전송될 데이터는 소스 구조적 레지스터 ID r7과 관련된 개명된 레지스터 식별자 P44에 의해 식별되는 물리 레지스터에 저장될 수 있다. 따라서, 로드 명령어는 제로 사이클 연산이 된다. 로드 명령어는 온-칩 다중 레벨 캐시 계층 구조 및 오프-칩 메모리와 같은 메모리에 액세스하지 않고 완료될 수 있다.
위의 단계들이 취해지고, 로드 명령어가 제로 사이클 연산으로 변환되는 경우, 파이프라인에 대해 명령어 처리량이 증가할 수 있다. (프로그램 순서에서) 더 새롭고 로드 명령어에 의존하는 명령어들이 데이터 캐시, 저장 버퍼 또는 오프-칩 메모리로부터 로드 명령어에 대해 검색될 데이터를 기다리지 않으므로 명령어 처리량이 증가할 수 있다. 오히려, 이러한 더 새로운 의존 명령어들은 물리 레지스터 파일로부터 데이터를 수신할 수 있다. 로드 명령어들의 제로 사이클 로드 연산들로의 변환에 관한 추가적인 상세들을 계속 설명하기 전에, 컴퓨터 시스템(100) 내의 컴포넌트들의 추가적인 설명이 제공된다.
대응하는 캐시 메모리 서브시스템들에 접속된 하나 이상의 프로세서 코어를 포함하는 것에 더하여, 마이크로프로세서(110)는 인터페이스 논리(118) 및 메모리 제어기(120)도 포함할 수 있다. 다른 논리 및 인터-블록 및 인트라-블록 통신은 도시의 편의를 위해 도시되지 않는다. 마이크로프로세서(110)의 도시된 기능은 단일 집적 회로 상에 통합될 수 있다. 다른 실시예에서, 도시된 기능은 컴퓨터 마더보드 상의 칩셋 내에 통합된다. 일부 실시예들에서, 마이크로프로세서(110)는 데스크탑 또는 서버에 포함될 수 있다. 또 다른 실시예들에서, 도시된 기능은 SOC(system-on-a-chip) 상의 다른 프로세서 다이들을 갖는 반도체 다이에 통합된다.
프로세서 코어(112)는 전술한 바와 같이 주어진 ISA에 따라 명령어들을 실행하기 위한 회로를 포함할 수 있다. 일 실시예에서, 프로세서 코어(112)는 주어진 ISA의 명령어들을 처리하는 데 사용되는 수퍼스칼라, 멀티-스레디드(multi-threaded) 마이크로 구조를 포함할 수 있다. 일부 실시예들에서, 프로세서 코어는 범용 프로세서 코어이다. 다양한 다른 실시예들에서, 마이크로프로세서(110)는 디지털 신호 프로세서(DSP), 그래픽 처리 유닛(GPU), 주문형 집적 회로(ASIC) 등과 같은 하나 이상의 다른 특정 코어를 포함할 수 있다.
캐시 메모리 서브시스템(116)은 프로세서 코어(112)에 대한 메모리 레이턴시를 줄일 수 있다. 캐시 메모리 서브시스템(116)에 의해 제공되는 추가적인 메모리에 의해 달성되는 미스 레이트(miss rate)의 감소는 프로세서 코어(112)와 오프-칩 메모리 사이의 레이턴시 갭을 숨기는 것을 돕는다. 프로세서 코어(112)와 캐시 메모리 서브시스템(116) 사이의 레이턴시는 오프-칩 메모리에 대한 레이턴시보다 작지만, 이 레이턴시는 로드 명령어가 전술한 바와 같이 제로 사이클 로드 연산으로 변환되는 경우에 더 감소할 수 있다.
요청된 블록이 캐시 메모리 서브시스템(116)에서 발견되지 않는 것과 같이 캐시 미스가 발생하는 경우, 판독 요청이 생성되어 메모리 제어기(120)로 전송될 수 있다. 메모리 제어기(120)는 요청된 블록에 대응하는 어드레스를 변환하고, 판독 요청을 메모리 버스(122)를 통해 휘발성 오프-칩 DRAM(140)으로 전송할 수 있다. 메모리 제어기(120)는 메모리 채널들에 인터페이스하고 대응하는 프로토콜을 따르기 위한 제어 회로를 포함할 수 있다. 게다가, 메모리 제어기(120)는 메모리 요청들을 큐잉(queuing)하기 위한 요청 큐들을 포함할 수 있다. 오프-칩 DRAM(140)은 오프-칩 디스크 메모리(130)로부터의 데이터로 채워질 수 있다. 오프-칩 디스크 메모리(130)는 데이터의 비휘발성 랜덤 액세스 보조 저장을 제공할 수 있다. 일 실시예에서, 오프-칩 디스크 메모리(130)는 하나 이상의 하드 디스크 드라이브(HDD)를 포함할 수 있다. 다른 실시예에서, 오프-칩 디스크 메모리(130)는 반도체 디스크(SSD)를 사용한다.
컴퓨터 시스템(100) 내에는 예시적인 목적으로 2개의 주변 장치만이 도시되지만, 다른 수의 주변 장치가 마이크로프로세서(110)에 접속될 수 있다. 주변 장치들(150a-150b) 중 하나 이상은 신식 TV, 컴퓨터 모니터, 랩탑 또는 이동 장치 모니터 등을 포함하는 디스플레이일 수 있다. 디스플레이와 마이크로프로세서(110) 사이에 비디오 그래픽 서브시스템이 사용될 수 있다. 주변 장치들(150a-150b) 중 하나 이상은 키보드, 마우스, 프린터, 모뎀 등과 같은 통상적으로 사용되는 입출력 장치 중 하나일 수 있다.
이제, 도 2를 참조하면, 제로 사이클 로드 연산들과 더불어 수퍼스칼라 비순차적 실행을 수행하는 프로세서 코어(200)의 일 실시예를 나타내는 일반화된 블록도가 도시되어 있다. 프로세서 코어(200)는 명령어들의 처리를 위해 멀티 스테이지 파이프라인을 사용할 수 있다. 기능 및 제어 블록들이 특정 순서로 그리고 특정 파이프 스테이지에 도시되지만, 다른 조합들이 가능하고 고려된다. 게다가, 기능 및 제어 블록들은 둘 이상의 파이프 스테이지를 점유할 수 있다. 대부분의 예들에서는 도시의 편의를 위해 각각의 기능 블록에 대해 단일 파이프 스테이지가 도시된다.
명령어-캐시(i 캐시)(204)가 소프트웨어 애플리케이션에 대한 명령어들을 저장할 수 있다. 어드레스 선택 논리(202)에 의해 운반되는 어드레스에 의해 지시되는 하나 이상의 명령어가 i 캐시(204)로부터 인출될 수 있다. i 캐시 미스가 없는 경우에는 클럭 사이클마다 i 캐시(204)로부터 다수의 명령어가 인출될 수 있다. 어드레스는 다음 인출 예측기(206)에 의해 증가될 수 있다. 분기 방향 예측기(208)가 다음 인출 예측기(206) 및 더 늦은 파이프라인 스테이지 내의 제어 흐름 평가 논리(212) 각각에 결합될 수 있다. 예측기(208)는 다음 순차 명령어의 실행으로부터 명령어 스트림의 흐름을 변경하는 명령어들의 정보를 예측할 수 있다.
디코드 유닛(210)은 다수의 인출된 명령어의 연산 코드들을 디코딩한다. 대안으로서, 명령어들은 마이크로 연산들로 분할될 수 있다. 본 명세서에서 사용될 때, 용어 "명령어", "마이크로 연산" 및 "연산"은 교환 사용이 가능한데, 그 이유는 본 발명이 어느 쪽의 구현도 이용하는 구조와 함께 사용될 수 있기 때문이다. 일 실시예에서, 제어 흐름 평가 블록(212)은 어드레스 선택기(202)에서의 명령어들의 인출을 변경할 수 있다. 예를 들어, 무조건 분기 연산 코드와 관련된 절대 어드레스 값이 어드레스 선택기(202)로 전송될 수 있다.
개명 인트라-그룹 의존성 검출 논리(214)는 디코드 유닛(210)에 의해 디코딩되는 명령어들 사이의 의존성을 발견할 수 있다. 명령어들의 인트라-그룹은 하나 이상의 클럭 사이클 또는 파이프라인 스테이지로부터의 디코딩된 명령어들을 포함할 수 있다. 판독후 기록(WAR), 기록후 기록(WAW) 및 기록후 판독(RAW)과 같은 의존성들이 검출될 수 있다. 명령어들 사이의 의존성을 지시하는 의존성 벡터들이 생성될 수 있다.
의존성 검출 논리는 메모리 의존성(MD) 검출기(216)를 포함할 수 있다. 일부 실시예들에서, MD 검출기(216)는 저장 대 로드(STL) 메모리 의존성을 결정할 수 있다. 이러한 실시예들에서는, 주어진 저장 명령어에 대한 어드레스 피연산자들로서 사용되는 기본 레지스터 ID 및 즉석 값(오프셋 값)을 저장하기 위해 테이블이 사용될 수 있다. 게다가, 저장 명령어에 대한 소스 피연산자 레지스터 ID가 저장될 수 있다. (프로그램 순서에서) 더 새로운 명령어들에 대해, 목적지 피연산자 레지스터 ID들, 어드레스 피연산자 레지스터 ID들 및 즉석 값들이 테이블에 저장된 값들과 비교될 수 있다. MD 검출기(216)는 소정의 조건들이 충족된다는 결정에 응답하여 더 새로운 로드 명령어와 주어진 저장 명령어 사이에 STL 메모리 의존성이 존재한다는 것을 지시할 수 있다. 하나의 조건은 더 새로운 로드 명령어가 어드레스 피연산자 레지스터 ID 및 저장 명령어에 대한 어드레스 피연산자 값들과 매칭되는 어드레스 피연산자 중간 값을 갖는 것일 수 있다. 제2 조건은 어떠한 개재 명령어도 주어진 저장 명령어에 대해 테이블에 저장된 값들을 변경하지 않는 것으로 결정되는 것일 수 있다. 제3 조건은 저장 명령어가 매칭되는 어드레스 피연산자들을 갖는 로드 명령어보다 오래된 가장 새로운 저장 명령어인 것으로 결정되는 것일 수 있다. MD 검출기(216)는 로드 명령어와 주어진 저장 명령어 사이에 RAW 의존성이 존재한다는 지시를 저장할 수 있다.
또한, MD 검출기(216)는 주어진 저장 명령어의 소스 피연산자 레지스터 ID에 대해 사용되는 것과 동일한 개명된 레지스터 식별자로 로드 명령어의 목적지 피연산자 레지스터 ID를 개명하기 위한 지시를 레지스터 개명 유닛(220)으로 전송할 수 있다. 다른 실시예들에서는, 컴파일러가 코드를 분석하여, 전술한 단계들을 수행할 수 있다. 컴파일러가 더 새로운 로드 명령어와 주어진 저장 명령어 사이에 RAW 의존성이 존재하는 것으로 결정하는 경우, 컴파일러는 적어도 MD 검출기(216)에 의해 검출되도록 프로그램 코드 내에 지시를 삽입할 수 있다. 이 정보는 주어진 저장 명령어의 표명된 비트 및 소스 피연산자 레지스터 ID를 포함할 수 있다. 대안으로서, 이 정보는 주어진 저장 명령어를 식별하는 데 사용되는 표명된 비트 및 프로그램 카운터(PC) 오프셋을 포함할 수 있다. 다른 정보가 사용될 수 있다.
또 다른 실시예들에서, MD 검출기(216)는 STL 메모리 의존성에 대한 예측기를 포함할 수 있다. 그러한 실시예들에서, MD 검출기(216)는 로드 및 저장 명령어들과 관련된 적어도 프로그램 카운터(PC) 값들을 이용하여 하나 이상의 테이블을 색인할 수 있다. 부분 어드레스 태그들 및 다른 명령어 식별 정보도 테이블들을 색인하는 데 사용될 수 있다. 포화 카운터들 또는 다른 예측 정보를 저장하는 예측 테이블들을 색인하기 위해 해시 함수의 출력이 사용될 수 있다. 일부 실시예들에서, MD 검출기(216)는 이러한 어드레스 피연산자들이 개재 명령어들에 의해 변경되지 않은 것으로 결정할 수 있다. 다른 실시예들에서, MD 검출기(216)는 포화 카운터들과 같은 정정 논리로 하여금 잘못된 예측들을 설명하게 할 수 있다. 테이블들로부터 판독된 정보는 추론된 의존성들을 식별하는 데 사용될 수 있다. 추론적 RAW 메모리 의존성의 결정에 응답하여, MD 검출기(216)는 주어진 저장 명령어와 주어진 후속 로드 명령어 사이에 RAW 의존성이 존재한다는 지시를 저장할 수 있다. 또한, MD 검출기(216)는 주어진 저장 명령어의 소스 피연산자 레지스터 ID에 대해 사용되는 것과 동일한 개명된 레지스터 식별자로 로드 명령어의 목적지 피연산자 레지스터 ID를 개명하기 위한 지시를 레지스터 개명 유닛(220)으로 전송할 수 있다. 추가 실시예들에서는, STL 메모리 의존성들을 발견하기 위한 위의 방법들 및 메커니즘들의 조합이 사용될 수 있다.
맵퍼(218)는 이용 가능한 동시성, 의존성 체인들의 임계성 및 통신 페널티와 같은 팩터들을 이용하여 명령어들을 분산된 하드웨어 자원들 사이에 분할할 수 있다. 하드웨어가 물리 레지스터 식별자를 이용하여 구조적 레지스터 식별자를 개명할 때, 하드웨어는 맵핑 테이블과 같은 데이터 구조일 수 있는 맵퍼(218) 내에 맵핑을 저장한다. 본 명세서에서 사용될 때, 구조적 레지스터 또는 물리 레지스터에 대한 식별자도 번호로서 참조될 수 있다. 따라서, 구조적 레지스터 식별자도 구조적 레지스터 번호로서 참조될 수 있다. 유사하게, 물리 레지스터 식별자는 물리 레지스터 번호로서 참조될 수 있다. 구조적 레지스터 번호를 개명하는 데 사용되는 물리 레지스터 번호는 또한 개명 레지스터 번호로서 참조될 수 있다.
레지스터 개명 유닛(220)은 개명 제어 논리 및 어레이(222) 및 레지스터 복제 어레이(RDA)(224)를 포함할 수 있다. 레지스터 개명 유닛(220)은 명령어들 내의 목적지 및 소스 피연산자들 모두에서 사용되는 구조적 레지스터 식별자들을 개명하기 위해 어느 물리 레지스터 식별자들을 사용할지를 결정할 수 있다. 레지스터 개명 유닛(220)은 프리 리스트 할당기(230) 또는 개명 제어 논리(222) 내의 개명 맵핑 테이블로부터 후보 물리 레지스터 식별자들을 선택할 수 있다. 다양한 실시예들에서, RDA(224)는 복제 맵핑들의 지시를 저장하도록 구성된다. 복제 맵핑들은 로드 연산의 제로 사이클 로드 연산으로의 변환 동안에 사용될 수 있다.
레지스터 개명 유닛(220)은 로드 명령어가 제로 사이클 로드 연산으로 변환되기에 적격이라는 지시를 MD 검출기(216)로부터 수신할 수 있다. 레지스터 개명 유닛(220)은 로드 연산이 의존하는 저장 명령어의 소스 피연산자 레지스터 ID에 대해 사용되는 것과 동일한 개명 레지스터 식별자에 로드 명령어의 목적지 피연산자 레지스터 ID를 할당할 수 있다. 맵퍼(218)는 개명 레지스터 식별자에 대한 다수의 맵핑을 저장할 수 있다. 또한, RDA(224)는 개명 레지스터 식별자에 대한 복제 카운트를 저장할 수 있다. 예를 들어, 전술한 코드 예에서, 개명 레지스터 식별자 P44는 저장 명령어의 소스 피연산자 레지스터 ID (r7) 및 로드 명령어의 목적지 피연산자 레지스터 ID (r14) 양자에 대해 사용될 수 있다. 이 복제 카운트는 임의의 주어진 구조적 레지스터 식별자가 동일한 개명 레지스터 식별자에 맵핑된 횟수를 포함할 수 있다.
다양한 실시예들에서, 복제 카운트는 맵핑 시에 특정 구조적 레지스터가 이미 개명 레지스터 번호에 맵핑된 때에는 그 맵핑에 대해 증가되지 않을 수 있다. RDA(224)는 개명 레지스터 번호 및 관련 복제 카운트 양자를 저장할 수 있다. 일 실시예에서, RDA는 비교적 작은, 태그가 첨부된 완전 연합 구조로서 구현될 수 있다. RDA(224)는 개명 레지스터 번호 및 관련 복제 카운트를 저장하기 위한 임의 수의 엔트리를 가질 수 있다. 일례에서, ISA의 일 구현은 144개의 물리 레지스터 번호를 포함할 수 있으며, 따라서 8 비트 물리 레지스터 색인이 RDA의 엔트리 내에 저장되고, RDA에 액세스하는 데 사용될 수 있다. 일 실시예에서, 각각의 복제 카운트 크기는 5 비트이다. 따라서, 주어진 물리 레지스터 번호에 대한 최대 복제 수는 31이다. 그러나, 다른 복제 카운트 크기가 가능하고 선택될 수 있다.
RDA(224)는 프로세서 파이프라인에서 명령어 디스패치 전에 또는 디스패치 시에 갱신될 수 있다. MD 검출기(216)가 디코딩된 로드 명령어가 제로 사이클 로드 연산인 것으로 결정할 때, RDA(224)는 연관된 저장 명령어의 소스 피연산자 레지스터 ID 및 로드 명령어의 목적지 피연산자 레지스터 ID 각각을 개명하는 데 사용될 물리 레지스터 번호에 대한 엔트리가 이미 존재하는지를 결정하기 위해 액세스될 수 있다. 엔트리가 존재하는 경우, 주어진 개명 레지스터 번호에 현재 맵핑되지 않은 임의의 주어진 구조적 레지스터 ID가 주어진 개명 레지스터 번호에 맵핑될 때마다 관련 복제 카운트가 증가될 수 있다. RDA 내에 엔트리가 아직 존재하지 않는 경우, 엔트리가 할당될 수 있고, 관련 복제 카운트가 2에서 개시될 수 있다.
RDA(224)는 또한 프로세서 파이프라인에서 커미트 파이프라인 스테이지 동안에 갱신될 수 있다. 복제 카운트는 물리 레지스터 식별자가 명령어 커미트 동안에 임의의 주어진 구조적 레지스터에 대한 프리 리스트로 반환될 준비가 될 때마다 감소될 수 있다. 물리 레지스터 식별자는 개명 레지스터 식별자로도 참조될 수 있다. 물리 레지스터 식별자는 물리 레지스터 식별자와 관련된 맵핑 테이블 내의 엔트리가 명령어 커미트로 인해 제거 또는 무효화되는 것에 응답하여 프리 리스트로 반환될 후보가 될 수 있다. 일 실시예에서, 복제 카운트가 1로 감소하는 것에 응답하여, 복제 카운트 및 복제 맵핑들은 더 이상 저장되지 않을 수 있다.
일 실시예에서, 주어진 개명 레지스터 식별자가 관련 명령어 커미트 동안에 프리 리스트로 반환될 후보이고, 관련 복제 정보가 RDA(224) 내에 저장되지 않는 것에 응답하여, 개명 레지스터 식별자가 프리 리스트로 반환된다. 다른 실시예에서, 주어진 개명 레지스터 식별자가 프리 리스트로 반환될 후보하고, RDA(224) 내의 저장된 복제 카운트가 0으로 1만큼 감소하는 것에 응답하여, 개명 레지스터 식별자가 프리 리스트로 반환된다.
일 실시예에서, 주어진 개명 레지스터 식별자가 프리 리스트로 반환될 후보이고, 저장된 복제 카운트가 감소 후에도 여전히 1보다 큰 것에 응답하여, 개명 레지스터 식별자는 프리 리스트로 반환되지 않는다. 이 마지막 경우에, 개명 레지스터 식별자는 여전히 다수의 구조적 레지스터에 대한 복제 맵핑들을 갖는다. 일 실시예에서, RDA(224)는 복제를 추적하기 위한 자유로운 엔트리가 존재하는지를 확인하기 위해 각각의 잠재적 제로 사이클 로드 후보에 대해 검사된다. RDA(224) 내에 할당을 위한 자유로운 엔트리가 존재하지 않는 경우, 대응하는 로드 명령어는 제로 사이클 로드 연산으로 변환되지 않는다. 유사하게, 제로 사이클 로드 후보에 대해 할당된 엔트리가 존재하지만, 복제 카운트가 이미 포화된 경우, 로드 명령어는 제로 사이클 로드 연산으로 변환되지 않는다.
제로 사이클 로드 연산을 위해, 데이터 콘텐츠는 저장 명령어 소스 피연산자에 대한 데이터를 저장하는 물리 레지스터 파일 내의 물리 레지스터로부터 후속 로드 명령어로 그리고 다른 더 새로운 의존 명령어들로 전송될 수 있다. 데이터는 데이터 캐시, 저장 버퍼 또는 오프-칩 메모리로부터 판독되지 않을 수 있다. 더 새로운 의존 명령어들은 데이터 캐시, 저장 버퍼 또는 오프-칩 메모리로부터 데이터가 판독되는 것을 기다리지 않고 발행될 수 있다.
명령어들이 디코딩 및 개명된 후, 관련 엔트리들이 디스패치 큐(240)에서 할당될 수 있다. 명령어들 및 관련된 개명된 식별자들, 프로그램 카운터(PC) 값들, 의존성 벡터들, 완료를 위한 마킹들 등이 디스패치 큐(240)로 그리고 나중에 스케줄러(250)로 전송될 수 있다. 다양한 예외들이 실행 코어(260) 등에 의해 검출될 수 있다. 그 예들은 메모리 액세스들에 대한 보호 예외들, 어드레스 무변환 등을 포함한다. 예외들은 대응하는 예외 처리 루틴이 마이크로코드(242) 등에 의해 실행되게 할 수 있다.
스케줄러(250)는 실행 코어(260)에서 실행할 명령어들을 스케줄링할 수 있다. 피연산자들이 이용 가능하고, 하드웨어 자원들도 이용 가능할 때, 스케줄러(250)로부터 실행 코어(260) 내의 기능 유닛들 중 하나로 명령어가 비순차적으로 발행될 수 있다. 스케줄러(250)는 맵핑 테이블을 이용하여 또는 피연산자 바이패스 논리로부터 개명된 식별자들을 변환한 후에 물리 레지스터 파일(도시되지 않음)로부터 그의 소스 피연산자들을 판독할 수 있다. 소스 피연산자들은 실행 코어(260)에 제공될 수 있다. 실행 코어(260)는 로드 및 저장 명령어들에 대한 어드레스들을 분석할 수 있다. 또한, 실행 코어(260)는 다수의 정수, 부동 소수점 및 부울 연산 중 하나 이상을 수행할 수 있다.
실행 코어(260)는 로드/저장 유닛을 포함할 수 있다. 로드/저장 유닛은 데이터 캐시(도시되지 않음) 및 저장 버퍼(272)에 직접 또는 재배열 버퍼(rob)(270)를 통해 접속될 수 있다. 프로세서(200)는 캐시 액세스를 수행할 때 완전한 메모리 변환을 수행하는 비용을 피하기 위해 i 캐시(204) 및 데이터 캐시 각각에 대한 TLB(translation look-aside buffer)를 포함할 수 있다. 저장 버퍼(272)는 저장 명령어들에 대응하는 어드레스들을 저장할 수 있다. rob(270)는 실행 코어(260)로부터 결과들을 수신할 수 있다. 게다가, 결과들은 파이프라인 내에 이미 존재하는 의존 명령어들로의 데이터 전송을 위해 이전 파이프라인 스테이지들로 바이패스될 수 있다. rob(270)는 명령어들의 순차적 커미트 및 회수를 보증할 수 있다.
이제, 도 3을 참조하면, 제로 사이클 로드 연산들을 검출하기 위한 방법(300)의 일 실시예의 일반화된 흐름도가 도시되어 있다. 블록 302에서, 프로그램 명령어들이 처리된다. 명령어들은 컴파일되고, 메모리로부터 인출되고, 디코딩되고, 실행될 수 있다. 디코딩 후에, 주어진 명령어가 저장 명령어인 것이 검출되는 경우(조건 블록 304), 블록 306에서 저장 명령어의 적어도 어드레스 피연산자 기본 레지스터 ID, 어드레스 피연산자 즉석 값 및 소스 피연산자 레지스터 ID가 버퍼링된다. 이러한 값들은 주어진 테이블에 저장될 수 있다. 관련 프로그램 카운터(PC) 및 다른 정보도 버퍼링될 수 있다. 일 실시예에서, 이러한 정보는 메모리 의존성(MD) 검출기 내의 테이블에 버퍼링된다.
블록 308에서, (프로그램 순서에서) 후속 명령어들의 정보가 (프로그램 순서에서) 이전 저장 명령어들에 대한 버퍼링된 정보와의 잠재적 매치들에 대해 모니터링된다. 비교들을 위한 정보는 적어도 후속 명령어들의 목적지 피연산자 레지스터 ID들 및 후속 로드 명령어들의 어드레스 피연산자 기본 레지스터 ID 및 즉석 값을 포함할 수 있다. 제어 논리는 주어진 저장 명령어와 관련된 레지스터 ID와 후속 명령어와 관련된 레지스터 ID 사이의 매치를 검출할 수 있다. 레지스터 ID들은 피연산자들을 식별하는 데 사용되는 구조적 레지스터 ID들일 수 있다.
저장 명령어의 어드레스 피연산자 기본 레지스터의 변경은 즉석 값 기반 갱신일 수 있다. 전술한 코드 예를 이용하면, ADD r10, r10, #4와 같은 가산 명령어는 (프로그램 순서에서) 저장 명령어를 뒤따를 수 있다. 심벌 "#"은 즉석 값 데이터 피연산자를 나타내는 데 사용될 수 있다. 저장 명령어의 어드레스 피연산자 기본 레지스터 r10이 변경된다. 그러나, 이것은 즉석 값 기반 변경이다. 로드 명령어와 저장 명령어 사이의 개재 명령어에 의한 즉석 값 기반 변경이 아닌 다른 타입의 변경이 어드레스 피연산자 기본 레지스터 r10에 대해 행해지지 않은 경우, 즉석 값 기반 변경을 설명하기 위해 테이블 내에서 조정이 수행될 수 있다. 주어진 저장 명령어의 어드레스 피연산자 기본 레지스터가 변경된 것이 검출되고(조건 블록 310), 변경이 즉석 값 갱신에 기초하는 경우(조건 블록 311), 블록 313에서 주어진 저장 명령어에 대한 테이블 내의 특정 저장 값들이 갱신된다. 예를 들어, 저장된 어드레스 피연산자 즉석 값이 갱신될 수 있다. 위의 예를 이용하면, 주어진 저장 명령어에 대한 테이블 내의 4의 저장된 즉석 값은 테이블 내에서 ADD 명령어에 의해 사용되는 즉석 값인 4만큼 감소할 수 있다. 다른 예들에서, 어드레스 피연산자 기본 레지스터는 증가가 아니라 감소될 수 있으며, 그에 따라 테이블 내에 저장된 즉석 값이 증가될 수 있다. 변경이 즉석 값 갱신에 기초하지 않는 경우(조건 블록 311), 블록 312에서 주어진 저장 명령어에 대응하는 값들을 저장하는 테이블 엔트리가 무효화될 수 있다. 이어서, 방법(300)의 제어 흐름은 블록 A를 통해 블록 302로 복귀할 수 있다.
주어진 저장 명령어의 소스 피연산자가 변경된 것이 검출되고(조건 블록 314), 저장 명령어가 회수된 경우(조건 블록 316), 방법(300)의 제어 흐름은 블록 312로 이동한다. 이 예를 설명하기 위해, 저장 명령어의 소스 피연산자의 변경 및 경주 조건과 관련된 메모리 의존성의 다른 코드 예가 아래에 제공된다.
ADD r7, r3, r5
STORE [r10 + 4], r7 // 어드레스 피연산자들은 r10 및 4이다.
ADD r19, r24, r18
ADD r7, r20, r21 // 저장 연산 소스 피연산자가 변경된다.
LOAD r14, [r10 + 4] // 어드레스 피연산자들은 r10 및 4이다.
SUB r2, r6, r14 // r14에 대해, 저장 연산의 소스 피연산자 r7
// 로부터의 전송된 데이터를 사용한다.
ADD r7, r14, r13 // r14에 대해, 저장 연산의 소스 피연산자 r7
// 로부터의 전송된 데이터를 사용한다.
ADD r14, r22, r25 // 로드 연산 목적지 피연산자가 개서된다.
// 커미트 스테이지 동안, r7 및 r14에 의해
// 공유되는 물리 레지스터 번호를 자유
// 리스트로 반환한다.
전술한 코드 예와 유사하게, 위의 예에서 로드 명령어는 저장 명령어에 대한 메모리 의존성을 갖는다. 이 경우, 제3 가산 명령어는 저장 명령어의 소스 피연산자(r7)를 변경한다. 소스 피연산자(r7)와 관련된 개명된 레지스터 식별자를 복제본으로 마킹하는 로드 명령어와 동일한 개명 레지스터 식별자를 커미트하고 프리 리스트로 반환하는 제3 가산 명령어 사이의 파이프라인에서 경주 조건이 존재할 수 있다. 로드 명령어가 이 개명 레지스터 식별자를 복제본으로 마킹할 때, 개명 레지스터 식별자는 이미 프리 리스트를 향해 전송되는 이력 파일 내에 있을 수 있다.
위의 예를 처리하기 위한 한 가지 옵션은, 제3 가산 명령어와 같은 개재 명령어가 저장 명령어의 소스 피연산자를 변경하는 것을 검출하고, 그에 응답하여 로드 명령어가 제로 사이클 로드 연산으로 변환되는 것을 부적격화하는 것이다. 위의 예를 처리하기 위한 다른 옵션은, 개재 명령어가 저장 명령어의 소스 피연산자를 변경하는 것을 검출하고, 그에 응답하여 저장 명령어가 회수되었는지를 결정하는 것이다. 저장 명령어가 회수되지 않은 경우, 개재 명령어는 회수되지 않았다. 따라서, 개재 명령어는 저장 명령어의 소스 피연산자와 관련된 개명 레지스터 식별자가 아직 프리 리스트로 반환되게 하지 않았다. 이제 이러한 개명 레지스터 식별자의 복제 카운트가 유지될 수 있다. 유사하게, 위의 코드 예의 최종 가산 명령어로 인해 로드 명령어의 목적지 피연산자(r14)에 대해 복제 카운트가 증가될 수 있다.
방법(300)으로 돌아가서, 주어진 저장 명령어의 소스 피연산자가 변경된 것이 검출되고(조건 블록 314), 저장 명령어가 회수되지 않은 경우(조건 블록 316), 로드 명령어가 주어진 저장 명령어에 대한 메모리 의존성을 가질 수 있는지를 결정한다. 유사하게, 주어진 저장 명령어의 소스 피연산자가 변경된 것이 검출되지 않은 경우(조건 블록 314), 로드 명령어가 주어진 저장 명령어에 대한 메모리 의존성을 가질 수 있는지를 결정한다. 일부 실시예들에서 조건 블록들(310, 314, 318) 각각은 동시에 평가될 수 있다는 점에 유의한다. 예를 들어, 제어 논리 및 테이블들은 후속 명령어들과 관련된 입력들을 동시에 수신할 수 있다.
일 실시예에서는, 메모리 의존성(MD) 검출기가 로드 명령어와 관련된 정보에 관해 액세스된다. 전술한 바와 같이, MD 검출기는 후속 명령어들과 비교될 특정 저장 명령어들에 대한 정보를 유지하는 테이블을 포함할 수 있다. 대안으로서, MD 검출기는 컴파일러로부터 힌트 정보를 검출하기 위한 제어 논리를 포함할 수 있다. MD 검출기는 STL 예측기도 포함할 수 있다. 또한, MD 검출기는 이러한 대안 설계 선택들의 조합을 포함할 수 있다. MD 검출기에 액세스하는 것에 응답하여, 제어 논리 및 주어진 저장 명령어 및 다른 저장 명령어들에 대한 값들을 저장하는 테이블(들) 양자는 로드 명령어와 주어진 저장 명령어 사이에 메모리 의존성이 존재한다는 것을 지시하는 결과를 생성할 수 있다. 예를 들어, 일 실시예에서, 로드 명령어 및 주어진 저장 명령어 각각에 대한 어드레스 피연산자 기본 레지스터 ID 및 즉석 값이 매칭될 수 있다. 게다가, 저장 명령어는 매칭되는 어드레스 피연산자들을 갖는 로드 명령어보다 오래된 가장 새로운 저장 명령어인 것으로 결정될 수 있다. 로드 명령어가 주어진 저장 명령어에 의존하는 것으로 결정되는 경우(조건 블록 318), 블록 320에서 로드 명령어는 제로 사이클 로드 명령어로서 처리될 수 있다. 이어서, 제로 사이클 로드 명령어의 처리에 대한 추가적인 상세들이 제공된다.
이제, 도 4를 참조하면, 제로 사이클 로드 연산을 처리하기 위한 방법(400)의 일 실시예의 일반화된 흐름도가 도시되어 있다. 블록 402에서, 주어진 로드 명령어가 (프로그램 순서에서) 더 오래된 저장 명령어에 의존하는 것으로 결정될 수 있다. 주어진 로드 명령어는 제로 사이클 로드 명령어로 변환되기에 적격일 수 있다. 전술한 바와 같이, 하나의 조건은 더 새로운 로드 명령어가 어드레스 피연산자 레지스터 ID 및 저장 명령어에 대한 어드레스 피연산자 값들과 매칭되는 어드레스 피연산자 중간 값을 갖는 것일 수 있다. 제2 조건은 어떠한 개재 명령어도 주어진 저장 명령어에 대해 액세스된 테이블에 저장된 어드레스 피연산자들 및 소스 피연산자와 같은 값들을 변경하지 않는 것으로 결정되는 것일 수 있다. 제3 조건은 저장 명령어가 매칭되는 어드레스 피연산자들을 갖는 로드 명령어보다 오래된 가장 새로운 저장 명령어인 것으로 결정되는 것일 수 있다. 제4 조건은 이용 가능한 복제 자원들의 지시일 수 있다. 예를 들어, 저장 명령어의 소스 피연산자 레지스터 ID에 대한 개명 레지스터 번호는 RDA(224)와 같은 데이터 구조 내에 색인하는 데 사용될 수 있다. 다른 실시예들에서, STL 메모리 의존성 예측기 및/또는 컴파일러로부터의 힌트 정보가 로드 명령어와 주어진 저장 명령어 사이의 RAW 의존성을 지시하는 데 사용될 수 있다.
RDA(224) 내에서의 히트(hit)는 소스 개명 레지스터 식별자가 이미지 복제되었음을 지시할 수 있다. 미스는 소스 개명 레지스터 식별자가 아직 복제되지 않았음을 지시할 수 있다. 소스 개명 레지스터 식별자가 아직 복제되지 않았고, RDA(224)가 아직 채워지지 않은 경우, RDA(224) 내의 엔트리가 소스 개명 레지스터 식별자에 대해 할당될 수 있다. 소스 개명 레지스터 식별자가 이미 복제된 경우, 소스 개명 레지스터 식별자에 대한 복제 카운트가 주어진 임계치와 비교될 수 있다. 일 실시예에서, 임계치는 특정 카운트에 대응할 수 있다. 관련 복제 카운트가 임계치에 도달하지 않은 경우, 복제 자원들이 이용 가능하다. 관련 복제 카운트가 임계치에 도달한 경우, 복제 자원은 이용 가능하지 않다.
복제 자원이 이용 가능하지 않은 경우(조건 블록 404), 블록 406에서 로드 명령어에 대한 목적지 구조적 레지스터가 프리 리스트로부터의 개명 레지스터 식별자로 개명된다. 개명된 식별자, 관련 프로그램 카운터(PC) 값, 의존성 벡터 등은 디스패치 큐로 그리고 나중에 스케줄러로 전송될 수 있다. 블록 408에서, 다음 이용 가능 명령어가 처리될 수 있다. 다음 이용 가능 명령어는 위의 단계들과 병렬로 또는 후속 클럭 사이클에서 처리될 수 있다.
복제 자원이 이용 가능하지 않은 경우(조건 블록 404), 블록 410에서 로드 명령어의 목적지 피연산자 식별자(ID)가 가장 새로운 더 오래된 의존 저장 명령어의 소스 피연산자에 대해 사용된 개명된 레지스터 ID로 개명된다. 블록 412에서, 물리 레지스터들에 대한 복제 카운트가 갱신된다. 복제 카운트는 선택된 개명 레지스터 식별자에 현재 맵핑되지 않은 주어진 구조적 레지스터 식별자가 이 개명 레지스터 식별자에 맵핑될 때마다 증가할 수 있다. 일 실시예에서, 복제 카운트는 2의 값으로 초기화될 수 있다.
로드 명령어 및 하나 이상의 다른 명령어에 대한 개명된 식별자들은 디스패치 큐로 그리고 나중에 스케줄러로 전송될 수 있다. 관련 프로그램 카운터(PC) 값들, 의존성 벡터 등도 전송될 수 있다. 일 실시예에서, RAW 의존성은 확실한 것으로 간주되며, 로드 명령어는 완료된 것으로 마킹될 수 있다. 예를 들어, 방법(300)에서 설명된 바와 같은 MD 검출기 내의 테이블의 액세스는 불확실성을 갖지 않는 것으로 간주될 수 있으며, 따라서 로드 명령어는 후속 파이프라인 스테이지들에 의해 더 처리되지 않는다. 다른 실시예들에서, 로드 및 저장 명령어들 사이의 RAW 의존성은 불확실성을 갖지 않는 것으로 간주되지 않는다. 따라서, 로드 명령어는 완료된 것으로 마킹되지 않고, 후속 파이프라인 스테이지들에 의해 더 처리된다. 블록 414에서, 완료된 것으로 마킹되지 않을 때 로드 명령어를 포함하는 하나 이상의 명령어가 파이프라인에서 발행된다. 블록 416에서, 저장 명령어와 로드 명령어 사이의 메모리 의존성이 검증될 수 있다. 예를 들어, 분석된 어드레스 및 다른 명령어 식별 정보를 갖는 저장 버퍼 내로의 액세스가 수행될 수 있다.
메모리 의존성이 올바르지 않은 것으로 밝혀지는 경우(조건 블록 418), 블록 420에서 로드 명령어 및 로드 명령어보다 (프로그램 순서에서) 더 새로운 명령어들이 파이프라인으로부터 제외될 수 있다. 이어서, 로드 명령어는 리플레이될 수 있다. 예측된 메모리 의존성이 올바른 것으로 밝혀지는 경우(조건 블록 418), 블록 422에서 로드 명령어는 온-칩 캐시 계층 구조, 저장 버퍼 또는 오프-칩 메모리로부터 소스 피연산자와 관련된 데이터를 판독하지 않고 파이프라인에서 커미트 파이프라인 스테이지로 진행한다. 로드 명령어에 의존하는 더 새로운 명령어들은 대응하는 저장 명령어의 소스 피연산자와 관련된 물리 레지스터 파일로부터 수신된 전송 데이터와 더불어 계속될 수 있다.
이제, 도 5를 참조하면, 제로 사이클 로드 명령어를 포함하는 명령어들을 커미트하기 위한 방법(500)의 일 실시예의 일반화된 흐름도가 도시되어 있다. 설명의 목적을 위해, 이 실시예 및 전술한 방법들(300, 400)의 후속 실시예들에서의 단계들은 순차적으로 도시된다. 그러나, 다른 실시예들에서는 일부 단계들이 도시된 것과 다른 순서로 발생할 수 있고, 일부 단계들이 동시에 수행될 수 있고, 일부 단계들이 다른 단계들과 결합될 수 있고, 일부 단계들이 결여될 수 있다.
블록 502에서, 프로그램 명령어들이 커미트되고 있다. 데이터 구조 내의 명령어들의 순차적 윈도를 이용하여, 명령어들을 언제 커미트하고 회수할지를 결정할 수 있다. 예를 들어, rob(270)가 데이터 구조로서 사용될 수 있다. 메모리 명령어들이 커미트되는 것이 검출되는 경우, 관련 개명 레지스터 식별자들이 복제되었는지를 결정하기 위해 검사가 수행될 수 있다. 일례에서, 목적지 및 소스 물리 레지스터들 각각에 대한 복제의 상태를 지시하는 관련 복제 플래그 또는 필드가 명령어에 대한 다른 관련 정보와 함께 저장될 수 있다. 다른 예에서, 목적지 및 소스 개명 레지스터 식별자 각각은 RDA(224)와 같은 데이터 구조 내에 색인하는 데 사용될 수 있다. 히트는 대응하는 개명 레지스터 식별자가 이미 복제되었음을 지시할 수 있다. 미스는 대응하는 개명 레지스터 식별자가 아직 복제되지 않았음을 지시할 수 있다.
주어진 개명 레지스터 식별자가 복제되지 않은 경우(조건 블록 504), 블록 506에서 개명 레지스터 식별자가 프리 리스트로 반환된다. 그렇지 않은 경우, 블록 508에서 대응하는 개명 레지스터 식별자에 대한 복제 카운트가 감소할 수 있다. 일반적으로, 복제 카운트는 관련 개명 레지스터 식별자가 임의의 주어진 구조적 레지스터에 대한 프리 리스트로 반환될 준비가 될 때마다 감소한다. 개명 레지스터 식별자는 맵핑 테이블로부터 맵핑이 제거되는 것에 응답하여 프리 리스트로 반환될 준비가 된 것으로 결정될 수 있다. 통상적으로, 개명 레지스터 식별자는 맵핑 테이블로부터 맵핑이 제거되는 것에 응답하여 프리 리스트로 반환된다. 그러나, 제로 사이클 로드 연산들로 인한 맵핑 테이블 내의 복제 맵핑들의 경우에는, 프리 리스트로의 임의의 반환 전에 RDA(224)와 같은 데이터 구조가 검사될 수 있다.
복제 카운트가 감소된 후, 개명 레지스터 식별자가 여전히 복제된 경우(조건 블록 510), 블록 512에서 개명 레지스터 식별자는 여전히 복제된 것으로 마킹될 수 있으며, 프리 리스트로 반환되지 않는다. 예를 들어, RDA(224)와 같은 데이터 구조 내의 유효 엔트리가 1보다 큰 복제 카운트와 함께 여전히 존재할 수 있다.
복제 카운트가 감소된 후, 개명 레지스터 식별자가 아직 복제되지 않은 경우(조건 블록 510), 블록 514에서 개명 레지스터 식별자는 맵핑되었지만 복제되지 않은 것으로 마킹될 수 있다. 예를 들어, RDA(224)와 같은 데이터 구조 내의 관련 엔트리가 무효화될 수 있다. 대안으로서, 1의 복제 카운트와 더불어 유효 엔트리가 여전히 존재할 수 있다. 개명 레지스터 식별자는 프리 리스트로 반환되지 않는다.
위의 실시예들은 상당히 상세하게 설명되었지만, 위의 개시 내용을 충분히 이해한다면 이 분야의 기술자들에게 다양한 변경들 및 개량들이 명백해질 것이다. 아래의 청구항들은 모든 그러한 변경들 및 개량들을 포함하는 것으로 해석되는 것을 의도한다.

Claims (20)

  1. 프로세서로서,
    저장 명령어에 대한 로드 명령어의 메모리 의존성을 결정하도록 구성되는 메모리 의존성 검출기 - 상기 저장 명령어는 소스 레지스터 식별자(ID) 및 저장 어드레스의 식별을 포함하고, 상기 로드 명령어는 소스 어드레스의 식별 및 목적지 레지스터 ID를 포함함 -; 및
    개명 레지스터 ID를 상기 저장 명령어의 상기 소스 레지스터 ID에 맵핑하도록 구성된 레지스터 개명 유닛
    을 포함하고,
    결정된 상기 메모리 의존성의 지시를 수신하는 것 및 적격 조건들이 충족된 것으로 결정하는 것에 응답하여, 상기 레지스터 개명 유닛은
    상기 개명 레지스터 ID를 상기 로드 명령어의 상기 목적지 레지스터 ID에 맵핑하고;
    상기 로드 명령어가 상기 로드 명령어의 상기 소스 어드레스와 관련된 데이터를 판독하는 것을 방지하도록 구성되는,
    프로세서.
  2. 제1항에 있어서,
    상기 로드 명령어가 상기 로드 명령어의 상기 소스 어드레스와 관련된 데이터를 판독하는 것을 방지하기 위하여, 상기 로드 명령어가 상기 메모리 의존성의 결정 및 상기 메모리 의존성의 올바른 것으로의 검증 중 적어도 하나 후에 완료될 것으로 지시되는, 프로세서.
  3. 제2항에 있어서,
    상기 개명 레지스터 ID를 상기 로드 명령어의 상기 목적지 레지스터 ID에 맵핑하는 것에 응답하여, 상기 레지스터 개명 유닛은 상기 개명 레지스터 ID와 관련되고 상기 개명 레지스터 ID가 하나보다 많은 레지스터에 맵핑된 것을 지시하는 복제 카운트를 저장하도록 더 구성되는, 프로세서.
  4. 제3항에 있어서,
    적격 조건들이 충족된 것으로 결정하는 것은 적어도,
    프로그램 순서에서 상기 저장 명령어와 상기 로드 명령어 사이에 개재된(intervening) 명령어들 중 어떤 명령어도 상기 저장 명령어의 상기 소스 레지스터 ID와 관련된 데이터를 변경하지 않는 것
    을 결정하는 것을 포함하는, 프로세서.
  5. 제3항에 있어서,
    상기 레지스터 개명 유닛은
    상기 개명 레지스터 ID에 맵핑된 목적지 레지스터 ID를 갖는 명령어가 커미트될 준비가 된 것을 검출하고;
    상기 개명 레지스터 ID가 하나보다 많은 레지스터에 맵핑된 것으로 결정하는 것에 응답하여 상기 개명 레지스터 ID가 프리 리스트(free list)로 반환되는 것을 방지하도록 더 구성되는, 프로세서.
  6. 제5항에 있어서,
    상기 커미트될 준비가 된 것으로 검출된 명령어는 상기 로드 명령어, 상기 저장 명령어, 및 프로그램 순서에서 상기 로드 명령어와 상기 저장 명령어 사이에 있는 명령어 중 적어도 하나인, 프로세서.
  7. 제3항에 있어서,
    상기 레지스터 개명 유닛은, 상기 개명 레지스터 ID에 현재 맵핑되지 않은 구조적 레지스터 ID가 상기 개명 레지스터 ID에 맵핑될 때마다 상기 복제 카운트를 증가시키도록 더 구성되는, 프로세서.
  8. 제5항에 있어서,
    상기 프로세서는 상기 메모리 의존성이 올바르지 않은 것으로 결정하는 것에 응답하여, 상기 로드 명령어 및, 프로그램 순서에서 상기 로드 명령어보다 새로운 프로그램 명령어들을 리플레이하도록 구성되는 로드/저장 유닛을 더 포함하는, 프로세서.
  9. 제5항에 있어서,
    상기 프로세서는 상기 저장 명령어의 소스 피연산자와 관련된 데이터를, 상기 로드 명령어보다 새롭고 상기 로드 명령어에 의존하는 명령어들로 전송하도록 구성되는 물리 레지스터 파일을 더 포함하는, 프로세서.
  10. 명령어 처리 방법으로서,
    주어진 저장 명령어에 대한 주어진 로드 명령어의 메모리 의존성을 검출하는 단계 - 상기 저장 명령어는 소스 레지스터 식별자(ID) 및 저장 어드레스의 식별을 포함하고, 상기 로드 명령어는 소스 어드레스의 식별 및 목적지 레지스터 ID를 포함함 -;
    개명 레지스터 ID를 상기 저장 명령어의 상기 소스 레지스터 ID에 맵핑하는 단계;
    상기 메모리 의존성의 지시를 수신하는 것 및 적격 조건들이 충족된 것으로 결정하는 것에 응답하여;
    상기 개명 레지스터 ID를 상기 로드 명령어의 상기 목적지 레지스터 ID에 맵핑하는 단계; 및
    상기 로드 명령어가 상기 로드 명령어의 상기 소스 어드레스와 관련된 데이터를 판독하는 것을 방지하는 단계
    를 포함하는 방법.
  11. 제10항에 있어서,
    상기 로드 명령어가 상기 로드 명령어의 상기 소스 어드레스와 관련된 데이터를 판독하는 것을 방지하기 위하여, 상기 방법은 상기 로드 명령어가 상기 메모리 의존성의 결정 및 상기 메모리 의존성의 올바른 것으로의 검증 중 적어도 하나 후에 완료될 것이라는 것을 지시하는 단계를 더 포함하는, 방법.
  12. 제11항에 있어서,
    상기 개명 레지스터 ID를 상기 로드 명령어의 상기 목적지 레지스터 ID에 맵핑하는 것에 응답하여, 상기 방법은 상기 개명 레지스터 ID와 관련되고 상기 개명 레지스터 ID가 하나보다 많은 레지스터에 맵핑된 것을 지시하는 복제 카운트를 저장하는 단계를 더 포함하는, 방법.
  13. 제12항에 있어서,
    적격 조건들이 충족된 것으로 결정하는 단계는 적어도,
    상기 저장 명령어와 상기 로드 명령어 사이에 개재된 명령어들 중 어떤 명령어도 상기 저장 명령어의 상기 소스 레지스터 ID와 관련된 데이터를 변경하지 않는 것
    을 결정하는 단계를 포함하는, 방법.
  14. 제13항에 있어서,
    프로그램 순서에서 더 새롭고 상기 로드 명령어에 의존하는 명령어들을 상기 로드 명령어와 함께 발행하는 단계를 더 포함하는 방법.
  15. 제14항에 있어서,
    상기 메모리 의존성을 결정하기 위하여, 상기 방법은 적어도, 상기 저장 명령어 및 상기 로드 명령어가 어드레스 피연산자 기본 레지스터 ID 및 어드레스 피연산자 즉석 값에 대한 매칭 값들을 갖는 것을 결정하는 단계를 더 포함하는, 방법.
  16. 제15항에 있어서,
    개재된 명령어가 상기 저장 명령어의 어드레스 피연산자 기본 레지스터를 즉석 값 갱신을 이용하여 변경한다는 결정에 응답하여, 상기 방법은 상기 로드 명령어의 상기 메모리 의존성의 결정 전에 상기 저장 명령어에 대한 상기 어드레스 피연산자 즉석 값의 저장된 값을 조정하는 단계를 더 포함하는, 방법.
  17. 제13항에 있어서,
    상기 개명 레지스터 ID에 맵핑된 목적지 레지스터 ID를 갖는 명령어가 커미트될 준비가 된 것을 검출하는 단계; 및
    상기 개명 레지스터 ID가 하나보다 많은 레지스터에 맵핑된 것으로 결정하는 것에 응답하여 상기 개명 레지스터 ID가 프리 리스트로 반환되는 것을 방지하는 단계
    를 더 포함하는 방법.
  18. 제17항에 있어서,
    상기 개명 레지스터 ID에 현재 맵핑되지 않은 임의의 주어진 구조적 레지스터 ID가 상기 개명 레지스터 ID에 맵핑될 때마다 상기 복제 카운트를 증가시키는 단계를 더 포함하는 방법.
  19. 레지스터 개명 유닛으로서,
    디코딩된 명령어들을 수신하도록 구성되는 제1 인터페이스 - 상기 디코딩된 명령어들은 로드 명령어 및 저장 명령어를 포함하고, 상기 저장 명령어는 소스 레지스터 식별자(ID) 및 저장 어드레스의 식별을 포함하고, 상기 로드 명령어는 소스 어드레스의 식별 및 목적지 레지스터 ID를 포함함 -;
    명령어들을 스케줄러로 디스패치하도록 구성되는 디스패치 유닛에 대한 제2 인터페이스;
    개명 레지스터 ID를 상기 저장 명령어의 상기 소스 레지스터 ID에 맵핑하도록 구성된 제로 사이클 로드 논리
    를 포함하고,
    상기 저장 명령어에 대한 상기 로드 명령어의 메모리 의존성의 지시를 수신하는 것 및 적격 조건들이 충족된 것으로 결정하는 것에 응답하여, 상기 논리는
    상기 개명 레지스터 ID를 상기 로드 명령어의 상기 목적지 레지스터 ID에 맵핑하고;
    상기 로드 명령어가 상기 로드 명령어의 상기 소스 어드레스와 관련된 데이터를 판독하는 것을 방지하도록 구성되는, 레지스터 개명 유닛.
  20. 제19항에 있어서,
    적격 조건들이 충족된 것으로 결정하는 것은 적어도,
    상기 저장 명령어와 상기 로드 명령어 사이에 개재된 명령어들 중 어떤 명령어도 상기 저장 명령어의 상기 소스 레지스터 ID와 관련된 데이터를 변경하지 않는 것
    을 결정하는 것을 포함하는, 레지스터 개명 유닛.
KR1020130068008A 2012-06-14 2013-06-13 제로 사이클 로드 KR101497807B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/517,865 2012-06-14
US13/517,865 US9996348B2 (en) 2012-06-14 2012-06-14 Zero cycle load

Publications (2)

Publication Number Publication Date
KR20130140582A KR20130140582A (ko) 2013-12-24
KR101497807B1 true KR101497807B1 (ko) 2015-03-02

Family

ID=48607065

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020130068008A KR101497807B1 (ko) 2012-06-14 2013-06-13 제로 사이클 로드

Country Status (8)

Country Link
US (1) US9996348B2 (ko)
EP (1) EP2674856B1 (ko)
JP (1) JP5894120B2 (ko)
KR (1) KR101497807B1 (ko)
CN (1) CN103514009B (ko)
BR (1) BR102013014996B1 (ko)
TW (1) TWI537824B (ko)
WO (1) WO2013188120A2 (ko)

Families Citing this family (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101449256B (zh) 2006-04-12 2013-12-25 索夫特机械公司 对载明并行和依赖运算的指令矩阵进行处理的装置和方法
EP2527972A3 (en) 2006-11-14 2014-08-06 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
EP2616928B1 (en) 2010-09-17 2016-11-02 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
KR101966712B1 (ko) 2011-03-25 2019-04-09 인텔 코포레이션 분할가능한 엔진에 의해 인스턴스화된 가상 코어를 이용한 코드 블록의 실행을 지원하는 메모리 프래그먼트
WO2012162188A2 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. Decentralized allocation of resources and interconnect structures to support the execution of instruction sequences by a plurality of engines
CN108427574B (zh) 2011-11-22 2022-06-07 英特尔公司 微处理器加速的代码优化器
US9047092B2 (en) * 2012-12-21 2015-06-02 Arm Limited Resource management within a load store unit
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9311084B2 (en) * 2013-07-31 2016-04-12 Apple Inc. RDA checkpoint optimization
US9940229B2 (en) * 2013-12-17 2018-04-10 Intel Corporation Technologies for persistent memory programming
US11068271B2 (en) 2014-07-28 2021-07-20 Apple Inc. Zero cycle move using free list counts
CN106648546A (zh) * 2016-09-07 2017-05-10 北京大学 用于gpu寄存器分配和并行度管理的协同优化编译方法
US11175923B2 (en) * 2017-02-13 2021-11-16 International Business Machines Corporation Comparing load instruction address fields to store instruction address fields in a table to delay issuing dependent load instructions
US10261791B2 (en) * 2017-02-24 2019-04-16 International Business Machines Corporation Bypassing memory access for a load instruction using instruction address mapping
US10838729B1 (en) 2018-03-21 2020-11-17 Apple Inc. System and method for predicting memory dependence when a source register of a push instruction matches the destination register of a pop instruction
CN108614736B (zh) 2018-04-13 2021-03-02 杭州中天微系统有限公司 实现资源索引替换的装置及处理器
US11593117B2 (en) * 2018-06-29 2023-02-28 Qualcomm Incorporated Combining load or store instructions
GB2577502B (en) * 2018-09-26 2021-09-08 Advanced Risc Mach Ltd An apparatus and method for processing instructions
CN111258653B (zh) * 2018-11-30 2022-05-24 上海寒武纪信息科技有限公司 原子访存方法、存储介质、计算机设备、装置和系统
US11200062B2 (en) 2019-08-26 2021-12-14 Apple Inc. History file for previous register mapping storage and last reference indication
US11416254B2 (en) 2019-12-05 2022-08-16 Apple Inc. Zero cycle load bypass in a decode group
US11294683B2 (en) 2020-03-30 2022-04-05 SiFive, Inc. Duplicate detection for register renaming
US11966328B2 (en) * 2020-12-18 2024-04-23 Advanced Micro Devices, Inc. Near-memory determination of registers
US11900118B1 (en) * 2022-08-05 2024-02-13 Apple Inc. Stack pointer instruction buffer for zero-cycle loads

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000148488A (ja) * 1992-03-31 2000-05-30 Seiko Epson Corp ス―パ―スカラプロセッサ
JP2002520729A (ja) * 1998-07-14 2002-07-09 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド リネームタグのスワッピングにより転送を行なうレジスタリネーミング
JP2005532613A (ja) * 2002-04-30 2005-10-27 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ロード操作の推測結果をレジスタ値にリンクするためのシステムおよび方法
KR20070019750A (ko) * 2004-05-05 2007-02-15 어드밴스드 마이크로 디바이시즈, 인코포레이티드 로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는메모리 파일을 유효화하기 위한 시스템 및 그 방법

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE3852432T2 (de) 1987-07-01 1995-07-13 Ibm Befehlssteuerungsvorrichtung für ein Computersystem.
US5799179A (en) 1995-01-24 1998-08-25 International Business Machines Corporation Handling of exceptions in speculative instructions
US5751983A (en) 1995-10-03 1998-05-12 Abramson; Jeffrey M. Out-of-order processor with a memory subsystem which handles speculatively dispatched load operations
US5926646A (en) 1997-09-11 1999-07-20 Advanced Micro Devices, Inc. Context-dependent memory-mapped registers for transparent expansion of a register file
US6065103A (en) 1997-12-16 2000-05-16 Advanced Micro Devices, Inc. Speculative store buffer
US6122725A (en) 1998-03-31 2000-09-19 Intel Corporation Executing partial-width packed data instructions
US6122656A (en) * 1998-07-31 2000-09-19 Advanced Micro Devices, Inc. Processor configured to map logical register numbers to physical register numbers using virtual register numbers
JP3497087B2 (ja) 1998-12-17 2004-02-16 富士通株式会社 命令制御装置及びその方法
EP1050806A1 (en) 1999-05-03 2000-11-08 STMicroelectronics SA Memory access address comparison
US6505293B1 (en) * 1999-07-07 2003-01-07 Intel Corporation Register renaming to optimize identical register values
US6662280B1 (en) 1999-11-10 2003-12-09 Advanced Micro Devices, Inc. Store buffer which forwards data based on index and optional way match
US7165167B2 (en) 2003-06-10 2007-01-16 Advanced Micro Devices, Inc. Load store unit with replay mechanism
US7111126B2 (en) 2003-09-24 2006-09-19 Arm Limited Apparatus and method for loading data values
US7263600B2 (en) * 2004-05-05 2007-08-28 Advanced Micro Devices, Inc. System and method for validating a memory file that links speculative results of load operations to register values
FR2873466A1 (fr) 2004-07-21 2006-01-27 St Microelectronics Sa Procede de programmation d'un controleur de dma dans un systeme sur puce et systeme sur puce associe
US8612944B2 (en) 2008-04-17 2013-12-17 Qualcomm Incorporated Code evaluation for in-order processing
US8533438B2 (en) 2009-08-12 2013-09-10 Via Technologies, Inc. Store-to-load forwarding based on load/store address computation source information comparisons
US8631225B2 (en) 2010-06-25 2014-01-14 International Business Machines Corporation Dynamically rewriting branch instructions to directly target an instruction cache location

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2000148488A (ja) * 1992-03-31 2000-05-30 Seiko Epson Corp ス―パ―スカラプロセッサ
JP2002520729A (ja) * 1998-07-14 2002-07-09 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド リネームタグのスワッピングにより転送を行なうレジスタリネーミング
JP2005532613A (ja) * 2002-04-30 2005-10-27 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ロード操作の推測結果をレジスタ値にリンクするためのシステムおよび方法
KR20070019750A (ko) * 2004-05-05 2007-02-15 어드밴스드 마이크로 디바이시즈, 인코포레이티드 로드 동작의 투기적인 결과들을 레지스터 값들에 연결하는메모리 파일을 유효화하기 위한 시스템 및 그 방법

Also Published As

Publication number Publication date
EP2674856B1 (en) 2019-08-21
EP2674856A3 (en) 2014-07-23
US20130339671A1 (en) 2013-12-19
WO2013188120A3 (en) 2014-03-06
BR102013014996A2 (pt) 2015-08-11
CN103514009A (zh) 2014-01-15
TW201411485A (zh) 2014-03-16
CN103514009B (zh) 2019-10-08
US9996348B2 (en) 2018-06-12
EP2674856A2 (en) 2013-12-18
WO2013188120A2 (en) 2013-12-19
KR20130140582A (ko) 2013-12-24
JP5894120B2 (ja) 2016-03-23
JP2014002735A (ja) 2014-01-09
TWI537824B (zh) 2016-06-11
BR102013014996B1 (pt) 2020-12-08

Similar Documents

Publication Publication Date Title
KR101497807B1 (ko) 제로 사이클 로드
US10409763B2 (en) Apparatus and method for efficiently implementing a processor pipeline
US10061588B2 (en) Tracking operand liveness information in a computer system and performing function based on the liveness information
US9311084B2 (en) RDA checkpoint optimization
US9575754B2 (en) Zero cycle move
US9483267B2 (en) Exploiting an architected last-use operand indication in a system operand resource pool
US9286072B2 (en) Using register last use infomation to perform decode-time computer instruction optimization
US9043559B2 (en) Block memory engine with memory corruption detection
US20110238962A1 (en) Register Checkpointing for Speculative Modes of Execution in Out-of-Order Processors
US10310859B2 (en) System and method of speculative parallel execution of cache line unaligned load instructions
US20140108768A1 (en) Computer instructions for Activating and Deactivating Operands
US11068271B2 (en) Zero cycle move using free list counts
US6772317B2 (en) Method and apparatus for optimizing load memory accesses
CN113535236A (zh) 基于指令集体系结构的和自动的加载跟踪的方法和装置
US7640419B2 (en) Method for and a trailing store buffer for use in memory renaming
US11481332B1 (en) Write combining using physical address proxies stored in a write combine buffer
US9904549B2 (en) Method and apparatus for loop-invariant instruction detection and elimination
US11416400B1 (en) Hardware cache coherency using physical address proxies
JP2023047283A (ja) クラスタ化されたデコードパイプラインのためのスケーラブルなトグル点制御回路

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20180201

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190129

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20200129

Year of fee payment: 6