KR20040045035A - 힌트 버퍼를 이용한 메모리 액세스 대기시간 숨김 - Google Patents

힌트 버퍼를 이용한 메모리 액세스 대기시간 숨김 Download PDF

Info

Publication number
KR20040045035A
KR20040045035A KR10-2004-7004668A KR20047004668A KR20040045035A KR 20040045035 A KR20040045035 A KR 20040045035A KR 20047004668 A KR20047004668 A KR 20047004668A KR 20040045035 A KR20040045035 A KR 20040045035A
Authority
KR
South Korea
Prior art keywords
memory
request
instruction
data
hint
Prior art date
Application number
KR10-2004-7004668A
Other languages
English (en)
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 KR20040045035A publication Critical patent/KR20040045035A/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
    • G06F9/38Concurrent instruction execution, e.g. pipeline, 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, look ahead
    • G06F9/3802Instruction prefetching
    • 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/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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, look ahead
    • G06F9/3824Operand accessing
    • G06F9/383Operand prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions

Abstract

요청된 데이타 및/또는 하나 이상의 명령어들이 제1 메모리에 있는지를 식별하는 동안 혹은 그 이전에 요청 힌트가 발행된다. 이 요청 힌트에 응답하여 데이타 및/또는 하나 이상의 명령어들을 인출하기 위해 제2 메모리가 엑세스된다. 제2 메모리로부터 액세스된 데이타 및/또는 명령어(들)이 버퍼에 저장된다. 이 요청된 데이타 및/또는 명령어(들)이 제1 메모리에 없으면, 이 데이타 및/또는 명령어(들)이 버퍼로부터 리턴된다.

Description

