KR20210064377A - 재순서화 동안 캐시 일관성을 유지하기 위한 방법 - Google Patents

재순서화 동안 캐시 일관성을 유지하기 위한 방법 Download PDF

Info

Publication number
KR20210064377A
KR20210064377A KR1020217013439A KR20217013439A KR20210064377A KR 20210064377 A KR20210064377 A KR 20210064377A KR 1020217013439 A KR1020217013439 A KR 1020217013439A KR 20217013439 A KR20217013439 A KR 20217013439A KR 20210064377 A KR20210064377 A KR 20210064377A
Authority
KR
South Korea
Prior art keywords
request
address
entry
queue
indicator
Prior art date
Application number
KR1020217013439A
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 KR20210064377A publication Critical patent/KR20210064377A/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/0864Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
    • 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/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • 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/10Address translation
    • G06F12/1072Decentralised address translation, e.g. in distributed shared memory systems
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/742Route cache; Operation thereof
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L45/00Routing or path finding of packets in data switching networks
    • H04L45/74Address processing for routing
    • H04L45/745Address table lookup; Address filtering
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/622Queue service order
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/624Altering the ordering of packets in an individual queue
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/50Queue scheduling
    • H04L47/62Queue scheduling characterised by scheduling criteria
    • H04L47/6295Queue scheduling characterised by scheduling criteria using multiple queues, one for each individual QoS, connection, flow or priority
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/25Routing or path finding in a switch fabric
    • H04L49/253Routing or path finding in a switch fabric using establishment or release of connections between ports
    • H04L49/254Centralised controller, i.e. arbitration or scheduling
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/40Specific encoding of data in memory or cache
    • G06F2212/401Compressed data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/656Address space sharing

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Systems (AREA)
  • Memory System (AREA)

Abstract

컴퓨팅 시스템에서 효율적인 데이터 전송을 수행하기 위한 시스템, 장치 및 방법이 개시된다. 컴퓨팅 시스템은 클라이언트 내 다수의 패브릭 인터페이스 및 패브릭을 포함한다. 패브릭 인터페이스 내 패킷 송신기는 각자의 유형의 패킷을 각각 저장하기 위한 다수의 큐, 및 각각의 큐에 대한 대응하는 어드레스 히스토리 캐시를 포함한다. 패킷 송신기 내 큐 중재자가 발행될 후보 패킷을 선택하고 링크의 양 측 상의 어드레스 히스토리 캐시가 어드레스의 상위 부분을 저장할 때를 결정한다. 패킷 송신기는 전체 요청 어드레스가 아니라, 패킷으로 소스 식별자 및 요청에 대한 포인터를 링크 상으로 전송하며, 이는 패킷의 크기를 감소시킨다. 큐 중재자는 큐로부터 비순차적 발행을 지원한다. 큐 중재자는 비순차적 발행과의 충돌을 검출하고 아웃바운드 패킷 및 큐 엔트리에 저장되는 필드를 조절하여 데이터 손상을 피할 수 있다.

Description

재순서화 동안 캐시 일관성을 유지하기 위한 방법
컴퓨팅 시스템에서, 일부 유형의 응용분야가 타 응용분야보다 병렬 처리 및 공유 메모리를 더 잘 활용할 수 있는 기능을 수행한다. 이러한 응용분야의 예로는, 기계 학습 응용분야, 엔터테인먼트 및 실시간 응용분야뿐 아니라 일부 비지니스, 과학, 의료 및 그 밖의 다른 응용분야를 포함한다. 일부 프로세서 아키텍처가 둘 이상의 처리 디바이스(가령, CPU, GPU 등) 또는 처리 코어를 포함하지만, 일부 경우에서 메모리에 연결된 추가 처리 디바이스가 희망 성능 레벨을 제공하지 않는다.
일반적으로, 컴퓨팅 시스템이 통신 패브릭(또는 "패브릭(fabric)")을 통해 통신 메시지를 전송한다. 통신 메시지의 예시로는 일관성 프로브, 인터럽트, 및 읽기 및 쓰기 액세스 커맨드 및 대응하는 데이터를 포함한다. 패브릭 내 인터커넥션의 예로는 버스 아키텍처, 크로스바-기반 아키텍처, NoC(network-on-chip) 통신 서브시스템, 다이들 간 통신 채널, 실리콘 인터포저, 및 TSV(through silicon via)가 있다. 많은 경우에서, 패브릭은 비교적 넓은 패킷을 각각 지원하는 다중 물리 채널을 가진다. 단일 패브릭 내에서 데이터를 전송하는 동안, 많은 수의 이용 가능한 물리적 와이어가 사용되어 패브릭을 통한 레이턴시를 감소시킬 수 있다. 이러한 방식으로, 전체적으로 패브릭을 통한 대역폭이 비교적 클 수 있다. 그러나 개별 다이들을 패브릭을 통해 연결할 때, 일반적으로 개별 다이 상의 적은 수의 이용 가능한 물리적 와이어가 데이터를 전송하는 데 사용된다. 마찬가지로, 각각 패브릭을 갖는 개별 처리 노드를 함께 연결할 때, 처리 노드들 간 더 적은 수의 이용 가능한 물리적 와이어가 대역폭을 제한한다. 따라서, 이러한 컴퓨팅 시스템에서 패브릭의 경계부에서 종종 데이터 전송 효율이 감소된다.
상기를 고려하면, 컴퓨팅 시스템에서 효율적인 데이터 전송을 수행하기 위한 효율적인 방법 및 시스템이 필요하다.
첨부된 도면과 함께 하기의 기재를 참조함으로써, 본 명세서에 기재된 방법 및 메커니즘의 이점이 더 잘 이해된다.
도 1은 컴퓨팅 시스템의 하나의 실시예의 블록도이다.
도 2는 패킷 송신기의 하나의 실시예의 블록도이다.
도 3은 요청 큐의 하나의 실시예의 블록도이다.
도 4는 패킷 송신기의 하나의 실시예의 블록도이다.
도 5는 컴퓨팅 시스템에서 효율적인 데이터 전송을 수행하기 위한 방법의 또 다른 실시예의 흐름도이다.
도 6은 컴퓨팅 시스템에서 효율적인 데이터 전송을 수행하기 위한 방법의 또 다른 실시예의 흐름도이다.
도 7은 컴퓨팅 시스템에서 효율적인 데이터 전송을 수행하기 위한 방법의 또 다른 실시예의 흐름도이다.
도 8은 컴퓨팅 시스템에서 효율적인 데이터 전송을 수행하기 위한 방법의 또 다른 실시예의 흐름도이다.
도 9는 패킷 수신기의 하나의 실시예의 블록도이다.
도 10은 컴퓨팅 시스템에서 효율적인 데이터 전송을 수행하기 위한 방법의 또 다른 실시예의 흐름도이다.
본 발명의 다양한 수정 및 대안 형태가 가능하지만, 도면에서 특정 실시예가 예시로서 도시되어 있고 본 명세서에서 상세히 기재된다. 그러나 도면 및 상세한 설명은 본 발명을 개시된 특정 형태로 한정하려는 의도를 갖지 않으며, 이와 달리, 본 발명은 청구항에 의해 정의되는 본 발명의 범위 내에 속하는 모든 변형, 등가물 및 대안을 포함한다.
이하의 기재에서, 다수의 특정 세부사항이 제공되어 본 명세서에 제공되는 방법 및 메커니즘의 완전한 이해를 제공할 수 있다. 그러나, 해당 분야의 통상의 기술자라면 다양한 실시예가 이들 특정 세부사항 없이 실시될 수 있음을 알 것이다. 일부 경우, 잘 알려진 구조, 구성요소, 신호, 컴퓨터 프로그램 명령, 및 기법이 본 명세서에 기재된 방식을 모호하게 하지 않도록 상세히 나타내지 않았다. 설명의 단순성 및 명료성을 위해, 도면에 도시된 요소가 반드시 축척에 따라 그려진 것은 아님이 이해될 것이다. 예를 들어, 요소들 중 일부의 치수가 다른 요소에 비해 과장될 수 있다.
컴퓨팅 시스템에서 효율적인 데이터 전송을 수행하기 위한 다양한 시스템, 디바이스, 방법 및 컴퓨터 판독형 매체가 개시된다. 컴퓨팅 시스템 내 하나 이상의 클라이언트가 애플리케이션을 처리한다. 이러한 클라이언트의 예로는 범용 중앙 처리 디바이스(CPU), 그래픽 처리 디바이스(GPU), 가속 처리 디바이스(APU), 입/출력(I/O) 디바이스 등이 있다. 컴퓨팅 시스템은 적어도 전력 제어기, 및 클라이언트들 간 데이터를 전송하기 위한 복수의 링크 인터페이스를 더 포함한다. 덧붙여, 하나 이상의 클라이언트 각각 및 클라이언트들 간 통신 패브릭은 패킷 송신기 및 패킷 수신기와의 패브릭 인터페이스를 포함한다. 다양한 실시예에서, 패킷 송신기는 상이한 패킷 유형에 대한 요청을 저장하기 위한 복수의 요청 큐를 포함한다. 패킷 송신기 내 복수의 요청 큐 각각이 각자의 패킷 유형의 요청을 저장한다. 패킷 유형의 예시는 요청 유형, 응답 유형, 프로브 유형, 제어 유형, 및 토큰 또는 크레딧 유형을 포함한다. 다양한 실시예에서, 패킷 송신기는 쓰기 요청을 쓰기 커맨드 및 쓰기 데이터로 분할한다. 패킷 송신기는 쓰기 커맨드를 커맨드 또는 제어 패킷에 삽입하고 쓰기 커맨드에 해당하는 별도의 쓰기 데이터 패킷에 쓰기 데이터를 삽입한다. 유사한 방식으로, 패킷 송신기는 읽기 응답을 읽기 메시지와 읽기 응답 데이터로 분할한다. 패킷 송신기는 읽기 메시지를 커맨드 또는 제어 패킷에 삽입하고 읽기 응답 데이터를 별도의 데이터 패킷에 삽입한다. 응답 데이터를 포함하지 않는 읽기 요청의 경우, 패킷 송신기는 분할 단계를 수행하지 않는다. 오히려, 패킷 송신기는 읽기 요청을 커맨드 또는 제어 패킷에 읽기 커맨드로서 삽입한다.
일부 경우에, 복수의 요청 큐 중 둘 이상은 패킷 송신기에 상이한 크기의 패킷을 저장한다. 또한, 패킷 송신기 및 패킷 수신기는 하나 이상의 요청 큐에 대응하는 하나 이상의 어드레스 히스토리 캐시를 포함한다. 어드레스 히스토리 캐시는 요청 어드레스의 적어도 일부분을 저장한다. 상이한 물리적 디바이스로부터의 요청의 스트림이 어드레스 지역성(address locality)을 가질 수 있기 때문에, 어드레스 히스토리 캐시가 링크의 양측 상에 어드레스의 상위 부분을 저장한다. 어드레스 지역성은 "공간 지역성(spatial locality)"이라고도 지칭되며 상대적으로 서로 가까운 다중 메모리 액세스 요청을 지칭한다. 예를 들어, 일부 경우에 요청 어드레스가 연속적이다(가령, 연속되는 메모리 액세스 요청 각각이 바로 이전에 액세스된 캐시 라인에 이웃하는 캐시 라인, 바이트 등을 액세스한다). 또 다른 예에서는, 요청 어드레스가 각각의 메모리 액세스 요청 사이에 고정된 양만큼 증분되도록 액세스 패턴이 특정 상수 오프셋을 가진다. 또 다른 예에서, 각각의 요청 어드레스는 바로 이전 요청 어드레스에 비해 증가하는 오프셋을 가진다.
패킷 송신기는 자신의 로컬 어드레스 히스토리 캐시에 특정 어드레스를 저장할 때를 결정한다. 패킷 송신기는 또한 패킷 수신기가 특정 어드레스의 적어도 일부분을 저장하는 저장 위치를 식별하는 지시자(또는 "식별자")를 연관된 요청 패킷에 저장한다. 일부 실시예에서, 특정 어드레스와 동일한 어드레스 범위 내 후속 요청에 대해, 패킷 송신기는 이들 후속 요청에 대응하는 어드레스의 적어도 일부 없이 패킷을 전송한다. 어드레스의 생략된 부분을 포함하는 대신 패킷 송신기는 저장 위치의 식별자를 전송한다. 패킷에 어드레스의 일부분을 포함시키지 않음으로써, 패킷 내 데이터 양이 감소된다. 따라서 전체 요청 어드레스를 저장하는 패킷에 비해 패킷 크기가 압축됩니다. 일부 실시예에서, 패킷 송신기 및 패킷 수신기 각각은 각자의 어드레스 히스토리 캐시에 대해 저장 위치의 동일한 식별을 사용한다. 패킷 수신기는 수신된 저장 위치의 ID를 사용하여 전체 요청 어드레스를 결정하고 요청 어드레스를 사용하여 수신된 요청을 서비스할 수 있다.
패킷 송신기는 또한 다수의 요청 큐 중 각각의 요청 큐로부터 후보 패킷을 각각 선택하기 위한 다수의 큐 중재자(queue arbiter)를 더 포함한다. 또한, 패킷 송신기는 링크 패킷을 저장하기 위한 버퍼를 포함한다. 링크 패킷은 다수의 후보 패킷을 저장하기 위한 데이터 저장 공간을 포함한다. 전체 요청 어드레스를 사용하는 대신 어드레스 히스토리 캐시 내 저장 위치 식별을 사용함으로써 후보 패킷이 압축된 패킷이 되는 때 링크 패킷은 더 많은 후보 패킷을 저장할 수 있다. 따라서 한 번에 더 많은 후보 패킷을 전달할 수 있고 링크 사용이 더 효율적이 된다.
앞서 언급된 큐 중재자 각각은 대응하는 요청 큐로부터 요청을 선택하고 패킹 중재자(packing arbiter)는 하나 이상의 속성에 기초하여 후보 패킷을 선택하고 링크 버퍼에 삽입한다. 이러한 속성의 예로는 나이, 패킷 유형의 우선 순위 레벨, 서비스 품질(quality-of-service) 파라미터, 소스 식별자, 애플리케이션 식별자 또는 유형(가령, 실시간 애플리케이션), 트래픽 유형의 지시자(예를 들어, 실시간 트래픽), 대역폭 요구사항 또는 레이턴시 허용 요구사항, 가상 채널 식별자 등이 있다. 일부 경우, 큐 중재자가 요청 큐로부터 비순차 발행되기 위한 요청을 선택한다.
다양한 실시예에서, 중재 로직은 로직이 비순차적으로 엔트리(entry)를 할당해제하거나, 그 밖의 다른 방식으로 무효화할 때, 요청 큐의 엔트리에 저장된 필드(field)를 업데이트한다. 하나의 예에서, 중재 로직은 특정 요청 큐에서 젊은(young) 제2 요청을 오래된(old) 제1 요청보다 먼저 선택한다. 오래된 제1 요청에 대한 요청 큐 엔트리가 수신기의 어드레스의 일부분을 저장하기 위한 지시자를 저장한다. 더 젊은 제2 요청은 제1 요청에 의해 수신기에 저장될 어드레스의 적어도 일부분에 따라 달라진다. 제2 요청이 비순차 발행 동안 제1 요청을 건너 뛰고, 어드레스의 적어도 일부분이 수신기에서 이용 가능하지 않을 때, 데이터 손상이 발생한다. 다양한 실시예에서, 중재 로직은 이 경우가 발생할 때를 결정하고 더 젊은 제2 요청을 압축 포맷에서 비압축 포맷으로 변경한다. 압축 포맷은 어드레스 히스토리 캐시에 저장 위치의 식별자를 저장하며, 이 것이 다시 어드레스의 일부를 저장하는 반면, 비압축 포맷은 어드레스의 일부를 저장한다. 따라서 중재 로직은 발행 동안 비순차 충돌이 존재할 때를 검출하고 데이터 손상을 방지하기 위해 아웃바운드 패킷을 조정한다.
도 1을 참조하면, 컴퓨팅 시스템(100)의 하나의 실시예의 일반화된 블록도가 도시되어있다. 도시된 바와 같이, 컴퓨팅 시스템(100)은 클라이언트(110) 각각 간 통신 패브릭(120), 메모리 제어기(130), 전력 제어기(170) 및 링크 인터페이스(180)를 포함한다. 일부 실시예에서, 컴퓨팅 시스템(100)의 구성요소는 집적 회로(IC) 상의 개별 다이, 가령, SOC(system-on-a-chip)이다. 또 다른 실시예에서, 구성요소는 SiP(system-in-package) 또는 MCM(multi-chip module) 내 개별 다이이다. 도시된 바와 같이, 클라이언트(110)는 중앙 처리 자치(CPU)(112), 그래픽 처리 장치(GPU)(114), 허브(116) 및 멀티미디어 엔진(118)을 포함한다. CPU(112), GPU(114) 및 멀티미디어 엔진(118)은 애플리케이션을 처리할 수 있는 컴퓨팅 자원의 예시이다. 도시되지 않았지만, 또 다른 실시예에서, 그 밖의 다른 유형의 컴퓨팅 자원이 클라이언트(110)에 포함된다.
일반적으로 말해서, CPU(112)는 주어진 명령 세트 아키텍처(ISA: instruction set architecture)에 따라 명령을 실행하기 위한 하나 이상의 프로세서 코어를 포함한다. 하나 이상의 프로세서 코어는 명령 처리를 위한 수퍼스칼라 및 멀티-스레드 마이크로아키텍처를 사용한다. GPU(114)는 다중 병렬 실행 레인을 포함하는 병렬 데이터 마이크로아키텍처(예를 들어, 단일 명령 다중 데이터(single-instruction-multiple-data), 즉 "SIMD")를 사용한다. 멀티미디어 엔진(118)은 멀티미디어 애플리케이션을 위한 오디오 데이터 및 비디오 데이터를 처리하기 위한 프로세서를 포함한다. 허브(116)는 멀티미디어 엔진(118)과 외부 구성요소, 가령, 비디오 포트, 오디오 포트 등 간 통신을 위한 인터페이스 로직을 포함한다. 또한, 허브(116)는 멀티미디어 엔진(118)과 컴퓨팅 시스템(100) 내 다중 로컬 컴퓨팅 자원 간 통신을 위한 인터페이스 로직을 포함한다.
전력 제어기(170)는 클라이언트(110)로부터의 데이터, 가령, 주어진 샘플 간격 동안 지정된 샘플링된 신호를 수집한다. 온-다이 전류 센서 및 온도 센서(도시되지 않음)는 또한 전력 제어기(170)로 정보를 전송한다. 전력 제어기(170)는 클라이언트(110) 내 컴퓨팅 자원 중 적어도 하나 이상의 컴퓨팅 자원 및 메모리 제어기(130)를 위한 각각의 전력 성능 상태(P-상태)를 선택한다. P-상태는 적어도 동작 전압 및 동작 클록 주파수를 포함한다.
단일 메모리 제어기(130)가 도시되었지만, 또 다른 실시예에서, 컴퓨팅 시스템(100)은 또 다른 개수의 메모리 제어기를 사용한다. 메모리 제어기(130)는 패브릭(120)을 통해 클라이언트(110)로부터 메모리 요청을 수신하고, 메모리 요청을 스케줄링하며, 스케줄링된 메모리 요청을 하나 이상의 시스템 메모리 및 메인 메모리로 전송한다. 메모리 제어기(130)는 또한 시스템 메모리 및 메인 메모리로부터 응답을 수신하고 클라이언트(110) 내 요청의 대응 소스로 응답을 전송한다. 메인 메모리는 I/O 제어기 및 버스(160) 및 메모리 버스(150)를 통해 데이터로 시스템 메모리를 채운다. 메인 메모리는 본래 메모리 요청을 완료하기 위해 클라이언트(110) 내 캐시 메모리 서브시스템 중 대응하는 것으로 요청된 블록이 있는 캐시 채우기 라인(cache fill line)을 전송한다. 클라이언트(110) 내 캐시 메모리 서브시스템 중 대응하는 것은 캐시 채우기 라인을 하나 이상의 캐시 레벨에 배치한다.
컴퓨팅 시스템(100)의 어드레스 공간은 적어도 CPU(112), GPU(114) 및 멀티미디어 엔진(118) 및 하나 이상의 그 밖의 다른 구성요소, 가령, 입/출력(I/O) 주변 디바이스(도시되지 않음) 및 그 밖의 다른 유형의 컴퓨팅 자원으로 분할된다. 어느 어드레스가 어느 구성요소로 매핑되어야 하는지를 결정하기 위해, 따라서 CPU(112), GPU(114) 및 멀티미디어 엔진(118) 중 어느 것에 특정 어드레스에 대한 메모리 요청이 라우팅되어야 하는지를 결정하기 위해, 메모리 맵이 유지된다. 시스템 메모리는 다양한 동적 랜덤 액세스 메모리(DRAM: Dynamic Random Access Memory) 중 하나이며 메모리 제어기(130)는 대응하는 프로토콜을 지원한다. 프로토콜은 정보 전송을 위해 사용되는 값, 가령, 클록 사이클 당 데이터 전송 횟수, 신호 전압 레벨, 신호 타이밍, 신호 및 클록 위상 및 클록 주파수를 결정한다. 메인 메모리는 데이터의 다양한 유형의 비휘발성, 랜덤 액세스 보조 스토리지 중 하나이다. 메인 메모리의 예로는 하드 디스크 드라이브(HDD) 및 솔리드 스테이트 디스크(SSD)가 있다.
통신 패브릭(120)(또는 패브릭(120))은 클라이언트(110)와 메모리 제어기(130) 간에 트래픽을 이리 저리 전송하고 각자의 통신 프로토콜을 지원하기 위한 인터페이스를 포함한다. "트래픽"은 데이터, 가령, 커맨드, 메시지, 프로브, 인터럽트, 및 커맨드 및 메시지에 대응하는 데이터를 포함한다. 패브릭(120)은 요청 및 응답을 저장하기 위한 큐를 포함한다. 패브릭(120)은 또한 내부 네트워크를 가로질러 요청을 전송하기 전에 수신된 요청들 간에 중재하기 위한 선택 로직을 포함한다. 패브릭(120) 내 추가 로직은 패킷을 구축 및 디코딩 할뿐만 아니라 패킷에 대한 경로를 선택한다.
패브릭 전송 인터페이스(FTI: Fabric transport interface)(180)는 링크를 통해 트래픽을 전송함으로써 컴퓨팅 시스템(100)과 타 컴퓨팅 시스템 또는 처리 노드 간의 통신을 지원한다. 링크를 통해 전송되는 트래픽은 하나 이상의 처리 노드에 대한 동작 상태의 지시자, 전원 차단 요청, 요청에 대한 응답, 인터럽트 및 그 밖의 다른 정보를 포함한다. 도시된 바와 같이, 클라이언트(110)는 CPU(112)를 위한 FTI(113), GPU(114)를 위한 FTI(115) 및 허브(116)를 위한 FTI(117)를 포함한다. 또한, 메모리 제어기(130)는 FTI(132)를 포함하고, 반면에 전력 제어기(170)는 FTI(172)를 포함한다. 각각의 패브릭 전송 인터페이스(113, 115, 117, 132, 172 및 180)는 패킷 송신기와 패킷 수신기를 포함한다. 패브릭(120)은 설명의 편의를 위해 도시되지 않은 다중 패브릭 전송 인터페이스를 포함한다. 일부 실시예에서, 패브릭 전송 인터페이스에 연결된 각각의 링크는 점대점(point-to-point) 통신 채널이다. 또 다른 실시예에서, 패브릭 전송 인터페이스에 연결된 하나 이상의 링크는 종단간(end-to-end) 통신 채널이다.
패브릭 전송 인터페이스는 통신을 위한 제어 로직 및 버퍼 또는 큐를 포함한다. 물리 레벨에서, 링크는 하나 이상의 레인을 포함한다. 패브릭 전송 인터페이스 및 대응하는 링크는 통신 프로토콜 연결, 가령, PCIe(Peripheral Component Interconnect Express), InfiniBand, RapidIO, HyperTransport, AXI(Advanced eXtensible Interface) 등을 포함한다. 각각의 패브릭 전송 인터페이스(113, 115, 117, 132, 172 및 180)는 각자의 유형의 요청을 저장하기 위한 다중 요청 큐를 포함한다. 또한, 각각의 패브릭 전송 인터페이스(113, 115, 117, 132, 172 및 180)는 하나 이상의 요청 큐에 대응하는 하나 이상의 어드레스 히스토리 캐시를 포함한다. 어드레스 히스토리 캐시는 요청 어드레스의 적어도 일부분을 저장한다. 상이한 물리적 디바이스로부터의 요청의 스트림이 어드레스 지역성을 갖기 때문에 어드레스 히스토리 캐시는 링크의 양측에 요청 어드레스의 상위 부분을 저장한다.
각각의 패브릭 전송 인터페이스(113, 115, 117, 132, 172 및 180)는 다양한 목적을 위한 제어 로직을 포함한다. 예를 들어, 요청을 수신하고 요청 큐에 엔트리를 할당할 때 제어 로직은 어드레스 히스토리 캐시를 액세스하여 어드레스 히스토리 캐시가 요청 어드레스의 일부분을 이미 저장했는지 여부를 결정할 수 있다. 요청 큐에 엔트리를 할당하는 동안, 제어 로직은 큐 엔트리 내 필드를 업데이트하여, 아웃바운드 패킷이 어드레스 히스토리 캐시 내 저장 위치의 식별을 이용하는지 또는 요청 어드레스를 이용하는지를 가리킬 수 있다. 또한, 제어 로직은 다수의 요청 큐 중 각각으로부터의 요청을 각각 선택하기 위한 다수의 큐 중재자를 포함한다. 큐 중재자는 비순차 발행되기 위해 요청 큐로부터 요청을 선택한다. 큐 중재자는 비순차 충돌이 존재할 때를 결정하고 데이터 손상을 피하기 위해 아웃바운드 패킷과 상기 큐 엔트리에 저장된 필드 모두를 조절한다.
하나의 예에서, 큐 중재자는 더 젊은 제2 요청을 발행되도록 선택함으로써 요청 큐에서 오래된 제1 요청을 건너 뛴다. 제1 요청에 대한 큐 엔트리는 수신기에 요청 어드레스의 일부분을 저장하기 위한 지시자를 저장한다. 따라서 요청 어드레스의 이 부분은 아직 수신기에 저장되어 있지 않다. 제2 요청에 대한 큐 엔트리는 요청 어드레스의 일부분을 원격 어드레스 히스토리 캐시로부터 불러오기 위한 지시자를 수신기에 저장한다. 제2 요청에 대한 이 큐 엔트리는 원격 어드레스 히스토리 캐시 내 저장 위치의 식별자를 역시 수신기에 저장한다. 큐 중재자는 이 경우가 발생할 때를 결정하고 저장 위치의 식별자를 이용하는 압축 포맷으로부터 요청 어드레스의 일부분을 이용하는 비압축 포맷으로 더 젊은 제2 요청을 변경한다. 예상 압축 포맷에서 비압축 포맷으로 제2 요청을 변경함으로써, 송신기 내 큐 중재자는 수신기에서의 데이터 손상을 피한다.
컴퓨팅 시스템(100) 내 패브릭 전송 인터페이스(113, 115, 117, 132, 172 및 180) 중 하나 이상은 또한 다중 후보 패킷을 저장하기 위한 데이터 저장 공간을 포함하는 링크 패킷을 저장하기 위한 버퍼를 포함한다. 일부 실시예에서, 다수의 요청 큐 중 둘 이상은 상이한 크기의 후보 패킷을 저장한다. 패브릭 전송 인터페이스 내 패킹 중재자는 다수의 요청 큐로부터 적격 후보 패킷을 선택하고 이들 후보 패킷을 링크 패킷에 삽입한다. 후보 패킷이 원격 어드레스 히스토리 캐시 내 저장 위치의 식별자를 수신기에서 저장하는 압축 패킷인 때, 패킹 중재자는 더 많은 후보 패킷을 링크 패킷에 삽입할 수 있다. 패킹 중재자는 또한 링크 패킷이 주어진 후보 패킷에 대한 주어진 경계 상에 할당된 잔여 가용 데이터 저장 공간을 갖는지 여부를 결정한다. 패브릭 전송 인터페이스 내 패킷 수신기는 패킷 송신기에 의해 전송된 링크 패킷을 수신하기 위한 수신 큐를 포함한다.
도 2를 참조하면, 패킷 송신기(200)의 하나의 실시예의 일반화된 블록도가 도시된다. 패킷 송신기(200)는 요청 큐(230) 및 대응하는 어드레스 히스토리 캐시(220)를 포함한다. 패킷 송신기(200)가 단일 요청 큐 및 단일 대응하는 어드레스 히스토리 캐시를 포함하지만, 또 다른 실시예에서, 패킷 송신기(200)는 다른 수의 이러한 구성요소를 사용한다. 패킷 송신기(200)는 온-칩 네트워크 또는 패브릭으로부터 아웃바운드 오프-칩 링크로 전송되기 위한 요청(210)을 수신한다. 요청(210)은 적어도 소스 식별자(ID) 및 어드레스(216)를 포함한다. 도시된 바와 같이, 소스 식별자는 프로세서 식별자(PID)(212) 및 스레드 식별자(TID)(214)를 포함한다. 또 다른 실시예에서, 소스 식별자는 프로세스 ID 및 애플리케이션 ID 중 하나 이상을 더 포함한다. 요청(210) 내 그 밖의 다른 정보(도시되지 않음)는 요청(210)이 읽기 동작 또는 쓰기 동작임을 나타내는 요청 유형을 포함한다.
설명의 편의를 위해 도시되지 않은 제어 로직은 소스 식별자로 어드레스 히스토리 캐시(220)를 인덱스한다. 일부 설계에서, 어드레스 히스토리 캐시(220)는 직접 매핑된 캐시이다. 또 다른 설계에서, 어드레스 히스토리 캐시(220)는 임의의 세트 연관성(set associativity)을 가진다. 인덱스로서 사용될 때, 소스 식별자는 어드레스 히스토리 캐시(220)에서 특정 세트를 식별한다. 제어 로직은 식별된 세트 내 웨이들 중 임의의 하나가 캐시 적중을 생성하는지 여부를 결정하기 위한 태그로서 어드레스(216)의 일부분을 이용한다. 상이한 물리적 디바이스로부터의 요청의 스트림이 어드레스 지역성을 갖기 때문에, 어드레스 히스토리 캐시(220)는 요청에 대한 어드레스(216)의 일부를 저장한다. 하나의 예에서, 어드레스 히스토리 캐시(220)는 어드레스(216)의 상위 부분을 저장한다. 따라서, 본 명세서에서 사용될 때, 어드레스 히스토리 캐시(220)의 "웨이(way)"는 "스트림(stream)"으로도 지칭된다. 어드레스 히스토리 캐시(220)의 룩업이 캐시 적중을 생성하는 경우, 어드레스 히스토리 캐시(220)에 대한 제어 로직은 요청 큐(230)에 대한 제어 로직으로 적중을 생성한 특정 웨이의 웨이 식별자(ID)를 전송한다. 실시예에서, 어드레스 히스토리 캐시(220)로부터 요청 큐(230)로 전송된 큐 업데이트(222)는 적어도 웨이 ID를 포함한다.
어드레스 히스토리 캐시(220)의 룩업이 캐시 부적중을 생성하는 경우, 어드레스 히스토리 캐시(220)에 대한 제어 로직은 세트 내에서 특정 웨이를 선택한다. 일부 경우, 제어 로직이 세트 내 특정 웨이를 선택하기 위해 LRU(least recently used) 방식을 사용한다. 다른 경우, 제어 로직은 세트 내 특정 웨이를 선택하기 위해 다양한 다른 스킴 중 임의의 하나를 이용한다. 그 후, 제어 로직은 어드레스 히스토리 캐시(220)의 선택된 세트 내에서 특정 웨이에 어드레스(216)의 적어도 일부분, 가령, 상위 부분을 저장한다. 도시된 바와 같이, 어드레스 히스토리 캐시(220)로부터 요청 큐(230)로 전송된 큐 업데이트(222)가 적어도 캐시 적중/부적중 결과의 지시자를 포함한다. 도시된 바와 같이, 큐 업데이트(222)는 또한 어드레스(216)의 적어도 일부를 현재 저장하는 웨이 ID를 포함한다.
요청 큐(230)는 정보를 저장하기 위한 다수의 엔트리(232a-232g)를 포함한다. 다양한 실시예에서, 엔트리(232a-232g) 각각은 적어도 필드(240-254)를 저장한다. 필드(240 및 242)는 소스 식별자 정보, 가령, 프로세서 ID 및 스레드 ID를 저장한다. 또 다른 실시예에서, 소스 식별자는 그 밖의 다른 정보, 가령, 프로세스 ID 및 애플리케이션 ID를 더 포함한다. 도시된 바와 같이, 필드(244)는 가상 채널 ID를 저장한다. 여러 다른 물리적 디바이스로부터의 요청 스트림은 동일한 물리적 링크를 통해 가상화된 채널(VC)을 통해 흐른다. 중재 로직은 발행될 요청을 선택할 때 적어도 엔트리(232a-232g)에 저장된 가상 채널 ID 및 가상 채널의 우선 순위 레벨을 사용한다.
필드(246)는 어드레스(216)의 적어도 일부를 저장한다. 필드(248)는 캐시 로드의 지시자를 저장한다. 예를 들어, 어드레스 히스토리 캐시(220)로의 룩업이 캐시 부적중을 도출했고 수신된 어드레스(216)의 적어도 일부분이 어드레스 히스토리 캐시(220)에 저장, 또는 로딩된 경우, 필드(248)는 어서트(assert)된 값을 저장한다. 하나의 예에서, 어서트된 값은 수신된 요청(210)에 대해 캐시 로드가 발생했음을 나타내는 데 사용되는 이진 '1'이다. 또 다른 예에서, 이진 값 '0'은 어서트된 값을 나타내기 위해 사용된다. 필드(250)는 어드레스 히스토리 캐시(220)의 이전 검색이 수신된 요청(210)에 대응하는 어드레스를 찾았음을 특정하는 지시자를 저장한다. 즉, 캐시 적중 필드(250)는 수신된 요청(210)에 대한 어드레스 히스토리 캐시(220)의 이전 룩업 동안 캐시 적중이 발생했는지 여부에 대한 지시자를 저장한다. 어드레스 히스토리 캐시(220) 로의 룩업이 캐시 히트를 도출한 경우, 필드(250)는 어서트된 값을 저장한다.
필드(252)는 수신된 어드레스(216)의 적어도 일부를 현재 저장하는 선택된 세트 내 어드레스 히스토리 캐시(220) 내 웨이의 지시자를 저장한다. 캐시 적중이 발생하면, 필드(252)에 의해 식별된 특정 웨이는 수신된 어드레스(216)의 적어도 일부분을 이미 저장했다. 그러나 캐시 부적중이 발생하는 경우, 교체 스킴이 필드(252)에 의해 식별되는 특정 웨이를 선택했고, 이 특정 웨이는 캐시 부적중 후 여기로 로딩되는 수신된 어드레스(216)의 적어도 일부분을 가졌다. 엔트리(232a-232g)에 포함되지만 도시되지 않은 그 밖의 다른 필드가 엔트리가 할당된 엔트리의 정보를 저장하는지 여부를 가리키는 상태 필드를 포함한다. 이러한 지시자는 유효 비트를 포함한다. 또 다른 필드는 요청 유형의 지시자를 저장한다. 일부 실시예에서, 추가 필드는 엔트리 위치가 나이(age)를 가리키지 않을 때 나이를 저장한다.
일부 실시예에서, 큐 중재자(260)가 필드(250)에 어서트된 값을 저장하는 엔트리를 선택할 때, 패킷 송신기(200)는 압축된 패킷으로서 FTI 후보 패킷(270)을 전송한다. 예를 들어, 패킷 송신기(200)는 전체 요청 어드레스 대신 아웃바운드 압축 패킷으로 소스 식별자 및 웨이 ID를 전송한다. 수신기에서, 제어 로직은 소스 식별자 및 웨이 ID, 가령, 필드(240-242) 및 필드(252)를 이용해 수신기에서 어드레스 히스토리 캐시를 액세스할 수 있다. 패킷 송신기(200) 내 로컬 어드레스 히스토리 캐시(220)와 유사하게, 수신기에서의 이 원격 어드레스 히스토리 캐시는 요청 어드레스의 적어도 일부분을 저장한다. 따라서, 패킷 송신기(200)는 링크를 통해 아웃바운드 압축 패킷을 전송할 때 링크를 통해 요청 어드레스의 적어도 일부분을 수신기로 전송하지 않는다.
일부 실시예에서, 제어 로직은 순차적으로 요청 큐(230)에 엔트리(232a-232g)를 할당함으로써, 엔트리(232a-232g)의 엔트리 위치가 나이를 나타낸다. 제어 로직이 비순차적 방식으로 요청 큐(230)에 엔트리(232a-232g)를 할당하는 경우, 엔트리(232a-232g)는 추가 나이 필드를 저장한다. 다양한 실시예에서, 제어 로직은 비순차적 방식으로 요청 큐(230) 내 엔트리(232a-232g)를 할당 해제한다. 앞서 기재된 바와 같이, 여러 다른 물리적 디바이스로부터의 요청 스트림은 동일한 물리적 링크를 통해 가상화된 채널(VC)을 통해 흐른다. 때때로 클라이언트는 패킷 송신기(200)가 수신한 순서와 상이한 순서로 아웃바운드 링크를 통해 다른 VC로부터 요청을 전송한다. 예를 들어, 큐 중재자(260)는 하나 이상의 속성에 기초하여 FTI 후보 패킷(270)을 생성하는 데 사용되기 위해 엔트리(232a-232g) 중 하나를 선택한다. 하나 이상의 속성의 예로는 요청 유형의 우선 순위 레벨, 서비스 품질(quality-of-service) 파라미터, 소스 식별자, 애플리케이션 식별자 또는 유형, 가령, 실시간 애플리케이션, 트래픽 유형의 지시자, 예를 들어, 실시간 트래픽, 대역폭 요구사항 또는 레이턴시 허용 요구사항, 가상 채널 식별자 등이 있다. 상이한 순서는 시스템 레벨 교착 상태를 방지한다.
필드(254)는 캐시 로드 매칭의 지시자를 저장한다. 제2 요청에 대한 캐시 로드 매칭은 캐시 로드 필드(248)에 대한 어서트된 값을 저장하는 동일한 소스로부터의 요청 큐(230) 내 제2 요청보다 오래된 제1 요청을 가리킨다. 따라서, 이 오래된 제1 요청은 수신기의 원격 어드레스 히스토리 캐시로 로딩되는 자신의 어드레스 중 적어도 일부분을 가져야 한다. 다시 말해서, 캐시 로드 매칭 필드(254)는 요청 큐(230)가 더 젊은 제2 요청에 대응하는 어드레스를 수신기에 저장할 제1 요청에 대한 유효한 제2 엔트리를 갖는지 여부를 특정한다. 제1 요청 및 제2 요청 각각은 동일한 소스로부터 온다. 즉, 제1 요청과 제2 요청 각각에 대한 요청 큐(230) 내 엔트리는 필드(240, 242 및 252)에 동일한 값을 저장한다. 제어 로직이 어드레스가 수신기에 저장될 것임을 특정하는 지시자로 제1 요청이 요청 큐(230)에 저장된 제2 요청보다 오래된 요청들 중 가장 젊은 요청임을 결정할 때 캐시로드 매칭 필드(254)는 어서트된 값을 저장한다. 따라서, 오래된 제1 요청이 요청 어드레스의 적어도 일부분을 수신기에 저장해야 하기 때문에, 제2 요청은 더 오래된 제1 요청에 종속된다. 요청 어드레스의 적어도 일부분이 수신기에 저장될 때, 제어 로직은 더 젊은 제2 요청을 압축 패킷으로서 전송한다.
큐 중재자(260)가 엔트리를 비순차적으로 할당해제할 때 큐 중재자(260) 또는 또 다른 제어 로직은 요청 큐(230)의 엔트리(232a-232g)에 저장된 필드(240-254) 중 하나 이상을 업데이트한다. 하나의 예에서, 큐 중재자(260)는 할당 해제를 위한 더 젊은 제2 요청을 선택하고, 이는 요청 큐(230)에서 더 오래된 제1 요청을 건너 뛰는 것이다. 더 오래된 제1 요청을 저장하는 요청 큐(230) 내 엔트리가 어드레스의 일부분을 수신기에 저장하기 위한 지시자를 포함한다. 더 젊은 제2 요청은 수신기에 이미 저장된 어드레스의 일부분에 따라 다르다. 큐 중재자(260)는 이 경우가 발생할 때를 결정하고 더 젊은 제2 요청을 압축 포맷에서 비압축 포맷으로 변경한다. 압축 포맷은 저장 위치의 식별자, 가령, 필드(240, 242 및 252)에 저장된 값을 저장한다. 비압축 포맷은 어드레스의 일부분, 가령, 필드(246)에 저장된 값을 저장한다. 요청 큐(230)로부터의 비순차적 발행에 의해 야기되는 상기 케이스를 검출함으로써, 큐 중재자(260)는 데이터 손상이 수신기에서 발생하지 않도록 막는다.
도 3을 참조하면, 요청 큐(300)의 하나의 실시예의 일반화된 블록도가 도시된다. 앞서 기재된 회로 및 로직은 동일하게 넘버링된다. 도시된 바와 같이, 요청 큐(300)는 큐(310) 및 제어 로직(320)을 포함한다. 요청 큐(310)는 적어도 필드(240-254)를 갖는 엔트리에 정보를 저장한다. 큐(310)의 엔트리는 도시되지 않은 다른 필드, 가령, 상태 필드를 저장한다. 상태 필드는 엔트리가 할당되었는지 여부에 대한 지시자를 저장한다. 이러한 지시자는 하나의 예에서 유효 비트를 포함한다. 또 다른 필드는 요청 유형의 지시자를 저장한다. 일부 실시예에서, 요청 큐(300)는 어서트된 값을 저장하는 캐시 로드 필드(248)를 갖는 특정 엔트리를 추적하고 상기 특정 엔트리에 종속적인 어서트된 값을 저장하는 캐시 적중 필드(250)를 갖는 큐(310) 내 할당된 엔트리의 대응하는 수를 추적하는 테이블(330)을 더 포함한다. 예를 들어, 테이블(330)의 제1 엔트리는 엔트리 8의 지시자를 저장한다. 큐(310)의 엔트리 8은 캐시로드 필드(248)에 어서트된 값을 저장한다. 또한, 테이블(330)의 이 제1 엔트리는 엔트리 8에 대응하는 어서트된 캐시 적중 필드(250)를 갖는 큐(310) 내 다수의 할당된 엔트리에 대해 1의 카운트를 저장한다. 여기서, 1의 카운트는 엔트리 7을 지칭한다.
제어 로직(320)이 나이를 나타내기 위해 엔트리 위치를 사용하지 않을 때, 큐(310)의 엔트리 내 추가 필드(도시되지 않음)가 나이를 저장한다. 도시된 바와 같이, 제어 로직(320)은 큐(310)를 나이에 따라 순차적으로 할당하고 큐(310)의 상부 쪽일수록 젊은 요청을 저장하고, 반면에 제어 로직(320)은 큐(310)의 하부 쪽일수록 오래된 요청을 저장한다. 또 다른 실시예에서, 제어 로직(320)은 큐(310)에 요청을 저장하기 위해 역 나이순을 이용한다. 큐(310)의 엔트리 7-8, 15, 20, 32 및 43-44 각각은 동일한 소스, 가령, ID 2를 갖는 프로세서, ID 6을 갖는 스레드, ID 3을 갖는 웨이로부터의 정보를 저장한다. 엔트리 44에 저장된 요청이 이 그룹의 가장 오래된 요청이며, 반면에 엔트리 7에 저장된 요청은 이 그룹의 가장 젊은 요청이다.
엔트리 8, 32 및 44에 할당된 요청은 캐시 로드 필드(248)에 어서트된 값을 저장한다. 앞서 기재된 바와 같이, 일부 경우에 이진 값 '1'은 어서트된 값을 나타낸다. 따라서 엔트리 8, 32 및 44에 대응하는 요청은 송신기의 로컬 어드레스 히스토리 캐시의 룩업 동안 캐시 부적중을 생성했고, 이들 각자의 어드레스 또는 어드레스의 일부분이 송신기의 로컬 어드레스 히스토리 캐시로 로딩되었다. 엔트리 44에 할당된 요청은 자신의 요청 어드레스 0x670가 캐시 부적중으로 인해 송신기의 로컬 어드레스 히스토리 캐시로 로딩되게 했다. 여기서 "0x"는 16 진수 형식을 의미한다. 엔트리 32에 할당된 요청은 자신의 요청 어드레스 0x100가 캐시 부적중으로 인해 송신기의 로컬 어드레스 히스토리 캐시로 로딩되게 했다. 엔트리 8에 할당된 요청은 캐시 부적중으로 인해 요청 어드레스 0x330가 송신기의 로컬 어드레스 히스토리 캐시에 로딩되게 했다.
엔트리 7, 15, 20 및 43에 할당된 각각의 요청은 캐시 적중 필드(250)에 어서트된 값을 저장한다. 따라서, 대응하는 요청이 송신기의 로컬 어드레스 히스토리 캐시의 룩업 동안 캐시 적중을 생성했다. 외부 발행 로직(external issue logic)이 각자의 어드레스 또는 자신의 어드레스의 일부분을 대응하는 패킷에 삽입하지 않는 경우, 이들 패킷이 압축 패킷이고 링크의 효율을 개선한다. 압축 패킷의 경우, 수신기는 필드(240-242 및 252)를 사용하여 수신기의 원격 어드레스 히스토리 캐시를 액세스하여 이전에 수신기에 저장된 요청 어드레스를 검색 불러올 수 있다.
도시된 바와 같이, 엔트리 44에 할당된 요청만이 필드(254)(캐시 로드 매칭 필드)에 클리어(clear)된(부정(negate)된) 값을 저장한다. 앞서 기재된 바와 같이, 제2 요청에 대한 캐시 로드 매칭은 동일한 소스로부터 큐(310) 내에 있는 더 오래된 제1 요청이 캐시 로드 필드(248)에 대해 어서트된 값을 저장함을 가리킨다. 따라서 제어 로직(320)이 수신기로 이 더 오래된 제1 요청을 전송하자마자, 이 더 오래된 제1 요청이 자신의 어드레스의 적어도 일부분이 송신기의 로컬 어드레스 히스토리 캐시 및 수신기의 원격 어드레스 히스토리 캐시에 저장되게 해야 한다. 예시된 예에서, 엔트리 44에 할당된 요청만이 이의 요청 어드레스가 송신기의 적어도 로컬 어드레스 히스토리 캐시에 저장되게 한 동일한 소스로부터의 오래된 요청을 갖지 않는다.
앞서 기재된 바와 같이, 일부 실시예에서, 제어 로직(320)은 비순차적 방식으로 큐(310) 내 엔트리를 할당해제한다. 일부 경우에, 제어 로직(320)은 비순차 방식으로 할당해제될 큐(310)의 엔트리를 선택하지만, 실제 할당해제는 나중에 발생한다. 중재 로직은 일부 설계에서는 제어 로직(320)에 포함되지만 다른 설계에서는 제어 로직(320)과 별도로 위치한다. 큐(310) 아래에, 요청을 발행할 때 큐(310) 내 엔트리를 할당해제(무효화)하는 네 가지 케이스가 나타난다.
케이스 1: 엔트리 32 이전에 발행되도록 엔트리 20이 선택됨
케이스 1의 경우, 제어 로직(320)은 엔트리 32에 할당된 더 오래된 요청에 앞서, 할당해제되도록 엔트리 20에 할당된 더 젊은 요청을 선택한다. 이러한 경우, 제어 로직(320)은 엔트리 20에 할당된 더 젊은 요청에 대한 결과적 패킷을, 예상 압축 패킷이 아니라, 비압축 패킷으로서 전송한다. 제어 로직(320)은 수신기가 엔트리 32에 할당된 더 오래된 요청으로부터의 요청 어드레스를 갖지 않기 때문에, 어드레스 필드(246) 내 요청 어드레스(가령, 0x100)를 비압축 패킷으로 전송한다.
도시된 실시예에서, 캐시로드 매치 필드(254)의 어서트된 값이 제어 로직(320)이 엔트리 20에 할당된 선택된 더 젊은 요청을 예상 압축 패킷으로부터 비압축 패킷으로 변환해야 함을 나타낸다. 엔트리 20 및 32에 할당된 요청에 대해 유사한 방식으로, 제어 로직(320)이 엔트리 32 이전에 발행될 엔트리 15를 선택할 때와 같이 엔트리 15 및 32에 할당된 요청은 케이스 1이 이들에 대해서도 발생되게 한다. 마찬가지로, 제어 로직(320)이 엔트리 8 이전에 발행되도록 엔트리 7을 선택할 때와 같이 케이스 1이 엔트리 7-8에 할당된 요청에 대해서도 발생된다. 마찬가지로, 제어 로직(320)이 엔트리 44 이전에 발행되도록 엔트리 43를 선택할 때와 같이 케이스 1이 또한 엔트리 7-8 및 43-44에 할당된 요청에 대해서도 발생된다. 다른 경우에, 제어 로직(320)은 엔트리 32에 할당된 더 오래된 요청 이후에 엔트리 20에 할당된 더 젊은 요청을 선택한다. 이 경우, 필드(254) 내 클리어되거나 부정된 값이 엔트리 20에 할당된 선택된 더 ??은 요청이 예상 압축 패킷으로 유지됨을 나타낸다.
케이스 2: 엔트리 15, 20, 32 및 43-44 이전에 발행되도록 엔트리 8이 선택됨
케이스 2의 경우, 제어 로직(320)은 엔트리 15, 20, 32 및 43-44에 할당된 더 오래된 요청 중 하나 이상에 앞서, 할당해제되도록 엔트리 8에 할당된 더 젊은 요청을 선택한다. 이러한 경우에, 제어 로직(320)은 엔트리 8에 할당된 더 젊은 요청에 대해 생성된 패킷을 예상된 비압축 패킷으로서 전송한다. 앞서 기재된 바와 같이, 엔트리 8에 할당된 요청은 캐시 로드 필드(248)에 어서트된 값을 저장한다. 따라서, 요청은 송신기의 로컬 어드레스 히스토리 캐시의 룩업 동안 캐시 부적중을 생성했으며, 각자의 어드레스 또는 어드레스의 일부분이 로컬 어드레스 히스토리 캐시로 로딩되었다. 제어 로직(320)이 엔트리 8에 할당된 선택된 요청에 대해 예상되는 비압축 패킷을 생성했지만, 제어 로직(320)은 엔트리 15, 20, 32 및 43-44에 할당된 하나 이상의 여전히 할당된 더 오래된 요청에 대한 업데이트를 수행한다. 비순차 발행과 엔트리 15 및 20에 할당된 요청에 의해 사용되는 어드레스 0x100 및 엔트리 43에 할당된 요청에 의해 사용되는 어드레스 0x670가 저장되는 것을 대신하여, 수신기에서 어드레스 0x330가 저장되는 것 때문에, 제어 로직(320)은 이들 더 오래된 요청에 대해 생성된 패킷을 압축 패킷으로서 전송할 수 없다. 따라서, 업데이트를 수행하기 위해, 제어 로직(320)은 엔트리 8에 할당된 요청과 동일한 소스로부터의 모든 오래된 요청을 검색하고 이 검색으로부터 발견된 임의의 요청에 대한 특정 필드를 업데이트한다.
앞서 기재된 바와 같이, 제어 로직(320)은 필드(240-242 및 252)(예를 들어, PID 2, TID 6 및 웨이 3)로 소스를 식별한다. 엔트리 8에 할당된 요청과 동일한 소스로부터의 요청을 저장하는 엔트리는 엔트리 15, 20, 32 및 43-44에 할당된 더 오래된 요청을 포함한다. 식별된 엔트리 15, 20, 32 및 43-44에 대해, 제어 로직(320)은 캐시 로드 필드(248) 및 캐시 적중 필드(250) 각각을 클리어한다. 따라서, 수신기는 엔트리 15, 20, 32 및 43-44에 할당된 요청에 대해 대응하는 수신된 패킷에 대해 이의 원격 어드레스 히스토리 캐시를 사용하지 않는다.
앞서 기재된 바와 같이 요청 큐(300)에 저장된 더 오래된 요청을 업데이트하는 것에 추가로, 캐시 로드 필드(248)가 엔트리 8에 어서트된 값을 저장할 때 제어 로직(320)은 또한 엔트리 8에 할당된 요청보다 젊은 임의의 요청을 업데이트한다. 도시된 예에서, 제어 로직(320)은 캐시 로드 필드(248)에 저장된 어서트된 값을 갖는 동일한 소스로부터의 큐(310) 내 더 젊은 엔트리를 검색한다. 이러한 엔트리가 존재하지 않는다. 따라서, 제어 로직(320)은 동일한 소스로부터의 요청에 대해 할당된 엔트리를 식별하기 위해 나이순으로 가장 오래된 엔트리부터 가장 젊은 엔트리에서 엔트리 8과 엔트리 1 간 검색을 수행한다. 이 특정 경우에, 검색은 캐시 적중 필드(250)에 어서트된 값을 저장하는 엔트리 7을 찾는다. 제어 로직(320)은 엔트리 7에 대한 캐시로드 매치 필드(254)를 클리어한다. 따라서 나중에 제어 로직(320)이 엔트리 7에 할당된 요청을 선택할 때, 제어 로직(320)은 압축 패킷을 생성한다. 제어 로직(320)이 더 오래된 엔트리 8를 이미 발행했기 때문에 요청 어드레스 또는 요청 어드레스의 일부분이 수신기의 원격 어드레스 히스토리 캐시에 저장되므로, 제어 로직(320)은 압축 패킷을 생성한다.
케이스 3: 엔트리 32가 먼저 발행되도록 선택됨
케이스 3의 경우, 제어 로직(320)은 엔트리 43-44에 할당된 더 오래된 요청 중 하나 이상보다 앞서 그리고 엔트리 7-8, 15 및 20에 할당된 더 젊은 요청 중 하나 이상보다 앞서, 할당해제되도록 엔트리 32에 할당된 더 젊은 요청을 선택한다. 동일한 소스로부터의 다수의 더 젊은 요청이 있고 캐시로드 필드(248)에 저장된 어서트된 값을 갖는 하나의 더 젊은 요청이 존재하는 것을 제외하고, 케이스 3은 케이스 2와 유사하다. 케이스 3의 경우, 제어 로직(320)은 엔트리 32에 할당된 요청에 대해 생성된 패킷을 예상된 비압축 패킷으로서 전송한다. 앞서 기재된 바와 같이, 엔트리 32에 할당된 요청은 캐시 로드 필드(248)에 어서트된 값을 저장한다. 따라서, 요청은 송신기의 로컬 어드레스 히스토리 캐시의 룩업 동안 캐시 부적중을 생성했으며, 각자의 어드레스 또는 어드레스의 일부분이 로컬 어드레스 히스토리 캐시로 로딩되었다.
제어 로직(320)이 엔트리 32에 할당된 선택된 요청에 대해 예상되는 비압축 패킷을 생성했지만, 제어 로직(320)은 엔트리 43-44에 할당된 하나 이상의 여전히 할당된 상태의 더 오래된 요청뿐 아니라 엔트리 7-8, 15 및 20에 할당된 하나 이상의 여전히 할당된 상태의 더 젊은 요청에 대한 업데이트를 수행한다. 제어 로직(320)은 엔트리 43에 할당된 더 오래된 요청에 대해 생성된 패킷을 압축 패킷으로서 전송할 수 없다. 도시된 바와 같이, 엔트리 43에 할당된 더 오래된 요청은 캐시 적중 필드(250)에 어서트된 값을 저장한다. 비순차 발행과, 엔트리 43에 할당된 요청에 의해 사용되는 어드레스 0x670를 대신하여 수신기에 어드레스 0x100의 저장함으로써, 제어 로직(320)이 패킷을 압축 패킷으로서 전송한 경우 데이터 손상이 발생될 것이다. 데이터 손상을 막기 위해, 제어 로직(320)은 엔트리 32에 할당된 요청과 동일한 소스로부터의 큐(310) 내 임의의 더 오래된 요청을 검색한다. 엔트리 32에 할당된 요청과 동일한 소스로부터의 더 오래된 요청을 저장하는 엔트리가 엔트리 43-44에 할당된 요청을 포함한다. 식별된 엔트리 43-44의 더 오래된 요청에 대해, 제어 로직(320)은 캐시 로드 필드(248) 및 캐시 적중 필드(250) 각각을 클리어한다. 따라서, 수신기는 엔트리 43-44에 할당된 요청에 대한 대응하는 수신된 패킷에 대해 자신의 원격 어드레스 히스토리 캐시를 사용하지 않는다.
앞서 기재된 바와 같이 큐(310)에 저장된 더 오래된 요청을 업데이트하는 것 외에도, 캐시 로드 필드(248)가 어서트된 값을 저장할 때 제어 로직(320)은 또한 엔트리 32에 할당된 요청보다 젊은 임의의 요청을 업데이트한다. 도시된 예에서, 제어 로직(320)은 캐시로드 필드(248)에 저장된 어서트된 값을 갖는 동일한 소스로부터의 더 젊은 엔트리를 검색한다. 제어 로직(320)은 엔트리 8을 찾는다. 따라서, 제어 로직(320)은 동일한 소스로부터의 요청에 대해 할당된 엔트리를 식별하기 위해 나이순으로 가장 오래된 엔트리부터 가장 젊은 엔트리에서 엔트리 8과 엔트리 32 간 검색을 수행한다. 이 특정 경우에, 제어 로직(320)은 엔트리 15 및 20을 찾고, 엔트리 15 및 20 각각은 캐시 적중 필드(250)에 저장된 어서트된 값을 가진다. 제어 로직(320)은 엔트리 15 및 20에 대해 필드(254)를 클리어한다. 따라서, 나중에 제어 로직(320)이 엔트리 15 및 20에 할당된 요청을 선택할 때, 제어 로직(320)은 압축 패킷을 생성한다. 제어 로직(320)이 더 오래된 엔트리 32를 이미 발행했기 때문에 요청 어드레스 또는 요청 어드레스의 일부분이 수신기의 원격 어드레스 히스토리 캐시에 저장되므로, 제어 로직(320)은 압축 패킷을 생성한다.
케이스 4: 엔트리 44가 먼저 발행되도록 선택됨
케이스 4의 경우, 제어 로직(320)은 엔트리 7-8, 15, 20 및 43에 할당된 요청 중 하나 이상에 앞서, 할당해제되도록 엔트리 44에 할당된 요청을 선택한다. 케이스 4의 경우, 제어 로직(320)은 엔트리 44에 할당된 요청에 대해 생성된 패킷을 예상된 비압축 패킷으로서 전송한다. 앞서 기재된 바와 같이, 엔트리 44에 할당된 요청은 캐시 로드 필드(248)에 어서트된 값을 저장한다. 따라서, 요청은 송신기의 로컬 어드레스 히스토리 캐시의 룩업 동안 캐시 부적중을 생성했으며, 각자의 어드레스 또는 어드레스의 일부분이 로컬 어드레스 히스토리 캐시로 로딩되었다. 요청 큐(300)에 대해 제어 로직(320)은 엔트리(44)에 할당된 요청과 동일한 소스로부터의 임의의 더 오래된 요청을 검색한다. 도시된 바와 같이, 케이스 4의 경우, 큐(310)에 할당된 동일한 소스로부터의 더 오래된 요청이 없다. 따라서, 제어 로직(320)은 더 오래된 요청의 캐시 로드 필드(248) 및 캐시 적중 필드(250)를 클리어하기 위한 업데이트를 수행하지 않는다.
큐(310)에 저장된 필드를 잠재적으로 업데이트하기 위해 더 오래된 요청을 검색하는 것에 추가로, 제어 로직(320)은 캐시 로드 필드(248)가 어서트된 값을 저장할 때 엔트리(44)에 할당된 요청보다 젊은 임의의 요청도 검색한다. 도시된 예에서, 요청 큐(300)에 대한 제어 로직(320)은 캐시 로드 필드(248)에 저장된 어서트된 값을 갖는 동일한 소스로부터의 더 젊은 엔트리를 검색한다. 제어 로직(320)은 엔트리(32)를 찾는다. 따라서, 제어 로직(320)은 동일한 소스로부터의 요청에 대해 할당된 엔트리를 식별하기 위해 나이순으로 가장 오래된 엔트리부터 가장 젊은 엔트리에서 엔트리 32과 엔트리 44 간 검색을 수행한다. 이 특정 경우에, 제어 로직(320)은 캐시 적중 필드(250)에 저장된 어서트된 값을 갖는 엔트리 43을 찾는다. 제어 로직(320)은 엔트리 43에 대해 캐시 로드 매치 필드(254)를 클리어한다. 따라서, 나중에 제어 로직(320)이 엔트리(43)에 할당된 요청을 선택할 때, 제어 로직(320)은 압축 패킷을 생성한다. 제어 로직(320)은 더 오래된 엔트리 44를 이미 발행했기 때문에 요청 어드레스 또는 요청 어드레스의 일부분이 수신기의 원격 어드레스 히스토리 캐시에 저장되므로, 제어 로직(320)은 압축 패킷을 생성한다.
캐시 적중 횟수 추적
앞서 기재된 바와 같이, 제어 로직(320)은 테이블(330)을 사용하여 어서트된 캐시로드 필드(248)를 갖는 특정 엔트리에 대응하는 어서트된 캐시 적중 필드(250)를 갖는 큐(310) 내 할당된 엔트리의 수를 추적한다. 도시된 바와 같이, 테이블(330) 내 제1 엔트리는 어서트된 캐시 로드 필드(248)를 갖는 엔트리 8의 지시자를 저장한다. 또한, 테이블(330)의 이 제1 엔트리는 엔트리 8에 대응하는 어서트된 캐시 적중 필드(250)를 갖는 큐(310) 내 다수의 할당된 엔트리에 대해 1의 카운트를 저장한다. 1의 카운트는 엔트리 7을 지칭한다. 마찬가지로, 테이블(330) 내 제2 엔트리는 어서트된 캐시 로드 필드(248)를 갖는 엔트리 32의 지시자를 저장한다. 또한, 테이블(330)의 제2 엔트리는 엔트리 32에 대응하는 어서트된 캐시 적중 필드(250)를 갖는 큐(310) 내 할당된 엔트리 15 및 20에 대해 2의 카운트를 저장한다. 제3 엔트리는 엔트리 44의 지시자를 저장하고 엔트리 43에 대응하는 1의 카운트를 저장한다.
앞서 기재된 케이스 2를 다시 참조하면, 제어 로직(320)이 발행되도록 엔트리 8을 선택할 때 제어 로직(320)은 테이블(330)을 액세스하고 대응하는 캐시 로드 필드(248)가 어서트된 값을 저장한다고 결정한다. 제어 로직(320)은 큐(310)의 엔트리 8의 지시자를 사용하여 테이블(330)을 검색하고, 제1 엔트리를 찾고, 엔트리 8 내 요청에 종속적인 큐(310)에 할당된 하나의 요청이 현재 존재한다고 결정한다. 이 경우, 1의 카운트는 엔트리 7에 대응한다. 제어 로직(320)이 테이블(330)의 적어도 하나의 다른 할당된 엔트리가 더 높은 카운트를 저장, 가령, 제2 엔트리가 2의 카운트를 갖는다고 결정할 때, 일부 실시예에서, 제어 로직(320)은 다른 요청을 검색하는 사전 단계를 수행하지 않는다. 오히려, 제어 로직(320)은 엔트리 8에 대해 예상되는 비압축 패킷을 전송하고 다른 엔트리의 필드에 대해 어떠한 업데이트도 수행하지 않는다. 또한, 제어 로직(320)은 엔트리 8에 할당된 요청에 대한 요청 어드레스의 적어도 일부분을 저장하는 어드레스 히스토리 캐시 내 저장 위치를 무효화한다. 예를 들어, 제어 로직(320)은 프로세서 식별자(2) 및 스레드 식별자(6)에 의해 인덱스되는 세트 내 캐시 웨이(3)를 무효화한다. 따라서 요청 어드레스의 동일한 부분을 가진 동일한 소스로부터의 차후 요청이 어드레스 히스토리 캐시에서 적중되지 않는다.
큐(310)의 엔트리 7에 대한 필드(254)에 저장된 어서트된 값은 엔트리 7에 대해 나중에 발행된 패킷이 비압축 패킷임을 보장한다. 다른 실시예에서, 제어 로직(320)이 테이블(330) 내 적어도 하나의 다른 할당된 엔트리가 더 높은 카운트를 저장한다고 결정할 때, 제어 로직(320)은 더 젊은 요청, 가령, 엔트리 7을 검색하고 캐시 적중 필드(250)를 클리어하거나 부정한다. 엔트리 8에 대한 비압축 패킷은 어서트된 캐시로드 필드의 지시자를 포함하지 않으므로 수신기에 요청 어드레스(예를 들어, 어드레스 0x330)의 적어도 일부분이 로드되지 않는다. 따라서, 제어 로직(320)이 엔트리 8 직후에 엔트리 32를 선택하는 경우, 제어 로직(320)은 여전히 엔트리 15 및 20에 대한 두 개의 패킷을 나중에 압축 패킷으로 전송할 수있다. 제어 로직(320)은 제어 로직(320)이 큐(310)의 엔트리 8을 발행했을 때 엔트리 15 및 20에 대한 두 개의 패킷의 캐시 적중 필드(250)를 클리어하지 않았다.
일부 실시예에서, 제어 로직(320)은 테이블(330)의 하나의 엔트리가 타 엔트리보다 더 높은 카운트를 갖는지를 결정하기 위해 임계값을 사용했다. 상기의 예에서, 제어 로직(320)은 0의 임계값을 사용했다. 또 다른 실시예에서, 제어 로직(320)은 임계값으로서 0이 아닌 양의 정수를 사용한다. 예를 들어, 임계값이 3이라면, 제어 로직(320)은 테이블(330)에서 7의 카운트를 갖는 제5 엔트리(도시되지 않음)가 3의 카운트를 갖는 제9 엔트리(도시되지 않음)보다 높은 것으로 간주하는데, 왜냐하면 7은 6(3의 카운트 + 3의 카운트)보다 크기 때문이다. 그러나, 제어 로직(320)은 7의 카운트를 갖는 제5 엔트리가 적어도 4의 카운트를 갖는 타 엔트리보다 높은 것으로 간주하지 않는데, 왜냐하면, 7은 7(4의 카운트 + 3의 카운트)보다 크다고 여겨지지 않기 때문이다.
일부 실시예에서, 제어 로직(320)은 제어 로직(320)이 큐(310) 내 어서트된 캐시 로드 필드(248)를 갖는 요청을 할당할 때 테이블(330)네 주어진 엔트리를 할당한다. 어서트된 캐시 적중 필드(250)를 갖는 요청이 주어진 엔트리에 대응하는 요청과 동일한 요청 어드레스를 가질 때 제어 로직(320)은 테이블(330) 내 주어진 엔트리에 대응하는 카운트를 업데이트(증분)한다. 예를 들어, 제어 로직(320)이 큐(310)에 엔트리(20)를 할당할 때 큐(310)의 엔트리 32의 지시자를 저장하는 테이블(330)의 제2 엔트리는 자신의 카운트를 1로 증분시킨다. 제어 로직(320)이 큐(310)에서 엔트리 15를 할당할 때 이 카운트는 1에서 2로 증분된다. 덧붙여, 제어 로직(320)이 대응하는 압축 패킷을 발행할 때 제어 로직(320)은 대응하는 카운트를 업데이트(감분)한다. 예를 들어, 외부 중재 로직이 발행되도록 엔트리 15를 선택하고 압축된 아웃바운드 패킷이 엔트리 15에 대한 링크를 통해 전송될 때, 제어 로직(320)은 테이블(330)의 제2 엔트리에서 카운트를 2에서 1로 감분시킨다.
일부 실시예에서, 제어 로직(320)이 더 높은 카운트 조건으로 인해 큐(310)의 다른 엔트리의 필드를 업데이트하지 않고 큐(310)의 지시된 엔트리에 대한 요청을 발행 할 때 테이블(330) 내 주어진 엔트리가 할당해제된다. 다른 실시예에서, 제어 로직(320)이 큐(310)에 어서트된 캐시 로드 필드(248)를 갖는 더 젊은 요청을 할당할 때 테이블(330) 내 주어진 엔트리가 할당해제되고 카운트가 주어진 엔트리에 대해 0에 도달한다. 이 경우, 발행될 압축 패킷이 더는 존재하지 않으므로, 제어 로직이 주어진 엔트리를 할당해제하거나 무효화한다.
도 4를 참조하면, 패킷 송신기(400)의 하나의 실시예의 일반화된 블록도가 도시된다. 패킷 송신기(400)는 각각의 유형의 요청을 각각 저장하기 위한 요청 큐(411, 413 및 415)를 포함한다. 요청 큐(411, 413, 415) 각각은 대응하는 로컬 어드레스 히스토리 캐시(410, 412 및 414)를 가진다. 로컬 어드레스 히스토리 캐시(410, 412 및 414)는 요청 어드레스를 저장한다. 다른 실시예에서, 요청 큐(411, 413 및 415) 중 하나 이상은 대응하는 로컬 어드레스 히스토리 캐시를 사용하지 않는다.
요청 큐(411, 413 및 415)에 저장된 요청은 흐름 제어 유닛("플릿(flit)")으로 알려진 유형의 패킷이다. 플릿은 더 큰 패킷의 하위집합이다. 플릿은 일반적으로 데이터 및 제어 정보, 가령, 더 큰 패킷에 대한 헤더 및 테일 정보를 운반한다. 전송될 데이터는 네트워크에서 라우팅되는 패킷으로 기재되지만, 일부 실시예에서, 전송될 데이터는 점대점 상호연결에서 비트 스트림 또는 바이트 스트림이다. 요청 큐(411, 413 및 415)는 제어 로직이 패브릭 링크 상에서 전송하기 위한 제어 패킷을 저장한다. 패킷 송신기(400)외의 또 다른 소스는 대응하는 데이터 패킷, 가령, 플릿에 대응하는 더 큰 패킷을 전송한다.
일부 경우에, 하나 이상의 다른 소스, 가령, 더 큰 데이터 패킷에 대한 소스가 패킷 송신기(400)와 패브릭 링크를 공유한다. 따라서 패브릭 링크는 제어 패킷을 전송하기 위해 항상 이용 가능한 것은 아니다. 패킷 송신기(400)는 또한 후보 패킷(430-434) 중 하나 이상을 링크 패킷(460)에 삽입하기 위한 패킹 버퍼 중재자(450)를 포함한다. 링크 패킷(460)은 FTI 후보 패킷(430-434) 중 둘 이상을 저장하기에 충분한 데이터 저장 공간을 가진다. 패킷 송신기(400)는 제어 로직이 두 가지 요건이 충족된다고 결정할 때 패브릭 링크 상에서 링크 패킷(460)을 전송한다. 첫 번째 요건은 패브릭 전송 인터페이스가 패브릭 링크가 이용 가능함을 나타내는 신호를 패킷 송신기(400)에 전송하는 것이다. 두 번째 요건은 패킷 송신기(400)가 링크 패킷(460)이 비어 있지 않다고 결정하는 것이다.
큐(411-415)에 저장된 제어 패킷 유형의 예는 요청 유형, 응답 유형, 프로브 유형 및 토큰 또는 크레딧 유형이다. 패킷 유형의 또 다른 예도 가능하고 고려될 수 있다. 도시된 바와 같이, 하나의 예에서, 큐(411)는 제어 요청 유형인 "유형 1"의 패킷을 저장한다. 큐(413)는 일부 경우에 제어 응답 유형인 "유형 2"의 패킷을 저장하고, 큐(415)는 일부 경우에 제어 토큰 또는 크레딧 유형인 "유형 N"의 패킷을 저장한다.
큐 중재자(420)는 큐(411)로부터 FTI 후보 패킷(430)을 선택한다. 일부 실시예에서, 큐 중재자(420)는 하나 이상의 속성에 기초하여 FTI 후보 패킷(430)을 선택한다. 속성의 예로는 나이, 패킷 유형의 우선 순위 레벨, 패킷의 우선 순위 레벨, 서비스 품질(quality-of-service) 파라미터, 소스 식별자, 애플리케이션 식별자 또는 유형, 가령, 실시간 애플리케이션, 트래픽 유형의 지시자, 예를 들어, 실시간 트래픽, 대역폭 요구사항 또는 레이턴시 허용 요구사항 등이 있다. 유사한 방식으로, 큐 중재자(422-424)는 큐(413 및 415)로부터 FTI 후보 패킷(432-434)을 선택한다.
도시된 바와 같이, 각각의 FTI 후보 패킷(430-434)은 상이한 데이터 크기(440-444)를 가진다. 일부 경우에, FTI 후보 패킷(430-434) 중 둘 이상은 동일한 데이터 크기를 가진다. 큐(411, 413 및 415) 중 하나 이상은 상이한 크기의 FTI 패킷을 저장할 수 있다. 따라서, 큐 중재자(420-424) 중 주어진 하나가 FTI 후보 패킷을 선택할 때, 선택된 FTI 후보 패킷은 동일한 큐로부터 선택된 이전에 선택된 FTI 후보 패킷과 상이한 크기를 가진다. 하나의 예에서, 큐(411)가 요청 유형의 패킷을 저장할 때, 큐(411)는 128 비트 크기를 갖는 비압축 요청 패킷을 저장하고, 64비트의 크기를 갖는 압축 요청 패킷을 저장한다. 따라서, 큐(411)의 일부 엔트리는 데이터 크기(440)와 상이한 데이터 크기를 갖는 FTI 후보 패킷을 저장한다.
링크 패킷(460)은 섹터(462-466)로 분할된다. 하나의 예에서 각각의 섹터는 32 비트이다. 섹터(462-466)에 대한 또 다른 데이터 크기가 가능하고 고려될 수 있다. 하나의 예에서, 링크 패킷(460)은 8개의 섹터를 포함한다. 그 밖의 다른 임의의 수의 섹터가 링크 패킷(460)에 포함되는 것도 가능하다. 링크 패킷(460)은 레지스터 또는 다른 순차적 저장 요소에 저장된다. 데이터, 가령, 제어 FTI 후보 패킷을 저장하는 것에 추가로, 링크 패킷(460)이 또한 다른 메타데이터(도시되지 않음)를 저장한다. 다른 메타 데이터의 예로는 섹터(462-466) 중 어느 것이 이용 가능한지의 지시자이다. 패킹 버퍼 중재자(450)는 FTI 후보 패킷(430-434)을 수신하고 링크 패킷(460) 내 이용 가능한 데이터 저장 공간에 삽입되기 위한 수신된 FTI 후보 패킷(430-434) 중 하나 이상을 선택한다.
이제 도 5를 참조하면, 컴퓨팅 시스템에서 효율적인 데이터 전송을 수행하기 위한 방법(500)의 하나의 실시예가 도시된다. 설명을 위해, 이 실시예(뿐 아니라 도 6-8 및 10의 실시예)에서의 단계가 순차적으로 나타난다. 그러나, 기재된 방법의 다양한 실시예에서, 기재된 요소 중 하나 이상이 동시에, 또는 도시된 것과 상이한 순서로 수행되거나, 완전히 생략됨에 유의한다. 그 밖의 다른 추가 요소도 원하는 대로 수행된다. 본 명세서에 기재된 다양한 시스템 또는 장치 중 임의의 것이 방법(500)을 구현하도록 구성된다.
패킷 송신기는 어드레스를 포함하는 요청을 수신한다(블록(502)). 일부 경우에, 패킷 송신기는 온-칩 네트워크 또는 패브릭으로부터 요청을 수신하고, 패킷 송신기는 패킷을 오프-칩 프로세서로 전송하기 위해 아웃바운드 링크를 사용한다. 패킷 송신기 내 제어 로직은 요청 유형에 기초하여 다수의 요청 큐 중 주어진 요청 큐를 선택한다(블록(504)). 제어 로직은 주어진 요청 큐에서 수신된 요청을 할당한다(블록(506)). 일부 경우, 엔트리 위치가 대응하는 요청의 나이를 지시하도록, 제어 로직은 엔트리를 순차적으로 할당한다.
대응하는 어드레스 히스토리 캐시에서 어드레스에 대한 검색이 발생한다(블록(508)). 소스 식별자는 어드레스 히스토리 캐시로 인덱스하는 데 사용된다. 하나의 실시예에서, 소스 식별자는 요청을 생성한 스레드를 실행하는 프로세서를 식별하기 위해 사용되는 프로세서 식별자 및 스레드 식별자를 포함한다. 제어 로직은 소스 식별자를 사용하여 어드레스 히스토리 캐시에서 인덱스를 선택하고, 제어 로직은 요청 어드레스의 일부분을 태그로서 사용하여 선택된 인덱스 내 다수의 웨이 중 하나가 요청 어드레스를 저장하는지 여부를 결정할 수 있다.
어드레스 히스토리 캐시에 적중이 있는 경우(조건 블록(510)의 "예" 분기), 어드레스 히스토리 캐시 적중의 지시자가 주어진 요청 큐의 할당된 엔트리에 저장된다(블록(512)). 경우에 따라, 제어 로직은 어서트된 값을 저장하기 위해 캐시 적중 필드를 업데이트한다. 예를 들어, (도 2 및 도 3의) 캐시 적중 필드(250)가 사용된다. 어드레스 히스토리 캐시 내 어드레스의 위치의 식별자는 할당된 엔트리에 저장된다(블록(522)). 예를 들어, 캐시 적중은 어드레스 히스토리 캐시의 선택된 인덱스 내에서 다수의 웨이 중 특정 웨이를 식별한다. 하나의 실시예에서, 식별자는 캐시 적중 동안 발견된 특정 웨이이고, 이 특정 웨이의 식별자는 주어진 요청 큐의 할당된 엔트리에 저장된다. 예를 들어, 앞서 기재된 바와 같이, 웨이 3은 (도 3의) 요청 큐(300)에 저장된다.
주어진 요청 큐로부터 비순차 발행을 수행하기 위해 사용될 정보는 주어진 요청 큐의 할당된 엔트리에 저장된다(블록(524)). 하나의 실시예에서, 더 오래된 요청이 캐시 로드의 지시자와 함께 주어진 요청 큐에 할당된 경우, 캐시 로드 매칭의 지시자가 주어진 요청 큐의 할당된 엔트리에 저장된다. 하나의 예에서, 제어 로직은 어서트된 값을 갖는 (도 2 및 도 3의) 캐시로드 매치 필드(254)를 업데이트한다.
어드레스 히스토리 캐시에 부적중이 있는 경우(조건 블록(510)의 "아니오" 분기), 어드레스 히스토리 캐시 부적중의 지시자가 주어진 요청 큐의 할당된 엔트리에 저장된다(블록(516)). 일부 경우, 제어 로직은 어서트된 값을 저장하도록 캐시 로드 필드를 업데이트한다. 예를 들어, (도 2 및 도 3의) 캐시 로드 필드(248)가 사용된다. 요청의 요청 어드레스의 적어도 일부분을 저장하기 위한 어드레스 히스토리 캐시 내 위치가 식별된다(블록(518)). 예를 들어, 선택한 인덱스 내 다수의 웨이 중 특정 웨이가 식별된다. 무효한 웨이가 이용 가능하지 않은 경우, 할당된 웨이 중 하나가 교체되도록 선택된다. 예를 들어, LRU(least recently used) 스킴이 사용된다.
요청 어드레스의 적어도 일부분은 어드레스 히스토리 캐시의 식별된 위치에 저장된다(블록(520)). 그 후, 방법(500)의 제어 흐름은 어드레스 히스토리 캐시 내의 저장 위치의 식별자가 주어진 요청 큐의 할당된 엔트리에 저장되는 블록(522)으로 이동한다. 저장 위치는 요청의 어드레스를 저장한다. 캐시 적중 동안 발견된 특정 웨이의 식별자는 주어진 요청 큐의 할당된 엔트리에 저장된다. 그 후, 방법(500)의 제어 흐름은 블록(522)에서 블록(524)으로 이동하여, 주어진 요청 큐로부터의 비순차 발행을 수행하기 위해 사용되는 정보가 주어진 요청 큐의 할당된 엔트리에 저장된다. 하나의 예에서, 더 오래된 요청이 캐시 로드의 지시자와 함께 주어진 요청 큐에 할당된 경우, 캐시 로드 매칭의 지시자가 주어진 요청 큐의 할당된 엔트리에 저장된다.
이제 도 6를 참조하면, 컴퓨팅 시스템에서 효율적인 데이터 전송을 수행하기 위한 방법(600)의 하나의 실시예가 도시된다. 요청의 어드레스를 저장하는 어드레스 히스토리 캐시 내 저장 위치를 식별하는 저장 위치의 식별자가 수신된다(블록(602)). 요청 큐에 대해 제어 로직은 저장 위치의 식별자를 수신한다. 하나의 실시예에서, 수신된 식별자는 패킷 송신기에 의해 수신된 요청에 대한 요청 어드레스의 적어도 일부분을 저장하는 어드레스 히스토리 캐시 내 특정 웨이를 식별한다. 예를 들어, 웨이 3은 (도 3의) 요청 큐(300)로 전송된다. 요청 큐는 저장 위치의 식별자 및 요청의 소스의 식별자로 검색된다(블록(604)). 앞서 기재된 바와 같이, 소스 식별자는 요청을 생성한 스레드를 실행하는 프로세서를 식별하기 위해 사용되는 프로세서 식별자 및 스레드 식별자를 포함한다.
요청 큐에 부적중이 있는 경우(조건부 블록(606)의 "아니오" 분기), 요청 큐 내에 더 오래된 요청이 없음을 특정하는 요청에 대해 요청 큐 내 엔트리가 할당된다(블록(608)). 예를 들어, 할당된 엔트리는 요청에 대한 어드레스 히스토리 캐시에 대한 적중/부적중 결과의 지시자를 저장하지만, (도 2 및 도 3의) 캐시 로드 매치 필드(254)가 클리어되거나 부정된 값으로 업데이트된다. 그러나, 요청 큐에 적중이 있는 경우(조건 블록(606)의 "예" 분기), 적중 엔트리가 수신기에 요청 어드레스를 저장하는 것을 특정하는 지시자를 저장하는지 여부가 결정된다. 하나의 실시예에서, 적중 엔트리는 (도 2 및 도 3의) 캐시 로드 필드(248)에 어서트된 값을 저장한다.
적중 엔트리가 수신기에 요청 어드레스를 저장하는 것을 특정하는 지시자를 저장하는 경우(조건 블록(610)의 "예" 분기), 더 오래된 요청이 수신기에 요청 어드레스를 저장하려 함을 특정하는 요청에 대해 요청 큐에 엔트리가 할당된다(블록(612)). 예를 들어, 할당된 엔트리는 요청에 대한 어드레스 히스토리 캐시에 대한 적중/부적중 결과의 지시자를 저장하고, (도 2 및 도 3의) 캐시 로드 매치 필드(254)가 어서트된 값으로 업데이트된다. 요청 큐에 적중이 있고(조건 블록(606)의 "예" 분기) 적중 엔트리가 수신기에 요청 어드레스를 저장하는 것을 특정하는 지시자를 저장하지 않는 경우(조건 블록(610)의 "아니오" 분기), 요청 큐에 엔트리가 할당된다. 할당된 엔트리가 요청 큐에 저장된 더 오래된 요청이 수신기에 요청 어드레스를 저장하려 함을 특정하는 요청에 대한 것이다(블록(614)). 예를 들어, 적중 엔트리는 (도 2 및 도 3의) 캐시 로드 필드(248)에 클리어된 값을 저장한다. 할당된 엔트리는 요청에 대한 어드레스 히스토리 캐시에 대한 적중/부적중 결과의 지시자를 저장하지만, (도 2 및 도 3의) 캐시 로드 매치 필드(254)가 클리어되거나 부정된 값으로 업데이트된다.
이제 도 7을 참조하면, 컴퓨팅 시스템에서 효율적인 데이터 전송을 수행하기 위한 방법(700)의 하나의 실시예가 도시된다. 이전 어드레스 히스토리 캐시 적중의 지시자를 갖는 요청이 발행되도록 요청 큐로부터 선택된다(블록(702)). 하나의 실시예에서, 요청 큐 내 선택된 요청은 (도 2 및 도 3의) 캐시 적중 필드(250)에 어서트된 값을 저장한다. 선택된 요청이 동일한 소스로부터의 요청 큐에서 더 오래된 요청이 더 오래된 요청의 어드레스를 수신기에 저장함을 나타낸다고 특정하는 지시자를 포함하는지 여부가 결정된다(블록(704)). 하나의 예에서, 지시자는 (도 2 및 도 3의) 캐시 로드 매치 필드(254)에 저장된 어서트된 값이다.
선택된 요청이 상기 지시자를 포함하는 경우(조건 블록(706)의 "예" 분기), 어드레스를 갖는 선택된 요청이 아웃바운드 링크 패킷으로 패킹되도록 비압축 후보 패킷이 생성된다(블록(708)). 어드레스 히스토리 캐시에서 이전 적중이 있었음에도 불구하고, 선택한 요청은 요청 어드레스를 수신기에 저장할 더 오래된 요청보다 먼저 발행되도록 선택된다. 이 더 오래된 요청이 아직 발행되지 않았기 때문에 요청 어드레스가 아직 수신기에 저장되지 않는다.
선택된 요청이 상기 지시자를 포함하지 않는 경우(조건 블록(706)의 "아니오" 분기), 어드레스의 일부분을 갖지 않는 선택된 요청이 아웃바운드 링크 패킷으로 패킹되기 위해 압축 후보 패킷이 생성된다(블록(710)). 선택된 요청이 어드레스 히스토리 캐시에서 이전 적중을 갖고 있고, 요청 어드레스가 요청 어드레스를 수신기에 저장하는 더 오래된 요청 후에 발행되도록 선택되기 때문에, 요청 어드레스의 적어도 일부분을 갖지 않는 압축 패킷이 수신기로 전송된다.
이제 도 8을 참조하면, 컴퓨팅 시스템에서 효율적인 데이터 전송을 수행하기 위한 방법(800)의 하나의 실시예가 도시된다. 요청의 어드레스를 저장하는 것을 특정하는 지시자가 있는 요청이 요청 큐로부터 발행되도록 선택된다(블록(802)). 하나의 실시예에서, 요청 큐 내 선택된 요청은 (도 2 및 도 3의) 캐시 로드 필드(248)에 어서트된 값을 저장한다. 테이블, 가령, 요청 큐(300)에 대해 앞서 기재된 테이블(330)의 사용이 본 명세서에 기재되어 있지 않지만, 선택된 요청은 다른 단계가 수행되기 전에 심사된다. 예를 들어, 선택된 요청이 어서트된 캐시 적중 필드를 갖고 선택된 요청과 동일한 요청 어드레스를 갖는 해당 요청의 카운트가 다른 계류 중인 요청의 카운트보다 더 높은 것으로 발견되는 경우 선택된 요청은 자격이 있는 것으로 간주된다. 제어 로직은 동일한 소스 식별자로부터의 그리고 어드레스 히스토리 캐시 내 저장 위치의 동일한 식별자를 이용하는 요청에 대해 선택된 요청보다 오래된 요청을 검색한다(블록(804)). 예를 들어, 제어 로직은 선택한 요청과 동일한 소스 식별자 및 저장 위치(캐시 웨이)를 갖는 요청에 대한 더 오래된 요청을 검색한다.
상기의 검색이 매칭을 발견하는 경우(조건 블록(806)의 "예" 분기), 매칭 요청에서 어드레스 히스토리 캐시 적중의 임의의 지시자가 클리어된다(블록 808). 또한, 일부 실시예에서, 패킷 수신기의 제어 로직은 매칭되는 요청에서 어드레스의 수신기 저장의 임의의 지시자를 클리어한다(블록(810)). 다시 (도 3의) 요청 큐(300)에서 케이스의 예를 참조하면, 방법(800)의 블록(806-810)은 동일한 소스로부터의 그리고 어드레스 히스토리 캐시 내 동일한 저장 위치를 이용하는 더 오래된 요청을 검색하는 동안 (도 3의) 케이스 2-4에 대한 단계와 유사하다.
제어 로직이 상기의 검색으로부터 매칭을 발견하지 않은 경우(조건 블록(806)의 "아니오" 분기), 또는 제어 로직이 하나 이상의 오래된 요청에 대한 지시자의 클리어를 완료한 경우(블록(808 및 810)), 제어 로직은 또 다른 검색을 수행한다. 예를 들어, 제어 로직은 동일한 소스 식별자로부터의 그리고 어드레스 히스토리 캐시 내 저장 위치의 동일한 식별자를 이용하는 요청에 대해 선택된 요청보다 젊은 요청을 검색한다(블록(816)). 하나의 실시예에서, 제어 로직은 선택한 요청과 동일한 소스 식별자 및 저장 위치(캐시 웨이)를 이용하는 요청에 대한 더 젊은 요청을 검색한다. 이 검색으로부터 매칭이 발견되는 경우(조건 블록(818)의 "예" 분기), 매칭되는 요청의 요청이 선택된 요청에서 어드레스의 수신기 저장의 지시자를 갖는 다음 가장 오래된 요청까지 나이순으로 식별된다(블록(820)). 도 3 및 케이스 3의 예시를 간단히 다시 참조하면, 선택된 엔트리 32에 대해, 제어 로직은 여전히 할당 상태인 엔트리 8와 선택된 엔트리 32 사이에서 여전히 할당 상태인 엔트리 15 및 20을 식별했다.
임의의 식별된 요청이 존재하는 경우(조건 블록(822)의 "예" 분기), 이들이 선택된 요청과 동일한 소스 정보를 공유함을 특정하는 식별된 요청에 대한 임의의 지시자가 클리어된다(블록(824)). 소스 정보는 소스 식별자 및 어드레스 히스토리 캐시의 저장 위치의 식별자를 포함한다. 하나의 실시예에서, 소스 식별자는 적어도 프로세서 식별자 및 스레드 식별자를 포함한다. 일부 경우, 이들 식별된 요청에 대해 캐시 로드 매치 필드가 클리어되거나 부정된다. 따라서 나중에 중재 로직이 하나 이상의 식별된 요청을 발행되도록 선택할 때, 제어 로직이 압축 패킷을 생성한다. 요청 어드레스 또는 요청 어드레스의 일부분이 현재(그리고 더 오래된) 선택된 요청이 발행되기 때문에 수신기의 원격 어드레스 히스토리 캐시에 저장되므로, 이러한 대에 압축 패킷이 생성된다.
식별된 요청이 없는 경우(조건 블록(822)의 "아니오" 분기), 방법(800)의 제어 흐름은 블록(826)으로 이동하여, 아웃바운드 링크 패킷으로의 패킹되기 위해 어드레스를 갖고 선택된 요청에 대한 비압축 후보 패킷이 생성된다. 다시 (도 3의) 요청 큐(300)에서 케이스의 예를 참조하면, 방법(800)의 블록(816-824)은 동일한 소스로부터의 그리고 어드레스 히스토리 캐시 내 동일한 저장 위치를 이용하는 더 젊은 요청을 검색하는 동안 케이스 2-4에 대한 단계와 유사하다. 앞서 설명한 바와 같이, 제어 로직은 동일한 소스 식별자를 갖고 어드레스 히스토리 캐시 내 저장 위치의 동일한 식별자를 사용하는 요청에 대해 선택된 요청보다 더 젊은 요청을 검색한다(블록(816)). 이 검색으로부터 매칭이 발견되지 않는 경우(조건 블록(818)의 "아니오" 분기), 방법(800)의 제어 흐름은 블록(826)으로 이동하여, 아웃바운드 링크 패킷으로의 패킹되기 위해 어드레스를 갖고 선택된 요청에 대한 비압축 후보 패킷이 생성된다.
도 9를 참조하면, 패킷 수신기(900)의 하나의 실시예의 일반화된 블록도가 도시된다. 도시된 실시예에서, 패킷 수신기(900)는 각자의 유형의 패킷을 저장하기 위한 큐(911, 913 및 915)를 포함한다. 도시된 바와 같이, 각각의 요청 큐(911, 913 및 915)는 대응하는 어드레스 히스토리 캐시(910, 912 및 914)를 가진다. 어드레스 히스토리 캐시(910, 912 및 914)는 수신된 압축 패킷을 위해 사용되는 요청 어드레스를 저장한다.
도시된 바와 같이, 패킷 수신기(900)는 패브릭 링크로부터 링크 패킷(960)을 수신한다. 링크 패킷(960)은 둘 이상의 FTI 패킷을 저장하기 위한 충분한 데이터 저장 공간을 가진다. 분배 디멀티플렉서 로직(distribution demux logic)(950)(또는 로직(950))은 링크 패킷(900)의 섹터(962-966)를 분석하고, 링크 패킷(960)에 있는 FTI 제어 패킷의 수와 링크 패킷(960) 내 위치를 결정하고, FTI 제어 패킷을 저장되도록 큐(911, 913 및 915)로 전송한다. 큐(910-914)에 저장된 제어 패킷 유형의 예는 요청 유형, 응답 유형, 프로브 유형 및 토큰 또는 크레딧 유형을 포함한다. 패킷 유형의 또 다른 예가 다른 실시예에 포함된다. 도시된 바와 같이, 큐(911)는 "유형 1"의 패킷을 저장하고, 큐(913)는 "유형 2"의 패킷을 저장하고, 큐(915)는 "유형 N"의 패킷을 저장한다.
링크 패킷(960)은 섹터(962-966)로 분할된다. 하나의 예에서, 각각의 섹터는 32 비트이다. 섹터(962-966)에 대한 그 밖의 다른 데이터 크기가 가능하고 고려될 수 있다. 데이터, 가령, 제어 FTI 패킷을 저장하는 것에 추가로, 그 밖의 다른 메타데이터(도시되지 않음)가 저장된다. 그 밖의 다른 메타데이터의 예는 섹터(962-966) 중 할당된 섹터의 지시자, 및 일부 실시예에서 제어 FTI 패킷이 변하는 데이터 크기를 갖기 때문에 제어 FTI 패킷이 시작하는 곳의 지시자이다. 다양한 실시예에서, 로직(950)은 조합 로직 및 순차 요소의 조합을 포함한다. 로직(950)은 하드웨어, 소프트웨어 또는 조합으로 구현된다. 로직(950)은 링크 패킷(960)으로부터 하나 이상의 제어 FTI 패킷을 제거하고 이를 큐(911, 913 및 915)로 전송한다.
일부 경우, 각각의 FTI 후보 패킷(930-934)은 상이한 데이터 크기(940-944)를 가진다. 또 다른 경우에, FTI 후보 패킷(930-934) 중 둘 이상이 동일한 데이터 크기를 가진다. 하나의 실시예에서, 큐(911-915) 중 하나 이상은 상이한 크기의 FTI 패킷을 저장한다. 따라서, 로직(950)이 FTI 패킷, 가령, FTI 패킷(930)을 큐(911)로 전송할 때, FTI 패킷은 동일한 큐로 전송된 이전 FTI 패킷과 상이한 크기를 가진다. 하나의 예에서, 큐(911)가 요청 유형의 패킷을 저장할 때, 큐(911)는 128 비트 크기를 갖는 비압축 요청 패킷을 저장하고, 64비트의 크기를 갖는 압축 요청 패킷을 저장한다. 따라서, 큐(911)의 일부 엔트리는 데이터 크기(940)와 상이한 데이터 크기를 갖는 FTI 후보 패킷을 저장한다.
다양한 실시예에서, FTI 후보 패킷(930-934) 중 하나 이상은 요청 어드레스의 적어도 일부분을 저장하지 않는 압축 패킷이다. 압축 패킷의 경우, 로직(950)은 링크를 통해 전송된 압축 패킷에 없는 요청 어드레스의 부분을 불러오기 위해 어드레스 히스토리 캐시(910-914) 중 대응하는 하나를 액세스한다. 일부 경우, 압축 패킷은 자신이 압축 패킷임을 특정하는 지시자를 포함한다. 앞서 기재된 바와 같이, 캐시 적중 필드(250)에 대한 어서트된 값은 요청 어드레스의 적어도 일부분이 압축 패킷 내에 저장되는 것이 아니라 어드레스 히스토리 캐시(910-914) 중 대응하는 하나에 저장됨을 나타낸다. 요청 어드레스의 적어도 일부분이 없는 압축 패킷을 전송함으로써, 링크 효율이 증가한다.
일부 실시예에서, FTI 후보 패킷(930-934)의 비압축 패킷은 비압축 패킷 내 요청 어드레스의 적어도 일부분을 어드레스 히스토리 캐시(910-914) 중 대응하는 하나에 저장한다는 지시자를 포함한다. 앞서 기재된 바와 같이, 캐시 로드 필드(248)는 로직(950)이 어드레스 히스토리 캐시(910-914) 중 대응하는 하나에 요청 어드레스의 적어도 일부분을 저장함을 로직(950)에게 나타낸다. 로직(950)은 나중에 수신된 압축 패킷에 대한 요청 어드레스의 저장된 부분을 사용한다.
다양한 실시예에서, 큐(911-915) 각각은 할당을 위한 다수의 이용 가능한 엔트리를 유지하기 위한 제어 로직(도시되지 않음)을 포함한다. 큐(911-915)의 엔트리는 사용 가능한 엔트리를 나타내는 유효 비트를 포함한다. 경우에 따라, 유효 필드에 저장된 부정된 값(negated value)은 사용 가능한 엔트리를 나타내고, 반면에 유효 필드에 저장된 어서트된 값은 할당된 엔트리를 나타낸다. 일부 실시예에서, 큐(911-915)의 제어 로직은 이용 가능한 엔트리의 수에 기초하여 토큰 또는 크레딧(952)의 수를 결정한다. 제어 로직은 토큰(952)에 대한 값을 하나 이상의 링크의 다른 측에 있는 패킷 송신기로 전송한다. 예를 들어, 패킷 수신기(900)는 토큰(952)을 패킷 송신기로 전송하기 위해 측대역을 사용한다.
이제 도 10를 참조하면, 컴퓨팅 시스템에서 효율적인 데이터 전송을 수행하기 위한 방법(1000)의 하나의 실시예가 도시된다. 인바운드 링크로부터 요청이 수신된다(블록(1002)). 패킷 수신기는 패킷 송신기로부터 링크 상으로 요청을 수신한다. 패킷 수신기는 요청이 어드레스 히스토리 캐시가 요청에 대한 어드레스를 저장한다고 특정하는 지시자를 포함하는지 여부를 결정한다(블록(1004)). 수신된 요청은 요청이 요청 어드레스의 적어도 일부분을 포함하지 않는 압축 패킷 내에 있는지 여부를 특정하는 지시자를 저장한다. 앞서 기재된 바와 같이, 일부 경우에 캐시 적중 필드(250)가 이 지시자를 저장한다. 요청에 이러한 지시자가 포함된 경우(조건 블록(1006)의 "예" 분기), 패킷 수신기는 요청의 어드레스를 저장하는 어드레스 히스토리 캐시 내 저장 위치의 식별자를 불러온다(블록(1008)). 하나의 실시예에서, 요청은 캐시 웨이를 포함한다. 소스 식별자와 결합될 때 캐시 웨이는 패킷 수신기의 어드레스 히스토리 캐시 내 특정 저장 위치를 식별한다.
패킷 수신기의 제어 로직은 적어도 어드레스 히스토리 캐시 내 저장 위치의 식별자를 사용하여 어드레스 히스토리 캐시로부터 어드레스를 불러온다(블록(1010)). 예를 들어, 제어 로직은 소스 식별자를 이용해 어드레스 히스토리 캐시 내 특정 인덱스를 선택하고 요청 포함된 캐시 웨이를 이용해 특정 인덱스 내 특정 웨이를 선택한다. 그 후, 패킷 수신기는 불러와진 어드레스를 사용하여 요청을 처리한다(블록(1022)).
어드레스 히스토리 캐시가 요청에 대한 어드레스를 저장함을 특정하는 지시자가 요청 내에 포함되지 않는 경우(조건 블록(1006)의 "아니오" 분기), 패킷 수신기는 차후 요청에 대해 어드레스를 저장하기 위한 지시자가 요청에 있는지 여부를 결정한다. 앞서 기재된 바와 같이, 하나의 실시예에서, 패킷 수신기는 결정을 내리기 위해 캐시 로드 필드(248)를 사용한다. 그러한 지시자가 있는 경우(조건 블록(1012)의 "예" 분기), 패킷 수신기는 요청으로부터 어드레스 히스토리 캐시 내 저장 위치의 식별자를 불러온다(블록(1014)). 패킷 수신기는 요청으로부터 어드레스를 불러오고(블록(1016)), 저장 위치의 식별자를 사용하여 어드레스 히스토리 캐시에 어드레스를 저장한다(블록(1018)). 앞서 기재된 바와 같이 소스 식별자도 사용된다. 예를 들어, 패킷 수신기는 소스 식별자를 이용해 어드레스 히스토리 캐시 내 특정 인덱스를 선택하고 요청 포함된 캐시 웨이를 이용해 특정 인덱스 내 특정 웨이를 선택한다. 그 후, 패킷 수신기는 불러와진 어드레스를 사용하여 요청을 처리한다(블록(1022)).
어드레스가 대응하는 어드레스 히스토리 캐시에 저장될 것을 특정하는 지시자가 없는 경우(조건 블록(1012)의 "아니오" 분기), 패킷 수신기는 어드레스를 임의의 어드레스 히스토리 캐시에 저장하지 않는 요청으로부터 어드레스를 불러온다(블록(1020)). 하나의 실시예에서, 패킷 수신기는 앞서 기재된 캐시 로드 필드(248) 및 캐시 적중 필드(250) 각각을 검사하고, 각각의 필드가 부정되거나 클리어된 값을 저장한다고 결정한다. 이러한 경우, 패킷 수신기는 요청을 처리하기 위해 어드레스 히스토리 캐시를 사용하지 않는다(블록(1022)).
다양한 실시예에서, 소프트웨어 애플리케이션의 프로그램 명령은 이전에 기재된 방법 및/또는 메커니즘을 구현하는 데 사용된다. 프로그램 명령은 하이-레벨 프로그래밍 언어, 가령, C로 하드웨어의 거동을 기술한다. 또는, 하드웨어 설계 언어(HDL), 가령, 베릴로그(Verilog)가 사용된다. 프로그램 명령은 비일시적 컴퓨터 판독형 저장 매체에 저장된다. 많은 유형의 저장 매체가 이용 가능하다. 저장 매체는 프로그램 실행을 위해 프로그램 명령 및 수반되는 데이터를 컴퓨팅 시스템에 제공하기 위해 사용 중에 컴퓨팅 시스템에 의해 액세스 가능하다. 컴퓨팅 시스템은 적어도 하나 이상의 메모리 및 프로그램 명령을 실행하는 하나 이상의 프로세서를 포함한다.
앞서 기재된 실시예는 구현의 비제한적인 예일 뿐이다. 상기 개시 내용이 완전히 이해되면 당업자에게는 수많은 변형 및 수정이 명백해질 것이다. 이하의 청구 범위는 그러한 모든 변형 및 수정을 포함하도록 해석되도록 의도된다.

