KR100397683B1 - 로드버퍼를 가진 로드/저장유닛에서 개별적인 태그 및 데이터 배열 액세스를 위한 방법 및 장치 - Google Patents

로드버퍼를 가진 로드/저장유닛에서 개별적인 태그 및 데이터 배열 액세스를 위한 방법 및 장치 Download PDF

Info

Publication number
KR100397683B1
KR100397683B1 KR1019960003793A KR19960003793A KR100397683B1 KR 100397683 B1 KR100397683 B1 KR 100397683B1 KR 1019960003793 A KR1019960003793 A KR 1019960003793A KR 19960003793 A KR19960003793 A KR 19960003793A KR 100397683 B1 KR100397683 B1 KR 100397683B1
Authority
KR
South Korea
Prior art keywords
load
cache
load instruction
queue
buffer
Prior art date
Application number
KR1019960003793A
Other languages
English (en)
Other versions
KR960032183A (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 KR960032183A publication Critical patent/KR960032183A/ko
Application granted granted Critical
Publication of KR100397683B1 publication Critical patent/KR100397683B1/ko

Links

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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0853Cache with multiport tag or data arrays
    • 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/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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3875Pipelining a single stage, e.g. superpipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0844Multiple simultaneous or quasi-simultaneous cache accessing
    • G06F12/0855Overlapped cache accessing, e.g. pipeline
    • G06F12/0859Overlapped cache accessing, e.g. pipeline with reload from main memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

본 발명은 처리기의 로드/저장유닛, 특히 로드 버퍼를 가진 로드/저장유닛에서 개별적인 태그 및 데이터 배열 액세스를 위한 방법 및 장치에 관한 것으로서, 캐시 적중을 검사하기 위해 새로운 로드 명령이 태그 배열에 액세스하는 사이클 동안 복귀되는 보다 오래된 로드 명령의 실패 데이터에 의해 캐시의 듀얼 포트 태그 배열은 태그 배열의 동시 접속을 허용하고, 로드 버퍼가 로드 명령을 대기행렬에 등록하기 때문에, 실패한 보다 오래된 로드 명령에 대한 캐시 태그는 이후 새로운 로드 명령이 캐시 적중을 검사하기 위해 태그 배열에 액세스할 때 복귀하고, 새로이 디스패치된 로드가 로드 버퍼의 대기행렬에 등록되고 모든 보다 오래된 로드가 처리될 때까지 로드 버퍼의 적중 비트를 계산하고 관리하는 방법 및 장치가 대기한 후, 캐시에 적중하는지 또는 그렇지 않은지를 결정하고, 로드 버퍼 데이터 항이 적중 비트와 로드 명령을 처리하고 버퍼링되어야 하는 다음 로드 명령에 대한 적중 비트를 계산하는데 필요한 모든 정보를 포함하고, 캐시의 데이터 배열 부분과 태그 배열 부분의 액세스가 분리되는 로드 명령을 지원하는 방법 및 장치가 태그 배열에 다시 액세스하지 않고 로드가 로드 버퍼에 지연된 후 데이터 배열의 지연된 엑세스를 허용하며, 방법 및 장치가 제 1 레벨 캐시로의 액세스를 허용하고 제 2 레벨 캐시는 로드 버퍼에 두개의 로드를 동시에 발생하는 것을 특징으로 한다.

Description

로드 버퍼를 가진 로드/저장유닛에서 개별적인 태그 및 데이터 배열 액세스를 위한 방법 및 장치
본 발명은 처리기의 로드/저장유닛, 특히 로드 버퍼를 가진 로드/저장 유닛에서 개별적인 태그 및 데이터 배열 액세스를 위한 방법 및 장치에 관한 것이다.
RISC는 감소된 명령 세트 계산(Reduced Instruction Set Computing)을 나타낸다. RISC 처리기는 이전의 CISC(복잡 명령 세트 계산; Complex Instruction Set Computing)보다 적은 명령을 포함한다. 보다 적은 명령을 사용하기 때문에 RISC 기술의 사용하므로써 RISC 처리기에 대한 컴파일러를 기록하는 작업은 최소한 어느 정도는 단순화된다. 게다가, 처리기 설계시 최대 동작주파수를 제한하는 약간 복잡하고 덜 사용되는 명령보다는 중요하고 자주 사용되는 명령을 구현하고 최적화하는데 촛점을 맞출 수 있다. 상기 이유와 그 외의 다른 이유로, RISC 처리기는 워크스테이션 및 저급 컴퓨터 제조자들에게서 인기를 얻고 있다.
일반적으로 RISC 처리기에서는 메모리에 액세스하는 명령이 매우 적다. 사실, 몇몇 구현은 메모리에 액세스하는 다만 두개의 명령, 즉 로드와 저장을 가질 수 있다. 통상, 몇개의 전용 "최소" 동작이 동기용 처리기에 의해 지원될 수 있고, 동시 처리에 의해 메모리는 갱신한다. The SPARC Architecture Manual, Version 9, SPARC International, Inc., D.L, Weaver 및 T. Germond, Editors, PTR Prentice Hall, 1994, 17페이지 참조. 이 경우에도 로드 및 저장은 가장 많이 사용되는 명령이다. 로드 명령을 실행하면 처리기 레지스터에 메인 메모리 번지에 존재하는 데이터가 기록된다. 저장 명령을 실행하면 메인 메모리 번지에 처리기 레지스터에 존재하는 데이터가 기록된다. 그러므로, 로드 및 저장 명령은 하나의 레지스터 또는 레지스터 군과 메모리 번지를 오퍼랜드로서 명시할 필요가 있다. 몇몇 구현에서, 두개의 레지스터 또는 하나의 레지스터와 즉시값이 메모리 번지를 계산하기 위해 사용된다. 많은 구현들이 하나의 명령을 사용하는 하나 이상의 데이터 워드를 전송하는 몇개의 다양한 로드 및 저장을 제공한다. 그러므로, 하나 이상의 소스 또는 행선 레지스터가 존재한다. 상기 소스 또는 행선 레지스터는 저장 또는 로드 명령에서의 오퍼랜드로서 설계된다.
제 1 도에 슈퍼스칼라(superscalar) 처리기(12)가 도시되어 있다. 슈퍼스칼라 처리기(12)는 몇개의 병렬 기능유닛(10, 11)을 가진다. 몇개의 종래 슈퍼스칼라 구현은 플로팅 포인트(floating point), 정수, 분기 및 로드/기억 기능유닛을 포함한다. 따라서, 네개 이상의 명령이 병렬로 실행된다. 또한 대부분의 슈퍼스칼라 처리기는 최소한 어느 정도는 파이프라인 방식으로 구성된다. 파이프라인 방식은 명령 처리를 단계적으로 발생하도록 하며, 따라서 명령 처리가 완료되기 전에 몇개의 클럭 사이클이 소요된다. 그러나, 파이프라인 방식의 처리기 설계에서, 각 단계가 항상 명령을 처리하고 있기 때문에 몇개의 명령은 동시에 처리된다.
제 2 도에 로드/저장유닛(10)의 간단한 블럭도가 도시되어 있다. 로드/저장 기능유닛(10)의 처리능력을 최대화하기 위해 즉시 서비스될 수 없는 로드에 계속 디스패치되고, 처리기(12)의 동작을 방해하지 않고 서비스를 대기할 수 있도록 로드 버퍼(20)가 제공된다. 상기 로드 버퍼(20)는 로드 소스 메모리(22) 및 행선 레지스터 번지(23)를 가지는 FIFO 대기행렬이다. 로드를 위해 대기행렬을 관리하므로써, 현재의 로드 동작이 완료된 후 다른 로드 동작을 즉시 이용할 수 있기 때문에로드 및 저장 명령에 의해 사용된 메모리 자원은 최대화된다.
캐시는 다중 레벨 메모리 시스템을 사용하여 참조의 국부성을 이용하기 위한 일반적인 기술이다. 그 기본 사상은 소용량의 빠른 액세스 메모리와 대용량의 보다 느린 액세스 메모리로 구성하는 것이고, 대부분의 액세스는 소용량의 빠른 메모리로 간다. 상기 메모리 시스템의 평균 액세스 시간은 소용량의 빠른 메모리의 액세스 시간보다 약간 커질 수 있고, 반면에 실제 크기는 대용량의 메모리 크기이다.
다중 레벨 메모리 시스템의 일반적인 형태는 캐시 메모리 도는 룩어사이드(lookaside) 버퍼 메모리이다. 캐시 메모리는 처리기 및 메인 메모리 사이에 위치한 상대적으로 소용량의 전용 메모리 장치이다. 캐시 메모리는 처리기에 의해 액세스될 수 있는 메모리로부터 여러 개의 워드를 가지고 있다. 캐시는 메인 메모리보다 빠르다. 따라서 액세스된 기억 장소가 캐시에서 발견되면, 적중율은 높게 될 것이고, 평균 액세스 시간은 적어질 것이다. 캐시에 의해 수행되는 방법은 처리기에 의해 최근에 사용된 다른 워드 근처에 위치한 워드를 유지하는 것이다. 이러한 방법에 의해 이용된 참조의 국부성은 짧은 시간에 걸쳐 메모리의 조그마한 영역을 분류하는 메모리 액세스의 특성이다.
캐시 메모리 기억장소는 각 기억장소가 보다 느린 메인 메모리에 저장된 보다 액세스가능한 정보를 제공하기 위해 사용된다는 의미에서 여유가 있다. 따라서, 프로그래머가 보는 바와 같이 전체 번지할당이 가능한 메모리 크기는 캐시로 인해 증가하지는 않는다. 오히려 캐시는 프로그램 투명성으로 동일한 번지 공간의 기억장소에 대한 평균 액세스 시간의 개선을 제공한다.
캐시가 메인 메모리보다 훨씬 적은 용량이기 때문에, 소수의 메인 메모리 기억장소가 한번에 캐시될 수 있다. 결론적으로, 일반적인 경우에 캐시 또는 캐시 라인의 각 기억장소는 개념적으로 두개의 부분, 즉 태그 필드와 내용 필드를 가진다. 판독 또는 기록 동작이 요청될 때, 채택된 번지는 륵정 캐시 라인의 태그 필드와 비료된다. 일치하는 것이 존재하면, 일치하는 태그를 포함하는 캐시 라인의 내용 필드가 판독되거나 기록된다. 메인 메모리에 액세스할 필요는 없다. 이것을 캐시 적중이라 한다.
제 2 도에 도시된 로드/저장 유닛은 모든 로드 명령을 실행하고, 일반적으로 메모리와의 모든 인터페이스에 대한 책임을 가진다. 제 2 도에 도시된 바와 같이, 로드/저장 유닛은 제 1 레벨 내부 캐시(24)를 관리한다. 로드/저장 유닛은 메모리 관리유닛(26)과 연결된 제 2 레벨 외부 캐시(25)와 연결된다. 제 1 레벨 캐시(24)는 직접 매핑 캐시이고, 여기서 캐시될 기억장소의 번지는 캐시내의 특정 기억장소에 매핑된다.
로드 버퍼(20)에 대한 이론은 너무 커서 내부 캐시(24)로는 적합하지 않은 작업 세트를 가지는 코드에 대해 대기시간 또는 외부 캐시(25)를 대상으로 할만큼 충분한 로드 명령 및 이 명령의 연속적인 사용이 분리될 수 있다는 것이다. 따라서 로드 버퍼(20)는 데이터를 즉시 되돌릴 수 없는 로드가 파이프라인 처리를 정지하지 않고 분리할 수 있을 때까지 버퍼링(buffering)될 것이란 점에서 로드/저장 기능유닛과 다른 기능유닛이 다소 분리되도록 한다. 통상적으로, 로드가 내부 데이터 캐시(24)로의 액세스에 실패하고 외부 캐시(25)에 접속해야 할 때를 한 예를 들 수있다. 이 경우, 로드는 로드 버퍼(20)에 위치할 것이고, 실행 파이프 라인이 로드되는 레지스터를 요청하지 않는 한, 즉 실행 파이프라인이 "사용" 명령과 조우하지 않는 한 실행 파이프라인은 계속 이동할 것이다.
제 3 도는 비연상 또는 직접 매핑 캐시(30)를 나타낸다. 직접 매핑 캐시 (30)는 적중 검사를 위해 캐시(30)내의 번지를 지적하기 위해 입력 메모리 번지 (32)의 하위 비트(31)를 사용한다. 이러한 비트를 캐시내의 인덱스라 한다. 따라서, 메모리 기억장소 A는 다만 캐시 라인(33)에만 존재할 수 있고, 캐시(30)내의 번지는 기억장소 번지(32)의 하위 k 비트(31)이다. 메모리 번지(32)를 캐시 (30)내의 한 라인만에서 캐시되도록 하는 것은 상당한 제한인 반면에, 연상 메모리보다 싸고 밀도가 높은 표준 RAM을 사용할 수 있다. 직접 매핑 캐시의 다른 중요하고 매력적인 특성은 회로를 고속화, 간단화 및 소형화를 이를 수 있다는데 있다. 그러나, 캐시 라인 제한은 동일한 하위 k 번지비트(31)를 공유하는 메모리 기억장소가 동일한 캐시 라인(33)을 공유한다는 것을 의미한다. 각 캐시 라인(33)이 하나의 메모리 기억장소의 내용을 저장할 저장소를 제공하면, 두개의 메모리 기억장소가 동일한 캐시 라인을 차지하기 위해 경쟁하기 때문에 동일한 하위 k 번지비트(31)를 가지는 두개의 메모리 기억 장소는 동시에 캐시될 수 없다. 각 캐리 라인(33)내에서, 데이터(34)는 태그(35)와 함께 저장된다. 간단한 번지할당 구조에서, 태그(35)는 단지 그 캐시(110) 라인에 저장된 메모리 기억장소 중 상위 번지비트이다. 캐시 적중이 발생되는지를 결정하기 위해, 입력 메모리번지(36)의 상위 번지비트가 입력 메모리 번지(31)의 하위 비트에 의해 매핑된 기억장소에 저장된 태그(35)와 비교된다. 입력 메모리 번지(36)의 상위 비트가 하위 비트(31)에 의해 색인된 캐시 라인(33)에 저장된 태그(35)가 일치하면, 캐시 적중이 존재한다.
제 4 도의 내부 캐시(40)는 두개의 메모리, 즉 데이터 메모리(41) 및 태그 메모리(42)로 구성되어 있다. 개념적으로, 그 동작은 데이터(41) 및 태그 부분은 동일한 방법으로 색인되고 동일한 라인수를 가지기 때문에 제 3 도에 도시된 캐시(30)의 동작과 유사하다. 데이터 배열(41)의 각 데이터 라인은 태그 배열(42)의 대응하는 기억장소에 대응하는 태그를 가진다.
제 2 도에서, 로드 데이터가 외부 캐시로부터 복귀될 때, 그 데이터는 내부 캐시(24)에 기록된다. 이러한 대체 방법의 원리는 최근에 사용된 데이터가 가까운 미래에 다시 사용될 수 있다는 것에 있다. 내부 캐시(24)로의 기록은 데이터 RAM(41)(제 4 도) 및 태그 RAM(42)(제 4 도)에서 적절한 라인이 변경되어야 하는 것을 의미한다.
로드가 디스패치될 때, 로드/저장 유닛(10)(제 1 도)은 요청된 메모리 기억장소가 내부 캐시(24)에 존재하는지를 보기 위한 검사를 실행한다. 적중이 발생했는지를 결정하기 위해, 적절한 태그가 태그 RAM(42)(제 4 도)으로부터 복원되고, 요청된 기억장소에 대한 번지의 적절한 부분과 비교된다. 상기 태그 복원이 발생하는 동안, 내부 캐시(24)에 액세스하지 못한 보다 오래된 로드 명령은 데이터 및 태그 정보를 복귀시킬 수 있다. 대부분의 캐시 대체 방법이 캐시(24)에서 가장 최근에 참조된 데이터의 포함을 요청하기 때문에, 내부 캐시(24)는 상기 이전의 캐시 실패로부터 복귀된 데이터 및 태그를 가지도록 갱신되어야 하고, 따라서 동일한 기억장소가 다시 요청되면 이러한 기억장소는 내부 캐시(24)에 적중할 것이다. 외부 캐시(25)에 대한 비영 대기시간이 존재하고, 로드 버퍼(20)가 외부 캐시(25)에 액세스해야 하는 로드의 지원을 지연하는 경향이 있기 때문에, 로드가 로드 버퍼(20)에 위치한 다음, 몇개의 사이클이 경과한 후 외부 캐시(25)로부터 데이터가 복귀된다. 보다 오래된 로드가 외부 캐시(25)로부터 데이터를 복구하고 있는 것과 동일한 사이클 동안 새로운 로드가 디스패치되면, 내부 캐시 태그 RAM 데이터 포트(43)(제 4 도)에 충돌이 발생한다.
종래 기술의 문제점은 어떤 로드가 내부 캐시(24)에 액세스하지 못하면 사이클당 하나의 로드에 대한 처리능력이 달성될 수 없다는 것에 있다. 코드에 대한 타이트(tight) 루프가 사이클당 하나의 로드를 확실히 발생하기 때문에, 모든 로드가 내부 캐시(24)에 액세스하지 못한다 할지라도 사이클당 하나의 로드에 대한 처리능력을 유지할 수 있어야 한다는 것이 중요하다. 새로이 디스패치된 로드는 로드 버퍼 대기행렬(20)의 헤드에서 다른 로드가 이전의 내부 캐시 실패 때문에 내부 캐시(24)에 데이터를 복귀시키는 것과 동일한 사이클 동안 내부 캐시 적중에 대해 검사하기 위해 태그 RAM 포트(43)(제 4 도)에 액세스할 필요가 있고, 이 중 하나만이 상기 사이클동안 처리될 수 있다. 사이클당 하나의 로드가 발생하면, 태그 RAM 데이터 포트(43)(제 4 도)가 매 사이클 동안 내부 캐시 적중에 대해 검사하기 위해 이용될 것이다. 따라서, 로드 버퍼로부터의 보다 오래된 로드는 복귀된 로드 데이터를 기록하기 위해 태그 RAM에 액세스할 수 없다. 사이클당 하나의 로드가 발생하면, 입력 로드 중 하나가 내부 캐시(24)에 액세스하지 못했을 때 처리기는 정지하고, 이 후 모든 후속하는 로드는 로드 버퍼(20)의 대기행렬에 등록된다. 로드 버퍼(20)의 로드가 태그 RAM 포트(43)(제 4 도)에 액세스할 수 없기 때문에, 로드 버퍼(20)는 보존하고 있는 로드 중 어느 것도 성공적으로 지원하지 못할 것이다. 충분한 로드가 로드 버퍼에 축적되어 로드 버퍼(20)가 가득차면, 처리기(12)(제 1 도)는 로드가 디스패치될 수 없는 다음 사이클 동안 정지된다.
처리기의 로드/저장 유닛에서, 사이클당 하나의 명령형에 대한 지속적인 처리능력은 매 사이클에 로드 명령을 포함하는 명형 스트림을 실행할 때 처리기가 정지하지 못하도록 하는 바람직하다.
로드 버퍼가 로드 명령을 대기행렬에 등록하기 때문에, 새로운 로드 명령이 캐시 적중을 검사하기 위해 태그 배열을 액세스하고 있을 때, 캐시에 실패한 보다 오래된 로드 명령에 대한 캐시 태그가 나중에 복귀한다. 따라서, 오래된 복귀 태그 및 새로운 로드가 캐시의 태그 배열을 차지하기 위해 경쟁한다. 본 발명에 따르면, 캐시의 듀얼 포트 태그 배열은 새로운 로드 명령이 캐시 적중을 검사하기 위해 태그 배열을 액세스하고 있는 것과 동일한 사이클 동안 복귀되는 보다 오래된 로드 명령의 실패 데이터에 의해 태그에 동시에 액세스할 수 있도록 한다.
로드/저장 유닛의 캐시에서, 데이터 배열 액세스로부터 태그 배열 액세스를 분리하기 위해, 새로이 디스패치된 로드가 로드 버퍼의 대기행렬로 등록되고, 보다 오래된 로드를 모두 처리하도록 대기한 후, 로드 버퍼에서 적중 비트를 계산 및 유지하는 방법 및 장치는 새로이 디스패치된 로드가 캐시 적중할 것인지를 결정한다. 따라서, 로드가 로드 버퍼 대기행렬의 헤드에 도달할 때, 태그 RAM은 다시 액세스할 필요는 없다.
로드 버퍼에서 데이터 구조는 본 발명의 방법 및 장치를 이용한다. 로드 버퍼 데이터 항은 로드 명령을 처리하고, 버퍼링되어야 하는 미래의 로드 명령에 대한 적중 비트를 계산하기 위해 필요한 적중 비트 및 모든 정보를 포함한다. 로드가 태그 배열을 다시 액세스하지 않고 로드 버퍼에서 지연된 후, 로드 명령을 지원하는 방법 및 장치에서, 분리된 캐시의 데이터 배열 부분 및 태그 배열 부분의 액세스는 데이터 배열의 액세스를 지연시킨다. 따라서, 사이클당 하나의 로드 명령의 지속된 처리능력이 달성될 수 있다.
로드가 로드 버퍼에서 대기행렬 위치의 헤드에 도달하여 제 1 레벨 캐시에 실패할 때, 로드 버퍼에서 각각의 보다 오래된 로드가 로드 버퍼 대기행렬의 헤드에 도달하는 것에 대한 제 1 레벨 캐시 적중으로 될 것이고, 로드 버퍼 대기행렬 위치의 헤드에 도달하기 전에 제 1 레벨 캐시에 실패한 로드에 대한 외부 캐시로의 액세스가 시작될 수 있다. 제 2 레벨 캐시 포인터는 외부 캐시에 액세스할 수 있는 가장 오래된 미결의 로드를 포함하는 로드 버퍼 항을 참조한다. 따라서, 본 발명에 따른 방법 및 장치는 로드 버퍼에서 두개의 분리된 로드에 대해 제 1 레벨 캐시 및 제 2 레벨 캐시에 대한 액세스가 동시에 발생하도록 한다.
현재 처리기는 물리번지공간과는 다른 가상번지공간을 가진다. 가상번지는 처리기가 메모리 기억장소를 명시하기 위해 사용하는 레이블(label)이다. 처리기가 기억장소를 가상번지로서 액세스할 수 있는 한, 처리기는 메모리 기억장소가 물리 메모리에 실제 존재하는 메모리 기억 장소와 관련되지 않는다. 처리기 구조 명세는특정 가상번지공간을 규정한다. 컴퓨터 시스템을 관리하는 운영체계는 가상번지공간이 어떻게 물리 메모리에 매핑되는지에 대해 유연성을 가진다. 따라서, 가상번지로부터 물리번지로 발생해야 하는 변환이 존재한다.
제 5 도는 본 발명에 따른 기능유닛(50)의 간단한 블럭도이다. 내부 캐시(51)는 가상적으로 인덱스되고, 물리적으로 태그된다. 가상 인덱스 캐시에서, 가상번지의 하위비트는 캐시 라인에 직접 매핑 또는 인덱스를 제공하기 위해 사용된다. 그러나, 태그는 물리번지의 상위비트이다. 따라서, 캐시 적중이 발생되었는지를 결정하기 위해, 물리번지의 상위비트(52)는 인덱스에 의해 참조된 캐시 라인에 대한 태그 필드에 저장된 태그(53)과 비교된다.
미결의 로드는 순차적으로 실행되어야 한다. 로드 절차가 명령 스트림에 존재하면, 상기 로드를 데이터가 명령 스트림의 절차로 레지스터 파일로 기록되어야 한다. 로드가 고장으로 복귀되면, 프로그래머가 정반대로 예측했을 때, 보다 오래된 로드가 보다 새로운 로드의 결과를 손상시킨다. 로드가 내부 캐시(51)에 액세스하지 못할 때, 이 로드는 로드 버퍼(54)의 대기행렬에 등록된다. 다음 사이클 동안, 내부 캐시(51)에 적중하는 로드가 디스패치될 수 있다. 정상적으로, 이것은 내부 캐시(51)로부터 데이터를 즉시 검색하고 복귀하도톡 한다. 그러나, 외부 캐시(55) 또는 메모리 관리유닛(56)을 통해 메인 메모리에 액세스해야 하는 미결의 보다 오래된 로드가 존재하기 때문에, 보다 새로운 로드가 로드 버퍼(54)의 대기행렬에 등록되어야 하며, 따라서 미결의 보다 오래된 로드가 복귀할 때까지 복귀되지 않는다. 로드가 순차적으로 데이터를 복귀해야 하는 보다 더 중요한 이유는 소프트웨어 트랩 및 인터럽트를 구현하기 어렵게 되어 고장난 로드 실행이 로드/저장유닛의 복잡성을 증가시키기 때문이다.
로드 버퍼의 로드는 근본적으로 소프트웨어 트랩 또는 인터럽트와 같은 예외적인 조건을 처리하기 위해 태그되고, 따라서 로드가 모든 파이프라인 방식의 처리단계를 통해 연속적으로 행해질 때 로드는 완료된다. 예외적인 조건이 그 시간전에 발생하면, 완료되지 않은 로드는 제거되어야 하고, 로드 버퍼는 "다시 감아진다."
로드 버퍼(54)는 레지스터에 순차적으로 데이터를 복귀시킨다. 보다 오래된 로드가 외부 캐시(55)로 액세스하기 위해 대기하고 있으면, 내부 캐시(51)에 적중하는 보다 새로운 로드를 지원하는 하나의 방법은 보다 오래된 로드가 그 데이터를 복귀할 때까지 보다 새로운 로드에 대해 데이터를 검색하고 데이터를 버퍼링한다. 그러나, 상기 방법은 몇개의 로드가 버퍼링을 요청하기 때문에 비용이 많이 든다. 모든 상기 로드 데이터를 버퍼링하는데 필요한 영역의 양은 너무 커서 실용적이지 못하다.
본 발명에 따르면, 보다 오래된 로드가 외부 캐시로부터 복귀하기 위해 대기하는 동안 보다 새로운 로드로부터 로드 데이터를 버퍼링하는 대신에, 로드 버퍼(54)는 보다 새로운 로드가 내부 캐시(51)에 적중 또는 실패하였는지를 기록하며, 내부 캐시(51)에 적중했다면 내부 캐시(51)에 이후에 다시 액세스하는지에 대해 기록한다. 적중/실패 결정에 요청되는 메모리 포트만이 내부 캐시(51)의 태그 포트(57)이다. 그러므로, 로드 버퍼(54)가 비어있지 않을 때, 파이프라인으로 들어오는 새로이 디스패치된 로드가 내부 캐시(51)의 태그 RAM 부분(58)에만 액세스한다. 이 후에 로드가 로드 버퍼 대기행렬(54)의 헤드에 옥, 내부 캐시(51)에 적중되는 것으로 기록될 때, 내부 캐시(51)의 데이터 부분만 액세스하고, 따라서, 태그 RAM(58)을 사용하는 새로이 디스패치된 로드는 영향을 받지 않는다.
내부 캐시(51)를 완전히 갱신하기 위해, 태그 RAM(58) 및 데이터 RAM(59)이 기록되어야 하고, 이 때 로드 데이터는 외부 캐시(55)로부터 복귀된다. 로드 버퍼(54)가 비어있지 않을 때, 내부 캐시(51)의 데이터 RAM 포트는 내부 캐시(51)에 액세스하지 못하고, 외부 캐시(55)로부터 복귀할 때 내부 캐시(51)를 채우는(또는 할당하는) 보다 오래된 로드에 대하여 사용될 수 있다. 그러나, 태그 포트(57)가 적중을 검사하기 위해 새로이 디스패치된 로드에 의해 사용되어야 하기 때문에 태그 포트(57)는 사용이 불가능하다. 본 발명에서는 처리기(12)(제 1 도)가 정지하지 않도록 하고 최적의 성능의 발휘하도록 하기 위해, 내부 캐시 태그 RAM(58)은 외부 캐시(55)에 액세스했던 로드 버퍼(54)의 오래된 로드로 부터 복귀된 데이터로서 태그 RAM(58)을 기본적으로 채우는 전용 제 2 포트(550)를 포함한다. 그러므로, 제 1 태그 RAM 포트(57)는 내부 캐시(51)의 적중을 검사하기 위해 새로이 디스패치된 로드에 의해 사용될 수 있고, 반면에 제 2 태그 RAM 포트(550)는 로드 버퍼(54)의 보다 오래된 로드로부터 복귀된 기억장소의 태그와 함께 태그 RAM(58)을 채우기 위해 동시에 사용될 수 있다.
제 2 태그 RAM 포트(550)는 다중 레벨 캐시 및/또는 다중 처리 환경에서 역시 사용가능하다. 캐시 일치성을 보증하는 트랜잭션(transaction)인 "스누프(snoop)"는 명령의 발생을 정지시키지 않고 이 포트(550)를 사용할 수 있다. 로드 부하가 비어 있다면, 로드가 스누프와 병렬로 지원될 수 있다. 로드 버퍼가 비어 있지 않으면, 로드는 기록된 적중 비트로 정상적으로 대기행렬에 등록된다. 이 경우에 상기 적중 비트가 스누프에 의해 적절히 영향을 받도록 하는 전용 매커니즘이 존재한다.
본 발명에 따르면, 로드 버퍼(54)로 전송된 각 항은 로드가 처음에 로드/저장유닛(10)(제 1 도)에 처리기로 디스패치될 때, 요청된 기억장소에 대한 태그가 태그 RAM에 있는지 또는 그렇지 않은지를 나타내는 "적중 비트"(60)(제 6 도)를 가진다. 로드 버퍼(54)의 대기행렬에 등록된 로드가 대기행렬(551) 헤드에 도달할 때, 적중 비트가 발생하면 데이터 배열은 로드 버퍼(54)에 의해 액세스될 것이다. 최초 적중/실패를 결정하는 동안 발생하는 중간 시간 및 로드가 로드 버퍼 대기행렬(551) 헤드에 도달하는 시간 동안, 몇개의 사상이 주어진 로드의 적중/실패 상태가 발생하였다. 그러므로, 내부 캐시(51) 적중 정보가 이러한 사상이 발생할 때 기록되고 적절히 유지되는 것이 중요하다.
로드가 데이터 배열(59)에 액세스하기 전에 태그 배열(58)에 액세스한 후 적중 비트(60)(제 6 도)에 영향을 미치는 사상은 내부 캐시(51) 상태를 변경한다. 보다 오래된 로드 할당이 로드 버퍼(54)에서 보다 새로운 로드의 소스 번지에 의해 매핑된 라인의 내부 캐시 라인 내용을 대체할 때, 제 1 사상이 발생한다. 이것은 내부 캐시 적중을 내부 캐시 실패로 변환할 것이다. 예를 들면, 번지 X 및 Y가 동일한 내부 캐시 라인에 직접 매핑되는 프로그램 일부를 생각하자. 로드 X, rO는 메모리 번지 X의 내용이 레지스터 r0로 로드되도록 하는 요청이다.
제 1 로드 명령의 실행 전에, Y는 내부 캐시(51)에 캐시된다고 가정하자. 또한 제 1 로드가 내부 캐시에 실패했다고 가정하자. Y(X가 아닌)가 관련 캐시 라인을 점유하기 때문에 제 2 로드가 디스패치될 때 실패가 발생한다. 제 2 로드는 로드 버퍼(54)에 보내지고, 그것은 현재 외부 캐시(55)에 액세스하고 있는 제 1 로드 명령뒤에 위치한다. 이제 제 3 로드가 디스패치된다. Y가 내부 캐시(51)에 존재하기 때문에 제 3 로드는 내부 캐시(51)에 적중한다. 제 1 로드가 실패했을 때, 로드 데이터 복귀의 적절한 순차를 유지하기 위해 내부 캐시(51)에 적중할지라도, 이후의 로드는 로드 버퍼(54)에 버퍼링되어야 한다. 따라서, 제 3 로드는 로드 버퍼(54)에 기록되고, 제 2 로드 위에 위치한다. 외부 캐시(55)가 제 1 로드로 복귀한 후, 제 2 로드는 외부 캐시(58)에 액세스하기 시작한다. 제 2 로드가 복귀할 때, 관련 내부 캐시 라인을 할당한다(또는 채운다). 제 3 로드가 로드 버퍼 대기행렬(551) 헤드에 도달할 때, 제 2 로드는 내부 캐시(51)의 라인상에 기록되기 때문에 제 3 로드가 바람직한 데이터는 더이상 내부 캐시(51)에 존재하지 않는다. 그러므로, 제 3 로드는 보다 오래된 제 2 로드에 의해 적중으로부터 실패로 변환된다.
로드 버퍼(54)에서 로드의 적중/실패 상태에 영향을 미칠 수 있는 다른 사상은 보다 오래된 로드에 의한 데이터 할당이다. 이것은 내부 캐시 실패를 내부 캐시(51)로 적중시키는 효과를 가진다. 예를 들면, 다음과 같은 프로그램 일부를 생각하자.
W 또는 X가 내부 캐시(51)에 없다고 가정하자. 제 1 로드가 디스패치될 때, 실패가 발생하고, 제 1 로드는 로드 버퍼(54)에서 버퍼링된다. 제 2 로드가 디스패치될 때, 실패가 발생하고, 현재 외부 캐시(55)에 액세스하고 있는 제 1 로드에 이어 로드 버퍼(54)에 보내진다. 제 3 로드가 디스패치될 때, X가 아직 내부 캐시(51)에 존재하지 않기 때문에 또 다른 실패가 발생한다. 그러나, 제 2 로드가 로드 버퍼(54) 대기행렬 헤드에 도달하고 내부 캐시(51)를 채울 때, X는 내부 캐시(51)에 존재한다. 그러므로, 제 3 로드는 X에 대한 외부 캐시(55)로 갈 필요가 없다. 대신에, 제 3 로드에 대한 실패는 제 2 로드에 의해 적중으로 변환된다.
본 발명에 따르면, 로드의 적중/실패 상태가 알려져 있기 때문에 로드 버퍼 대기행렬(551) 헤드에서의 로드에 대하여 외부 캐시(55)에 대한 액세스는 이전의 로드가 외부 캐시(55)를 사용하여 완료되자 마자 시작될 수 있다. 이 경우에 외부 캐시(55)에 대한 액세스는 보다 빨리 발생될 수 있다. 예를 들면, 대기행렬(551)헤드에서 로드가 발생된 적중 비트(60)(제 6 도)를 가지면, 외부 캐시(55)에 액세스할 필요가 없다. 그러므로, 이 후의 로드는 재발생된 적중 비트(60)(제 6 도)를 가지면, 로드 버퍼(54) 대기행렬 헤드뒤의 로드는 외부 캐시 (55)에 액세스하기 시작한다. 상기 방법을 이루기 위해, 외부 캐시 포인터는 외부 캐시(55)를 액세스할 필요가 있는 가장 오래된 로드 버퍼 항을 명시하기 위해 사용된다. 외부 캐시 실패 또는 예외의 존재하에서, 외부 캐시 포인터는 내부 캐시에 적중하는 보다 새로운 로드를 넘어 뒤쪽으로 다시 감을 수 있는 로드/저장유닛을 제공한다.
로드 버퍼(54) 설계는 일단 로드가 로드 버퍼(54)로 입력된 적중 또는 실패 상태를 인식하는 것을 기본으로 하고 있고, 따라서 외부 캐시(55) 액세스가 가능한한 빨리 시작될 수 있다. 전술한 두가지 경우는 모두 내부 캐시(51)에 대한 보다 오래된 로드의 영향의 결과이고, 여기서 로드 버퍼 대기행렬(551)의 헤드에 도달하는 것에 대한 로드의 적중 상태는 태그 RAM(58)에 액세스될 때 그 초기 상태와 다르다. 그러므로, 로드 버퍼(54)의 새로운 항에 대한 적중 비트(60)(제 6 도)는 태그 비교(552)의 결과 및 로드 버퍼(54)의 로드의 번지로부터 인출될 수 있다. 로드 버퍼(54)로 일단 기록되면, 적중 비트(60)(제 6 도)는 변화하지 않는다. 그러므로, 새로이 디스패치된 로드는 로드 버퍼(54)의 미결의 로드와 비교된다. 필요에 따라 적중 비트(60)(제 6 도)는 자체적으로 로드 버퍼(54)로 변경된다. 예를 들면, 동일한 태그를 가진 동일한 라인에 또 다른 로드가 발생할 때 로드가 내부 캐시(51)에 실패하고 외부 캐시(55)에 액세스하고 있으면, 후자의 로드가 적중으로 변환되고 로드/저장유닛(50)은 외부 캐시로 가지 못할 것이라고 이해하는 것이 바람직하다.이와 마찬가지로, 제 2 로드가 동일한 라인에 있고, 라인 태그가 내부 캐시(51)에 존재하면, 미결의 로드에 의해 대체되고, 로드/저장유닛(50)은 실제 발생되기 전에 외부 캐시(55) 액세스를 시작할 수 있다고 이해하는 것이 바람직하다.
로드 버퍼(65)의 정보 구조는 제 6 도에 도시된 바와 같다. 최소한, 로드 버퍼(155)는 행선 레지스터 번지(61), 내부 캐시(51)(제 5 도)내의 인덱스, 로드되는 메모리 번지와 관련된 태그(63), 적중 비트(60) 및 로드되는 메모리 번지의 소스 번지(64)를 저장해야 한다. 로드되는 소스 메모리 번지(64)에 대해서, 로드 버퍼(65)는 상기 구조에서 가상-물리 변환이 발생하는 위치에 따라 물리번지 또는 가상번지를 저장할 수 있다. 상기 두가지 경우 중 어느 하나의 경우에서, 태그(63) 또는 인덱스(62) 또는 태그 및 인덱스는 소스 메모리 번지(64)의 일부이다. 내부 캐시(51)(제 5 도)가 가상적으로 인덱스되고 가상적으로 태그되면, 태그(63) 및 인덱스(62)는 물리번지와 본질적으로 동일하다. 내부 캐시(51)(제 5 도)가 가상적으로 인덱스되고 물리적으로 태그되면, 태그(63)는 물리번지 중 상위 비트인 반면에 인덱스(62)는 가상번지 중 하위 비트이다. 내부 캐시(51)(제 5 도)가 물리적으로 색인되고 가상적으로 태그되면, 태그(63)는 가상번지 중 상위 비트인 반면에 인덱스(62)는 물리번지 중 하위 비트이다. 제 6 도는 가상적으로 인덱스되고 물리적으로 태그된 내부 캐시(51)(제 5 도)로 사용될 로드 버퍼(65) 데이터 구조를 나타내고, 여기서 가상-물리번지 변환은 로드 버퍼(65)로의 기입전에 발생한다. 태그(63)는 소스 물리번지(64) 중 상위 비트이다. 그러므로 태그(63)는 독립적으로 저장되지 않는다.
새로이 디스패치된 로드가 로드 버퍼의 대기행렬에 등록되어야 할 때, 로드의 적중 비트(60)에 대한 계산이 실행된다. "최초 적중 비트" 값(552)(제 5 도)은 로드 번지에 의해 인덱스된 태그(63) RAM 항을 번지의 태그(63)와 비교하므로써 결정된다. 로드 번지의 인덱스(62)는 로드 버퍼(65)의 모든 인덱스(62)와 동시에 비교된다. 로드 버퍼(65)의 각 항(66)에 대하여, 상기 비교는 인덱스 일치 신호를 발생한다. 발생된 인덱스 일치 신호를 가지는 항만이 최초 적중 비트값(552)(제 5 도)을 변경시킬 수 있다. 발생된 인덱스 일치 신호를 가지는 가장 새로운 항에 대하여, 로드 번지의 태그는 발생된 인덱스 일치 신호를 가지는 가장 새로운 항의 태그(63)와 비교된다. 이것은 "태그 일치 신호"를 발생한다. 항(66)에서 인덱스 일치 신호가 발생하고, 태그 일치 신호가 발생하며, 최초 적중 비트(552)(제 5 도)가 발생한다. 이 경우에 보다 오래된 로드는 새로이 디스패치된 로드가 로드 버퍼(551)(제 5 도)의 헤드에 도달할 때까지 바람직한 데이터를 가지고 내부 캐시(51)(제 5 도)를 채운다. 따라서, 실패는 적중으로 변환된다. 한편, 항(66)에서, 인덱스 일치 신호가 발생하고, 태그 일치 신호가 발생하며, 최초 적중 비트(552)(제 5 도)가 발생하면, 로드에 대한 적중 비트(60)가 발생되지 않는다. 이 경우에 보다 오래된 로드는 새로이 디스패치된 로드가 로드 버퍼 대기행렬(552)(제 5 도)의 헤드에 도달할 때까지 바람직한 데이터를 기록할 것이다. 따라서, 적중은 실패로 변환된다. 다중 로드 버퍼 항(66)이 발생된 인덱스 일치 신호를 가지면, 가장 새로운 항은 새로이 디스패치된 로드의 적중 비트(60)의 결정을 제어한다. 전술한 논리는 다음 규칙에 의해 실행된다. 인덱스 일치가 로드 버퍼(65)에서 발생하면, 새로이 디스패치된로드의 적중 비트(60)가 일치 인덱스(62)를 가지는 가장 새로운 항의 태그(63) 일치 신호값을 가진다. 인덱스 일치가 로드 버퍼(65)에서 발생하지 않으면, 적중 비트는 최초 적중 비트(552)(제 5 도) 값을 가진다.
제 7 도는 4개의 유효항을 가지는 로드 버퍼(65)(제 6 도)에서 세로운 항에 대한 적중 비트(70) 값을 발생하는 하드웨어 구조를 도시한다. 제 7 도에서, INDEXO(71)과 TAGO(72)는 가장 새로운 항에서 각각의 인덱스(62)(제 6 도) 및 태그(63)(제 6 도)를 나타내는 반면에, INDEX3(73) 및 TAG3974)는 가장 오래된 항에서 각각의 인덱스(62) 및 태그(63)를 나타낸다. 비교기(74)는 새로운 로드 인덱스(75)를 로드 버퍼(65)(제 6 도)의 모든 인덱스(76)과 비교한다. 우선순위 회로(77)는 1 또는 어떤 출력도 없음을 표명한다. 가상 새로운 항으로부터 표명된 일치 신호만이 우선순위 회로(77)의 출력(78)에서 표명된다. 어떤 입력(79)도 표명되지 않으면, 어떤 출력(78)도 표명되지 않는다. 우선순위 회로(77)의 출력(78)중 하나가 표명되면, 통과 게이트(80)는 태그 비교 버스(82)상의 대응하는 태그(81)를 구동한다. 비교기(83)는 새로운 로드 태그(84)를 비교 버스(82)의 태그와 비교한다. 동일성이 검출되면, 태그 일치 신호(85)가 표명된다. 하나 이상의 인덱스(76)가 일치하면, OR 게이트(86)는 적중 비트값(70)에 대하여 태그 일치 신호(85)를 선택하도록 멀티플렉서(87)에게 지시한다. 일치하는 인덱스(76)가 없으면, OR 게이트(86)는 최초 적중 비트(88)을 적중 비트값(70)으로 선택하도록 멀티플렉서(87)에게 지시한다.
전술한 적중 비트 계산 하드웨어는 예를 통해 표현된다. 동일한 목적을 달성하기 위한 많은 논리적 구현들이 존재한다. 예를 들면, 각 로드 버퍼 항에 대한 각각의 태그 일치 신호는 더 많은 비교기를 사용하므로써 적중 비트 계산의 대기시간을 감소시키기 위해 실행될 수 있다. 청구범위는 이러한 많은 대안적인 실시예를 포함하기 위한 것이다.
본 발명의 실시예는 전술한 모든 특징을 포함한다. 제 5 도는 실시예에 따른 기능유닛(50) 구조를 나타내는 간단한 블럭도이다. 기능유닛(50)은 제 1 레벨 내부 캐시(51) 및 제 2 레벨 외부 캐시(55)를 포함한다. 상기 두개의 캐시는 직접 매핑된다. 내부 캐시(51)(제 5 도)는 태그 RAM 배열(58) 및 데이터 RAM 배열(59)로 분리된다. 로드는 요청된 데이터 소스에 대한 가상번지를 명시한다. 태그 RAM 배열(58)은 두개의 액세스 포트(57, 550)를 가진다. 제 1 액세스 포트(57)는 근본적으로 입력 로드 소스 번지(553)에 대한 태그(53)의 검색에 전용된다. 제 2 액세스 포트(550)는 내부 캐시(51)로 할당되는 메모리 기억장소에 대한 태그의 기록에 전용된다. 할당 및 태그 검색은 두개의 분리된 액세스 포트(57, 550) 때문에 동시에 발생될 수 있다.
내부 캐시(51)는 가상적으로 인덱스되고 물리적으로 태그된다. 외부 캐시(55)는 물리적으로 인덱스되고 물리적으로 태그된다. 따라서, 가상번지 중 하위 비트는 내부 캐시(51)의 캐시 라인을 지시하는 반면에, 물리번지 중 하위 비트는 외부 캐시(55)의 캐시 라인을 지시한다. 두개의 캐시에서, 물리번지 중 상위 비트는 태그를 제공한다. 변환 룩어사이드 버퍼(TLB)(554)는 가상-물리 변환을 저장한다. 두개의 캐시(51, 55)는 물리적으로 태그되기 때문에, TLB 출력(555)의 상위비트(52)는 태그 RAM(58)로부터 검색된 태그(53)과 비교된다. 비교기가 동일성을 검출하면, 요청된 데이터는 현재 내부 캐시(51)에 존재한다. 로드 버퍼(54)가 비어 있으면, 캐시 적중은 내부 캐시 데이터 RAM 배열(59)로부터 데이터를 즉시 복귀시킬 수 있다. 그러나, 모든 로드가 순차적인 데이터의 복귀를 요청하기 때문에, 로드 버퍼(54)가 비어 있지 않으면, 로드가 내부 캐시(51)에 적중할 지라도, 로드는 대기행렬에 등록되어야 한다. 로드 버퍼(54)가 비어 있지 않은 이유는 하나 이상의 보다 오래된 로드가 내부 캐시(51)에 액세스하지 못했기 때문이다. 그러므로, 연속적인 로드는 내부 캐시(51)에 액세스하지 못한 로드를 위해 대기해야 한다.
로드 버퍼의 대기행렬에 등록되기 전에 내부 캐시(51)에 적중하는 로드에 의해 요청된 데이터가 로드가 로드 버퍼의 대기행렬(551) 헤드에 도달할 때까지 내부 캐시(51)로부터 제거될 것이다. 따라서, 요청된 데이터가 로드가 대기행렬(551)의 헤드에 도달할 때, 내부 캐시(51)에서 이용가능한지 또는 그렇지 않은지를 예측하기 위한 계산이 발생한다. 상기 계산은 비교기(556)에 의해 발생된 적중 신호(552)와 로드 버퍼(54)의 대기행렬에 등록되는 로드의 인덱스(62)(제 6 도)와 태그(63)(제 6 도)를 포함한다.
본 발명은 몇개의 관련된 새롭고 비자명한 특징을 포함하는 실시예를 통해 기술되고 표현된다. 이러한 실시예는 단지 예일 뿐이고, 본 발명의 범위를 한정하는 것은 아니다. 본 발명의 취지와 범위를 벗어나지 않고, 첨부된 특허청구범위에 의해 보호되는 본 발명의 특징에 대등하는 많은 것들이 존재한다.
제 1 도는 슈퍼스칼라 프로세서에 대한 간단한 블럭도;
제 2 도는 로드 기능유닛에 대한 간단한 블럭도;
제 3 도는 직접 매핑 캐시 동작의 예시도;
제 4 도는 직접 매핑 캐시의 실행도;
제 5 도는 본 발명에 따른 로드 기능유닛에 대한 간단한 블럭도;
제 6 도는 본 발명에 따른 로드 버퍼에서의 데이터 구조도; 및
제 7 도는 본 발명에 따른 적중 비트 계산을 실행하는 하드제어에 대한 간단한 예시도이다.
* 도면의 주요 부분에 대한 부호의 설명
30 : 직접 매핑 캐시 33 : 캐시 라인
35,42 : 태그 50 : 기능유닛
52 : 물리번지비트 56 : 메모리 관리유닛
550 : 제 2 태그 RAM 포트 551 : 로드 버퍼 대기행렬

Claims (10)

  1. 캐시, 제 2 메모리 시스템, 및 로드 버퍼를 갖는 시스템에서 로드 명령을 서비스하는 방법에 있어서,
    상기 로드 버퍼는 로드 명령이 요구에 따라 상기 캐시 또는 제 2 메모리 시스템 중의 하나에 대한 액세스를 기다리는 동안 상기 로드 명령을 보유하는 FIFO(first-in-first-out) 큐이고, 상기 로드 버퍼는 상기 큐의 헤드 위치를 가지며, 상기 캐시에 대한 액세스는 제 1 잠복기와 함께 발생하고, 상기 제 2 메모리 시스템에 대한 액세스는 상기 제 1 잠복기보다 큰 제 2 잠복기와 함께 발생되며,
    상기 방법은:
    상기 제 1 로드 명령이 큐의 헤드위치에 도달할 때, 상기 제 1 로드 명령에 의해 요구된 데이터가 캐시내에 없다고 예측된 경우 상기 제 1 로드 명령을 위해 상기 제 2 메모리 시스템을 액세스하는 단계;
    상기 제 1 로드 명령이 큐의 헤드위치에 도달할 때, 상기 제 1 로드 명령에 의해 요구된 데이터가 캐시내에 있다고 예측된 경우 상기 제 1 로드 명령을 위해 캐시를 액세스하는 단계; 및
    상기 제 1 로드 명령이 큐의 헤드위치에 있고 제 1 로드 명령이 캐시를 액세스하는 경우, 큐의 헤드위치에 아직 없는 제 2 로드 명령을 위해 상기 제 2 메모리 시스템을 액세스하는 단계를 포함하여, 상기 캐시와 제 2 메모리 시스템이 각각 제 1과 제 2 로드 명령에 의해 동시에 액세스되고, 모든 로드 명령이 로드 버퍼내에서의 그 순서와 동일한 순서로 완료되도록 하는 것을 특징으로 하는 로드 명령을 서비스하는 방법.
  2. 제 1 항에 있어서,
    상기 제 2 메모리 시스템은 제 2 레벨 캐시인 것을 특징으로 하는 로드 명령을 서비스하는 방법.
  3. 제 2 항에 있어서,
    상기 캐시는 가상으로 인덱스되고 물리적으로 태그되는 것을 특징으로 로드 명령을 서비스하는 방법.
  4. 제 3 항에 있어서,
    상기 제 2 레벨 캐시는 물리적으로 인덱스되고 물리적으로 태그되는 것을 특징으로 하는 로드 명령을 서비스하는 방법.
  5. 제 1 항에 있어서,
    상기 제 1 로드 명령이 큐의 헤드위치에 존재하기 전에, 상기 제 1 로드 명령이 큐의 헤드위치에 도달할 때 상기 제 1 로드 명령에 의해 요구된 데이터가 상기 캐시내에 존재할지 여부를 예측하는 단계를 더 포함하고,
    상기 예측 단계에서 상기 제 1 로드 명령에 의해 요구된 데이터가 상기 제 1명령이 큐의 헤드위치에 도달할 때 상기 캐시내에 있다고 예측한 경우에만 상기 제 1 로드 명령을 위해 캐시를 액세스하는 단계가 발생하는 것을 특징으로 하는 로드 명령을 서비스하는 방법.
  6. 캐시, 제 2 메모리 시스템, 및 로드 버퍼를 갖는 시스템에서 로드 명령을 서비스하는 장치에 있어서,
    상기 로드 버퍼는 로드 명령이 요구에 따라 상기 캐시 또는 제 2 메모리 시스템 중의 하나에 대한 액세스를 기다리는 동안 상기 로드 명령을 보유하는 FIFO(first-in-first-out) 큐이고, 상기 로드 버퍼는 상기 큐의 헤드 위치를 가지며, 상기 캐시에 대한 액세스는 제 1 잠복기와 함께 발생하고, 상기 제 2 메모리 시스템에 대한 액세스는 상기 제 1 잠복기보다 큰 제 2 잠복기와 함께 발생되며,
    상기 장치는:
    제 1 로드 명령이 큐의 헤드위치에 도달할 때, 상기 제 1 로드 명령에 의해 요구된 데이터가 캐시내에 없는 경우 상기 제 1 로드 명령을 위해 상기 제 2 메모리 시스템을 액세스하는 제 1 액세스회로;
    상기 제 1 로드 명령에 의해 요구된 데이터가 캐시내에 있는 경우 상기 큐의 헤드위치내 상기 제 1 로드 명령을 위해 상기 캐시를 액세스하는 제 2 액세스 회로; 및
    상기 제 1 로드 명령이 큐의 헤드위치에 있고 제 1 로드 명령이 캐시를 액세스 하는 경우, 큐의 헤드위치에 아직 없는 제 2 로드 명령을 위해 상기 제 2 메모리 시스템을 액세스하는 제 3 액세스회로를 포함하여, 상기 캐시와 제 2 메모리 시스템이 각각 제 1과 제 2 로드 명령에 의해 동시에 액세스되고, 모든 로드 명령이 로드 버퍼내에서의 그 순서와 동일한 순서로 완료되도록 하는 것을 특징으로 하는 로드 명령을 서비스하는 장치.
  7. 제 6 항에 있어서,
    상기 제 2 메모리 시스템은 제 2 레벨 캐시인 것을 특징으로 하는 로드 명령을 서비스하는 장치.
  8. 제 7 항에 있어서,
    상기 캐시는 가상으로 인덱스되고 물리적으로 태그되는 것을 특징으로 로드 명령을 서비스하는 장치.
  9. 제 8 항에 있어서,
    상기 제 2 레벨 캐시는 물리적으로 인덱스되고 물리적으로 태그되는 것을 특징으로 하는 로드 명령을 서비스하는 장치.
  10. 제 6 항에 있어서,
    상기 제 1 로드 명령이 큐의 헤드위치에 존재하기 전에, 상기 제 1 로드 명령이 큐의 헤드위치에 도달할 때 상기 제 1 로드 명령에 의해 참조된 메모리 어드레스의 컨텐트가 직접 사상 캐시(direct mapped cache)내에 존재할지 여부를 예측하는 예측회로를 더 포함하고,
    상기 제 2 액세스회로는 상기 예측회로가 상기 제 1 명령이 큐의 헤드위치에 도달할 때 상기 제 1 로드 명령에 의해 요구된 데이터가 상기 캐시내에 존재한다고 예측한 경우에만 상기 제 1 로드 명령을 위해 캐시를 액세스하는 것을 특징으로 하는 로드 명령을 서비스하는 장치.
KR1019960003793A 1995-02-16 1996-02-16 로드버퍼를 가진 로드/저장유닛에서 개별적인 태그 및 데이터 배열 액세스를 위한 방법 및 장치 KR100397683B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/389,636 US5745729A (en) 1995-02-16 1995-02-16 Methods and apparatuses for servicing load instructions
US08/389,636 1995-02-16

Publications (2)

Publication Number Publication Date
KR960032183A KR960032183A (ko) 1996-09-17
KR100397683B1 true KR100397683B1 (ko) 2003-11-28

Family

ID=23539075

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1019960003793A KR100397683B1 (ko) 1995-02-16 1996-02-16 로드버퍼를 가진 로드/저장유닛에서 개별적인 태그 및 데이터 배열 액세스를 위한 방법 및 장치

Country Status (3)

Country Link
US (2) US5745729A (ko)
JP (1) JP3875738B2 (ko)
KR (1) KR100397683B1 (ko)

Families Citing this family (56)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5898854A (en) * 1994-01-04 1999-04-27 Intel Corporation Apparatus for indicating an oldest non-retired load operation in an array
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
JPH0934786A (ja) * 1995-07-14 1997-02-07 Fujitsu Ltd 命令供給装置
US7301541B2 (en) * 1995-08-16 2007-11-27 Microunity Systems Engineering, Inc. Programmable processor and method with wide operations
US6026471A (en) * 1996-11-19 2000-02-15 International Business Machines Corporation Anticipating cache memory loader and method
US5991855A (en) * 1997-07-02 1999-11-23 Micron Electronics, Inc. Low latency memory read with concurrent pipe lined snoops
US6018792A (en) * 1997-07-02 2000-01-25 Micron Electronics, Inc. Apparatus for performing a low latency memory read with concurrent snoop
US6460119B1 (en) * 1997-12-29 2002-10-01 Intel Corporation Snoop blocking for cache coherency
US6209068B1 (en) * 1997-12-29 2001-03-27 Intel Corporation Read line buffer and signaling protocol for processor
US6237064B1 (en) * 1998-02-23 2001-05-22 Intel Corporation Cache memory with reduced latency
US6216215B1 (en) * 1998-04-02 2001-04-10 Intel Corporation Method and apparatus for senior loads
ATE557343T1 (de) * 1998-08-24 2012-05-15 Microunity Systems Eng Prozessor und verfahren zur durchführung eines breitschaltungsbefehls mit breitem operand
US7932911B2 (en) * 1998-08-24 2011-04-26 Microunity Systems Engineering, Inc. Processor for executing switch and translate instructions requiring wide operands
US7779236B1 (en) * 1998-12-31 2010-08-17 Stmicroelectronics, Inc. Symbolic store-load bypass
US6336168B1 (en) * 1999-02-26 2002-01-01 International Business Machines Corporation System and method for merging multiple outstanding load miss instructions
US6269427B1 (en) 1999-03-18 2001-07-31 International Business Machines Corporation Multiple load miss handling in a cache memory system
US6311254B1 (en) 1999-03-18 2001-10-30 International Business Machines Corporation Multiple store miss handling in a cache memory memory system
US6321303B1 (en) 1999-03-18 2001-11-20 International Business Machines Corporation Dynamically modifying queued transactions in a cache memory system
US6237066B1 (en) * 1999-03-22 2001-05-22 Sun Microsystems, Inc. Supporting multiple outstanding requests to multiple targets in a pipelined memory system
US6418513B1 (en) 1999-06-25 2002-07-09 International Business Machines Corporation Queue-less and state-less layered local data cache mechanism
US6397300B1 (en) 1999-06-25 2002-05-28 International Business Machines Corporation High performance store instruction management via imprecise local cache update mechanism
US6405285B1 (en) * 1999-06-25 2002-06-11 International Business Machines Corporation Layered local cache mechanism with split register load bus and cache load bus
US6385694B1 (en) 1999-06-25 2002-05-07 International Business Machines Corporation High performance load instruction management via system bus with explicit register load and/or cache reload protocols
US6434667B1 (en) 1999-06-25 2002-08-13 International Business Machines Corporation Layered local cache with imprecise reload mechanism
US6463507B1 (en) 1999-06-25 2002-10-08 International Business Machines Corporation Layered local cache with lower level cache updating upper and lower level cache directories
US6446166B1 (en) 1999-06-25 2002-09-03 International Business Machines Corporation Method for upper level cache victim selection management by a lower level cache
US6481251B1 (en) 1999-10-25 2002-11-19 Advanced Micro Devices, Inc. Store queue number assignment and tracking
US6523109B1 (en) * 1999-10-25 2003-02-18 Advanced Micro Devices, Inc. Store queue multimatch detection
US6678810B1 (en) 1999-12-30 2004-01-13 Intel Corporation MFENCE and LFENCE micro-architectural implementation method and system
US6622235B1 (en) * 2000-01-03 2003-09-16 Advanced Micro Devices, Inc. Scheduler which retries load/store hit situations
US6427188B1 (en) 2000-02-09 2002-07-30 Hewlett-Packard Company Method and system for early tag accesses for lower-level caches in parallel with first-level cache
US6647464B2 (en) 2000-02-18 2003-11-11 Hewlett-Packard Development Company, L.P. System and method utilizing speculative cache access for improved performance
US6427189B1 (en) * 2000-02-21 2002-07-30 Hewlett-Packard Company Multiple issue algorithm with over subscription avoidance feature to get high bandwidth through cache pipeline
US7093236B2 (en) * 2001-02-01 2006-08-15 Arm Limited Tracing out-of-order data
US6862679B2 (en) * 2001-02-14 2005-03-01 Intel Corporation Synchronization of load operations using load fence instruction in pre-serialization/post-serialization mode
JP2002368850A (ja) * 2001-06-05 2002-12-20 Sony Corp 携帯無線端末装置
AU2002330027A1 (en) * 2001-09-14 2003-04-01 Sun Microsystems, Inc. Method and apparatus for decoupling tag and data accesses in a cache memory
US20030163643A1 (en) * 2002-02-22 2003-08-28 Riedlinger Reid James Bank conflict determination
DE10243446B4 (de) * 2002-09-19 2005-12-15 Celanese Chemicals Europe Gmbh Verfahren zur Herstellung von Aldehyden
TW569219B (en) * 2002-09-30 2004-01-01 Via Tech Inc Architecture and method for updating cache data
US7321964B2 (en) * 2003-07-08 2008-01-22 Advanced Micro Devices, Inc. Store-to-load forwarding buffer using indexed lookup
US7231501B2 (en) * 2004-03-30 2007-06-12 Ibm Corporation Method for avoiding aliased tokens during abnormal communications
US7401209B2 (en) * 2006-06-30 2008-07-15 International Business Machines Corporation Limiting entries searched in load reorder queue to between two pointers for match with executing load instruction
US8214602B2 (en) * 2008-06-23 2012-07-03 Advanced Micro Devices, Inc. Efficient load queue snooping
JP2010146084A (ja) * 2008-12-16 2010-07-01 Toshiba Corp キャッシュメモリ制御部を備えるデータ処理装置
US8732711B2 (en) * 2010-09-24 2014-05-20 Nvidia Corporation Two-level scheduler for multi-threaded processing
US9785565B2 (en) 2014-06-30 2017-10-10 Microunity Systems Engineering, Inc. System and methods for expandably wide processor instructions
CN112565437B (zh) * 2020-12-07 2021-11-19 浙江大学 一种面向跨界服务网络的服务缓存方法
US11989286B2 (en) 2021-05-07 2024-05-21 Ventana Micro Systems Inc. Conditioning store-to-load forwarding (STLF) on past observations of STLF propriety
US11989285B2 (en) 2021-05-07 2024-05-21 Ventana Micro Systems Inc. Thwarting store-to-load forwarding side channel attacks by pre-forwarding matching of physical address proxies and/or permission checking
US12079126B2 (en) 2021-05-07 2024-09-03 Ventana Micro Systems Inc. Unforwardable load instruction re-execution eligibility based on cache update by identified store instruction
US12073220B2 (en) 2021-05-07 2024-08-27 Ventana Micro Systems Inc. Store-to-load forwarding correctness checks at store instruction commit
US12093179B2 (en) 2021-05-07 2024-09-17 Ventana Micro Systems Inc. Store-to-load forwarding correctness checks using physical address proxies stored in load queue entries
US12086063B2 (en) 2021-05-07 2024-09-10 Ventana Micro Systems Inc. Physical address proxy reuse management
US12079129B2 (en) 2021-05-07 2024-09-03 Ventana Micro Systems Inc. Using physical address proxies to accomplish penalty-less processing of load/store instructions whose data straddles cache line address boundaries
US20240272908A1 (en) * 2023-02-13 2024-08-15 Arm Limited Load-with-substitution instruction

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0540629A (ja) * 1991-06-18 1993-02-19 Matsushita Electric Ind Co Ltd 情報処理装置
WO1994008287A1 (en) * 1992-09-29 1994-04-14 Seiko Epson Corporation System and method for handling load and/or store operations in a superscalar microprocessor
EP0605869A1 (en) * 1993-01-08 1994-07-13 International Business Machines Corporation Out of order instruction execution using load and store comparison
JPH06222990A (ja) * 1992-10-16 1994-08-12 Fujitsu Ltd データ処理装置
US5377336A (en) * 1991-04-18 1994-12-27 International Business Machines Corporation Improved method to prefetch load instruction data

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0668735B2 (ja) * 1987-02-09 1994-08-31 日本電気アイシーマイコンシステム株式会社 キヤツシユメモリ−
US5307477A (en) * 1989-12-01 1994-04-26 Mips Computer Systems, Inc. Two-level cache memory system
GB2244158B (en) * 1990-04-30 1994-09-07 Sun Microsystems Inc Cache memory arrangement with write buffer pipeline providing for concurrent cache determinations
US5404484A (en) * 1992-09-16 1995-04-04 Hewlett-Packard Company Cache system for reducing memory latency times
US5471598A (en) * 1993-10-18 1995-11-28 Cyrix Corporation Data dependency detection and handling in a microprocessor with write buffer

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5377336A (en) * 1991-04-18 1994-12-27 International Business Machines Corporation Improved method to prefetch load instruction data
JPH0540629A (ja) * 1991-06-18 1993-02-19 Matsushita Electric Ind Co Ltd 情報処理装置
WO1994008287A1 (en) * 1992-09-29 1994-04-14 Seiko Epson Corporation System and method for handling load and/or store operations in a superscalar microprocessor
JPH06222990A (ja) * 1992-10-16 1994-08-12 Fujitsu Ltd データ処理装置
EP0605869A1 (en) * 1993-01-08 1994-07-13 International Business Machines Corporation Out of order instruction execution using load and store comparison

Also Published As

Publication number Publication date
JP3875738B2 (ja) 2007-01-31
US5745729A (en) 1998-04-28
US5802575A (en) 1998-09-01
KR960032183A (ko) 1996-09-17
JPH08272682A (ja) 1996-10-18

Similar Documents

Publication Publication Date Title
KR100397683B1 (ko) 로드버퍼를 가진 로드/저장유닛에서 개별적인 태그 및 데이터 배열 액세스를 위한 방법 및 장치
US5671444A (en) Methods and apparatus for caching data in a non-blocking manner using a plurality of fill buffers
US6212603B1 (en) Processor with apparatus for tracking prefetch and demand fetch instructions serviced by cache memory
US6317811B1 (en) Method and system for reissuing load requests in a multi-stream prefetch design
US6226713B1 (en) Apparatus and method for queueing structures in a multi-level non-blocking cache subsystem
US5680572A (en) Cache memory system having data and tag arrays and multi-purpose buffer assembly with multiple line buffers
US6212602B1 (en) Cache tag caching
EP0795820B1 (en) Combined prefetch buffer and instructions cache memory system and method for providing instructions to a central processing unit utilizing said system.
US6145054A (en) Apparatus and method for handling multiple mergeable misses in a non-blocking cache
US6148372A (en) Apparatus and method for detection and recovery from structural stalls in a multi-level non-blocking cache system
US6430654B1 (en) Apparatus and method for distributed non-blocking multi-level cache
US5353426A (en) Cache miss buffer adapted to satisfy read requests to portions of a cache fill in progress without waiting for the cache fill to complete
US6681295B1 (en) Fast lane prefetching
US6622225B1 (en) System for minimizing memory bank conflicts in a computer system
JP2557174B2 (ja) データのセット位置の予測装置
US8255633B2 (en) List based prefetch
JP3683739B2 (ja) オーバラップしたl1およびl2メモリ・アクセス方法および装置
US6263404B1 (en) Accessing data from a multiple entry fully associative cache buffer in a multithread data processing system
JP3533294B2 (ja) プロセッサ・システム
US6012134A (en) High-performance processor with streaming buffer that facilitates prefetching of instructions
US5717895A (en) Associative scalar data cache with write-through capabilities for a vector processor
US5715427A (en) Semi-associative cache with MRU/LRU replacement
US20080301371A1 (en) Memory Cache Control Arrangement and a Method of Performing a Coherency Operation Therefor
US20090106498A1 (en) Coherent dram prefetcher
US5930819A (en) Method for performing in-line bank conflict detection and resolution in a multi-ported non-blocking cache

Legal Events

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

Payment date: 20120802

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20130801

Year of fee payment: 11

FPAY Annual fee payment

Payment date: 20150729

Year of fee payment: 13

EXPY Expiration of term