힌트 버퍼를 이용한 메모리 액세스 대기시간 숨김{MEMORY ACCESS LATENCY HIDING WITH HINT BUFFER}
프로세서는 전형적으로, 예컨대 DRAM과 같은 외부 메모리에 대한 것보다 빠른 클럭 속도로 명령어를 수행한다. 따라서 외부 메모리에 액세스하는 것은 프로세서가 실행될 명령어와 명령어들을 실행함에 있어서 처리될 데이타 모두를 메모리로부터 상대적으로 보다 낮은 클럭 속도로 인출(fetch)하므로 프로세서에 의한 명령어들의 실행시 지연을 가져온다.
일반적인 프로세서는 메모리로부터 명령어들을 인출하고, 각 명령어를 디코딩하고, 그 명령어를 실행하고, 그 명령어를 폐기하는 파이프라인(pipeline)을 통해 명령어들을 처리함으로써 이러한 메모리 액세스 대기시간(latency)으로 인한 지연을 최소화하는 것을 돕는다. 파이프라인의 각 단계의 동작은 보통 시간적으로 다른 단계들의 동작들과 중첩되어 명령어들과 명령어 실행을 위한 데이타를 인출하는데 메모리 액세스 대기시간을 숨기는 것을 돕는다.
이전에 인출한 하나 이상의 명령어들이 실행되는지에 관계없이 실행될 수 있는 명령어들을 식별함으로써, 일반적인 프로세서는 또한, 병렬로 명령어들을 실행함으로써, 즉, 시간적으로 둘 이상의 명령어들의 실행을 중첩함으로써, 및/또는 무작위로 명령어들을 실행함으로써, 메모리 액세스 대기시간으로 인한 지연을 최소화하는 것을 도울 수 있다. 이러한 방식으로, 프로세서는 예를 들어, 다른 명령어들을 위한 데이타를 인출하는 것을 기다리는 동안 명령어들을 계속 실행함으로써 메모리 액세스 대기시간을 숨기는 것을 돕는다. 명령어들이 실행되는 순서에 관계없이 프로세서는 각 명령어를 순서대로 폐기한다.
프로세서는 또한 상당한 지연을 도입하지 않고 메모리로부터 명령어 및/또는 데이타를 인출하기 위해 윈도우를 넓히는 것을 돕기 위해 임의의 시간에서 상대적으로 많은 명령어들의 무작위 실행을 관리함으로써 메모리 대기시간 지연을 최소화하는 것을 돕는다. 프로세서는 예를 들어, 무작위 실행을 위해 상대적으로 많은 명령어들을 임의의 시간에 관리하기 위한 보다 큰 명령어 리오더 버퍼(reorder buffer), 무작위 데이타 인출을 위해 임의의 시간에 메모리로부터의 상대적으로 많은 데이타 요청들을 관리하기 위한 보다 큰 메모리 오더 버퍼(oder buffer), 및/또는 임의의 시간에 상대적으로 많은 메모리 요청들이 발행되도록 하는 보다 큰 메모리 요청 큐를 이용할 수 있다.
전형적인 프로세서는 하나 이상의 상대적으로 보다 큰 내부 캐시 메모리들을 사용하여 자주 액세스된 명령어들 및 데이타를 저장함으로써 메모리 액세스 대기시간 지연을 최소화하는 것을 더 돕는다. 그 후, 프로세서가 이러한 명령어들과 데이타에 내부적으로 액세스하므로, 프로세서가 외부 메모리에 대한 액세스를 줄이는데 도움이 된다.
그러나, 보다 큰 버퍼, 큐, 및/또는 캐시 메모리들을 사용하는 것은 프로세서의 비용과 크기를 증가시킨다.
본 발명은 일반적으로 컴퓨터 시스템 분야에 관한 것이다. 보다 구체적으로, 본 발명은 컴퓨터 시스템에 대한 메모리 액세스 분야에 관한 것이다.
본 발명은 예로서 기술되고 있는 것이며 첨부 도면들에 의해 한정되는 것은 아니며, 여기서 유사한 참조번호는 유사한 구성요소들을 나타낸다.
도 1은 메모리 액세스 대기시간을 숨기는 것을 돕는 힌트 버퍼(hint buffer)를 포함하는 집적된 메모리 컨트롤러를 갖는 프로세서를 포함하는 예시적인 컴퓨터 시스템을 도시한다.
도 2는, 일 실시예에서, 메모리 액세스 대기시간을 숨기는 것을 돕는 힌트 버퍼를 포함하는 집적된 메모리 컨트롤러를 갖는 프로세서를 도시한다.
도 3은 도 3A와 3B로 구성되며, 일 실시예에서, 힌트 버퍼를 포함하는 메모리 컨트롤러를 사용하여 메모리 인출 요청(memory fetch request)을 수행하는 흐름도를 도시한다.
도 4는 일 실시예에서, 하나 이상의 기입 버퍼 엔트리를 메인 메모리로 플러시(flush)하는 흐름도를 도시한다.
도 5는 일 실시예에서, 힌트 버퍼 내의 엔트리를 도시한다.
도 6은 도 6A와 6B로 구성되며, 일 실시예에서, 힌트 버퍼를 포함하는 메모리 컨트롤러를 사용하여 메모리 인출 요청을 수행하는 흐름도이다.
이하의 상세한 설명은 힌트 버퍼(hint buffer)로 메모리 액세스 대기시간을 숨기는 본 발명에 따른 일 실시예나 실시예들을 설명한다. 이하의 상세한 설명에서, 본 발명의 완전한 이해를 위해 구체적인 프로세서 아키텍쳐, 메모리 타입 등과 같은 세부 사항들이 제시된다. 그러나, 본 발명은 이러한 세부 사항들없이 실시될 수 있다. 다른 예에서, 공지의 기능 블록들, 인터페이스들 등은 본 발명을 모호하지 않게 하기 위해 구체적인 세부 사항을 기술하지 않았다.
예시적인 컴퓨터 시스템
도 1은 메모리 액세스 대기시간을 숨기는 것을 돕기 위해 힌트 버퍼(114)를 포함하는 메모리 컨트롤러(112)를 갖는 프로세서(110)를 포함하는 예시적인 컴퓨터 시스템(100)을 도시한다. 컴퓨터 시스템(100)의 관점에서 기술되었지만, 본 발명은 하나 이상의 적절한 집적 회로를 포함하는 임의의 적절한 컴퓨터 시스템에서 구현될 수 있다.
도 1에서 도시된 바와 같이, 일 실시예에서 메모리 컨트롤러(112)는 프로세서(110)와 동일한 칩 상에 집적화된다. 프로세서(110)와 함께 집적화된 메모리 컨트롤러(112)는 메모리 컨트롤러(112)와 통신시 지연을 줄이는데 도움이 된다. 다른 실시예의 메모리 컨트롤러(112)는 프로세서(110)와 동일한 패키지를 공유하거나 프로세서(110)로부터 분리되어 패키징된 별개의 집적 회로 칩으로서 형성된다. 프로세서(110)는 임의의 적절한 프로세서 아키텍쳐를 포함할 수 있고 일 실시예에서는 캘리포니아, 산타클라라의 Intel사에 의해 정의된 바와 같은 Intel32 비트 아키텍쳐를 포함한다.
메모리 컨트롤러(112)는 메인 메모리(120)에 대한 액세스를 프로세서(110)에 의해 제어한다. 메인 메모리(120)는 메모리 컨트롤러(112)에 결합되어 예컨대, 프로세서(110)를 포함하는 컴퓨터 시스템(100)에 대해 데이타 및/또는 명령어들을, 로딩하고 저장한다. 메인 메모리(120)는, 예컨대, DRAM(dynamic random access memory)와 같은 임의의 적절한 메모리를 포함한다. 메인 메모리(120)는, 예컨대, SDRAM(synchronous DRAM), DDR SDRAM(double data rate SDRAM), 또는 RDRAM(Rambus DRAM)을 포함한다. 일 실시예에 대한 프로세서(110)는 메모리 컨트롤러(112) 및 메인 메모리(120)에 비해 보다 빠른 클럭 속도로 동작한다.
일 실시예에서 메모리 컨트롤러(112)는 힌트 버퍼(114)를 사용하여, 프로세서(110)가 메인 메모리(120)로부터 실행될 명령어들 및/또는 명령어들을 실행할 때 처리될 데이타를 인출할 때 프로세서(110)에 대한 메모리 액세스 대기시간을 숨기는 것을 돕는다. 일 실시예에서 프로세서(110)가, 요청된 데이타 및/또는 명령어(들)을 나중까지 사용하거나 사용하지 않을지라도, 그렇다고 해도, 및/또는 프로세서(110)가 메인 메모리(120)로부터 요청된 데이타 및/또는 명령어(들)이 필요하거나 필요없을지라도 메모리 컨트롤러(112)는 프로세서(110)에 의해 요청된 데이타 및/또는 하나 이상의 명령어(들)에 대한 요청 힌트(request hint)를 수신한다. 그 후, 메모리 컨트롤러(112)는 데이타 및/또는 명령어(들)에 대한 메모리 인출 요청을 수신하기에 앞서 수신된 요청 힌트에 응답하여 메인 메모리(120)에 대한 액세스를 개시하고 힌트 버퍼(114)내에 요청된 데이타 및/또는 명령어(들)을 저장한다. 메모리 인출 요청은 예를 들어, 요청된 데이타 및/또는 명령어(들)이프로세서(110)에 의해 사용될 가능성이 있고 메인 메모리(120)로부터 필요로 할 때 메모리 컨트롤러(112)로 발행된다.
메모리 컨트롤러(112)가 이 메모리 인출 요청을 수신할 때, 메모리 컨트롤러(112)는 요청된 데이타 및/또는 명령어(들)을 인출하기 위해 메인 메모리(120)에 이미 액세스했을 것이다. 그 다음, 메모리 컨트롤러(112)는 이 요청된 데이타 및/또는 명령어(들)을 프로세서(110)에서 사용하기 위해 힌트 버퍼(114)로부터 되돌려보낼 수 있다.
요청된 데이타 및/또는 명령어(들)을 힌트 버퍼(114)로부터 리턴하는 것은 메모리 컨트롤러(112)가 메모리 인출 요청을 수신할 때 메인 메모리(120)에 액세스하는 것에 비해 더 빠르므로, 데이타 및/또는 명령어(들)에 대한 메모리 인출 요청을 수신하기에 앞서 데이타 및/또는 명령어(들)에 대해 메인 메모리(120)에 추론적으로 액세스함으로써 프로세서(110)는 메인 메모리(120)를 액세스하는 것과 관련된 대기시간을 효과적으로 숨길 수 있다. 또한, 프로세서(110)는 메인 메모리(120)가 유휴 상태일 때 요청 힌트들에 대해 메인 메모리(120)에 액세스함으로써 평균 메모리 액세스 대기시간을 줄이는 것을 도울 수 있다. 이러한 방식으로, 프로세서(110)는 메인 메모리(120)에 액세스하기 위한 대역폭을 보다 충분히 사용할 수 있다.
일 실시예에 있어 메모리 컨트롤러(112)는 또한 메인 메모리(120)에 대한 액세스를 제어하여, 예컨대 그래픽 컨트롤러(130) 및/또는 입출력(I/O) 컨트롤러(140)를 위한 데이타 및/또는 하나 이상의 명령어들을 저장 및 인출한다.
그래픽 컨트롤러(130)는 프로세서(110)에 결합되어, 예를 들어, 그래픽 컨트롤러(130)에 결합된 CRT(cathode ray tube)나 LCD(liquid crystal display)와 같은 적절한 디스플레이(132)에 정보를 디스플레이하는 것을 제어한다. 일 실시예에서 메모리 컨트롤러(112)는 AGP(accelerated graphics port)를 통해 그래픽 컨트롤러(130)와 인터페이싱한다.
I/O 컨트롤러(140)는 프로세서(110)와 결합되어 I/O 컨트롤러(140)에 결합된 하나 이상의 I/O 장치에 인터페이스를 제공한다. 일 실시예에서 I/O 컨트롤러(140)는 허브 인터페이스를 통해 메모리 컨트롤러(112)와 인터페이싱한다.
일 실시예에서, I/O 컨트롤러(140)는 예컨대, 데이타 및/또는 명령어들을 저장하기 위한 HDD(hard disk drive)나 CD ROM(compact disc read only memory) 드라이브와 같은 하나 이상의 적절한 IDE(integrated drive electronics) 드라이브(142), 하나 이상의 USB(universal serial bus) 포트(144)를 통한 하나 이상의 적절한 USB 장치, 오디오 코더/디코더(코덱)(146), 및 모뎀 코덱(148)에 인터페이스를 제공한다. 일 실시예에서 I/O 컨트롤러(140)는 또한 키보드(151), 마우스(152), 하나 이상의 병렬 포트들(153)을 통한, 예컨대 프린터 등과 같은 하나 이상의 적절한 장치, 하나 이상의 직렬 포트(154)를 통한 하나 이상의 적절한 장치들, 및 플로피 디스크(155)에 수퍼 I/O 컨트롤러(150)를 통해 인터페이스를 제공한다. 일 실시예에서 I/O 컨트롤러(140)는 PCI(peripheral component interconnect) 버스 상의 하나 이상의 PCI 슬롯(162)을 통해 I/O 컨트롤러(140)에 결합된 하나 이상의 적절한 PCI 장치에 인터페이스를 제공하고, ISA(industry standardarchitecture) 브리지(164)를 통해 PCI 버스에 의해 I/O 컨트롤러(140)에 결합된 하나 이상의 적절한 ISA 장치들에 인터페이스를 더 제공한다. ISA 브리지(164)는 ISA 버스 상의 하나 이상의 ISA 슬롯(166)을 통해 하나 이상의 ISA 장치들과 인터페이싱한다.
I/O 컨트롤러(140)는 또한 펌웨어(firmware) 컨트롤러(170)에 결합되어 인터페이스에 펌웨어 컨트롤러(170)를 제공한다. 일 실시예에서 펌웨어 컨트롤러(170)는 허브 인터페이스를 통해 I/O 컨트롤러(140)와 인터페이싱한다. 일 실시예에서 펌웨어 컨트롤러(170)는 I/O 컨트롤러(140)와 수퍼 I/O 컨트롤러(150) 간의 인터페이스의 적어도 일부를 공유한다. 펌웨어 컨트롤러(170)는 적절한 시스템 및/또는 비디오 BIOS(basic input/output system) 소프트웨어를 저장하기 위한 BIOS 메모리(172)를 포함한다. BIOS 메모리(172)는 예컨대 플래시 메모리와 같은 임의의 적절한 불휘발성 메모리를 포함한다.
하나의 프로세서(110)만을 갖는 것으로 도시되고 있지만, 다른 실시예에서 컴퓨터 시스템(100)은 예컨대 둘, 셋, 혹은 그 이상과 같은 복수의 프로세서를 포함할 수 있다. 프로세서(110)는 공통 버스를 통해 하나 이상의 다른 프로세서들에 결합될 수 있다. 그 후, 각 프로세서는, 예컨대 메인 메모리(120), 그래픽 컨트롤러(130), 및/또는 I/O 컨트롤러(140) 등에 액세스하기 위해 메모리 컨트롤러(112)를 공유한다.
힌트 버퍼를 포함하는 메모리 컨트롤러를 갖는 프로세서
도 2에 도시된 바와 같이, 일 실시예의 프로세서(110)는 메모리컨트롤러(112), 메모리 컨트롤러(112)에 결합된 버스 인터페이스 로직(210), 버스 인터페이스 로직(210)에 결합된 보조 캐시 메모리(212), 버스 인터페이스 로직(210)에 결합된 주 캐시 제어 로직(220), 주 캐시 제어 로직(220)에 결합된 주 캐시 메모리(222), 주 캐시 제어 로직(220)에 결합된 명령어 처리 로직(230), 및 명령어 처리 로직(230)에 결합된 아키텍쳐 레지스터(240)를 포함한다.
버스 인터페이스 로직(210), 보조 캐시 메모리(212), 주 캐시 제어 로직(220), 및 주 캐시 메모리(222)는 두개의 캐시 레벨 메모리 서브시스템을 형성하여 명령어 처리 로직(230)을 위해 명령어 및/또는 데이타를 제공한다.
버스 인터페이스 로직(210)은 보조 캐시 메모리(212)를 제어하여 명령어 처리 로직(230)을 위한 명령어 및/또는 데이타를 저장 및 인출한다. 일 실시예의 버스 인터페이스 로직(210)은, 명령어 처리 로직(230)에 의해 처리를 하기 위해 메모리 컨트롤러(112)를 통해 메인 메모리(120)로부터 액세스된 명령어 및/또는 데이타를 보조 캐시 메모리(212) 내에 저장한다. 일 실시예에서 버스 인터페이스 로직(210)은 또한 보조 캐시 메모리(212) 내에 최근에 및/또는 자주 사용된 명령어 및/또는 데이타를 저장하여 메인 메모리(120)에 대한 액세스를 최소화하는 것을 돕는다. 버스 인터페이스 로직(210)은 임의의 적절한 회로를 포함할 수 있고, 보조 캐시 메모리(212)는 임의의 적절한 크기의 임의의 적절한 메모리를 포함할 수 있다.
주 캐시 제어 로직(220)은 주 캐시 메모리(222)를 제어하여 명령어 처리 로직(230)을 위한 명령어 및/또는 데이타를 저장 및 인출한다. 일 실시예에서, 주캐시 메모리(222)는 전용 명령어 캐시 메모리부와 별개의 전용 데이타 캐시 메모리부를 포함한다. 주 캐시 제어 로직(220)은 일 실시예에서 명령어 처리 로직(230)에 의해 처리하기 위해 메모리 컨트롤러(112) 및 버스 인터페이스 로직(210)을 통해 메인 메모리(120)로부터, 또는 버스 인터페이스 로직(210)을 통해 보조 캐시 메모리(212)로부터 액세스된 명령어 및/또는 데이타를 주 캐시 메모리(222) 내에 저장한다. 주 캐시 제어 로직(220)은 일 실시예에서 또한 최근에 및/또는 자주 사용되는 명령어 및/또는 데이타를 주 캐시 메모리(222) 내에 저장하여 메인 메모리(120)에 대한 액세스를 최소화하는 것을 돕는다. 주 캐시 제어 로직(220)은 임의의 적절한 회로를 포함할 수 있고, 주 캐시 메모리(222)는 임의의 적절한 크기의 임의의 적절한 메모리를 포함한다.
일 실시예에서 주 캐시 메모리(222)는 상대적으로 크기가 작고 주 캐시 제어 로직(220)을 통해 명령어 처리 로직(230)에 가까이 결합되어 있어 명령어 처리 로직(230)에 의해 주 캐시 메모리(222)에 저장된 명령어 및/또는 데이타에 대한 액세스를 상대적으로 보다 빠르게 한다. 일 실시예에서 보조 캐시 메모리(212)는 주 캐시 메모리(222)에 비해 크기가 커서 주 캐시 메모리(222)에 비해 더 많은 명령어 및/또는 데이타를 저장한다. 일 실시예에서 명령어 처리 로직(230)을 위해 보조 캐시 메모리(212)로부터 명령어 및/또는 데이타를 액세스하는 시간은 주 캐시 메모리(222)에 액세스하는 것에 비해 길다. 버스 인터페이스 로직(210), 보조 캐시 메모리(212), 주 캐시 제어 로직(220), 및 주 캐시 메모리(222)는 임의의 적절한 캐시 구조(caching scheme)에 따라 명령어 처리 로직(230)을 위한 명령어 및/또는 데이타를 저장한다.
버스 인터페이스 로직(210), 보조 캐시 메모리(212), 주 캐시 제어 로직(220), 및 주 캐시 메모리(222)를 포함하는 것으로 기술되었지만, 프로세서(110)는 명령어 처리 로직(230)을 위해 명령어 및 데이타를 로딩하고 저장하기 위한 임의의 다른 적절한 메모리 서브시스템을 포함할 수 있다.
명령어 처리 로직(230)은 명령어 및/또는 데이타를 인출 및 처리하기 위한 임의의 적절한 회로를 포함한다. 명령어 처리 로직(230)은 일 실시예에서, 도 2에 도시된 바와 같이, 인출/디코드 유닛(232), 리오더 버퍼(234), 디스패치/실행 유닛(236), 및 리타이어 유닛(retire unit)(238)을 포함하는 명령어 파이프라인을 포함한다. 인출/디코드 유닛(232)는 주 캐시 제어 로직(220)에 연결된다. 리오더 버퍼(234)는 인출/디코드 유닛(232), 디스패치/실행 유닛(236) 및 리타이어 유닛(238)에 연결된다. 디스패치/실행 유닛(236)은 인출/디코드 유닛(232) 및 주 캐시 제어 로직(220)에 연결된다. 리타이어 유닛(238)은 아키텍쳐 레지스터(240) 및 주 캐시 제어 로직(220)에 연결된다.
인출/디코드 유닛(232)은 주 캐시 메모리(222), 보조 캐시 메모리(212), 및/또는 메인 메모리(120)로부터 명령어들을 인출한다. 인출/디코드 유닛(232)는 임의의 적절한 방식으로 명령어들을 인출하는 임의의 적절한 회로를 포함할 수 있다. 일 실시예에서 인출/디코드 유닛(232)는 인출/디코드 유닛(232)에 의해 유지되는 명령어 포인터에 따라 명령어 처리 로직(230)에 의해 인출될 다음 명령어를 식별하고 주 캐시 제어 로직(220), 버스 인터페이스 로직(210) 및/또는 메모리컨트롤러(112)를 통해 주 캐시 메모리(222), 보조 캐시 메모리(212), 또는 메인 메모리(120)로부터 명령어를 요청한다. 인출/디코드 유닛(232)는 다음 명령어를, 예를 들어, 프로그램에서의 다음의 순차적인 명령어로서, 분기 명령어(branch instruction)의 예측되거나 실제의 목적지로서, 혹은 예컨대 예외 처리 루틴(exception handling routine)과 같은 새로운 루틴의 시작으로서 식별한다.
일 실시예에서 인출/디코드 유닛(232)는 각 명령어를 하나 이상의 마이크로-연산(micro-operation)으로 디코딩한다. 일 실시예에서, 인출/디코드 유닛(232)은 각 명령어를 하나 이상의 3개가 한조인 마이크로-연산(triadic micro-operations)들로 디코딩한다. 3개가 한조인 마이크로-연산은 연산 부호(operational code) 또는 opcode를 포함하고 2개의 논리적 소스 연산자(logical source operands) 및 하나의 논리적 목적지 연산자(logical destination operand)를 포함할 수 있다.
일 실시예에서 인출/디코드 유닛(232)은 임의의 소스들을 매핑하고 인출된 명령어에 대한 각 마이크로-연산에 대해 임의의 목적지들을 재명명(rename)한다. 일 실시예에서 인출/디코드 유닛(232)는 논리적 레지스터 기준들을 물리적 레지스터 기준들로 변환하고 그렇게 하면서 리네임 맵(rename map)을 사용하여 물리적 목적지들과 소스들 간의 링크들의 의존 관계를 형성한다.
인출/디코드 유닛(232)는 인출된 명령어에 대한 각 마이크로-연산을 리오더 버퍼(234)에 할당한다. 리오더 버퍼(234)에 마이크로-연산들을 입력함에 있어서, 일 실시예의 인출/디코드 유닛(232)는 무작위 실행을 준비하기 위하여 상태 정보(status information)를 마이크로-연산들에 부가한다.
리오더 버퍼(234)는 인출/디코드 유닛(232)으로부터 각 마이크로-연산을 수신 및 저장한다. 리오더 버퍼(234)는 또한 디스패치/실행 유닛(236)에 의해 이미 실행되었으나 아직 폐기(retire)되지 않은 마이크로-연산들을 저장한다. 리오더 버퍼(234)는 임의의 적절한 회로를 포함할 수 있고 일 실시예에서 CAM(content-addressable memory)의 어레이를 포함한다.
디스패치/실행 유닛(236)은 실행을 위해 리오더 버퍼(234) 내에 저장된 마이크로-연산들을 디스패치하고 디스패치된 마이크로-연산들을 실행한다. 디스패치/실행 유닛(236)은 리오더 버퍼(234)에 저장된 마이크로-연산들을 이러한 마이크로-연산들과 실행 자원 가용성 사이의 데이타 의존성에 따라 스케줄링 및 실행하고 따라서 마이크로-연산들의 무작위 실행을 지원한다. 디스패치/실행 유닛(236)은 리오더 버퍼(234) 내의 해당 마이크로-연산으로 마이크로-연산을 실행한 모든 결과를 저장한다.
디스패치/실행 유닛(236)은 임의의 적절한 회로를 포함할 수 있다. 일 실시예에서, 디스패치/실행 유닛(236)은 예컨대, 예약국(reservation station) 및 하나 이상의 정수 실행 유닛과 같은 복수의 실행 유닛, 하나 이상의 부동 소수점 실행 유닛, 및 메모리 인터페이스 실행 유닛을 포함한다. 예약국은 리오더 버퍼(234) 내의 마이크로-연산들의 상태를 스캔하여 실행될 준비가 되어 있는 마이크로-연산들, 예컨대 가용 소스 연산자들을 갖는 마이크로-연산들을 식별한다. 예약국은 각 준비된 마이크로-연산을 마이크로-연산을 실행하기에 가용한 적절한 실행 유닛으로 디스패치한다. 각 실행 유닛은 마이크로-연산을 실행한 임의의 결과를 리오더 버퍼(234)에, 직접 혹은 예약국을 통해 리턴하여 그 결과를 리오더 버퍼(234) 내의 대응하는 마이크로-연산들과 함께 저장한다.
일 실시예에서 디스패치/실행 유닛(236)은 예약국이 메모리 로드 마이크로-연산을 주 캐시 제어 로직(220)에 연결된 메모리 인터페이스 실행 유닛에 디스패치하게 함으로써 하나 이상의 메모리 로드 마이크로-연산을 실행하여 주 캐시 메모리(222), 보조 캐시 메모리(212), 혹은 메인 메모리(120)로부터 데이타를 주 캐시 제어 로직(220), 버스 인터페이스 로직(210), 및/또는 메모리 컨트롤러(112)를 통해 요청한다.
리타이어 유닛(238)은 실행된 마이크로-연산들을 폐기한다. 일 실시예에서 리타이어 유닛(238)은 리오더 버퍼(234) 내의 마이크로-연산들의 상태를 스캔하고, 실행된 마이크로-연산들을 리오더 버퍼(234)로부터 제거하고, 실행된 마이크로-연산들의 결과들을 기계 상태, 즉, 아키텍쳐 레지스터(240) 및 메인 메모리(120)로 주 캐시 제어 로직(220), 버스 인터페이스 로직(210), 및 메모리 컨트롤러(112)를 통해 넘긴다. 일 실시예에서 리타이어 유닛(238)은 각각의 명령어들이 인출/디코더 유닛(232)에 의해 인출되고 디코딩되는 순서에 따라 실행된 마이크로-연산들을 폐기한다. 리타이어 유닛(238)은 임의의 적절한 방식으로 실행된 마이크로-연산들을 폐기하기 위해 임의의 적절한 회로를 포함할 수 있다.
도 2에 도시된 것과 같이 명령어 처리 로직(230)의 관점에서 기술되었지만, 본 발명은 명령어들을 처리하는 임의의 다른 적절한 프로세서 아키텍쳐를 사용하여 구현될 수 있다.
다른 실시예에서, 예를 들어, 인출/디코더 유닛(232)은 리오더 버퍼(234)보다는 예를 들어, 디스패치/실행 유닛(236)의 예약국에 마이크로-연산들을 할당한다. 할당된 마이크로-연산들을 디스패치 및 실행하면, 그 후 디스패치/실행 유닛(236)은 리타이어 유닛(238)에 의한 폐기를 위해 리오더 버퍼(234) 내에 임의의 결과들을 저장한다.
다른 실시예에서 인출/디코더 유닛(232)은 하나 이상의 인출된 명령어들을 마이크로-연산들로 디코딩하지 않고 직접 실행을 위해 각 명령어를 처리할 수 있다.
메모리 액세스 대기시간을 숨김(Hiding Memory Access Latency)
일 실시예에서 프로세서(110)는 도 3의 흐름도(300)에 따라 메모리 컨트롤러(112)를 사용하여 메인 메모리(120)에 액세스할 때 대기시간을 숨기는 것을 돕는다.
메모리 컨트롤러(112)는 프로세서(110)에 대한 메모리 액세스 대기시간을 숨기는 것을 돕기 위해 임의의 적절한 회로를 포함할 수 있다. 도 2에 도시된 바와 같이, 일 실시예의 메모리 컨트롤러(112)는 버스 인터페이스 로직(210), 그래픽 컨트롤러(130), 및 I/O 컨트롤러(140)에 연결된 메모리 컨트롤러 인터페이스 로직(202); 메모리 컨트롤러 인터페이스 로직(202) 및 메인 메모리(120)에 연결된 메모리 인터페이스 로직(204); 메모리 컨트롤러 인터페이스 로직(202)에 연결된 힌트 버퍼(114); 및 메모리 컨트롤러 인터페이스 로직(202)에 연결된 기입 버퍼(206)를 포함한다.
메모리 컨트롤러 인터페이스 로직(202) 및 메모리 인터페이스 로직(204)은 각각 임의의 적절한 회로를 포함할 수 있다. 메모리 인터페이스 로직(204)이 메인 메모리(120)에 액세스하기 때문에, 메모리 인터페이스 로직(204)을 위한 회로는, 예를 들어, 메인 메모리(120)에 사용된 메모리의 형태에 달려있다. 힌트 버퍼(114) 및 기입 버퍼(206)은 각각 임의의 적절한 회로를 포함하고 일 실시예에서 임의의 적절한 크기의 CAM(content-addressable memory)의 어레이를 각각 포함한다.
도 3의 블록 302에 있어, 명령어 처리 로직(230)은 데이타 및/또는 하나 이상의 명령어들을 요청한다. 일 실시예로서, 인출/디코드 유닛(232)은 명령어를 요청한다. 다른 실시예로서, 디스패치/실행 유닛(236)은 데이타를 요청한다. 일 실시예의 명령어 처리 로직(230)은 적절한 메모리 인출 요청을 주 캐시 제어 로직(220)에 발행함으로써 데이타 및/또는 하나 이상의 명령어들을 주 캐시 메모리(222)로부터 요청한다. 적절한 메모리 인출 요청들에는 예컨대 캐시가능한(cacheable) 메모리 판독 요청들, 캐시가능한 록 트랜잭션(lock transaction), 및 캐시불가능한 메모리 판독 요청들 등이, 한정되지 않고, 포함된다.
블록 304에 있어, 주 캐시 제어 로직(220)은 요청된 데이타 및/또는 명령어(들)이 주 캐시 메모리(222)에 저장되는지를 식별한다. 만일 그렇다면, 즉, 주 캐시 메모리(222)가 캐시 히트 신호를 보내면, 블록(306)에 대한 주 캐시 제어 로직(220)은 요청된 데이타 및/또는 명령어(들)을 주 캐시 메모리(222)로부터 명령어 처리 로직(230)으로 리턴한다. 그렇지 않으면, 즉, 주 캐시 메모리(222)가 캐시 미스 신호를 보내면, 주 캐시 제어 로직(220)은 메모리 인출 요청을 버스 인터페이스 로직(210)에 발행한다.
블록 308에 있어서, 메모리 컨트롤러(112)에 요청 힌트가 발행된다. 일 실시예에서, 주 캐시 제어 로직(220)은 요청 힌트를 주 캐시 제어 로직(220)에 연결된 버스(224)를 통해 메모리 컨트롤러(112)에 발행한다. 일 실시예에서 메모리 컨트롤러로(112)의 요청의 전송을 촉진시키는 것을 돕기 위해 버스(224)는 요청 힌트들을 전송하는데 실질적으로 전용이다. 다른 실시예에서, 버스 인터페이스 로직(210)은 주 캐시 제어 로직(220)으로부터의 메모리 인출 요청을 수신하는 것에 응답하여 버스 인터페이스 로직(210) 및 메모리 컨트롤러(112)에 연결되어 있는 버스(214)를 통하여 메모리 컨트롤러(112)로 요청 힌트를 발행한다. 일 실시예에서 버스 인터페이스 로직(210)은 다른 메모리 요청들 중에서 버스(214)를 통한 요청 힌트 및/또는 소정의 우선순위 방식에 따른 요청 힌트들을 발행한다. 다른 실시예에서 버스 인터페이스 로직(210)은 요청 힌트들의 전송에 실질적으로 전용인 버스(214)의 일부분을 통하여 요청 힌트를 발행한다.
요청 힌트는 메모리 컨트롤러(112)에 대해 요청된 데이타 및/또는 명령어(들)을 식별한다. 일 실시예에서 요청 힌트는 상기 요청을 요청 힌트로서 식별하는 요청 유형 및 요청된 데이타 및/또는 명령어(들)이 상주하는 어드레스를 포함한다. 또한, 일 실시예에서 요청 힌트는 스트라이드(stride)를 포함할 수 있다. 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 요청 힌트를 수신하고 그 요청 힌트에 추론적인 우선순위를 할당한다.
블록 310에서, 버스 인터페이스 로직(210)은 요청된 데이타 및/또는 명령어(들)이 보조 캐시 메모리(212)에 저장되어 있는지 여부를 식별한다. 저장되어 있다면, 즉, 보조 캐시 메모리(212)가 캐시 히트 신호를 보낸다면, 블록 312에서 버스 인터페이스 로직(210)은 요청된 데이타 및/또는 명령어(들)을 주 캐시 제어 로직(220)을 통해 보조 캐시 메모리(212)로부터 명령어 처리 로직(230)으로 리턴한다. 일 실시예에서 주 캐시 제어 로직(220)은 또한 요청된 데이타 및/또는 명령어(들)을 주 캐시 메모리(222)에 선택적으로 저장할 수 있다. 일 실시예에서, 버스 인터페이스 로직(210)은 블록 312에서 메모리 컨트롤러(112)에게 이전에 메모리 컨트롤러(112)로 발행된 요청 힌트를 취소할 것을 선택적으로 통지함으로써 메인 메모리(120)를 불필요하게 액세스하는 것을 피할 수 있다. 요청된 데이타 및/또는 명령어(들)이 보조 캐시 메모리(212)에 저장되어 있지 않으면, 즉, 보조 캐시 메모리(212)가 캐시 미스(miss) 신호를 보내면, 일 실시예에서 버스 인터페이스 로직(210)은 버스(214)를 통하여 메모리 컨트롤러(112)에게 블록 314에서 요청 힌트의 우선순위를 증가시킬 것을 통지한다. 다른 실시예에서, 버스 인터페이스 로직(210)은 버스(224)에 연결되어, 버스(224)를 통하여 메모리 컨트롤러(112)에게 요청 힌트를 취소하거나 또는 요청 힌트의 우선순위를 증가시킬 것을 통지할 수 있다.
버스 인터페이스 로직(210)은 메모리 컨트롤러(112)에게 요청 힌트의 우선순위를 증가시킬 것을 통지함으로써 메모리 컨트롤러(112)가 메모리 인출 요청을 실행할 때에 메모리 컨트롤러(112)에 의한 요청 힌트의 실행을 촉진하는 것을 돕는다. 메모리 컨트롤러(112)에게 요청 힌트의 우선순위를 증가시킬 것을 통지하는 것은 선택적이다. 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 블록 314에서, 추론적인 것(speculative)으로부터 요구되는 것(demand)으로 요청 힌트의 우선순위를 증가시킨다.
블록 316에서, 버스 인터페이스 로직(210)은 버스(214)를 통하여 메모리 컨트롤러(112)로 메모리 인출 요청을 발행한다. 일 실시예에서 버스 인터페이스 로직(210)은 다른 메모리 요청들 중에서 버스(124)를 통한 요청 힌트 및/또는 소정의 우선순위 방식에 따라 요청 힌트들을 발행한다.
주 캐시 제어 로직(220) 또는 버스 인터페이스 로직(210)은, 버스 인터페이스 로직(210)이 요청된 데이타 및/또는 명령어(들)이 보조 캐시 메모리(212)에 저장되어 있는지 여부를 식별하기 전에 또는 그 동안에 블록 308에서 요청 힌트를 발행한다. 이러한 방식으로, 메모리 컨트롤러(112)는 블록 316에서 메모리 인출 요청을 수신하기 이전에 요청된 데이타 및/또는 명령어(들)을 인출하기 위하여 메인 메모리(120)를 액세스하는 것을 시작하는 기회를 가짐으로써, 예를 들어 보조 캐시 메모리(212)를 검사하고 메모리 컨트롤러(112)로 메모리 인출 요청을 발행할 때에 발생된 대기시간과 메인 메모리(120)를 액세스하는데 발생하는 대기시간을 중첩함으로써 메인 메모리 액세스 대기시간을 숨기는 것을 돕는다.
요청 힌트를 수신하는 것에 응답하여, 블록 318에서 메모리 컨트롤러 인터페이스 로직(202)은 요청된 데이타 및/또는 명령어(들)이 힌트 버퍼(114)에 저장되어있는지 여부를 식별한다. 저장되어 있다면, 즉 힌트 버퍼(114)가 히트 신호를 보내면, 블록 320에서 메모리 컨트롤러(112)는 요청 힌트의 처리를 완료한다. 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 요청된 데이타 및/또는 명령어(들)을 요청 힌트에 대한 요청자(requester)에게 아직 리턴하지 않는다. 일 실시예에서 힌트 버퍼(114)는 이전의 요청 힌트로 인해 요청된 데이타 및/또는 명령어(들)을 이미 저장하고 있을 수 있다. 요청된 데이타 및/또는 명령어(들)이 힌트 버퍼(114)에 이미 저장되어 있지 않으면, 즉, 힌트 버퍼(114)가 미스 신호를 보내면, 메모리 컨트롤러 인터페이스 로직(202)은 요청된 데이타 및/또는 명령어(들)에 대해 이 때 힌트 버퍼(114) 내에 엔트리를 선택적으로 생성하고, 블록 322에서 요청된 데이타 및/또는 명령어(들)이 기입 버퍼(206)에 저장되어 있는지 여부를 식별한다.
기입 버퍼(206)는 메인 메모리(120)에 기입되어질 데이타 및/또는 명령어(들)을 저장한다. 명령어 처리 로직(230)으로부터의 메모리 기입 요청을 수신한 것에 응답하여, 예를 들면, 메모리 컨트롤러 인터페이스 로직(202)은 메모리 기입 요청에 대한 데이타 및/또는 명령어(들)을 기입 버퍼(206)에 기입한다. 이러한 방식으로, 메모리 기입 요청은 명령어 처리 로직(230)에 의해 완성되는 것으로 고려되는 한편 메모리 컨트롤러 인터페이스 로직(202)은 다른 메모리 요청들에 대해 메인 메모리(120)를 계속해서 액세스할 수 있다. 그 후, 메모리 컨트롤러 인터페이스 로직(202)은 메인 메모리(120)를 나중에 액세스하여, 예를 들어 메인 메모리(120)를 액세스하기 위한 요청이 느려졌던 경우 또는 기입 버퍼(206)가 플러시(flush)되어질 경우에 메모리 기입 요청을 수행할 수 있다.
기입 버퍼(206)가 메인 메모리(120)에 저장되어 있지 않았던 갱신된 데이타 및/또는 명령어(들)을 저장할 수 있기 때문에, 요청된 데이타 및/또는 명령어(들)이 기입 버퍼(206)에 저장되어 있는지 여부를 블록 322에서 메모리 컨트롤러 인터페이스 로직(202)이 식별한다. 요청된 데이타 및/또는 명령어(들)이 이미 기입 버퍼(206)에 저장되어 있으면, 즉, 기입 버퍼(206)가 히트 신호를 보내면, 블록 324에서 메모리 컨트롤러 인터페이스 로직(202)은 요청된 데이타 및/또는 명령어(들)에 대한 엔트리를 힌트 버퍼(114) 내에 생성하거나 또는 갱신한다. 힌트 버퍼(114) 내의 엔트리는 생성되거나 갱신되어 기입 버퍼(206)에 저장되어 있는 갱신된 데이타 및/또는 명령어(들)의 사본을 저장하거나 또는 요청된 데이타 및/또는 명령어(들)이 기입 버퍼(206)에 저장되어 있다는 표시를 저장한다. 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 요청된 데이타 및/또는 명령어(들)을 요청 힌트에 대한 요청자에게 아직 리턴하지 않는다.
요청된 데이타 및/또는 명령어(들)이 기입 버퍼(206)에 저장되어 있지 않으면, 즉, 기입 버퍼(206)가 미스 신호를 보내면, 메모리 컨트롤러 인터페이스 로직(202)은 요청된 데이타 및/또는 명령어(들)에 대해 이 때 힌트 버퍼(114) 내에 엔트리를 선택적으로 생성할 수 있다.
다른 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은, 예를 들어 메모리 인출 요청에 응답하여 일단 리턴되었던 이전의 요청 힌트들에 대한 힌트 버퍼(114) 내의 요청된 데이타 및/또는 명령어(들)을 메모리 컨트롤러 인터페이스로직(202)이 무효화하는 경우, 블록 318에서 힌트 버퍼(114)를 검사하는 것을 선택적으로 생략할 수 있다. 다른 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은, 예를 들어 메모리 컨트롤러(112)가 기입 버퍼(206)를 포함하지 않는 경우에, 블록 322에서 기입 버퍼(206)를 검사하는 것을 선택적으로 생략할 수 있다.
요청된 데이타 및/또는 명령어(들)이, 검사된 경우, 힌트 버퍼(114) 내에 저장되어 있지 않으면, 또는 검사된 경우, 기입 버퍼(206) 내에 저장되어 있지 않으면, 블록 326에서 메모리 컨트롤러 인터페이스 로직(202)은 소정의 우선순위 방식에 따라 메인 메모리(120)를 액세스하여, 요청된 데이타 및/또는 명령어(들)을 인출한다.
메모리 컨트롤러 인터페이스 로직(202)이 예를 들어 명령어 처리 로직(230), 그래픽 컨트롤러(130), 및/또는 I/O 컨트롤러(140)로부터 복수의 메모리 요청 및 요청 힌트들을 수신할 수 있기 때문에, 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 메인 메모리(120)를 액세스하기 위한 소정의 우선순위 방식에 따라 진행중인 메모리 요청들 및 요청 힌트들 사이 또는 그 중에서 중재(arbitrate)한다. 일례로서, 메모리 컨트롤러 인터페이스 로직(202)은 예를 들어 명령어 처리 로직(230)으로부터 기원하는 요청 힌트들 및 메모리 인출 요청들 양측에 대해 예를 들어 그래픽 컨트롤러(130)로부터 시작하는 메모리 인출 요청들의 우선순위를 매긴다. 다른 예로서, 메모리 컨트롤러 인터페이스 로직(202)은 명령어 처리 로직(230)으로부터 기원하는 요구되는 요청 힌트들(demand request hints)에 대해 명령어 처리 로직(230)으로부터 기원하는 메모리 인출 요청들의 우선순위를 매길수 있고, 명령어 처리 로직(230)으로부터 기원하는 추론적 요청 힌트들에 대해 명령어 처리 로직(230)으로부터 기원하는 요구되는 요청 힌트들의 우선순위를 매길 수 있다. 요청 힌트들에 대해 메모리 인출 요청들의 우선순위를 매김으로써, 메모리 컨트롤러 인터페이스 로직(202)은, 메인 메모리(120)가, 그렇지않는 경우, 유휴 상태에 있는 때에, 요청 힌트들에 대해 메인 메모리(120)를 액세스함으로써, 평균 메모리 액세스 대기시간을 감소시키는 것을 돕는다. 따라서 메모리 컨트롤러 인터페이스 로직(202)은 메인 메모리(120)에 대한 액세스를 벌리는(spread out) 것을 돕고, 이에 따라 메인 메모리(120)를 액세스하기 위한 대역폭을 더욱 충분히 사용한다. 메인 메모리(120)에 대한 액세스를 벌리는 것은 또한 메인 메모리(120)를 공유하는 임의의 기타 장치들과의 버스 충돌을 최소화하는 것을 돕는다.
메모리 컨트롤러 인터페이스 로직(202)이, 메인 메모리(120)가 요청 힌트에 대한 요청된 데이타 및/또는 명령어(들)을 인출하기 위해 액세스될 수 있음을 결정할 때, 메모리 컨트롤러 인터페이스 로직(202)은 메모리 인터페이스 로직(204)에게 요청 힌트를 발행한다. 메모리 인터페이스 로직(204)은 메인 메모리(120)를 액세스하여 요청 힌트에 따라 요청된 데이타 및/또는 명령어(들)을 인출한다. 메모리 인터페이스 로직(204)은 인출된 데이타 및/또는 명령어(들)을 메모리 컨트롤러 인터페이스 로직(204)으로 리턴하고, 블록 328에서 메모리 컨트롤러 인터페이스 로직(202)은 요청된 데이타 및/또는 명령어(들)에 대한 엔트리를 힌트 버퍼(114) 내에 생성하거나 갱신하여, 메인 메모리(120)로부터 액세스된 요청된 데이타 및/또는 명령어(들)의 사본을 저장한다. 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 요청된 데이타 및/또는 명령어(들)을 요청 힌트에 대한 요청자에게 아직 리턴하지 않는다.
블록 316에서 발행된 메모리 인출 요청을 수신하는 것에 응답하여, 블록 330에서 메모리 컨트롤러 인터페이스 로직(202)은 요청된 데이타 및/또는 명령어(들)이 기입 버퍼(206)에 저장되어 있는지 여부를 식별한다. 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 블록 330에서 직접적으로 기입 버퍼(206)를 검사할 수 있다. 또한 일 실시예에 있어 블록 330에서 메모리 컨트롤러 인터페이스 로직(202)은 힌트 버퍼(114)를 검사할 수 있으며 이것은 요청된 데이타 및/또는 명령어(들)이 기입 버퍼(206)에 저장되어 있음을 나타낼 수 있다. 요청된 데이타 및/또는 명령어(들)이 기입 버퍼(206)에 저장되어 있으면, 블록 332에서 메모리 컨트롤러 인터페이스 로직(202)은 기입 버퍼(206)로부터의 요청된 데이타 및/또는 명령어(들)을 버스 인터페이스 로직(210) 및 주 캐시 제어 로직(220)을 통하여 명령어 처리 로직(230)으로 리턴한다. 일 실시예에서 버스 인터페이스 로직(210)은 또한 요청된 데이타 및/또는 명령어(들)을 보조 캐시 메모리(212)에 선택적으로 저장할 수 있다. 일 실시예에서 주 캐시 제어 로직(220)은 요청된 데이타 및/또는 명령어(들)을 주 캐시 메모리(222)에 선택적으로 저장할 수도 있다. 일 실시예에 있어 블록 332에서 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 요청 힌트를 선택적으로 취소하거나 및/또는 힌트 버퍼(114) 내의 임의의 대응하는 엔트리를 무효화할 수도 있다.
요청된 데이타 및/또는 명령어(들)이 기입 버퍼(206)에 저장되어 있지 않으면, 즉, 기입 버퍼(206)가 미스 신호를 보내면, 블록 334에서 메모리 컨트롤러 인터페이스 로직(202)은 요청된 데이타 및/또는 명령어(들)이 힌트 버퍼(114)에 저장되어 있는지 여부를 식별한다. 저장되어 있으면, 즉 힌트 버퍼(114)가 히트 신호를 보내면, 블록 336에서 메모리 컨트롤러 인터페이스 로직(202)은 요청된 데이타 및/또는 명령어(들)을 버스 인터페이스 로직(210) 및 주 캐시 제어 로직(220)을 통하여 힌트 버퍼(114)로부터 명령어 처리 로직(230)으로 리턴한다. 또한 일 실시예에서 버스 인터페이스 로직(210)은 요청된 데이타 및/또는 명령어(들)을 보조 캐시 메모리(212)에 선택적으로 저장할 수 있다. 또한 일 실시예에서 주 캐시 제어 로직(220)은 요청된 데이타 및/또는 명령어(들)을 주 캐시 메모리(222)에 선택적으로 저장할 수 있다. 일 실시예에 있어 블록 336에서 메모리 컨트롤러 인터페이스 로직(202)은 또한 힌트 버퍼(114) 내의 대응하는 엔트리를 선택적으로 무효화시킬 수 있다.
요청된 데이타 및/또는 명령어(들)이 힌트 버퍼(114)에 저장되어 있지 않으면, 즉, 힌트 버퍼(114)가 미스 신호를 보내면, 블록 338에서 메모리 컨트롤러 인터페이스 로직(202)은 소정의 우선순위 방식에 따라 메인 메모리(120)를 액세스하여 요청된 데이타 및/또는 명령어(들)을 인출한다. 일 실시예에 있어 블록 338에서 메모리 컨트롤러 인터페이스 로직(202)은 대응하는 요청 힌트를 선택적으로 취소하거나 및/또는 힌트 버퍼(114) 내의 임의의 대응하는 엔트리를 무효화시킬 수 있다.
메인 메모리(120)가 메모리 인출 요청에 대한 요청된 데이타 및/또는명령어(들)을 인출하기 위해 액세스될 수 있음을 메모리 컨트롤러 인터페이스 로직(202)이 결정할 때, 메모리 컨트롤러 인터페이스 로직(202)은 메모리 인터페이스 로직(204)에게 메모리 인출 요청을 발행한다. 메모리 인터페이스 로직(204)은 메인 메모리(120)를 액세스하여 메모리 인출 요청에 따라 요청된 데이타 및/또는 명령어(들)을 인출한다. 메모리 인터페이스 로직(204)은 인출된 데이타 및/또는 명령어(들)을 메모리 컨트롤러 인터페이스 로직(202)으로 리턴하고, 블록 340에서 메모리 컨트롤러 인터페이스 로직(202)은 요청된 데이타 및/또는 명령어(들)을 버스 인터페이스 로직(210) 및 주 캐시 제어 로직(220)을 통해 메인 메모리(120)로부터 명령어 처리 로직(230)으로 리턴한다. 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 요청된 데이타 및/또는 명령어(들)을 힌트 버퍼(114)에 선택적으로 저장할 수 있다. 일 실시예에서 버스 인터페이스 로직(210)은 또한 요청된 데이타 및/또는 명령어(들)을 보조 캐시 메모리(212)에 선택적으로 저장할 수 있다. 일 실시예에서 주 캐시 제어 로직(220)은 또한 요청된 데이타 및/또는 명령어(들)을 주 캐시 메모리(222)에 선택적으로 저장할 수 있다.
요청된 데이타 및/또는 명령어(들)이 기입 버퍼(206)에 저장되어 있다는 표시를 힌트 버퍼(114)가 저장할 수 있는 다른 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 먼저 힌트 버퍼(114)를 선택적으로 검사하고, 그 다음에, 요청된 데이타 및/또는 명령어(들)이 기입 버퍼(206)에 저장되어 있다는 것을 힌트 버퍼(114) 내의 대응하는 엔트리가 표시하는 경우에만, 기입 버퍼(206)를 검사할 수 있다. 다른 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은, 예를 들어메모리 컨트롤러(112)가 기입 버퍼(206)를 포함하지 않는 경우, 또는 메모리 컨트롤러 인터페이스 로직(202)이 기입 버퍼(206) 내의 대응하는 데이타 및/또는 명령어(들)을 갱신하거나 저장할 때마다 메모리 컨트롤러 인터페이스 로직(202)이 힌트 버퍼(114)를 갱신하는 경우에 기입 버퍼(206)를 검사하는 것을 선택적으로 생략할 수 있다.
요청된 데이타 및/또는 명령어(들)이 기입 버퍼(206)에 저장되어 있다는 표시를 힌트 버퍼(114)가 저장할 수 있는 일 실시예에서, 메모리 컨트롤러 인터페이스 로직(202)은 도 4에 도시된 바와 같이 흐름도(400)에 따라 기입 버퍼(206) 내의 하나 이상의 엔트리들을 플러싱(flushing)한다.
도 4의 블록 402에서, 메모리 컨트롤러 인터페이스 로직(202)은 기입 버퍼(206) 내의 하나 이상의 엔트리들이 메인 메모리(120)로 플러싱되는지 여부를 판정한다. 메모리 컨트롤러 인터페이스 로직(202)은, 예를 들어 기입 버퍼(206)가 적어도 소정 수의 엔트리를 저장하기 때문에, 메인 메모리(120)에 대한 액세스가 느려지기 때문에, 및/또는 데이타 및/또는 명령어(들)에 대한 메모리 인출 요청이 계류중(pending)인 동안 그 데이타 및/또는 명령어(들)이 기입 버퍼(206)에서 갱신되었기 때문에, 기입 버퍼(206) 내의 하나 이상의 엔트리들이 플러싱되어질지를 판정할 수 있다. 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은, 메모리 컨트롤러 인터페이스 로직(202)이 기입 버퍼(206) 내의 임의의 엔트리가 플러싱될 것임을 판정하면, 기입 버퍼(206) 내의 모든 엔트리들이 플러싱될 것을 결정한다.
기입 버퍼(206)의 하나 이상의 엔트리들이 플러싱되면, 힌트 버퍼(114)가 플러싱될 기입 버퍼(206) 내의 엔트리에 대응하는 임의의 엔트리들을 가지는지 여부를 메모리 컨트롤러 인터페이스 로직(202)이 블록 404에서 판정한다. 가진다면, 메모리 컨트롤러 인터페이스 로직(202)은 힌트 버퍼(114) 내의 각 대응하는 엔트리를, 기입 버퍼(206)로부터의 대응하는 갱신된 데이타 및/또는 명령어(들)의 사본으로 갱신한다.
힌트 버퍼(114)가, 플러싱될 기입 버퍼(206) 내의 엔트리에 대응하는 임의의 엔트리들을 가지고 있던 가지고 있지 않던 간에, 메모리 컨트롤러 인터페이스 로직(202)은 플러싱될 기입 버퍼(206) 내의 각 엔트리로부터의 갱신된 데이타 및/또는 명령어(들)로 메인 메모리(120)를 갱신한다.
요청된 데이타 및/또는 명령어(들)이 기입 버퍼(206)에 저장되어 있다는 표시를 힌트 버퍼(114)가 저장할 수 있는 다른 실시예에서, 메모리 컨트롤러 인터페이스 로직(202)은 메인 메모리(120)로 플러싱될 기입 버퍼(206)의 하나 이상의 엔트리들을 기입하고 그 다음에 메인 메모리(120)를 액세스하기 위해 힌트 버퍼(114) 내의 대응하는 엔트리들에 대한 요청 힌트를 발행하여 요청된 데이타 및/또는 명령어(들)을 인출함으로써, 기입 버퍼(206) 내의 하나 이상의 엔트리들을 플러싱한다.
일 실시예에서, 도 5는 힌트 버퍼(114)용 엔트리(500)를 도시한다. 힌트 버퍼(114)는 임의의 적절한 수의 엔트리들을 저장할 수 있다.
엔트리(500)는 어드레스 필드(502) 및 데이타 필드(504)를 포함한다. 엔트리(500)는 또한, 예를 들어 기입 버퍼 상태 플래그 필드(506), 요청 힌트 상태 플래그 필드(508), 완료 플래그 필드(done flag field)(510), 및 유효성 플래그필드(512)와 같은 다양한 제어 필드들을 포함한다.
어드레스 필드(502)에는 요청된 데이타 및/또는 명령어(들)이 상주하는 어드레스를 저장한다. 데이타 필드(504)에는 기입 버퍼(206) 또는 메인 메모리(120)로부터 일단 인출된 어드레스 필드(502)의 어드레스에서의 데이타 및/또는 명령어(들)이 저장된다. 어드레스 필드(502) 및 데이타 필드(504)는 각각 임의의 적절한 크기를 가질 수 있다.
기입 버퍼 상태 플래그 필드(506)는 엔트리(500)에 대응하는 요청 힌트에 의해 요청된 데이타 및/또는 명령어(들)이 기입 버퍼(206)에 저장되어 있는지 여부를 나타낸다. 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은, 메모리 컨트롤러 인터페이스 로직(202)이 기입 버퍼(206) 내의 요청된 데이타 및/또는 명령어(들)을 식별할 때 기입 버퍼 히트를 표시하도록 기입 버퍼 상태 플래그 필드(506)를 설정한다. 예를 들어 메모리 컨트롤러(112)가 기입 버퍼(206)를 포함하지 않는 경우에, 또는 기입 버퍼가 갱신되었을 때 메모리 컨트롤러 인터페이스 로직(202)이 힌트 버퍼(114) 내의 대응하는 데이타 및/또는 명령어(들)을 갱신하는 경우에, 기입 버퍼 상태 플래그 필드(506)는 이용되지 않을 수 있다. 일 실시예에서 기입 버퍼 상태 플래그 필드(506)는 일 비트를 저장한다.
일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 기입 버퍼 상태 플래그 필드(506)를 검사하여 엔트리(500)에 대한 요청된 데이타 및/또는 명령어(들)이, 메모리 인출 요청이 엔트리 상의 히트를 발생시킬 때 기입 버퍼(206)에 있는지 여부 또는 데이타 필드(504)에 있는지 여부를 판정한다.
요청 힌트 상태 플래그 필드(508)는, 엔트리(500)에 대응하는 요청 힌트가 메모리 컨트롤러 인터페이스 로직(202)에 의해 이미 수행되었는지 여부를 나타낸다. 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은, 엔트리(500)가 힌트 버퍼(114)에 생성되었을 때 계류중임을 나타내도록 요청 힌트 상태 플래그 필드(508)를 설정한다. 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은, 메모리 컨트롤러 인터페이스 로직(202)이 데이타 필드(504) 내의 대응하는 요청 힌트에 대한 요청된 데이타 및/또는 명령어(들)을 저장하거나 또는 기입 버퍼(206) 내의 요청된 데이타 및/또는 명령어(들)을 식별할 때 완료되었음을 나타내도록 요청 힌트 상태 플래그 필드(508)를 설정한다. 예를 들어 요청된 데이타 및/또는 명령어(들)을 인출한 후 또는 기입 버퍼(206) 내의 요청된 데이타 및/또는 명령어(들)을 식별한 후에만 힌트 버퍼(114) 내의 엔트리들을 메모리 컨트롤러 인터페이스 로직(202)이 생성하는 경우에는 요청 힌트 상태 플래그 필드(508)가 사용되지 않을 수 있다. 일 실시예에서 요청 힌트 상태 플래그 필드(508)는 일 비트를 저장한다.
일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 요청 힌트 상태 플래그 필드(508)를 검사하여, 대응하는 요청 힌트에 대한 요청된 데이타 및/또는 명령어(들)이, 메모리 인출 요청이 엔트리(500) 상에 히트를 발생시키는 경우에 기입 버퍼(206)에서 식별되었는지 또는 데이타 필드(504)에 저장되어 있었는지를 판정한다.
완료 플래그 필드(510)는 엔트리(500)에 대한 요청된 데이타 및/또는 명령어(들)이 메모리 인출 요청에 응답하여 리턴되었는지 여부를 나타낸다. 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은, 엔트리(500) 상에 히트를 발생시키는 메모리 인출 요청에 대한 요청된 데이타 및/또는 명령어(들)을 메모리 컨트롤러 인터페이스 로직(202)이 리턴할 때 완료되었음을 나타내도록 완료 플래그 필드(510)를 설정한다. 일 실시예에서 완료 플래그 필드(510)는 일 비트를 저장한다.
일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 완료 플래그 필드(510)를 검사하여 예를 들어 엔트리(500)를 무효화시킨다.
유효성 플래그 필드(512)는 엔트리(500)가 힌트 버퍼(114) 내의 유효 엔트리인지 또는 무효 엔트리인지 여부를 나타낸다. 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은, 대응하는 요청 힌트에 대한 요청된 데이타 및/또는 명령어(들)이 인출되었는지 또는 기입 버퍼(206)에서 식별되었던지 간에 엔트리(500)가 힌트 버퍼(114)에 생성되었을 때 유효성을 나타내도록 유효성 플래그 필드(512)를 설정한다. 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은, 예를 들어 대응하는 요청 힌트가 요청된 데이타 및/또는 명령어(들)을 아직 인출하지 않고 취소하였을 때 및/또는 요청된 데이타 및/또는 명령어(들)이 엔트리(500) 상에 히트를 발생시킨 메모리 인출 요청에 대해 리턴되었을 때, 무효성을 나타내도록 유효성 플래그 필드(512)를 설정한다. 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 완료 플래그 필드(510)를 주기적으로 검사함으로써 및/또는 새로운 엔트리가 힌트 버퍼(114)에 생성될 때 엔트리를 무효화하려고 시도할 수 있다. 일 실시예에서 유효성 플래그 필드(512)는 일 비트를 저장할 수 있다.
일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 유효성 플래그 필드(512)를 검사하여, 메모리 인출 요청이 엔트리(500) 상에 히트를 발생시킬 때 엔트리(500)가 유효함을 보증한다.
메모리 컨트롤러 인터페이스 로직(202)이, 대응하는 메모리 인출 요청이 소정의 시기 동안에 수신되지 않았거나 또는 메모리 컨트롤러(112)에 의해 전혀 수신되지 않는 동안에, 하나 이상의 엔트리를 힌트 버퍼(114)에 저장할 수 있기 때문에, 일 실시예에서 메모리 컨트롤러 인터페이스 로직(202)은 그러한 엔트리들에 대한 요청된 데이타 및/또는 명령어(들)을 버스 인터페이스 로직(210)으로 리턴하여 그 요청된 데이타 및/또는 명령어(들)을 보조 캐시 메모리(212) 및/또는 주 캐시 메모리(222)에 저장할 수 있다. 이러한 방식으로, 메모리 컨트롤러 인터페이스 로직(202)은 힌트 버퍼(114)에 새로운 엔트리들을 계속해서 생성할 수 있으며, 힌트 버퍼(114) 내의 임의의 퇴거된 엔트리들에 대한 요청된 데이타 및/또는 명령어(들)은 여전히 요청될 수 있다.
또 다른 실시예에서, 도 1 및 도 2의 프로세서(110)는 도 6의 흐름도(600)에 따라 메모리 컨트롤러(112)를 사용하여 메인 메모리(120)를 액세스할 때 대기시간을 숨기는 것을 돕는다. 흐름도(600)에서, 블록들(602, 604, 606, 608, 610, 612, 614, 616, 618, 620, 622, 624, 626, 628, 630, 632, 634, 636, 638, 및 640)은 도 3의 흐름도(300)의 블록들(302, 308, 304, 306, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 및 340)에 각각 대응한다.
주 캐시 메모리(222)에서의 미스 후에 도 3의 블록 308에서 요청 힌트를 발행하는 것 대신에, 흐름도(600)에서 주 캐시 제어 로직(220)은, 주 캐시 제어 로직(220)이 블록 606에서 요청된 데이타 및/또는 명령어(들)이 주 캐시 메모리(222)에 저장되어 있는지 여부를 식별하기 이전이나 그 중에 블록 604에서 메모리 컨트롤러(112)로 요청 힌트를 발행한다. 이러한 방식으로, 메모리 컨트롤러(112)는 메인 메모리(120)에 대한 액세스를 시작하기 위한 보다 긴 윈도우 기회를 가져서, 메모리 인출 요청을 수신하기 전에 요청된 데이타 및/또는 명령어(들)을 인출한다. 주 캐시 메모리(222)가 캐시 히트 신호를 보내면, 블록 608에서 주 캐시 제어 로직(220)은 주 캐시 메모리(222)로부터 요청된 데이타 및/또는 명령어(들)을 명령어 처리 로직(230)으로 리턴한다. 일 실시예에서 주 캐시 제어 로직(220)은, 메모리 컨트롤러(112)에 이전에 발행된 요청 힌트를 취소하라고 블록 608에서 메모리 컨트롤러(112)에게 선택적으로 통지하여 메인 메모리(120)를 불필요하게 액세스하는 것을 피할 수 있다.
일 실시예에서 명령어 처리 로직(230)은 블록 604에서 메모리 컨트롤러(112)로 요청 힌트를 발행할 수 있다. 일 실시예에서 프로세서(110)는 명령어 처리 로직(230)과 메모리 컨트롤러(112) 사이에 연결된 버스를 포함할 수 있으며 그 버스는 실질적으로 요청 힌트를 전송하는데 전용이어서 메모리 컨트롤러(112)로의 요청의 전송을 촉진시키는 것을 돕는다. 다른 실시예에서, 명령어 처리 로직(230)은 주 캐시 제어 로직(220) 및 버스 인터페이스 로직(210)을 통하여 요청 힌트들을 발행할 수 있다.
일 실시예에서 프로세서(110)는 메모리 컨트롤러(112)로 사전인출(prefetch)요청 힌트들을 발행함으로써 메모리 액세스 대기시간을 숨기는 것을 돕기 위한 사전인출 기능을 구현할 수 있다. 일 실시예에서 프로세서(110)는 적절한 요청 힌트들을 발행하여, 예를 들어, 명령어 사전인출, 캐시 라인 분할 액세스, 및 어레이 초기화와 메모리 복제와 같이 일정한 스트라이드들을 갖는 탄탄한 루프(tight loops)와 같은 경우에, 다음의 캐시 라인 사전인출을 구현할 수 있다. 또한 일 실시예에서 프로세서(110)는 예를 들어 마이크로코드 또는 하드웨어 스트라이드 분석기로부터 사전인출 요청 힌트들을 발행할 수도 있다.
프로세서(110)는, 메인 메모리(120)를 액세스할 때 발생된 대기시간을 내부적으로 발생된 다른 대기시간과 함께 중첩함으로써 메모리 액세스 대기시간을 숨기는 것을 돕고 메인 메모리(120)에 대한 액세스를 벌림으로써 평균 메모리 액세스 대기시간을 감소시키는 것을 도울 수 있기 때문에, 프로세서(110)는 보다 큰 버퍼들, 큐들, 및/또는 캐시 메모리들을 이용하지 않으면서도 비교적 증가된 처리량으로 명령어들을 처리할 수 있다.
비록 프로세서(110)의 맥락에서 서술되었지만, 일 실시예에서 도 1 및 2의 그래픽 컨트롤러(130) 및/또는 I/O 컨트롤러(140)가 프로세서(110)와 유사하게 메모리 컨트롤러(112)를 사용하여 메인 메모리(120)를 액세스하는데 있어서의 대기시간을 숨기는 것을 도울 수 있다.
이상 서술된 설명에 있어서, 본 발명은 특정의 예시적인 실시예들을 참고로 하여 설명되었다. 그러나, 첨부되는 특허청구범위에서 정의된 본 발명의 보다 넓은 사상 및 범위로부터 벗어나지 않으면서 본 발명에 대해 다앙한 수정 및 변경을행할 수 있음은 명백하다. 따라서, 명세서 및 도면들은 한정하는 의미라기 보다 예시적인 것으로 고려되어야 한다.

