KR20200100177A - 동일한 채널에서 불균일한 레이턴시를 갖는 메모리 유형에 대한 응답 지원 - Google Patents

동일한 채널에서 불균일한 레이턴시를 갖는 메모리 유형에 대한 응답 지원 Download PDF

Info

Publication number
KR20200100177A
KR20200100177A KR1020207021742A KR20207021742A KR20200100177A KR 20200100177 A KR20200100177 A KR 20200100177A KR 1020207021742 A KR1020207021742 A KR 1020207021742A KR 20207021742 A KR20207021742 A KR 20207021742A KR 20200100177 A KR20200100177 A KR 20200100177A
Authority
KR
South Korea
Prior art keywords
memory
data
memory access
access
access command
Prior art date
Application number
KR1020207021742A
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 KR20200100177A publication Critical patent/KR20200100177A/ko

Links

Images

Classifications

    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • 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/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • 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/0893Caches characterised by their organisation or structure
    • G06F12/0897Caches characterised by their organisation or structure with two or more cache hierarchy levels
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/161Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
    • G06F13/1626Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement by reordering requests
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • G06F13/1657Access to multiple memories
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1694Configuration of memory controller to different memory types
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7807System on chip, i.e. computer system on a single chip; System in package, i.e. computer system on one or more chips in a single package
    • G06F15/7821Tightly coupled to memory, e.g. computational memory, smart memory, processor in memory
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/04Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS
    • G11C16/0408Erasable programmable read-only memories electrically programmable using variable threshold transistors, e.g. FAMOS comprising cells containing floating gate transistors
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/10Programming or data input circuits
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C16/00Erasable programmable read-only memories
    • G11C16/02Erasable programmable read-only memories electrically programmable
    • G11C16/06Auxiliary circuits, e.g. for writing into memory
    • G11C16/34Determination of programming status, e.g. threshold voltage, overprogramming or underprogramming, retention
    • G11C16/3436Arrangements for verifying correct programming or erasure
    • G11C16/3454Arrangements for verifying correct programming or for detecting overprogrammed cells
    • G11C16/3459Circuits or methods to verify correct programming of nonvolatile memory cells

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Microelectronics & Electronic Packaging (AREA)
  • Computing Systems (AREA)
  • Dram (AREA)
  • Multi Processors (AREA)
  • Memory System (AREA)

Abstract

두 개의 상이한 메모리 유형들로부터 비순차적으로 도착하는 응답 데이터를 식별하기 위한 시스템들, 장치들 및 방법들이 개시된다. 컴퓨팅 시스템은 어플리케이션들을 처리하기 위한 하나 이상의 클라이언트들을 포함한다. 메모리 채널은 메모리 컨트롤러와 제1 메모리 및 제1 메모리와 다른 제2 메모리 각각에 연결된 메모리 버스 사이에서 메모리 트래픽을 전달한다. 메모리 컨트롤러는 판독 데이터가 메모리로부터 메모리 버스 상에 도착하도록 스케줄링되는 소정 시점을 결정한다. 메모리 컨트롤러는 고유 식별자를 소정 시점과 관련시킨다. 메모리 컨트롤러는 소정 시점에 기초하여 도착한 판독 데이터와 관련된 소정 명령을 식별한다.

Description

