KR20070107772A - 비정렬 메모리 액세스 예측 - Google Patents

비정렬 메모리 액세스 예측 Download PDF

Info

Publication number
KR20070107772A
KR20070107772A KR1020077021353A KR20077021353A KR20070107772A KR 20070107772 A KR20070107772 A KR 20070107772A KR 1020077021353 A KR1020077021353 A KR 1020077021353A KR 20077021353 A KR20077021353 A KR 20077021353A KR 20070107772 A KR20070107772 A KR 20070107772A
Authority
KR
South Korea
Prior art keywords
memory access
instruction
misalignment
pipeline
history
Prior art date
Application number
KR1020077021353A
Other languages
English (en)
Other versions
KR100973951B1 (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 KR20070107772A publication Critical patent/KR20070107772A/ko
Application granted granted Critical
Publication of KR100973951B1 publication Critical patent/KR100973951B1/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/22Microcontrol or microprogram arrangements
    • 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
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/30181Instruction operation extension or modification
    • G06F9/30189Instruction operation extension or modification according to execution mode, e.g. mode flag
    • 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
    • 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
    • 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/383Operand prefetching
    • G06F9/3832Value prediction for operands; operand history buffers
    • 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags

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)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

명령어 실행 파이프라인에서, 메모리 액세스 명령어들의 오정렬이 예측된다. 그 예측에 기초하여, 메모리 액세스 명령어의 유효 어드레스 발생에 앞서 파이프라인에는 부가적인 마이크로 연산이 발생된다. 부가적인 마이크로 연산은 소정의 어드레스 경계에 걸쳐 있는 메모리를 액세스한다. 오정렬을 예측하는 것 및 파이프라인 내에 일찍이 마이크로 연산을 발생시키는 것은, 충분한 파이프라인 제어 리소스가 부가적인 마이크로 연산을 발생시키고 추적하는데 이용가능함을 보장하는데, 이로써 그 리소스가 유효 어드레스 발생 시에 이용가능하지 않다면 파이프라인 플러시를 회피한다. 오정렬 예측은, 플래그, 바이모달 카운터, 로컬 예측기, 글로벌 예측기, 및 조합된 예측기와 같은 공지된 조건 분기 예측 기술을 사용할 수도 있다. 오정렬 예측기는 메모리 액세스 명령어 플래그 또는 오정렬된 명령어 타입에 의해 인에이블링 또는 바이어싱될 수도 있다.
메모리 액세스 명령어, 데이터 오정렬, 유효 어드레스, 마이크로 연산

Description