Claims (20)

  1. 장치로서,
    각자의 유형의 요청을 저장하도록 각각 구성된 복수의 큐,
    요청 어드레스를 저장하도록 각각 구성된 하나 이상의 어드레스 히스토리 캐시,
    제어 로직을 포함하며, 상기 제어 로직은
    어드레스를 포함하는 수신된 제1 요청에 대해 상기 복수의 큐 중 하나의 큐를 선택하고,
    상기 제1 요청에 대해 선택된 큐 내 제1 엔트리를 할당하며,
    상기 제1 엔트리에,
    상기 하나 이상의 어드레스 히스토리 캐시 중 하나의 어드레스 히스토리 캐시에서 상기 어드레스가 발견되었다는 제1 지시자, 및
    제2 요청이:
    제1 요청과 동일한 소스를 갖고,
    어드레스가 수신기에 저장될 것이라는 지시자를 포함하는 선택된 큐의 하나의 엔트리에 저장되며,
    제1 요청보다 오래된 하나 이상의 요청 중 가장 젊다는 결정에 응답하여,
    선택된 큐가 제2 요청에 의한 어드레스의 저장을 위해 할당된 제2 엔트리를 가짐을 가리키는 제2 지시자
    를 저장하도록 구성되는, 장치.
  2. 제1항에 있어서, 상기 제어 로직은,
    제 요청이 발행되도록 선택되고,
    제1 요청에 대한 선택된 큐의 제1 엔트리가 제1 지시자를 여전히 저장하고 있으며 제2 지시자는 더 이상 저장하고 있지 않는다는 결정에 응답하여,
    상기 어드레스 히스토리 캐시 내 어드레스의 위치의 식별자 및 전체 어드레스보다 짧은 어드레스의 일부분을 포함하는, 제1 요청에 대응하는 압축 패킷을 생성하도록 더 구성되는, 장치.
  3. 제1항에 있어서, 상기 제어 로직은,
    제1 요청이 발행되도록 선택되며,
    제1 요청에 대한 선택된 큐의 제1 엔트리가 제1 지시자를 여전히 저장하고 있으며 제2 지시자를 여전히 저장하고 있다는 결정에 응답하여,
    어드레스를 포함하는 제1 요청에 대응하는 비압축 패킷을 생성하도록 더 구성되는, 장치.
  4. 제1항에 있어서, 선택된 큐에 대응하는 어드레스 히스토리 캐시 내 제1 요청에 대응하는 어드레스를 찾지 못함에 응답하여, 상기 제어 로직은
    어드레스 히스토리 캐시에서 어드레스가 발견되지 않았다는 지시자를 제1 엔트리에 저장하고,
    어드레스의 적어도 일부분을 저장하기 위한 어드레스 히스토리 캐시 내 위치를 식별하며,
    상기 위치에 어드레스의 일부분을 저장하고,
    상기 위치의 식별자를 상기 제1 엔트리에 저장하도록 더 구성되는, 장치.
  5. 제1항에 있어서, 제2 요청이 발행되도록 선택된다고 결정한 것에 응답하여, 상기 제어 로직은 선택된 큐 내 할당된 엔트리를 갖는 제2 요청보다 노래된 하나 이상의 매칭되는 더 오래된 요청을 검색하도록 더 구성되며, 상기 하나 이상의 매칭되는 더 오래된 요청은 상기 제2 요청과 동일한 소스 및 어드레스 히스토리 캐시 내 위치의 동일한 식별자를 갖는, 장치.
  6. 제5항에 있어서, 하나 이상의 매칭되는 더 오래된 요청을 찾음에 응답하여, 상기 제어 로직은
    상기 하나 이상의 매칭되는 더 오래된 요청의 할당된 엔트리에서 어드레스 히스토리 캐시 적중의 모든 지시자를 클리어하고,
    상기 하나 이상의 매칭되는 더 오래된 요청의 할당된 엔트리에서 수신기에 저장된 어드레스의 모든 지시자를 클리어하도록 더 구성되는, 장치.
  7. 제5항에 있어서, 제2 요청이 발행되도록 선택된다는 결정에 응답하여, 상기 제어 로직은 선택된 큐 내 할당된 엔트리를 갖는 제2 요청보다 젊은 복수의 매칭되는 더 젊은 요청을 검색하도록 더 구성되며, 상기 복수의 매칭되는 더 젊은 요청은 제2 요청과 동일한 소스 및 어드레스 히스토리 캐시 내 위치의 동일한 식별자를 갖는, 장치.
  8. 제7항에 있어서, 하나 이상의 매칭되는 더 젊은 요청을 찾음에 응답하여, 상기 제어 로직은
    제2 요청과 제3 요청보다 오래된 제4 요청 사이에서 나이순으로 제3 요청을 식별하며 - 제4 요청에 대한 선택된 큐 내 엔트리가 제4 요청의 어드레스가 수신기의 어드레스 히스토리 캐시에 저장될 것을 특정하는 지시자를 저장함 - ,
    식별된 제3 요청에 대한 선택된 큐에 저장된, 제3 요청의 어드레스를 수신기의 어드레스 히스토리 캐시에 저장하기 위해 제3 요청이 제2 요청에 종속적임을 특정하는 모든 지시자를 클리어하도록 더 구성되는, 장치.
  9. 방법으로서,
    각자의 유형의 요청을 저장하도록 각각 구성된 복수의 큐에 요청을 저장하는 단계,
    하나 이상의 어드레스 히스토리 캐시에 요청 어드레스를 저장하는 단계,
    어드레스를 포함하는 수신된 제1 요청에 대해 상기 복수의 큐 중 하나의 큐를 선택하는 단계,
    상기 제1 요청에 대해 선택된 큐에 제1 엔트리를 할당하는 단계,
    제1 엔트리에,
    상기 하나 이상의 어드레스 히스토리 캐시 중 하나의 어드레스 히스토리 캐시에서 상기 어드레스가 발견되었다는 제1 지시자, 및
    제2 요청이:
    제1 요청과 동일한 소스를 갖고,
    어드레스가 수신기에 저장될 것이라는 지시자를 포함하는 선택된 큐의 하나의 엔트리에 저장되며,
    제1 요청보다 오래된 하나 이상의 요청 중 가장 젊다는 결정에 응답하여,
    선택된 큐가 제2 요청에 의한 어드레스의 저장을 위해 할당된 제2 엔트리를 가짐을 가리키는 제2 지시자
    를 저장하는 단계를 포함하는, 방법.
  10. 제9항에 있어서,
    제 요청이 발행되도록 선택되고,
    제1 요청에 대한 선택된 큐의 제1 엔트리가 제1 지시자를 여전히 저장하고 있으며 제2 지시자는 더 이상 저장하고 있지 않는다는 결정에 응답하여,
    상기 어드레스 히스토리 캐시 내 어드레스의 위치의 식별자 및 전체 어드레스보다 짧은 어드레스의 일부분을 포함하는, 제1 요청에 대응하는 압축 패킷을 생성하는 단계를 더 포함하는, 방법.
  11. 제9항에 있어서,
    제1 요청이 발행되도록 선택되며,
    제1 요청에 대한 선택된 큐의 제1 엔트리가 제1 지시자를 여전히 저장하고 있으며 제2 지시자를 여전히 저장하고 있다는 결정에 응답하여,
    어드레스를 포함하는 제1 요청에 대응하는 비압축 패킷을 생성하는 단계를 더 포함하는, 방법.
  12. 제9항에 있어서, 선택된 큐에 대응하는 어드레스 히스토리 캐시 내 제1 요청에 대응하는 어드레스를 찾지 못함에 응답하여,
    어드레스 히스토리 캐시에서 어드레스가 발견되지 않았다는 지시자를 제1 엔트리에 저장하는 단계,
    어드레스의 적어도 일부분을 저장하기 위한 어드레스 히스토리 캐시 내 위치를 식별하는 단계,
    상기 위치에 어드레스의 일부분을 저장하는 단계, 및
    상기 위치의 식별자를 상기 제1 엔트리에 저장하는 단계를 더 포함하는, 방법.
  13. 제9항에 있어서, 제2 요청이 발행되도록 선택된다고 결정한 것에 응답하여, 선택된 큐 내 할당된 엔트리를 갖는 제2 요청보다 노래된 하나 이상의 매칭되는 더 오래된 요청을 검색하는 단계 - 상기 하나 이상의 매칭되는 더 오래된 요청은 상기 제2 요청과 동일한 소스 및 어드레스 히스토리 캐시 내 위치의 동일한 식별자를 가짐 - 를 더 포함하는, 방법.
  14. 제13항에 있어서, 하나 이상의 매칭되는 더 오래된 요청을 찾음에 응답하여,
    상기 하나 이상의 매칭되는 더 오래된 요청의 할당된 엔트리에서 어드레스 히스토리 캐시 적중의 모든 지시자를 클리어하는 단계, 및
    상기 하나 이상의 매칭되는 더 오래된 요청의 할당된 엔트리에서 수신기에 저장된 어드레스의 모든 지시자를 클리어하는 단계를 더 포함하는, 방법.
  15. 제13항에 있어서, 제2 요청이 발행되도록 선택된다는 결정에 응답하여, 큐 내 할당된 엔트리를 갖는 제2 요청보다 젊은 복수의 매칭되는 더 젊은 요청을 검색하는 단계 - 상기 복수의 매칭되는 더 젊은 요청은 제2 요청과 동일한 소스 및 어드레스 히스토리 캐시 내 위치의 동일한 식별자를 가짐 - 를 더 포함하는, 방법.
  16. 프로그램 명령을 저장하는 비일시적 컴퓨터 판독형 저장 매체로서, 상기 프로그램 명령은,
    각자의 유형의 요청을 저장하도록 각각 구성된 복수의 큐에 요청을 저장하고,
    하나 이상의 어드레스 히스토리 캐시에 요청 어드레스를 저장하며,
    어드레스를 포함하는 수신된 제1 요청에 대해 상기 복수의 큐 중 하나의 큐를 선택하고,
    상기 제1 요청에 대해 선택된 큐에 제1 엔트리를 할당하며,
    제1 엔트리에,
    상기 하나 이상의 어드레스 히스토리 캐시 중 하나의 어드레스 히스토리 캐시에서 상기 어드레스가 발견되었다는 제1 지시자, 및
    제2 요청이:
    제1 요청과 동일한 소스를 갖고,
    어드레스가 수신기에 저장될 것이라는 지시자를 포함하는 선택된 큐의 하나의 엔트리에 저장되며,
    제1 요청보다 오래된 하나 이상의 요청 중 가장 젊다는 결정에 응답하여,
    선택된 큐가 제2 요청에 의한 어드레스의 저장을 위해 할당된 제2 엔트리를 가짐을 가리키는 제2 지시자
    를 저장하기 위해 프로세서에 의해 실행 가능한, 비일시적 컴퓨터 판독형 저장 매체.
  17. 제16항에 있어서, 상기 프로그램 명령은
    제 요청이 발행되도록 선택되고,
    제1 요청에 대한 선택된 큐의 제1 엔트리가 제1 지시자를 여전히 저장하고 있으며 제2 지시자는 더 이상 저장하고 있지 않는다는 결정에 응답하여,
    상기 어드레스 히스토리 캐시 내 어드레스의 위치의 식별자 및 전체 어드레스보다 짧은 어드레스의 일부분을 포함하는, 제1 요청에 대응하는 압축 패킷을 생성하기 위해 프로세서에 의해 실행 가능한, 비일시적 컴퓨터 판독형 저장 매체.
  18. 제16항에 있어서, 상기 프로그램 명령은
    제1 요청이 발행되도록 선택되며,
    제1 요청에 대한 선택된 큐의 제1 엔트리가 제1 지시자를 여전히 저장하고 있으며 제2 지시자를 여전히 저장하고 있다는 결정에 응답하여,
    어드레스를 포함하는 제1 요청에 대응하는 비압축 패킷을 생성하도록 프로세서에 의해 실행 가능한, 비일시적 컴퓨터 판독형 저장 매체.
  19. 제16항에 있어서,
    큐에 대응하는 어드레스 히스토리 캐시 내 제1 요청에 대응하는 어드레스를 찾지 못함에 응답하여, 상기 프로그램 명령은
    어드레스 히스토리 캐시에서 어드레스가 발견되지 않았다는 지시자를 제1 엔트리에 저장하고,
    어드레스의 적어도 일부분을 저장하기 위한 어드레스 히스토리 캐시 내 위치를 식별하며,
    상기 위치에 어드레스의 일부분을 저장하고,
    상기 위치의 식별자를 상기 제1 엔트리에 저장하기 위해 프로세서에 의해 실행 가능한, 비일시적 컴퓨터 판독형 저장 매체.
  20. 제16항에 있어서, 제2 요청이 발행되도록 선택된다고 결정한 것에 응답하여, 상기 프로그램 명령은 선택된 큐 내 할당된 엔트리를 갖는 제2 요청보다 노래된 하나 이상의 매칭되는 더 오래된 요청을 검색하기 위해 프로세서에 의해 실행 가능하며, 상기 하나 이상의 매칭되는 더 오래된 요청은 상기 제2 요청과 동일한 소스 및 어드레스 히스토리 캐시 내 위치의 동일한 식별자를 갖는, 비일시적 컴퓨터 판독형 저장 매체.
KR1020217013439A 2018-10-03 2019-06-28 재순서화 동안 캐시 일관성을 유지하기 위한 방법 KR20210064377A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/150,520 US11831565B2 (en) 2018-10-03 2018-10-03 Method for maintaining cache consistency during reordering
US16/150,520 2018-10-03
PCT/US2019/039919 WO2020072112A1 (en) 2018-10-03 2019-06-28 Method for maintaining cache consistency during reordering

Publications (1)

Publication Number Publication Date
KR20210064377A true KR20210064377A (ko) 2021-06-02

Family

ID=67439386

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217013439A KR20210064377A (ko) 2018-10-03 2019-06-28 재순서화 동안 캐시 일관성을 유지하기 위한 방법

Country Status (6)

Country Link
US (1) US11831565B2 (ko)
EP (1) EP3861450A1 (ko)
JP (1) JP7108135B2 (ko)
KR (1) KR20210064377A (ko)
CN (1) CN112789603A (ko)
WO (1) WO2020072112A1 (ko)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11165777B2 (en) 2019-05-30 2021-11-02 Bank Of America Corporation Controlling access to secure information resources using rotational datasets and dynamically configurable data containers
US11138328B2 (en) 2019-05-30 2021-10-05 Bank Of America Corporation Controlling access to secure information resources using rotational datasets and dynamically configurable data containers
US11153315B2 (en) 2019-05-30 2021-10-19 Bank Of America Corporation Controlling access to secure information resources using rotational datasets and dynamically configurable data containers
US11199992B2 (en) * 2019-07-15 2021-12-14 Western Digital Technologies, Inc. Automatic host buffer pointer pattern detection
US11500581B2 (en) 2020-09-25 2022-11-15 Western Digital Technologies, Inc. Efficient TLP fragmentations in extended LBA environment
US11853218B2 (en) 2020-11-20 2023-12-26 Western Digital Technologies, Inc. Semi and cached TLP coalescing
US11537524B2 (en) 2020-11-20 2022-12-27 Western Digital Technologies, Inc. Effective PCIe utilization by PCIe TLP coalescing
US20220171717A1 (en) * 2020-12-01 2022-06-02 Advanced Micro Devices, Inc. Adaptive out of order arbitration for numerous virtual queues
US11983164B1 (en) 2022-11-17 2024-05-14 Bank Of America Corporation System and method for data community detection via data network telemetry
US12021731B1 (en) 2023-01-05 2024-06-25 Bank Of America Corporation System and method for evaluating compliance of transmitted object data via data efficiency mapping

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH01208934A (ja) 1988-02-16 1989-08-22 Sumitomo Electric Ind Ltd ノード装置
US20030041138A1 (en) 2000-05-02 2003-02-27 Sun Microsystems, Inc. Cluster membership monitor
US7224840B2 (en) * 2000-10-26 2007-05-29 International Business Machines Corporation Method, system, and program for error recovery while decoding compressed data
US7356026B2 (en) 2000-12-14 2008-04-08 Silicon Graphics, Inc. Node translation and protection in a clustered multiprocessor system
EP1573454A2 (en) 2002-06-11 2005-09-14 Ashish Pandya High performance ip processor for tcp/ip, rdma and ip storage applications
US8185602B2 (en) 2002-11-05 2012-05-22 Newisys, Inc. Transaction processing using multiple protocol engines in systems having multiple multi-processor clusters
US7151544B2 (en) * 2003-05-16 2006-12-19 Sun Microsystems, Inc. Method for improving texture cache access by removing redundant requests
US7526607B1 (en) * 2004-09-23 2009-04-28 Juniper Networks, Inc. Network acceleration and long-distance pattern detection using improved caching and disk mapping
US7383423B1 (en) 2004-10-01 2008-06-03 Advanced Micro Devices, Inc. Shared resources in a chip multiprocessor
US8037281B2 (en) 2005-04-07 2011-10-11 Advanced Micro Devices, Inc. Miss-under-miss processing and cache flushing
US8804765B2 (en) * 2005-06-21 2014-08-12 Optis Wireless Technology, Llc Dynamic robust header compression
US7739476B2 (en) 2005-11-04 2010-06-15 Apple Inc. R and C bit update handling
US20080024489A1 (en) 2006-07-28 2008-01-31 Robert Allen Shearer Cache Utilization Optimized Ray Traversal Algorithm with Minimized Memory Bandwidth Requirements
EP2174462A1 (en) * 2007-07-05 2010-04-14 Ceragon Networks LTD. Data packet header compression
US7519777B1 (en) * 2008-06-11 2009-04-14 International Business Machines Corporation Methods, systems and computer program products for concomitant pair prefetching
US20110055838A1 (en) 2009-08-28 2011-03-03 Moyes William A Optimized thread scheduling via hardware performance monitoring
US8904115B2 (en) 2010-09-28 2014-12-02 Texas Instruments Incorporated Cache with multiple access pipelines
US20180107591A1 (en) * 2011-04-06 2018-04-19 P4tents1, LLC System, method and computer program product for fetching data between an execution of a plurality of threads
US9294589B2 (en) * 2011-06-22 2016-03-22 Telefonaktiebolaget L M Ericsson (Publ) Header compression with a code book
US8996840B2 (en) 2011-12-23 2015-03-31 International Business Machines Corporation I/O controller and method for operating an I/O controller
US9424228B2 (en) 2012-11-01 2016-08-23 Ezchip Technologies Ltd. High performance, scalable multi chip interconnect
US9146877B2 (en) * 2012-11-29 2015-09-29 Infinidat Ltd. Storage system capable of managing a plurality of snapshot families and method of snapshot family based read
US9210072B2 (en) 2013-03-08 2015-12-08 Dell Products L.P. Processing of multicast traffic in computer networks
JP6194875B2 (ja) * 2014-12-11 2017-09-13 日本電気株式会社 キャッシュ装置、キャッシュシステム、キャッシュ方法、及びキャッシュプログラム
US10320695B2 (en) 2015-05-29 2019-06-11 Advanced Micro Devices, Inc. Message aggregation, combining and compression for efficient data communications in GPU-based clusters
US10079916B2 (en) 2015-08-13 2018-09-18 Advanced Micro Devices, Inc. Register files for I/O packet compression
US9767028B2 (en) 2015-10-30 2017-09-19 Advanced Micro Devices, Inc. In-memory interconnect protocol configuration registers
US10397377B2 (en) * 2016-03-27 2019-08-27 Qualcomm Incorporated Data compression for cellular internet of things (CIoT)
US10042576B2 (en) 2016-08-17 2018-08-07 Advanced Micro Devices, Inc. Method and apparatus for compressing addresses
US9793919B1 (en) 2016-12-08 2017-10-17 Advanced Micro Devices, Inc. Compression of frequent data values across narrow links
US10565122B2 (en) * 2017-05-30 2020-02-18 Microsoft Technology Licensing, Llc Serial tag lookup with way-prediction

Also Published As

Publication number Publication date
EP3861450A1 (en) 2021-08-11
CN112789603A (zh) 2021-05-11
JP7108135B2 (ja) 2022-07-27
JP2022511377A (ja) 2022-01-31
US20200112525A1 (en) 2020-04-09
US11831565B2 (en) 2023-11-28
WO2020072112A1 (en) 2020-04-09

Similar Documents

Publication Publication Date Title
JP7108135B2 (ja) 並び替えの間のキャッシュ一貫性を維持する方法
US20210073152A1 (en) Dynamic page state aware scheduling of read/write burst transactions
CN111742305A (zh) 调度具有不统一等待时间的存储器请求
US11429281B2 (en) Speculative hint-triggered activation of pages in memory
US10152434B2 (en) Efficient arbitration for memory accesses
US11474942B2 (en) Supporting responses for memory types with non-uniform latencies on same channel
KR20200096971A (ko) 캐시 제어 인지 메모리 컨트롤러
KR20200100151A (ko) 집단화된 메모리 장치에 대한 메모리 요청 스케줄링
US11403221B2 (en) Memory access response merging in a memory hierarchy
US11994996B2 (en) Transmission of address translation type packets
CN117425884A (zh) 网络接口设备
US10540304B2 (en) Power-oriented bus encoding for data transmission
US10684965B2 (en) Method to reduce write responses to improve bandwidth and efficiency
EP3841484B1 (en) Link layer data packing and packet flow control scheme

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right