Claims (22)

  1. 요청된 데이터 및/또는 하나 이상의 명령어(들)이 제1 메모리 내에 있는지를 확인하기 전에 또는 확인하는 동안 요청 힌트(request hint)를 발행하는 단계;
    상기 요청 힌트에 응답하여 상기 데이터 및/또는 하나 이상의 명령어(들)을 인출(fetch)하기 위해 제2 메모리에 액세스하는 단계;
    상기 제2 메모리로부터 액세스된 상기 데이터 및/또는 명령어(들)을 버퍼에 저장하는 단계; 및
    상기 요청된 데이터 및/또는 명령어(들)이 상기 제1 메모리 내에 없으면, 상기 버퍼로부터 상기 데이터 및/또는 명령어(들)을 리턴시키는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 요청 힌트에 응답하여 상기 요청된 데이터 및/또는 명령어(들)이 기입 버퍼에 저장되어 있는지를 확인하는 단계를 포함하는 방법.
  3. 제1항에 있어서,
    상기 요청 힌트를 발행하기 전에, 상기 요청된 데이터 및/또는 명령어(들)이 제3 메모리 내에 있는지를 확인하는 단계를 포함하며,
    상기 발행 단계는, 상기 요청된 데이터 및/또는 명령어(들)이 상기 제3 메모리 내에 없는 경우 상기 요청 힌트를 발행하는 단계를 포함하는 방법.
  4. 제1항에 있어서,
    상기 리턴 단계는 상기 요청된 데이터 및/또는 명령어(들)에 대한 메모리 인출 요청(memory fetch request)을 발행하는 단계를 포함하는 방법.
  5. 제4항에 있어서,
    상기 리턴 단계는 상기 메모리 인출 요청에 응답하여 상기 요청된 데이터 및/또는 명령어(들)이 기입 버퍼 내에 있는지를 확인하는 단계를 포함하는 방법.
  6. 제1 메모리;
    상기 제1 메모리에 연결되어, 요청된 데이터 및/또는 하나 이상의 명령어(들)이 상기 제1 메모리 내에 있는지를 확인하기 전에 또는 확인하는 동안 요청 힌트를 발행하고, 상기 요청된 데이터 및/또는 명령어(들)이 상기 제1 메모리 내에 없으면 메모리 인출 요청을 발행하는 로직; 및
    상기 로직에 연결되고, 버퍼를 포함하며, 상기 요청 힌트를 수신하고 상기 요청 힌트에 응답하여 데이터 및/또는 하나 이상의 명령어(들)을 인출하기 위해 제2 메모리에 액세스하고 상기 액세스된 데이터 및/또는 명령어(들)을 상기 버퍼 내에 저장하며, 상기 메모리 인출 요청에 응답하여 상기 버퍼로부터 상기 액세스된 데이터 및/또는 명령어(들)을 상기 로직으로 리턴시키는 메모리 컨트롤러
    를 포함하는 장치
  7. 제6항에 있어서,
    상기 제1 메모리는 주 캐시 메모리(primary cache memory)를 포함하는 장치.
  8. 제6항에 있어서,
    상기 제1 메모리는 보조 캐시 메모리(secondary cache memory)를 포함하는 장치.
  9. 제6항에 있어서,
    상기 로직에 연결된 제3 메모리를 포함하며, 상기 로직은 상기 요청된 데이터 및/또는 명령어(들)이 상기 제3 메모리 내에 있는지를 확인하고 상기 요청된 데이터 및/또는 명령어(들)이 상기 제3 메모리 내에 없으면 상기 요청 힌트를 발행하는 장치.
  10. 제6항에 있어서,
    상기 메모리 컨트롤러는 상기 제2 메모리에 기입될 데이터 및/또는 명령어(들)을 저장하기 위해 기입 버퍼를 포함하고, 상기 메모리 컨트롤러는 상기 요청 힌트에 응답하여 상기 요청된 데이터 및/또는 명령어(들)이 상기 기입 버퍼 내에 저장되어 있는지를 확인하는 장치.
  11. 제6항에 있어서,
    상기 메모리 컨트롤러는 상기 제2 메모리에 기입될 데이터 및/또는 명령어(들)을 저장하기 위해 기입 버퍼를 포함하고, 상기 메모리 컨트롤러는 상기 메모리 인출 요청에 응답하여 상기 요청된 데이터 및 명령어(들)이 상기 기입 버퍼에 저장되어 있는지를 확인하는 장치.
  12. 제6항에 있어서,
    상기 로직은 상기 요청 힌트를 발행하기 위해 명령어 처리 로직(instruction processing logic)을 포함하는 장치.
  13. 제6항에 있어서,
    상기 로직은 상기 요청 힌트를 발행하기 위해 주 캐시 제어 로직(primary cache control logic)을 포함하는 장치.
  14. 메인 메모리;
    캐시 메모리;
    상기 캐시 메모리에 연결되어, 데이터 및/또는 하나 이상의 명령어(들)을 요청하고 상기 요청된 데이터 및/또는 명령어(들)이 상기 캐시 메모리 내에 있는지를 확인하기 전에 또는 확인하는 동안 요청 힌트를 발행하며, 상기 요청된 데이터 및/또는 명령어(들)이 상기 캐시 메모리 내에 없으면 메모리 인출 요청을 발행하는 로직; 및
    상기 로직과 상기 메인 메모리에 연결되고, 버퍼를 포함하며, 상기 요청 힌트를 수신하고 상기 요청 힌트에 응답하여 상기 데이터 및/또는 하나 이상의 명령어(들)을 인출하기 위해 상기 메인 메모리에 액세스하고 상기 액세스된 데이터 및/또는 명령어(들)을 상기 버퍼 내에 저장하며, 상기 메모리 인출 요청에 응답하여 상기 버퍼로부터 상기 액세스된 데이터 및/또는 명령어(들)을 상기 로직으로 리턴시키는 메모리 컨트롤러
    를 포함하는 시스템.
  15. 제14항에 있어서,
    상기 캐시 메모리는 주 캐시 메모리를 포함하는 시스템.
  16. 제14항에 있어서,
    상기 캐시 메모리는 보조 캐시 메모리를 포함하는 시스템.
  17. 제14항에 있어서,
    상기 캐시 메모리는 주 캐시 메모리 및 보조 캐시 메모리를 포함하며, 상기 로직은 상기 요청된 데이터 및/또는 명령어(들)이 상기 주 캐시 메모리 내에 있는지를 확인하고 상기 요청된 데이터 및/또는 명령어(들)이 상기 주 캐시 메모리 내에 없으면 상기 요청 힌트를 발행하는 시스템.
  18. 제14항에 있어서,
    상기 메모리 컨트롤러는 상기 메인 메모리에 기입될 데이터 및/또는 명령어(들)을 저장하기 위해 기입 버퍼를 포함하고, 상기 메모리 컨트롤러는 상기 요청 힌트에 응답하여 상기 요청된 데이터 및/또는 명령어(들)이 상기 기입 버퍼 내에 저장되어 있는지를 확인하는 시스템.
  19. 제14항에 있어서,
    상기 메모리 컨트롤러는 상기 메인 메모리에 기입될 데이터 및/또는 명령어(들)을 저장하기 위해 기입 버퍼를 포함하고, 상기 메모리 컨트롤러는 상기 메모리 인출에 응답하여 상기 요청된 데이터 및 명령어(들)이 상기 기입 버퍼 내에 저장되어 있는지를 확인하는 시스템.
  20. 제14항에 있어서,
    상기 로직은 상기 요청 힌트를 발행하기 위해 명령어 처리 로직을 포함하는 시스템.
  21. 제14항에 있어서,
    상기 로직은 상기 요청 힌트를 발행하기 위해 주 캐시 제어 로직을 포함하는시스템.
  22. 제14항에 있어서,
    상기 캐시 메모리, 상기 로직, 및 상기 메모리 컨트롤러는 집적화되어 있는 시스템.