동일한 채널에서 불균일한 레이턴시를 갖는 메모리 유형에 대한 응답 지원
다양한 컴퓨팅 장치들은 시스템 기능을 제공하기 위해 여러 유형의 IC들을 통합하는 이종(heterogeneous) 통합을 사용한다. 다중 기능들은 처리 노드에 배치되며, 상기 다중 기능들로는 오디오/비디오(A/V) 데이터 처리, 의약 및 비즈니스 분야를 위한 다른 높은 데이터 병렬 어플리케이션들, 범용 인스트럭션 세트 아키텍처(ISA)의 처리 인스트럭션들, 디지털, 아날로그, 혼합 신호 및 고주파수(RF) 기능 등을 포함한다. 여러 유형의 IC들을 통합하기 위해 시스템 패키징에 처리 노드를 배치하기 위한 다양한 선택들이 존재한다. 일부 예들로는 SOC(system-on-a-chip), MCM(multi-chip modules) 및 SiP(system-in-package)가 있다.
시스템 패키징에 대한 선택에 관계없이, 여러 용도에서, 하나 이상의 컴퓨팅 시스템들의 성능은 처리 노드에 따라 달라질 수 있다. 일 예에서, 처리 노드는 다중 소켓 서버의 소켓에 있는 여러 처리 노드들 중 하나이다. 서버는 서버 내의 컴퓨터 프로그램들뿐만 아니라 원격 컴퓨팅 장치들의 다른 컴퓨터 프로그램들에 서비스들을 제공하는 데 사용된다. 다른 예에서, 처리 노드는 여러 상이한 유형의 어플리케이션들을 실행하고 가능한 한번에 다수의 사용자들(로컬 및 원격 둘 다)에게 정보를 중계하는 모바일 컴퓨팅 장치 내에서 사용된다.
비교적 높은 수준의 성능을 유지하려면 일반적으로 저장된 데이터에 빠르게 액세스해야 한다. 여러 유형의 데이터 집약적인 어플리케이션들은 여러 로컬 및 원격 프로그램들과 그 사용자들에게 신뢰할 수 있는 고성능을 제공하기 위해 데이터 저장 장치로의 빠른 액세스에 의존한다. 메모리 계층은 프로세서 다이 상의 레지스터들 및 프로세서 다이 상에 위치되거나 프로세서 다이에 연결된 캐시들과 같은 비교적 빠른 휘발성 메모리로부터 비휘발성 및 비교적 느린 메모리로 트랜지션된다. 상이한 유형의 메모리에 대한 인터페이스들 및 액세스 메커니즘들도 변경된다. 따라서, 계층 구조에서 두 개의 상이한 유형의 메모리를 결합하기 위한 임의의 하이브리드 제안들은 실행중인 컴퓨터 프로그램들에 의한 빠른 액세스 요구를 위해 고성능을 유지하는 데 문제를 제공한다.
상기 관점에서, 두 개의 상이한 메모리 유형들로부터 비순차적으로 도착하는 응답 데이터를 식별하기 위한 효율적인 방법들 및 시스템들이 요구된다.
본원에 설명된 방법들 및 메커니즘들의 장점들은 첨부 도면들과 함께 다음의 설명을 참조함으로써 더 잘 이해될 수 있다:
도 1은 컴퓨팅 시스템의 일 실시예의 블록도이다.
도 2는 타이밍도의 일 실시예의 블록도이다.
도 3은 타이밍도의 다른 실시예의 블록도이다.
도 4는 타이밍도의 다른 실시예의 블록도이다.
도 5는 타이밍도의 다른 실시예의 블록도이다.
도 6은 컴퓨팅 시스템의 다른 실시예의 블록도이다.
도 7은 메모리 컨트롤러의 일 실시예의 블록도이다.
도 8은 두 개의 상이한 메모리 유형들로의 발행을 위해 메모리 요청들을 스케줄링하기 위한 방법의 일 실시예의 흐름도이다.
도 9는 두 개의 상이한 메모리 유형들로의 발행을 위해 메모리 요청들을 스케줄링하기 위한 방법의 다른 실시예의 흐름도이다.
도 10은 두 개의 상이한 메모리 유형들로의 발행을 위해 메모리 요청들을 스케줄링하기 위한 다른 실시예의 블록도이다.
도 11은 두 개의 상이한 메모리 유형들로의 발행을 위해 메모리 요청들을 스케줄링하기 위한 방법의 다른 실시예의 흐름도이다.
도 12는 두 개의 상이한 메모리 유형들로의 발행을 위해 메모리 요청들을 스케줄링하기 위한 방법의 다른 실시예의 흐름도이다.
도 13은 두 개의 상이한 메모리 유형들로부터 비순차적으로 도착하는 응답 데이터를 식별하기 위한 방법의 일 실시예의 흐름도이다.
도 14는 두 개의 상이한 유형들로부터 비순차적으로 도착하는 응답 데이터를 식별하기 위한 방법의 다른 실시예의 흐름도이다.
본 발명은 다양한 변형들 및 대안적인 형태들이 가능하지만, 특정 실시예들이 도면들에 예로서 도시되며 본원에 상세하게 설명된다. 도면들 및 그에 대한 상세한 설명은 본 발명을 개시된 특정 형태로 제한하려는 것이 아니라, 반대로 본 발명은 첨부된 청구 범위에 의해 정의된 바와 같은 본 발명의 범위 내에 속하는 모든 수정들, 균등물들 및 대안들을 포함하고자 한다는 것을 이해해야 한다.
다음의 설명에서, 많은 특정 세부사항들이 본원에 제시된 방법들 및 메커니즘들의 완전한 이해를 제공하기 위해 제시된다. 그러나, 본 기술분야에서 통상의 기술을 가진 자는 다양한 실시예들이 이러한 특정 세부 사항들 없이 실시될 수 있음을 인식해야 한다. 일부 예들에서, 주지의 구조들, 컴포넌트들, 신호들, 컴퓨터 프로그램 인스트럭션들 및 기술들은 본원에 설명된 접근 방식들을 모호하게 하지 않도록 상세하게 설명되지 않았다. 설명의 단순성 및 명료성을 위해, 도면들에 도시된 요소들은 반드시 비례하여 도시된 것은 아님이 이해될 것이다. 예를 들어, 요소들 중 일부의 치수들은 다른 요소들에 비해 과장될 수 있다.
두 개의 상이한 메모리 유형들로부터 비순차적으로 도착하는 응답 데이터를 식별하기 위한 다양한 시스템들, 장치들, 방법들 및 컴퓨터 판독 가능 매체들이 개시된다. 다양한 실시예들에서, 컴퓨팅 시스템은 어플리케이션들을 처리하기 위한 하나 이상의 클라이언트들을 포함한다. 클라이언트들의 예들로는 범용 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 가속 처리 유닛(APU), 입력/출력(I/O) 장치 등이 있다. 메모리 컨트롤러 내의 메모리 채널은 메모리 컨트롤러와 제1 메모리 및 제2 메모리 각각에 연결된 메모리 버스 사이에서 메모리 트래픽을 전달한다.
다양한 실시예들에서, 제1 메모리 및 제2 메모리는 상이한 데이터 저장 기술들을 이용하며 상이한 액세스 레이턴시들을 갖는다. 제1 메모리 및 제2 메모리의 액세스 레이턴시들은 적어도 임계 시간의 양만큼 이들 간에 차이가 날 수 있다. 다른 실시예들에서, 제1 메모리 및 제2 메모리 각각은 동일한 데이터 저장 기술을 사용하지만, 적어도 임계 시간의 양만큼 차이가 나는 액세스 레이턴시들을 여전히 갖는다. 예를 들어, 일 실시예에서, 제1 메모리는 제2 메모리와 동일한 데이터 저장 기술을 사용하지만, 제1 메모리는 온보드 캐시를 사용하는 반면, 제2 메모리는 그렇지 않다.
제1 메모리 및 제2 메모리 각각은 다양한 동작 랜덤 액세스 메모리(DRAM)과 같은 다양한 랜덤 액세스 메모리(RAM) 중 하나, NVDIMM-P와 같은 다양한 비휘발성(NV) 이중 인-라인 메모리 모듈(DIMM)들 중 하나, 상 변화 메모리(PCM)들, 강유전체 메모리(FeRAM)들, 자기 저항 메모리(MRAM)들, 저항성 메모리들(ReRAM 또는 RRAM) 3차원(3D) 교차점(XPoint) 메모리들 등과 같은 다른 유형의 데이터 저장 기술들 중 하나를 포함할 수 있다. 따라서, 제1 메모리의 하나 이상의 액세스 레이턴시들과 제2 메모리의 하나 이상의 액세스 레이턴시들 간의 차이는 임계값을 초과할 수 있다. 일부 실시예들에서, 판독 명령의 발행으로부터 유효 데이터로 수신된 응답까지 측정된 제1 메모리에 대한 액세스 레이턴시들은 10 나노세컨드 척도로 되어 있다. 다양한 실시예들에서, 판독 또는 상태 명령의 발행으로부터 수신된 응답까지 측정된 제2 메모리에 대한 액세스 레이턴시들은 100 나노세컨드 척도로 되어 있다. 따라서, 레이턴시들 간 차이는 100 나노세컨드를 초과하며, 이는 소정 임계 시간의 양보다 클 수 있다.
다양한 실시예들에서, 명령 프로세서 또는 다른 로직은 각 수신된 메모리 요청을 하나 이상의 명령들로 변환한다. 메모리 컨트롤러 내의 스케줄러는 제1 메모리 유형에 대한 제1 명령 및 제2 메모리 유형에 대한 제2 명령과 같은 두 개의 계류중인 메모리 액세스 명령들이 있는지를 결정한다. 스케줄러는 공유 메모리 데이터 버스에서 데이터 충돌을 일으키지 않고 제1 명령 및 제2 명령 각각이 발행될 수 있는지를 결정한다. 예를 들어, 제1 메모리 및 제2 메모리 각각의 액세스 레이턴시들 외에 선택된 명령을 발행하는 시점에 기초하여, 메모리 컨트롤러는 판독 응답 데이터가 공유 메모리 데이터 버스에 도착하도록 스케줄링되는 시점을 추적한다. 일부 실시예들에서, 시점들은 클록 사이클들로 측정된다. 제1 명령 및 제2 명령 중 하나를 선택해도 공유 메모리 데이터 버스에서 데이터 충돌을 스케줄링하지 않으면, 제1 명령 및 제2 명령 각각은 발행 후보로 남는다. 이러한 경우, 스케줄러는 중재 로직에 기초하여 제1 명령 및 제2 명령으로부터 명령을 선택한다.
다른 실시예들에서, 공유 메모리 데이터 버스 상에서 데이터 충돌을 피하기 위해, 메모리 컨트롤러 내 스케줄러는 메모리 데이터 버스 상에 있도록 스케줄링된 판독 응답 데이터를 아직 없는 다음 소정 시점을 결정한다. 그런 다음, 스케줄러는 소정 시점에 응답 데이터를 제공할 제1 메모리에 액세스하기 위한 제1 메모리 액세스 명령을 스케줄링할 시간이 있는지를 결정한다. 스케줄러는 또한 소정 시점에 응답 데이터를 제공할 제2 메모리에 액세스하기 위한 제2 메모리 액세스 명령을 스케줄링할 시간이 있는지를 결정한다.
제1 액세스 명령 및 제2 액세스 명령 중 적어도 하나가 소정 시점에 응답 데이터를 제공하기에 충분한 시간이 있는 경우, 스케줄러는 중재 로직에 기초하여 제1 메모리 액세스 명령 및 제2 메모리 액세스 명령 중 하나를 선택한다. 일 실시예에서, 중재 로직은 가중치 기준을 사용한다. 기준에는 적어도 우선 순위 레벨, 수명 등을 포함한다. 이후, 스케줄러는 선택된 액세스 명령을 메모리 채널을 통해 제1 메모리 및 제2 메모리 중 하나에 발행한다.
일부 실시예들에서, 스케줄러가 소정 명령을 발행하도록 스케줄링할 때, 스케줄러는 요청된 판독 데이터가 공유 메모리 데이터 버스에 도착하도록 스케줄링될 소정 시점을 결정한다. 일 실시예에서, 스케줄러는 소정 명령의 레이턴시를 스케줄러가 소정 명령을 발행하도록 스케줄링하는 시점에 추가한다. 일부 실시예들에서, 스케줄러는 소정 명령에 대응되는 정보를 저장하는 요청 큐에서의 엔트리의 표시로 식별자를 생성한다. 다른 실시예들에서, 스케줄러는 스레드 식별자 및 소정 명령에 대응하는 메모리 요청의 타겟 어드레스의 일부의 하나 이상의 조합에 기초하여 식별자를 생성한다. 스케줄러는 식별자와 소정 시점과의 연관(association)을 저장한다. 일 실시예에서, 표가 사용된다. 따라서, 스케줄러는 소정 명령에 삽입된 태그 또는 도착한 요청된 판독 데이터와 연관된 패킷에 기초하는 것이 아니라, 소정 시점에 기초하여 공유 메모리 데이터 버스 상에서 도착한 요청된 판독 데이터로 소정 명령을 식별할 수 있다.
도 1을 참조하면, 컴퓨팅 시스템(100)의 일 실시예의 일반화된 블록도가 도시된다. 도시된 바와 같이, 클라이언트들(110 및 112)은 메모리 요청들을 메모리 컨트롤러(120)로 전송한다. 메모리 컨트롤러(120) 내의 메모리 채널(124)은 메모리 컨트롤러(120)와 메모리 버스(130) 사이에서 메모리 트래픽을 전달한다. 메모리(140) 및 메모리(150) 각각은 클라이언트들(110 및 112)에 의해 액세스되는 데이터를 저장한다. 다양한 실시예들에서, 메모리(140) 및 메모리(150) 중 하나 이상은 클라이언트(110 및 112)에 의해 시스템 메모리로 사용된다. 다양한 실시예들에서, 메모리(140)의 액세스 레이턴시는 메모리(150)의 액세스 레이턴시와 적어도 임계 시간의 양만큼 차이가 있다. 일부 실시예들에서, 메모리(140) 및 메모리(150)는 다른 데이터 저장 기술을 사용하며, 이에 따라 메모리(140)와 메모리(150)의 액세스 레이턴시들은 적어도 임계 시간의 양만큼 차이가 있다. 다른 실시예들에서, 메모리(140) 및 메모리(150) 각각은 동일한 데이터 저장 기술을 사용하지만, 적어도 임계 시간의 양만큼 차이가 나는 액세스 레이턴시들을 여전히 갖는다. 예를 들어, 일 실시예에서, 메모리(140)는 메모리(150)와 동일한 데이터 저장 기술을 사용하지만, 메모리(140)는 온보드 캐시를 사용하는 반면, 메모리(150)는 그렇지 않다. 따라서, 액세스 레이턴시들은 메모리(140)와 메모리(150) 간에 차이가 있으며, 임계 시간의 양만큼 차이가 날 수 있다. 다른 실시예들에서, 다른 구성들 및/또는 다른 컴포넌트들은 메모리(140) 및 메모리(150) 중 하나에 의해 사용될 수 있지만 다른 것에서는 그렇지 않을 수 있으며, 이들 간에 다른 액세스 레이턴시들을 발생시킨다.
통신 패브릭, I/O 장치들에 대한 입력/출력(I/O) 인터페이스 및 네트워크 연결들에 대한 임의의 링크들 및 인터페이스들은 설명의 편의를 위해 컴퓨팅 시스템(100)에 도시되지 않는다. 일부 실시예들에서, 컴퓨팅 시스템(100)의 컴포넌트들은 시스템 온 칩(SOC)과 같은 집적 회로(IC) 상의 개별 다이들이다. 다른 실시예들에서, 컴포넌트들은 시스템 인 패키지(SiP) 또는 다중 칩 모듈(MCM)에서의 개별 다이들이다. 일부 실시예들에서, 클라이언트들(110 및 112)은 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 멀티비디어 엔진용 허브 등 중 하나 이상을 포함한다. 클라이언트들(110 및 112) 각각은 어플리케이션들을 처리하고 메모리 요청들을 생성할 수 있는 다양한 컴퓨팅 리소스들 중 하나이다.
단일 메모리 컨트롤러(120)가 도시되어 있지만, 다른 실시예들에서, 다른 개수의 메모리 컨트롤러들이 컴퓨팅 시스템(100)에 사용된다. 다양한 실시예들에서, 메모리 컨트롤러(120)는 클라이언트들(110 및 112)로부터 메모리 요청들을 수신하고, 스케줄러(122)는 메모리 요청들을 스케줄링하며 스케줄링된 메모리 요청들을 메모리 채널(124)을 통해 메모리(140 및 150) 중 하나로 전송한다. 일부 실시예들에서, 메모리 컨트롤러(120) 내의 스케줄러(122)는 메모리(150)에서의 메모리 위치들을 대상으로 하는 메모리 요청들을 스케줄링하는 것과 별도로 메모리(140)에서의 메모리 위치들을 대상으로 하는 메모리 요청들을 스케줄링하는 제어 로직을 포함한다. 이후, 스케줄러(122)는 메모리(140)를 대상으로 하는 메모리 요청들과 메모리(150)를 대상으로 하는 메모리 요청들 사이에서 선택한다. 일 실시예에서, 스케줄러(122)는 메모리(140) 및 메모리(150)를 대상으로 하는 액세스들을 혼합한다.
메모리 요청들을 스케줄링하기 위한 스케줄러(122) 내의 제어 로직은 메모리 요청들의 서비스 품질(QoS) 또는 다른 우선 순위 레벨들, 메모리 요청들의 프로세스 또는 소프트웨어 스레드 식별자들(ID들), 메모리 요청들의 수명들, 메모리 요청이 메모리(140)에 발행된 이후의 시간의 양, 메모리 요청이 메모리(150)에 발행된 이후의 시간의 양 등과 같은 정보를 사용한다. 따라서, 스케줄러(122)는 메모리 요청들의 비순차적 발행을 지원한다. 스케줄러(122)가 메모리(140)와 메모리(150) 중 하나로 전송하기 위한 메모리 요청을 선택할 경우, 스케줄러(122)는 선택된 메모리 요청을 전송을 위한 메모리 채널(124)로 전송한다.
메모리 채널(124)은 메모리(140) 및 메모리(150) 각각과 인터페이싱한다. 메모리 채널(124)은 메모리(140)와의 인터페이싱에 사용되는 프로토콜을 지원하고 메모리(150)와의 인터페이스에 사용되는 다른 프로토콜을 지원한다. 프로토콜들은 클록 사이클당 데이터 전송 횟수, 신호 전압 레벨들, 신호 타이밍들, 신호 및 클록 위상들 및 클록 주파수들과 같은 정보 전송에 사용되는 값들을 결정한다.
다양한 실시예들에서, 메모리 버스(130)는 판독 모드 및 기록 모드의 소정 모드 동안과 같이, 소정 시간의 양 동안 단일 방향으로 데이터 트래픽을 전송하는 것을 지원한 다음, 판독 모드 및 기록 모드의 다른 모드 동안과 같이 다른 소정 시간의 양 동안 반대 방향으로 데이터 트래픽을 전송한다. 일 실시예에서, 메모리 버스(130)는 단일 명령 버스 및 단일 데이터 버스를 이용한다. 따라서, 메모리(140) 및 메모리(150)에 대한 메모리 요청들의 발행을 스케줄링하는 것은 메모리 버스(130) 상에서 데이터 충돌을 피하는 방식으로 수행된다.
앞서 설명된 바와 같이, 일부 실시예들에서, 메모리(140) 및 메모리(150)는 다른 데이터 저장 기술을 사용하며, 이에 따라 다른 액세스 레이턴시들을 갖는다. 도시된 바와 같이, 메모리(140)는 메모리(150)의 액세스 레이턴시(134)와 적어도 임계 시간의 양만큼 차이가 자는 액세스 레이턴시(132)를 갖는다. 단일 액세스 레이턴시가 메모리(140) 및 메모리(150) 각각에 대해 도시되어 있지만, 다른 실시예들에서, 메모리(140)와 메모리(150) 중 하나 이상은 다수의 액세스 레이턴시들을 갖는다. 그러나, 메모리(140)에 대한 다수의 액세스 레이턴시들의 각 액세스 레이턴시는 메모리(150)의 다수의 액세스 레이턴시들의 각 액세스 레이턴시와 적어도 임계 시간의 양만큼 차이가 난다.
일 실시예에서, 메모리(140)와 메모리(150) 중 하나는 다양한 동적 랜덤 액세스 메모리(DRAM) 중 하나를 포함하는 반면 메모리(140)와 메모리(150) 중 다른 하나는 NVDIMM-P와 같은 다양한 비휘발성(NV) 이중 인-라인 메모리 모듈(DIMM) 중 하나를 포함한다. 다른 실시예들에서, 다른 액세스 레이턴시들을 갖는 다른 메모리 유형들이 메모리(140)와 메모리(150)에 사용된다. 예를 들어, 랜덤 액세스 메모리(RAM) 기술들 및 NVDIMM 기술들의 유형들을 사용하는 것 외에도, 일부 실시예들에서, 메모리(140) 및 메모리(150) 각각은 상 변화 메모리(PCM), 강유전체 메모리(FeRAM), 자기저항 메모리(MRAM), 저항성 메모리(ReRAM 또는 RRAM), 3차원(3D) 교차점(XPoint) 메모리 등과 같은 다른 예들의 데이터 저장 기술들을 포함한다. 다양한 실시예들에서, 메모리(140)의 액세스 레이턴시들과 메모리(150)의 액세스 레이턴시들 간 차이들은 임계값을 초과한다. 따라서, 스케줄러(122)는 메모리(140) 및 메모리(150)에서의 위치들을 혼합 방식으로 대상으로 하는 메모리 액세스 명령들을 발행하기 위한 제어 로직 및 순차 요소들을 포함한다.
일부 실시예들에서, 메모리 컨트롤러(120)는 각 수신된 메모리 요청을 하나 이상의 명령들로 변환하기 위한 명령 프로세서를 포함한다. 일 실시예에서, 스케줄러(122)는 메모리(140)에 대한 제1 명령 및 메모리(150)에 대한 제2 명령과 같은 두 개의 계류중인 메모리 액세스 명령들이 있는지를 결정한다. 스케줄러(122)는 공유 메모리 데이터 버스(130) 상에서 데이터 충돌을 일으키지 않고 제1 명령 및 제2 명령 각각이 발행될 수 있는지를 결정한다. 예를 들어, 선택된 명령, 액세스 레이턴시(132) 및 액세스 레이턴시(134)를 발행하기 위한 시점에 기초하여, 메모리 컨트롤러(120)는 데이터가 공유 메모리 데이터 버스(130)에 도착하도록 스케줄링되는 시점을 추적한다. 계류중인 제1 명령 및 제2 명령은 판독 액세스들 또는 기록 액세스들일 수 있다. 일부 실시예들에서, 시점들은 클록 사이클들로 측정된다. 제1 명령 및 제2 명령 중 하나를 선택해도 공유 메모리 데이터 버스(130) 상에서 데이터 충돌을 스케줄링하지 않으면, 제1 명령 및 제2 명령 각각은 발행 후보로 남는다. 이러한 경우, 스케줄러(122)는 중재 로직에 기초하여 제1 명령 및 제2 명령으로부터 명령을 선택한다. 일 실시예에서, 중재 로직은 가중치 기준을 사용한다.
다른 실시예들에서, 액세스 레이턴시(132)와 액세스 레이턴시(134) 사이의 상당한 차이에도 불구하고 메모리 버스(130) 상에서의 데이터 충돌을 피하기 위해, 스케줄러(122)는 메모리 버스(130)가 이용 가능하도록 스케줄링되는 다음 소정 시점을 결정한다. 즉, 스케줄러(122)는 메모리 버스(130) 상에서 구동되도록 스케줄링된 판독 응답 데이터 또는 기록 데이터가 아직 없는 다음 소정 시점을 결정한다. 일부 실시예들에서, 시점들은 클록 사이클들로 측정된다. 스케줄러(122)는 또한 소정 시점에 데이터를 제공하기 위해 메모리(140)에 액세스하기 위한 제1 명령 및 메모리(150)에 액세스하기 위한 제2 명령을 스케줄링할 시간이 있는지를 결정한다. 앞서 설명된 바와 같이, 명령 프로세서는 수신된 메모리 요청들을 명령들로 변환한다. 일 실시예에서, 제1 명령 및 제2 명령 중 하나 이상은 하나 이상의 선행 명령들 및/또는 하나 이상의 후속 명령들을 가지며, 이는 제1 명령 및 제2 명령이 발행될 수 있을 때 레이턴시 및 딜레이를 추가한다.
제1 액세스 명령 및 제2 액세스 명령 중 적어도 하나가 메모리 버스(130)가 이용될 수 있는 소정 시점에 데이터를 제공하기에 충분한 시간이 있는 경우, 스케줄러(122)는 제1 메모리 액세스 명령 및 제2 메모리 액세스 명령 중 하나를 선택한다. 우선 순위 레벨들, 수명들 등과 같은 앞서 설명된 기준은 스케줄러(122)에 의해 사용될 수 있다. 이후, 스케줄러(122)는 선택된 액세스 명령을 메모리 채널(124)을 통해 메모리(140)와 메모리(150) 중 하나로 전송한다.
도 2를 참조하면, 타이밍도(200)의 일 실시예의 일반화된 블록도가 도시된다. 예시된 실시예에서, 메모리 액세스 명령들이 타임라인 상에서 서로 다른 시간들에 발행되는 것으로 도시된다. 메모리 액세스 명령들은 액세스 레이턴시들이 다른 두 개의 상이한 유형의 메모리 중 하나에 발행된다. 다양한 실시예들에서, 제1 유형의 메모리(메모리 유형 1)는 제2 유형의 메모리(메모리 유형 2)와 다른 데이터 저장 기술을 사용하며, 이에 따라 메모리 유형 1은 메모리 유형 2의 액세스 레이턴시와 적어도 임계 시간의 양만큼 차이가 나는 액세스 레이턴시를 갖는다.
도시된 바와 같이, A, B 및 C로 라벨이 부착된 3개의 메모리 액세스 명령들이 마크들(t1, t2 및 t3)로 표시된 시간들에 발행된다. 이러한 메모리 액세스 명령들은 메모리 유형 1에 발행된다. 이러한 액세스 명령들에 대한 응답들이 마크들(t4, t5 및 t6)로 표시된 시간들에 도착하는 것으로 도시된다. 일부 실시예들에서, 타임라인 상의 마크들은 클록 사이클들과 동일하다. 다른 실시예들에서, 타임라인 상의 마크들은 소정 시점을 나타내는 다른 시간 측정값들과 동일하다. 응답들은 타임라인 상에서 3개의 마크들의 결정적 액세스 레이턴시를 갖는 것 외에도 메모리 액세스 명령들(A, B 및 C)을 발행하는 순서와 관련하여 순차적으로 도착하는 것으로 도시된다.
추가로, 다른 액세스 메모리 명령(D)은 마크(t7)로 표시된 시간에 발행되는 것으로 도시된다. 메모리 액세스 명령(D)은 메모리 유형 2에 발행된다. 응답은 마크(t12)로 표시된 시간에 수신되는 것으로 도시된다. 메모리 유형 2에 발행된 메모리 액세스 명령(D)의 경우 메모리 유형 1에 발행된 메모리 액세스 명령들(A, B 및 C)보다 액세스 레이턴시가 더 길다. 일부 실시예들에서, 메모리 유형 2에 대한 액세스 레이턴시는 타임라인 상의 5개의 마크들이다.
도시된 실시예에서, 메모리 유형 2는 제2 액세스 레이턴시를 갖는다. 예를 들어, 메모리 액세스 명령(E)는 타임라인 상에서 마크(t13)으로 표시된 시간에 메모리 유형 2에 발행된다. 일부 실시예들에서, 메모리 유형 2에 대한 액세스 레이턴시는 타임라인 상의 6개의 마크들이다. 도시된 바와 같이, 메모리 액세스 명령(E)에 대한 응답은 마크(t19)로 표시된 시간에 도달하는 것으로 도시된다. 일부 실시예들에서, 판독 액세스 레이턴시들은 메모리 유형 1 및 메모리 유형 2에 대한 기록 액세스 레이턴시들과 같다. 다른 실시예들에서, 판독 액세스 레이턴시들은 메모리 유형 1 및 메모리 유형 2 중 하나 이상에 대한 기록 액세스 레이턴시들과 다르다. 예시된 실시예에서, 액세스 명령들(A-E)은 상이한 액세스 레이턴시들(210 및 220)을 가지며, 명령들(A-E)은 서로 개별적으로 발행되는 것으로 도시된다. 그러나, 발행을 위한 이러한 방식은 비능률적이다.
도 3을 참조하면, 타이밍도(300)의 다른 실시예의 일반화된 블록도가 도시된다. 예시된 실시예에서, 메모리 액세스 명령들이 타임라인 상에서 서로 다른 시간들에 발행되는 것으로 도시된다. 메모리 액세스 명령들은 적어도 임계 시간의 양만큼 차이가 나는 것과 같이 상당히 다른 액세스 레이턴시들을 갖는 두 개의 상이한 유형의 메모리 중 하나에 발행된다. 도시된 바와 같이, 메모리 유형 1에 발행된 액세스 명령들에 대한 레이턴시들(310)은 메모리 유형 2에 발행된 액세스 명령들에 대한 레이턴시들(320)보다 짧다.
타이밍도(200)와 유사하게, 일부 실시예들에서, 타임라인 상의 마크들은 클록 사이클들과 동일하다. 다른 실시예들에서, 타임라인 상의 마크들은 시점들을 나타내는 다른 시간 측정값들과 동일하다. 도시된 바와 같이, A, B 및 C로 라벨이 부착된 3개의 메모리 액세스 명령들이 마크들(t1, t2 및 t3)로 표시된 시간들에 발행된다. 이러한 메모리 액세스 명령들은 메모리 유형 1에 발행된다. 이러한 메모리 액세스 명령들에 대한 응답들은 마크들(t4, t5 및 t6)로 표시된 시간들에 도착하는 것으로 도시되며, 타임라인 상에서 3개의 마크들의 결정론적 레이턴시를 갖는 것 외에 메모리 액세스 명령들(A, B 및 C)의 발행 순서와 관련하여 순서가 정해져 있다.
메모리 액세스 명령(D)은 마크(t7)로 표시된 시간에 메모리 유형 2에 발행된다. 응답이 수신되기 전에, 다른 메모리 액세스 명령(E)은 마크(t8)로 표시된 시간에 메모리 유형 1에 발행된다. 마크(t9)로 표시된 시간에, 다른 메모리 액세스 명령을 데이터 충돌 없이 메모리 유형 1에 발행하는 것은 불가능하다. 이 예에서, 메모리 유형 1에 발행된 메모리 액세스 명령들에 대한 액세스 레이턴시는 타임라인 상에서 3개의 마크들이고, 메모리 유형 2에 발행된 메모리 액세스 명령들에 대한 액세스 레이턴시는 타임라인 상의 적어도 5개의 마크들인 것으로 알려져 있다. 따라서, 메모리 액세스 명령(D)의 스케줄링으로 인해 마크(t12)로 표시된 시간에 메모리 데이터 버스가 이용 불가능하다는 것이 알려져 있다. 메모리 액세스 명령이 마크(t9)로 표시된 시간에 메모리 유형 1에 발행되는 경우, t12에서 데이터 충돌이 발생할 것이다.
시간(t13)에 메모리 유형 2에 발행된 메모리 액세스 명령(F) 및 시간들(t14 및 t15)에 메모리 유형 1에 발행된 메모리 액세스 명령들(G 및 H)과 같은 다른 액세스 명령들이 발행되는 것으로 도시된다. 이 예에서 메모리 액세스 명령(F)에 대한 액세스 레이턴시는 타임라인 상의 6개의 마크들이다. 따라서, 상태 액세스 명령(F)의 스케줄링으로 인해 마크(t19)로 표시된 시간에 메모리 데이터 버스가 이용 불가능하다는 것이 알려져 있다. 메모리 액세스 명령이 마크(t16)로 표시된 시간에 메모리 유형 1에 발행되는 경우, t19에서 데이터 충돌이 발생할 것이다. 따라서, 메모리 채널을 통해 두 가지 유형의 메모리에 메모리 액세스 명령들을 발행하는 스케줄러는 메모리 데이터 버스가 메모리 데이터 버스에서 데이터 충돌을 피하기 위해 명령들의 레이턴시들로 인해 이용 불가능할 경우를 고려한다.
도 4를 참조하면, 타이밍도(400)의 다른 실시예의 일반화된 블록도가 도시된다. 예시된 실시예에서, 메모리 액세스 명령들(420 및 430)은 클록(410)에 기초하여 서로 다른 시간들에 발행되는 것으로 도시된다. 예시된 실시예에서, 클록(410)의 클록 사이클들은 시점을 식별하기 위한 시간 측정을 제공하는 데 사용된다. 메모리 액세스 명령들은 적어도 임계 시간의 양만큼 서로 차이가 나는 액세스 레이턴시들을 갖는 두 개의 상이한 유형의 메모리 중 하나에 발행된다. 일 실시예에서, 명령들(420)은 제1 유형의 메모리(메모리 유형 1)에 발행되고 명령들(430)은 제2 유형의 메모리(메모리 유형 2)에 발행된다.
도시된 바와 같이, 액세스 명령들(420)에 대한 레이턴시들은 액세스 명령들(430)에 대한 레이턴시들보다 짧다. 레이턴시들은 설명의 편의를 위해 비례하여 도시되지 않았다. 일부 실시예들에서, 판독 명령의 발행으로부터 유효 데이터로 수신된 응답까지 측정된 메모리 유형 1에 대한 액세스 레이턴시들은 10 나노세컨드 척도로 되어 있다. 예시된 예에서, 레이턴시는 2개의 클록 사이클들로 도시된다. 다양한 실시예들에서, 판독 또는 상태 명령의 발행으로부터 수신된 응답까지 측정된 메모리 유형 2에 대한 액세스 레이턴시들은 100 나노세컨드 척도로 되어 있다. 설명의 편의를 위해, 레이턴시는 비례하여 그려지는 대신, 5개의 클록 사이클들로 도시된다.
다양한 실시예들에서, 메모리 판독 요청 또는 메모리 기록 요청과 같은 메모리 요청은 액세스 중인 메모리에 기초하여 하나 이상의 명령들로 변환된다. 예를 들어, DRAM 내의 제어 로직은 식별된 행에 액세스하기 위해 한번 그리고 폐쇄 트랜잭션 동안 행 버퍼에 저장된 수정된 콘텐트들을 식별된 행에 다시 넣기 위해 한번 DRAM 내의 데이터 및 제어 라인들의 활성화(개방) 트랜잭션들 및 프리차지와 같은 복잡한 트랜잭션들을 수행한다. 활성화/개방, 열 액세스, 판독 액세스, 기록 액세스 및 프리차지/폐쇄와 같은 상이한 DRAM 트랜잭션들 각각은 상이한 각자의 레이턴시를 갖는다. 종종, 활성화 및 프리차지 트랜잭션들은 판독 액세스 및 기록 액세스 트랜잭션들보다 상당히 더 긴 레이턴시들을 갖는다.
예시된 예에 도시된 명령들에 대한 점선들은 메모리 액세스 명령들과 함께 발행된 가능한 추가 명령들을 나타낸다. 예를 들어, DRAM에 대한 활성화/개방 명령들 및 프리차지/폐쇄 명령들이 사용될 수 있지만, 타이밍도(400)에는 도시되지 않는다. 마찬가지로, NVDIMM-P의 경우, 각각의 트랜잭션 판독(X-READ) 명령, 전송 판독(SREAD) 명령 및 추론적 상태 판독 명령은 일반적으로 대용량 선형 어드레스들에 대한 어드레스를 확장하게 하는 확장 어드레스(XADR) 명령이 뒤따른다. 이러한 추가 명령들은 구체적으로 도시되지 않았지만, 명령들(420 및 430) 중에서 가능한 배치를 위해 점선들로 표현된다. 따라서, 백-투-백(back-to-back) 액세스 명령들은 일반적으로 백-투-백 클록 사이클들로 발행되지 않는다. 메모리 채널이 있는 메모리 컨트롤러의 스케줄러는 발행을 위한 메모리 액세스 명령들을 스케줄링할 때 가능한 추가 명령들을 고려한다.
응답들은 응답들(440)로 도시되며, 이들은 공유 단일 메모리 데이터 버스에서 수신된다. 도시된 바와 같이, 메모리 유형 1에 대한 메모리 액세스 명령("READ A")이 클록 사이클(CC) 1에서 발행된다. 예에서 두 클록 사이클들의 액세스 레이턴시로, 유효 응답 데이터는 CC3에 도착한다. 예에 도시된 바와 같이, 유효 데이터는 CC3 및 CC4와 같은 두 개의 클록 사이크들을 소모한다. 각 클록 사이클 동안, 데이터 버스 폭과 동일한 데이터의 양이 메모리 컨트롤러로 반환된다. 지원된 데이터 버스 크기는 설계 선택에 기초한다.
일 실시예에서, 메모리 컨트롤러 내의 스케줄러 또는 다른 제어 유닛은 메모리 데이터 버스가 이용 가능하도록 스케줄링되는 다음 소정 시점이 CC4 이후, 즉 CC5인 것으로 결정한다. 스케줄러는 메모리 유형 1에 대한 메모리 액세스 명령 및 메모리 유형 2에 대한 메모리 액세스 명령을 스케줄링할 시간이 있다고 결정한다. 메모리 유형 1에 대한 메모리 액세스 명령에 대한 응답 데이터의 양은 메모리 유형 2에 대한 이전 메모리 액세스 명령에 도착하는 응답 데이터와 충돌하지 않을 것이다. 따라서, 스케줄러는 CC2에서 메모리 유형 2에 대한 판독 명령("READ B")을 발행하고 CC3에서 메모리 유형 1에 대한 메모리 액세스 명령("READ C")을 발행한다. 예에서 두 클록 사이클들의 액세스 레이턴시로, “READ C”에 대한 유효 응답 데이터는 CC5와 CC6에 도달한다. 이 예에서 5개의 클록 사이클들의 액세스 레이턴시로, 유효 응답 데이터는 "READ B"에 대해 CC7 및 CC8에 도달하도록 스케줄링된다. 그러나, 도시된 바와 같이, 요청된 데이터는 아직 메모리 유형 2로부터 검색될 준비가 되지 않았다. 요청된 데이터가 아직 이용 가능하지 않음을 명시하는 표시가 메모리 컨트롤러에 의해 수신되고, 스케줄러에 의해 나중에 다시 시도하는 데 사용된다.
스케줄러는 메모리 버스 상에서 구동되도록 스케줄링된 판독 응답 데이터가 아직 없는 다음 소정 시점이 CC9라고 결정한다. 스케줄러는 메모리 유형 1에 대한 메모리 액세스 명령 및 메모리 유형 2에 대한 메모리 액세스 명령을 스케줄링할 시간이 있다고 결정한다. 발행할 다음 메모리 액세스 명령을 선택하기 위해, 스케줄러는 메모리 요청들의 서비스 품질(QoS) 또는 다른 우선 순위 레벨들, 메모리 요청들의 프로세스 또는 소프트웨어 스레드 식별자들(ID들), 메모리 요청들의 수명들, 메모리 액세스 명령이 메모리 유형 1에 발행된 이후의 시간의 양, 메모리 액세스 명령이 메모리 유형 2에 발행된 이후의 시간의 양 등과 같은 정보를 사용한다. 제공된 예에서, 스케줄러는 CC4에서 메모리 유형 2에 대한 판독 액세스 명령(“READ D”)을 발행한다. 이 예에서 5개의 클록 사이클들의 액세스 레이턴시로, 유효 응답 데이터는 CC9 및 CC10에 도착하도록 스케줄링된다.
스케줄러는 메모리 데이터 버스가 이용 가능한 다음 소정 시점이 CC11이라고 결정한다. 스케줄러는 메모리 유형 1에 대한 메모리 액세스 명령 및 메모리 유형 2에 대한 메모리 액세스 명령을 스케줄링할 시간이 있다고 결정한다. 스케줄러는 우선 순위 레벨, 수명 등과 같은 이전 기준에 기초하여 발행할 다음 메모리 액세스 명령을 선택한다. 일부 실시예들에서, 스케줄러는 소정 가중치를 각각의 기준에 할당하고 가중치 합계를 수행한다. 총합이 가장 큰 메모리 액세스 명령 또는 상태 액세스 명령이 발행을 위해 선택된다.
일 실시예에서, 메모리 컨트롤러는 다른 채널 또는 링크 인터페이스에서 "READ B"에 대한 응답 데이터가 이제 메모리 유형 2에서 이용 가능하지 않다는 표시를 수신한다. 메모리 액세스 명령("READ E")은 이전 판독 명령("READ B")에 대응되는 전송 판독 명령("SREAD B")보다 높은 가중치 합계를 갖지만, 스케줄러는 메모리 액세스 명령("READ E")에 대한 응답 데이터의 양이 이전 판독 명령("READ D ")에 도달하는 응답 데이터와 충돌할 것이라고 결정한다. 따라서, 스케줄러는 CC8에서 전송 판독 명령("SREAD B")을 발행하고 CC9에서 메모리 액세스 명령("READ E")을 발행한다. 예에서 두 클록 사이클들의 액세스 레이턴시로, “READ E”에 대한 유효 응답 데이터는 CC11과 CC12에 도달한다. 이 예에서 "SREAD B"에 대한 5개의 클록 사이클들의 액세스 레이턴시로, 유효 응답 데이터는 CC13 및 CC14(도시되지 않음)에 도달하도록 스케줄링된다. 타이밍도(400)가 판독 액세스 명령들과 관련하여 설명되었지만, 다른 실시예들에서, 유사한 타이밍도는 기록 데이터가 공유 메모리 데이터 버스 상에 배치되고 판독 응답 데이터 또는 다른 기록 액세스 명령들 중 다른 기록 데이터와 데이터 충돌이 일어날 수 있는 기록 액세스 명령들에 사용된다.
일부 실시예들에서, 수신된 응답 데이터는 어떤 명령이 응답 데이터와 연관되는지를 식별하는 태그 또는 다른 식별자를 포함한다. 다른 실시예들에서, 요청 데이터의 도착 타이밍은 어느 명령이 응답 데이터와 연관되는지를 식별하는 데 사용된다. 따라서, 요청 데이터가 명령들의 발행에 대응하여 비순차적으로 도착하더라도, 메모리 컨트롤러 내의 스케줄러는 어느 수신된 데이터가 어느 명령에 속하는지를 추적할 수 있다.
도 5를 참조하면, 타이밍도(500)의 다른 실시예의 일반화된 블록도가 도시된다. 예시된 실시예에서, 메모리 액세스 명령들(520 및 530)은 클록(510)에 기초하여 서로 다른 시간들에 발행되는 것으로 도시된다. 예시된 실시예에서, 클록(510)의 클록 사이클들은 시점을 식별하기 위한 시간 측정을 제공하는 데 사용된다. 메모리 액세스 명령들은 액세스 레이턴시들이 다른 두 개의 상이한 유형의 메모리 중 하나에 발행된다. 일 실시예에서, 명령들(520)은 종래 DRAM인 제1 유형의 메모리에 발행되고, 명령들(530)은 NVDIMM-P인 제2 유형의 메모리에 발행된다. 그러나, 액세스 레이턴시들이 다른 상이한 유형의 메모리가 가능하고 고려된다.
명령 레이턴시들은 설명의 편의를 위해 비례하여 그려지지 않았다. 일부 실시예들에서, 종래 DRAM에 대한 명령 레이턴시들은 10 나노세컨드 척도로 되어 있다. 예시된 예에서, 레이턴시는 2개의 클록 사이클들로 도시된다. 다양한 실시예들에서, NVDIMM-P에 대한 액세스 레이턴시들은 100 나노세컨드 척도로 되어 있다. 예시된 예에서, 레이턴시는 7개의 클록 사이클들로 도시된다. 다양한 실시예들에서, 메모리 판독 요청과 같은 메모리 요청은 액세스 중인 메모리에 기초하여 하나 이상의 명령들로 변환된다. 앞서 설명된 바와 같이, DRAM 내의 제어 로직은 복잡한 트랜잭션들을 활성화 및 폐쇄 트랜잭션들로서 수행한다. 추가로, 행 어드레스를 위한 스트로브들(strobes) 및 열 어드레스를 위한 스트로브들과 같은 다른 신호들이 생성된다.
이전의 타이밍도(500)과 유사하게, 타이밍도(500)는 판독 액세스 명령들에 관해 설명된다. 그러나, 다른 실시예들에서, 유사한 타이밍도는 기록 데이터가 공유 메모리 데이터 버스 상에 배치되고 판독 응답 데이터 또는 다른 기록 액세스 명령들 중 다른 기록 데이터와 데이터 충돌이 일어날 수 있는 기록 액세스 명령들에 사용된다. 응답들은 응답들(540)로 도시되며, 이들은 공유 단일 메모리 데이터 버스에서 수신된다. 스케줄러는 우선 순위 레벨, 수명 등과 같은 이전 기준에 기초하여 발행할 다음 메모리 액세스 명령을 선택한다. 일부 실시예들에서, 스케줄러는 소정 가중치를 각각의 기준에 할당하고 발행할 다음 명령을 선택할 때 사용할 가중치 합계를 수행한다.
도시된 바와 같이, 스케줄러는 CC2에서 메모리 유형 2에 대한 트랜잭션 판독 명령(“X-READ A”)을 발행한다. 대용량 선형 어드레스들에 대한 어드레스를 확장하도록 하는 확장 어드레스 명령(“XADR A”)은 CC3에서 즉시 뒤따른다. 이 예에서 7개의 클록 사이클들의 액세스 레이턴시로, 유효 응답 데이터는 CC9에 도착하도록 스케줄링된다. 일부 실시예들에서, 레이턴시는 명령("X-READ A")이 아닌 명령("XADR A")으로부터 측정된다. 다양한 실시예들에서, 요청된 데이터는 다수의 클록 사이클들을 소모한다. 그러나, 설명의 편의를 위해, 명령(“X-READ A”)에 대한 요청된 데이터는 단일 클록 사이클을 소모한다.
스케줄러는 CC3에서 메모리 유형 1에 대한 메모리 액세스 명령(“READ B”)을 발행한다. 예에서 두 클록 사이클들의 액세스 레이턴시로, 유효 응답 데이터는 CC5에 도착한다. 도시된 바와 같이, 활성화 명령("ACTIVATE")은 CC 3에서 명령("READ B")을 발행하도록 준비하기 위해 CC1에서 발행된다. 열 어드레스 스트로브(CAS)는 CC 3에서 로직 로우 값(logic low value)으로 어써트(asserted)된다. 행 어드레스 및 열 어드레스는 대응되는 스트로브들의 어써션(assertion)들과 정렬된 포인터들(570)로 표시된 어드레스 라인들 상에 제공된다. 도시된 바와 같이, 명령(“READ B”)에 대한 요청된 데이터는 CC5, CC6, CC7 및 CC8과 같은 4개의 클록 사이클들을 소모한다. 스케줄러는 메모리 데이터 버스가 이용 가능한 다음 소정 시점을 결정할 때 수신된 요청된 데이터에 의해 소모되는 클록 사이클 수를 고려한다.
일 실시예에서, 스케줄러는 메모리 데이터 버스가 이용 가능한 다음 소정 시점이 CC10이라고 결정한다. 스케줄러는 메모리 유형 1에 대한 메모리 액세스 명령을 스케줄링할 시간은 있지만, 메모리 유형 2에 대한 메모리 액세스 명령을 스케줄링할 시간은 없다고 결정한다. 도시된 바와 같이, 메모리 유형 2에 대한 다음 메모리 액세스 명령을 발행하는 가장 빠른 시점은 명령(“XADR A”) 이후, 즉 CC4이다. 7개의 클럭 사이클들의 명령 레이턴시로, 요청된 데이터는 CC10이 아닌 CC11에 도착하도록 스케줄링된다. 따라서, 스케줄러는 CC8에서 메모리 유형 1에 대한 메모리 액세스 명령(“READ C”)을 발행한다. 예에서 두 클록 사이클들의 액세스 레이턴시로, 유효 응답 데이터는 CC10에서 도착한다.
도시된 바와 같이, 프리차지 명령("PRECHARGE") 및 활성화 명령("ACTIVATE")은 CC 8에서 명령("READ C")을 발행하도록 준비하기 위해 각각 CC4 및 CC6에서 발행된다. 폐쇄될 뱅크는 포인터들(570)로 표시된 어드레스 라인들 상의 "BANK" 데이터에 명시되어 있다. 일부 실시예들에서, 수신된 응답 데이터는 어떤 명령이 응답 데이터와 연관되는지를 식별하는 태그 또는 다른 식별자를 포함한다. 다른 실시예들에서, 요청 데이터의 도착 타이밍은 어느 명령이 응답 데이터와 연관되는지를 식별하는 데 사용된다. 따라서, 요청 데이터가 명령들의 발행에 대응하여 비순차적으로 도착하더라도, 메모리 컨트롤러 내의 스케줄러는 어느 수신된 데이터가 어느 명령에 속하는지를 추적할 수 있다.
도 6을 참조하면, 컴퓨팅 시스템(600)의 다른 실시예의 일반화된 블록도가 도시된다. 도시된 바와 같이, 컴퓨팅 시스템(600)은 각각의 클라이언트들(610)과 메모리 컨트롤러(630) 사이의 통신 패브릭(620)을 포함한다. 메모리 컨트롤러(630)는 메모리 버스(650)를 통해 메모리 컨트롤러(620)와 메모리(670) 및 메모리(680) 사이에서 메모리 트래픽을 전송하기 위한 메모리 채널(638)을 포함한다. 메모리(670) 및 메모리(680) 각각은 클라이언트들(610)에 의해 액세스되는 데이터를 저장한다. 일부 실시예들에서, 시스템(600)의 컴포넌트들은 시스템 온 칩(SOC)과 같은 집적 회로(IC) 상의 개별 다이들이다. 다른 실시예들에서, 컴포넌트들은 시스템 인 패키지(SiP) 또는 다중 칩 모듈(MCM)에서의 개별 다이들이다. 전원 컨트롤러, 인터럽트 컨트롤러, 네트워크 링크 인터페이스 등은 설명의 편의를 위해 도시되지 않는다.
다양한 실시예들에서, 메모리 버스(650)는 양방향 공유 버스 구조를 이용한다. 다양한 실시예들에서, 메모리(670)와 메모리(680)는 상이한 데이터 저장 기술을 사용하며, 이에 따라 메모리(670)는 메모리(680)의 액세스 레이턴시와 적어도 임계 시간의 양만큼 차이 나는 액세스 레이턴시를 갖는다. 다양한 실시예들에서, 메모리(670) 및 메모리(680) 중 하나 이상은 클라이언트들(610)에 의해 시스템 메모리로 사용된다.
일 실시예에서, 메모리(670) 및 메모리(680) 중 하나가 다양한 유형의 DRAM 중 하나인 경우, 메모리 채널(638)과 메모리 컨트롤러(630) 사이의 각각의 인터페이스에 대한 프로토콜의 일례는 이중 데이터 레이트(DDR) 유형의 프로토콜이다. 프로토콜은 클록 사이클당 데이터 전송 횟수, 신호 전압 레벨들, 신호 타이밍들, 신호 및 클록 위상들 및 클록 주파수들과 같은 정보 전송에 사용되는 값들을 결정한다. 프로토콜 예들은 DDR2 SDRAM, DDR3 SDRAM, GDDR4(Graphics Double Data Rate, version 4), SDRAM, GDDR5, SDRAM, GDDR6, HBM2 등을 포함한다. 메모리 컨트롤러(630)는 메모리 채널(638) 및 다른 메모리 채널들(도시되지 않음)과 인터페이싱하고 대응되는 프로토콜을 따르기 위한 제어 회로부를 포함한다.
단일 메모리 컨트롤러(630)가 도시되어 있지만, 다른 실시예들에서, 다른 개수의 메모리 컨트롤러들이 컴퓨팅 시스템(600)에 사용된다. 도시된 바와 같이, 메모리 컨트롤러(630)는 통신 패브릭(620)을 통해 클라이언트들(610)로부터 수신된 메모리 액세스 요청들을 큐잉(queuing)하기 위한 요청 큐들(632)을 포함한다. 메모리 컨트롤러(630)는 또한 메모리(670) 및 메모리(680)로부터 수신된 응답들을 저장하기 위한 응답 큐들(634)을 갖는다. 일 실시예에서, 요청 큐들(632)은 메모리 판독 요청들을 저장하기 위한 메모리(670) 및 메모리(680) 각각에 대한 개별 판독 큐를 포함한다. 추가로, 요청 큐들(632)은 기록 요청들을 저장하기 위한 메모리(670) 및 메모리 메모리(680) 각각에 대한 개별 기록 큐를 포함한다. 일부 실시예들에서, 메모리 컨트롤러(630)는 또한 메모리(670) 및 메모리(680) 중 하나 이상이 액세스에 대한 응답으로서 미스 상태를 제공하는 데이터 저장 기술을 포함하는 경우 미스 큐들(639)을 포함한다. 일 실시예에서, 메모리(670) 및 메모리(680) 중 하나는 NVDIMM-P이며, 이는 미스 상태 응답을 제공한다.
일부 실시예들에서, 요청 큐들(632)은 수신된 메모리 액세스 요청들을 저장하기 위한 하나 이상의 큐들 및 수신된 요청들로부터 변환되고 하나 이상의 큐들로부터 선택된 스케쥴링된 메모리 액세스 요청들을 저장하기 위한 별도의 큐를 포함한다. 스케줄러들(636)은 메모리(670) 및 메모리(680)로의 비순차적으로 발행하도록 요청 큐들(632)에 저장된 메모리 액세스 명령들을 선택하기 위한 제어 로직을 포함한다. 따라서, 메모리 컨트롤러(630)는 메모리(670) 및 메모리(680)로 메모리 액세스 요청들의 비순차적 발행을 지원한다.
다양한 실시예들에서, 메모리 컨트롤러(130) 내의 스케줄러들(636)은 서비스 품질(QoS) 또는 다른 우선 순위 정보, 수명, 프로세서 또는 스레드 식별자(ID), 메모리 액세스 명령이 메모리(670)에 발행된 이후의 시간의 양, 메모리 액세스 명령이 메모리(680)에 발행된 이후의 시간의 양, 및 동일한 메모리 채널을 대상으로 하고, 동일한 랭크를 대상으로 하고, 동일한 뱅크를 대상으로 하고/하거나 동일한 페이지를 대상으로 하는 것과 같은 다른 저장된 요청들과의 관계에 기초하여 저장된 메모리 액세스 명령들의 발행을 스케줄링한다. 일부 실시예들에서, 스케줄러들(636)은 소정 가중치를 각각의 기분에 할당하고 가중치 합계를 수행한다. 총합이 가장 큰 메모리 액세스 명령 또는 상태 액세스 명령이 발행을 위해 선택된다.
다양한 실시예들에서, 통신 패브릭(620)은 클라이언트들(610)과 메모리 컨트롤러(630) 사이에서 앞뒤로 트래픽을 전달하며, 각자의 통신 프로토콜들을 지원하기 위한 인터페이스들을 포함한다. 일부 실시예들에서, 통신 패브릭(620)은 적어도 요청들 및 응답들을 저장하기 위한 큐들, 내부 네트워크에 걸쳐 요청들을 전송하기 전에 수신된 요청들 사이를 중재하기 위한 선택 로직, 패킷들을 구축 및 디코딩하기 위한 로직 및 패킷들에 대한 루트들을 선택하기 위한 로직을 포함한다.
예시된 실시예에서, 클라이언트들(610)은 중앙 처리 유닛(CPU)(612), 그래픽 처리 유닛(GPU)(614) 및 허브(616)를 포함한다. 허브(616)는 멀티미디어 엔진(618)과의 통신에 사용된다. CPU(612), GPU(614) 및 멀티미디어 엔진(618)은 어플리케이션들을 처리할 수 있는 컴퓨팅 리소스들의 예들이다. 도시되지는 않았지만, 다른 실시예들에서, 다른 유형의 컴퓨팅 리소스들이 클라이언트들(610)에 포함된다. 일부 실시예들에서, CPU(612)의 하나 이상의 프로세서 코어들 각각은 소정의 선택된 인스트럭션 세트 아키텍처(ISA)에 따라 인스트럭션들을 실행하기 위한 회로부를 포함한다. 다양한 실시예들에서, CPU(612)의 프로세서 코어들 각각은 소정의 ISA의 인스트럭션들을 처리하기 위해 사용된 수퍼스칼라 멀티스레드 마이크로아키텍처를 포함한다.
일 실시예에서, GPU(614)는 다수의 병렬 실행 레인(lane)들을 갖는 고(high) 병렬 데이터 마이크로아키텍처를 포함한다. 일 실시예에서, 마이크로아키텍처는 병렬 실행 레인들을 위해 단일 인스트럭션 다중 데이터(SIMD) 파이프라인을 사용한다. 멀티미디어 엔진(618)은 멀티미디어 어플리케이션들을 위한 오디오 데이터 및 비주얼 데이터를 처리하기 위한 프로세서들을 포함한다. 일부 실시예들에서, 컴퓨팅 시스템(600)의 어드레스 공간은 적어도 CPU(612), GPU(614) 및 허브(616)와, 입력/출력(I/O) 주변 장치들(도시되지 않음) 및 다른 유형의 컴퓨팅 리소스들과 같은 하나 이상의 다른 컴포넌트들로 분할된다. 메모리 맵(map)들은 어드레스들이 어느 컴포넌트에 맵핑되고, 이에 따라 특정 어드레스에 대한 메모리 요청이 CPU(612), GPU(614) 및 허브(616) 중 어느 하나에 라우팅되어야 하는지를 결정하기 위해 유지된다.
다양한 실시예들에서, 메모리(670) 및 메모리(680) 중 하나 이상은 I/O 컨트롤러 및 버스(660) 및 메모리 버스(650)을 통해 디스크 메모리(662)로부터의 데이터로 채워진다. 요청된 블록을 갖는 대응되는 캐시 충진 라인은 원래의 메모리 액세스 요청을 완료하기 위해 메모리(670) 및 메모리(680) 중 하나 이상으로부터 클라이언트들(610)의 캐시 메모리 서브시스템들 중 대응되는 서브시스템으로 전달된다. 캐시 충진 라인은 하나 이상의 캐시 레벨들에 배치된다. 일 실시예에서, 디스크 메모리(662)는 비휘발성의 제2 데이터 저장 장치를 제공한다. 일 실시예에서, 디스크 메모리(662)는 하나 이상의 하드 디스크 드라이브들(HDD들)을 포함한다. 다른 실시예들에서, 디스크 메모리(662)는 솔리드 스테이트 디스크들(SSD들)을 포함한다.
도 7을 참조하면, 메모리 컨트롤러(700)의 일 실시예의 일반화된 블록도가 도시된다. 예시된 실시예에서, 메모리 컨트롤러(700)는 통신 패브릭을 통한 클라이언트들에 대한 인터페이스(710), 수신된 메모리 액세스 요청들 및 수신된 응답들을 저장하기위한 큐들(720), 제어 유닛(750) 및 메모리 데이터 버스 및 메모리 채널을 통해, 각각 다른 메모리 기술들을 사용하는 다수의 메모리 장치들에 대한 인터페이스(780)를 포함한다. 인터페이스들(710, 780 및 782) 각각은 각각의 통신 프로토콜들을 지원한다. 일 실시예에서, 인터페이스(780)는 인터페이스(710)를 통해 수신된 메모리 요청들에 대응되는 메모리 액세스 명령들을 메모리 장치로 전송하기 위한 메모리 명령 버스에 대한 인터페이스이며, 이는 제1 메모리 유형의 데이터 저장 기술을 포함한다. 일 실시예에서, 인터페이스(782)는 메모리 컨트롤러(700)와 다른 메모리 장치 간에 데이터를 전달하기 위한 메모리 데이터 버스에 대한 인터페이스이며, 이는 제1 메모리 유형과 다른 제2 메모리 유형의 데이터 저장 기술을 포함한다. 다양한 실시예들에서, 제1 메모리 유형의 액세스 레이턴시는 적어도 임계 시간의 양만큼 제2 메모리 유형의 액세스 레이턴시와 차이가 난다.
예시된 실시예에서, 큐들(720)은 요청 큐들(730), 응답 큐들(740) 및 미스 큐들(742)을 포함한다. 일 실시예에서, 큐들(720)은 제1 메모리 유형을 대상으로 하는 수신된 판독 요청들을 저장하기 위한 제1 판독 큐(732) 및 제2 메모리 유형을 대상으로 하는 수신된 판독 요청들을 저장하기 위한 제2 판독 큐(734)를 포함한다. 2개의 판독 큐들이 2개의 상이한 메모리 유형들을 대상으로 하는 판독 요청들을 수신하기 위해 도시되어 있지만, 다른 실시예들에서, 다른 개수의 판독 큐들이 다른 개수의 상이한 메모리 유형들을 대상으로 하는 판독 요청들을 수신하기 위해 사용된다. 추가로, 큐들(720)은 제1 메모리 유형을 대상으로 하는 수신된 기록 요청들을 저장하기 위한 제1 기록 큐(736) 및 제2 메모리 유형을 대상으로 하는 수신된 기록 요청들을 저장하기 위한 제2 기록 큐(738)를 포함한다. 일부 실시예들에서, 큐들(720)은 또한 제1 메모리 유형 및 제2 메모리 유형 중 하나 이상이 액세스에 대한 응답으로서 미스 상태를 제공하는 데이터 저장 기술을 포함하는 경우 미스 큐들(742)을 포함한다. 일 실시예에서, 제 메모리 유형 및 제2 메모리 유형 중 하나는 NVDIMM-P이며, 이는 미스 상태 응답을 제공한다. 일 실시예에서, 큐들(720)은 큐들(732-738) 중 하나 이상으로부터 선택된 스케줄링된 메모리 액세스 요청들 또는 큐가 사용되는 경우 통합 큐를 저장하기 위한 큐(739)를 포함한다.
일부 실시예들에서, 판독 스케줄러들(752)은 제1 판독 큐(732)로부터 비순차적으로 판독 요청들을 선택할 뿐만 아니라 제2 판독 큐(734)로부터 비순차적으로 판독 요청들을 선택하기 위한 중재 로직을 포함한다. 일 실시예에서, 판독 스케줄러들(752)은 각각의 요청이 제1 판독 큐(732) 또는 제2 판독 큐(734)로부터 소정 클록 사이클로 스케줄링하기 위해 이용 가능할 때 제1 판독 큐(732) 또는 제2 판독 큐(734)로부터의 요청을 선택한다. 일부 실시예들에서, 판독 스케줄러들(752)은 서비스 품질(QoS) 또는 다른 우선 순위 정보, 수명, 프로세스 또는 스레드 식별자(ID) 및 동일한 메모리 채널을 대상으로 하고, 동일한 랭크를 대상으로 하고, 동일한 뱅크를 대상으로 하고/하거나 동일한 페이지를 대상으로 하는 것과 같은 다른 저장된 요청들과의 관계에 기초하여 제1 메모리 유형 및 제2 메모리 유형 중 하나로의 비순차적 발행을 위한 판독 요청들을 스케줄링한다.
제1 메모리 유형 및 제2 메모리 유형에 대한 다수의 결정론적 액세스 레이턴시들에도 불구하고 메모리 데이터 버스 상에서의 데이터 충돌을 피하기 위해, 일 실시예에서, 판독 스케줄러들(752)은 메모리 데이터 버스가 이용 가능한 다음 소정 시점을 결정한다. 일부 실시예들에서, 시점들은 클록 사이클들로 측정된다. 판독 스케줄러 (752)는 소정 시점에서 응답 데이터를 제공하기 위해 제1 판독 큐(732)에 저장된 선택된 판독 요청에 대응되는 제1 메모리 액세스 명령을 스케줄링하기에 충분한 시간이 있는지를 결정한다. 추가로, 판독 스케줄러들(752)은 또한 소정 시점에 응답 데이터를 제공하기 위해 제2 판독 큐(734)에 저장된 선택된 판독 요청에 대응되는 제2 메모리 액세스 명령을 스케줄링하기에 충분한 시간이 있는지를 결정한다. 즉, 판독 스케줄러들(752)은 새로운 메모리 액세스 명령에 대한 응답이 소정 시점에 메모리 데이터 버스 상에서 수신되도록 제1 판독 큐(732) 또는 제2 판독 큐(734)에 의해 수신된 새로운 메모리 액세스 명령이 제1 메모리 장치 또는 제2 메모리 장치에 발행되도록 스케줄링될 수 있는지를 결정한다. 다양한 실시예들에서, 소정 시점은 메모리 데이터 버스가 메모리 데이터 버스 상에서 데이터를 구동시키도록 스케줄링되지 않고 아직 스케줄링을 위해 고려되지 않은 다음 이용 가능한 시점이다.
일부 실시예들에서, 제1 메모리 유형 및 제2 메모리 유형 중 하나 이상에 대한 액세스 레이턴시들은 비결정적(non-deterministic)이지만, 응답들은 결정론적 레이턴시들을 갖는다. 응답들은 유효 데이터가 응답에 포함되는지를 명시하는 표시와 함께 결정론적 레이턴시 이후 반환된다. 유효 데이터가 응답에 포함되지 않은 경우, 재시도는 나중에 시도된다. 따라서, 메모리 액세스 명령은 추후 재시도를 위해 미스 큐들(742)에 저장된다. 앞서 설명된 바와 같이, 다른 명령들은 때때로 메모리 액세스 명령들과 함께 추가로 사용된다. 이러한 다른 명령들은 또한 메모리 액세스 명령의 레이턴시에 레이턴시를 추가한다.
제1 액세스 명령 및 제2 액세스 명령 중 적어도 하나가 소정 시점에 메모리 데이터 버스 상의 응답 데이터를 제공하기에 충분한 시간이 있는 경우, 판독 스케줄러들(752)은 제1 메모리 액세스 명령 및 제2 메모리 액세스 명령 중 하나를 선택한다. 우선 순위 레벨들, 수명들 등과 같은 앞서 설명된 기준은 스케줄러(752)에 의해 사용될 수 있다. 추가로, 가중치 값들이 사용될 수 있다. 일 실시예에서, 판독 스케줄러들(752)은 선택된 액세스 명령을 메모리 채널을 통해 대응하는 메모리 유형으로 전송하기 전에 선택된 액세스 명령을 큐(739)에 배치한다. 제1 판독 큐(732) 또는 제2 판독 큐(734) 중 어느 하나에 저장된 새로운 계류중인 메모리 액세스 명령이 소정 시점에 발행되도록 스케줄링될 수 있는지를 결정하기 위해, 일 실시예에서, 판독 스케줄러들(752)은 새로운 메모리 액세스 명령에 대한 응답 레이턴시가 N개의 클록 사이클들이라고 결정하며, 여기서 N은 정수이다. 판독 스케줄러들(752)은 소정 시점 이전의 N개의 클록 사이클들에 대응하는 이전 시점을 식별하고, 메모리 명령 버스가 이전 시점에서 이용 가능한지 여부를 결정한다.
판독 스케줄러들(752)이 상기 새로운 메모리 액세스 명령이 스케줄링되기에 충분한 시간이 있다고 결정하는 경우, 판독 스케줄러들(752)은 이전 시점에서 발행을 위해 새로운 메모리 액세스 명령을 스케줄링하고 메모리 데이터 버스가 소정 시점에 이용 불가능하다는 표시를 저장한다. 일부 실시예들에서, 비트의 벡터는 메모리 데이터 버스가 이용 가능한 시점 및 메모리 데이터 버스가 이용 불가능한 시점을 나타내는 레지스터들에 저장된다. 예를 들어, 다양한 실시예들에서, 비트 벡터의 각 비트는 특정 시간 슬롯에 해당한다. 스케줄러가 소정 시간 슬롯(들) 동안 데이터(예: 메모리로 전송될 기록 데이터 또는 메모리로부터 검색되는 판독 데이터)가 전달되어야 한다고 결정하는 경우, 스케줄러는 데이터 버스가 해당 시간에 사용중인 것으로 스케줄링됨을 표시하도록 벡터에서 대응되는 타임 슬롯 비트(들)을 설정한다. 예를 들어, 일부 실시예들에서, 값이 "0"인 비트는 해당 시간에 데이터 버스 상에 데이터가 스케줄링되지 않았음(즉, 데이터 버스가 사용중이 아님)을 나타낸다. 이러한 실시예에서, 타임 슬롯의 비트를 설정하면 비트 값이 "1"이 된다. 다른 실시예들에서, 이러한 값들은 "0"이 데이터 버스 상에서 사용중인 기간을 나타내고 "1"이 사용중이 아닌 기간을 나타내도록 반전될 수 있다. 이러한 실시예에서, 비트를 설정하면 비트 값이 "1"이 된다. 비트 벡터를 참조함으로써, 스케줄러는 새로운 활동을 스케줄링하기 위해 소정 시간 슬롯이 이용 가능한지 아닌지를 신속하게 결정할 수 있다. 일 실시예에서, 레지스터는 어느 시점이 아직 스케줄링에 고려되지 않았고 어느 시점이 스케줄링에 고려되었는지를 명시하는 표시를 저장하는데 사용된다. 다양한 실시예들에서, 이러한 저장된 표시들은 향후 발행될 명령들의 스케줄링을 위해 다른 소정 시점을 결정하는 데 사용될 수 있다.
일부 실시예들에서, 제1 메모리 유형 및 제2 메모리 유형에 대한 다수의 결정론적 액세스 레이턴시들에도 불구하고 메모리 데이터 버스 상에서의 데이터 충돌을 피하기 위해, 판독 스케줄러들(752)은 초기에 메모리 데이터 버스가 이용 가능한 다음 소정 시점을 결정하는 것과 대조적으로 메모리 명령 버스가 이용 가능한 다음 시점을 결정한다. 다시, 일부 실시예들에서, 시점들은 클록 사이클들로 측정된다. 일부 실시예들에서, 판독 스케줄러들(752)은 메모리 명령 버스가 이용 가능한 다음 시점에 각각의 레이턴시들을 추가함으로써 제1 판독 큐(732) 및 제2 판독 큐(734)에 저장된 각각 상이한 유형의 계류중인 메모리 액세스 명령에 대한 각각의 소정 시점을 결정한다.
제1 판독 큐(732) 또는 제2 판독 큐(734) 중 어느 하나에 저장된 새로운 계류중인 메모리 액세스 명령이 메모리 명령 버스가 이용 가능한 다음 소정 시점에 발행되도록 스케줄링될 수 있는지를 결정하기 위해, 일 실시예에서, 판독 스케줄러들(752)은 새로운 메모리 액세스 명령에 대한 응답 레이턴시가 N개의 클록 사이클들이라고 결정하며, 여기서 N은 정수이다. 판독 스케줄러들(752)은 메모리 명령 버스가 이용 가능한 시점 이후의 N개의 클록 사이클들에 대응하는 나중의 소정 시점을 식별한다. 이후, 판독 스케줄러들(752)은 메모리 데이터 버스가 나중의 소정 시점에 이용 가능한지를 결정한다.
일부 실시예들에서, 판독 스케줄러들(752)은 메모리 데이터 버스가 제1 판독 큐(732) 및 제2 판독 큐(734)에 저장된 하나 이상의 계류중인 메모리 액세스 명령들 각각에 대해 하나 이상의 소정 시점들 각각에 대해 이용 가능한지 여부를 결정하기 위해 앞서 설명된 바와 같이 저장된 비트의 벡터를 사용한다. 메모리 데이터 버스가 단일의 계류중인 메모리 액세스 명령에 대해서만 각각의 소정 시점 동안 이용 가능한 경우, 판독 스케줄러들(752)은 메모리 명령 버스가 이용 가능한 다음 시점에 해당 단일의 계류중인 메모리 액세스 명령을 스케줄링한다. 메모리 데이터 버스가 다수의 계류중인 메모리 액세스 명령들에 대해 각각의 소정 시점들 동안 이용 가능한 경우, 판독 스케줄러들(752)은 우선 순위 레벨들, 수명들 등과 같은 앞서 설명된 기준에 기초하여 발행할 계류중인 메모리 액세스 명령들 중 하나를 선택한다. 판독 스케줄러들(752)은 메모리 명령 버스가 이용 가능한 다음 시점에 선택된 계류중인 메모리 액세스 명령을 스케줄링한다.
기록 스케줄러들(754)은 판독 스케줄러들(752)에 의해 사용되는 제1 기록 큐(736) 및 제2 기록 큐(738)에 대한 유사한 선택 로직을 포함한다. 다양한 실시예들에서, 기록 스케줄러들(754)은 또한 공유 메모리 데이터 버스 상에서 구동되는 데이터에 의해 야기된 데이터 충돌을 고려한다. 판독 스케줄러들(752)에 의해 사용되는 결정 알고리즘을 구현하는 제어 로직은 또한 기록 스케줄러들(754)에 의해 사용된다. 일 실시예에서, 응답 스케줄러(756)는 우선 순위들에 기초하여 클라이언트들에 비순차적으로 응답들을 발행하기 위한 유사한 로직을 포함한다. 일부 실시예들에서, 수신된 응답 데이터는 응답 스케줄러(756)가 제1 판독 큐(732) 또는 제2 판독 큐(734)에 저장된 명령이 응답 데이터와 연관되는지를 식별하는 데 사용하는 태그 또는 다른 식별자를 포함한다. 다른 실시예들에서, 메모리 데이터 버스 상의 요청 데이터의 도착 타이밍은 응답 데이터와 연관된 명령을 식별하기 위해 응답 스케줄러(756)에 의해 사용된다. 따라서, 요청 데이터가 명령들의 발행에 대응하여 비순차적으로 도착하더라도, 응답 스케줄러(756)는 어느 수신된 데이터가 어느 명령에 속하는지를 추적할 수 있다.
일부 실시예들에서, 판독 스케줄러들(752)이 소정 명령을 발행하도록 스케줄링할 때, 응답 스케줄러(756)는 요청된 판독 데이터가 공유 메모리 데이터 버스에 도착하도록 스케줄링될 소정 시점을 결정한다. 일 실시예에서, 응답 스케줄러(756)는 소정 명령의 레이턴시를 판독 스케줄러들(752)이 소정 명령을 발행하도록 스케줄링하는 시점에 추가한다. 일부 실시예들에서, 응답 스케줄러(756)는 식별자를 생성한다. 일부 실시예들에서, 식별자는 소정 명령에 대응되는 정보를 저장하는 요청 큐에서의 엔트리의 표시이다. 다른 실시예들에서, 식별자는 스레드 식별자와 소정 명령에 대응하는 메모리 요청의 타겟 어드레스의 일부의 하나 이상의 조합이다. 응답 스케줄러(756)는 식별자와 소정 시점과의 연관(association)을 저장한다. 일 실시예에서, 표가 사용된다. 따라서, 응답 스케줄러(756)는 소정 명령에 삽입된 태그 또는 도착한 요청된 판독 데이터와 연관된 패킷에 기초하는 것이 아니라, 소정 시점에 기초하여 공유 메모리 데이터 버스 상에서 도착한 요청된 판독 데이터로 소정 명령을 식별할 수 있다.
일부 실시예들에서, 제어 레지스터들(770)은 전류 모드의 표시를 저장한다. 예를 들어, 오프-칩 메모리 데이터 버스 및 메모리 장치는 소정 시간에 판독 모드 또는 기록 모드를 지원한다. 따라서, 트래픽은 현재 모드 동안 소정의 단일 방향으로 라우팅되며, 데이터 버스 전향 레이턴시 이후 현재 모드가 변경되면 방향을 변경한다. 다양한 실시예들에서, 제어 레지스터들(770)은 판독 모드 동안 전송하기 위한 임계 개수의 판독 요청들(판독 버스트 길이)을 저장한다. 일부 실시예들에서, 제어 레지스터들(770)은 발행할 큐(732-738)에 저장된 요청들을 선택하기 위해 판독 스케줄러들(752) 및 기록 스케줄러들(754)에서 선택 알고리즘들에 의해 사용되는 기준에 대한 가중치들을 저장한다.
이제 도 8을 참조하면, 메모리 요청들을 두 개의 상이한 메모리 유형들에 발행하도록 스케줄링하기 위한 방법(800)의 일 실시예가 도시된다. 논의를 위해, 이 실시예(뿐만 아니라 도 9-14)에서의 단계들이 순차적으로 도시된다. 그러나, 설명된 방법들의 다양한 실시예들에서, 설명된 요소들 중 하나 이상은 도시된 것과 다른 순서로 동시에 수행되거나 또는 완전히 생략된다는 점에 유의한다. 다른 추가 요소들이 또한 원하는 대로 수행된다. 본원에 설명된 다양한 시스템들 또는 장치들 중 어느 것도 방법(800)을 구현하도록 구성된다.
노드들 내의 하나 이상의 클라이언트들은 컴퓨터 프로그램들 또는 소프트웨어 어플리케이션들을 실행한다. 컴퓨팅 리소스는 하나 이상의 클라이언트들 중 소정 클라이언트 내의 캐시 메모리 서브시스템 내에서 소정의 메모리 액세스 요청 미스들을 결정한다. 클라이언트는 메모리 액세스 요청을 두 개의 다른 메모리들 각각에 연결된 메모리 채널을 갖는 메모리 컨트롤러를 통해 두 개의 다른 메모리들에 의해 구현된 시스템 메모리로 전송한다. 제1 유형의 메모리의 하나 이상의 액세스 레이턴시들과 제2 유형의 메모리의 하나 이상의 액세스 레이턴시들 간의 차이들은 임계 시간의 양을 초과한다. 소정 메모리 채널에 연결된 제1 유형의 메모리에 대한 메모리 요청들은 이들이 수신될 때 저장된다(블록 802). 소정 메모리 채널에 연결된 제2 유형의 메모리에 대한 메모리 요청들은 이들이 수신될 때 저장된다(블록 804).
제1 유형의 메모리에 대한 메모리 요청들은 메모리 요청들의 우선 순위들 및 타겟들에 적어도 기초한 비순차적 발행을 위해 표시된다(블록 806). 제2 유형의 메모리에 대한 메모리 요청들은 메모리 요청들의 우선 순위들 및 타겟들에 기초한 비순차적 발행을 위해 표시된다(블록 808). 따라서, 메모리 컨트롤러는 제1 메모리 및 제2 메모리 각각에 대한 비순차적 발행을 지원한다. 메모리 요청들은 소정 시간에 응답 데이터를 제공하는 방식으로 발행하도록 스케줄링된다(블록 810). 예를 들어, 메모리 요청들은 다른 액세스 레이턴시들에도 불구하고 공유 메모리 데이터 버스 상에서의 데이터 충돌 없이 혼합된 방식으로 스케줄링된다.
다양한 실시예들에서, 메모리 컨트롤러 내의 스케줄러 또는 다른 제어 로직은 제1 메모리 유형에 대한 제1 명령 및 제2 메모리 유형에 대한 제2 명령과 같은 두 개의 계류중인 메모리 액세스 명령들이 있는지를 결정한다. 스케줄러는 공유 메모리 데이터 버스에서 데이터 충돌을 일으키지 않고 제1 명령 및 제2 명령 각각이 발행될 수 있는지를 결정한다. 예를 들어, 제1 유형의 메모리 및 제2 유형의 메모리 각각의 액세스 레이턴시들 외에 제1 명령 및 제2 명령 중 선택된 명령을 발행하는 시점에 기초하여, 메모리 컨트롤러는 판독 응답 데이터 또는 기록 데이터가 공유 메모리 데이터 버스에 도착하도록 스케줄링되는 시점을 추적한다. 일부 실시예들에서, 시점들은 클록 사이클들로 측정된다.
제1 명령 및 제2 명령 중 하나를 선택해도 공유 메모리 데이터 버스에서 데이터 충돌을 스케줄링하지 않으면, 제1 명령 및 제2 명령 각각은 발행 후보로 남는다. 이러한 경우, 스케줄러는 중재 로직에 기초하여 제1 명령 및 제2 명령으로부터 명령을 선택한다. 다른 실시예들에서, 제1 명령을 발행할지 또는 제2 명령을 발행할지를 결정하는 것은 판독 응답 데이터 또는 기록 데이터가 공유 메모리 데이터 버스상에서 구동될 특정 소정 시점을 선택하는 것으로 시작한다.
이제 도 9를 참조하면, 메모리 요청들을 두 개의 상이한 메모리 유형들에 발행하도록 스케줄링하기 위한 방법(900)의 일 실시예가 도시된다. 메모리 데이터 버스 상에서 구동될 판독 응답에 대한 다음 소정 시점이 식별된다(블록 902). 예를 들어, 다음 소정 시점을 결정할 때, 각각의 발행된 메모리 액세스 명령 및 상태 액세스 명령에 대해 반환되는 요청된 데이터의 액세스 레이턴시 및 스케줄링된 양 둘 다가 고려된다. 일부 실시예들에서, 시점들은 클록 사이클들로 측정된다.
판독 응답 데이터가 소정 시점에 도달하도록 이미 스케줄링된 경우(조건부 블록(904)의 "예" 분기), 방법(900)의 제어 흐름은 다음 소정 시점이 식별되는 블록(902)으로 되돌아간다. 예를 들어, 현재 선택된 클록 사이클 이후의 다음 클록 사이클이 고려된다. 대안으로, 카운트는 두 개의 다른 메모리들 중 하나로부터 도착하도록 스케줄링된 판독 요청된 데이터를 위해 소모될 소정 클록 사이클 수와 동일한 현재 클록 사이클에 추가된다. 판독 응답 데이터가 소정 시점에 도달하도록 스케줄링되지 않은 경우(조건부 블록(904)의 "아니오" 분기), 소정 시점에 응답 데이터를 제공하도록 제1 메모리 유형에 대한 메모리 액세스 명령을 스케줄링하기에 충분한 시간이 있는지가 결정된다(블록 906). 이어서, 소정 시점에 응답 데이터를 제공하도록 제1 메모리 유형과 다른 제2 메모리 유형에 대한 메모리 액세스 명령을 스케줄링하기에 충분한 시간이 있는지가 결정된다(블록 908).
일부 실시예들에서, 소정 시점에 응답 데이터를 제공하도록 제2 메모리 유형에 대한 상태 액세스 명령을 스케줄링하기에 충분한 시간이 있는지가 또한 결정된다(블록 910). 일부 실시예들에서, 상태 액세스 명령에 대한 액세스 레이턴시는 제2 메모리 유형에 대한 메모리 액세스 명령에 대한 액세스 레이턴시와 다르다. 소정 시점에서 응답 데이터를 제공할 수 있는 후보 명령들로부터 명령이 선택된다(블록 912). 다양한 실시예들에서, 스케줄러는 우선 순위 레벨들, 수명들 등과 같은 앞서 설명된 기준에 기초하여 발행할 다음 메모리 액세스 명령 또는 상태 액세스 명령을 선택한다. 선택된 명령은 선택된 명령이 소정 시점에 응답 데이터를 제공하도록 하는 소정 시점에 발행되도록 스케줄링된다(블록 914). 예를 들어, 메모리 채널을 갖는 메모리 컨트롤러를 위한 스케줄러는 발행을 위한 메모리 액세스 명령들 및 상태 액세스 명령들을 스케줄링할 때 발행할 선택된 명령과 그 각각의 레이턴시들을 준비하는 데 사용되는 가능한 추가 명령들을 고려한다.
상기에 설명된 바와 같이, 방법(900)은 제1 메모리 유형 및 제2 메모리 유형에 대한 다수의 결정론적 액세스 레이턴시들에도 불구하고 메모리 데이터 버스 상에서 데이터 충돌을 피하기 위한 단계들을 설명한다. 그러나, 앞서 설명된 바와 같이, 다른 실시예들에서, 메모리 채널을 갖는 메모리 컨트롤러를 위한 스케줄러는 메모리 데이터 버스가 이용 가능한 다음 소정 시점을 초기에 결정하는 것과 대조적으로 메모리 명령 버스가 이용 가능한 다음 시점을 결정한다. 일부 실시예들에서, 시점들은 클록 사이클들로 측정된다. 일부 실시예들에서, 스케줄러는 메모리 명령 버스가 이용 가능한 다음 시점에 각각의 레이턴시들을 추가함으로써 각각의 상이한 유형의 계류중인 메모리 액세스 명령에 대해 각각의 소정 시점을 결정한다.
새로운 계류중인 메모리 액세스 명령이 메모리 명령 버스가 이용 가능한 다음 소정 시점에 발행되도록 스케줄링될 수 있는지를 결정하기 위해, 일 실시예에서, 스케줄러는 새로운 메모리 액세스 명령에 대한 응답 레이턴시가 N개의 클록 사이클들이라고 결정하며, 여기서 N은 정수이다. 스케줄러는 메모리 명령 버스가 이용 가능한 시점 이후의 N개의 클록 사이클들에 대응하는 나중의 소정 시점을 식별한다. 이후, 스케줄러는 메모리 데이터 버스가 나중의 소정 시점에 이용 가능한지를 결정한다.
메모리 데이터 버스가 단일의 계류중인 메모리 액세스 명령에 대해서만 각각의 소정 시점 동안 이용 가능한 경우, 스케줄러는 메모리 명령 버스가 이용 가능한 다음 시점에 해당 단일의 계류중인 메모리 액세스 명령을 스케줄링한다. 메모리 데이터 버스가 다수의 계류중인 메모리 액세스 명령들에 대해 각각의 소정 시점들 동안 이용 가능한 경우, 스케줄러는 우선 순위 레벨들, 수명들 등과 같은 앞서 설명된 기준에 기초하여 발행할 계류중인 메모리 액세스 명령들 중 하나를 선택한다. 스케줄러는 메모리 명령 버스가 이용 가능한 다음 시점에 선택된 계류중인 메모리 액세스 명령을 스케줄링한다.
방법들(1000-1200)에 대한 다음의 설명은 초기에 메모리 데이터 버스가 이용될 수 있는 다음 소정 시점을 결정한 다음 메모리 액세스 명령이 메모리 명령 버스 상에 발행되도록 스케줄링하는 이전 시점을 결정하는 단계들을 설명한다. 그러나, 다양한 다른 실시예들에서, 상기에 설명된 바와 같이, 스케줄러는 메모리 명령 버스가 이용 가능한 다음 시점을 결정한 후, 충돌없이 메모리 데이터 버스 상에 도착하도록 스케줄링될 판독 응답 데이터에 대한 추후 시점을 결정한다. 방법들(1000-1200)의 단계들이 판독 액세스 명령들과 관련하여 설명되었지만, 다른 실시예들에서, 유사한 로직 및 단계들이 기록 데이터가 공유 메모리 데이터 버스 상에 배치되고 판독 응답 데이터 또는 공유 메모리 데이터 버스 상에서 구동되는 다른 기록 액세스 명령들 중 다른 기록 데이터와 데이터 충돌이 일어날 수 있는 기록 액세스 명령들에 사용된다.
이제 도 10을 참조하면, 메모리 요청들을 두 개의 상이한 메모리 유형들에 발행하도록 스케줄링하기 위한 방법(1000)의 일 실시예가 도시된다. 선택된 액세스 명령이 대상이 되는 소정 시점에 응답 데이터를 제공하도록 하는 소정 시점에 액세스 명령을 선택하고 발행할 액세스 명령을 스케줄링하기 위해, 특정 타이밍 값들이 평가된다. 일부 실시예들에서, 다음의 단계들이 (도 9)의 방법(900)의 블록(914) 이후에 수행된다. 제1 시간의 양은 명령 발행을 위한 소정 시점과 제1 메모리 유형에 대한 스케줄링된 제1 액세스 명령의 가장 최근 시점 사이에서 결정된다(블록 1002). 제1 메모리 유형에 대한 액세스 명령의 가능한 다음 발행을 준비하기 위해 임의의 필요한 추가 명령들의 레이턴시들이 제1 메모리 유형에 대한 액세스 명령의 제1 레이턴시에 추가된다(블록 1004). 제2 메모리 유형에 대한 액세스 명령에 대해 유사한 단계들이 수행된다. 예를 들어, 제2 시간의 양은 소정 시점과 제2 메모리 유형에 대한 스케줄링된 제2 액세스 명령의 가장 최근 시점 사이에서 결정된다(블록 1006). 제2 메모리 유형에 대한 액세스 명령의 가능한 다음 발행을 준비하기 위해 임의의 필요한 추가 명령들의 레이턴시들이 제2 메모리 유형에 대한 액세스 명령의 제2 레이턴시에 추가된다(블록 1008).
제3 시간의 양은 소정 시점과 제2 메모리 유형에 대한 스케줄링된 제3 액세스 명령의 가장 최근 시점 사이에서 결정된다(블록 1010). 제2 메모리 유형에 대한 제3 액세스 명령의 가능한 다음 발행을 준비하기 위해 임의의 필요한 추가 명령들의 레이턴시들이 제2 메모리 유형에 대한 제3액세스 명령의 제3 레이턴시에 추가된다(블록 1012). 제1, 제2 및 제3 시간의 양들 각각은 제1, 제2 및 제3 레이턴시들 각각과 비교된다(블록 1014).
이제 도 11을 참조하면, 메모리 요청들을 두 개의 상이한 메모리 유형들에 발행하도록 스케줄링하기 위한 방법(1100)의 일 실시예가 도시된다. 선택된 액세스 명령이 대상이 되는 소정 시점에 응답 데이터를 제공하도록 하는 소정 시점에 액세스 명령을 선택하고 발행할 액세스 명령을 스케줄링하기 위해, 특정 타이밍 값들의 비교들이 수행된다. 일부 실시예들에서, 다음의 단계들이 (도 10)의 방법(1000)의 블록(1014) 이후에 수행된다.
제1 레이턴시가 제1 시간의 양보다 큰 경우(조건부 블록(1102)의 "아니오" 분기), 제1 메모리 유형에 대한 제1 메모리 액세스 명령이 발행을 위한 후보 명령 세트에 삽입된다(블록 1104). 즉, 제1 메모리 유형에 대한 메모리 액세스 명령의 누적 레이턴시들이 발행을 위해 메모리 액세스 명령을 준비하는 데 사용되는 임의의 추가 명령들이 제1 메모리 유형에 대한 임의의 명령의 마지막 발행과 소정 시점 사이의 시간의 양 이하인 경우, 제1 메모리 유형에 대한 메모리 액세스 명령을 발행할 충분한 시간이 있다. 예를 들어, (도 5의) 타이밍도(500)를 다시 참조하면, CC8에서의 "READ C"의 발행과 CC4에 의한 "READ B"의 발행 완료 사이에 적어도 4개의 클록 사이클들이 있어야 한다.
제1 레이턴시가 제1 시간의 양보다 큰 경우(조건부 블록(1102)의 "예" 분기), 제1 메모리 유형에 대한 제1 메모리 액세스 명령이 발행을 위한 후보 명령으로서 고려사항에서 제거된다(블록 1106). 제2 메모리 유형에 대한 제2 메모리 액세스 명령에 대해 유사한 단계들이 수행된다. 예를 들어, 제1 레이턴시가 제2 시간의 양보다 큰 경우(조건부 블록(1108)의 "아니오" 분기), 제2 메모리 유형에 대한 제2 메모리 액세스 명령이 발행을 위한 후보 명령 세트에 삽입된다(블록 1110). 그렇지 않으면, 제2 레이턴시가 제2 시간의 양보다 큰 경우(조건부 블록(1108)의 "예" 분기), 제2 메모리 유형에 대한 제2 메모리 액세스 명령이 발행을 위한 후보 명령 세트로부터 제거된다(블록 1112).
제2 메모리 유형에 대한 제3 메모리 액세스 명령에 대해 유사한 단계들이 수행된다. 그러나, 일부 실시예들에서, 요청된 판독 데이터가 대응하는 원래 메모리 액세스 명령에 대해 이미 반환되었는지에 대한 확인이 이루어진다. (도 4의) 타이밍도(400)를 간단히 다시 참조하면, 판독 명령("SREAD B")은 요청된 판독 데이터가 원래 트랜잭션 판독 명령("READ B")에 대해 반환되지 않았으므로 발행된다. CC7에서, 요청된 판독 데이터가 도착하도록 스케줄링되지만, 제2 메모리 유형로부터 반환되지 않았다. 그러나, 판독 명령("READ D")에 대한 후속 판독 명령은 요청된 판독 데이터가 CC9에서 스케줄링된 소정 시점에 반환되었으므로 발행되지 않는다. 일부 실시예들에서, 메모리 컨트롤러는 다른 채널 또는 링크 인터페이스 상에서 판독 액세스 명령에 대한 응답 데이터가 제1 메모리 유형 및 제2 메모리 유형 중 특정 메모리 유형에 대해 지금 이용 가능한지를 명시하는 표시를 수신한다. 다른 실시예들에서, 메모리 컨트롤러는 응답 데이터가 준비되었는지를 결정하기 위해 추론적 판독 명령들을 발행한다.
제3 레이턴시가 제3 시간의 양보다 크고(조건부 블록(1114)의 "아니오" 분기), 대응되는 응답 데이터가 아직 반환되지 않았다고 결정되는 경우(조건부 블록(1116)의 "아니오" 분기), 제2 메모리 유형에 대한 제3 메모리 액세스 명령은 발행을 위한 후보 명령 세트에 삽입된다(블록 1118). 제3 레이턴시가 제3 시간의 양보다 크고(조건부 블록(1114)의 "아니오" 분기), 대응되는 응답 데이터가 반환되었다고 결정되는 경우(조건부 블록(1116)의 "예" 분기), 제2 메모리 유형에 대한 제3 메모리 액세스 명령은 발행을 위한 후보 명령 세트에 삽입된다(블록 1120). 마찬가지로, 제3 레이턴시가 제3 시간의 양보다 큰 경우(조건부 블록(1114)의 "예" 분기), 제2 메모리 유형에 대한 제3 메모리 액세스 명령이 발행을 위한 후보 명령 세트로부터 제거된다(블록 1120).
이제 도 12를 참조하면, 메모리 요청들을 두 개의 상이한 메모리 유형들에 발행하도록 스케줄링하기 위한 방법(1200)의 일 실시예가 도시된다. 선택된 액세스 명령이 대상이 되는 소정 시점에 응답 데이터를 제공하도록 하는 소정 시점에 액세스 명령을 선택하고 발행할 액세스 명령을 스케줄링하기 위해, 적격 후보 명령 세트 사이에서 중재가 수행된다. 일부 실시예들에서, 다음의 단계들이 (도 11)의 방법(1100)의 단계들 이후에 수행된다. 가중치가 발행될 후보 명령 세트로부터 명령을 선택하는데 사용되는 기준에 할당된다(블록 1202).
앞서 설명된 바와 같이, 기준은 QoS 또는 다른 우선 순위 정보, 수명, 프로세스 또는 스레드 식별자(ID), 메모리 액세스 명령이 제1 메모리 유형에 발행된 이후의 시간의 양, 및 메모리 액세스 명령 또는 상태 액세스 명령이 제2 메모리 유형에 발행된 이후의 시간의 양을 포함한다. 일부 실시예들에서, 프로그램 가능 제어 및 상태 레지스터들은 선택된 기준에 할당된 가중치들을 저장한다. 후보 명령 세트가 발행을 위해 결정된다(블록 1204). 일 실시예에서, 명령들은 이전 방법들(900-1100)의 단계들 이후에 자격이 주어진다. 세트가 단일 명령을 포함하는 경우(조건부 블록(1206)의 "예" 분기), 단일 명령이 발행을 위해 선택된다(블록 1208).
세트가 다수의 명령들을 포함하는 경우(조건부 블록(1206)의 "아니오" 기), 단일 명령은 가중치 기준에 기초하여 다수의 후보자들 중에서 선택된다(블록 1210). 앞서 설명된 바와 같이, 일부 실시예들에서, 스케줄러들은 소정 가중치를 각각의 기분에 할당하고 가중치 합계를 수행한다. 총합이 가장 큰 메모리 액세스 명령 또는 상태 액세스 명령이 발행을 위해 선택된다. 선택된 명령의 발행을 준비하기 위해 임의의 필요한 추가 명령들을 포함하는 선택된 명령의 총 레이턴시는 판독 응답 데이터가 도착하도록 스케줄링된 시점으로부터 차감된다(블록 1212). 추가 명령들 및 선택된 액세스 명령은 차감을 수행함으로써 발견된 결정된 시점에 발행되도록 스케줄링된다(블록 1214).
이제 도 13을 참조하면, 액세스 레이턴시들이 상이한 두 개의 메모리들로부터 비순차적으로 도착하는 판독 응답 데이터를 식별하기 위한 방법(1300)의 일 실시예가 도시된다. 다양한 실시예들에서, 메모리들 중 하나 이상은 결정론적 응답 시간으로 응답하는 메모리 유형이다. 이러한 실시예에서, 응답은 요청된 데이터를 포함하거나 응답은 데이터가 현재 준비되지 않았음을 나타낸다. 일부 실시예들에서, 이러한 메모리 유형은 NVDIMM-P이다. 도 13의 실시예에 도시된 바와 같이, 메모리 액세스 명령(예: 판독 요청)이 메모리들 중 하나에 발행할 준비가 되었다는 표시가 수신된다(블록 1302). 그런 다음, 메모리 액세스 명령이 이미 할당된 식별자를 갖는지에 대한 결정이 이루어진다(블록 1304). 아직 식별자가 없는 경우(조건부 블록(1306)의 "아니오" 분기), 식별자가 생성되거나 아니면 메모리 액세스 명령에 할당된다(블록 1308). 일부 실시예들에서, 식별자는 메모리 액세스 명령에 대응되는 정보를 저장하는 요청 큐에서의 엔트리의 표시이다. 다른 실시예들에서, 식별자는 스레드 식별자와 메모리 액세스 명령에 대응하는 메모리 요청의 타겟 어드레스의 일부의 하나 이상의 조합이다.
명령에 대한 식별자가 이미 있는 경우(조건부 블록(1306)의 "예" 분기), 방법(1300)의 제어 흐름은 메모리 액세스 명령이 발행되도록 스케줄링되는 제1 시점에 대한 결정이 이루어지는 블록(1310)으로 이동한다(블록 1310). 예를 들어, 스케줄러는 스케줄러가 발행을 위해 메모리 액세스 명령을 선택할 때 이 정보를 제공할 수 있다.
또한, 메모리 액세스 명령의 응답 레이턴시가 결정된다(블록 1312). 다양한 실시예들에서, 제2 메모리 유형에 대한 상태 액세스 명령들 외에, 메모리들의 제1 메모리 유형 및 제2 메모리 유형 각각에 대한 메모리 액세스 명령들은 결정론적 레이턴시들을 갖는다. 그러나, 각 명령은 다른 명령의 레이턴시와 다른 레이턴시를 가질 수 있다. 그런 다음, 식별자는 명령에 대한 응답이 예상되는 시간에 대응되는 제2 시점과 관련된다(블록 1314). 예를 들어, 명령이 발행되는 시간이 T1이고 레이턴시가 100개의 사이클들(또는 일부 다른 레이턴시의 척도)과 같은 것으로 결정되는 경우, 제2 시점은 T1 + 100과 같다. 다양한 실시예들에서, 식별자는 메모리로 전달될 때 메모리 액세스 명령에 포함되지 않는다. 오히려, 특정 클록 사이클과 같은 명령에 대한 응답이 도착하도록 스케줄링되는 시점이 수신된 응답에 대응하는 액세스 명령을 식별하는데 사용된다.
도 14를 참조하면, 두 개의 상이한 메모리 유형들로부터 비순차적으로 도착하는 응답 데이터를 식별하기 위한 방법(1400)의 일 실시예가 도시된다. 발행된 명령들에 태그들 또는 다른 식별자들을 삽입하지 않고, 수신된 판독 데이터를 대응되는 액세스 명령들에 매칭시키기 위해, 응답 스케줄러 내의 제어 로직은 다음 단계들을 수행한다. 일부 실시예들에서, 다음의 단계들이 (도 13)의 방법(1300)의 단계들 이후에 수행된다.
발행된 명령들에 대한 판독 응답 데이터를 수신하기 위한 식별자들 및 시점들이 유지된다(블록 1402). 판독 응답 데이터를 수신하기 위한 소정 시점이 도달한 경우(조건부 블록(1404)의 "예" 분기), 도달 시점에 대응되는 소정 명령이 시점에 기초하여 식별된다(블록 1406). 일부 실시예들에서, 번호가 매겨진 클럭 사이클들은 소정 시점들을 나타내는 데 사용된다. 다른 실시예들에서, 다른 시간의 카운트 또는 척도가 사용된다. 다양한 실시예들에서, 소정 시점은 대응되는 명령과 관련된 식별자를 결정하기 위해 표로 인덱싱하는 데 사용된다. 예를 들어, 일부 실시예들에서, 식별자는 메모리 액세스 명령에 대응되는 정보를 저장하는 요청 큐에서의 엔트리의 표시이다. 다른 실시예들에서, 식별자는 스레드 식별자와 메모리 액세스 명령에 대응하는 메모리 요청의 타겟 어드레스의 일부의 하나 이상의 조합이다.
유효 데이터가 소정 시점에 수신되는 경우(조건부 블록(1408)의 "예" 분기), 소정 명령을 생성한 요청자가 식별되고(블록 1410), 유효한 데이터가 식별된 요청자에게 전송되고(블록 1412), 소정 명령은 완료된 것으로 표시된다(블록 1414). 유효 데이터가 소정 시점에 수신되지 않는 경우(조건부 블록(1408)의 "아니오" 분기), 소정 명령은 미해결 상태로 유지된다(블록 1416).
다양한 실시예들에서, 소프트웨어 어플리케이션의 프로그램 인스트럭션들은 앞서 설명된 방법들 및/또는 메커니즘들을 구현하는 데 사용된다. 프로그램 인스트럭션들은 C와 같은 하이 레벨 프로그래밍 언어로 하드웨어의 행동을 설명한다. 대안으로, 베릴로그(Verilog)와 같은 하드웨어 설계 언어(HDL)가 사용된다. 프로그램 인스트럭션들은 비일시적 컴퓨터 판독 가능 저장 매체에 저장된다. 다양한 유형의 저장 매체가 사용 가능하다. 저장 매체는 프로그램 실행을 위해 컴퓨팅 시스템에 프로그램 인스트럭션들 및 수반되는 데이터를 제공하기 위해 사용하는 동안 컴퓨팅 시스템에 의해 액세스 가능하다. 컴퓨팅 시스템은 프로그램 인스트럭션들을 실행하도록 구성된 적어도 하나 이상의 메모리들 및 하나 이상의 프로세서들을 포함한다.
상기 설명된 실시예들은 단지 구현예들의 비제한적 예들에 불과하다는 점을 강조해야 한다. 상기 개시가 완전히 이해되면 많은 변형들 및 수정들이 본 기술분야에서 숙련된 자들에게 명백해질 것이다. 다음의 청구범위는 모든 이러한 변형들 및 수정들을 포함하는 것으로 해석되는 것으로 의도된다.