비정렬 메모리 액세스 예측{UNALIGNED MEMORY ACCESS PREDICTION}
배경
본 발명은 일반적으로 프로세서의 분야에 관한 것으로, 특히 파이프라인 프로세서에서 비정렬 메모리 액세스를 예측하는 것에 관한 것이다.
휴대용 전자 디바이스가 일상화되고 있다. 휴대용 전자 디바이스의 2 가지 경향은 기능성의 증가 및 사이즈의 감소이다. 기능성의 증가는 더 빠르고 더욱 강력한 프로세서에 의해 제공되는 연산 능력의 증가에 의해 조장된다.
개선된 특징 및 기능성을 제공할 뿐만 아니라, 휴대용 전자 디바이스 자체의 사이즈 및 중량이 계속하여 축소된다. 이런 축소화 경향의 한가지 효과는 상기 디바이스 내의 프로세서 및 다른 전자부품에 전력을 공급하기 위해 사용되는 배터리 사이즈의 감소이다. 배터리 기술의 증진이 부분적으로 문제를 상쇄시키지만, 배터리 사이즈의 감소는 모든 휴대용 전자 디바이스 전자부품에 대해 엄격한 전력 버짓 (power budget) 을 부여한다. 휴대용 전자 디바이스의 전력 버짓의 상당 부분은 프로세서에 의해 전력 소비된다.
따라서, 성능을 증가시키고 전력 소비를 감소시키는 프로세서 개량은 휴대용 전자 디바이스와 같은 다수의 애플리케이션을 위해 바람직하다. 일반적으로 현대식 프로세서는, 다수의 실행 단계를 각각 갖는 순차적인 명령어들이 실행시에 중복 (overlap) 되는 파이프라인 구조를 사용한다. 최대 성능을 위해서는, 명령 어들이 파이프라인을 통하여 연속적으로 통과해야 한다. 명령어들이 파이프라인으로부터 플러시 (flush) 되게 하고 순차적으로 재개시되게 하는 임의의 상황은 성능과 전력 소비 모두에 불리한 영향을 줄 수 있다.
명령어가 파이프라인에 들어갈 때, 명령어 상태 및 추적 (tracking) 을 위한 큐 위치 (queue location) 와 같은 일부 파이프라인 리소스가 할당된다. 단일의 명령어가 원래 할당된 것보다 더 많은 리소스를 요구한다는 것이 추후에 파이프라인에서 발견된다면, 후속 명령어가 플러시되어, 그 후속 명령어의 리소스가 그들을 필요로 하는 명령어에 재할당되게 할 필요가 있을 수도 있다.
메모리로부터 또는 메모리로 오정렬된 데이터를 로딩 또는 저장하는 메모리 액세스 명령어가 그 명령어에 원래 할당되었던 것보다 더 많은 파이프라인 리소스를 필요로 할 수도 있는 명령어의 일 예이며, 이에 대한 발견이 파이프라인에서 늦게 (deep) 까지 발생하지 않을 수도 있다. 오정렬된 데이터는, 그들이 메모리에 저장될 때, 일 워드 또는 하프 워드 경계와 같이 소정의 메모리 경계를 교차하는 데이터이다. 메모리가 논리적으로 구조화 및 어드레싱되고, 메모리 버스에 물리적으로 커플링되는 방식으로 인해, 메모리 경계를 교차하는 데이터는 보통 단일의 사이클에서 판독 또는 기록될 수 없다. 오히려, 2 개의 연속적인 버스 사이클이 요구될 수도 있는데, 즉, 하나의 버스 사이클은 경계의 한쪽의 데이터를 판독 또는 기록하기 위한 것이고, 다른 하나의 버스 사이클은 나머지 데이터를 판독 또는 기록하기 위한 것이다.
비정렬 데이터에 대한 메모리 액세스 명령어, 즉, 로딩 명령어 또는 저장 명 령어는, 파이프라인에, 부가적인 명령어 단계 또는 마이크로 연산을 발생시켜 비정렬 데이터에 의해 요구되는 부가적인 메모리 액세스를 수행하여야 한다. 그러나, 데이터의 정렬은, 실행 스테이지에 있어서, 단지 파이프라인에서 늦게 발생할 수도 있는, 데이터 사이즈 및 데이터 액세스의 유효 어드레스가 공지될 때까지 결정될 수 없다. 유효 어드레스가 발생되고 데이터의 오정렬이 발견될 때에는, 마이크로 연산을 발생시켜 제 2 메모리 액세스를 수행하기 위해 이용가능한 파이프라인 제어 리소스가 불충분할 수도 있다. 그러한 오정렬의 경우에, 파이프라인은 적어도 모든 후속 명령어들을 플러시하여 그러한 리소스를 해방 (free up) 시켜야 한다. 그 후, 플러시된 명령어들이 파이프라인에서 재인출 및 재실행되어야 하므로 프로세서 성능이 저하되고 전력이 낭비된다.
개요
명령어의 유효 어드레스 발생에 앞서, 파이프라인에서는 메모리 액세스 명령어에 대한 데이터 오정렬이 초기에 예측될 수도 있다. 파이프라인 리소스가 할당될 수도 있고 제 2 마이크로 연산을 생성하도록 파이프라인이 제어될 수도 있다. 제 2 마이크로 연산은, 오정렬된 데이터에 의해 요구되는 제 2 메모리 액세스 사이클을 수행하기 위해 이용된다.
일 실시형태에서, 본 발명은, 명령어 실행 파이프라인에서 메모리 액세스 명령어를 처리하는 방법에 관한 것이다. 메모리 액세스 명령어에 대한 오정렬이 예측되고, 메모리 액세스 명령어에 대한 유효 어드레스 발생에 앞서, 그 예측에 응답하여, 파이프라인에는 오정렬된 데이터를 위해 제 2 메모리 액세스를 수행하는 하나 이상의 마이크로 연산이 발생된다.
다른 실시형태에서, 본 발명은 파이프라인 프로세서에 관한 것이다. 그 프로세서는 복수의 파이프 스테이지들을 포함한 명령어 실행 파이프라인, 및 메모리 액세스 명령어가 오정렬된 데이터를 액세스할 것을 예측하는 오정렬 예측기를 포함한다. 부가적으로는, 그 프로세서는 메모리 액세스 명령어에 대한 유효 어드레스의 발생에 앞서, 예측에 응답하여, 메모리 액세스 명령어를 위해 파이프라인에 부가적인 마이크로 연산을 발생시키는 제어 로직을 포함한다.
도면의 간단한 설명
도 1 은 프로세서의 기능 블록도이다.
도 2 는 메모리 조직도이다.
도 3 은 프로세서 파이프라인 일부에 대한 기능 블록도이다.
상세한 설명
파이프라이닝은, 실행 시에 다수의 명령어가 동시 중복되는 프로세서 구현 기술이다. 통상 구조 내의 각 명령어는, 통상적으로, 인출, 디코딩, 하나 이상의 실행 단계들, 메모리 액세스, 및 라이트 백 (write back) 과 같은 복수의 실행 단계들에서 실행된다. 프로세서 파이프라인은 복수의 "파이프 스테이지들" 로 구성된다. 보통, 로직 및 로직의 저장 장치를 포함하는 각 파이프 단계는 일 명령어의 실행 단계 또는 실행 단계의 일부를 완료한다. 그 파이프 스테이지들은 함께 커플링되어 파이프라인을 형성한다. 명령어들이 파이프라인에 들어가고 파이프 스테이지에서 연속 처리된다. 이전의 명령어들이 실행을 완료하기 전에 부가적인 명령어들이 파이프라인에 들어가므로, 다수의 명령어들이 파이프라인 내에서 임의의 소정 시간에 처리될 수도 있다. 이런 순차적인 명령어 스트림의 명령어들 사이에서의 병렬성 (parallelism) 의 활용 능력은 프로세서 성능을 향상시키는데 상당히 기여한다. 이상적인 조건 하에서, 그리고 일 사이클에서 각 파이프 스테이지를 완료하는 프로세서에서, 파이프라인을 채우는 간결한 초기 프로세스 이후에, 명령어가 매 사이클마다 실행을 완료할 수도 있다.
그러한 이상적인 조건은, 명령어들 사이의 데이터 의존성 (데이터 장애), 분기와 같은 제어 의존성 (제어 장애), 프로세서 리소스 할당 충돌 (구조적 장애), 인터럽트, 캐시 미스 (cache miss) 등을 포함한 다양한 요인으로 인해 실제로는 좀처럼 실현되지 않는다. 또한, 일부 명령어들이 파이프 스테이지들 중 하나 이상을 여러번 통과할 것을 요구할 수도 있다. 이 경우에, 프로세서는 그 명령어에 대해 다수의 마이크로 연산을 발생시킬 수도 있다. 본 명세서 내에서 사용된 것처럼, 마이크로 연산은 한번에 일 파이프 스테이지를 차지하고 파이프라인을 통과하는 로직 엔티티이다. 이상적으로, 대부분의 명령어들은 (사이클당 일 명령어 목표에 접근하기 위해) 파이프라인에 단일의 마이크로 연산을 포함한다. 그러나, 일 명령어가 2 개 이상의 마이크로 연산을 포함할 수도 있고, 또는 2 개 이상으로 분할될 수도 있는데, 이들 각각은 파이프 라인을 순차적으로 통과한다.
구조적인 파이프라인 장애의 일 형태가 오정렬된 메모리 액세스로부터 비롯된다. 다수의 메모리 액세스 명령어들은 실행 스테이지 동안, 유효 메모리 어드레스, 즉, 데이터가 로딩되거나 데이터가 저장되는 어드레스를 계산한다. 그 러나, 프로세서 리소스 - 특히, 파이프 스테이지들을 명령어들에 할당하고 그 명령어들을 파이프라인을 통하여 추적하는 파이프라인 제어 리소스 - 는 디코딩 스테이지 동안 로딩 또는 저장 명령어에 할당된다. 메모리 어드레스가 워드, 하프 워드, 또는 다른 소정의 어드레스 경계상에 정렬되는 보통의 경우에, 로딩 또는 저장 연산이 (데이터가 메모리로부터 검색되는 동안 파이프라인이 중지될 수도 있지만) 단일의 파이프 스테이지에서 수행될 수도 있다.
메모리 액세스 명령어가 소정의 어드레스 경계를 교차하는 데이터에 관한 것이라면, 2 개의 로딩 또는 저장 연산이 요구되어, 이를 수행하기 위해 파이프라인에는 2 개의 마이크로 연산이 요구된다. 그러나, 디코딩 스테이지의 로딩 또는 저장에는 대부분 단 하나의 마이크로 연산이 할당되었다. 파이프라인의 실행 스테이지에 새로운 마이크로 연산을 발생시킬 것을 요구하는 것은 문제가 있다. 파이프라인 리소스가 충분히 할당된 경우에, 새로운 마이크로 연산의 필요성은 필요한 파이프라인 제어 리소스를 해방시키기 위해 모든 후속 명령어에게 파이프라인으로부터 플러시되도록 요구하는 예외를 야기할 것이다.
도 1 은 프로세서 (10) 의 기능 블록도를 나타낸 것이다. 프로세서 (10) 는, 명령어 실행 FIFO (15) 를 포함할 수도 있는 제어 로직 (14) 에 따라 명령어 실행 파이프라인 (12) 에서 명령어를 실행시킨다. 이 파이프라인은 파이프 스테이지들로 조직화된 다양한 레지스터 또는 래치 (16), 및 하나 이상의 산술 논리 유닛 (ALU; 18) 을 포함한다. 범용 레지스터 (GPR) 파일 (20) 은, 최상위 메모리 계층을 포함하는 레지스터를 제공한다. 그 파이프라인은, ITLB (Instruction side Translation Lookaside Buffer; 24) 에 의해 관리되는 메모리 어드레싱 및 허가 (permission) 에 의해, 명령어 캐시 (22) 로부터 명령어들을 인출한다. 데이터는, 메인 TLB (Translation Lookaside Buffer; 28) 에 의해 관리되는 메모리 어드레싱 및 허가에 의해, 데이터 캐시 (26) 로부터 액세스된다. 다양한 실시형태에서, ITLB 는 TLB 의 일부의 카피 (copy) 를 포함할 수도 있다. 대안으로, ITLB 및 TLB 가 일체형일 수도 있다. 유사하게는, 프로세서 (10) 의 다양한 실시형태에서, I-캐시 (22) 및 D-캐시 (26) 는 일체형, 또는 단일형일 수도 있다. I-캐시 (22) 및/또는 D-캐시 (26) 에서의 미스 (miss) 는, 캐시 미스 처리 큐 (29) 를 포함할 수도 있는 메모리 인터페이스 (30) 의 제어 하에서, 메인 (오프-칩) 메모리 (32) 로의 액세스를 야기한다. 프로세서 (10) 는 입/출력 (I/O) 인터페이스 (34) 를 포함하여 다양한 주변 디바이스 (36) 로의 액세스를 제어할 수도 있다. 당업자는, 프로세서 (10) 의 다수의 변동이 가능하다는 것을 인식할 것이다. 예를 들어, 프로세서 (10) 는 I-캐시나 D-캐시 중 하나 또는 I-캐시와 D-캐시 모두에 대한 제 2 레벨 (L2) 캐시를 포함할 수도 있다. 또한, 프로세서 (10) 내에 도시된 기능 블록들 중 하나 이상이 특정 실시형태에서는 생략될 수도 있다.
이하 표 1 은 대표적인 파이프라인 연산의 도표를 나타낸 것이다. 대표적인 구조 내의 명령어들은 6 단계로 실행된다.
IF - 명령어 인출
ID - 명령어 디코딩
EX1 - 실행 (메모리 액세스 명령어에 대한 인출 어드레스 오퍼랜드)
EX2 - 실행 (메모리 액세스 명령어에 대한 유효 어드레스 계산)
MEM - 메모리 액세스
WB - 라이트 백
Figure 112007067236904-PCT00001
각 파이프 스테이지가 일 사이클에서 실행된다면, 그리고 파이프라인 스톨 (stall), 장애, 또는 인터럽트가 없다면, 클록 6 내지 10 에서, 일 명령어가 완료되고 각 사이클에서 그 결과에 대해 라이트 백을 수행한다. 클록 사이클 1 내지 4 는 예를 들어, 파이프라인의 재설정, 문맥 교환 (context switch), 인터럽트 또는 임의의 다른 플러시 후에 수행되는, 파이프라인을 채우는 초기화 프로세스를 나타낸다. i+4 번째 다음에는 부가적인 명령어가 오기 때문에, 사이클당 일 명령어 수행은 이상적인 경우에 무한히 계속될 수도 있다. 표 1 의 파이프라인 구조는 단지 대표적인 것이다. 임의의 소정의 프로세서 구현에서, 파이프라인은 임의의 명령어 단계를 위해 임의의 수의 파이프 스테이지들을 포함할 수도 있다.
로딩 (LD) 및 저장 (ST) 명령어는 각각, 데이터를 판독 및 기록하기 위해 메 모리에 액세스한다. 그 메모리는, 한번에 소정 양의 데이터를 동시 액세스하도록 조직화된다. 도 2 는 프로세서 (10), 버스 (31) 및 메모리 (32) 를 포함한 전자 디바이스 내에 있는 하나의 메모리 구조에 대한 블록도이다. 이 예에서, 버스 (31) 는 32 비트 폭이고, (예를 들어, 프로세서 내의 캐시 메모리 또는 오프-칩 RAM 을 포함할 수도 있는) 메모리 (32) 는 워드 (32-비트) 경계로 정렬된다. 당업자가 쉽게 알 수 있는 것처럼, 다수의 상이한 버스 및 메모리 구조가 대응하는 상이한 데이터 정렬 경계에 따라 구현될 수도 있다.
비정렬 메모리 액세스의 일 예로서, 도 2 는 0x0A 의 유효 개시 바이트 어드레스 및 3 바이트의 사이즈 필드를 가진 LD 명령어에 의해 판독되는 메모리를 나타낸 것이다. 워드 정렬된 메모리 (32) 의 경우에, 이 데이터는 일 버스 사이클에서 메모리로부터 판독될 수 없다. 오히려, 프로세서 (10) 는 먼저, 0x08 에서 시작하는 풀 워드를 판독한 후 (바이트 0x08 및 바이트 0x09 는 제외), 0x0C 에서 시작하는 풀 워드를 판독해야 한다 (바이트 0x0D 내지 바이트 0x0F 는 제외). 더블 워드 메모리 정렬 및 64 비트 버스의 시스템에서, 이 데이터는 단일의 사이클에서 판독될 수 있지만, 0x07 에서 시작하는 3 바이트 데이터들은 판독될 수 없다. 일반적으로는, 임의의 현실적인 버스 (real-world bus; 31) 및 메모리 (32) 구성이 비정렬 메모리 액세스의 문제를 초래할 수도 있다.
비정렬 데이터가 2 개의 버스 사이클을 요구하기 때문에, 비정렬 데이터에 관한 메모리 액세스 명령어 (이하, "비정렬 메모리 명령어" 로 지칭) 는 실행 스테이지에서, 2 개의 마이크로 연산의 생성을 야기할 것이다. 예를 들어, 표 1 의 i+3 번째 명령어가 비정렬 메모리 액세스 명령어였다면, 파이프라인은 이하 표 2 에 도시된 것처럼 수행할 것이다.
Figure 112007067236904-PCT00002
메모리 액세스 명령어 i+3 에 대한 유효 어드레스가 EX2 스테이지 동안, 클록 사이클 7 에서 결정된다. 단지 이 시점에만, 프로세서 제어 로직은, 유효 메모리 액세스가 비정렬된 것, 즉, 소정의 메모리 경계를 교차하는 것을 결정할 수 있으며, 이는 단일의 버스 사이클에서 액세스될 수 없다. 충분한 파이프라인 리소스가 이용가능하다면, 프로세서는 (i+3)2 로서 표시된 메모리 액세스 명령어에 대해 부가적인 마이크로 연산 (표 2 의 "gen μ-op) 을 발생시킬 것이다. 그 후, 초기 할당된 마이크로 연산 및 새로운 마이크로 연산이 나머지 파이프라인을 통하여 순차적으로 처리된다.
그 후, EX2 에서 제 1 메모리 액세스의 어드레스를 계산한 원래의 마이크로 연산은 MEM 에서 어드레싱된 데이터의 제 1 부분을 액세스하고 그 데이터를 WB 에 서 기록한다. 새롭게 생성된 마이크로 연산은 클록 사이클 8 의 EX2 에서 (예를 들어, 일 워드 오프셋을 더함으로써) 제 2 메모리 액세스의 어드레스를 계산한 후, 어드레싱된 데이터의 제 2 부분을 MEM 에서 액세스하고, 그 데이터를 WB 에서 기록할 것이다.
명령어 i+4 는, 명령어 i+3 에 대한 오정렬된 데이터에 의해 요구되는 부가적인 마이크로 연산으로 인해 클록 사이클 8 에서 스톨한다. 파이프라인에서 이런 스톨을 구현하기 위해, EX1 래치의 클록이 게이트 제어되어야 하고, EX1 래치의 출력이 EX1 래치의 입력에서 멀티플렉서로 리사이클되어야 하며, 또는 일부 다른 메커니즘은 클록 사이클 7 과 8 모두에 걸쳐 EX1 내용을 유지하도록 사용되어야 한다. 유사하게는, 후속 명령어 i+5 가 파이프라인 전반에 걸쳐 DCD 래치 등등에서 스톨할 것이다. 이런 스톨 제어의 구현은 설계 시도 (design challenge), 특히, 스톨의 필요성이 단지 파이프라인에서 늦게 발견되는 경우에 나타난다. 더욱이, EX2 에서의 메모리 액세스 명령어, 및 선행의 파이프 스테이지들 내의 다른 명령어들 모두에 대한 파이프 스테이지들의 "리사이클" 의 필요성은 하나 이상의 임계 경로에 대해 멀티플렉서 선택 지연을 부가하여, 머신 사이클 시간을 증가시킴으로써 성능을 잠재적으로 감소시킨다. 파이프라인 스톨을 야기할 수 있는 사건 (event) 을 최소화시키는 것이 성능을 향상시킨다.
오정렬된 메모리 액세스는 또한 명령어 파이프라인 (12) 의 일부에 대한 기능 블록도인 도 3 을 참조하여 더 상세히 설명될 수도 있다. LD 명령어는, 파이프라인에서, 명령어 캐시 (22) 로부터 인출되어 IF 래치 (40) 로 로딩된다. 그 명령어는 디코딩 로직 (42) 에 의해 디코딩된다. 일 실시형태에서, LD 명령어는 제 1 레지스터 (R1) 에 위치된 베이스 어드레스를 제 2 레지스터 (R2) 에 위치된 오프셋에 더함으로써 유효 어드레스를 계산한다. 2 개의 레지스터 (R1, R2) 의 어드레스 및 데이터들의 사이즈가 명령어로부터 디코딩되어 DCD 래치 (44) 에서 래치된다. 이들 레지스터 어드레스는 그 후, (R1) 과 (R2) 로 표시된 레지스터들의 내용을 반환 (return) 하는 GPR 파일 (20) 과 같은 레지스터 파일을 인덱싱할 수도 있다. 이들 값은 EX1 래치 (46) 에 저장되어, ALU (18) 에 의해 가산되고, 유효 메모리 어드레스가 EX2 래치 (48) 에 저장된다. 그 후, 메모리 액세스가 메모리 액세스 연산 (50) 에서 처리되어 데이터 캐시 (26) 를 액세스한다. 이 액세스가 데이터 캐시 (26) 에서 미스라면, 메모리 액세스 연산 (50) 이 필요에 따라 어드레스 번역 (address translation) 을 수행하고, 오프-칩 메모리 (32) 를 액세스하여 메모리 액세스가 결정될 때까지 파이프라인을 스톨할 것이다. 임의의 경우에, 메모리 액세스 연산 (50) 은 MEM 래치 (52) 에 저장된 비정렬 데이터의 제 1 부분을 반환한다.
(R1) 과 (R2) 를 더함에 의한 EX2 래치 (48) 에서의 유효 어드레스의 발생에 따라, 제어 로직 (14) 이 유효 어드레스 및 사이즈 필드를 검사하여, 메모리 액세스가 비정렬되는 제 1 시간 동안 검출한다. 충분한 프로세서 리소스가 이용가능하다면, 유효 어드레스는 화살표 (54) 에 의해 표시되는 것처럼, EX2 래치 (48) 에서 "리사이클" 된다. 그 어드레스는 일 워드 오프셋으로 업데이트되어 제 2 메모리 액세스에 대한 유효 어드레스를 발생시킨다. 이것은 마이크로 연산을 파이프라인에 부가하고, 어떤 후속 명령어도 EX2 파이프 스테이지로 나아가도록 허용되지 않는다. 제 2 워드는 메모리 액세스 연산 (50) 에서 액세스되고, 제 1 워드로부터 추출된 데이터가 파이프라인을 하향 처리할 때 MEM 래치 (52) 에 저장된다. 그 데이터는 그 후 GPR 에 연속적으로 기록될 수도 있고, 또는, 적절히 결합된 후 기록될 수도 있다.
설명을 목적으로, 도 3 은 파이프라인 (12) 의 각 스테이지를 그 스테이지 내의 관련된 LD 명령어 단계와 함께 도시한다. 실제로, 일단 관련된 LD 명령어 단계가 파이프 스테이지에서 완료되고, 대응하는 마이크로 연산이 후속 스테이지로 이동하면, 다른 명령어의 마이크로 연산이 처리를 위해 파이프 스테이지로 로딩된다. 따라서, LD 명령어에 대한 유효 어드레스가 EX2 래치 (48) 에서 래치될 때에는, 선행하는 3 개의 파이프 스테이지가 최대 3 개의 상이한 명령어에 대응할 수도 있는 3 개의 마이크로 연산으로 로딩된다. EX2 래치 (48) 에서의 유효 어드레스 발생 시에는, 불충분한 파이프라인 제어 리소스가 화살표 (54) 로 도시된 것처럼 어드레스를 리사이클하는데 이용가능하고 제 2 마이크로 연산을 발생시켜 제 2 메모리 액세스를 수행한다면, 구조적 장애가 생성되고 예외가 발생할 것이다. 이 경우에, 오정렬된 LD 명령어 다음의 명령어들 모두는 필요한 제어 리소스를 이용가능하게 하기 위해 파이프라인으로부터 플러시되어야 한다. 이들 명령어들은 추후에 재인출 및 재처리되어, 성능 저하 (penalty) 가 초래되고 연산을 2 회 수행하는 것과 관련된 전력이 낭비된다.
EX2 파이프 스테이지에서의 마이크로 연산의 생성을 위해 이용가능해야 하는 파이프라인 제어 리소스는 명령어 추적 FIFO (15; 도 1) 에 엔트리 (entry) 를 포함할 수도 있다. 명령어 추적 FIFO (15) 는 각 발행된 명령어에 대한 엔트리를 프로그램 순서로 포함한다. FIFO (15) 의 엔트리들은, 대응하는 명령어가 발행하는 때에 할당되고, 추후에는, 명령어들이 인터럽트를 야기할 수도 있는 예외들을 갖는지 여부를 파이프라인 제어 로직 (14) 이 결정하는 때에 몇몇 사이클에 업데이트된다. 엔트리들은, "확인" (즉, 파이프라인 제어기는 명령어가 예외없이 실행을 완료할 것으로 결정) 되고 "커미트 (commit)" (즉, 파이프라인 제어기는, 명령어가 파이프라인에서 실행을 완료하기 위해 소거되도록, 그 및 그 이전의 것 모두가 확인됨을 인식함) 된 후 각각 하나를 팝 오프하는 순서로, 명령어 추적 FIFO (15) 로부터 제거된다.
명령어 추적 FIFO (15) 의 각 엔트리가 단일의 마이크로 연산에 대응한다면, 명령어 추적 FIFO (15) 의 구조 및 제어가 단순화된다. 한편, 비정렬 메모리 액세스 명령어가 EX2 파이프 스테이지와 같이, 늦게 파이프라인에 부가적인 마이크로 연산의 발생을 야기한다면, 명령어 추적 FIFO (15) 의 각 엔트리가 다수의 잠재적인 마이크로 연산을 추적할 수 있어야 하며, 이로써 각 FIFO 엔트리에 대한 하드웨어 리소스 및 제어 복잡도를 증가시킨다. 이런 증가된 복잡도 및 사이즈는 각 FIFO 엔트리에 대해 요구되고, 아직 비정렬된 메모리 액세스 명령어들, 즉 단지 이후에 다수의 마이크로 연산 추적을 요구할 명령어들은 비교적 드물다. 명령어 추적 FIFO (15) 를 설계하여 엔트리당 다수의 마이크로 연산을 추적하는 대안으로서, 각 엔트리는 단 하나의 마이크로 연산을 추적할 수도 있다. 이 경우에, 늦게 오정렬된 메모리 액세스 명령어는 그 다음의 모든 명령어에 대해 파이프라인 (및 명령어 추적 FIFO (15)) 을 플러시되게 하고, 2 개의 마이크로 연산에 대응하는 2 개의 엔트리를 명령어 추적 FIFO (15) 에 할당되게 하며, 모든 후속 명령어들을 재인출 및 재발행되게 한다. 이것은 상당한 성능 및 전력 저하를 초래한다.
명령어 추적 FIFO (15) 이외에, 파이프라인에서 이후에 이용가능하지 않을 수도 있는 오정렬된 메모리 명령어를 위해 필요한 또 다른 리소스는 캐시 미스 큐 (29) 의 엔트리이다. 데이터 액세스가 데이터 캐시에서 미스라면, 그 액세스를 큐 (29) 내에 배치하여 외부 버스를 통해 메인 메모리에 액세스할 수도 있다. 만약 이용가능한 큐 엔트리가 존재하지 않는다면, 파이프라인이 스톨해야 한다. 메모리 액세스 명령어의 경우에, 캐시 미스 큐 (29) 는 DCD 스테이지 동안 체크될 수도 있고, 그리고 엔트리가 이용가능하다면, 제어 로직 (14) 이 명령어를 처리하게 하여 캐시 미스의 공지가 파이프라인 (12) 을 스톨하지 않을 것이다. 그러나, 파이프에서 늦게 비정렬 메모리 액세스 명령어가 부가적인 마이크로 연산을 발생시켜 부가적인 메모리 액세스를 수행해야만 한다면, 그리고 메모리 액세스가 캐시에서 미스라면, 제 2 캐시 미스 큐 엔트리가 요구된다. 단 하나가 DCD 파이프 스테이지에 예비되었기 때문에, 불충분한 큐 리소스가 이용가능하여 파이프라인 (12) 으로 하여금 스톨하게 할 수도 있다.
본 발명의 일 실시형태에 의하면, 메모리 액세스 명령어 내의 데이터의 오정렬이 예측되고, 메모리 액세스 명령어에 대한 유효 어드레스 발생 이전에, 그 예측에 응답하여 마이크로 연산이 생성된다. 새로운 마이크로 연산은 오정렬된 데 이터를 액세스하기 위해 요구되는 제 2 메모리 액세스를 수행한다. 이는 파이프라인 제어 리소스를 초기에, 이를 테면 명령어를 디코딩한 직후에 파이프라인에 할당되게 한다.
도 3 을 다시 참조하면, 오정렬 예측기 (56) 는 명령어가 디코딩 로직 (42) 에서 디코딩되자마자 메모리 액세스 명령어를 검출한다. 오정렬 예측에 응답하여, IF 래치 (40) 에서 LD 명령어가 "리사이클" 되는 것으로 표시된 것처럼, 제 2 마이크로 연산이 즉시 생성될 수도 있다. 제 2 마이크로 연산은 파이프라인을 통하여 1 차의 로딩 명령어 마이크로 연산 다음에 올 것이며, 데이터의 예측된 오정렬이 정확하다면 제 2 메모리 액세스 사이클을 수행하기 위해 이용가능할 것이다. 부가적인 마이크로 연산은, 메모리 액세스의 어드레스가 예를 들어, 일 워드 오프셋에 따라, LD 명령어의 주소와 동일한 것으로 공지되어 있기 때문에, LD 명령어에 대해 상술된 레지스터 액세스 및 어드레스 발생을 실제로 수행할 필요가 없다. 메모리 액세스 연산 (50) 에서의 LD 명령어에 의한 제 1 메모리 액세스 후에, 제 1 데이터들이 MEM 래치 (52) 에서 저장되는 경우, 오정렬 예측이 정확했다면, 오정렬된 데이터를 판독하기 위해 필요한 제 2 메모리 액세스에 대한 어드레스가 EX2 래치 (48) 에서 계산 및 저장된다. 그 후, 제 2 메모리 액세스가 수행되고, 제 2 데이터들은 캐시 (26) 또는 메모리 (32) 로부터 획득되어 MEM 래치 (52) 로 로딩된다.
오정렬 예측에 오류가 있었다면, 제 2 메모리 액세스가 수행되지 않고 부가적인 마이크로 연산이 포기된다. 파이프라인 스톨의 경우에, LD 다음의 명령어 가 전진하여 (advance), 제 2 마이크로 연산에 대해 할당된 리소스를 소비하고 그것을 파이프라인으로부터 효율적으로 제거할 수도 있다.
이하 표 3 은, 명령어 i+3 이 오정렬이 정확히 예측된 오정렬된 메모리 액세스 명령어인 파이프라인을 나타낸다.
Figure 112007067236904-PCT00003
LD 로서 명령어를 디코딩하고 오정렬을 예측하는 것에 응답하여, 제 2 마이크로 연산 (i+3)2 이 클록 사이클 5 의 디코딩 파이프 스테이지에서 발생된다. LD 명령어의 유효 어드레스가 클록 사이클 7 의 EX2 파이프 스테이지에서 계산되기 이전인, 마이크로 연산의 초기 발생은 충분한 파이프라인 제어 리소스가 마이크로 연산 (i+3)2 을 위해 이용가능할 것임을 보장한다. 다르게는, EX2 파이프 스테이지에서 제 2 마이크로 연산 (i+3)2 의 생성을 위한 충분한 리소스의 이용가능성을 가정하면 명령어 실행의 타이밍이 표 2 의 타이밍과 유사하다. 한가지 차이는, 명령어 i+4 가 동일한 양만큼 스톨되지만, 마이크로 연산 (i+3)2 이 파이프라인에서 더 빨리 발생될수록 스톨이 실행 시퀀스에서 더 빨리 온다는 것이다.
오정렬 예측이 정확하다면, 정밀하게는, 정확한 파이프라인 제어 리소스가 오정렬된 메모리 액세스를 수행하기 위해 할당되고, 후속 명령어가 파이프라인에 로딩될 수도 있고 그들이 오정렬로 인해 플러시되어야 한다는 걱정 없이 실행될 수도 있다. 오정렬 예측에 오류가 있다면, 프로세서 성능 및 전력 관리가 저하된다. 그러나, 성능의 저하는 대칭적이지 않다. 이하 표 4 는 오정렬 예측 정확 가능성에 대한 상대적인 성능 및 전력 영향을 나타낸 것이다.
Figure 112007067236904-PCT00004
정확히 예측된 경우들은 명령어를 완전히 실행하기 위해 필요한 대로 메모리 액세스 명령어에게 요구된 수의 마이크로 연산을 정밀하게 할당함으로써 최적의 성능을 제공한다. 정렬된 것으로 예측되었지만 실제로는 오정렬된 오류로 예측된 경우가 위에서 설명되며, 여기서, 데이터 정렬은, 유효 어드레스가 메모리 액세스 명령어에 대해 발생될 때에는, 즉, 전술된 예에서는 EX2 파이프 스테이지에서 체크되지 않는다. 언급된 것처럼, 충분한 파이프라인 제어 리소스가 이용가능하다면, 마이크로 연산이 생성되어 제 2 메모리 액세스 연산을 수행하기 때문에, 단지 성능 저하는 메모리 액세스 명령어 다음의 명령어들의 완료 시에 증가된 레이턴시 (latency) 지연이다. 그러나, 충분한 파이프라인 제어 리소스가 이용가능하지 않다면, 예외가 발생할 것이며, 파이프라인 (12) 은, 메모리 액세스 명령어 이후에 로딩된 모든 명령어들에 대해 플러시되어 부가적인 마이크로 연산을 생성 및 관리하기 위해 필요한 리소스가 해방될 것이다. 이것은 성능 및 전력 최적화의 관점에서 보면 최악의 가능성이다.
오정렬된 것으로 예측되었지만 실제로는 정렬된 오류로 예측된 경우는, 메모리 액세스 명령어 다음의 파이프라인 (12) 에 불필요한 마이크로 연산, 즉, "버블 (bubble)" 을 발생시킨다. 일단 메모리 액세스 명령어에 대한 유효 어드레스가 발생되고 제어 로직 (14) 이 사실상 정렬된 것을 검출할 수 있다면, 불필요한 마이크로 연산이 포기될 수도 있다. 예를 들어, 메모리 액세스 명령어가 캐시 (26) 에서 미스여서, 오프 칩 메모리 (32) 로의 액세스를 강요한다면, 파이프라인 (12) 을 스톨하여 메모리 액세스 연산의 완료를 펜딩 (pending) 할 것이다. 발생된 마이크로 연산 다음의 또 다른 명령어가 EX1 이나 EX2 파이프 스테이지에서 어떤 장애에도 직면하지 않는다면, 메모리 액세스 명령어 바로 뒤로 전진하여 버블을 사라지게 한다. 이 경우에, 일부 전력이 마이크로 연산의 생성 및 관리 시에 낭비되었지만 성능 저하는 없다. 메모리 액세스 명령어가 캐시 (26) 에서 히트하 는 (그리고, 다르게는 파이프라인 (12) 이 스톨하지 않는) 대부분의 경우에, 버블이 파이프라인 (12) 을 통과하여 (파이프당 일 사이클 스테이지를 가정) 일 사이클 성능 저하를 야기한다. 그러나, 오류로 예측된 오정렬은 필요한 제어 리소스의 결함을 이유로예외를 야기하거나 파이프라인 (12) 을 플러시하지 않을 것이다.
오정렬 예측은 다양한 다른 방식으로 수행될 수도 있는데 이들 중 일부가 본 명세서 내에 개시되어 있다. 그러나, 본 발명은 개시된 특정 오정렬 예측 알고리즘으로 한정되지 않는다. 메모리 액세스 명령어의 오정렬 - 어떤 방법으로든 - 예측, 및 오정렬된 데이터에 액세스하기 위해 예측에 응답하여 명령어의 유효 어드레스를 발생하기 이전의 마이크로 연산의 발생은 본 발명의 범위 내에 있다.
오정렬된 데이터 액세스가 일반적인 경우, 합리적인 명백한 오정렬 예측 알고리즘은 단지 오정렬된 것으로 가정하기 위한 것일 수도 있고, 항상 메모리 액세스 명령어에 대한 유효 어드레스를 발생시키기 이전에 부가적인 마이크로 연산을 발생시키기 위한 것일 수도 있다. 이는, 실제로 정렬된 메모리 액세스당 일 사이클의 성능 히트의 희생으로, 오정렬로 인한 예외나 파이프라인 플러시 없음을 보장할 것이다. 본 발명의 일 실시형태에 의하면, "오정렬 예측" 모드는 제어 레지스터에서 일 비트에 의해 정의된다. 애플리케이션이 대다수의 오정렬된 메모리 액세스에 참여하는 경우, 그것은 비트를 설정함으로써 모드를 가능하게 할 수도 있다. 그 비트가 설정되는 동안, 모든 메모리 액세스는 오정렬된 것으로 예측된다. 다른 실시형태에서, 오정렬 예측이 메모리 액세스 명령어의 페이지 테이블 내의 속성들에 의해 제어되어, 단일의 페이지로부터의 명령어들에 의한 모든 메 모리 액세스가 동일한 방식, 즉, 정렬되거나 오정렬된 것으로 예측될 것이다.
대부분의 코드는 메모리의 영역 또는 코드의 개개의 세그먼트 내에 존재하는 것으로 매우 쉽게 확인되는 오정렬된 메모리 액세스에 직면하지 않을 수도 있다. 그러므로, 더 정교한 오정렬 예측 방법이 바람직한데, 즉, 연속적으로 인에이블링될 수도 있지만, 모든 메모리 액세스, 또는 개개의 페이지에 대한 모든 것을 맹목적으로 예측하지 않는 예측이 오정렬될 것이다. 예를 들어, 일 실시형태에서, 오정렬 예측은 스택 포인터 정렬 다음에 올 수도 있다. 스택 포인터가 오정렬된다면, 메모리 액세스는 오정렬된 것으로 예측된다.
조건 분기 명령어의 동작 (behavior) 을 예측하는 방법이 잘 알려져 있으며, 다수가 오정렬 예측에 적용가능할 수도 있다. 예를 들어, 최근 과거의 메모리 액세스 패턴이 미래의 메모리 액세스의 정렬에 대한 훌륭한 표시자일 수도 있다. 일 실시형태에서, 메모리 액세스 명령어의 어드레스 비트들에 의해 인덱싱된 복수의 일 비트 플래그들은, 대응하는 명령어에 의한 최근의 메모리 액세스의 정렬을 표시하는데, 예를 들어, 1 은 오정렬된 액세스를 표시하고 0 은 정렬된 액세스를 표시한다 (또는 그 역도 또한 같다). 오정렬 플래그들은 모든 메모리 액세스 명령어 어드레스 또는 그의 상당 부분을 비교하여 메모리 액세스 명령어들 사이에서의 오정렬 에일리어싱 (aliasing) 을 방지하는 태그를 포함할 수도 있는데, 이는 예측 정확도를 낮출 수도 있다. 대안으로, 리소스를 보존하기 위해, 단지 어드레스의 최하위의 몇몇 비트들이 오정렬 태그를 인덱싱하는데 사용될 수도 있다.
메모리 액세스 명령어의 유효 어드레스의 발생 이전, 및 바람직하게는 가능 한 한 초기에, 대응하는 오정렬 태그가 체크된다. 메모리 액세스 명령어의 가장 최근의 실행이 오정렬되었다면, 파이프라인 제어기는 펜딩 액세스가 또한 오정렬될 것임을 예측할 수도 있고, 또한 마이크로 연산을 발생시켜 제 2 메모리 액세스를 수행할 수도 있다. 명령어의 타입 (즉, 메모리 액세스 명령어) 이 명령어 디코딩 파이프 스테이지에서 먼저 공지되기 때문에, 마이크로 연산은 바람직하게는 거기서 생성된다. 그러나, 마이크로 연산이 추후에 파이프라인에 생성될 수도 있다. 오정렬 예측에 응답한, 메모리 액세스 명령어의 유효 어드레스의 발생에 앞선 마이크로 연산의 임의의 생성은 본 발명의 범위 내에 있다.
단일 비트 오정렬 플래그는, 정렬된 메모리 액세스 명령어들의 스트림 내의 홀수의 오정렬된 메모리 액세스 명령어가 2 회, 즉 오정렬된 명령어가 먼저 직면될 때 일 회, 그리고 그 다음으로 (오정렬 플래그가 이 때 설정되는) 명령어의 실행이 정렬될 때 한번 더 예측불량이라는 한가지 결과를 초래한다. 조건 분기 예측으로도 알려진 이 문제의 해결책은 메모리 액세스 명령어 어드레스에 의해 인덱싱된 2 비트 포화 카운터의 테이블을 포함한 바이모달 오정렬 예측기이다. 각 카운터는 4 개의 상태 중 하나를 갖는다. 즉,
11 - 강하게 오정렬
10 - 약하게 오정렬
01 - 약하게 정렬
00 - 강하게 정렬
메모리 액세스 명령어에 대한 유효 어드레스가 발생될 때, 대응하는 카운터 가 업데이트된다. 오정렬된 메모리 액세스 명령어는 강하게 오정렬된 상태로 증분하고, 정렬된 메모리 액세스 명령어는 강하게 정렬된 상태로 감소한다. 그러한 바이모달 카운터는, 오정렬된 액세스의 스트림의 처음에 있는 2 회의 예측불량의 희생으로, 정렬된 어드레스의 스트림에서는 홀수의 오정렬된 액세스에 대해서 일 회만 예측불량일 것이다.
조건 분기 예측으로부터 도입될 수도 있는 또 다른 오정렬 예측 알고리즘은 로컬 오정렬 예측기이다. 로컬 오정렬 예측기는 2 개의 테이블을 유지한다. 제 1 테이블은 로컬 오정렬 이력 테이블이다. 그것은 메모리 액세스 명령어의 어드레스 비트에 의해 인덱싱되고, 또한 각 메모리 액세스 명령어의 n 개의 가장 최근의 실행들의 정렬/오정렬 이력을 레코드한다. 다른 테이블은 패턴 이력 테이블이다. 바이모달 예측기와 같이, 이 테이블은 바이모달 카운터를 포함하지만, 그의 인덱스는 제 1 테이블의 오정렬 이력으로부터 발생된다. 정렬을 예측하기 위해, 오정렬 이력이 룩 업 (look up) 되고, 그 이력이 그 후 오정렬을 예측하게 하는 바이모달 카운터를 룩 업 하는데 사용된다.
오정렬을 예측하는 또 다른 옵션은 글로벌 오정렬 예측기인데, 이는 다수의 메모리 액세스의 동작이 다른 최근의 메모리 액세스의 이력과 강하게 상관된다는 사실을 이용한다. 글로벌 오정렬 예측기는 단일의 시프트 레지스터를 실행되는 모든 메모리 액세스 명령어의 최근의 오정렬 이력으로 업데이트되게 하고, 이 값을 이용하여 바이모달 카운터의 테이블에 인덱싱한다.
대안으로, 바이모달 카운터의 테이블은 gselect 예측기로도 알려진 메모리 액세스 명령어의 어드레스의 몇몇 비트와 연결되는 최근의 오정렬 이력으로 인덱싱될 수도 있다. gselect 는 작은 테이블 사이즈에 대해 로컬 예측보다 더 많이 정확한 결과를 산출할 수도 있다. 또 다른 대안으로서, 메모리 액세스 명령어 어드레스는 gshare 예측기로도 알려진 글로벌 이력과 연결되기보다는 XOR 될 수도 있다. gshare 은 큰 테이블에 대해 gselect 보다 더 많이 정확한 오정렬 예측을 산출할 수도 있다. 비록 gselect 및 gshare 이 로컬 예측보다 덜 정확하더라도, 그들은 구현 이유로 인해 바람직할 수도 있다. gselect 및 gshare 은 정렬 예측당 단일의 테이블 룩 업을 요구하는데, 여기서 로컬 예측은 2 개의 테이블 룩 업을 연속하여 요구한다.
1993 년, Scott McFarling 은 본 명세서 내에 참조로서 완전히 포함된 Digital Western Research Laboratory Technical Note TN-36, "분기 예측기 결합" 의 분기 예측기 결합을 제안하였다. McFarling 이 제안한 기술은 오정렬된 메모리 액세스를 예측하는 문제들에 유리하게 적용될 수도 있어, 본 발명에 따라, 메모리 액세스 명령어의 유효 어드레스 발생에 앞서 파이프라인 마이크로 연산을 발생시킬 수도 있다.
일 실시형태에서, 결합된 오정렬 예측은 3 개의 예측기 즉, 바이모달, gshare, 및 메모리 액세스 명령어 당 일 원리에 따라 이용하도록 바이모달이나 gshare 중 하나를 고르는 바이모달형 예측기를 병렬로 사용한다. 선택 예측기는 또 다른 2 비트 업/다운 포화 카운터인데, 이 경우에, MSB 가 예측을 선택하여 이용한다. 이 경우에, 카운터는 바이모달 및 gshare 예측이 불일치할 때마다 업데이트되어 어느 쪽이든 정확한 예측기를 선호한다.
다른 실시형태에서, 오정렬 예측기는 완전히 연관될 수도 있고 또는 부분 연관될 수도 있는 오정렬 캐시를 유지할 수도 있고, 메모리 액세스 명령어 어드레스의 일부, 또는 상기의 gselect 및 gshare 의 경우와 같이, 다른 최근의 오정렬 이력과 연결 또는 XOR 되는 어드레스의 일부에 의해 인덱싱될 수도 있다. 명령어 인출 파이프 스테이지 동안 (예를 들어, 명령어가 메모리 액세스 명령어로 더욱 알려지기 전) 과 같이, 초기에 파이프라인에서, 캐시가 인덱싱될 수도 있다. 오정렬 캐시가 히트라면, 메모리 액세스는 최근에 오정렬되었고, 오정렬된 것으로 예측될 수도 있다. 이 캐시 액세스가 미스라면, 메모리 액세스는 정렬된 것으로 예측된다. 엔트리들은 예측되지 않은 오정렬된 메모리 액세스 명령어를 위해 캐시에 부가되고, 비정렬된 것으로 예측된 정렬된 메모리 액세스를 위해 캐시로부터 제거된다.
다양한 다른 오정렬된 예측 알고리즘이 가능하다. 예를 들어, 오정렬 예측기는 메모리 액세스 명령어의 정렬 동작에 대해 세부 통계치를 유지할 수도 있고, 명령어당 또는 글로벌로, 과거의 정렬 경험의 통계적 평균에 기초하여 오정렬을 예측할 수도 있다. 유사하게는, 오정렬 예측기는 n 개의 가장 최근의 메모리 액세스 명령어의 정렬의 연속 평균 (rolling average) 을 유지할 수도 있다.
일부 명령어 세트 구조들은 애플리케이션에 대한 프로그래머의 특정 지식에 기초하여, 프로그래머에 의해 특정될 수 있는 오피코드 (opcode) 에 정적 예측 비트를 포함한다. 예를 들어, 분기가 "오류의 분기 (branch on error)" 상황에서 사용된다면, 오류가 비교적 드물고, 프로그래머는 그들 분기를 "이용하지 않는 것 (not take)" 으로서 정적으로 예측할 수도 있다. 유사하게는, 프로그래머는 개개의 애플리케이션의 메모리 정렬 동작을 간파할 수도 있다. 예를 들어, 다수의 데이터 처리 애플리케이션은 잘 설계되고 정돈된 데이터 구조를 이용하고, 임의의 비정렬 메모리가 액세스된다는 것을 거의 예상하지 못한다. 한편, 일부 애플리케이션은 높은 수의 비정렬 데이터 액세스를 예상할 수도 있다. 예들은 공유 채널에서의 연속적인 데이터 스트림으로부터 통신 프로그램 추출 특정 데이터를 포함하거나, 비동기식 트리거에 응답하여 연속적인 출력으로부터 데이터 획득 애플리케이션 로깅 데이터를 포함할 수도 있다. 그러한 애플리케이션에서, 오정렬 예측의 인에이블링, 또는 대안으로는 보다 적극적인 모드로의 오정렬 예측의 바이어싱은 프로세서 성능 및 전력 보존을 향상시킬 수도 있다. 본 발명의 일 실시형태에 의하면, 프로그래머는 메모리 액세스 명령어 내의 플래그, 또는 일 세트의 비정렬 메모리 액세스 명령어에 의해 프로그램의 오정렬 예측 동작에 영향을 줄 수도 있다.
일 실시형태에서, LD 및 ST 명령어와 같은 메모리 액세스 명령어들은 오정렬 예측이 수행되어야 하는 것을 나타내는 파라미터 리스트 내의 플래그를 포함한다. 대안으로, 명령어 세트는 가능성 있는 오정렬 로딩 및 저장 연산을 위해 각각 LDMAL 및 STMAL 과 같은 새로운 명령어를 포함할 수도 있다. 이 플래그 또는 새로운 명령어는 입력을 오정렬 예측기 (56) 에 제공하여, 메모리 정렬 예측을 인에이블링하고, 또한 유효 어드레스 발생에 앞서 마이크로 연산을 초기에 발생시켜 비정렬 데이터를 액세스하도록 부가적인 메모리 액세스 사이클을 수행한다.
다른 실시형태에서, 오정렬 예측 플래그 또는 명령어 타입은 플래그가 없는 것보다 보다 적극적인 오정렬 예측을 하게 하는 모드에 오정렬 예측기 (56) 를 배치한다. 예를 들어, 플래그 또는 명령어 타입은 상기 기술된 2 비트 바이모달 포화 카운터를 이용하는 오정렬 예측기를 3 비트 포화 카운터로 교환할 수도 있으며, 여기서 8 개의 상태들 중 5 또는 6 상태가 예측된 오정렬의 정도를 나타낸다. 그러한 오정렬 예측 플래그 또는 명령어 타입의 한가지 이점은 프로그래머의 오정렬 예측의 제어를 발생시킨다는 것이고, 여기서 애플리케이션 동작에 대한 프로그래머들의 지식에 의해 오정렬 예측이 프로세서 성능 및 전력 관리 향상을 유도할 수도 있을 때 더 잘 예측할 수 있을 것이다.
본 발명이 본 명세서 내에는 개개의 특징, 양태, 및 실시형태와 관련하여 설명되고 있지만, 다수의 변동, 변형, 및 다른 실시형태가 본 발명의 광범위내에서 가능하다는 것이 명백하며, 따라서, 모든 변동, 변형 및 실시형태는 본 발명의 범위내에 있는 것으로 간주될 것이다. 본 실시형태에서는 따라서, 제한이 아닌 예시로서 모든 양태들이 해석될 것이며, 첨부된 청구범위의 수단 및 등가 범위 내에 들어가는 변경이 본 명세서 내에 포함되도록 의도된다.

Claims (31)

  1. 명령어 실행 파이프라인에서, 제 1 메모리 액세스를 수행하는 메모리 액세스 명령어를 처리하는 방법으로서,
    상기 메모리 액세스 명령어에 대한 데이터 오정렬을 예측하는 단계; 및
    상기 메모리 액세스 명령에 대한 유효 어드레스 발생에 앞서, 상기 예측에 응답하여 상기 파이프라인에 하나 이상의 마이크로 연산을 발생시키는 단계를 포함하며,
    상기 마이크로 연산은 오정렬된 데이터에 대해 제 2 메모리 액세스를 수행하는, 메모리 액세스 명령어 처리 방법.
  2. 제 1 항에 있어서,
    상기 파이프라인에 하나 이상의 마이크로 연산을 발생시키는 단계는, 명령어 디코딩 파이프 스테이지에서 상기 마이크로 연산을 발생시키는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  3. 제 1 항에 있어서,
    하나 이상의 마이크로 연산을 발생시키는 단계는, 상기 마이크로 연산에 대해 파이프라인 제어 리소스를 할당하는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  4. 제 3 항에 있어서,
    상기 파이프라인 제어 리소스는 명령어 추적 FIFO 에 하나 이상의 엔트리를 포함하는, 메모리 액세스 명령어 처리 방법.
  5. 제 3 항에 있어서,
    상기 파이프라인 제어 리소스는 캐시 미스 큐 내에 이용가능한 슬롯을 포함하는, 메모리 액세스 명령어 처리 방법.
  6. 제 1 항에 있어서,
    상기 메모리 액세스 명령어에 대한 데이터 오정렬을 예측하는 단계는, 제어 레지스터에 오정렬 예측 비트를 설정하여, 상기 비트가 설정되는 동안, 모든 메모리 액세스 명령어가 오정렬된 것으로 예측되는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  7. 제 1 항에 있어서,
    상기 메모리 액세스 명령어에 대한 데이터 오정렬을 예측하는 단계는, 상기 메모리 액세스 명령어 페이지 테이블 엔트리 상에 하나 이상의 속성들을 설정하여 상기 속성들이 설정되는 경우, 대응하는 페이지 상의 모든 메모리 액세스 명령어가 오정렬된 것으로 예측되는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  8. 제 1 항에 있어서,
    상기 메모리 액세스 명령어에 대한 데이터 오정렬을 예측하는 단계는, 스택 포인터가 오정렬될 때에는 데이터 오정렬을 예측하고, 상기 스택 포인터가 정렬된 때에는 데이터 정렬을 예측하는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  9. 제 1 항에 있어서,
    상기 메모리 액세스 명령어에 대한 데이터 오정렬을 예측하는 단계는, 정렬 이력을 저장하는 단계, 및 상기 정렬 이력에 응답하여 오정렬을 예측하는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  10. 제 9 항에 있어서,
    상기 정렬 이력을 저장하는 단계는, 상기 메모리 액세스 명령어와 관련된 정렬 이력을 저장하는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  11. 제 10 항에 있어서,
    상기 정렬 이력은 상기 메모리 액세스 명령어와 관련된 복수의 명령어 어드레스 비트에 의해 인덱싱되는, 메모리 액세스 명령어 처리 방법.
  12. 제 11 항에 있어서,
    상기 정렬 이력은 가장 최근의 상기 메모리 액세스 명령어의 정렬을 나타내는 플래그를 포함하는, 메모리 액세스 명령어 처리 방법.
  13. 제 11 항에 있어서,
    상기 정렬 이력을 저장하는 단계는, 각각의 상기 메모리 액세스 명령어의 정렬에 응답하여 바이모달 (bimodal) 포화 카운터를 증분 또는 감소시키는 단계를 포함하고,
    상기 정렬 이력에 응답하여 데이터 오정렬을 예측하는 단계는, 상기 바이모달 포화 카운터의 MSB 를 출력하는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  14. 제 11 항에 있어서,
    상기 정렬 이력을 저장하는 단계는, 각각의 상기 메모리 액세스 명령어의 정렬에 응답하여 바이모달 포화 카운터를 증분 또는 감소시키는 단계를 포함하고,
    상기 정렬 이력에 응답하여 데이터 오정렬을 예측하는 단계는, 상기 카운터의 비트들의 인코딩에 기초하여 데이터 오정렬 예측을 출력하는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  15. 제 14 항에 있어서,
    상기 정렬 이력을 저장하는 단계는, 소정 수의 가장 최근의 상기 메모리 액세스 명령어에 대한 정렬의 표시를 저장하는 단계를 포함하며,
    상기 정렬 이력에 응답하여 데이터 오정렬을 예측하는 단계는, 상기 표시를 이용하여 바이모달 카운터의 테이블을 인덱싱하고, 상기 인덱싱된 바이모달 카운터의 MSB 를 출력하는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  16. 제 9 항에 있어서,
    상기 정렬 이력을 저장하는 단계는, 모든 메모리 액세스 명령어와 관련된 정렬 이력을 저장하는 단계를 포함하고,
    상기 정렬 이력에 응답하여 오정렬을 예측하는 단계는, 상기 정렬 이력을 이용하여 바이모달 카운터의 테이블을 인덱싱하고, 상기 인덱싱된 바이모달 카운터의 MSB 를 출력하는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  17. 제 16 항에 있어서,
    상기 메모리 액세스 명령어와 관련된 복수의 어드레스 비트와 연결되는 상기 정렬 이력을 이용하여 상기 바이모달 카운터의 테이블을 인덱싱하는 것인, 메모리 액세스 명령어 처리 방법.
  18. 제 16 항에 있어서,
    상기 메모리 액세스 명령어와 관련된 복수의 어드레스 비트와 XOR 되는 상기 정렬 이력을 이용하여 상기 바이모달 카운터의 테이블을 인덱싱하는 것인, 메모리 액세스 명령어 처리 방법.
  19. 제 9 항에 있어서,
    상기 정렬 이력을 저장하는 단계는,
    상기 메모리 액세스 명령어 각각의 정렬에 응답하여, 각각의 바이모달 포화 카운터를 증분 또는 감소시키는 단계; 및
    모든 메모리 액세스 명령어와 관련된 포괄적인 정렬 이력을 저장하는 단계를 포함하고,
    상기 정렬 이력에 응답하여 오정렬을 예측하는 단계는,
    상기 메모리 액세스 명령어와 관련된 바이모달 포화 카운터의 MSB 를 포함한 제 1 예측기를 발생시키는 단계;
    상기 메모리 액세스 명령어와 관련된 복수의 어드레스 비트와 XOR 되는 상기 포괄적인 정렬 이력에 의해 인덱싱된 테이블에 바이모달 카운터의 MSB 를 포함한 제 2 예측기를 발생시키는 단계; 및
    선택 바이모달 포화 카운터의 MSB 를 출력하는 단계로서, 상기 제 1 예측기 및 상기 제 2 예측기가 불일치하는 경우에, 상기 제 1 예측기와 상기 제 2 예측기 중 정확한 것을 선호하는 방향으로, 상기 선택 바이모달 포화 카운터가 업데이트되는, 상기 출력 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  20. 제 9 항에 있어서,
    과거의 정렬 경험을 저장하는 단계는, 과거의 메모리 액세스 명령어의 정렬의 통계적 평균을 유지하는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  21. 제 9 항에 있어서,
    과거의 정렬 경험을 저장하는 단계는, 소정 수의 가장 최근의 메모리 액세스 명령어의 정렬의 연속 평균 (rolling average) 을 유지하는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  22. 제 9 항에 있어서,
    과거의 정렬 경험을 저장하는 단계는, 정렬된 것으로 예측되었던 오정렬된 메모리 액세스의 오정렬 캐시를 유지하는 단계를 포함하고,
    상기 정렬 이력에 응답하여 오정렬을 예측하는 단계는, 상기 오정렬 캐시에서 히트하는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  23. 제 22 항에 있어서,
    상기 정렬 이력에 응답하여 오정렬을 예측하는 단계는, 상기 메모리 액세스 명령어의 디코딩에 앞서 상기 오정렬 캐시를 인덱싱하는 단계를 더 포함하는, 메모리 액세스 명령어 처리 방법.
  24. 제 22 항에 있어서,
    오정렬된 것으로 예측되었던 정렬된 메모리 액세스를 상기 캐시로부터 제거하는 단계를 더 포함하는, 메모리 액세스 명령어 처리 방법.
  25. 제 1 항에 있어서,
    상기 메모리 액세스 명령어에 대한 데이터 오정렬을 예측하는 단계는, 상기 메모리 액세스 명령어 내의 플래그에 응답하여 데이터 오정렬을 예측하는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  26. 제 1 항에 있어서,
    상기 메모리 액세스 명령어에 대한 데이터 오정렬을 예측하는 단계는, 가능성 있는 오정렬된 메모리 액세스 명령어를 포함한 상기 메모리 액세스 명령어에 응답하여 데이터 오정렬을 예측하는 단계를 포함하는, 메모리 액세스 명령어 처리 방법.
  27. 복수의 파이프 스테이지들을 포함한 명령어 실행 파이프라인;
    메모리 액세스 명령어가 오정렬된 데이터를 액세스할 것을 예측하는 오정렬 예측기; 및
    상기 메모리 액세스 명령어에 대한 유효 어드레스를 발생시키기에 앞서, 상기 예측에 응답하여, 상기 파이프라인에 부가적인 마이크로 연산을 발생시켜 부가 적인 메모리 액세스를 수행하는 제어 로직을 포함하는, 파이프라인 프로세서.
  28. 제 27 항에 있어서,
    상기 부가적인 마이크로 연산은 명령어 디코딩 파이프 스테이지에서 발생되는, 파이프라인 프로세서.
  29. 제 27 항에 있어서,
    상기 마이크로 연산은 하나 이상의 상기 파이프 스테이지를 차지하는, 파이프라인 프로세서.
  30. 제 27 항에 있어서,
    상기 오정렬 예측기는 상기 메모리 액세스 명령어 정렬 이력을 저장한 메모리를 포함하는, 파이프라인 프로세서.
  31. 제 27 항에 있어서,
    명령어 실행 FIFO 를 더 포함하며,
    상기 제어 로직은 상기 마이크로 연산에 대응하는 상기 명령어 실행 FIFO 에 엔트리를 발생시키는, 파이프라인 프로세서.
KR1020077021353A 2005-02-17 2006-02-16 오정렬 메모리 액세스 예측 KR100973951B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/062,221 2005-02-17
US11/062,221 US7437537B2 (en) 2005-02-17 2005-02-17 Methods and apparatus for predicting unaligned memory access

Publications (2)

Publication Number Publication Date
KR20070107772A true KR20070107772A (ko) 2007-11-07
KR100973951B1 KR100973951B1 (ko) 2010-08-05

Family

ID=36816969

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020077021353A KR100973951B1 (ko) 2005-02-17 2006-02-16 오정렬 메모리 액세스 예측

Country Status (9)

Country Link
US (1) US7437537B2 (ko)
EP (1) EP1849061B1 (ko)
JP (2) JP4856100B2 (ko)
KR (1) KR100973951B1 (ko)
CN (2) CN101694613B (ko)
BR (1) BRPI0607888A2 (ko)
IL (1) IL185297A0 (ko)
TW (1) TWI444892B (ko)
WO (1) WO2006089194A2 (ko)

Families Citing this family (48)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7437537B2 (en) * 2005-02-17 2008-10-14 Qualcomm Incorporated Methods and apparatus for predicting unaligned memory access
US7404042B2 (en) * 2005-05-18 2008-07-22 Qualcomm Incorporated Handling cache miss in an instruction crossing a cache line boundary
US8219785B1 (en) * 2006-09-25 2012-07-10 Altera Corporation Adapter allowing unaligned access to memory
US20080320016A1 (en) * 2007-06-19 2008-12-25 Raza Microelectronics, Inc. Age matrix for queue dispatch order
US20080320274A1 (en) * 2007-06-19 2008-12-25 Raza Microelectronics, Inc. Age matrix for queue dispatch order
US8195919B1 (en) * 2007-10-29 2012-06-05 Oracle America, Inc. Handling multi-cycle integer operations for a multi-threaded processor
JP5395383B2 (ja) * 2008-08-21 2014-01-22 株式会社東芝 パイプライン演算プロセッサを備える制御システム
JP2010157130A (ja) * 2008-12-27 2010-07-15 Toshiba Corp メモリシステム
US20110314263A1 (en) * 2010-06-22 2011-12-22 International Business Machines Corporation Instructions for performing an operation on two operands and subsequently storing an original value of operand
CN102375695B (zh) * 2010-08-23 2015-09-23 联想(北京)有限公司 一种磁盘的访问方法及计算机系统
CN107832083B (zh) * 2011-04-07 2020-06-12 威盛电子股份有限公司 具有条件指令的微处理器及其处理方法
US9898402B2 (en) 2011-07-01 2018-02-20 Micron Technology, Inc. Unaligned data coalescing
WO2013058775A1 (en) 2011-10-21 2013-04-25 Soft Machines, Inc. Fast unaligned memory access
US9699263B1 (en) 2012-08-17 2017-07-04 Sandisk Technologies Llc. Automatic read and write acceleration of data accessed by virtual machines
US9612948B2 (en) 2012-12-27 2017-04-04 Sandisk Technologies Llc Reads and writes between a contiguous data block and noncontiguous sets of logical address blocks in a persistent storage device
US9870830B1 (en) 2013-03-14 2018-01-16 Sandisk Technologies Llc Optimal multilevel sensing for reading data from a storage medium
US9524235B1 (en) 2013-07-25 2016-12-20 Sandisk Technologies Llc Local hash value generation in non-volatile data storage systems
US20150188971A1 (en) * 2013-07-31 2015-07-02 Been, Inc. Data stream monitoring
US9639463B1 (en) 2013-08-26 2017-05-02 Sandisk Technologies Llc Heuristic aware garbage collection scheme in storage systems
US9703816B2 (en) 2013-11-19 2017-07-11 Sandisk Technologies Llc Method and system for forward reference logging in a persistent datastore
US9520197B2 (en) 2013-11-22 2016-12-13 Sandisk Technologies Llc Adaptive erase of a storage device
US9520162B2 (en) 2013-11-27 2016-12-13 Sandisk Technologies Llc DIMM device controller supervisor
US9582058B2 (en) 2013-11-29 2017-02-28 Sandisk Technologies Llc Power inrush management of storage devices
GB2525314B (en) * 2014-01-17 2016-02-24 Imagination Tech Ltd Stack pointer value prediction
US9535701B2 (en) 2014-01-29 2017-01-03 Telefonaktiebolaget Lm Ericsson (Publ) Efficient use of branch delay slots and branch prediction in pipelined computer architectures
US9703636B2 (en) 2014-03-01 2017-07-11 Sandisk Technologies Llc Firmware reversion trigger and control
US11093401B2 (en) 2014-03-11 2021-08-17 Ampere Computing Llc Hazard prediction for a group of memory access instructions using a buffer associated with branch prediction
US9430245B2 (en) 2014-03-28 2016-08-30 Telefonaktiebolaget Lm Ericsson (Publ) Efficient branch predictor history recovery in pipelined computer architectures employing branch prediction and branch delay slots of variable size
US9626400B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Compaction of information in tiered data structure
US9626399B2 (en) 2014-03-31 2017-04-18 Sandisk Technologies Llc Conditional updates for reducing frequency of data modification operations
US9697267B2 (en) 2014-04-03 2017-07-04 Sandisk Technologies Llc Methods and systems for performing efficient snapshots in tiered data structures
US9703491B2 (en) * 2014-05-30 2017-07-11 Sandisk Technologies Llc Using history of unaligned writes to cache data and avoid read-modify-writes in a non-volatile storage device
US10656842B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Using history of I/O sizes and I/O sequences to trigger coalesced writes in a non-volatile storage device
US10656840B2 (en) 2014-05-30 2020-05-19 Sandisk Technologies Llc Real-time I/O pattern recognition to enhance performance and endurance of a storage device
US10162748B2 (en) 2014-05-30 2018-12-25 Sandisk Technologies Llc Prioritizing garbage collection and block allocation based on I/O history for logical address regions
US10372613B2 (en) 2014-05-30 2019-08-06 Sandisk Technologies Llc Using sub-region I/O history to cache repeatedly accessed sub-regions in a non-volatile storage device
US10114557B2 (en) 2014-05-30 2018-10-30 Sandisk Technologies Llc Identification of hot regions to enhance performance and endurance of a non-volatile storage device
US10146448B2 (en) 2014-05-30 2018-12-04 Sandisk Technologies Llc Using history of I/O sequences to trigger cached read ahead in a non-volatile storage device
US9652381B2 (en) 2014-06-19 2017-05-16 Sandisk Technologies Llc Sub-block garbage collection
US9582413B2 (en) * 2014-12-04 2017-02-28 International Business Machines Corporation Alignment based block concurrency for accessing memory
JP6407736B2 (ja) 2015-01-14 2018-10-17 ファナック株式会社 産業用ロボットに実装される複合ケーブル
CN105988774A (zh) * 2015-02-20 2016-10-05 上海芯豪微电子有限公司 一种多发射处理器系统和方法
WO2017019008A1 (en) * 2015-07-27 2017-02-02 Applied Micro Circuits Corporation Hazard prediction for a group of memory access instructions using a buffer associated with branch prediction
CN105446773B (zh) * 2015-11-18 2019-02-12 上海兆芯集成电路有限公司 高速缓存行的非对齐加载指令的推测并行执行系统和方法
EP3264317B1 (en) * 2016-06-29 2019-11-20 Arm Ltd Permission control for contingent memory access program instruction
CN108062236A (zh) * 2016-11-07 2018-05-22 杭州华为数字技术有限公司 一种软硬件协同分支指令预测方法及装置
CN110347432B (zh) * 2019-06-17 2021-09-14 海光信息技术股份有限公司 处理器、分支预测器及其数据处理方法、分支预测方法
CN111258654B (zh) * 2019-12-20 2022-04-29 宁波轸谷科技有限公司 指令分支预测方法

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5148536A (en) * 1988-07-25 1992-09-15 Digital Equipment Corporation Pipeline having an integral cache which processes cache misses and loads data in parallel
US5781753A (en) * 1989-02-24 1998-07-14 Advanced Micro Devices, Inc. Semi-autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for speculative and out-of-order execution of complex instructions
US5835967A (en) * 1993-10-18 1998-11-10 Cyrix Corporation Adjusting prefetch size based on source of prefetch address
US5832297A (en) * 1995-04-12 1998-11-03 Advanced Micro Devices, Inc. Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations
JP3507193B2 (ja) * 1995-06-06 2004-03-15 株式会社東芝 ロード・ストア命令処理装置
US5875324A (en) * 1995-06-07 1999-02-23 Advanced Micro Devices, Inc. Superscalar microprocessor which delays update of branch prediction information in response to branch misprediction until a subsequent idle clock
US6643765B1 (en) * 1995-08-16 2003-11-04 Microunity Systems Engineering, Inc. Programmable processor with group floating point operations
US5687336A (en) * 1996-01-11 1997-11-11 Exponential Technology, Inc. Stack push/pop tracking and pairing in a pipelined processor
US5761491A (en) * 1996-04-15 1998-06-02 Motorola Inc. Data processing system and method for storing and restoring a stack pointer
US5813045A (en) * 1996-07-24 1998-09-22 Advanced Micro Devices, Inc. Conditional early data address generation mechanism for a microprocessor
US6009510A (en) * 1998-02-06 1999-12-28 Ip First Llc Method and apparatus for improved aligned/misaligned data load from cache
US6112297A (en) * 1998-02-10 2000-08-29 International Business Machines Corporation Apparatus and method for processing misaligned load instructions in a processor supporting out of order execution
US6374349B2 (en) * 1998-03-19 2002-04-16 Mcfarling Scott Branch predictor with serially connected predictor stages for improving branch prediction accuracy
US6349383B1 (en) * 1998-09-10 2002-02-19 Ip-First, L.L.C. System for combining adjacent push/pop stack program instructions into single double push/pop stack microinstuction for execution
US6473832B1 (en) * 1999-05-18 2002-10-29 Advanced Micro Devices, Inc. Load/store unit having pre-cache and post-cache queues for low latency load memory operations
US6704854B1 (en) * 1999-10-25 2004-03-09 Advanced Micro Devices, Inc. Determination of execution resource allocation based on concurrently executable misaligned memory operations
US6539467B1 (en) * 1999-11-15 2003-03-25 Texas Instruments Incorporated Microprocessor with non-aligned memory access
US6581150B1 (en) * 2000-08-16 2003-06-17 Ip-First, Llc Apparatus and method for improved non-page fault loads and stores
JP2003296105A (ja) * 2002-04-01 2003-10-17 Mitsubishi Electric Corp データ処理装置
US6851033B2 (en) * 2002-10-01 2005-02-01 Arm Limited Memory access prediction in a data processing apparatus
JP3974063B2 (ja) * 2003-03-24 2007-09-12 松下電器産業株式会社 プロセッサおよびコンパイラ
CN100495323C (zh) * 2004-01-13 2009-06-03 智慧第一公司 保持分离队列功能单元之间的状态一致性的方法及装置
US20060009510A1 (en) * 2004-07-09 2006-01-12 Pharmacia & Upjohn Company Llc Method of synthesizing indolinone compounds
US7437537B2 (en) * 2005-02-17 2008-10-14 Qualcomm Incorporated Methods and apparatus for predicting unaligned memory access

Also Published As

Publication number Publication date
IL185297A0 (en) 2008-02-09
US7437537B2 (en) 2008-10-14
CN101694613A (zh) 2010-04-14
US20060184738A1 (en) 2006-08-17
CN101694613B (zh) 2013-12-18
WO2006089194A2 (en) 2006-08-24
CN101156132B (zh) 2010-06-09
TW200639702A (en) 2006-11-16
KR100973951B1 (ko) 2010-08-05
BRPI0607888A2 (pt) 2009-10-20
JP5313279B2 (ja) 2013-10-09
TWI444892B (zh) 2014-07-11
CN101156132A (zh) 2008-04-02
JP2011150712A (ja) 2011-08-04
WO2006089194A3 (en) 2007-03-29
EP1849061B1 (en) 2014-12-24
JP2008530714A (ja) 2008-08-07
JP4856100B2 (ja) 2012-01-18
EP1849061A2 (en) 2007-10-31

Similar Documents

Publication Publication Date Title
KR100973951B1 (ko) 오정렬 메모리 액세스 예측
JP2008530714A5 (ko)
JP5059623B2 (ja) プロセッサ及び命令プリフェッチ方法
US6907520B2 (en) Threshold-based load address prediction and new thread identification in a multithreaded microprocessor
US7895421B2 (en) Mechanism for using performance counters to identify reasons and delay times for instructions that are stalled during retirement
US20130151823A1 (en) Next fetch predictor training with hysteresis
JP5231403B2 (ja) スライドウィンドウブロックベースの分岐ターゲットアドレスキャッシュ
JP2008535063A (ja) インデックス当り2つ以上の分岐ターゲットアドレスを記憶する分岐ターゲットアドレスキャッシュ
US20010029590A1 (en) Processor having execution core sections operating at different clock rates
JP2009536770A (ja) ブロックに基づく分岐先アドレスキャッシュ
US20080040576A1 (en) Associate Cached Branch Information with the Last Granularity of Branch instruction in Variable Length instruction Set
CN116302106A (zh) 用于促进分支预测单元的改善的带宽的设备、方法和系统
US6631454B1 (en) Processor and data cache with data storage unit and tag hit/miss logic operated at a first and second clock frequencies
CN113434867A (zh) 利用间接有效表的Spectre修复的方法和微处理器
US11614944B2 (en) Small branch predictor escape
González et al. A distributed processor state management architecture for large-window processors
CN113568663A (zh) 代码预取指令

Legal Events

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

Payment date: 20130628

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20140627

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20160629

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20180628

Year of fee payment: 9