KR10-2004-7004668A 2001-09-28 2002-09-26 힌트 버퍼를 이용한 메모리 액세스 대기시간 숨김 KR20040045035A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US09/966,587 US6718440B2 (en) 2001-09-28 2001-09-28 Memory access latency hiding with hint buffer
US09/966,587 2001-09-28
PCT/US2002/030790 WO2003029962A1 (en) 2001-09-28 2002-09-26 Memory access latency hiding with hint buffer

Publications (1)

Publication Number Publication Date
KR20040045035A true KR20040045035A (ko) 2004-05-31

Family

ID=25511611

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2004-7004668A KR20040045035A (ko) 2001-09-28 2002-09-26 힌트 버퍼를 이용한 메모리 액세스 대기시간 숨김

Country Status (6)

Country Link
US (1) US6718440B2 (ko)
KR (1) KR20040045035A (ko)
CN (1) CN1324459C (ko)
GB (1) GB2397918B (ko)
TW (1) TWI250411B (ko)
WO (1) WO2003029962A1 (ko)

Families Citing this family (85)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6791555B1 (en) * 2000-06-23 2004-09-14 Micron Technology, Inc. Apparatus and method for distributed memory control in a graphics processing system
US7133972B2 (en) * 2002-06-07 2006-11-07 Micron Technology, Inc. Memory hub with internal cache and/or memory access prediction
US7200024B2 (en) * 2002-08-02 2007-04-03 Micron Technology, Inc. System and method for optically interconnecting memory devices
US7117316B2 (en) * 2002-08-05 2006-10-03 Micron Technology, Inc. Memory hub and access method having internal row caching
US7254331B2 (en) * 2002-08-09 2007-08-07 Micron Technology, Inc. System and method for multiple bit optical data transmission in memory systems
US7149874B2 (en) * 2002-08-16 2006-12-12 Micron Technology, Inc. Memory hub bypass circuit and method
US7836252B2 (en) * 2002-08-29 2010-11-16 Micron Technology, Inc. System and method for optimizing interconnections of memory devices in a multichip module
US6820181B2 (en) 2002-08-29 2004-11-16 Micron Technology, Inc. Method and system for controlling memory accesses to memory modules having a memory hub architecture
US7102907B2 (en) * 2002-09-09 2006-09-05 Micron Technology, Inc. Wavelength division multiplexed memory module, memory system and method
TWI229290B (en) * 2002-09-11 2005-03-11 Sunplus Technology Co Ltd Storage structure and the method capable of storing and forwarding instructions and data
GB2393274B (en) * 2002-09-20 2006-03-15 Advanced Risc Mach Ltd Data processing system having an external instruction set and an internal instruction set
US6910104B2 (en) * 2002-09-20 2005-06-21 International Business Machines Corporation Icache-based value prediction mechanism
US7143225B1 (en) * 2003-04-29 2006-11-28 Advanced Micro Devices, Inc. Apparatus and method for viewing data processor bus transactions on address pins during memory idle cycles
US7245145B2 (en) * 2003-06-11 2007-07-17 Micron Technology, Inc. Memory module and method having improved signal routing topology
US7120727B2 (en) 2003-06-19 2006-10-10 Micron Technology, Inc. Reconfigurable memory module and method
US7260685B2 (en) * 2003-06-20 2007-08-21 Micron Technology, Inc. Memory hub and access method having internal prefetch buffers
US7107415B2 (en) * 2003-06-20 2006-09-12 Micron Technology, Inc. Posted write buffers and methods of posting write requests in memory modules
US7428644B2 (en) * 2003-06-20 2008-09-23 Micron Technology, Inc. System and method for selective memory module power management
US7389364B2 (en) * 2003-07-22 2008-06-17 Micron Technology, Inc. Apparatus and method for direct memory access in a hub-based memory system
US7210059B2 (en) * 2003-08-19 2007-04-24 Micron Technology, Inc. System and method for on-board diagnostics of memory modules
US7133991B2 (en) * 2003-08-20 2006-11-07 Micron Technology, Inc. Method and system for capturing and bypassing memory transactions in a hub-based memory system
US7136958B2 (en) * 2003-08-28 2006-11-14 Micron Technology, Inc. Multiple processor system and method including multiple memory hub modules
US20050050237A1 (en) * 2003-08-28 2005-03-03 Jeddeloh Joseph M. Memory module and method having on-board data search capabilities and processor-based system using such memory modules
US7310752B2 (en) 2003-09-12 2007-12-18 Micron Technology, Inc. System and method for on-board timing margin testing of memory modules
US7194593B2 (en) * 2003-09-18 2007-03-20 Micron Technology, Inc. Memory hub with integrated non-volatile memory
US7120743B2 (en) 2003-10-20 2006-10-10 Micron Technology, Inc. Arbitration system and method for memory responses in a hub-based memory system
US7330992B2 (en) 2003-12-29 2008-02-12 Micron Technology, Inc. System and method for read synchronization of memory modules
US7188219B2 (en) 2004-01-30 2007-03-06 Micron Technology, Inc. Buffer control system and method for a memory system having outstanding read and write request buffers
US7181584B2 (en) * 2004-02-05 2007-02-20 Micron Technology, Inc. Dynamic command and/or address mirroring system and method for memory modules
US7412574B2 (en) * 2004-02-05 2008-08-12 Micron Technology, Inc. System and method for arbitration of memory responses in a hub-based memory system
US7788451B2 (en) * 2004-02-05 2010-08-31 Micron Technology, Inc. Apparatus and method for data bypass for a bi-directional data bus in a hub-based memory sub-system
US7366864B2 (en) 2004-03-08 2008-04-29 Micron Technology, Inc. Memory hub architecture having programmable lane widths
US7257683B2 (en) 2004-03-24 2007-08-14 Micron Technology, Inc. Memory arbitration system and method having an arbitration packet protocol
US7120723B2 (en) * 2004-03-25 2006-10-10 Micron Technology, Inc. System and method for memory hub-based expansion bus
US7447240B2 (en) * 2004-03-29 2008-11-04 Micron Technology, Inc. Method and system for synchronizing communications links in a hub-based memory system
US7213082B2 (en) * 2004-03-29 2007-05-01 Micron Technology, Inc. Memory hub and method for providing memory sequencing hints
US6980042B2 (en) * 2004-04-05 2005-12-27 Micron Technology, Inc. Delay line synchronizer apparatus and method
US7590797B2 (en) * 2004-04-08 2009-09-15 Micron Technology, Inc. System and method for optimizing interconnections of components in a multichip memory module
US7162567B2 (en) * 2004-05-14 2007-01-09 Micron Technology, Inc. Memory hub and method for memory sequencing
US7222213B2 (en) * 2004-05-17 2007-05-22 Micron Technology, Inc. System and method for communicating the synchronization status of memory modules during initialization of the memory modules
US7363419B2 (en) 2004-05-28 2008-04-22 Micron Technology, Inc. Method and system for terminating write commands in a hub-based memory system
US7519788B2 (en) * 2004-06-04 2009-04-14 Micron Technology, Inc. System and method for an asynchronous data buffer having buffer write and read pointers
US7310748B2 (en) 2004-06-04 2007-12-18 Micron Technology, Inc. Memory hub tester interface and method for use thereof
US7589738B2 (en) * 2004-07-14 2009-09-15 Integrated Device Technology, Inc. Cache memory management system and method
US20060031565A1 (en) * 2004-07-16 2006-02-09 Sundar Iyer High speed packet-buffering system
US7392331B2 (en) * 2004-08-31 2008-06-24 Micron Technology, Inc. System and method for transmitting data packets in a computer system having a memory hub architecture
US20060168407A1 (en) * 2005-01-26 2006-07-27 Micron Technology, Inc. Memory hub system and method having large virtual page size
US7769924B2 (en) * 2005-09-30 2010-08-03 Intel Corporation Method and system for low latency audio-visual transport
WO2007056893A1 (en) * 2005-11-18 2007-05-24 Intel Corporation Latency hiding of traces using block coloring
WO2007143278A2 (en) 2006-04-12 2007-12-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
EP2523101B1 (en) 2006-11-14 2014-06-04 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US8037466B2 (en) 2006-12-29 2011-10-11 Intel Corporation Method and apparatus for merging critical sections
US8185698B2 (en) * 2007-04-09 2012-05-22 Bratin Saha Hardware acceleration of a write-buffering software transactional memory
US20090271578A1 (en) * 2008-04-23 2009-10-29 Barrett Wayne M Reducing Memory Fetch Latency Using Next Fetch Hint
US9690591B2 (en) * 2008-10-30 2017-06-27 Intel Corporation System and method for fusing instructions queued during a time window defined by a delay counter
KR101685247B1 (ko) 2010-09-17 2016-12-09 소프트 머신즈, 인크. 조기 원거리 분기 예측을 위한 섀도우 캐시를 포함하는 단일 사이클 다중 분기 예측
EP2628076B1 (en) * 2010-10-12 2017-08-30 Intel Corporation An instruction sequence buffer to store branches having reliably predictable instruction sequences
WO2012051262A2 (en) 2010-10-12 2012-04-19 Soft Machines, Inc. An instruction sequence buffer to enhance branch prediction efficiency
US9766893B2 (en) 2011-03-25 2017-09-19 Intel Corporation Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
WO2012135041A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
WO2012135050A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
US9442772B2 (en) 2011-05-20 2016-09-13 Soft Machines Inc. Global and local interconnect structure comprising routing matrix to support the execution of instruction sequences by a plurality of engines
TWI603198B (zh) 2011-05-20 2017-10-21 英特爾股份有限公司 以複數個引擎作資源與互連結構的分散式分配以支援指令序列的執行
KR101703401B1 (ko) 2011-11-22 2017-02-06 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
CN104040491B (zh) 2011-11-22 2018-06-12 英特尔公司 微处理器加速的代码优化器
US20130159602A1 (en) * 2011-12-20 2013-06-20 Bae Systems Controls, Inc. Unified memory architecture
US8930674B2 (en) 2012-03-07 2015-01-06 Soft Machines, Inc. Systems and methods for accessing a unified translation lookaside buffer
US9916253B2 (en) 2012-07-30 2018-03-13 Intel Corporation Method and apparatus for supporting a plurality of load accesses of a cache in a single cycle to maintain throughput
US9710399B2 (en) 2012-07-30 2017-07-18 Intel Corporation Systems and methods for flushing a cache with modified data
US9740612B2 (en) 2012-07-30 2017-08-22 Intel Corporation Systems and methods for maintaining the coherency of a store coalescing cache and a load cache
US9229873B2 (en) 2012-07-30 2016-01-05 Soft Machines, Inc. Systems and methods for supporting a plurality of load and store accesses of a cache
US9678882B2 (en) 2012-10-11 2017-06-13 Intel Corporation Systems and methods for non-blocking implementation of cache flush instructions
WO2014151043A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for emulating a guest centralized flag architecture by using a native distributed flag architecture
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
KR102063656B1 (ko) 2013-03-15 2020-01-09 소프트 머신즈, 인크. 블록들로 그룹화된 멀티스레드 명령어들을 실행하기 위한 방법
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
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
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
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
WO2014150971A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
GB2551381B (en) 2016-06-16 2019-07-24 Mips Tech Llc Method of fetching instructions in an instruction fetch unit

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04233642A (ja) * 1990-07-27 1992-08-21 Dell Usa Corp キャッシュアクセスと並列的にメモリアクセスを行なうプロセッサ及びそれに用いられる方法
US5813030A (en) * 1991-12-31 1998-09-22 Compaq Computer Corp. Cache memory system with simultaneous access of cache and main memories
US5732242A (en) * 1995-03-24 1998-03-24 Silicon Graphics, Inc. Consistently specifying way destinations through prefetching hints
US5822790A (en) * 1997-02-07 1998-10-13 Sun Microsystems, Inc. Voting data prefetch engine
US5845101A (en) * 1997-05-13 1998-12-01 Advanced Micro Devices, Inc. Prefetch buffer for storing instructions prior to placing the instructions in an instruction cache
US6237064B1 (en) 1998-02-23 2001-05-22 Intel Corporation Cache memory with reduced latency
GB2348024B (en) * 1999-03-16 2003-06-25 Ibm Cache memory systems

Also Published As

Publication number Publication date
US6718440B2 (en) 2004-04-06
CN1324459C (zh) 2007-07-04
WO2003029962A1 (en) 2003-04-10
GB0408666D0 (en) 2004-05-19
TWI250411B (en) 2006-03-01
CN1561480A (zh) 2005-01-05
GB2397918A (en) 2004-08-04
GB2397918B (en) 2005-03-30
US20030065887A1 (en) 2003-04-03

Similar Documents

Publication Publication Date Title
US6718440B2 (en) Memory access latency hiding with hint buffer
US10664275B2 (en) Speeding up younger store instruction execution after a sync instruction
EP0783735B1 (en) Method and apparatus for processing memory-type information within a microprocessor
US6151662A (en) Data transaction typing for improved caching and prefetching characteristics
US6523109B1 (en) Store queue multimatch detection
US5375216A (en) Apparatus and method for optimizing performance of a cache memory in a data processing system
US7620749B2 (en) Descriptor prefetch mechanism for high latency and out of order DMA device
US5551005A (en) Apparatus and method of handling race conditions in mesi-based multiprocessor system with private caches
EP0381470B1 (en) Processing of memory access exceptions along with prefetched instructions within the instruction pipeline of a virtual memory system-based digital computer
US7627722B2 (en) Method for denying probes during proactive synchronization within a computer system
US5870599A (en) Computer system employing streaming buffer for instruction preetching
US7213126B1 (en) Method and processor including logic for storing traces within a trace cache
US6321326B1 (en) Prefetch instruction specifying destination functional unit and read/write access mode
US6481251B1 (en) Store queue number assignment and tracking
US20070050592A1 (en) Method and apparatus for accessing misaligned data streams
US7277989B2 (en) Selectively performing fetches for store operations during speculative execution
KR20120070584A (ko) 데이터 스트림에 대한 저장 인식 프리페치
EP0726523A2 (en) Method for maintaining memory coherency in a computer system having a cache
US20140201446A1 (en) High bandwidth full-block write commands
TWI531913B (zh) 無需資料之所有權請求之預取
US6976128B1 (en) Cache flush system and method
US6704854B1 (en) Determination of execution resource allocation based on concurrently executable misaligned memory operations
US7130965B2 (en) Apparatus and method for store address for store address prefetch and line locking
US7251710B1 (en) Cache memory subsystem including a fixed latency R/W pipeline
EP0726524A2 (en) Protocol and system for performing line-fill addressing during copy-back operation

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E601 Decision to refuse application
J201 Request for trial against refusal decision
J501 Disposition of invalidation of trial