Claims (20)

  1. 메모리 컨트롤러에 있어서,
    제1 메모리 장치 및 상기 제1 메모리 장치와 다른 제2 메모리 장치 둘 다로부터 데이터 버스 상의 판독 응답 데이터를 수신하기 위한 제1 인터페이스;
    상기 판독 응답 데이터를 복수의 클라이언트들 중 하나로 전송하기 위한 제1 인터페이스; 및
    제어 로직을 포함하며,
    판독 응답 데이터를 수신하기 위한 소정 시점에 도달되었다고 결정하는 것에 응답하여, 상기 제어 로직은,
    상기 소정 시점에 기초하여 제1 메모리 액세스 명령을 식별하고;
    유효 데이터가 상기 소정 시점에 상기 데이터 버스 상에서 수신된다고 결정하는 것에 응답하여,
    상기 제1 메모리 액세스 명령을 완료된 것으로 표시하고;
    상기 유효 데이터를 상기 제1 메모리 액세스 명령을 생성하는 소정 클라이언트로 전송하도록 구성되는, 메모리 컨트롤러.
  2. 제1항에 있어서, 상기 제어 로직은,
    비트 벡터의 각 비트가 스케줄링 시간 슬롯에 대응되는 상기 비트 벡터를 유지하고;
    데이터가 상기 소정 타임 슬롯에 대응되는 시간에 데이터 버스 상에 전달되도록 스케줄링된다고 결정하는 것에 응답하여 상기 비트 벡터의 소정 비트를 설정하도록 구성되는, 메모리 컨트롤러.
  3. 제1항에 있어서, 제2 메모리 액세스 명령이 발행되도록 스케줄링된다는 표시를 수신하는 것이 응답하여, 상기 제어 로직은 상기 제2 메모리 액세스 명령에 대한 판독 응답 데이터를 수신하기 위한 시점을 상기 제2 메모리 액세스 명령을 식별하는 식별자에 할당하도록 더 구성되는, 메모리 컨트롤러.
  4. 제3항에 있어서, 상기 식별자를 상기 제2 메모리 액세스 명령에 할당하는 것은 상기 제2 메모리 액세스 명령이 미해결 메모리 액세스 명령과 동일한 어드레스를 대상으로 하는 상태 액세스 명령이라고 결정하는 것을 포함하는, 메모리 컨트롤러.
  5. 제1항에 있어서, 상기 제어 로직은 상기 소정 시점을 할당하기 위해 고유 식별자를 생성하도록 더 구성되는, 메모리 컨트롤러.
  6. 제5항에 있어서, 상기 고유 식별자는 스레드 식별자 및 상기 제1 메모리 액세스 명령에 의해 대상이 되는 타겟 어드레스의 일부 중 하나 이상을 포함하는, 메모리 컨트롤러.
  7. 제1항에 있어서, 상기 소정 시점을 결정하는 것은 상기 제1 메모리 액세스 명령이 발행되도록 스케줄링되는 시간에 상기 제1 메모리 액세스 명령의 응답 레이턴시를 추가하는 것을 포함하는, 메모리 컨트롤러.
  8. 방법에 있어서,
    제1 인터페이스를 통해, 제1 메모리 장치 또는 상기 제1 메모리 장치와 다른 제2 메모리 장치로부터 데이터 버스 상의 판독 응답 데이터를 수신하는 단계;
    제2 인터페이스에 의해, 상기 판독 응답 데이터를 복수의 클라이언트들 중 하나로 전송하는 단계;
    판독 응답 데이터를 수신하기 위한 소정 시점에 도달되었다고 결정하는 것에 응답하여,
    상기 소정 시점에 기초하여 제1 메모리 액세스 명령을 식별하는 단계; 및
    유효 데이터가 상기 소정 시점에 상기 데이터 버스 상에서 수신된다고 결정하는 것에 응답하여,
    상기 제1 메모리 액세스 명령을 완료된 것으로 표시하는 단계; 및
    상기 유효 데이터를 상기 제1 메모리 액세스 명령을 생성하는 소정 클라이언트로 전송하는 단계를 포함하는, 방법.
  9. 제8항에 있어서,
    비트 벡터의 각 비트가 스케줄링 시간 슬롯에 대응되는 상기 비트 벡터를 유지하는 단계; 및
    데이터가 상기 소정 타임 슬롯에 대응되는 시간에 데이터 버스 상에 전달되도록 스케줄링된다고 결정하는 것에 응답하여 상기 비트 벡터의 소정 비트를 설정하는 단계를 더 포함하는, 방법.
  10. 제8항에 있어서, 제2 메모리 액세스 명령이 발행되도록 스케줄링된다는 표시를 수신하는 것이 응답하여, 상기 방법은 상기 제2 메모리 액세스 명령에 대한 판독 응답 데이터를 수신하기 위한 시점을 상기 제2 메모리 액세스 명령을 식별하는 식별자에 할당하는 단계를 포함하는, 방법.
  11. 제10항에 있어서, 상기 식별자를 상기 제2 메모리 액세스 명령에 할당하는 단계는 상기 제2 메모리 액세스 명령이 미해결 메모리 액세스 명령과 동일한 어드레스를 대상으로 하는 상태 액세스 명령이라고 결정하는 단계를 포함하는, 방법.
  12. 제8항에 있어서, 상기 소정 시점을 할당하기 위한 고유 식별자를 생성하는 단계를 더 포함하는, 방법.
  13. 제12항에 있어서, 상기 고유 식별자는 스레드 식별자 및 상기 제1 메모리 액세스 명령에 의해 대상이 되는 타겟 어드레스의 일부 중 하나 이상을 포함하는, 방법.
  14. 제8항에 있어서, 상기 소정 시점을 결정하는 단계는 상기 제1 메모리 액세스 명령이 발행되도록 스케줄링되는 시간에 상기 제1 메모리 액세스 명령의 응답 레이턴시를 추가하는 단계를 포함하는, 방법.
  15. 컴퓨팅 시스템에 있어서,
    제1 메모리 장치 또는 상기 제1 메모리 장치와 다른 제2 메모리 장치에 저장된 데이터에 대한 메모리 액세스 요청들을 생성하도록 구성된 복수의 클라이언트들; 및
    상기 제1 메모리 장치 및 상기 제2 메모리 장치 각각에 결합된 메모리 컨트롤러를 포함하며;
    판독 응답 데이터를 수신하기 위한 소정 시점에 도달되었다고 결정하는 것에 응답하여, 상기 메모리 컨트롤러는,
    상기 소정 시점에 기초하여 제1 메모리 액세스 명령을 식별하고;
    유효 데이터가 상기 소정 시점에 상기 데이터 버스 상에서 수신된다고 결정하는 것에 응답하여,
    상기 제1 메모리 액세스 명령을 완료된 것으로 표시하고;
    상기 유효 데이터를 상기 제1 메모리 액세스 명령을 생성하는 소정 클라이언트로 전송하도록 구성되는, 컴퓨팅 시스템.
  16. 제15항에 있어서, 상기 메모리 컨트롤러는,
    비트 벡터의 각 비트가 스케줄링 시간 슬롯에 대응되는 상기 비트 벡터를 유지하고;
    데이터가 상기 소정 타임 슬롯에 대응되는 시간에 데이터 버스 상에 전달되도록 스케줄링된다고 결정하는 것에 응답하여 상기 비트 벡터의 소정 비트를 설정하도록 더 구성되는, 컴퓨팅 시스템.
  17. 제1항에 있어서, 제2 메모리 액세스 명령이 발행되도록 스케줄링된다는 표시를 수신하는 것이 응답하여, 상기 메모리 컨트롤러는 상기 제2 메모리 액세스 명령에 대한 판독 응답 데이터를 수신하기 위한 시점을 상기 제2 메모리 액세스 명령을 식별하는 식별자에 할당하도록 더 구성되는, 컴퓨팅 시스템.
  18. 제17항에 있어서, 상기 식별자를 상기 제2 메모리 액세스 명령에 할당하는 것은 상기 제2 메모리 액세스 명령이 미해결 메모리 액세스 명령과 동일한 어드레스를 대상으로 하는 상태 액세스 명령이라고 결정하는 것을 포함하는, 컴퓨팅 시스템.
  19. 제15항에 있어서, 상기 메모리 컨트롤러는 상기 소정 시점을 할당하기 위해 고유 식별자를 생성하도록 더 구성되는, 컴퓨팅 시스템.
  20. 제19항에 있어서, 상기 고유 식별자는 스레드 식별자 및 상기 제1 메모리 액세스 명령에 의해 대상이 되는 타겟 어드레스의 일부 중 하나 이상을 포함하는, 컴퓨팅 시스템.
