KR20180027646A - I/o 패킷 압축을 위한 레지스터 파일 - Google Patents

I/o 패킷 압축을 위한 레지스터 파일 Download PDF

Info

Publication number
KR20180027646A
KR20180027646A KR1020187006372A KR20187006372A KR20180027646A KR 20180027646 A KR20180027646 A KR 20180027646A KR 1020187006372 A KR1020187006372 A KR 1020187006372A KR 20187006372 A KR20187006372 A KR 20187006372A KR 20180027646 A KR20180027646 A KR 20180027646A
Authority
KR
South Korea
Prior art keywords
register
node
address
target node
packet
Prior art date
Application number
KR1020187006372A
Other languages
English (en)
Other versions
KR102212269B1 (ko
Inventor
데이비드 에이. 로버츠
케빈 와이. 쳉
네이썬 후
Original Assignee
어드밴스드 마이크로 디바이시즈, 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 어드밴스드 마이크로 디바이시즈, 인코포레이티드 filed Critical 어드밴스드 마이크로 디바이시즈, 인코포레이티드
Publication of KR20180027646A publication Critical patent/KR20180027646A/ko
Application granted granted Critical
Publication of KR102212269B1 publication Critical patent/KR102212269B1/ko

Links

Images

Classifications

    • 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/38Information transfer, e.g. on bus
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/04Protocols for data compression, e.g. ROHC
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • 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

Landscapes

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

Abstract

노드간 대역폭을 감소시키는 시스템, 장치 및 방법이 고려된다. 컴퓨터 시스템은 트랜잭션들을 타겟 노드로 보내는 요청 노드를 포함한다. 요청 노드는 패킷의 데이터 값 대신 레지스터 ID를 포함하는 패킷을 전송한다. 레지스터 ID는 데이터 값을 저장하는 타겟 노드의 레지스터를 나타낸다. 레지스터 ID는 패킷에서 데이터 값보다 적은 비트를 사용한다. 데이터 값은 타겟 노드 내의 메모리 위치를 참조하는 메모리 어드레스일 수 있다. 수신된 패킷은 또한 목표된 데이터 값에 대해 수행할 연산을 나타내는 연산 코드를 포함 할 수 있다.

Description

I/O 패킷 압축을 위한 레지스터 파일
본 발명은 국토 안보부(DOE)가 수여한 하도급(Subcontract) 번호 제B608045, 프라임 계약 번호 제DE-AC52-07NA27344에 따라 정부 지원을 받아 만들어졌다. 정부는 본 발명에 대해 특정 권리를 가질 수 있다.
본 명세서에 기술된 실시 예들은 데이터 처리 장치에 관한 것으로, 특히 노드간 대역폭 소비를 감소시키는 것에 관한 것이다.
컴퓨터 시스템은 프로세서 및 메모리 사이와 같은 시스템 구성 요소들 간의 통신을 가능하게 하기 위해 종종 하나 이상의 상호 연결을 사용한다. 상호 연결은 또한 입출력(I/O) 장치, 다른 프로세서 또는 가속기(accelerator)에 대한 연결을 지원하는데 사용될 수 있다. 다양한 유형의 상호 연결 프로토콜이 현재 서로 다른 유형의 상호 연결을 통한 데이터 전송을 지원하기 위해 사용되고 있으며, 새로운 상호 연결 프로토콜이 지속적으로 개발되어 시장에 소개되고 있다. 예를 들어, 멀티-칩 구성, 엑서스케일(exascale) 노드 아키텍처(architecture), PIM(processing-in-memory) 아키텍처, 고속 메모리 장치를 위해 새로운 상호 연결 프로토콜이 확장 및 개발되고 있다. 그러나 노드간 통신은 대역폭 소비 측면에서 측정될 때 비용이 많이들 수 있다. 대역폭 소비가 증가하면 전력 소비가 증가하고 통신 대기 시간이 늘어날 수 있다.
상기를 고려할 때, 노드간 대역폭 소비를 감소시키기 위한 개선된 시스템 및 방법이 요구된다.
노드간 대역폭 소비를 감소시키기 위한 시스템, 장치 및 방법이 고려된다.
다양한 실시 예들에서, 컴퓨터 시스템은 하나 이상의 타겟 노드들에 트랜잭션(transaction)을 보내는 하나 이상의 요청자 노드(requester node)들을 포함한다. 요청자 노드는 타겟 노드의 저장 위치를 읽거나 쓰도록(read or wirte) 구성된 트랜잭션을 전송할 수 있다. 다양한 실시 예들에서, 요청자 노드는 요청 자노드로부터 타겟 노드로의 하나 이상의 트랜잭션들의 후속 전달 동안 요청자 노드에 의한 사용을 위한 레지스터를 할당하기 위해 타겟 노드에 요청을 전송한다. 이 요청은 일반적으로 데이터 블록이 기록되는(예를 들어, 쓰기 트랜잭션의 경우) 타겟 노드 내의 메모리 위치의 어드레스를 포함 할 수 있다. 요청된 위치는 예를 들어, 동적으로 할당된 메모리 위치 또는 전용 레지스터일 수 있다.
요청을 수신한 후, 타겟 노드는 레지스터가 트랜잭션(들) 동안 요청자에 의해 사용 가능한지 여부를 결정한다. 만약 그렇다면, 타겟 노드는 수신된 어드레스를 레지스터에 저장하고, 레지스터의 ID (identification)와 함께 요청자 노드에 응답을 전송한다. 다양한 실시 예들에서, 요청자 노드는 후속하여 패킷의 형태로 하나 이상의 트랜잭션을 타겟 노드로 전송한다. 다양한 실시 예들에서, 패킷들 각각은 타겟 노드 내에서 타겟되는 메모리 위치의 어드레스 대신에(in place of) 레지스터 ID를 포함한다. 패킷에서 사용되는 레지스터 ID는 어드레스 그 자체가 사용된 것 보다 일반적으로 더 적은 수의 비트(bit)를 사용할 수 있다. 일부 실시 예들에서, 요청자 노드는 타겟 노드에서 레지스터 세트의 소유권(ownership)을 갖는다. 그러한 경우, 요청자 노드는 타겟 노드에서 적어도 주어진 수의 레지스터의 사용을 보장받을 수 있다. 타겟 노드 내의 이러한 요청자-소유 레지스터는 레지스터 파일의 전용 레지스터이거나 또는 할당된 메모리 위치이거나 다른 것일 수 있다. 대안적으로, 요청자 노드는 타겟 노드 내의 특정 레지스터에 대한 소유권을 갖지 않을 수도 있다. 요청자 노드가 타겟 노드에서 하나 이상의 레지스터에 대한 소유권을 가지고 있는지 여부에 상관없이, 타겟 노드가 이용 가능한 레지스터가 없다고 결정하는 경우, 타겟 노드는 요청자에 사용을 위해 사용될 레지스터가 할당되지 않음을 표시와 함께 요청자 노드에 응답을 전송한다. 이 다음에, 요청자 노드는 다른 요청을 보낼 수 있다(예를 들어, 다시 시도한다). 대안적으로, 요청자 노드는 타겟 노드 내의 메모리 위치의 어드레스를 포함하는 패킷 내에 하나 이상의 트랜잭션을 전송할 수 있다.
레지스터 ID를 포함하는 패킷을 수신한 후, 타겟 노드는 레지스터 ID를 사용하여 트랜잭션에 대응하는 어드레스를 식별한다. 레지스터가 전용 레지스터인 실시 예들에서, 레지스터 ID는 레지스터 파일과 같은 레지스터 세트 내의 전용 레지스터를 직접 식별 할 수 있다. 레지스터가 동적으로 할당된 메모리 위치인 실시 예들에서, 레지스터 ID는 타겟 노드 내의 메모리 위치에 매핑(mapping)될 수 있다.
다양한 실시 예들에서, 타겟 노드는 레지스터가 요청자 노드에 의해 어떻게 할당되고 사용되는지를 결정한다. 타겟 노드는 다양한 자원 관리 기법(resource management scheme)을 기반으로 레지스터를 선택한다. 다른 실시 예에서, 요청자 노드와 타겟 노드 사이에 삽입 된 스위치는 레지스터를 포함하고 또한 레지스터가 어떻게 할당되고 사용되는지를 결정한다. 또 다른 실시 예들에서, 전술 한 바와 같이, 요청자 노드는 레지스터 세트의 소유권을 갖는다. 이 요청자-소유 레지스터는 타겟 노드 또는 스위치에 위치 할 수 있다. 그러한 경우, 요청자 노드는 타겟 노드 또는 스위치 내의 요청자-소유 레지스터가 어떻게 할당되고 사용되는지를 결정할 수 있다.
또한, 다양한 실시 예들에서, 타겟 노드는 레지스터에 저장된 메모리 어드레스에 대한 산술 연산(arithmetic operation) 또는 논리 연산(logical operation)을 수행한다. 예를 들어, 수신된 패킷은 저장된 메모리 어드레스 상에서 수행 될 연산을 나타내는 연산 코드(opcode)를 포함 할 수 있다. 예를 들어, 연산 코드는 사전-증가 연산, 사후-증가 연산, 포함된 오프셋 값을 갖는 가산 또는 감산, 어드레스 부속 범위와 포함된 피연산자 데이터 값 또는 다른 것들의 대체 또는 치환을 수행하는 것을 지시할 수 있다. 다양한 실시 예들에서, 연산은 메모리 액세스를 수행하기 위해 어드레스를 사용하기 전 또는 후에, 레지스터에 저장된 어드레스의 상태를 변경할 수 있다.
이들 및 다른 실시 예들은 다음의 설명 및 도면을 참조하여 추가로 이해 될 것이다. 본 명세서에 기술된 실시 예들은 프로세서, 주변 장치 등의 상호 연결을 통해 임의의 반도체, 메모리, 네트워크, 텔레콤 또는 다른 회사에 의해 사용될 수 있다. 실시 예들은 임의의 온-칩, 오프-칩 통신 매체에 사용될 수 있다.
방법들 및 메커니즘들의 상기 및 추가 이점들은 첨부 도면들과 함께 다음의 설명을 참조함으로써 더 잘 이해 될 수 있다;
도 1은 컴퓨팅 시스템의 일 실시 예의 일반화된 블록도이다.
도 2는 입/출력(I/O) 레지스터 파일을 사용하기 위한 프로토콜의 일 실시 예의 일반화된 블록도이다.
도 3은 요청자 노드와 타겟 노드 사이의 패킷을 포함하는 명령의 일 실시 예의 일반화된 블록도이다.
도 4는 요청자 노드와 타겟 노드 사이의 패킷을 포함하는 명령의 다른 실시 예의 일반화된 블록도이다.
도 5는 감소된 패킷 오버헤드를 갖는 전송 패킷의 일 실시 예의 일반화된 블록도이다.
도 6은 감소된 패킷 오버헤드를 갖는 패킷을 전송하기 위한 방법의 일 실시 예를 나타내는 일반화된 흐름도이다.
도 7은 감소된 패킷 오버헤드를 갖는 패킷을 전송하기 위한 방법의 또 다른 실시 예를 나타내는 일반화 된 흐름도이다.
도 8은 감소된 패킷 오버 헤드를 갖는 패킷을 전송하기 위한 방법의 또 다른 실시 예를 나타내는 일반화된 흐름도이다.
도 9는 감소된 패킷 오버 헤드를 갖는 패킷을 전송하기 위한 방법의 또 다른 실시 예를 나타내는 일반화된 흐름도이다.
이하의 설명에서, 본 발명의 완전한 이해를 돕기 위해 다수의 특정한 세부 사항이 제시된다. 그러나, 당업자는 본 발명이 이러한 특정 세부 사항들없이 실시 될 수 있다는 것을 인식해야 한다. 몇몇 경우들에서, 잘 알려진 회로, 구조 및 기술은 본 발명을 모호하게 하는 것을 피하기 위해 상세하게 설명되지 않았다.
도 1을 참조하면, 컴퓨팅 시스템의 일 실시 예를 나타내는 일반화된 블록도가 도시된다. 컴퓨팅 시스템은 하나 이상의 요청자(또는 요청) 노드들(110a-110b) 및 하나 이상의 타겟 노드들(140a-140b)을 포함한다. 비록 4 개의 노드가 도 1에 도시되어 있지만, 다른 실시 예들은 상이한 개수의 노드들을 포함 할 수 있다. 또한, 요청 노드들(110a-110b)은 다른 노드들로부터 서비스하기 위한 트랜잭션을 수신하는 타겟 노드들로서 동시에 사용될 수 있다. 마찬가지로, 타겟 노드들(140a-140b)은 다른 노드들이 서비스하기 위한 트랜잭션을 생성하는 요청자 노드들로서 동시에 사용될 수 있다.
노드들(110a-110b 및 140a-140b)은 서로 통신하기 위해 네트워크(130) 및 상호 연결 링크(132)를 사용한다. 통신은 노드들 간에 전송된 트랜잭션들을 포함 할 수 있다. 트랜잭션에는 타겟된 데이터의 읽기 연산, 타겟된 데이터의 쓰기 연산, 통계 또는 기타 정보 요청, 스레드(threads) 또는 데이터 마이그레이션(magration) 요청 등이 포함될 수 있다. 전송되는 트랜잭션은 패킷들에 포함될 수 있다. 패킷들은 노드들(110a-110b 및 140a-140b)에 의한 라우팅(routing) 및 프로세싱(processing)에 사용되는 헤더(header)를 포함한다. 노드들(110a-110b 및 140a-140b) 사이의 상호 연결 링크(132) 상의 패킷 오버헤드를 최소화하는 것은 유효 데이터 대역폭을 증가시키고 대기 시간을 감소시킬 수 있다. 본 명세서에 사용된 바와 같이, "패킷"이라는 용어는 임의의 특정 포맷으로 제한되지 않는다. 오히려 패킷은 데이터 전달에 사용되는 다양한 형식 중 하나를 가질 수 있다.
도 1은 노드들 간에 전송되는 패킷들의 크기가 감소될 수 있는 시스템의 실시 예를 도시한다. 노드들(110a-110b 및 140a-140b) 각각은 메모리에 연결된 프로세싱 요소들을 포함 할 수 있다. 예를 들어, 노드들(110a-110b 및 140a-140b) 각각은 데스크톱 컴퓨터, 서버, 랩톱, 태블릿 컴퓨터, 스마트 폰 등과 같은 컴퓨팅 장치일 수 있다. 대안적으로, 노드들(110a-110b 및 140a-140b) 각각은 SOC(system on a chip), PIM(processing-in-memory) 노드 또는 다른 것과 같은 컴퓨팅 유닛일 수 있다.
다양한 실시 예들에서, 요청자 노드들(110a-110b) 및 타겟 노드들(140a-140b)은 다양한 통신 프로토콜 중 임의의 것을 사용하여 네트워크(130)를 통해 상호 연결 링크(132)를 통해 서로 연결된다. 예를 들어, 노드들(110a-110b) 및 노드들(140a-140b)이 별개의 컴퓨팅 장치 인 실시 예에서, 네트워크 (130) 및 상호 연결 링크(132)는 이더넷(Ethernet), 피버 채널(Fibre Channel), TCP/IP, Wi-Fi 접속 등과 같은 네트워크 프로토콜을 이용할 수 있다. 대안적으로, 노드들(110a-110b) 및 노드들(140a-140b)이 컴퓨팅 장치 내의 분리된 집적 회로(IC)들, 반도체 다이들 또는 PIM 노드들인 실시 예에서, 네트워크(130) 및 상호 연결 링크(132)들은 PCIe (Peripheral Component Interconnect Express), 하이퍼 트랜스포트(Hyper Transport) 또는 RapidIO를 사용하여 점 대 점 통신(point-to-point communication)을 제공 할 수 있다. 이들 및 다른 프로토콜 및 상호 연결 기술이 가능하며 고려된다.
도시된 예에서, 요청자 노드(110a)는 프로세서(112), 프로세서(112)에 연결된 메모리(114) 및 마찬가지로 프로세서(112)에 연결된 인터페이스(116)를 포함한다. 컴퓨팅 시스템 내의 다른 노드들 각각은 유사한 구성 요소들을 포함할 수 있다. 프로세서(112)는 몇몇 공지된 유형의 프로세서 중 하나 일 수 있다. 예를 들어, 프로세서(112)는 범용 CPU(중앙 처리 유닛), SIMD(단일 명령 다중 데이터) 프로세서, GPU (그래픽 처리 유닛), 이종(heterogeneous) 처리 장치 등을 포함할 수 있다. 다양한 실시 예들에서 프로세서(112)는 운영 체제 및 펌웨어와 같은 제어 소프트웨어 및 여러 유형의 명령의 세트 아키텍쳐(instruction set architectures, ISAs) 중 하나로부터의 명령어를 포함하는 소프트웨어 어플리케이션을 모두를 처리하기 위한 하나 이상의 프로세싱 코어(processing core)들을 포함할 수 있다. 인터페이스(116)는 네트워크(130) 및 상호 연결 링크를 통해 다른 노드와의 통신을 지원하는데 사용되는 제어 로직 및 버퍼들 또는 큐(queue)들을 포함할 수 있다. 제어 로직은 하드웨어, 소프트웨어, 또는 하드웨어와 소프트웨어의 조합으로 구현될 수 있다. 메모리(114)는 임의의 적절한 메모리 장치를 포함할 수 있다. 메모리 장치의 예로는 RAMBUS DRAM(dynamic random access memorie)들, SDRAM(synchronous DRAM)들, DRAM, 정적 RAM, 3차원 집적화된 DRAM 등이 있다. 다른 예에서, 프로세서(112) 및 메모리(114)는 PIM 노드에서 결합된다.
다양한 실시 예들에서, 컴퓨팅 시스템의 어드레스 공간은 노드들(110a-110b 및 140a-140b) 사이에서 분할될 수 있다. 노드들(110a-110b 및 140a-140b)은 어떤 어드레스들이 어떤 시스템 메모리에 매핑되는지를 결정하는데 사용되며, 따라서, 노드들(110a-110b 및 140a-140b) 중 하나가 특정 어드레스에 대한 메모리 요청이 라우팅되어야 하는지를 결정하는데 사용되는 메모리 맵 또는 다른 데이터 구조를 포함한다. 일부 실시 예에서, 컴퓨팅 시스템(도시되지 않음) 내의 어드레스에 대한 캐시 일관성 포인트는 어드레스에 대응하는 데이터를 저장하는 메모리에 결합된다.
도 1에 도시된 바와 같이, 타겟 노드(140a)는 요청자 노드들에 의해 사용될 수 있는 레지스터 자원들(152)을 포함한다. 다양한 실시 예들에서, 레지스터 자원들(152) 내의 레지스터들은 요청자 노드(들)(110a-110b)로부터 전송된 패킷들에 사용되는 메모리 어드레스들과 같은 데이터 값들을 저장하는데 사용될 수 있다. 다양한 실시 예들에서, 레지스터 자원들(152)은 레지스터 파일로 조직화된 다수의 레지스터들을 포함할 수 있다. 대안적으로, 레지스터 자원들(152)은 타겟 노드(140a)의 메모리 내의 어드레스 공간에 조직화된 다수의 메모리 위치들을 포함할 수 있다. 도시된 예에서, 타겟 노드(140a)는 N개의 레지스터들을 포함하고, N은 0이 아닌 정수이다. 할당된 저장 위치들은 크로스 해치(crosshatch)된 것으로 표시되지만, 사용 가능한 레지스터들은 크로스 해치되지 않은 것으로 표시된다.
주어진 시간에, 현재 사용되지 않으며 사용을 위해 할당될 수 있는 주어진 개수의 레지스터들(J)이 존재할 수 있다. 레지스터 자원들(152)의 저장 위치가 CAM 내의 물리적 레지스터들 또는 엔트리(entrie)들인 실시 예에서, (사용 중이고 사용 가능한)레지스터의 총 수는 N으로 고정된다. 그러나, 레지스터 자원들(152) 내의 저장 위치들이 메모리의 메모리 위치들에 할당되는 실시 예들에서, 메모리 자원들이 변함에 따라 레지스터들의 총수 N이 변경될 수 있다. 예를 들어, 레지스터 자원들(152)에 대해 이용 가능한 메모리의 양은 시스템 메모리의 메모리 공간이 다른 용도를 위해 제공되기 때문에 감소될 수 있다. 따라서 레지스터들의 총 숫자 N이 줄어들 수 있다. 유사하게, 레지스터 자원들(152)에 대해 이용 가능한 메모리의 양은 메모리 공간이 레지스터 자원들(152)에 대해 제공 될 때 증가할 수 있다. 따라서, 레지스터들의 총 숫자 N이 증가할 수 있다. 일부 실시 예들에서, 할당될 수 있는 레지스터들의 수에 대한 상한(M)이 프로그래밍 방식으로 또는 제조 시에 설정 될 수 있다.
레지스터 자원 제어 로직(150)(그렇지 않으면 제어 로직(150)이라고도 함)은 레지스터 리소스들(152) 내의 레지스터의 할당 및 할당 해제를 결정하는데 사용될 수 있다. 일부 실시 예들에서, 제어 로직(150)은 타겟 노드(140a) 내의 인터페이스 로직에 위치한다. 다른 실시 예들에서, 제어 로직(150)은 메모리 컨트롤러, 프로세서 또는 다른 유닛에 위치한다. 제어 로직(150)은 또한 레지스터 식별자들을 저장하는 엔트리를 갖는 테이블, 레지스터가 할당을 위해 이용 가능한지 여부에 관한 표시, 할당을 요청하는 요청 노드들의 식별, 트랜잭션 ID 등을 관리하도록 구성 될 수 있다. 이 테이블은 입/출력(I/O) 레지스터 파일로서 지칭 될 수 있다(예를 들어, 노드(110a)에 도시 된 바와 같이).
도시된 바와 같이, 요청자 노드(110a)는 레지스터 파일 제어 로직(120) 및 하나 이상의 I/O 레지스터 파일(122-124)을 포함한다. 타겟 노드(140a)에 대한 I/O 레지스터 파일과 유사하게, I/O 레지스터 파일(122-124) 각각은 정보를 테이블의 엔트리에 저장할 수 있다. 각각의 테이블 엔트리는 주어진 데이터 값을 저장하기 위해 할당 된 타겟 노드들(140-140b) 중 하나의 레지스터와 관련된 하나 이상의 레지스터 ID, 주어진 데이터 값, 타겟 노드들(140a-140b) 중 하나를 식별하는 표시, 트랜잭션 ID 등을 포함 할 수 있다. 일부 실시 예들에서, I/O 레지스터 파일(122-124)은 타겟 노드에 대한 I/O 레지스터 파일에 저장된 주어진 데이터 값을 저장하지 않는다. 예를 들어, 프로그램된 레지스터로부터의 시퀀스를 따르는 읽기 시퀀스(sequence of reads)가 알려진 경우, 연산 코드에 따라 목적 레지스터가 올바르게 업데이트된다는 가정하에 읽기(reads)가 차례로 전송될 수 있다.
다양한 실시 예들에서, 요청자 노드들(110a-110b)은 주어진 트랜잭션의 타겟인 어드레스를 포함하는 패킷들(160)을 전송하도록 구성된다. 또한, 요청자 노드들(110a-110b)은 타겟 어드레스를 패킷에서 어드레스보다 적은 비트를 사용하는 레지스터 식별자(ID)로 대체하는 패킷들(170)을 전송하도록 구성될 수 있다. 레지스터 ID는 대체된 어드레스를 저장하거나 저장하는 위치를 표시할 수 있는 타겟 노드의 레지스터를 식별합니다. 또한, 요청자 노드에 의해 전달된 패킷들은 식별된 레지스터에 저장된 데이터 값에 대해 수행할 산술 연산을 나타낼 수 있다(예를 들어, 패킷들은 주어진 연산에 대응하는 연산 코드를 포함할 수 있다). 예를 들어, 레지스터가 메모리 어드레스를 저장하는 실시 예들에서, 패킷의 연산 코드는 메모리 어드레스가 패킷이 처리되기 전(pre) 또는 이후(post) 중 어느 하나에서 증가되어야 함을 나타낼 수 있다. 이들 및 다른 실시 예는 아래에서 더 상세히 설명 될 것이다.
이제 도 2를 참조하면, 입/출력(I/O) 레지스터 파일을 사용하기 위한 프로토콜의 일 실시 예가 도시된다. 도시된 바와 같이, 타임 라인(상부에서 하부로)에서의 일련의 이벤트는 요청자 노드(110a)와 타겟 노드(140a) 사이에서 발생할 수 있다. 특정 이벤트가 시간들 1-6에서 발생하는 것으로 도시되어 있지만, 도시되지 않은 다양한 다른 이벤트 또는 다른 이벤트들이 또한 발생할 수 있음에 유의해야 한다. 또한 일부 이벤트는 잠재적으로 다른 순서로 또는 적어도 일부 동시성으로 수행 될 수 있다. 상기 이벤트는 상기 요청자 노드(110a) 및 상기 타겟 노드(140a) 각각의 내의 제어 로직에 의해 수행될 수 있다.
시간 1 동안, 요청자 노드(110a)는 타겟 노드(140a) 내의 위치를 타겟으로 하는 하나 이상의 입출력(I/O) 트랜잭션을 준비한다. 다양한 실시 예들에서, 요청자 노드(110a)는 버퍼링된 I/O 트랜잭션에 대한 하나 이상의 어드레스를 결정한다. 예를 들어, 일련의 쓰기들이 타겟 노드(140a) 내의 어드레스들에 대해 수행될 수 있다. 그러면, 요청자 노드와 관련된 제어 로직은 I/O 트랜잭션과 연관된 어드레스가 패턴을 나타내는지를 결정할 수 있다. 예를 들어, 제어 논리는 버퍼링된 I/O 트랜잭션을 분석하여 순차 패턴(sequential pattern), 주어진 폭을 갖는 패턴(a pattern with a given stride) 또는 다른 식별 가능한 패턴을 나타내는지를 결정할 수 있다. 그 후, 요청자 노드(110a)는 타겟 노드(140a)에서 레지스터의 할당에 대한 요청을 전송할 수 있다. 상기 타겟 노드(140a)는 상기 요청을 수신하고 이용 가능한 레지스터가 존재하는지 여부를 결정한다. 만약 그렇다면, 이용 가능한 레지스터가 요청자로의 할당을 위해 선택되고, 요청에 의해 식별된 어드레스(예를 들어, 쓰기 블록에 대한 베이스 어드레스)가 할당된 레지스터에 저장된다. 추가로, 타겟 노드(140a)는 할당된 레지스터가 현재 사용을 위해 할당되었고 현재 이용 가능하지 않다는 표시를 저장할 수 있다. 또한, 타겟 노드에 의해 저장될 수 있는 다른 정보는 레지스터가 할당된 요청 노드(110a)를 식별하는 하나 이상의 표시, 트랜잭션 ID 등을 포함한다. 다양한 실시 예들에서, 이 정보는 I/O 레지스터 파일의 엔트리에 저장될 수 있다.
시간 2에서, 타겟 노드(140a)는 요청자 노드로 성공적인 레지스터의 할당 및 대응하는 레지스터 ID를 표시하는 응답을 전송한다. 요청자 노드(110a)는 응답을 수신하고 레지스터 ID를 저장한다(예를 들어, 그것의 I/O 레지스터 파일 중 하나에). 시간 3에서, 요청자 노드(110a)는 I/O 트랜잭션(예를 들어, 이전에 버퍼링된)을 전송한다. I/O 트랜잭션을 전송할 때, 요청자 노드(110a)는 트랜잭션의 타겟을 나타내는 패킷에 대한 어드레스를 포함하지 않는다. 오히려, 요청자 노드는 수신된 레지스터 ID를 포함한다. 또한, 일부 실시 예들에서, 요청자 노드(110a)는 레지스터에 저장된 값에 대해 수행될 산술 연산의 표시를 포함할 수도 있다. 이 연산 코드는 I/O 트랜잭션이 읽기 연산, 쓰기 연산, 정보 수집 요청 등에 해당하는지 여부에 대한 표시와는 별개이다. 예를 들어, 패킷 내의 연산 코드는 패킷에 포함된 데이터가 레지스터에 의해 식별된 메모리 위치에 기록된 후에(또는 전에) 레지스터에 저장된 어드레스가 증가되어야 함을 나타낼 수 있다. 증가양은 알려진 블록 크기에 의한 증가만큼과 같이 연산 코드도 인코딩될 수 있다. 캐시 라인은 알려진 블록 크기의 한 예이다. 다른 예들이 가능하며 고려될 수 있다.
레지스터 ID 및 연산 코드에 추가하여, 일부 실시 예들에서 요청자 노드(110a)는 패킷 데이터 내에 피연산자 데이터를 포함 할 수 있다. 예를 들어, 증분 값 또는 스트라이드(stride) 값이 피연산자 데이터로 전송 될 수 있다. 대안적으로, 피연산자 데이터는 레지스터에 저장된 현재 값을 대체하기 위해 사용될 새로운 값일 수 있다. 따라서, 요청자 노드(110a)가 I/O 트랜잭션들에 대한 후속 패킷들을 전송할 때, 레지스터는 요청자 노드로부터의 최초 요청과 함께 전달된 것과 동일한 값을 반드시 저장할 필요는 없다. 오히려, 타겟 노드는 각각의 패킷이 타겟 노드에 의해 수신된 후에 레지스터에 저장된 어드레스를 자동으로 변경(예를 들어, 증가 스트라이드 값 적용 등)할 수 있다. 이러한 방식으로, 수신된 데이터(또는 반대로 수신된 읽기 요청)는 레지스터에 저장된 정확한 어드레스와 연관될 수 있다.
상기 타겟 노드(140a)가 패킷을 수신 할 때, 그것은 패킷을 즉시 처리하거나 나중에 처리하기 위해 버퍼링할 수 있다. 패킷에 의해 식별된 원하는 트랜잭션을 확인하면, 타겟 노드(140a)는 패킷 내의 정보를 처리하고 패킷에서 연산을 수행한다. 검증(verification)은 식별 된 레지스터가 요청 노드에 할당되는지를 결정하는 것을 포함할 수 있다. 연산을 수행하는 것은 지정된 레지스터에 저장된 데이터로부터 생성 된 어드레스로 I/O 트랜잭션을 생성하는 것을 포함할 수 있다. 예를 들어, 트랜잭션은 특정 형식을 따르는 패킷 및 트랜잭션을 처리하도록 구성된 장치 또는 구성 요소를 대상으로 할 수 있다. 그러한 포맷은 트랜잭션의 타겟인 어드레스를 갖는 헤더를 포함할 수 있다. 요청자 노드로부터 수신된 패킷이 그러한 포맷(예를 들어, 어드레스가 레지스터 식별자로 대체되고 새 연산 코드가 추가 된 경우 등)을 따르지 않을 수 있기 때문에, 컴포넌트는 패킷을 처리 할 수 없다. 이를 해결하기 위해, 타겟 노드는 수신된 패킷과 지정된 레지스터에 저장된 데이터로부터 생성된 어드레스를 사용하여 예상된 형식(들)을 따르는 I/O 트랜잭션을 생성하도록 구성됩니다. 이러한 방식으로, 시스템 내의 다른 구성 요소들은 신규 또는 수정된 하드웨어 및/또는 소프트웨어의 필요 없이 트랜잭션의 처리를 진행할 수 있다.
상기에 더하여, 타겟 노드(140a)는 또한 필요에 따라 하나 이상의 레지스터가 다른 프로세스 또는 다른 요청자 노드에 대한 할당을 허용하기 위해 할당 해제되어야 한다고 결정할 수 있다. 할당 해제 할 레지스터의 선택은 다양한 조건 중 하나를 기반으로 할 수 있다. 예를 들어, 타겟 노드(140a)는 트랜잭션 또는 레지스터들에 저장된 값과 관련된 우선 순위 레벨들에 기초하여 할당 해제 할 레지스터들을 선택할 수 있다. 상기 타겟 노드(140a)는 또한 레지스터들에 저장된 어드레스들의 크기에 기초하여 할당 해제 할 레지스터들을 선택할 수 있다. 예를 들어, 더 작은 어드레스를 저장하는 레지스터가 먼저 할당 해제 될 수 있다. 또한, 타겟 노드(140)는 할당을 해제하기 위한 레지스터를 선택하기 위해 LRU(least-recently-used) 알고리즘을 사용할 수 있다. 이들 및 다른 조건들 및 조건들의 조합은 할당 해제 할 레지스터를 선택하는데 사용될 수 있다.
일부 실시 예들에서, 요청자 노드는 할당된 레지스터의 사용을 더 이상 필요로 하지 않는 표시를 전달할 것이다(명시 적으로 또는 암시 적으로). 이것을 검출하거나 결정하는 것에 응답하여, 상기 타겟 노드는 이전에 할당된 레지스터를 할당 해제 할 수 있다. 다른 실시 예들에서, 어떤 시점(예를 들어, 시간 4)에서, 타겟 노드(140a)는 시간 1에 할당된 레지스터가 요청자 노드(110a)로부터 임의의 통지를 수신하지 않고 할당 해제되어야 한다고 결정할 수 있다. 몇몇 경우에 있어서, 요청 노드(110a)는 타겟 노드가 레지스터를 할당 해제하기로 결정할 때 상기 레지스터를 사용하여 종료 될 수 없다. 이러한 경우에, 요청자 노드(110a)는 타겟 노드로부터 퇴거 통지(eviction notice)를 수신할 수 있다. 레지스터의 사용을 상실한 요청자 노드 (110a)는 패킷(들)에 포함된 필요한 어드레스를 갖는 패킷을 전송함으로써 레지스터와 관련된 프로세싱 I/O 트랜잭션을 종료할 수 있다. 대안적으로, 요청자 노드(110a)는 시간 1을 반복하도록 결정할 수 있고, 타겟 노드(140a)에서 사용하기 위한 또 다른 레지스터를 요청할 수 있다. 요청자 노드에 의한 결정은 처리 할 수 있는 남아있는 I/O 트랜잭션의 수와 같은 다양한 요인에 기초 할 수 있다. 예를 들어, 비교적 많은 수의 트랜잭션이 남아있는 경우. 그런 다음 레지스터 ID 기반 접근법을 사용하여 오버 헤드를 절약하면 시간 1로 돌아갈 가치가 있는 것으로 간주 될 수 있다. 다양한 실시 예들에서, 요청자 노드(110a)는 각각의 미확인된 계류중인 트랜잭션을 추적할 수 있다. 따라서, 요청자 노드 (110a)는 주어진 시간 간격 후에 또는 다른 자격 조건 후에와 같이 재 시도될 필요가 있는 트랜잭션을 식별할 수 있다.
시간 5에서, 요청자 노드(110a)가 타겟 노드(140a)에서 퇴거된 레지스터와 연관된 레지스터 ID를 사용하여 패킷을 전송하면, 타겟 노드(140a)는 검증 프로세스 동안 퇴거를 검출할 수 있다. 예를 들어, 요청자 노드(110a)는 이전에 수신된 퇴거 통지를 완전히 처리하기 전에 실수로 패킷을 전송할 수 있다. 대안적으로, 요청자 노드(110a)는 타겟 노드(140a)가 관련된 레지스터의 퇴거에 대한 통지를 전송할 수 있기 전에도 상기 패킷을 전송할 수 있다. 시간 6에서, 타겟 노드(140a)는 에러의 표시와 함께 패킷을 전송한다. 오류는 퇴거된 레지스터에 액세스하려고 했거나 현재 다른 프로세스 또는 다른 요청자 노드가 소유한 레지스터에 액세스 하려고 했기 때문일 수 있다.
이 제도 3을 참조하면, 요청자 노드들과 타겟 노드들 사이의 패킷에 포함될 수 있는 명령의 일 실시 예의 일반화된 블록도가 도시된다. 명령의 필드는 연속적인 방식으로 저장되고 특정 순서로 저장되는 것으로 표시되지만, 필드의 배치는 그림 3에 표시된 예와 다를 수 있다. 또한, 도 3의 예에 도시되지 않은 다른 필드가 패킷에 저장될 수 있다. 예를 들어, 트랜잭션, 가상 채널 등의 표시는 명령들(310-340) 중 하나 이상과 함께 패킷 내에 저장될 수 있다. 또한 트랜잭션 ID는 이전에 전송된 처리된 트랜잭션과 응답을 일치시키는 데 사용될 수 있다. 가상 채널 ID는 소정의 할당을 유지하고 채널 혼잡을 완화 또는 방지하기 위해 주어진 가상 채널을 식별하는데 사용될 수 있다. 패킷에 포함될 다른 필드가 가능하며 고려된다.
명령(310)은 타겟 노드 내의 메모리 위치를 읽는데 사용될 수 있다. 명령(310)은 패킷을 수신하기 위한 타겟 노드를 나타내는 목적지(destination) 필드(312)를 포함한다. 연산 코드 필드(314)는 수행 할 연산이 메모리 위치를 읽는 것임을 지시한다. 어드레스(316)는 읽을 메모리 위치의 어드레스를 나타낸다. 도시 된 바와 같이, 명령들(320, 330 및 340)은 또한 목적지 필드(322, 332 및 342)를 포함한다. 목적지 필드(312)와 유사하게, 이들 필드는 패킷을 수신하고 처리할 타겟 노드를 식별하는데 사용되는 정보를 저장한다.
명령(320)은 타겟 노드에서 레지스터의 할당을 요청하는데 사용된다(예를 들어, 전술 한 바와 같이, 베이스 어드레스와 같은 데이터 값을 저장하기 위해). 연산 코드 필드(324)는 이 요청을 나타낸다. 일부 실시 예에서, 필드(326)는 할당된 레지스터에 저장하는 데 사용되는 베이스 어드레스를 나타낸다. 다른 실시 예들에서, 필드(326)는 지정된 타겟 노드 내의 할당된 레지스터에 저장하기 위한 베이스 어드레스 이외의 데이터 값을 나타낼 수 있다.
명령(330)은 지정된 타겟 노드 내의 메모리 위치를 읽고 필드(336)에 의해 식별된 레지스터에 저장된 어드레스를 업데이트하는데 사용된다. 연산 코드 필드 (334)는 이 요구 및 수행될 업데이트 유형을 지시한다. 예를 들어, 일부 실시 예에서, 표시된 업데이트는 전-처리(pre-processing) 증가 또는 감소 연산일 수 있다. 다른 실시 예에서, 표시된 업데이트는 후-처리(post-processing) 증가 또는 감소 연산이다. 필드(336)는 지정된 타겟 노드에서 사용할 레지스터의 표시를 저장할 수 있다. 예를 들어, 레지스터 ID는 필드(336)에 저장될 수 있다. 레지스터를 표시하는 다른 형태도 사용될 수 있다. 필드(336)는 타겟 노드의 어드레스를 표시하기 위해 사용되는 필드들(316 및 326)보다 작은 수의 비트를 사용할 수 있음을 유의해야 한다. 적은 수의 비트를 사용하면 패킷 오버 헤드가 줄어들 수 있다. 패킷 오버 헤드를 줄이면 사용 가능한 데이터 대역폭이 증가하고, 요청자 노드와 타겟 노드 사이의 상호 연결 링크에 대한 대기 시간이 줄어들 수 있다.
명령(340)은 지정된 타겟 노드에서 메모리 위치의 읽기를 요청하고 지정된 오프셋에 기초하여 어드레스를 업데이트하는데 사용된다. 연산 코드 필드(344)는 이 요청을 나타낸다. 명령(330)의 필드(336)와 유사하게, 명령(340)의 필드(346)는 지정된 타겟 노드에서 사용할 레지스터의 표시를 저장할 수 있다. 필드(348)는 필드(344)에 의해 표시된 업데이트를 위해 사용하기 위한 오프셋의 표시를 저장할 수 있다. 업데이트는 어드레스와 같은 데이터 값의 전-처리 업데이트 일 수 있다. 대안적으로, 업데이트는 레지스터에 저장된 데이터 값의 후-처리 업데이트 일 수 있다. 오프셋으로, 일부 실시 예에서, 업데이트는 읽기 연산과 연관된 어드레스에 스트라이드 값을 부가한다. 대안적으로, 업데이트는 어드레스에서 스트라이드 값을 차감한다. 오프셋을 사용하는 많은 다른 유형의 업데이트가 가능하며 고려된다.
명령들(330-340)은 메모리 쓰기 요청들을 생성하도록 수정 될 수 있다. 추가적인 필드는 지정된 타겟 노드 내의 메모리 위치를 수정하는데 사용하기 위한 쓰기 데이터의 표시를 저장하는데 사용될 수 있다. 그러나, 쓰기 연산들은 타겟 쓰기 위치들의 어드레스를 사용하는 대신에 여전히 필드들(336 및 346)을 사용할 것이다.
이제 도 4를 참조하면, 명령(410) 및 타겟 노드(480)의 일반화된 블록도가 도시된다. 도시된 바와 같이, 타겟 노드(480)는 적어도 하나의 입력/출력(I/O) 레지스터 파일(430), 메모리(440) 및 업데이트 로직(450)을 포함한다. 다른 제어 로직은 설명의 편의를 위해 도시되지 않았다. 또한, 명령(410)은 요청자 노드로부터 타겟 노드(480)로 보내지는 패킷 내의 명령을 나타낼 수 있다. 앞서 설명한 바와 같이, 타겟 노드는 패킷을 수신하고, 패킷을 검증하고, 패킷 내의 정보를 처리한다.
도시된 실시 예에서, I/O 레지스터 파일(430) 내의 할당된 레지스터는 데이터 값을 저장하도록 구성된다. 다양한 실시 예에서, 이들 데이터 값은 메모리(440)를 액세스하는데 사용되는 어드레스이다. 타겟 노드(480)는 수신된 명령(410)에 저장된 정보에 기초하여 I/O 레지스터 파일(430)의 특정 할당된 레지스터에 저장된 데이터 값을 변경할 수 있다. 도시 된 예에서, 수신 된 커맨드(410)는 필드들(412-422)을 포함한다. 명령(410)의 필드들(412-422)은 연속적인 방식으로 저장되고 특정 순서로 저장되는 것으로 도시되어 있지만, 필드의 배치는 도 4에 도시된 예와 다를 수 있다. 도 3의 예들과 유사하게, 명령(410)을 포함하는 패킷은 도시되지 않은 다른 필드들을 포함 할 수 있다.
명령(410)은 타겟 노드(480)의 I/O 레지스터 파일(430) 내의 특정 할당된 레지스터에 저장된 데이터 값을 업데이트하는데 사용될 수 있다. 목적지 필드(412)는 특정 레지스터가 위치되는 타겟 노드의 식별자를 저장할 수 있다. 연산 코드 필드(414)는 특정 레지스터에 저장된 데이터 값에 수행할 업데이트 유형의 지시를 저장할 수 있다.
필드(416)는 지정된 타겟 노드(480)에서 사용하기 위한(예를 들어, I / O 레지스터 파일 (430)에서) 특정 레지스터의 식별자를 저장할 수 있다. 예를 들어, 레지스터 ID가 필드(416)에 저장 될 수 있다. 레지스터를 나타내는 다른 형태가 사용될 수도 있다. 이러한 예에서 도시 된 바와 같이, 저장된 식별자는 지정된 타겟 노드(480) 내의 I/O 레지스터 파일(430)에 색인(index) 하기 위해 사용될 수 있다. 일부 실시 예들에서, 필드(416)에 저장된 표시는 I/O 레지스터 파일(430)에 직접 색인하기 위해 사용될 수 있다. 다른 실시 예들에서, 필드(416)에 저장된 정보는 하나 이상의 매핑 테이블에 액세스하여 I/O 레지스터 파일(430)로 색인하기 위한 값을 제공하는데 사용될 수 있다(하나 이상의 간접 레벨이 있을 수 있음). 필드(416)는 그렇지 않으면 타겟 어드레스를 저장하기 위해 사용되는 것보다 적은 비트를 사용할 수 있음을 유의해야 한다.
필드들(418 및 420)은 업데이트할 특정 레지스터에 저장된 데이터 값의 범위의 표시들을 저장하는데 사용될 수 있다. 예를 들어, 일부 실시 예에서, 특정 레지스터에 저장된 데이터 값은 어드레스이고, 필드들(418 및 420)은 각각 어드레스 범위의 최상위 비트(most-significant bit, MSB) 및 어드레스 범위의 최하위 비트(least-significant bit, LSB)의 표시를 저장할 수 있다. 도시 된 바와 같이, 필드들(418 및 420)은 I/O 레지스터 파일(430)의 특정 레지스터에 저장된 데이터 값(432)의 부분 또는 범위를 식별하는데 사용된다. 필드(422)는 피연산자 데이터의 표시를 필드들(418 및 420)에 의해 지정된 데이터 값(432)의 범위와 결합하도록 저장할 수 있다. 도시 된 바와 같이, 업데이트 로직(450)은 데이터 값(432), 필드(422)로부터의 피연산자 데이터 및 필드(414)로부터의 연산 코드의 지정된 범위를 수신할 수 있다. 필드(422) 내의 피연산자 데이터와 데이터 값(432)의 범위를 결합하기 위해, 많은 다른 유형의 연산들이 필드(414)의 연산 코드에 의해 표시될 수 있다. 예를 들어, 필드(414)의 연산 코드는 증가, 감소, 스트라이드 값 적용, 불 연산(Boolean operation) 적용 등의 연산을 나타낼 수 있다.
I/O 레지스터 파일(430)의 레지스터에 저장된 데이터 값(432)을 업데이트하는 것은 데이터 값(432)을 사용하기 전에 발생할 수 있다. 대안적으로, I/O 레지스터 파일(430)의 레지스터에 저장된 데이터 값(432)을 업데이트하는 것은 데이터 값(432)을 사용한 후에 발생할 수 있다. 데이터 값(432)이 어드레스인 실시 예에서, 어드레스 범위의 업데이트는 어드레스(432)로 메모리(440)를 액세스하기 전에 수행될 수 있다. 대안적으로, 어드레스 범위의 업데이트는 어드레스(432)로 메모리(440)를 액세스한 후에 수행될 수 있다. 업데이트 로직(450)에 의해 생성된 데이터 값(432)의 업데이트된 부분은 데이터 값의 변경되지 않은 부분과 연결되어 전체 변경된 데이터 값을 제공할 수 있다. 데이터 값(432)이 어드레스인 실시 예들에서, 업데이트된 어드레스 부분은 완전히 업데이트된 어드레스를 제공하기 위해 변경되지 않은 어드레스 부분과 연결될 수 있다. 도시된 바와 같이, 변경된 데이터 값은 후속하는 I/O 트랜잭션에 의해 사용하기 위해 I/O 레지스터 파일(430)의 특정 레지스터에 저장될 수 있다. 또한, 변경된 데이터 값은 메모리(440)의 가능한 가속된 액세스를 위해 사용될 수 있다. 예를 들어, 메모리(440)로부터의 데이터는 변경된 데이터 값을 사용하여 프리페치(prefetch)될 수 있고 나중에 사용하기 위해 저장될 수 있다.
이제 도 5를 참조하면, 감소된 패킷 오버헤드를 갖는 패킷들을 전송하기 위한 일 실시 예의 블록도가 도시된다. 도시된 바와 같이, 요청자 노드 내의 프로세서(112)는 큐(queue)(또는 버퍼)(510)에 저장될 수 있는 I/O 트랜잭션들을 생성한다. 큐(510)는 I/O 트랜잭션들과 관련된 정보를 저장하기 위한 다수의 엔트리들을 포함할 수 있다. 각각의 엔트리는 I/O 트랜잭션, 목적지(타겟 노드), I/O 트랜잭션에 대응하는 연산의 표시, 및 타겟 노드 내의 메모리 위치의 어드레스를 식별하는 표시를 저장할 수 있다. 큐(510) 내의 각 엔트리에는 유효한 상태, 하나 이상의 타임 스탬프, 우선 순위 등을 나타내는 다른 표시가 또한 저장될 수 있다.
제어 로직(512)은 큐(510) 내의 주어진 I/O 트랜잭션이 감소된 패킷 오버 헤드로 처리되어야 하는지의 여부를 결정할 수 있다. 이러한 결정을 내리기 위해 제어 로직(512)에 의해 많은 인자들이 사용될 수 있다. 이러한 요소 중 일부는 타겟 노드의 I/O 레지스터 파일에서 레지스터 할당이 성공적으로 완료되었는지 여부, 타켓 노드가 레지스터 퇴거 통지, 동일한 트랜잭션 ID에 대응하는 다수의 I/O 트랜잭션들의 숫자 등을 보냈는지 여부 등을 포함할 수 있다.
다양한 실시 예들에서, 테이블(520)은 메모리 어드레스들과 타겟 노드들에 할당된 레지스터들의 레지스터 ID들 간의 매핑들을 저장하는데 사용된다. 다른 정보가 또한 테이블 (520)에 저장될 수 있다. 일부 실시 예들에서, 메모리 어드레스 이외의 데이터 값이 테이블(520)에 저장된다. 예를 들어, 포인터(pointer)는 큐(510) 내의 대응하는 엔트리에 저장될 수 있다. 레지스터들이 타겟 노드에서 요청되고 할당되며, 테이블 (520)이 업데이트될 수 있다. 유사하게, 레지스터가 할당 해제되거나 퇴거됨에 따라, 테이블(520)은 적절하게 업데이트될 수 있다. 일부 실시 예에서, 큐(510) 및 테이블(520)에 저장된 정보는 I/O 레지스터 파일을 형성하도록 결합될 수 있다. 대안적으로 정보는 물리적으로 분리된 위치들에 저장되지만 정보는 논리적 I/O 레지스터 파일에 엔트리들을 형성한다.
일반적으로 말하면, 큐(510) 및 테이블(520)에 저장된 정보는 오버 헤드가 감소된 패킷(515)과 같은 패킷들을 형성하는데 사용될 수 있다. 이러한 패킷들은 I/O 트랜잭션의 식별자, 요청자 노드(소스), 타겟 노드(목적지), I/O 트랜잭션의 연산, 레지스터 ID, 및 명령들(310- 340) 및 명령(410)에 대해 앞서 기술된 가능한 필드들을 포함할 수 있다. 패킷에서 타겟 어드레스를 제외하면, 패킷은 그것이 타겟 노드에 대한 상호 연결 링크를 통해 전송될 때 감소된 크기를 갖는다.
타겟 노드가 패킷을 수신 할 때, 타겟 노드의 제어 로직(530)은 수신된 패킷이 감소된 오버헤드 패킷으로서 처리되어야 하는지 여부를 결정한다. 다양한 실시 예들에서, 이 결정을 하는데 도움이 되는 표시가 패킷에 포함될 수 있다. 요청자 노드 내의 테이블(520)과 유사하게, 타겟 노드의 테이블(540)은 어드레스와 레지스터 ID 간의 맵핑을 저장한다. 테이블(540)에 저장된 다른 정보는 대응하는 요청자 노드(소유자)의 표시, 우선 순위 레벨, 어드레스 또는 다른 저장된 데이터 값의 크기, LRU 값, I/O 트랜잭션 또는 태스크를 식별하는 표시 등을 포함할 수 있다. 큐(550)는 큐(510)와 유사한 정보를 저장할 수 있지만, 타겟 노드(목적지) 보다는 요청자 노드(소스)의 식별자를 포함할 수 있다. 큐(510) 및 테이블(520)에서와 같이, 큐(550) 및 테이블(540)은 다양한 방식으로 결합될 수 있다. 일부 실시 예들에서, 블록들(530-550)은 타겟 노드에 위치하는 것이 아니라, 요청자 노드와 타겟 노드 사이의 요소(예를 들어, 스위치)에 위치할 수 있다. 블록들(530-550)의 기능을 스위치에 배치함으로써, 타겟 노드로서 동작하는 엔드 노드는 I/O 레지스터 파일의 유지를 지원하도록 재설계 될 필요가 없을 수 있다.
이제 도 6을 참조하면, 감소된 패킷 오버 헤드를 갖는 패킷들을 전송하기 위한 방법(600)의 일 실시 예가 도시된다. 설명을 위한 목적으로, 이 실시 예에서의 단계들은 순차적인 순서로 도시된다. 후술되는 방법의 다양한 실시 예들 및 본 명세서에 설명된 다른 방법들에서, 설명된 하나 이상의 요소들은 도시된 것과 다른 순서로 동시에 수행되거나 완전히 생략 될 수 있음에 유의 해야 한다. 다른 부가적인 요소들이 바람직하게 수행될 수 있다. 본 명세서에 기재된 다양한 노드들, 장치들 또는 시스템들 중 임의의 것은 방법(600)을 구현하도록 구성될 수 있다.
요청자 노드 내의 하나 이상의 프로세서들과 같은 프로세싱 요소들이 외부 타겟 노드로 전송하기 위해 I/O 트랜잭션을 생성 할 때, 블록(602)에서 입/출력(I/O) 대역폭 감소가 시작된다. 블록(604)에서, 요청자 노드는 다수의 I/O 트랜잭션들에 대응하는 데이터를 저장한다. 블록(606)에서, 요청자 노드는 다중 I/O 트랜잭션들에 대응하는 메모리 액세스들 중에서 패턴을 결정한다. 다른 실시 예들에서, 컴파일러(compiler)는 메모리 액세스들 중에서 패턴을 검출할 수 있다. 또 다른 실시 예들에서, 스위치의 오프-칩 메모리 제어기 또는 제어 로직과 같은 다른 오프-칩 하드웨어 구성 요소는 패턴을 검출하고 대응 표시를 요청자 노드로 보낼 수 있다. 블록(608)에서, 요청자 노드는 패턴에 기초하여 I/O 트랜잭션에 대한 하나 이상의 어드레스 업데이트를 결정한다.
블록(610)에서, 요청자 노드는 다수의 I/O 트랜잭션들에 대한 원격 레지스터의 할당 요청을 전송한다. 요청에 대해 성공적인 응답이 원격 위치로부터의 수신되지 않으면(조건 블록(612)), 블록(614)에서 요청자 노드는 전송된 각각의 패킷에 대한 타겟을 식별하는 어드레스들을 갖는 패킷들을 전송함으로써 트랜잭션을 처리한다. 그렇지 않으면, 성공적인 응답이 수신되면(조건 블록(612)), 블록(616)에서 요청자 노드는 할당된 레지스터 ID를 국부적으로 기록한다. 블록(618)에서, 요청자 노드는 타겟 어드레스들보다는 레지스터 ID 및 어드레스 업데이트의 표시를 갖는 패킷들을 전송함으로써 I / O 트랜잭션을 처리한다. 일부 실시 예들에서, 요청자 노드는 레지스터들의 세트의 소유권을 갖는다. 이 요청자-소유의 레지스터들은 타겟 노드 또는 스위치에 위치한다. 그러한 경우, 요청자 노드는 타겟 노드 또는 스위치 내의 요청자-소유 레지스터들이 어떻게 할당되고 사용되는지를 결정한다. 따라서, 이러한 경우에, 요청자 노드는 중간 단계들(612-616)를 스킵하면서 상기 방법에서 단계(610) 및 단계(618)를 사용할 수 있다.
이제 도 7을 참조하면, 감소된 패킷 오버 헤드를 갖는 패킷들을 전송하기 위한 방법(700)의 일 실시 예가 도시된다. 본 명세서에 기재된 다양한 노드들, 장치들 또는 시스템들 중 임의의 것은 방법(700)을 구현하도록 구성될 수 있다. 레지스터 ID로 I/O 트랜잭션을 처리하는 것은 블록(702)에서 시작한다. 블록 (704)에서, 요청자 노드는 다수의 트랜잭션들의 트랜잭션에 대한 어드레스 업데이트를 식별한다. 블록 (706)에서, 요청자 노드는 관련된 메모리 어드레스 대신에 레지스터 ID를 사용하여 I/O 트랜잭션에 대한 패킷을 전송한다. 상기 패킷은 또한 어드레스 업데이트의 표시를 포함한다. 최종 I/O 트랜잭션에 도달하지 않은 경우(조건 블록 (708)), 방법(700)은 블록(704)으로 되돌아 간다. 최종 I/O 트랜잭션에 도달하면(조건 블록 (708)), 요청자는 다른 후속 I/O 트랜잭션들을 위해 동일한 원격 레지스터를 사용할 것인지 여부를 결정한다. 다시 말해, 레지스터 할당에 대한 원래 요청은 주어진 트랜잭션(들)에 대한 것일 수 있다. 주어진 트랜잭션(들)의 완료 시, 요청자는 할당된 레지스터를 포기하고 새로운 레지스터를 요청함으로써 프로세스를 반복할 수 있다. 대안적으로, 요청자가 현재 처리할 다른 트랜잭션이 있는 경우, 이전에 할당된 레지스터를 사용하여 계속 진행할 수 있다. 만약 요청자 노드가 동일한 원격 레지스터를 계속해서 사용하기로 결정하면(조건 블록(710)), 블록(712)에서 요청자 노드는 새로운 트랜잭션(들)에 대응하는 상이한 어드레스로 레지스터를 업데이트하라는 요청을 전송할 수 있다. 만약 요청자 노드가 동일한 원격 레지스터를 계속 사용하지 않기로 결정하면(조건 블록(710)), 블록(714)에서요청자 노드는 원격 레지스터가 할당 해제될 수 있음을 나타내는 메시지를 전송할 수 있고, 요청자 노드는 레지스터 ID와 관련된 로컬 사용을 무효화한다(블록(716)). 예를 들어, 요청자 노드는 로컬 I/O 레지스터 파일 및 레지스터 ID를 저장하는 다른 데이터 구조의 엔트리들을 무효화 할 수 있다.
패킷들의 처리 동안, 요청자 노드는 레지스터 ID와 연관된 레지스터가 더 이상 이용 가능하지 않다는 표시를 타겟 노드로부터 수신할 수 있다. 이 표시는 비동기 표시 일 수 있다. 그러한 표시가 수신되면(조건부 블럭(718)), 블럭(720)에서 요청자 노드는 다른 레지스터의 할당을 요청하거나 원격 레지스터의 사용 없이 나머지 I/O 트랜잭션들을 처리한다.
이제 도 8을 참조하면, 감소된 패킷 오버 헤드를 갖는 패킷들을 전송하기 위한 방법(800)의 다른 실시 예가 도시된다. 본 명세서에 기재된 다양한 노드들, 장치들 또는 시스템들 중 임의의 것은 방법(800)을 구현하도록 구성될 수 있다. 블록(802)에서 입/출력(I/O) 대역폭 소비를 줄이기 시작한다. 만약 타겟 노드가 I/O 트랜잭션을 수신하고(조건 블록(804)), I/O 트랜잭션이 레지스터 할당을 요청하면(조건 블록(806)), 블록(808)에서 타겟 노드는 사용 가능한 레지스터를 선택한다. 블록(810)에서, 타겟 노드는 식별된 레지스터에 대한 ID 및 할당을 요청하는 I/O 트랜잭션을 전송한 요청자 노드의 표시를 기록한다. 대안적으로, 레지스터 파일 내의 식별된 레지스터의 인덱스 또는 위치가 저장될 수 있다. 블록(812)에서, 타겟 노드는 할당 요청에서 수신된 데이터 값으로 상기 선택된 레지스터를 할당한다. 다양한 실시 예들에서, 데이터 값은 메모리 어드레스이다. 블록(814)에서, 타겟 노드는 성공적인 할당을 나타내는 레지스터 ID를 포함하는 응답을 요청자 노드로 전송한다. 이어서, 방법(800)은 조건부 블록(804)으로 되돌아 간다.
I/O 트랜잭션이 레지스터에 액세스하기를 요청하면(조건 블록(806)), 블록(816)에서 타겟 노드는 트랜잭션에 포함된 표시를 갖는 레지스터를 식별한다. 다양한 실시 예들에서, 요청 내의 표시는 레지스터 ID일 수 있다. 만약 식별된 레지스터가 이용 가능하지 않으면(조건 블록(818)), 블록(824)에서, 타겟 노드는 레지스터가 이용 가능하지 않다는 통지를 요청자 노드로 보낸다. 통지는 레지스터에 저장된 데이터가 퇴거되었음을 나타낼 수 있다. 그 후, 방법(800)은 조건부 블록(804)으로 되돌아 간다.
식별된 레지스터가 여전히 이용 가능한 경우(조건 블록(818)), 블록(820)에서 타겟 노드는 레지스터에 의해 식별된 메모리 위치에 액세스한다. 타겟 노드는 또한 수신된 트랜잭션 또는 수신된 패킷 내의 연산 코드 및 다른 업데이트 정보에 기초하여 메모리 어드레스를 업데이트할 수 있다. 블록(822)에서, 타겟 노드는 트랜잭션이 처리되었음을 나타내는 확인 응답을 요청자 노드에 전송할 수 있다.
이제 도 9를 참조하면, 감소된 패킷 오버 헤드를 갖는 프로세싱 패킷들을 위한 방법(900)의 다른 실시 예가 도시된다. 본 명세서에 기재된 다양한 노드들, 장치들 또는 시스템들 중 임의의 것은 방법(800)을 구현하도록 구성될 수 있다. 요청자 노드는 I/O 트랜잭션들을 전송할 때 사용할 원격 레지스터를 식별하는 레지스터 ID를 사용하여 앞에서 설명한대로 트랜잭션들을 생성하여 타겟 노드로 전송합니다. 수신된 트랜잭션들의 처리 동안, 또는 다른 때에, 타겟 노드는 할당된 레지스터가 할당 해제될 것으로 결정할 수 있다. 전술한 바와 같이, 타겟 노드는 요청자 노드로부터 임의의 통지를 수신하지 않고 레지스터가 할당 해제되어야 한다고 결정할 수 있다. 만약 타겟 노드가 할당된 레지스터가 할당 해제되어야 한다고 결정하면(조건 블록(904)), 블록(906)에서 타겟 노드는 레지스터를 할당 해제한다. 블록(908)에서, 타겟 노드는 레지스터가 할당 해제되었음을 나타내는 통지를 레지스터를 사용하고 있는 노드로 식별된 요청자 노드로 전송한다. 이 통지는 비동기 통지일 수 있다.
만약 요청자 노드가 수신된 통지에서 식별된 레지스터의 사용을 종료하면(조건부 블록(910)), 블록(912)에서 요청자 노드는 트랜잭션들의 처리를 지속하고 방법(900)의 흐름을 제어하여 조건부 블록(904)으로 되돌아 간다. 만약 요청자 노드가 수신된 통지에서 식별된 레지스터의 사용을 종료하지 않으면(조건부 블록 (910)), 요청자 노드는 트랜잭션들을 지속하기 위해 다른 레지스터의 사용을 요청할지 여부를 결정한다(조건부 블록(914)). 요청자 노드가 다른 레지스터를 요구하지 않으면(조건부 블록(914)), 방법은 블록(912)으로 계속된다. 만약 요청자 노드가 하나 이상의 트랜잭션들을 처리를 종료하기 위해 다른 원격 레지스터를 요청하는 것으로 결정하면(조건 블록 (914)), 블록(916)에서 요청자 노드는 하나 이상의 I/O 트랜잭션들에 대한 원격 레지스터의 할당에 대한 요청을 타켓 노드로 전송한다. 타겟 노드로부터 요청에 대한 성공적인 응답이 수신되지 않으면, 요청자 노드는 전송된 각 패킷에 대한 타겟 메모리 위치를 식별하는 어드레스를 갖는 패킷들을 전송함으로써 트랜잭션들을 처리한다. 그렇지 않으면, 만약 성공적인 응답이 수신되면, 요청자 노드는 할당된 레지스터의 ID를 국부적으로 기록한다. 그런 다음 요청자 노드는 도 8에서 일반적으로 설명한 대로 타겟 어드레스들이 있는 패킷들을 전송하는 대신 레지스터 ID 및 어드레스 업데이트 표시가 있는 패킷들을 전송하여 I/O 트랜잭션들을 처리한다.
다양한 실시 예들에서, 소프트웨어 애플리케이션의 프로그램 명령어는 전술된 방법들 및/또는 메커니즘들을 구현하는데 사용될 수 있다. 프로그램 명령어는 'C'와 같은 고급 프로그래밍 언어로 하드웨어의 동작을 기술 할 수 있다. 대안적으로 'Verilog'와 같은 하드웨어 설계 언어(hardware design language, HDL)를 사용할 수 있다. 프로그램 명령어는 비-일시적인(non-transitory) 컴퓨터 판독 가능 저장 매체에 저장 될 수 있다. 다양한 유형의 저장 매체를 사용할 수 있다. 저장 매체는 프로그램 실행을 위해 프로그램 명령어 및 부속 데이터를 컴퓨팅 시스템에 제공하기 위해 사용되는 중 컴퓨팅 시스템에 의해 액세스 가능할 수 있다. 컴퓨팅 시스템은 적어도 하나 이상의 메모리들 및 프로그램 명령어를 실행하도록 구성된 하나 이상의 프로세서들을 포함할 수 있다.
전술한 실시 예들은 단지 구현들의 비-제한적인 예들이라는 것이 강조되어야 한다. 상술한 개시가 완전히 이해되면, 당업자에게는 다양한 변형 및 수정이 명백해질 것이다. 다음의 특허 청구 범위는 모든 변형 및 수정을 포함하는 것으로 해석되어야 한다.

Claims (20)

  1. 방법에 있어서,
    요청 노드로부터 타겟 노드로 상기 타겟 노드에서 사용을 위한 레지스터의 할당의 요청을 전송하는 단계로서, 상기 요청은 상기 타겟 노드에서 메모리 위치의 어드레스를 포함하는 단계;
    상기 요청 노드에 의해 상기 타겟 노드로부터 상기 요청에 대한 응답을 수신하는 단계;
    상기 요청 노드로부터 상기 타겟 노드로 하나 이상의 트랜잭션들에 대응하는 패킷을 전송하는 단계를 포함하고;
    상기 패킷은:
    상기 응답이 레지스터가 사용을 위해 할당되지 않았다는 것을 나타내는 경우, 상기 타겟 노드의 메모리 위치의 어드레스; 및
    상기 응답이 레지스터가 상기 요청 노드에 의한 사용을 위해 할당되었다는 것을 나타내는 경우, 할당된 레지스터의 레지스터 ID를 포함하는 방법.
  2. 청구항 1에 있어서, 상기 타겟 노드는:
    레지스터 할당에 대한 상기 요청을 수신하는 단계;
    레지스터가 이용 가능하다고 결정하는 것에 응답하여, 상기 레지스터에 상기 어드레스를 저장하고 상기 요청 노드에 상기 레지스터 ID를 전송하는 단계; 및
    레지스터가 이용 불가능하다고 결정하는 것에 응답하여, 상기 요청 노드에 상기 요청 노드에 의한 사용을 위해 레지스터가 할당되지 않았다는 표시의 응답을 전송하는 단계를 더 포함하는 방법.
  3. 청구항 2에 있어서,
    타겟 노드에서 상기 패킷을 수신하는 단계;
    상기 트랜잭션에 대응하는 상기 어드레스를 식별하기 위해 상기 레지스터 ID를 사용하는 단계; 및
    상기 트랜잭션을 서비스하기 위해 상기 메모리 위치에 엑세스하기 위해 상기 어드레스를 이용하는 단계를 더 포함하는 방법.
  4. 청구항 1에 있어서, 상기 레지스터는 전용 레지스터 또는 동적으로 할당된 메모리 위치 중 하나를 포함하는 방법.
  5. 청구항 1에 있어서, 상기 패킷은 상기 레지스터에 저장된 값을 업데이트 하는 방법을 나타내는 연산 코드를 포함하는 방법.
  6. 청구항 1에 있어서, 상기 타겟 노드는 상기 레지스터 ID를 상기 어드레스 및 상기 하나 이상의 트랜잭션들의 트랜잭션 수신에 응답한 상기 어드레스의 자동 증가에 매핑하는 것을 유지하는 단계를 더 포함하는 방법.
  7. 컴퓨팅 시스템에 있어서,
    요청 노드; 및
    상기 요청 노드에 연결된 타겟 노드를 포함하고;
    상기 요청 노드는:
    상기 요청 노드에서 사용을 위한 레지스터의 할당 요청을 상기 타겟 노드로 전송하고, 상기 요청은 상기 타겟 노드에서 메모리 위치의 어드레스를 포함하고;
    상기 타겟 노드로부터 상기 요청에 대한 응답을 수신하고;
    상기 요청 노드로부터 상기 타겟 노드로 하나 이상의 트랜잭션들에 대응하는 패킷을 전송하기 위해 구성되고;
    상기 패킷은:
    상기 응답이 레지스터가 사용을 위해 할당되지 않았다는 것을 나타내는 경우, 상기 타겟 노드의 메모리 위치의 어드레스; 및
    상기 응답이 레지스터가 상기 요청 노드에 의한 사용을 위해 할당되었다는 것을 나타내는 경우, 할당된 레지스터의 레지스터 ID를 포함하는 컴퓨팅 시스템.
  8. 청구항 7에 있어서, 상기 타겟 노드는:
    레지스터 할당에 대한 상기 요청을 수신하고;
    레지스터가 이용 가능하다고 결정하는 것에 응답하여, 상기 레지스터에 상기 어드레스를 저장하고 상기 요청 노드에 상기 레지스터 ID를 전송하고; 및
    레지스터가 이용 불가능하다고 결정하는 것에 응답하여, 상기 요청 노드에 상기 요청 노드에 의한 사용을 위해 레지스터가 할당되지 않았다는 표시의 응답을 전송하기 위해 구성되는 컴퓨팅 시스템.
  9. 청구항 8에 있어서, 상기 타겟 노드는:
    상기 패킷을 수신하고;
    상기 트랜잭션에 대응하는 상기 어드레스를 식별하기 위해 상기 레지스터 ID를 사용하고; 및
    상기 트랜잭션을 서비스하기 위해 상기 메모리 위치에 엑세스하기 위해 상기 어드레스를 이용하기 위해 더 구성되는 컴퓨팅 시스템.
  10. 청구항 7에 있어서, 상기 레지스터는 전용 레지스터 또는 동적으로 할당된 메모리 위치 중 하나를 포함하는 컴퓨팅 시스템.
  11. 청구항 7에 있어서, 상기 패킷은 상기 레지스터에 저장된 값을 업데이트 하는 방법을 나타내는 연산 코드를 포함하는 컴퓨팅 시스템.
  12. 청구항 7에 있어서, 상기 타겟 노드는 상기 레지스터 ID를 상기 어드레스 및 상기 하나 이상의 트랜잭션들의 트랜잭션 수신에 응답한 상기 어드레스의 자동 증가에 매핑하는 것을 유지하기 위해 더 구성되는 컴퓨팅 시스템.
  13. 청구항 11에 있어서, 상기 연산 코드는 가산 연산, 감산 연산 및 치환 연산 중 하나를 나타내는 컴퓨팅 시스템.
  14. 청구항 8에 있어서, 상기 타겟 노드는 상기 레지스터에 저장된 상기 메모리 어드레스에 대한 우선 순위 레벨 및 LRU 값 중 하나 이상에 기초하여 상기 요청 노드에 대해 이전에 할당된 상기 레지스터를 할당 해제하기 위해 더 구성된 컴퓨팅 시스템.
  15. 프로그램 명령어를 저장하는 비-일시적 컴퓨터 판독 가능 저장 매체에 있어서, 상기 프로그램 명령어는:
    요청 노드에 의한 사용을 위해 레지스터의 할당의 요청을 타켓 노드로 전송하고, 상기 요청은 상기 타겟 노드에서 메모리 위치의 어드레스를 포함하고;
    상기 타겟 노드로부터 상기 요청에 대한 응답을 수신하고;
    상기 요청 노드로부터 상기 타겟 노드로 하나 이상의 트랜잭션들에 대응하는 패킷을 전송하고;
    상기 패킷은:
    상기 요청 노드에 의해 사용되기 위한 레지스터가 할당되지 않았다는 것을 나타내는 응답에 대응하여, 어드레스; 및
    상기 응답이 레지스터가 상기 요청 노드에 의한 사용을 위해 할당되었다는 것을 나타내는 경우, 상기 타겟 노드에서 할당된 레지스터의 레지스터 ID를 포함하는,
    프로세서에 의해 실행 가능한 비-일시적 컴퓨터 판독 가능 저장 매체.
  16. 청구항 15에 있어서, 상기 프로그램 명령어는:
    레지스터 할당에 대한 요청을 수신하고;
    레지스터가 이용 가능하다고 결정하는 것에 응답하여, 상기 레지스터에 상기 어드레스를 저장하고 상기 요청 노드에 상기 레지스터 ID를 전송하고; 및
    레지스터가 이용 불가능하다고 결정하는 것에 응답하여, 상기 요청 노드에 상기 요청 노드에 의한 사용을 위해 레지스터가 할당되지 않았다는 표시의 응답을 전송하는,
    프로세서에 의해 더 실행 가능한 비-일시적 컴퓨터 판독 가능 저장 매체.
  17. 청구항 16에 있어서, 상기 프로그램 명령어는:
    상기 타겟 노드에서 상기 패킷을 수신하고;
    상기 트랜잭션에 대응하는 상기 어드레스를 식별하기 위해 상기 레지스터 ID를 이용하고; 및
    상기 트랜잭션을 서비스하기 위해 상기 메모리 위치에 엑세스하기 위해 상기 어드레스를 이용하는,
    프로세서에 의해 더 실행 가능한 비-일시적 컴퓨터 판독 가능 저장 매체.
  18. 청구항 15에 있어서, 상기 레지스터는 전용 레지스터 또는 동적으로 할당된 메모리 위치 중 하나를 포함하는 비-일시적 컴퓨터 판독 가능 저장 매체.
  19. 청구항 15에 있어서, 상기 패킷은 상기 메모리 위치를 업데이트 하는 방법을 나타내는 연산 코드를 포함하는 비-일시적 컴퓨터 판독 가능 저장 매체.
  20. 청구항 15에 있어서, 상기 프로그램 명령어는 상기 레지스터 ID를 상기 어드레스 및 상기 하나 이상의 트랜잭션들의 트랜잭션 수신에 응답한 상기 어드레스의 자동 증가에 매핑하는 것을 유지하는 프로세서에 의해 더 실행 가능한 비-일시적 컴퓨터 판독 가능 저장 매체.
KR1020187006372A 2015-08-13 2016-08-12 I/o 패킷 압축을 위한 레지스터 파일 KR102212269B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201562204774P 2015-08-13 2015-08-13
US62/204,774 2015-08-13
US15/138,485 2016-04-26
US15/138,485 US10079916B2 (en) 2015-08-13 2016-04-26 Register files for I/O packet compression
PCT/US2016/046886 WO2017027840A1 (en) 2015-08-13 2016-08-12 Register files for i/o packet compression

Publications (2)

Publication Number Publication Date
KR20180027646A true KR20180027646A (ko) 2018-03-14
KR102212269B1 KR102212269B1 (ko) 2021-02-04

Family

ID=57984007

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187006372A KR102212269B1 (ko) 2015-08-13 2016-08-12 I/o 패킷 압축을 위한 레지스터 파일

Country Status (5)

Country Link
US (1) US10079916B2 (ko)
EP (1) EP3335124B1 (ko)
KR (1) KR102212269B1 (ko)
CN (1) CN107949837B (ko)
WO (1) WO2017027840A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190121457A (ko) * 2018-04-18 2019-10-28 에스케이하이닉스 주식회사 컴퓨팅 시스템 및 그것을 포함하는 데이터 처리 시스템

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10439639B2 (en) * 2016-12-28 2019-10-08 Intel Corporation Seemingly monolithic interface between separate integrated circuit die
US20190205061A1 (en) * 2017-12-29 2019-07-04 Intel Corporation Processor, method, and system for reducing latency in accessing remote registers
US11831565B2 (en) 2018-10-03 2023-11-28 Advanced Micro Devices, Inc. Method for maintaining cache consistency during reordering
US11934827B2 (en) 2021-12-20 2024-03-19 Advanced Micro Devices, Inc. Partition and isolation of a processing-in-memory (PIM) device
US11934698B2 (en) * 2021-12-20 2024-03-19 Advanced Micro Devices, Inc. Process isolation for a processor-in-memory (“PIM”) device
US12019560B2 (en) 2021-12-20 2024-06-25 Advanced Micro Devices, Inc. Virtual partitioning a processor-in-memory (“PIM”)
US11785087B1 (en) * 2022-10-31 2023-10-10 Mellanox Technologies, Ltd. Remote direct memory access operations with integrated data arrival indication
US20240143539A1 (en) * 2022-10-31 2024-05-02 Mellanox Technologies, Ltd. Remote direct memory access operations with integrated data arrival indication

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080028403A1 (en) * 2006-07-28 2008-01-31 Russell Dean Hoover Method and Apparatus for Communicating Between Threads
US20140013079A1 (en) * 2002-11-05 2014-01-09 Memory Integrity, Llc Transaction processing using multiple protocol engines

Family Cites Families (13)

* 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 ノード装置
US6285686B1 (en) * 1998-03-19 2001-09-04 Hewlett-Packard Company Using page registers for efficient communication
US20030041138A1 (en) * 2000-05-02 2003-02-27 Sun Microsystems, Inc. Cluster membership monitor
US8005966B2 (en) * 2002-06-11 2011-08-23 Pandya Ashish A Data processing system using internet protocols
US7383423B1 (en) 2004-10-01 2008-06-03 Advanced Micro Devices, Inc. Shared resources in a chip multiprocessor
JP4711709B2 (ja) * 2005-03-18 2011-06-29 富士通株式会社 パーティション割り振り方法及びコンピュータシステム
CN101196835B (zh) * 2006-12-07 2012-01-11 国际商业机器公司 用于在线程之间通信的方法和装置
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
CN102662908A (zh) * 2012-04-23 2012-09-12 西安电子科技大学 对片上多核系统中的高速接口进行控制的方法及系统
US9424228B2 (en) 2012-11-01 2016-08-23 Ezchip Technologies Ltd. High performance, scalable multi chip interconnect
US9210072B2 (en) * 2013-03-08 2015-12-08 Dell Products L.P. Processing of multicast traffic in computer networks
CN103595660B (zh) * 2013-11-04 2016-08-31 上海数字电视国家工程研究中心有限公司 Ip数据包的封装方法和ip数据包的包头压缩方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140013079A1 (en) * 2002-11-05 2014-01-09 Memory Integrity, Llc Transaction processing using multiple protocol engines
US20080028403A1 (en) * 2006-07-28 2008-01-31 Russell Dean Hoover Method and Apparatus for Communicating Between Threads

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20190121457A (ko) * 2018-04-18 2019-10-28 에스케이하이닉스 주식회사 컴퓨팅 시스템 및 그것을 포함하는 데이터 처리 시스템
US11768710B2 (en) 2018-04-18 2023-09-26 SK Hynix Inc. Computing system and data processing system including a computing system
US11829802B2 (en) 2018-04-18 2023-11-28 SK Hynix Inc. Computing system and data processing system including a computing system

Also Published As

Publication number Publication date
EP3335124B1 (en) 2020-04-08
EP3335124A4 (en) 2019-04-10
US10079916B2 (en) 2018-09-18
EP3335124A1 (en) 2018-06-20
WO2017027840A1 (en) 2017-02-16
CN107949837B (zh) 2021-10-15
US20170048358A1 (en) 2017-02-16
KR102212269B1 (ko) 2021-02-04
CN107949837A (zh) 2018-04-20

Similar Documents

Publication Publication Date Title
KR102212269B1 (ko) I/o 패킷 압축을 위한 레지스터 파일
US10169080B2 (en) Method for work scheduling in a multi-chip system
CN105900076B (zh) 用于处理多个交易的数据处理系统及方法
US20200117602A1 (en) Delayed snoop for improved multi-process false sharing parallel thread performance
CN110741356A (zh) 多处理器系统中的中继一致存储器管理
US10209900B2 (en) Buffer allocation and memory management using mapping table
US20150254182A1 (en) Multi-core network processor interconnect with multi-node connection
US9372800B2 (en) Inter-chip interconnect protocol for a multi-chip system
US9836326B2 (en) Cache probe request to optimize I/O directed caching
CN109977037B (zh) 一种dma数据传输方法及系统
US9645937B2 (en) Expedited servicing of store operations in a data processing system
US8706970B2 (en) Dynamic cache queue allocation based on destination availability
US20180336034A1 (en) Near memory computing architecture
US9811466B2 (en) Expedited servicing of store operations in a data processing system
US9727521B2 (en) Efficient CPU mailbox read access to GPU memory
US9606923B2 (en) Information processing device with shared memory, memory order guarantee method using counters fence instructions in relation to cache-oriented requests, and recording medium storing program
US20090083496A1 (en) Method for Improved Performance With New Buffers on NUMA Systems
US9910782B2 (en) Expedited servicing of store operations in a data processing system
US9632942B2 (en) Expedited servicing of store operations in a data processing system

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E90F Notification of reason for final refusal
E701 Decision to grant or registration of patent right