KR1020207021742A 2017-12-28 2018-09-20 동일한 채널에서 불균일한 레이턴시를 갖는 메모리 유형에 대한 응답 지원 KR20200100177A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/856,430 2017-12-28
US15/856,430 US10275352B1 (en) 2017-12-28 2017-12-28 Supporting responses for memory types with non-uniform latencies on same channel
PCT/US2018/051925 WO2019133086A1 (en) 2017-12-28 2018-09-20 Supporting responses for memory types with non-uniform latencies on same channel

Publications (1)

Publication Number Publication Date
KR20200100177A true KR20200100177A (ko) 2020-08-25

Family

ID=63963392

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207021742A KR20200100177A (ko) 2017-12-28 2018-09-20 동일한 채널에서 불균일한 레이턴시를 갖는 메모리 유형에 대한 응답 지원

Country Status (6)

Country Link
US (2) US10275352B1 (ko)
EP (1) EP3732578B1 (ko)
JP (2) JP2021509745A (ko)
KR (1) KR20200100177A (ko)
CN (1) CN111684430A (ko)
WO (1) WO2019133086A1 (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2019090493A1 (zh) * 2017-11-07 2019-05-16 华为技术有限公司 内存块回收方法和装置
US10275352B1 (en) 2017-12-28 2019-04-30 Advanced Micro Devices, Inc. Supporting responses for memory types with non-uniform latencies on same channel
US10896140B2 (en) * 2019-04-19 2021-01-19 International Business Machines Corporation Controlling operation of multiple computational engines
US20210200695A1 (en) * 2019-12-27 2021-07-01 Advanced Micro Devices, Inc. Staging memory access requests
US11403221B2 (en) * 2020-09-24 2022-08-02 Advanced Micro Devices, Inc. Memory access response merging in a memory hierarchy
US11341069B2 (en) * 2020-10-12 2022-05-24 Advanced Micro Devices, Inc. Distributed interrupt priority and resolution of race conditions

Family Cites Families (26)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6240565A (ja) * 1985-08-15 1987-02-21 Hitachi Ltd メモリ制御方式
JPH0731635B2 (ja) * 1988-11-24 1995-04-10 日本電気株式会社 情報処理装置
US6212611B1 (en) 1998-11-03 2001-04-03 Intel Corporation Method and apparatus for providing a pipelined memory controller
US6453370B1 (en) * 1998-11-16 2002-09-17 Infineion Technologies Ag Using of bank tag registers to avoid a background operation collision in memory systems
US6578117B2 (en) * 2001-10-12 2003-06-10 Sonics, Inc. Method and apparatus for scheduling requests using ordered stages of scheduling criteria
JP5188134B2 (ja) * 2007-10-03 2013-04-24 キヤノン株式会社 メモリアクセス制御装置及びメモリアクセス制御方法
JP2010134628A (ja) * 2008-12-03 2010-06-17 Renesas Technology Corp メモリコントローラおよびデータ処理装置
US8285946B2 (en) * 2009-12-15 2012-10-09 International Business Machines Corporation Reducing access contention in flash-based memory systems
US8539129B2 (en) 2010-04-14 2013-09-17 Qualcomm Incorporated Bus arbitration techniques to reduce access latency
JP4966404B2 (ja) * 2010-10-21 2012-07-04 株式会社東芝 メモリ制御装置、記憶装置、及びメモリ制御方法
EP2686774B1 (en) * 2011-03-14 2017-02-01 Hewlett-Packard Enterprise Development LP Memory interface
US20120290810A1 (en) 2011-04-18 2012-11-15 Jean-Jacques Lecler Memory Access Latency Metering
JP5861706B2 (ja) * 2011-06-28 2016-02-16 富士通株式会社 スケジューリング方法およびシステム
US8321627B1 (en) 2011-10-06 2012-11-27 Google Inc. Memory operation command latency management
US8909874B2 (en) * 2012-02-13 2014-12-09 International Business Machines Corporation Memory reorder queue biasing preceding high latency operations
EP2836979A4 (en) 2012-04-06 2018-08-08 Live Nation Entertainment Inc. Methods and systems of inhibiting automated scripts from accessing a ticket site
US8775745B2 (en) * 2012-09-14 2014-07-08 Oracle International Corporation Process variation tolerant bank collision detection circuit
US9772059B2 (en) 2013-03-14 2017-09-26 Lmk Technologies, Llc Method of dispensing a material
US9535627B2 (en) 2013-10-02 2017-01-03 Advanced Micro Devices, Inc. Latency-aware memory control
US9824004B2 (en) * 2013-10-04 2017-11-21 Micron Technology, Inc. Methods and apparatuses for requesting ready status information from a memory
US9563369B2 (en) * 2014-04-14 2017-02-07 Microsoft Technology Licensing, Llc Fine-grained bandwidth provisioning in a memory controller
US9639280B2 (en) 2015-06-18 2017-05-02 Advanced Micro Devices, Inc. Ordering memory commands in a computer system
US10133490B2 (en) 2015-10-30 2018-11-20 Sandisk Technologies Llc System and method for managing extended maintenance scheduling in a non-volatile memory
US10068636B2 (en) 2016-12-30 2018-09-04 Intel Corporation Apparatuses and methods for accessing and scheduling between a plurality of row buffers
US10359955B2 (en) * 2017-02-23 2019-07-23 Western Digital Technologies, Inc. Data storage device configured to perform a non-blocking control update operation
US10275352B1 (en) 2017-12-28 2019-04-30 Advanced Micro Devices, Inc. Supporting responses for memory types with non-uniform latencies on same channel

Also Published As

Publication number Publication date
JP2023156472A (ja) 2023-10-24
JP2021509745A (ja) 2021-04-01
US11474942B2 (en) 2022-10-18
US10275352B1 (en) 2019-04-30
WO2019133086A1 (en) 2019-07-04
US20210056027A1 (en) 2021-02-25
EP3732578A1 (en) 2020-11-04
CN111684430A (zh) 2020-09-18
EP3732578B1 (en) 2022-01-26

Similar Documents

Publication Publication Date Title
KR102442081B1 (ko) 비-균일 레이턴시들을 가진 메모리 요청들을 스케줄링하는 방법
US11474942B2 (en) Supporting responses for memory types with non-uniform latencies on same channel
US20210073152A1 (en) Dynamic page state aware scheduling of read/write burst transactions
CN112088368B (zh) 动态的每存储体和全存储体刷新
KR102402630B1 (ko) 캐시 제어 인지 메모리 컨트롤러
US11429281B2 (en) Speculative hint-triggered activation of pages in memory
US11422707B2 (en) Scheduling memory requests for a ganged memory device

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal