KR20210033996A - 전용 저 레이턴시 링크를 사용한 다수의 하드웨어 가속기에 대한 통합된 어드레스 공간 - Google Patents

전용 저 레이턴시 링크를 사용한 다수의 하드웨어 가속기에 대한 통합된 어드레스 공간 Download PDF

Info

Publication number
KR20210033996A
KR20210033996A KR1020217002267A KR20217002267A KR20210033996A KR 20210033996 A KR20210033996 A KR 20210033996A KR 1020217002267 A KR1020217002267 A KR 1020217002267A KR 20217002267 A KR20217002267 A KR 20217002267A KR 20210033996 A KR20210033996 A KR 20210033996A
Authority
KR
South Korea
Prior art keywords
hardware accelerator
accelerator
hardware
host processor
link
Prior art date
Application number
KR1020217002267A
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 KR20210033996A publication Critical patent/KR20210033996A/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
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4027Coupling between buses using bus bridges
    • G06F13/404Coupling between buses using bus bridges with address mapping
    • 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/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0873Mapping of cache memory to specific storage devices or parts thereof
    • 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]
    • G06F12/1045Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] associated with a data cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1081Address translation for peripheral access to main memory, e.g. direct memory access [DMA]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/161Handling requests for interconnection or transfer for access to memory bus based on arbitration with latency improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • G06F13/1673Details of memory controller using buffers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • G06F9/467Transactional memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Advance Control (AREA)
  • Multi Processors (AREA)
  • Bus Control (AREA)

Abstract

시스템은, 통신 버스에 커플링된 호스트 프로세서(105), 통신 버스를 통해 호스트 프로세서(105)에 통신가능하게 링크된 제1 하드웨어 가속기(135-1), 및 통신 버스를 통해 호스트 프로세서(105)에 통신가능하게 링크된 제2 하드웨어 가속기(135-2)를 포함할 수 있다. 제1 하드웨어 가속기(135-1) 및 제2 하드웨어 가속기(135-2)는 통신 버스와는 독립적인 가속기 링크를 통해 직접 커플링된다. 호스트 프로세서(105)는 가속기 링크를 통해 직접적으로 제1 하드웨어 가속기(135-1)와 제2 하드웨어 가속기(135-2) 간 데이터 전송을 개시하도록 구성된다.

Description

전용 저 레이턴시 링크를 사용한 다수의 하드웨어 가속기에 대한 통합된 어드레스 공간
본 개시는 하드웨어 가속에 관한 것이고, 더 상세하게는, 통합된 어드레스 공간 및 저 레이턴시 통신 링크들을 통한 다수의 하드웨어 가속기들의 사용을 용이하게 하는 것에 관한 것이다.
이종 컴퓨팅 플랫폼(heterogeneous computing platform; HCP)은 인터페이스 회로를 통해 하나 이상의 다른 디바이스들에 커플링된 호스트 프로세서를 포함하는 데이터 프로세싱 시스템을 지칭한다. 디바이스들은 통상적으로 호스트 프로세서와는 구조적으로 상이하다. 호스트 프로세서는 디바이스들에 작업들을 분담시킬 수 있다. 디바이스들은 작업들을 수행하고 결과들을 호스트 프로세서에 대해 이용가능하게 할 수 있다. 예시적인 예로서, 호스트 프로세서는 통상적으로 중앙 프로세싱 유닛으로서 구현되는 한편, 디바이스들은 그래픽 프로세싱 유닛(graphics processing unit; GPU)들 및/또는 디지털 신호 프로세서(digital signal processor; DSP)들로 구현된다.
다른 HCP들에서, 호스트 프로세서로부터 분담된 작업들을 수행하는 디바이스들 중 하나 이상은 하드웨어 가속을 위해 적응된 디바이스들("하드웨어 가속기들"로 지칭됨)을 포함한다. 하드웨어 가속기들은 작업을 수행하기 위한 소프트웨어 또는 프로그램 코드를 실행하는 것과 대조적으로 호스트로부터 분담된 작업을 수행할 수 있는 회로를 포함한다. 하드웨어 가속기의 회로는 소프트웨어를 실행하는 것과 기능적으로 동등하지만, 통상적으로 더 적은 시간에 작업을 완료할 수 있다.
하드웨어 가속기들의 예들은 필드 프로그래밍가능 게이트 어레이(field programmable gate array)들, 부분적으로 프로그래밍가능한 IC(integrated circuit)들, 주문형 IC(application specific IC)들 등과 같은 프로그래밍가능 집적 회로(IC)들을 포함한다. 당연히, HCP는 상이한 디바이스들의 조합을 포함할 수 있고, 여기서 하나 이상은 프로그램 코드를 실행하도록 적응되고 하나 이상의 다른 것들은 하드웨어 가속에 적응된다.
하나 이상의 실시예들에서, 시스템은, 통신 버스에 커플링된 호스트 프로세서, 통신 버스를 통해 호스트 프로세서에 통신가능하게 링크된 제1 하드웨어 가속기, 및 통신 버스를 통해 호스트 프로세서에 통신가능하게 링크된 제2 하드웨어 가속기를 포함할 수 있다. 제1 하드웨어 가속기 및 제2 하드웨어 가속기는 통신 버스와는 독립적인 가속기 링크를 통해 직접 커플링된다. 호스트 프로세서는 가속기 링크를 통해 직접적으로 제1 하드웨어 가속기와 제2 하드웨어 가속기 사이에서 데이터 전송을 개시하도록 구성된다.
하나 이상의 실시예들에서, 하드웨어 가속기는, 통신 버스를 통해 호스트 프로세서와 통신하도록 구성된 엔드포인트, 하드웨어 가속기에 로컬인 메모리에 커플링된 메모리 제어기, 및 엔드포인트 및 메모리 제어기에 커플링된 링크 회로를 포함할 수 있다. 링크 회로는 통신 버스에 또한 커플링된 타겟 하드웨어 가속기와 가속기 링크를 확립하도록 구성된다. 가속기 링크는 통신 버스와는 독립적인 타겟 하드웨어 가속기와 하드웨어 가속기 사이의 직접 접속이다.
하나 이상의 실시예들에서, 방법은, 제1 하드웨어 가속기 내에서, 통신 버스를 통해 호스트 프로세서로부터 전송된 데이터 전송에 대한 타겟 어드레스 및 명령을 수신하는 단계, 제1 하드웨어 가속기가 제1 하드웨어 가속기에 대응하는 어드레스 범위의 상한과 타겟 어드레스를 비교하는 단계, 및 비교하는 단계에 기초하여 타겟 어드레스가 어드레스 범위를 초과한다고 결정하는 것에 응답하여, 제1 하드웨어 가속기가, 제1 하드웨어 가속기 및 제2 하드웨어 가속기를 직접 커플링하는 가속기 링크를 사용하여 데이터 전송을 수행하기 위해 제2 하드웨어 가속기와 트랜잭션을 개시하는 단계를 포함할 수 있다.
이러한 요약 섹션은 청구된 청구물의 임의의 핵심적이거나 필수적인 특징들을 식별하기 위한 것이 아니라 단지 특정 개념들을 소개하기 위해 제공된다. 본 발명의 배열들의 다른 특징들은 첨부된 도면들 및 하기 상세한 설명으로부터 명백할 것이다.
본 발명의 배열들은 첨부된 도면들에서 예시의 방식으로 예시된다. 그러나, 도면들은 본 발명의 배열들을 단지 도시된 특정 구현들로 제한하는 것으로 해석되지 않아야 한다. 다양한 양상들 및 이점들은 하기 상세한 설명의 검도 시에 및 도면들을 참조할 때 명백해질 것이다.
도 1은 다수의 하드웨어 가속기들을 갖는 시스템의 예를 예시한다.
도 2는 하드웨어 가속기의 예시적인 구현을 예시한다.
도 3은 재송신 엔진(retransmit engine; RTE)의 예를 예시한다.
도 4는 다수의 하드웨어 가속기들을 갖는 시스템에 대한 예시적인 동작 방법을 예시한다.
도 5는 다수의 하드웨어 가속기들 및 하나 이상의 추가적인 디바이스들을 갖는 시스템의 예를 예시한다.
도 6은 집적 회로(IC)에 대한 예시적인 아키텍처를 예시한다.
본 개시는 신규한 특징들을 정의하는 청구항들로 종결되지만, 본 개시 내에 설명된 다양한 특징들은 도면들과 함께 설명을 고려하는 것으로부터 더 잘 이해될 것으로 여겨진다. 본 명세서에 설명된 프로세스(들), 머신(들), 제조(들) 및 그 임의의 변형들은 예시의 목적으로 제공된다. 본 개시 내에서 설명되는 특정한 구조적 및 기능적 세부사항들은 제한적인 것으로 해석되는 것이 아니라, 단지 청구항들에 대한 기초로서 그리고 실질적으로 임의의 적절하게 세부화된 구조에서 설명된 특징들을 다양하게 이용하도록 당업자를 교시하기 위한 대표적인 기초로서 해석된다. 추가로, 본 개시 내에서 사용되는 용어들 및 어구들은 제한적인 것으로 의도되는 것이 아니라, 설명된 특징들의 이해가능한 설명을 제공하도록 의도된다.
본 개시는 하드웨어 가속에 관한 것이고, 더 상세하게는, 통합된 어드레스 공간 및 저 레이턴시 통신 링크들을 통한 다수의 하드웨어 가속기들의 사용을 용이하게 하는 것에 관한 것이다. 데이터 프로세싱 시스템들을 갖는 하드웨어 가속기들을 사용하는 것은 호스트 프로세서로부터 작업들을 분담하여, 호스트 프로세서 상의 작업량을 감소시키기 위한 효과적인 기술이 되어 왔다. 하드웨어 가속기들은 통상적으로 버스를 통해 호스트 프로세서에 부착된다. 예를 들어, 하드웨어 가속기는 호스트 시스템의 이용가능한 버스 슬롯에 삽입되는 회로 보드에 부착될 수 있다. 통상적으로, 각각의 하드웨어 가속기는 대응하는 회로 보드에 부착된다. 추가적인 하드웨어 가속기를 시스템에 추가하는 것은 통상적으로, 하드웨어 가속기를 갖는 추가적인 회로 보드를 이용가능한 버스 슬롯에 삽입하는 것을 수반한다.
종래의 시스템들 내에서, 호스트 프로세서에 의해 실행되는 애플리케이션들은 (예를 들어, 하드웨어 어드레스에 의해) 임의의 새로 추가된 하드웨어 가속기들에 특정적으로 액세스하도록 업데이트되고 그리고/또는 재기록되어야 한다. 추가로, 하나의 하드웨어 가속기로부터의 데이터를 다른 하드웨어 가속기에 전송하기 위해, 데이터는 소스 하드웨어 가속기로부터 호스트 프로세서로 이동되고, 이어서 호스트 프로세서로부터 타겟 하드웨어 가속기로 이동된다. 데이터는 버스를 통한 호스트 프로세서를 통해 각각의 하드웨어 가속기로 및 그로부터 이동한다. 이와 같이, 시스템에 추가된 각각의 추가적인 하드웨어 가속기는 버스 상의 디바이스들의 수를 증가시켜 버스 상의 대역폭에 대한 경합을 생성한다. 하드웨어 가속기들(또는 다른 디바이스들)에 의해 수행되는 작업들의 복잡도, 수 및/또는 크기가 증가함에 따라, 버스 상의 이용가능한 대역폭은 추가로 제한된다.
본 개시 내에서 설명된 본 발명의 배열들에 따르면, 디바이스들에 대한 통합된 어드레스 공간이 제공된다. 추가로, 본 명세서에서 "가속기 링크들"로 지칭되는, 버스와는 독립적으로 동작할 수 있는 하드웨어 가속기들 사이의 직접 통신 링크들이 제공된다. 호스트에 의해 실행되는 런타임 라이브러리 및 드라이버는 통합된 어드레스 공간을 레버리지할 수 있어서, 호스트 프로세서에 의해 실행되는 애플리케이션들은 시스템 내의 특정 하드웨어 가속기들을 직접 참조(예를 들어, 어드레싱)함이 없이 동작할 수 있다. 런타임 라이브러리는 하드웨어 가속기들 사이의 데이터 전송들을 실시하기 위해 사용할 적절한 어드레스들을 결정할 수 있다. 이와 같이, 애플리케이션들은 시스템에 추가될 수 있는 추가적인 하드웨어 가속기들에 액세스하도록 수정될 필요가 없다. 추가로, 데이터 전송들은 가속기 링크들을 통해 수행되어, 버스를 효과적으로 우회하는 호스트 프로세서를 통과함이 없이 데이터가 하나의 하드웨어 가속기로부터 다른 하드웨어 가속기로 직접 전송되게 할 수 있다. 이와 같이, 버스 상의 하드웨어 가속기들에 의해 사용되는 대역폭은 상당히 감소되어, 전체 시스템 성능을 증가시킬 수 있다.
언급된 바와 같이, 호스트 프로세서에 의해 실행되는 프로그램 코드(예를 들어, 애플리케이션들)에 대응하는 변화 또는 수정을 요구함이 없이 기존의 어드레스 공간을 사용하여 시스템에 추가적인 하드웨어 가속기들이 추가될 수 있다. 이는 적어도 부분적으로, 하드웨어 가속기 보드들에 대한 자동화된 발견 프로세스 및 시스템에 이러한 보드들을 추가하는 것의 구현, 원격 대 로컬 버퍼 플래그들의 사용, 적어도 일부 경우들에서 데이터 전송들에 대한 가속기 링크들로의 자동 스위칭, 및 원격 버퍼들에 대한 자동 어드레스 전환을 통해 지원된다.
본 발명의 배열들의 추가적인 양상들은 도면들을 참조하여 아래에서 더 상세히 설명된다. 예시의 단순화 및 명확화를 위해, 도면들에 도시된 요소들은 반드시 축척대로 도시되지 않았다. 예를 들어, 요소들 중 일부의 치수들은 명확화를 위해 다른 요소들에 비해 과장될 수 있다. 추가로, 적절히 고려되는 경우, 참조 부호들은 대응하거나, 유사하거나 같은 도면들을 표시하기 위해 도면들 사이에서 반복된다.
도 1은 다수의 하드웨어 가속기들을 갖는 시스템(100)의 예를 예시한다. 시스템(100)은 컴퓨터, 서버 또는 다른 데이터 프로세싱 시스템을 구현하기 위해 사용될 수 있는 컴퓨터 하드웨어의 예이다. 시스템(100)은 또한 이종 컴퓨팅 시스템의 예이다. 도시된 바와 같이, 시스템(100)은 인터페이스 회로(115)를 통해 호스트 메모리(110)에 커플링된 적어도 하나의 호스트 프로세서(105)를 포함한다.
시스템(100)은 또한 복수의 하드웨어 가속기들(135)을 포함한다. 도 1의 예에서, 시스템(100)은 3개의 하드웨어 가속기들(135-1, 135-2 및 135-3)을 포함한다. 도 1의 예는 3개의 하드웨어 가속기들을 예시하지만, 시스템(100)은 3개 미만의 하드웨어 가속기들 또는 3개 초과의 하드웨어 가속기들을 포함할 수 있음을 인식해야 한다. 추가로, 시스템(100)은 하나 이상의 다른 디바이스들, 예를 들어, 그래픽 프로세싱 유닛(GPU)들 또는 디지털 신호 프로세서(DSP)들을 포함할 수 있다.
시스템(100)은 호스트 메모리(110) 내에 컴퓨터 판독가능 명령들(또한 "프로그램 코드"로 지칭됨)을 저장할 수 있다. 호스트 메모리(110)는 컴퓨터 판독가능 저장 매체들의 예이다. 호스트 프로세서(105)는 인터페이스 회로(115)를 통해 호스트 메모리(110)로부터 액세스된 프로그램 코드를 실행할 수 있다. 하나 이상의 실시예들에서, 호스트 프로세서(105)는 메모리 제어기(도시되지 않음)를 통해 호스트 메모리(110)와 통신한다.
호스트 메모리(110)는 예를 들어, 로컬 메모리 및 대용량 저장 디바이스와 같은 하나 이상의 물리적 메모리 디바이스들을 포함할 수 있다. 로컬 메모리는 일반적으로 프로그램 코드의 실제 실행 동안 사용되는 비영구적 메모리 디바이스(들)를 지칭한다. 로컬 메모리의 예들은 랜덤 액세스 메모리(RAM) 및/또는 DRAM, SRAM, DDR SDRAM 등과 같이 프로그램 코드의 실행 동안 프로세서에 의한 사용에 적합한 다양한 유형들의 RAM 중 임의의 것을 포함한다. 대용량 저장 디바이스는 영구적 데이터 저장 디바이스를 지칭한다. 대용량 저장 디바이스들의 예들은, 하드 디스크 드라이브(HDD), 솔리드 스테이트 드라이브(SSD), 플래시 메모리, 판독 전용 메모리(ROM), 소거가능 프로그래밍가능 판독 전용 메모리(EPROM), 전기적 소거가능 프로그래밍가능 판독 전용 메모리(EEPROM) 또는 다른 적절한 메모리를 포함하지만, 이에 제한되지 않는다. 시스템(100)은 또한, 실행 동안 프로그램 코드가 대용량 저장 디바이스로부터 조회되어야 하는 횟수를 감소시키기 위해 적어도 일부 프로그램 코드의 임시 저장소를 제공하는 하나 이상의 캐시 메모리들(도시되지 않음)을 포함할 수 있다.
호스트 메모리(110)는 프로그램 코드 및/또는 데이터를 저장할 수 있다. 예를 들어, 호스트 메모리(110)는 운영 체제(120), 명령들(125) 및 데이터(130)를 저장할 수 있다. 도 1의 예에서, 명령들(125)은 하나 이상의 애플리케이션들(170), 런타임 라이브러리(본 명세서에서 "런타임"으로 지칭됨)(172), 및 하드웨어 가속기들(135)과 통신할 수 있는 드라이버(174)를 포함할 수 있다. 런타임(172)은 완료 이벤트들을 처리하고, 커맨드 큐(queue)들을 관리하고, 애플리케이션(들)(170)에 통지들을 제공할 수 있다. 데이터(130)는, 다른 유형들의 데이터 항목들 중에서, 버퍼 객체들(176 및 178)과 같은 버퍼 객체들을 포함할 수 있고, 이는 하드웨어 가속기들(135) 사이에서 직접적 데이터 전송들을 용이하게 한다. 버퍼 객체(176)는 원격 플래그(180)를 포함하는 한편, 버퍼 객체(178)는 원격 플래그(182)를 포함한다. 예시를 위해, 원격 플래그(180)는 설정되지 않는 한편, 원격 플래그(182)는 설정된다. 시스템(100), 예를 들어, 호스트 프로세서(105)는 본 개시 내에 설명된 동작들을 수행하기 위한 명령들(125) 및 운영 체제(120)를 실행할 수 있다.
인터페이스 회로(115)의 예들은 시스템 버스 및 입력/출력(I/O) 버스를 포함하지만 이에 제한되지 않는다. 인터페이스 회로(115)는 다양한 버스 아키텍처들 중 임의의 것을 사용하여 구현될 수 있다. 버스 아키텍처들의 예들은, EISA(Enhanced Industry Standard Architecture) 버스, AGP(Accelerated Graphics Port), VESA(Video Electronics Standards Association) 로컬 버스, USB(Universal Serial Bus), 및 PCIe(Peripheral Component Interconnect Express) 버스를 포함할 수 있지만, 이에 제한되지 않는다. 호스트 프로세서(105)는 하드웨어 가속기들(135)에 커플링하기 위해 사용되는 상이한 인터페이스 회로를 통해 호스트 메모리(110)에 커플링될 수 있다. 예시를 위해, 호스트 프로세서(105)가 다른 디바이스들과 통신하도록 하는 인터페이스 회로(115)에 대한 엔드포인트는 도시되지 않는다.
시스템(100)은 인터페이스 회로(115)에 커플링된 하나 이상의 다른 I/O 디바이스들(도시되지 않음)을 더 포함할 수 있다. I/O 디바이스들은 직접적으로 또는 개재하는 I/O 제어기들을 통해 시스템(100), 예를 들어, 인터페이스 회로(115)에 커플링될 수 있다. I/O 디바이스들의 예들은 키보드, 디스플레이 디바이스, 포인팅 디바이스, 하나 이상의 통신 포트들 및 네트워크 어댑터를 포함하지만, 이에 제한되지 않는다. 네트워크 어댑터는, 시스템(100)이 개재하는 사설 또는 공개 네트워크들을 통해 다른 시스템들, 컴퓨터 시스템들, 원격 프린터들, 및/또는 원격 저장 디바이스들에 커플링될 수 있게 하는 회로를 지칭한다. 모뎀들, 케이블 모뎀들, 이더넷 카드들 및 무선 트랜시버들은 시스템(100)과 함께 사용될 수 있는 상이한 유형들의 네트워크 어댑터들의 예들이다.
도 1의 예에서, 하드웨어 가속기들(135-1, 135-2, 및 135-3) 각각은 메모리(140-1, 140-2 및 140-3)에 각각 커플링된다. 메모리들(140-1, 140-2, 및 140-3)은 일반적으로 호스트 메모리(110)와 관련하여 설명되는 바와 같은 RAM들로 구현된다. 하나 이상의 실시예들에서, 각각의 하드웨어 가속기(135)는 IC로서 구현된다. IC는 프로그래밍가능 IC일 수 있다. 프로그래밍가능 IC의 예는 필드 프로그래밍가능 게이트 어레이(FPGA)이다.
도 1의 예에서, 하드웨어 가속기들(135) 각각은 엔드포인트(145), 링크 회로(150), 메모리 제어기(도 1에서 "MC"로 축약됨)(155), 및 상호접속 회로(168)를 포함한다. 각각의 하드웨어 가속기(135)는 또한 하나 이상의 컴퓨팅 유닛들(도 1에 "CU"로 축약됨)을 포함한다. 컴퓨팅 유닛은 호스트 프로세서(105)로부터 분담된 작업들을 수행할 수 있는 회로이다. 예시를 위해, 하드웨어 가속기들(135) 각각은 컴퓨팅 유닛(160) 및 컴퓨팅 유닛(165)을 포함하는 것으로 도시된다. 하드웨어 가속기들(135)은 도시된 것보다 적거나 많은 컴퓨팅 유닛들을 포함할 수 있음을 인식해야 한다.
일례에서, 엔드포인트들(145) 각각은 PCIe 엔드포인트로서 구현된다. 엔드포인트들(145)은 시스템(100)에 의해 사용되는 특정 유형 또는 구현의 인터페이스 회로(115를 통해 통신하기에 적합한 임의의 유형의 엔드포인트로서 구현될 수 있음을 인식해야 한다. 메모리 제어기들(155) 각각은 각각의 메모리(140)에 커플링되어, 하드웨어 가속기(135)에 의해 그 메모리(140)의 액세스(예를 들어, 판독 및 기록)를 용이하게 한다.
하나 이상 실시예들에서, 하드웨어 가속기(135-1) 및 메모리(140-1)는 제1 회로 보드(도시되지 않음)에 부착되고, 하드웨어 가속기(135-2) 및 메모리(140-2)는 제2 회로 보드(도시되지 않음)에 부착되고, 하드웨어 가속기(135-3) 및 메모리(140-3)는 제3 회로 보드(도시되지 않음)에 부착된다. 이러한 회로 보드들 각각은 버스 포트 또는 슬롯에 커플링하기에 적합한 커넥터들을 포함할 수 있다. 예를 들어, 회로 보드들 각각은 시스템(100)의 이용가능한 PCIe 슬롯(또는 다른 버스/인터페이스 커넥터)으로의 삽입을 위해 구성된 커넥터를 가질 수 있다.
링크 회로들(150) 각각은 적어도 하나의 다른, 예를 들어, 이웃 링크 회로(150)와 가속기 링크를 확립할 수 있다. 본 명세서에서 사용되는 바와 같이, "가속기 링크"는 2개의 하드웨어 가속기들을 직접 접속시키는 통신 링크를 지칭한다. 예를 들어, 하드웨어 가속기(135)를 갖는 회로 보드들 각각은 링크 회로들(150)에 접속되는 와이어들을 통해 커플링될 수 있다. 링크 회로들(150)은 와이어들을 통해 가속기 링크들을 확립할 수 있다.
특정 실시예들에서, 링크 회로들(150)은 링 토폴로지를 사용하여 통신가능하게 링크된다. 링크 회로들(150)에 의해 확립된 가속기 링크(들)를 통해 전송되는 데이터는 방향 화살표들에 의해 표시된 바와 같이 좌측에서 우측으로 마스터(master)된다. 예를 들어, 도 1의 예를 참조하면, 좌측의 링크 회로(예를 들어, 링크 회로(150-1))는 마스터로서 동작할 수 있는 한편, 우측의 이웃 링크 회로(예를 들어, 링크 회로(150-2))는 슬레이브로서 동작할 수 있다. 유사하게, 링크 회로(150-2)는 링크 회로(150-3)에 대해 마스터로서 동작할 수 있다. 링크 회로(150-3)는 링크 회로(150-1)에 대해 마스터로서 동작할 수 있다.
하나 이상의 실시예들에서, 각각의 링크 회로(150)는 (예를 들어, 각각의 보드 상의) 각각의 하드웨어 가속기에 대한 메모리(140)의 양(또는 크기)를 특정하는 테이블 또는 레지스터를 포함한다. 테이블을 사용하면, 각각의 링크 회로(150)는 가속기 링크들을 사용하여 정보를 교환하기 위해 트랜잭션들에 특정된 어드레스들을 수정할 수 있다. 특정 실시예들에서, 테이블 또는 레지스터는 정적이다. 하나 이상의 다른 실시예들에서, 드라이버는 테이블 또는 레지스터에 저장된 정보를 동적으로, 예를 들어, 런타임으로 판독 및/또는 업데이트할 수 있다.
예시를 위해, 하드웨어 가속기(135-2)의 동작이 설명된다. 각각의 개별적인 하드웨어 가속기에서 유사하게 넘버링된 컴포넌트들은 동일하거나 유사한 방식으로 동작할 수 있음을 인식해야 한다. 따라서, 하드웨어 가속기(135-2)를 참조하면, 링크 회로(150-2)는 다양한 상이한 소스들 또는 개시기들 중 임의의 것으로부터 트랜잭션을 수신하고 다양한 타겟들 중 임의의 것에 트랜잭션을 라우팅할 수 있다. 예를 들어, 링크 회로(150-2)는 엔드포인트(145-2)(예를 들어, 호스트 프로세서(105)로부터 시작함), 컴퓨팅 유닛(160-2), 컴퓨팅 유닛(165-2), 하드웨어 가속기(135-1)로부터 링크 회로(150-1)를 통해 또는 하드웨어 가속기(135-3)로부터 링크 회로(150-3)를 통해 링크 회로(150-1)로 그리고 이어서 링크 회로(150-2) 상으로 흐르는 트랜잭션을 수신할 수 있다. 링크 회로(150-2)는, 트랜잭션을 링크 회로(150-3)를 통해 임의의 타겟, 예를 들어, 엔드포인트(145-2)(예를 들어, 호스트 프로세서(105)), 컴퓨팅 유닛(160-2), 컴퓨팅 유닛(165-2), 메모리 제어기(155-2), 하드웨어 가속기(135-1) 및 및 링크 회로(150-1)에 또는 링크 회로(150-3)를 통해 하드웨어 가속기(135-3)에 라우팅할 수 있고, 타겟은 소스 또는 개시기와는 상이하다.
예를 들어, 호스트 프로세서(105)는 통합된 어드레스 공간의 일부로서 메모리(140-1), 메모리(140-2) 및/또는 메모리(140-3) 내의 임의의 위치에 액세스할 수 있다. 그러나, 이러한 메모리들에 액세스할 때, 호스트 프로세서(105)는, 선택된 하드웨어 가속기, 예를 들어, 하드웨어 가속기(135-2)에 액세스하고, 이어서 가속기 링크들을 사용하여 선택된 하드웨어 가속기를 통해 임의의 타겟, 예를 들어, 메모리(140-1), 메모리(140-2) 또는 메모리(140-3)에 도달함으로써 이를 수행할 수 있다.
예시적이고 비제한적인 예로서, 호스트 프로세서(105)는 하드웨어 가속기들(135-2 및 135-3)을 수반한 데이터 전송을 개시할 수 있다. 하드웨어 가속기(135-2)가 개시기일 수 있다. 이러한 예에서, 호스트 프로세서(105), 예를 들어, 런타임(172) 및/또는 드라이버(174)는 하드웨어 가속기(135-2)에 대응하는 버퍼 객체(176) 및 하드웨어 가속기(135-3)에 대응하는 버퍼 객체(178)를 생성한다. 호스트 프로세서(105)는 데이터 전송을 위한 타겟 어드레스(하드웨어 가속기(135-3)에 위치됨)가 개시 하드웨어 가속기(하드웨어 가속기(135-2))에 대해 원격임을 표시하는 원격 플래그(182)를 설정한다.
엔드포인트(145-2)는 인터페이스 회로(115)를 통해 호스트 프로세서(105)로부터 분담됨 작업을 수신할 수 있다. 하나 이상의 실시예들에서, 호스트 프로세서(105)는 런타임(172) 및 드라이버(174)를 실행하는 것을 통해, 하드웨어 가속기들(135)을 통합된 어드레스 공간으로서 간주할 수 있다. 엔드포인트(145-2)는 컴퓨팅 유닛(160-2)에 작업(예를 들어, 데이터)을 제공할 수 있다. 작업은, 컴퓨팅 유닛(160-2)이 분담된 작업을 수행하기 위한 데이터를 조회하는 메모리(140-3) 내의 타겟 어드레스를 특정할 수 있다. 하드웨어 가속기(135-2)는 링크 회로(150-2)를 사용하여, 링크 회로(150-2)와 링크 회로(150-3) 사이에 확립된 가속기 링크를 통해 하드웨어 가속기(135-3)와 직접적으로 데이터 전송을 개시 및 수행할 수 있다.
데이터 전송이 호스트 프로세서(105)에 의해 개시될 수 있는 한편, 데이터 전송은 링크 회로들(150)을 사용하여 수행되고, 호스트 프로세서(105), 호스트 메모리(110) 또는 인터페이스 회로(115)를 수반함이 없이 발생한다. 데이터 전송은 하드웨어 가속기들 사이에서 직접 발생한다. 종래의 시스템들에서, 데이터 전송은, 호스트 프로세서(105)가 인터페이스 회로(115)를 통해 하드웨어 가속기(135-3)로부터 데이터를 조회하고 이어서 인터페이스 회로(115)를 통해 하드웨어 가속기(135-2)에 데이터를 제공하는 것에 의해 발생할 것이다.
데이터가 호스트 프로세서(105)를 통해 이동하게 하지 않고 하드웨어 가속기들(135)이 데이터를 그들 사이에서 판독 및 기록하는 능력은 인터페이스 회로(115)(예를 들어, PCIe 버스)를 통해 전달되는 데이터의 양을 상당히 감소시킨다. 이는, 호스트 프로세서(105)와 다른 하드웨어 가속기들(135) 사이에서 데이터를 전달하는데 사용하기 위한 인터페이스 회로(115)의 상당한 대역폭을 절감한다. 추가로, 시스템(100)의 동작 속도는 하드웨어 가속기들(135)이 데이터를 공유하기 위해 요구되는 시간의 감소로 인해 증가될 수 있다.
시스템(100)은 구현되는 디바이스 및/또는 시스템의 특정 유형에 따라, 도 1에 예시되지 않은 추가적인 컴포넌트들 또는 도시된 것보다 적은 컴포넌트들을 포함할 수 있다. 또한, 특정하게 동작하는 포함된 시스템, 애플리케이션(들) 및/또는 I/O 디바이스들은 시스템 유형에 기초하여 상이할 수 있다. 추가로, 예시된 컴포넌트들 중 하나 이상은 다른 컴포넌트에 통합되거나, 달리 그 일부를 형성할 수 있다. 예를 들어, 프로세서는 적어도 일부 메모리를 포함할 수 있다. 시스템(100)은 도 1의 아키텍처 또는 그와 유사한 아키텍처를 사용하여 각각 구현된 복수의 네트워킹된 또는 상호접속된 컴퓨터들 또는 단일 컴퓨터를 구현하기 위해 사용될 수 있다.
도 2는 도 1의 하드웨어 가속기(135-2)의 예시적인 구현을 예시한다. 도 2 내에서, 링크 회로(150-2)의 예시적인 구현이 제공된다. 도 2의 링크 회로(150-2)에 대해 예시된 아키텍처는 도 1에 예시된 링크 회로들(150) 중 임의의 것을 구현하기 위해 사용될 수 있음을 인식해야 한다.
하나 이상의 실시예들에서, 링크 회로(150-2)는, 다른 하드웨어 가속기들에 전송될 트랜잭션들을 데이터 스트림 기반 패킷들로 변환하고 링크 회로들(150) 사이에 확립된 가속기 링크들을 통해 패킷들을 라우팅할 수 있다. 특정 실시예들에서, 링크 회로(150-2)는 AXI(AMBA eXtensible Interface) 준수 메모리 맵핑된 트랜잭션들을 송신을 위한 AXI 데이터 스트림들로 변환할 수 있다. 본 개시 내에서, AXI는 예시적인 통신 프로토콜로서 사용된다. 다른 통신 프로토콜들이 사용될 수 있음을 인식해야 한다. 이와 관련하여, AXI의 사용은 제한이 아닌 예시의 목적으로 의도된다. 링크 회로(150-2)는 또한 다른 하드웨어 가속기들(예를 들어, 하드웨어 가속기들(135-1 및 135-3))로부터의 착신 패킷들을 핸들링하고, 패킷들을 메모리 맵핑된 트랜잭션들로 변환하고, 데이터를 하드웨어 가속기(135-2) 내에 로컬로 라우팅할 수 있다. 추가로, 링크 회로(150-2)는 수신된 패킷들을 메모리 맵핑된 트랜잭션들로 변환하고, 트랜잭션을 수정하고, 메모리 맵핑된 트랜잭션을 패킷들로 변환하고, 패킷들을 다음 하드웨어 가속기에 전달할 수 있다. 가속기 링크들을 통해 수신된 데이터는 메모리 맵핑된 트랜잭션들로서 하드웨어 가속기(135-2) 내에 내부적으로 라우팅될 수 있다.
도 2의 예에서, 링크 회로(150-2)는 트랜시버들(202 및 204), 재송신 엔진(RTE)들(206 및 208) 및 스트림(MM-스트림) 맵퍼들(210 및 212)에 대한 메모리 맵을 포함한다. MM-스트림 맵퍼들(210 및 212)은 상호접속 회로(214)에 커플링된다.
도시된 바와 같이, 트랜시버(202)는 하드웨어 가속기(135-1) 내의 대응하는 트랜시버에 커플링되는 한편, 트랜시버(204)는 하드웨어 가속기(135-3) 내의 대응하는 트랜시버에 커플링될 수 있다. 트랜시버들(202 및 204)은 다른 하드웨어 가속기들과 확립된 가속기 링크들의 물리 계층을 구현한다. 트랜시버들(202 및 204) 각각은 멀티-기가비트 통신 링크들에 대한 경량의 직렬 통신 프로토콜을 구현할 수 있다. 하나 이상의 실시예들에서, 트랜시버들(202 및 204) 각각은 이웃 IC 내의 트랜시버에 대한 양방향 인터페이스를 구현할 수 있다. 트랜시버들(202 및 204)은 다른 하드웨어 가속기들과의 가속기 링크들을 자동으로 초기화할 수 있다. 일반적으로, 트랜시버들(202 및 204)은 흐름 제어와 관련된 저레벨 시그널링 및 저 PHY 레벨 프로토콜들을 구현하기 위해 양방향 통신할 수 있다. 그러나, 데이터 흐름들은 링 토폴로지를 사용하여 구현되고 이전에 설명된 바와 같이 (예를 들어, 링 주위의 단일 방향에서) 마스터로부터 슬레이브까지 흐른다
예를 들어, 트랜시버(202)는 하드웨어 가속기(135-1)의 링크 회로(150-1) 내의 대응하는 트랜시버와 양방향 통신할 수 있다. 트랜시버(204)는 하드웨어 가속기(135-3)의 링크 회로(150-3) 내의 대응하는 트랜시버와 양방향 통신할 수 있다. 트랜시버들(202 및 204) 각각은 데이터 스트림들, 예를 들어, AXI 데이터 스트림들을 사용하여 이웃 트랜시버와 통신할 수 있다.
특정 실시예들에서, 트랜시버들(202 및 204)은 8B/10B 코딩 규칙들을 사용하여 이웃 하드웨어 가속기에 데이터를 전송 및 수신할 수 있다. 트랜시버들(202 및 204) 각각은 8B/10B 코딩 규칙들을 사용하여 단일 비트 및 대부분의 멀티 비트 에러들을 검출할 수 있다.
하나 이상의 실시예들에서, 트랜시버들(202 및 204) 각각은, 캘리포니아 산호세의 Xilinx, Inc.로부터 입수가능한 Aurora 8B/10B IP 코어로 구현된다. 그러나, 언급된 특정 코어는 예시의 목적으로 제공되고 제한으로 의도되지 않음을 인식해야 한다. 본 명세서에 설명된 바와 같이 동작할 수 있는 다른 트랜시버들이 사용될 수 있다.
트랜시버(202)는 RTE(206)에 커플링된다. 트랜시버(202) 및 RTE(206)는 양방향 통신을 지원하는 각각의 방향에서 이어지는 복수의 데이터 스트림들을 통해 통신할 수 있다. 트랜시버(204)는 RTE(208)에 커플링된다. 트랜시버(204) 및 RTE(208)는 양방향 통신을 지원하는 각각의 방향에서 이어지는 복수의 데이터 스트림들을 통해 통신할 수 있다.
RTE들(206 및 208)은 트랜잭션들을 관리할 수 있다. 하나 이상의 실시예들에서, RTE(206) 및 RTE(208) 각각은 트랜시버들(202 및 204)에 의해 각각 구현되는 것들에 대한 통신 프로토콜의 추가 계층들을 각각 구현한다. 예를 들어, RTE(206) 및 RTE(208) 각각은 트랜잭션 계층(TL)/링크 계층(LL) 및 사용자 계층을 구현한다. 이러한 추가 계층들은 데이터 무결성에 관한 추가적 보장을 제공한다. 초기화 이후, 애플리케이션들은 데이터의 스트림들로서 가속기 링크들을 가로질러 데이터를 전달할 수 있다. 추가적인 데이터 무결성 측정들은 특히 유리한데, 이는 메모리 맵핑된 트랜잭션들을 스트림 데이터로 변환할 때 제어 신호들이 데이터와 병합되기 때문이다. 데이터 무결성 문제는 손상된 제어 신호들을 초래할 수 있다. 온-칩 상호접속부들 및/또는 버스들은 제어 신호들에 대한 데이터 손실을 용인하지 않는다.
TL/LL은 무손실 데이터 통신을 보장하기 위해 토큰 기반 흐름 제어를 구현한다. 하나 이상의 실시예들에서, 이웃 트랜시버들 사이 및 트랜시버들과 RTE들 사이의 통신 채널들은 폭이 128 비트이다. 데이터를 전송할 때, 각각의 RTE는, 타겟 하드웨어 가속기 내의 수신 링크 회로가, 트랜시버에 의해 구현된 물리 계층에 트랜잭션을 실제로 전송하기 전에 전송될 전체 트랜잭션을 수신하기에 충분한 버퍼링 자원들(예를 들어, 토큰)을 갖는 것을 체크할 수 있다. 예를 들어, RTE(206)는, 하드웨어 가속기(135-1) 내의 수신 링크 회로(150-1)가 전송을 위해 (링크 회로(150-2) 내의) 트랜시버(202)에 데이터를 제공하기 전에 데이터를 수신하기에 충분한 버퍼 자원들을 갖는 것을 체크할 수 있다.
RTE들(206 및 208)은 데이터 손상을 검출할 수 있다. 예를 들어, RTE들(206 및 208) 각각은 수신되는 각각의 패킷에 대해 패킷 길이 정보, 패킷 시퀀스 정보, 및/또는 사이클릭 리던던시 체크(CRC) 체크섬을 검증할 수 있다. RTE 슬레이브(예를 들어, 수신 RTE)가 패킷 에러를 검출할 때, RTE는 에러 중단 모드에 진입할 수 있다. 에러 중단 모드에서, RTE는 에러를 갖는 패킷을 실패된 패킷으로서 드롭한다. RTE는 트랜잭션의 모든 후속 패킷들을 추가로 드롭한다. 특정 실시예들에서, 에러 중단 모드의 개시는 RTE가 링크 재시도 시퀀스를 론칭하게 한다. 링크 재시도 시퀀스가 성공적이면, 링크 마스터(예를 들어, 전송 RTE)는 실패 포인트로부터 시작함으로써 송신을 복구할 수 있다.
RTE(206)는 MM-스트림 맵퍼(210)에 커플링된다. RTE(206)는 양방향 통신을 지원하는 각각의 방향에서 이어지는 복수의 데이터 스트림들을 통해 MM-스트림 맵퍼(210)와 통신할 수 있다. RTE(208)는 MM-스트림 맵퍼(212)에 커플링된다. RTE(208)는 양방향 통신을 지원하는 각각의 방향에서 이어지는 복수의 데이터 스트림들을 통해 MM-스트림 맵퍼(212)와 통신할 수 있다.
MM-스트림 맵퍼(210) 및 MM-스트림 맵퍼(212) 각각은 상호접속 회로(214)에 커플링된다. 상호접속 회로(214)는 MM-스트림 맵퍼들(210 및 212) 뿐만 아니라 그에 커플링된 하드웨어 가속기(135-2)의 다른 마스터 및/또는 슬레이브 회로들 사이에서 데이터를 라우팅할 수 있다. 상호접속 회로(214)는 하나 이상의 온-칩 상호접속부들로서 구현될 수 있다. 온-칩 상호접속부의 예는 AXI 버스이다. AXI 버스는 회로 블록들 및/또는 시스템들 사이에 온-칩 접속들을 확립하는데 사용하기 위한 임베딩된 마이크로제어기 버스 인터페이스이다. 상호접속 회로의 다른 예시적인 구현들은 다른 버스들, 크로스바들, 네트워크 온 칩(network on chip; NoC)들 등을 포함할 수 있지만, 이에 제한되지 않는다.
MM-스트림 맵퍼들(210 및 212)은 RTE들(206 및 208)로부터 수신된 데이터 스트림들을, 각각, 상호접속 회로 블록(214)에 제공될 수 있는 메모리 맵핑된 트랜잭션들로 변환할 수 있다. 이와 관련하여, 데이터 스트림은 메모리 맵핑된 트랜잭션들을 지원하는 다수의 채널들로 디멀티플렉싱될 수 있다. MM-스트림 맵퍼들(210 및 212)은 또한 상호접속 회로 블록(214)으로부터 수신된 메모리 맵핑된 트랜잭션들을 각각 RTE(206 및 208)에 제공될 수 있는 스트림 데이터로 변환할 수 있다. MM-스트림 맵퍼들(210 및 212)은 메모리 맵핑된 트랜잭션들(예를 들어, 논의된 바와 같은 제어 신호들을 포함함)을 지원하는 다수의 채널들을 각각 RTE들(206 및 208)에 전송하기 위해 단일 데이터 스트림으로 멀티플렉싱할 수 있다.
하나 이상의 실시예들에서, MM-스트림 맵퍼들(210 및 212) 각각은 트랜잭션에서 수신된 타겟 어드레스를 조정할 수 있다. MM-스트림 맵퍼(210)는, 예를 들어 가속기 링크를 통해 하드웨어 가속기(135-1)로부터 트랜잭션을 수신할 때 하드웨어 가속기(135-2)에 대한 어드레스 범위(예를 들어, 메모리(140-2)의 어드레스 범위)의 상한을 트랜잭션의 타겟 어드레스로부터 감산할 수 있다. 트랜잭션이 링크 회로들(150)을 통해 전달될 때 타겟 어드레스를 조정함으로써, 트랜잭션은 가속기 링크들을 통해 하나의 하드웨어 가속기로부터 다른 하드웨어 가속기로 지향될 수 있다. 가속기 링크들을 사용할 때 어드레스들의 동작에 관한 추가적인 세부사항들은 도 4와 관련하여 더 상세히 설명된다.
예시를 위해, 하드웨어 가속기(135-2)의 다른 부분들은 링크 회로(150-2)와 관련하여 설명된다. 도 2의 예에서, 상호접속 회로(214)는 직접 메모리 액세스(DMA) 마스터 회로(216)에 커플링된다. DMA 마스터 회로(216)는 예를 들어, 상호접속 회로 블록(214)과 통신할 수 있는 메모리 맵핑된 인터페이스를 포함한다. DMA 마스터 회로(216)는 PCIe 엔드포인트(218)에 커플링된다. 도 1의 엔드포인트(145-2)의 예시적인 구현인 PCIe 엔드포인트(218)는 호스트 프로세서(105)에 통신가능하게 링크된다.
도 2의 예에서, 상호접속 회로(214)는 또한 하나 이상의 컴퓨팅 유닛 마스터들(220-1 내지 220-N)에 커플링된다. 각각의 컴퓨팅 유닛 마스터(220)는 하드웨어 가속기(135-2) 내에 구현된 컴퓨팅 유닛과 상호접속 회로 블록(214) 사이에 양방향 인터페이스를 제공한다. 각각의 컴퓨팅 유닛 마스터(220)는 상호접속 회로 블록(214)과 통신하기 위한 메모리 맵핑된 인터페이스를 더 포함한다. 컴퓨팅 유닛(160-2) 및 컴퓨팅 유닛(165-2) 각각은 슬레이브 인터페이스(도시되지 않음)를 통해 상호접속 회로(214)에 접속될 수 있다.
도 2의 예에서, 상호접속 회로(214)는 또한 하나 이상의 메모리 제어기 슬레이브 회로들(225-1 내지 225-N)에 커플링된다. 각각의 메모리 제어기 슬레이브 회로(225)는 메모리(140-2)에 대한 판독 및 기록 동작들을 용이하게 한다. 메모리(140-2)는 하드웨어 가속기(135-2)에 의해 액세스가능한 하나 이상의 오프-칩 메모리들로서 구현될 수 있다. 메모리 제어기들(225-1 내지 225-N) 각각은 상호접속 회로 블록(214)과 통신하기 위한 메모리 맵핑된 인터페이스를 더 포함한다.
도 3은 RTE(206)의 예시적인 구현을 예시한다. 도 3과 관련하여 설명된 예시적인 아키텍처는 흐름 제어 유닛(Flow Control Unit; FLIT)들을 사용하여 크레디트-기반 흐름 제어/재송신 제어 방식을 구현한다. RTE(206)는 애플리케이션들에 의해 사용될 수 있는 프로토콜 및/또는 인터페이스에 대해 내부적으로 사용되는 FLIT-기반 프로토콜 및/또는 인터페이스 사이에서 전환할 수 있다.
RTE(206)는 송신 채널(330)을 포함한다. 송신 채널(330)은 데이터(예를 들어, AXI) 스트림들을 FLIT-기반 트랜잭션들로 캡슐화해제할 수 있다. 도 3의 예에서, 송신 채널(330)은 송신(TX) 패킷 사이클릭 리던던시 체크(CRC) 생성기(302), PRET(Retry Pointer Return Command) 패킷/IRTRY(Init Retry Command) 패킷 생성기 및 RRP(Return Retry Pointer) 임베더(embedder)(304), TRET(Token Return) 패킷 생성기 및 시퀀스(SEQ) 번호/FRP(Forward Retry Pointer)/RTC(Return Token Count) 임베더(306), 흐름 제어 회로(308), 출력 버퍼(310)를 포함한다. TRET 생성기 및 SEQ/FRP/RTC 임베더(306)는 또한 재시도 버퍼(312)에 커플링된다.
RTE(206)는 수신 채널(340)을 포함한다. 수신 채널(340)은 FLIT-기반 인터페이스를 캡슐화하고 인터페이스를 데이터(예를 들어, AXI) 스트림들로 변환할 수 있다. 도 3의 예에서, 수신 채널(340)은 패킷 경계 검출기(316), 수신(RX) 패킷 CRC 회로(318), RX 패킷 프로세서(320) 및 입력 버퍼(322)를 포함한다. Rx 패킷 프로세서(320)는 에러 핸들러(324) 및 재시도 시퀀스 회로(314)에 커플링된다.
RTE(206)는 제한이 아닌 예시 목적으로 제공된다. 크레디트-기반 흐름 제어/재송신 제어 방식을 구현하기에 적합한 다른 아키텍처들이 사용될 수 있다는 것을 인식해야 한다. 도 3과 관련하여 설명된 아키텍처는 또한 데이터 흐름 관점에서 플립된(flipped) 또는 반전된 배향으로 도 2의 RTE(208)를 구현하기 위해 사용될 수 있다.
도 4는 복수의 하드웨어 가속기들을 갖는 시스템에 대한 예시적인 동작 방법(400)을 예시한다. 방법(400)은 하드웨어 가속기들 사이에서 직접 데이터 전송의 예를 예시한다. 방법(400)은 도 1과 관련하여 설명된 시스템(100)과 동일하거나 유사한 시스템에 의해 수행될 수 있다. 방법(400)은, 호스트 프로세서와 하드웨어 가속기들을 커플링하는 버스 상의 불충분한 대역폭이 어떻게 완화될 수 있는지를 예시한다. 버스 상에서 달리 발생하는 데이터 전송들은 가속기 링크들로 전환되어 다른 동작들을 위해 버스 상의 대역폭이 확보될 수 있다.
블록(405)에서, 시스템은 하드웨어 가속기 시퀀스를 자동으로 발견할 수 있다. 하나 이상의 실시예들에서, 하드웨어 가속기들, 예를 들어, 하드웨어 가속기들의 보드들은 시스템 내에서 링 토폴로지로 배열된다. 호스트 프로세서는 기존의 PCIe 토폴로지, 및 그에 따라 PCIe 버스에 커플링된 시스템 내에 존재하는 하드웨어 가속기들의 수를 인식한다. 추가로, 호스트 프로세서는, 예를 들어, 런타임을 통해, 각각의 하드웨어 가속기에 로딩된 특정 회로(예를 들어, 이미지 또는 구성 비트스트림)를 인식한다. 따라서, 호스트 프로세서는 하드웨어 가속기들이 본 명세서에 설명된 바와 같은 가속기 링크들을 지원하는 것을 인식한다. 호스트 프로세서는 하드웨어 가속기들의 시퀀스를 여전히 결정해야 한다. 드라이버는 예를 들어, 설명된 하드웨어 가속기 시퀀스의 자동 발견을 수행할 수 있다. 이러한 자동 발견 능력은, 호스트 프로세서에 의해 실행되는 애플리케이션들을 수정할 필요 없이 시스템에 대한 새로운 및/또는 추가적인 하드웨어 가속기들의 추가를 지원한다.
각각의 하드웨어 가속기는 공지되고 동일한 어드레스 범위를 가질 수 있다. 예를 들어, 각각의 하드웨어 가속기는 메모리(140)의 16 GB에 대응하는 16 GB의 어드레스 범위를 갖는 것으로 가정될 수 있다. 하나 이상의 실시예들에서, 호스트 프로세서는 16 GB 간격들로 메모리 어드레스들에 고유의 값을 기록할 수 있다. 이어서, 호스트 프로세서는 기록된 및 판독된 값들에 기초하여 링 토폴로지 내에서 하드웨어 가속기들의 시퀀스를 결정하기 위해 값들을 다시 판독할 수 있다.
블록(410)에서, 호스트 프로세서는 시동 시에 각각의 하드웨어 가속기에 대한 버퍼를 생성할 수 있다. 예를 들어, 호스트 프로세서에 의해 실행되는 런타임은 각각의 개별적인 하드웨어 가속기의 메모리 내에 버퍼를 생성하기 위해 각각의 하드웨어 가속기와 통신할 수 있다. 도 1을 참조하면, 하드웨어 가속기(135-1)는 메모리(140-1) 내에 버퍼를 생성한다. 하드웨어 가속기(135-2)는 메모리(140-2) 내에 버퍼를 생성한다. 하드웨어 가속기(135-3)는 메모리(140-3) 내에 버퍼를 생성한다.
블록(415)에서, 호스트 프로세서는 하드웨어 가속기들 간 데이터 전송을 개시한다. 데이터 전송은, 예를 들어, 호스트 프로세서로부터 하드웨어 가속기로 분담될 작업의 일부일 수 있다. 예시적이고 비제한적인 예로서, 호스트 프로세서(105)는 애플리케이션에 대한 작업을 하드웨어 가속기(135-1)의 컴퓨팅 유닛(160-1)에 분담시킬 수 있다. 작업은 명령들 및 타겟 어드레스를 포함할 수 있고, 그로부터 컴퓨팅 유닛(160-1)은 작업에 대한 데이터를 획득할 것이다. 이러한 예의 타겟 어드레스는 하드웨어 가속기(135-2) 내에(예를 들어, 메모리(140-2) 내에) 위치된다. 따라서, 호스트 프로세서로부터 분담된 작업을 수행하기 위해, 컴퓨팅 유닛(160-1)은 메모리(140-2) 내의 타겟 어드레스로부터 데이터를 조회해야 한다.
블록(420)에서, 런타임은 하드웨어 가속기들(135-1 및 135-2) 간 데이터 전송을 요청할 수 있다. 예를 들어, 런타임은 하드웨어 가속기(135-1)에 의해 또는 그로부터 하드웨어 가속기(135-2)의 판독을 요청할 수 있다.
블록(425)에서, 드라이버는 하드웨어 가속기(135-2)에 대응하는 호스트 메모리 내에 버퍼 객체 그리고 하드웨어 가속기(135-1)에 대응하는 호스트 메모리 내에 버퍼 객체를 생성할 수 있다. 버퍼 객체는 호스트 메모리에 구현된 섀도우 데이터 구조이다. 각각의 버퍼 객체는 시스템 내의 디바이스에 대응하거나 이를 표현할 수 있다. 버퍼 객체는 호스트 프로세서에 의해 실행되는 런타임에 의해 수행되는 운영 기능들을 지원하는 데이터를 포함할 수 있다.
하나 이상의 실시예들에서, 호스트 메모리에 생성된 버퍼 객체들은 원격 플래그를 포함할 수 있다. 원격 플래그는, 버퍼 객체가 트랜잭션을 개시하고 있는 하드웨어 가속기의 관점에서 원격에 있음을 표시하도록 설정될 수 있다. 이러한 예에서, 하드웨어 가속기(135-1)는 하드웨어 가속기(135-2)로부터 데이터를 판독하고 있다. 따라서, 하드웨어 가속기(135-1)는 트랜잭션을 개시하고 있다. 드라이버는 생성 시에 하드웨어 가속기(135-2)에 대응하는 버퍼 객체에 원격 플래그를 설정한다.
블록(430)에서, 런타임 라이브러리는 개시 하드웨어 가속기에 의해 버퍼 객체(예를 들어, 원격 버퍼 객체)에 대한 액세스를 개시한다. 런타임 라이브러리는 하드웨어 가속기(135-1)로부터 하드웨어 가속기(135-2)에 대응하는 버퍼 객체의 액세스를 개시한다. 예를 들어, 런타임은, 원격 플래그가 하드웨어 가속기(135-2)에 대한 버퍼 객체 내에 설정된다고 결정한다. 원격 플래그가 설정된다고 결정하는 것에 응답하여, 런타임 라이브러리는 링크 회로들에 의해 확립된 가속기 링크들을 사용하여 전송을 스케줄링한다. 하드웨어 가속기들 사이의 가속기 링크들을 사용하여 전송을 스케줄링할 때, 런타임은 하드웨어 가속기(135-2)로부터의 데이터에 액세스하기 위해 하드웨어 가속기(135-1)에 의해 사용될 어드레스를 결정한다.
예시를 위해, 하드웨어 가속기들(135) 각각이 1 내지 1000의 어드레스 범위를 갖는 예를 고려한다. 런타임은, 하드웨어 가속기(135-1)에 의해 하드웨어 가속기(135-2)로부터 조회될 데이터가 하드웨어 가속기(135-2)에 대응하는 어드레스(500)에서(예를 들어, 메모리(140-2)에 대응하는 어드레스(500)에서) 버퍼에 위치된다고 결정할 수 있다. 이러한 예에서, 런타임은 타겟 어드레스에 1000을 추가하여 1500의 어드레스를 야기하고, 이는 분담된 작업에 대해 동작할 때 데이터를 판독하기 위한 타겟 어드레스로서 하드웨어 가속기(135-1)에 제공된다.
다른 예로서, 데이터가 메모리(140-3) 내의 어드레스 500에 저장되었다면, 런타임은, 트랜잭션이 하드웨어 가속기(135-3)에 도달하도록 하드웨어 가속기들(135) 각각이 1 내지 1000의 어드레스 범위를 갖는다고 가정하여 2000을 추가할 것이다. 일반적으로, 공지된 바와 같이, 리턴 경로 데이터는 사용된 온-칩 버스 상호접속부들(예를 들어, AXI 상호접속부들)을 통해 추적될 수 있다. 예를 들어, 마스터로부터의 판독 요청이 발행될 때, 판독 요청은, 판독 요청이 각각의 하드웨어 가속기를 가로질러 이동함에 따라 일련의 어드레스 디코딩 및/또는 어드레스 시프팅(mm-스트림 맵퍼들에 의해 수행됨)에 의해 상호접속부들을 통해 슬레이브로 라우팅된다. 각각의 개별적인 상호접속부는 어느 마스터들이 각각의 슬레이브에 대해 현저한 트랜잭션들을 갖는지를 계속 추적할 수 있다. 판독 데이터가 리턴될 때, 판독 데이터는 정확한 인터페이스(들)를 통해 전송될 수 있다. 일부 경우들에서, 판독 데이터를 리턴하기 위해, 식별자(ID) 비트들은 특정 마스터와 특정 판독 데이터를 다시 연관시키기 위해 사용될 수 있다.
블록(435)에서, 개시 하드웨어 가속기(예를 들어, 제1 하드웨어 가속기)는 호스트 프로세서로부터 작업을 수신한다. 엔드포인트(145-1)는, 예를 들어, 작업을 수신하고 작업을 컴퓨팅 유닛(160-1)에 제공할 수 있다. 작업은, 컴퓨팅 유닛(160-1)에 의해 동작될 데이터가, 이 예에서는 1500인 타겟 어드레스에 위치됨을 특정한다. 컴퓨팅 유닛(160-1)은 예를 들어, 타겟 어드레스가 저장될 제어 포트를 가질 수 있다. 어드레스 1500에 위치된 데이터에 액세스하기 위한 시도에서, 컴퓨팅 유닛(160-1)은 어드레스가 하드웨어 가속기(135-1)의 범위 내에 있지 않음을 인식한다. 예를 들어, 컴퓨팅 유닛(160-1)은 어드레스를 1000의 어드레스 범위의 상한과 비교하고 어드레스가 상한을 초과한다고 결정할 수 있다. 이 예에서, 컴퓨팅 유닛(160-1)은 어드레스 1500로부터 판독 트랜잭션을 개시할 수 있다. 예를 들어, 컴퓨팅 유닛(160-1)은 상호접속부(214)를 통해 전송된 메모리 맵핑된 트랜잭션으로서 판독 트랜잭션을 개시할 수 있다.
블록(440)에서, 개시 하드웨어 가속기는 가속기 링크를 통해 타겟 하드웨어 가속기(예를 들어, 제2 하드웨어 가속기)에 액세스한다. 예를 들어, 링크 회로(150-1)는 컴퓨팅 유닛(160-1)에 의해 개시된 메모리 맵핑된 트랜잭션을 (예를 들어, MM-스트림 맵퍼를 사용하여) 스트림 기반 패킷들로 변환할 수 있다. 링크 회로(150-1)는 추가 데이터로 패킷들 추가로 인코딩하여 데이터 무결성 체크, 재송신, 초기화 및 (예를 들어, RPE를 사용한) 에러 보고를 추가로 지원할 수 있다. 링 토폴로지는 좌측에서 우측으로 마스터될 수 있다. 따라서, 패킷들은 링크 회로(150-1)의 트랜시버에 의해 링크 회로(150-2)에 출력될 수 있다.
링크 회로(150-2)는 트랜시버(202)에서 데이터 스트림을 수신하고 RTE(206)에서 트랜잭션을 프로세싱한다. MM-스트림 맵퍼(210)는 스트림 데이터 기반 패킷들을 수신하는 것에 응답하여, 다양한 동작들을 수행할 수 있다. MM-스트림 맵퍼(210)는 예를 들어, 스트림 기반 패킷들을 메모리 맵핑된 트랜잭션으로 변환할 수 있다. 추가로, MM-스트림 맵퍼(210)는 1500의 타겟 어드레스를 하드웨어 가속기(135-2)의 어드레스 범위의 상한만큼 감분시킬 수 있다. 언급된 바와 같이, 상한은 링크 회로(150-2) 내의 테이블 또는 레지스터에, 예를 들어, MM-스트림 맵퍼(210)에 저장될 수 있다. 이 예에서, MM-스트림 맵퍼(210)는 1500의 타겟 어드레스를 1000만큼 감분시켜 500의 타겟 어드레스를 도출한다. 타겟 어드레스가 하드웨어 가속기(135-2)에 대해 로컬이기 때문에, 하드웨어 가속기(135-2)는 수신된 트랜잭션에 대해 작용할 수 있다. 이 예에서, MM-스트림 맵퍼(210)는 상호접속부(214)에 메모리 맵핑된 트랜잭션을 제공한다. 메모리 맵핑된 트랜잭션은 판독 트랜잭션을 수행하기 위해 (예를 들어, 메모리 제어기 슬레이브를 통해) 메모리 제어기(155-2)에 제공될 수 있다. 이러한 방식으로, 하드웨어 가속기(135-1)는 하드웨어 가속기(135-2)로부터 데이터를 판독할 수 있다(또는 그에 데이터를 기록할 수 있다). 요청된 데이터는 판독 요청을 전송하기 위해 사용된 동일한 경로를 사용하여 메모리(140-2)로부터 요청기에 다시 제공될 수 있다. 예를 들어, 메모리(140-2)로부터 판독된 데이터는, 링 토폴로지를 통해 하드웨어 가속기(135-3)에 그리고 이어서 하드웨어 가속기(135-1)에 포워딩 이동할 필요없이 하드웨어 가속기(135-2)로부터 하드웨어 가속기(135-1)로 전송된다.
예를 들어, 타겟 어드레스가 2500이었다면, 감분 결과는 1500일 것이다. 그 경우, MM-스트림 맵퍼(210)는, 타겟 어드레스가 하드웨어 가속기(135-2)에 위치되지 않는다고 결정하는데, 이는 타겟 어드레스가 하드웨어 가속기(135-2)에 대한 어드레스 범위의 상한(예를 들어, 1000)보다 크기 때문이다. 그 경우, MM-스트림 맵퍼(210)는 다음 하드웨어 가속기로 포워딩하기 위해 트랜잭션을 상호접속 회로를 통해 MM-스트림 맵퍼(212)에 전송할 수 있다.
블록(445)에서, 하드웨어 가속기(135-1)의 컴퓨팅 유닛(160-1)은 호스트 프로세서에 대한 인터럽트를 생성하여, 하드웨어 가속기들 사이의 데이터 전송이 완료된 것을 호스트 프로세서에 통지할 수 있다. 블록(450)에서, 런타임은 데이터 전송이 완료되었다는 애플리케이션들에 필요한 임의의 통지들을 제공할 수 있다. 런타임은, 예를 들어, 완료 이벤트들, 커맨드 큐들, 및 애플리케이션들에 대한 통지들을 핸들링할 수 있다.
하나 이상의 실시예들에서, PCIe 엔드포인트 및 DMA 마스터는 상이한 하드웨어 가속기에 위치된 타겟 어드레스에 기록할 수 있다. 예시적이고 비제한적인 예에서, 호스트 프로세서는 하드웨어 가속기(135-2)에 위치된 타겟 어드레스를 갖는 데이터를 하드웨어 가속기(135-1)에 전송할 수 있다. 그 경우, DMA 마스터는, 타겟 어드레스가 상이한 하드웨어 가속기에 위치된 것을 인식하고 가속기 링크를 통한 데이터 전송을 스케줄링할 수 있다. 예를 들어, DMA 마스터는 타겟 어드레스를 하드웨어 가속기(135-1)에 대한 어드레스 범위의 상한과 비교할 수 있다. 타겟 어드레스가 상한을 초과한다고 결정하는 것에 응답하여, DMA 마스터는 가속기 링크를 통해 하드웨어 가속기(135-2)에 전송하기 위해 상호접속 회로를 통해 링크 회로(150-1) 내의 MM-스트림 맵퍼(212)로의 메모리 맵핑된 트랜잭션을 개시할 수 있다.
하나 이상의 실시예들에서, 호스트 프로세서는 로드 밸런싱을 위해 가속기 링크들을 사용할 수 있다. 예를 들어, 호스트 프로세서는, 데이터가 제공되거나 작업이 분담될 선택된 하드웨어 가속기에서 DMA 채널들(예를 들어, DMA 마스터)의 상태를 결정하기 위해 런타임을 사용할 수 있다. DMA 마스터가 사용중이거나 임계 활동량 초과로 동작하고 있다고 결정하는 것에 응답하여, 호스트 프로세서는 버스를 통해 상이한 하드웨어 가속기에 데이터를 전송할 수 있다. 데이터는 선택된 하드웨어 가속기 내의 타겟 어드레스를 특정할 수 있다. 수신 하드웨어 가속기 내의 DMA 마스터는 호스트 프로세서로부터 데이터를 수신할 때, 가속기 링크(들)를 통해 선택된 하드웨어 가속기에 데이터를 포워딩할 수 있다. 특정 실시예에서, 호스트 프로세서는, 내부의 DMA 마스터가 사용중이 아니거나 임계 활동량 미만으로 동작하고 있다고 결정하는 것에 기초하여 수신 하드웨어 가속기를 선택할 수 있다.
예시를 위해, 하드웨어 가속기(135-1)로부터 하드웨어 가속기(135-3)로의 기록 트랜잭션의 예는 일반적으로 호스트 프로세서에 의해 개시되는 것으로 설명된다. 호스트 프로세서는 런타임 및 드라이버를 통해, 타겟 하드웨어 가속기에 대한 원격 플래그를 설정하고, (원하는 어드레스가 하드웨어 가속기(135-3) 내의 어드레스(500)에 위치되는 이전 예를 사용하여) 2500의 어드레스를 결정한다. 호스트 프로세서는 어드레스 2500에 기록할 명령들을 하드웨어 가속기(135-1)에 제공한다. 하드웨어 가속기(135-1) 내에서, 2500의 어드레스를 갖는 트랜잭션이 상호접속부(214)에 제시된다. 어드레스가 하드웨어 가속기(135-1)의 상한을 초과하기 때문에, 상호접속부(214)는 트랜잭션을 링크 회로(150-1)에 전송한다. 링크 회로(150-1)는 링크 회로(150-2)에 트랜잭션을 전송한다. 하드웨어 가속기(135-2) 내의 MM-스트림 맵퍼는 어드레스를 1000만큼 감분하여 1500의 새로운 어드레스를 도출한다. 새로운 어드레스는, 1500이 여전히 하드웨어 가속기(135-2)의 어드레스 상한을 초과하기 때문에 여전히 원격이다. 따라서, 트랜잭션은 하드웨어 가속기(135-3)에 포워딩된다.
하드웨어 가속기(135-3) 내의 MM-스트림 맵퍼는 어드레스를 감분하여 500의 새로운 어드레스를 도출한다. 이어서, 트랜잭션은 하드웨어 가속기(135-3) 내의 상호접속부(214)를 통해 메모리 제어기에 제공되고, 데이터는 메모리(140-3)에 기록된다. 설명된 예들에서, 어드레스는, 트랜잭션이 하드웨어 가속기에 의해 서비스될 수 있는지 여부, 및 그런 경우 트랜잭션을 내부적으로 어디로(예를 들어, 메모리 제어기 또는 다른 회로 블록에) 라우팅할지 또는 다음 하드웨어 가속기에 포워딩되어야 하는지를 결정하기 위해 각각의 하드웨어 가속기에 의해 사용된다. 특정 실시예들에서, 어드레스는, 메모리 내에서 데이터가 기록되는 실제 어드레스와는 상이하다. 기록 확인응답은, 설명된 바와 같이, 하드웨어 가속기(135-3)로부터 하드웨어 가속기(135-2)를 통해 하드웨어 가속기(135-1)에 전송된다.
예시를 위해, 하드웨어 가속기(135-1)에 의해 하드웨어 가속기(135-3)로 개시된 판독 트랜잭션의 다른 예는 일반적으로 호스트 프로세서에 의해 개시되는 것으로 설명된다. 호스트 프로세서는 런타임 및 드라이버를 통해, 타겟 하드웨어 가속기에 대한 원격 플래그를 설정하고, (원하는 어드레스가 하드웨어 가속기(135-3) 내의 어드레스(500)에 위치되는 이전 예를 사용하여) 2500의 어드레스를 결정한다. 호스트 프로세서는 어드레스 2500로부터 판독할 명령들을 하드웨어 가속기(135-1)에 제공한다. 하드웨어 가속기(135-1) 내에서, 2500의 어드레스를 갖는 트랜잭션이 상호접속부(214)에 제시된다. 어드레스가 하드웨어 가속기(135-1)의 상한을 초과하기 때문에, 상호접속부(214)는 트랜잭션을 링크 회로(150-1)에 전송한다. 링크 회로(150-1)는 링크 회로(150-2)에 트랜잭션을 전송한다. 하드웨어 가속기(135-2) 내의 MM-스트림 맵퍼는 어드레스를 1000만큼 감분하여 1500의 새로운 어드레스를 도출한다. 새로운 어드레스는, 1500이 여전히 하드웨어 가속기(135-2)의 어드레스 상한을 초과하기 때문에 여전히 원격이다. 따라서, 트랜잭션은 하드웨어 가속기(135-3)에 포워딩된다.
하드웨어 가속기(135-3) 내의 MM-스트림 맵퍼는 어드레스를 감분하여 500의 새로운 어드레스를 도출한다. 이어서, 트랜잭션은 하드웨어 가속기(135-3) 내의 상호접속부(214)를 통해 메모리 제어기에 제공되고, 데이터는 메모리(140-3)로부터 판독된다. 설명된 예들에서, 어드레스는, 트랜잭션이 하드웨어 가속기에 의해 서비스될 수 있는지 여부, 및 그런 경우 트랜잭션을 내부적으로 어디로 라우팅할지 또는 다음 하드웨어 가속기에 포워딩되어야 하는지를 결정하기 위해 각각의 하드웨어 가속기에 의해 사용된다. 특정 실시예들에서, 어드레스는, 메모리로부터 데이터가 판독되는 실제 어드레스와는 상이하다. 판독되는 데이터는, 설명된 바와 같이, 하드웨어 가속기(135-3)로부터 하드웨어 가속기(135-2)를 통해 하드웨어 가속기(135-1)에 전송된다.
도 5는 다수의 하드웨어 가속기들 및 하나 이상의 추가적인 디바이스들을 포함하는 시스템의 예를 예시한다. 도 5의 예에서, 하드웨어 가속기들(135-1 및 135-2)이 도시되고 각각의 개별적인 하드웨어 가속기 내의 링크 회로를 사용하여 가속기 링크에 의해 커플링된다. 예시를 위해, 하드웨어 가속기(135-3)는 도시되지 않는다. 시스템은 또한 메모리(520)에 커플링된 GPU(515) 및 I/O 디바이스(525)를 포함한다.
도 5의 예에서, GPU(515)는 하드웨어 가속기(135-2)에 데이터를 기록하거나 하드웨어 가속기(135-2)로부터 데이터를 판독할 수 있다. 이 예에서, 호스트 프로세서(도시되지 않음)는 핸들(505-N)을 GPU(515)에 제공한다. 특정 실시예들에서, 핸들들은 파일 디스크립터들로서 구현될 수 있다. 핸들(505-N)은 하드웨어 가속기(135-2)에 대응하는 버퍼 객체(510-N)를 포인팅할 수 있다. 판독 또는 기록 동작을 위해 핸들(505-N)을 사용하는 GPU(515)에 의해, 호스트 프로세서는 핸들(505-N)에 대응하는 버퍼 객체, 예를 들어, 버퍼 객체(510-N)에 대한 동작을 개시한다. 호스트 프로세서는 버퍼 객체(510-N)가 로컬인지 원격인지 여부를 결정한다. 호스트 프로세서는 PCIe를 통해 메모리(140-2)로부터 데이터를 조회하고, 버퍼 객체(510-N) 내의 원격 플래그가 설정되지 않기 때문에 PCIe를 통해 GPU515)에 데이터를 제공할 수 있다.
하나 이상의 다른 실시예들에서, 호스트 프로세서는 상이한 하드웨어 가속기에 액세스함으로써 메모리(140-2)로부터 데이터의 조회를 개시할 수 있다. 예를 들어, 호스트 프로세서는 메모리(140-2)로부터 데이터를 조회하기 위해 PCIe를 통해 하드웨어 가속기(135-1)와의 통신을 개시할 수 있다. 그 경우, 하드웨어 가속기(135-1)는 메모리(140-2)로부터 데이터를 조회하기 위해 링크 회로들을 사용하여 하드웨어 가속기(135-2)와 직접 통신할 수 있다. 이어서, 하드웨어 가속기(135-1)는 데이터를 다시 호스트 프로세서에 제공할 수 있고, 호스트 프로세서는 이어서 데이터를 PCIe를 통해 GPU(515)에 제공한다.
다른 예에서, I/O 디바이스(525), 예를 들어, 카메라는 하드웨어 가속기(135-1)에 데이터를 기록할 수 있다. 그 경우, 호스트 프로세서는 핸들(505-1)을 I/O 디바이스(525)에 제공할 수 있다. 핸들(505-1)은 하드웨어 가속기(135-1)에 대응하는 버퍼 객체(510-1)를 포인팅할 수 있다. 기록 동작을 위해 핸들(505-1)을 사용하는 I/O 디바이스(525)에 의해, 호스트 프로세서는 핸들(505-1)에 대응하는 버퍼 객체, 예를 들어, 버퍼 객체(510-1)에 대한 동작을 개시한다. 호스트 프로세서는 버퍼 객체(510-1)가 로컬인지 원격인지 여부를 결정한다. 호스트 프로세서는 I/O 디바이스(525)로부터 데이터를 수신하고, 버퍼 객체(510-1) 내의 원격 플래그가 설정되지 않기 때문에 메모리(140-1) 내에서 기록을 위해 및/또는 추가 프로세싱을 위해 이러한 데이터를 PCIe를 통해 하드웨어 가속기(135-1)에 제공할 수 있다.
하나 이상의 실시예들에서, 드라이버는 설명된 바와 같이 가속기 링크들을 사용할 수 있는 하드웨어 가속기들 사이의 데이터 전송들의 경우에만 버퍼 객체 내의 원격 플래그를 설정할 수 있다. 도 5는, 다른 타입들의 디바이스가 하드웨어 가속기들과 함께 사용될 수 있는 동안, 이러한 다른 디바이스들과 하드웨어 가속기들 사이의 데이터 전송들이 버스를 통해 발생하고 호스트 프로세서를 수반하는 것을 예시한다.
도 6은 IC에 대한 예시적인 아키텍처(600)를 예시한다. 일 양상에서, 아키텍처(600)는 프로그래밍가능 IC 내에서 구현될 수 있다. 예를 들어, 아키텍처(600)는 필드 프로그래밍가능 게이트 어레이(FPGA)를 구현하기 위해 사용될 수 있다. 아키텍처(600)는 또한 시스템-온-칩(SOC) 유형의 IC를 표현할 수 있다. SOC는, 프로그램 코드 및 하나 이상의 다른 회로들을 실행하는 프로세서를 포함하는 IC이다. 다른 회로들은 하드와이어링된 회로, 프로그래밍가능 회로 및/또는 이들의 조합으로서 구현될 수 있다. 회로들은 서로 및/또는 프로세서와 협력적으로 동작할 수 있다.
도시된 바와 같이, 아키텍처(600)는 몇몇 상이한 유형들의 프로그래밍가능 회로들, 예를 들어, 로직, 블록들을 포함한다. 예를 들어, 아키텍처(600)는, 멀티-기가비트 트랜시버(MGT)들(601), 구성가능한 로직 블록(CLB)들(602), 랜덤 액세스 메모리 블록(BRAM)들(603), 입력/출력 블록(IOB)들(604), 구성 및 클로킹 로직(CONFIG/CLOCKS)(605), 디지털 신호 프로세싱 블록(DSP)들(606), 특수화된 I/O 블록들(607)(예를 들어, 구성 포트들 및 클록 포트들), 및 다른 프로그래밍가능 로직(608), 예를 들어, 디지털 클록 관리자들, 아날로그-디지털 변환기들, 시스템 모니터링 로직 등을 포함하는 다수의 상이한 프로그래밍가능 타일들을 포함할 수 있다.
일부 IC들에서, 각각의 프로그래밍가능 타일은 각각의 인접 타일에서 대응하는 INT(611)로의 및 그로부터의 표준화된 접속들을 갖는 프로그래밍가능 상호접속 요소(INT)(611)를 포함한다. 따라서, 함께 취해진 INT들(611)은 예시된 IC에 대한 프로그래밍가능 상호접속 구조를 구현한다. 각각의 INT(611)는 또한, 도 6의 최상부에 포함된 예들에 의해 도시된 바와 같이, 동일한 타일 내에 프로그래밍가능 로직 요소로의 및 그로부터의 접속들을 포함한다.
예를 들어, CLB(602)는 사용자 로직 플러스 INT(611)를 구현하도록 프로그래밍될 수 있는 구성가능 로직 요소(CLE)(612)를 포함할 수 있다. BRAM(603)은 하나 이상의 INT들(611)에 추가로 BRAM 로직 요소(BRL)(613)를 포함할 수 있다. 통상적으로, 타일에 포함된 INT들(611)의 수는 타일의 높이에 의존한다. 도시된 바와 같이, BRAM 타일은 5개의 CLB들과 동일한 높이를 갖지만, 다른 수들(예를 들어, 4개)이 또한 사용될 수 있다. DSP 타일(606)은 적절한 수의 INT들(611)에 추가로 DSP 로직 요소(DSPL)(614)를 포함할 수 있다. IOB(604)는 예를 들어, INT(611)의 하나의 인스턴스에 추가로 I/O 로직 요소(IOL)(615)의 2개의 인스턴스들을 포함할 수 있다. IOL(615)에 접속된 실제 I/O 패드들은 IOL(615)의 영역으로 한정되지 않을 수 있다.
도 6에 도시된 예에서, 예를 들어, 영역들(605, 607 및 608)로 형성된 다이(die)의 중심 근처의 열 영역은 구성, 클록 및 다른 제어 로직을 위해 사용될 수 있다. 이 열로부터 연장되는 수평 영역들(609)은 프로그래밍가능 IC의 폭을 가로질러 클록들 및 구성 신호들을 분산시키기 위해 사용될 수 있다.
도 6에 예시된 아키텍처를 활용하는 일부 IC들은 IC의 큰 부분을 구성하는 정규의 열 구조를 교란하는 추가적인 로직 블록들을 포함한다. 추가적인 로직 블록들은 프로그래밍가능 블록들 및/또는 전용 회로일 수 있다. 예를 들어, PROC(610)으로 도시된 프로세서 블록은 CLB들 및 BRAM들의 몇몇 열들에 걸쳐 있다.
일 양상에서, PROC(610)는, IC의 프로세서 회로를 구현하는 다이의 일부로서 제조되는 전용 회로로서, 예를 들어 하드와이어링된 프로세서로서 구현될 수 있다. PROC(610)는, 복잡도에서, 개별적인 프로세서, 예를 들어, 프로세서 코드를 실행할 수 있는 단일 코어로부터 하나 이상의 코어들, 모듈들, 코-프로세서들, 인터페이스들 등을 갖는 전체 프로세서 시스템까지 범위의 다양한 상이한 프로세서 유형들 및/또는 시스템들 중 임의의 것을 표현할 수 있다.
다른 양상에서, PROC(610)는 아키텍처(600)로부터 생략되고, 설명된 다른 다양한 프로그래밍가능 블록들 중 하나 이상으로 대체될 수 있다. 추가로, 이러한 블록들은, PROC(610)의 경우에서와 같이 프로그램 코드를 실행할 수 있는 프로세서를 형성하기 위해 프로그래밍가능 회로의 다양한 블록들이 사용될 수 있다는 점에서 "소프트 프로세서"를 형성하도록 활용될 수 있다.
어구 "프로그래밍가능 회로"는 IC 내의 프로그래밍가능 회로 요소들, 예를 들어, 본 명세서에 설명된 다양한 프로그래밍가능 또는 구성가능 회로 블록들 또는 타일들 뿐만 아니라, IC에 로딩되는 구성 데이터에 따라 다양한 회로 블록들, 타일들 및/또는 요소들을 선택적으로 커플링하는 상호접속 회로를 지칭한다. 예를 들어, CLB들(602) 및 BRAM들(603)과 같은 PROC(610) 외부에 있는 도 6에 도시된 회로 블록들은 IC의 프로그래밍가능 회로로 고려된다.
일반적으로, 프로그래밍가능 회로의 기능은 구성 데이터가 IC에 로딩될 때까지 확립되지 않는다. 구성 비트들의 세트는 FPGA와 같은 IC의 프로그래밍가능 회로를 프로그래밍하도록 사용될 수 있다. 구성 비트(들)는 통상적으로 "구성 비트스트림"으로 지칭된다. 일반적으로, 프로그래밍가능 회로는 구성 비트스트림을 IC에 먼저 로딩함이 없이 동작적이거나 기능적이지 않다. 구성 비트스트림은 프로그래밍가능 회로 내에 특정 회로 설계를 효과적으로 구현한다. 회로 설계는 예를 들어, 프로그래밍가능 회로 블록들의 기능적 양상들 및 다양한 프로그래밍가능 회로 블록들 사이의 물리적 접속을 특정한다.
"하드와이어링된" 또는 "강화된", 즉, 프로그래밍가능한 회로는 IC의 일부로서 제조된다. 프로그래밍가능 회로와는 달리, 하드와이어링된 회로 또는 회로 블록들은 구성 비트스트림의 로딩을 통해 IC의 제조 이후 구현되지 않는다. 하드와이어링된 회로는 일반적으로 예를 들어, 구성 비트스트림들을 IC, 예를 들어, PROC(610)에 먼저 로딩함이 없이, 기능적인 전용 회로 블록들 및 상호접속부들을 갖는 것으로 고려된다.
일부 경우들에서, 하드와이어링된 회로는 IC 내의 하나 이상의 메모리 요소들에 저장된 레지스터 세팅들 또는 값들에 따라 설정 또는 선택될 수 있는 하나 이상의 동작 모드들을 가질 수 있다. 동작 모드들은 예를 들어, 구성 비트스트림들의 IC로의 로딩을 통해 설정될 수 있다. 이러한 능력에도 불구하고, 하드와이어링된 회로는, 하드와이어링된 회로가 동작가능하고 IC의 일부로서 제조될 때 특정 기능을 갖기 때문에 프로그래밍가능 회로로 고려되지 않는다.
SOC의 경우, 구성 비트스트림은 프로그래밍가능 회로 내에서 구현될 회로 및 PROC(610) 또는 소프트 프로세서에 의해 실행될 프로그램 코드를 특정할 수 있다. 일부 경우들에서, 아키텍처(600)는 적절한 구성 메모리 및/또는 프로세서 메모리에 구성 비트스트림을 로딩하는 전용 구성 프로세서를 포함한다. 전용 구성 프로세서는 사용자 특정된 프로그램 코드를 실행하지 않는다. 다른 경우들에서, 아키텍처(600)는 PROC(610)를 활용하여 구성 비트스트림을 수신하고, 구성 비트스트림을 적절한 구성 메모리에 로딩하고 그리고/또는 실행을 위한 프로그램 코드를 추출할 수 있다.
도 6은 프로그래밍가능 회로, 예를 들어 프로그래밍가능 패브릭을 포함하는 IC를 구현하기 위해 사용될 수 있는 예시적인 아키텍처를 예시하도록 의도된다. 예를 들어, 열의 로직 블록들의 수, 열들의 상대적 폭, 열들의 수 및 순서, 열들에 포함된 로직 블록들의 유형들, 로직 블록들의 상대적 크기들, 및 도 6의 최상부에 포함된 상호접속부/로직 구현들은 순전히 예시적이다. 실제 IC에서, 예를 들어, 사용자 회로 설계의 효율적인 구현을 용이하게 하기 위해, CLB들이 나타날 때마다 하나 초과의 인접한 CLB 열들이 통상적으로 포함된다. 그러나, 인접한 CLB 열들의 수는 IC의 전체 크기에 따라 상이할 수 있다. 추가로, IC 내에서 PROC(610)과 같은 블록들의 크기 및/또는 위치설정은 단지 예시를 위한 것이고 제한으로 의도되지 않는다.
아키텍처(600)는 본 명세서에 설명된 바와 같은 하드웨어 가속기를 구현하기 위해 사용될 수 있다. 특정 실시예들에서, 엔드포인트, 링크 회로 및 메모리 제어기 중 하나 이상 또는 각각은 하드와이어링된 회로 블록들로서 구현될 수 있다. 특정 실시예들에서, 엔드포인트, 링크 회로 및 메모리 제어기 중 하나 이상 또는 각각은 프로그래밍가능 회로를 사용하여 구현될 수 있다. 또 다른 실시예들에서, 언급된 회로 블록들 중 하나 이상은 하드와이어링된 회로 블록들로서 구현될 수 있는 한편, 다른 것들은 프로그래밍가능 회로를 사용하여 구현된다.
본 개시 내에서 설명된 실시예들은, 예를 들어, 데이터베이스 가속, 다수의 비디오 스트림의 프로세싱, 실시간 네트워크 트래픽 모니터링, 머신 학습, 또는 다수의 하드웨어 가속기들을 수반할 수 있는 임의의 다른 애플리케이션과 같이 다양한 애플리케이션들 중 임의의 것에서 사용될 수 있다.
설명을 목적으로, 본 명세서에 개시된 다양한 본 발명의 개념들의 완전한 이해를 제공하기 위해 특정 명명법이 기술된다. 그러나, 본 명세서에 사용된 용어는, 단지 본 발명의 배열들의 특정 양상들을 설명하기 위한 것이고 제한적으로 의도되지 않는다.
본 명세서에서 정의되는 바와 같이, 단수형 형태들은, 문맥상 명확하게 달리 표시되지 않으면, 복수형 형태들을 또한 포함하도록 의도된다.
본 명세서에 정의된 바와 같이, "대략적으로"라는 용어는 거의 맞거나 정확하고, 값 또는 양이 비슷하지만 정확하지는 않음을 의미한다. 예를 들어, "대략적으로"라는 용어는, 언급된 특성, 파라미터 또는 값이 정확한 특성, 파라미터 또는 값의 미리결정된 양 내에 있음을 의미할 수 있다.
본 명세서에 정의된 바와 같이, "적어도 하나", "하나 이상" 및 "및/또는"이라는 용어들은 달리 명시적으로 언급하지 않는 한 동작에서 결합 및 분리 둘 모두인 개방형 표현들이다. 예를 들어, "A, B 및 C 중 적어도 하나", "A, B 또는 C 중 적어도 하나", "A, B 및 C 중 하나 이상", "A, B 또는 C 중 하나 이상", 및 "A, B 및/또는 C"는 A 단독, B 단독, C 단독, A와 B 함께, A와 C 함께, B와 C 함께, 또는 A, B 및 C 함께를 의미한다.
본 명세서에서 정의된 바와 같이, "자동으로"라는 용어는 사용자 개입이 없는 것을 의미한다. 본 명세서에서 정의된 바와 같이, "사용자"라는 용어는 인간을 의미한다.
본 명세서에 정의된 바와 같이, "컴퓨터 판독가능 저장 매체"라는 용어는 명령 실행 시스템, 장치 또는 디바이스에 의한 사용을 위해 또는 그와 관련하여 프로그램 코드를 포함 또는 저장하는 저장 매체를 의미한다. 본 명세서에 정의된 바와 같이, "컴퓨터 판독가능 저장 매체"는 그 자체로 일시적인 전파 신호가 아니다. 컴퓨터 판독가능 저장 매체는 전자 저장 디바이스, 자기 저장 디바이스, 광학 저장 디바이스, 전자기 저장 디바이스, 반도체 저장 디바이스, 또는 이들의 임의의 적절한 조합일 수 있지만 이에 제한되지 않는다. 본 명세서에 설명된 바와 같이, 다양한 형태들의 메모리는 컴퓨터 판독가능 저장 매체들의 예들이다. 컴퓨터 판독가능 저장 매체의 보다 구체적인 예들의 비포괄적 목록은, 휴대용 컴퓨터 디스켓, 하드 디스크, RAM, 판독 전용 메모리(ROM), 소거가능한 프로그래밍가능 판독 전용 메모리(EPROM 또는 플래시 메모리), 전기적으로 소거가능한 프로그래밍가능 판독 전용 메모리(EEPROM), 정적 랜덤 액세스 메모리(SRAM), 휴대용 콤팩트 디스크 판독 전용 메모리(CD-ROM), 디지털 다기능 디스크(DVD), 메모리 스틱, 플로피 디스크 등을 포함할 수 있다.
본 명세서에서 사용되는 바와 같이, "경우"라는 용어는, 문맥에 따라 "할 때" 또는 "시(upon)" 또는 "응답으로" 또는 "응답하여"를 의미한다. 따라서, 구절 "~라고 결정되는 경우" 또는 "[진술된 상태 또는 이벤트가] 검출되는 경우"는 문맥에 따라 "결정 시" 또는 "결정하는 것에 응답하여" 또는 "[진술된 상태 또는 이벤트] 검출 시" 또는 "[진술된 상태 또는 이벤트를] 검출하는 것에 대한 응답으로" 또는 "[진술된 상태 또는 이벤트를] 검출하는 것에 응답하여"를 의미하는 것으로 해석될 수 있다.
본 명세서에 정의된 바와 같이, 앞서 설명된 바와 같이 "응답하여"라는 용어 및 유사한 언어, 예를 들어, "경우", "할 때" 또는 "시"는 동작 또는 이벤트에 용이하게 응답 또는 반응하는 것을 의미한다. 응답 또는 반응은 자동으로 수행된다. 따라서, 제2 동작이 제1 동작에 "응답하여" 수행되면, 제1 동작의 발생과 제2 동작의 발생 사이에 인과 관계가 존재한다. "응답하여"라는 용어는 인과 관계를 표시한다.
본 명세서에 정의되는 바와 같이, 용어들 "일 실시예", "실시예", "하나 이상의 실시예들", "특정 실시예들", 또는 유사한 언어는 실시예와 관련하여 설명된 특정 특징, 구조 또는 특성이 본 개시 내에 설명된 적어도 하나의 실시예에 포함되는 것을 의미한다. 따라서, 본 개시 전반에 걸쳐 어구들 "일 실시예에서", "실시예에서", "하나 이상의 실시예들에서", "특정 실시예들에서" 및 유사한 언어의 출현들은 모두 동일한 실시예를 지칭할 수 있지만, 반드시 그런 것은 아니다. 용어들 "실시예" 및 "배열"은 본 개시 내에서 상호교환적으로 사용된다.
본 명세서에서 정의된 바와 같이, "프로세서"라는 용어는 적어도 하나의 하드웨어 회로를 의미한다. 하드웨어 회로는 프로그램 코드에 포함된 명령들을 수행하도록 구성될 수 있다. 하드웨어 회로는 집적 회로일 수 있다. 프로세서의 예들은 중앙 처리 장치(CPU), 어레이 프로세서, 벡터 프로세서, 디지털 신호 프로세서(DSP), FPGA, 프로그래밍가능 로직 어레이(PLA), ASIC, 프로그래밍가능한 로직 회로 및 제어기를 포함하지만, 이에 제한되지 않는다.
본 명세서에 정의된 바와 같이, "출력"이라는 용어는 물리적 메모리 요소들, 예를 들어 디바이스에 저장하는 것, 디스플레이 또는 다른 주변 출력 디바이스에 기록하는 것, 다른 시스템에 전송 또는 송신하는 것, 내보내는 것 등을 의미한다.
본 명세서에 정의된 바와 같이, "실시간"이라는 용어는 사용자 또는 시스템이 특정 프로세스 또는 결정이 이루어지도록 충분히 즉각적으로 감지하거나 프로세서가 일부 외부 프로세스를 따라갈 수 있도록 하는 프로세싱 응답 레벨을 의미한다.
본 명세서에서 정의된 바와 같이, 용어 "실질적으로"는 언급된 특성, 파라미터 또는 값이 정확하게 달성될 필요는 없지만, 예를 들어 허용오차들, 측정 에러, 측정 정확도 제한들 및 당업자들에게 공지된 다른 팩터들을 포함하는 편차들 또는 변량들이, 특성이 제공되도록 의도된 효과를 배제하지 않는 양만큼 발생할 수 있음을 의미한다.
용어들 제1, 제2 등은 다양한 요소들을 설명하기 위해 본 명세서에서 사용될 수 있다. 이러한 요소들은 이러한 용어들로 제한되지 않아야 하는데, 이는, 이러한 용어들이 달리 명시되지 않는 한 또는 문맥상 달리 명시적으로 표시하지 않는 한 하나의 요소를 다른 요소로부터 구별하기 위해서만 사용되기 때문이다.
컴퓨터 프로그램 제품은 프로세서로 하여금 본 명세서에 설명된 본 발명의 배열들의 양상들을 수행하게 하기 위한 컴퓨터 판독가능 프로그램 명령들을 갖는 컴퓨터 판독가능 저장 매체(또는 매체들)를 포함할 수 있다. 본 개시 내에서, 용어 "프로그램 코드"는 용어 "컴퓨터 판독가능 프로그램 명령들"과 상호교환적으로 사용된다. 본 명세서에 설명된 컴퓨터 판독가능 프로그램 명령들은, 컴퓨터 판독가능 저장 매체로부터 각각의 컴퓨팅/프로세싱 디바이스들에, 또는 네트워크, 예를 들어, 인터넷, LAN, WAN 및/또는 무선 네트워크를 통해 외부 컴퓨터 또는 외부 저장 디바이스에 다운로드될 수 있다. 네트워크는 구리 송신 케이블들, 광학 송신 섬유들, 무선 송신, 라우터들, 방화벽들, 스위치들, 게이트웨이 컴퓨터들 및/또는 에지 서버들을 포함하는 에지 디바이스들을 포함할 수 있다. 각각의 컴퓨팅/프로세싱 디바이스의 네트워크 어댑터 카드 또는 네트워크 인터페이스는 네트워크로부터 컴퓨터 판독가능 프로그램 명령들을 수신하고, 각각의 컴퓨팅/프로세싱 디바이스 내의 컴퓨터 판독가능 저장 매체에 저장하기 위해 컴퓨터 판독가능 프로그램 명령들을 포워딩한다.
본 명세서에 설명된 본 발명의 배열들에 대한 동작들을 수행하기 위한 컴퓨터 판독가능 프로그램 명령들은 어셈블러 명령들, ISA(instruction-set-architecture) 명령들, 머신 명령들, 머신 종속 명령들, 마이크로코드, 펌웨어 명령들, 또는 객체 지향형 프로그래밍 언어 및/또는 절차적 프로그래밍 언어들을 포함하는 하나 이상의 프로그래밍 언어들의 임의의 조합으로 기록된 소스 코드 또는 객체 코드일 수 있다. 컴퓨터 판독가능 프로그램 명령들은 상태 세팅 데이터를 포함할 수 있다. 컴퓨터 판독가능 프로그램 명령들은 전적으로 사용자의 컴퓨터 상에서, 부분적으로 사용자의 컴퓨터 상에서, 독립형 소프트웨어 패키지로서, 부분적으로 사용자의 컴퓨터 상에서 그리고 부분적으로 원격 컴퓨터 상에서, 또는 전적으로 원격 컴퓨터 또는 서버 상에서 실행될 수 있다. 후자의 시나리오에서, 원격 컴퓨터는 LAN 또는 WAN을 포함하는 임의의 유형의 네트워크를 통해 사용자의 컴퓨터에 접속될 수 있거나, (예를 들어, 인터넷 서비스 제공자를 사용한 인터넷을 통해) 외부 컴퓨터에 대해 접속이 이루어질 수 있다. 일부 경우들에서, 예를 들어, 프로그래밍가능 로직 회로, FPGA 또는 PLA를 포함하는 전자 회로는, 본 명세서에 설명된 본 발명의 배열의 양상들을 수행하기 위해, 전자 회로를 개인화하는 컴퓨터 판독가능 프로그램 명령들의 상태 정보를 활용함으로써 컴퓨터 판독가능 프로그램 명령들을 실행할 수 있다.
본 발명의 배열들의 특정 양상들은 방법들, 장치(시스템들) 및 컴퓨터 프로그램 제품들의 흐름도들 및/또는 블록도들을 참조하여 본 명세서에 설명된다. 흐름도들 및/또는 블록도들의 각각의 블록, 및 흐름도들 및/또는 블록도들의 블록들의 조합들은 컴퓨터 판독가능 프로그램 명령들, 예를 들어, 프로그램 코드로 구현될 수 있음을 이해할 것이다.
이러한 컴퓨터 판독가능 프로그램 명령들은 범용 컴퓨터, 특수 목적 컴퓨터, 또는 다른 프로그래밍가능 데이터 프로세싱 장치의 프로세서에 제공되어 머신을 생성할 수 있어서, 컴퓨터 또는 다른 프로그래밍가능 데이터 프로세싱 장치의 프로세서를 통해 실행되는 명령들은 흐름도에 특정된 기능들/동작들 및/또는 블록도의 블록 또는 블록들을 구현하기 위한 수단을 생성한다. 이러한 컴퓨터 판독가능 프로그램 명령들은 또한 컴퓨터, 프로그래밍가능 데이터 프로세싱 장치 및/또는 다른 디바이스들이 특정 방식으로 기능하도록 지시할 수 있는 컴퓨터 판독가능 저장 매체에 저장될 수 있어서, 내부에 명령들이 저장된 컴퓨터 판독가능 저장 매체는 흐름도에 특정된 동작들 및/또는 블록도의 블록 또는 블록들의 양상들을 구현하는 명령들을 포함하는 제조 물품을 포함한다.
컴퓨터 판독가능 프로그램 명령들은 또한 컴퓨터, 다른 프로그래밍가능 데이터 프로세싱 장치 또는 다른 디바이스 상에 로딩되어 컴퓨터 구현 프로세스를 생성하기 위해 일련의 동작들이 컴퓨터, 다른 프로그래밍가능 장치 또는 다른 디바이스 상에서 수행되게 하여, 컴퓨터, 다른 프로그래밍가능 장치, 또는 다른 디바이스 상에서 실행되는 명령들은 흐름도에 특정된 기능들/동작들 및/또는 블록도의 블록 또는 블록들을 구현한다.
도면들의 흐름도 및 블록도들은 본 발명의 배열들의 다양한 양상들에 따른 시스템들, 방법들 및 컴퓨터 프로그램 제품들의 가능한 구현들의 아키텍처, 기능 및 동작을 예시한다. 이와 관련하여, 흐름도 또는 블록도들의 각각의 블록은 모듈, 세그먼트 또는 명령들의 일부를 표현할 수 있으며, 이는 특정된 동작들을 구현하기 위한 하나 이상의 실행가능 명령들을 포함한다.
일부 대안적인 구현들에서, 블록들에 언급된 동작들은 도면들에 언급된 순서와 다르게 발생할 수 있다. 예를 들어, 연속적으로 도시된 2개의 블록들은, 실질적으로 동시에 실행될 수 있거나 또는 블록들은 수반되는 기능에 따라 때때로 역순으로 실행될 수 있다. 다른 예들에서, 블록들은 일반적으로 증가하는 수치 순서로 수행될 수 있는 한편, 또 다른 예들에서, 하나 이상의 블록들은, 결과들이 저장되고 즉시 후속하지 않는 후속 또는 다른 블록들에 저장되고 활용되는 다양한 순서로 수행될 수 있다. 블록도들 및/또는 흐름도의 각각의 블록, 및 블록도들 및/또는 흐름도의 블록들의 조합들은, 특정 기능들 또는 동작들을 수행하거나 특수 목적 하드웨어 및 컴퓨터 명령들의 조합들을 수행하는 특수 목적 하드웨어 기반 시스템들에 의해 구현될 수 있음을 또한 유의할 것이다.
아래의 청구항들에서 찾을 수 있는 모든 수단 또는 단계 플러스 기능 요소들의 대응하는 구조들, 재료들, 동작들 및 균등물들은 1에서의 기능을 수행하기 위한 임의의 구조, 재료 또는 동작을 포함하도록 의도된다.
하나 이상의 실시예들에서, 시스템은, 통신 버스에 커플링된 호스트 프로세서, 통신 버스를 통해 호스트 프로세서에 통신가능하게 링크된 제1 하드웨어 가속기, 및 통신 버스를 통해 호스트 프로세서에 통신가능하게 링크된 제2 하드웨어 가속기를 포함할 수 있다. 제1 하드웨어 가속기 및 제2 하드웨어 가속기는 통신 버스와는 독립적인 가속기 링크를 통해 직접 커플링된다. 호스트 프로세서는 가속기 링크를 통해 직접적으로 제1 하드웨어 가속기와 제2 하드웨어 가속기 사이에서 데이터 전송을 개시하도록 구성된다.
일 양상에서, 호스트 프로세서는 통신 버스를 통해 제1 하드웨어 가속기 및 제2 하드웨어 가속기와 통신하도록 구성된다.
다른 양상에서, 데이터 전송은 제1 하드웨어 가속기가 가속기 링크를 통해 제2 하드웨어 가속기의 메모리에 액세스하는 것을 포함한다.
다른 양상에서, 호스트 프로세서는 타겟 어드레스를 포함하는 데이터를 제1 하드웨어 가속기에 전송함으로써 제2 하드웨어 가속기의 메모리에 액세스하도록 구성되고, 타겟 어드레스는 제2 하드웨어 가속기에 대응하도록 호스트 프로세서에 의해 전환되고, 제1 하드웨어 가속기는 타겟 어드레스에 기초하여 가속기 링크를 통해 제2 하드웨어 가속기의 메모리에 액세스하기 위한 트랜잭션을 개시한다.
다른 양상에서, 제2 하드웨어 가속기는, 가속기 링크를 통해 트랜잭션을 수신하는 것에 응답하여 제2 하드웨어 가속기에 대한 어드레스 범위의 상한만큼 데이터 전송을 위한 타겟 어드레스를 감분시키고, 감분된 타겟 어드레스가 로컬인지 여부를 결정하도록 구성된다.
다른 양상에서, 호스트 프로세서는 통신 버스에 커플링된 제2 하드웨어 가속기의 직접 메모리 액세스 회로의 상태에 기초하여 제1 하드웨어 가속기와 제2 하드웨어 가속기 사이에서 데이터 전송을 개시하도록 구성된다.
다른 양상에서, 호스트 프로세서는 링 토폴로지에서 제1 하드웨어 가속기 및 제2 하드웨어 가속기의 시퀀스를 자동으로 결정하도록 구성된다.
다른 양상에서, 호스트 프로세서는 원격 버퍼 플래그들을 사용하여 제1 하드웨어 가속기 및 제2 하드웨어 가속기에 대응하는 버퍼들을 추적하도록 구성된다.
하나 이상의 실시예들에서, 하드웨어 가속기는, 통신 버스를 통해 호스트 프로세서와 통신하도록 구성된 엔드포인트, 하드웨어 가속기에 로컬인 메모리에 커플링된 메모리 제어기, 및 엔드포인트 및 메모리 제어기에 커플링된 링크 회로를 포함할 수 있다. 링크 회로는 통신 버스에 또한 커플링된 타겟 하드웨어 가속기와 가속기 링크를 확립하도록 구성된다. 가속기 링크는 통신 버스와는 독립적인 타겟 하드웨어 가속기와 하드웨어 가속기 사이의 직접 접속이다.
일 양상에서, 링크 회로는 가속기 링크를 통해 타겟 하드웨어 가속기와 데이터 전송을 개시하도록 구성되고, 데이터 전송은 통신 버스를 통해 하드웨어 가속기에 의해 수신된 호스트 프로세서로부터의 명령에 응답하여 발생한다.
다른 양상에서, 링크 회로는, 데이터 스트림들을 메모리 맵핑된 트랜잭션들로 그리고 메모리 맵핑된 트랜잭션들을 데이터 스트림으로 변환하도록 각각 구성되는 제1 메모리-맵핑 대 스트림 맵퍼 회로 및 제2 메모리-맵핑 대 스트림 맵퍼 회로를 포함한다.
다른 양상에서, 각각의 메모리-맵핑 대 스트림 맵퍼 회로는 수신된 트랜잭션 내의 타겟 어드레스를 하드웨어 가속기의 어드레스 범위의 상한만큼 감분시키도록 구성된다.
다른 양상에서, 링크 회로는 스트림 데이터를 전송 및 수신하도록 구성된 제1 트랜시버 및 제1 트랜시버 및 제1 메모리-맵핑 대 스트림 맵퍼 회로에 커플링된 제1 재송신 엔진을 포함한다.
다른 양상에서, 링크 회로는 스트림 데이터를 전송 및 수신하도록 구성된 제2 트랜시버 및 제2 트랜시버 및 제2 메모리-맵핑 대 스트림 맵퍼 회로에 커플링된 제2 재송신 엔진을 더 포함한다.
하나 이상의 실시예들에서, 방법은, 제1 하드웨어 가속기 내에서, 통신 버스를 통해 호스트 프로세서로부터 전송된 데이터 전송에 대한 타겟 어드레스 및 명령을 수신하는 단계, 제1 하드웨어 가속기가 제1 하드웨어 가속기에 대응하는 어드레스 범위의 상한과 타겟 어드레스를 비교하는 단계, 및 비교하는 단계에 기초하여 타겟 어드레스가 어드레스 범위를 초과한다고 결정하는 것에 응답하여, 제1 하드웨어 가속기가, 제1 하드웨어 가속기 및 제2 하드웨어 가속기를 직접 커플링하는 가속기 링크를 사용하여 데이터 전송을 수행하기 위해 제2 하드웨어 가속기와 트랜잭션을 개시하는 단계를 포함할 수 있다.
일 양상에서, 가속기 링크는 통신 버스와는 독립적이다.
다른 양상에서, 트랜잭션을 개시하는 것은 메모리 맵핑된 트랜잭션을 개시하는 것 및 메모리 맵핑된 트랜잭션을 가속기 링크를 통해 전송될 데이터 스트림으로 변환하는 것을 포함한다.
다른 양상에서, 방법은 제2 하드웨어 가속기에서 트랜잭션을 수신하는 것에 응답하여, 제2 하드웨어 가속기가 제2 하드웨어 가속기의 어드레스 범위의 상한을 타겟 어드레스로부터 감분하고 감분 결과가 제2 하드웨어 가속기의 어드레스 범위 이내인지 여부를 결정하는 단계를 포함한다.
다른 양상에서, 제2 하드웨어 가속기는 트랜잭션을 데이터 스트림으로서 수신하고 데이터 스트림을 메모리 맵핑된 트랜잭션으로 변환한다.
다른 양상에서, 방법은 제2 하드웨어 가속기의 직접 메모리 액세스 회로의 상태를 결정하는 단계 및 제2 하드웨어 가속기의 직접 메모리 액세스 회로의 상태에 응답하여 데이터 전송을 개시하는 단계를 포함한다.
본 명세서에 제공된 본 발명의 배열들의 설명은 예시를 위한 것이고 포괄적이거나 개시된 형태 및 예들로 제한되도록 의도되지 않는다. 본 명세서에서 사용된 용어는, 본 발명의 배열들의 원리들, 시장에서 발견되는 기술들에 대한 실제 적용 또는 기술적 개선을 설명하고 그리고/또는 당업자들이 본 명세서에 개시된 본 발명의 배열들을 이해하게 할 수 있도록 선택되었다. 수정들 및 변형들은 설명된 본 발명의 배열들의 범위 및 사상으로부터 벗어남이 없이 당업자들에게 자명할 수 있다. 따라서, 이러한 특징들 및 구현들의 범위를 표시하는 것으로서 전술한 개시보다는 하기 청구항들을 참조해야 한다.

Claims (15)

  1. 시스템으로서,
    통신 버스에 커플링된 호스트 프로세서;
    상기 통신 버스를 통해 상기 호스트 프로세서에 통신가능하게 링크된 제1 하드웨어 가속기; 및
    상기 통신 버스를 통해 상기 호스트 프로세서에 통신가능하게 링크된 제2 하드웨어 가속기를 포함하고;
    상기 제1 하드웨어 가속기 및 상기 제2 하드웨어 가속기는 상기 통신 버스와는 독립적인 가속기 링크를 통해 직접 커플링되고;
    상기 호스트 프로세서는 상기 가속기 링크를 통해 직접적으로 상기 제1 하드웨어 가속기와 상기 제2 하드웨어 가속기 간 데이터 전송을 개시하도록 구성되는,
    시스템.
  2. 제1항에 있어서,
    상기 데이터 전송은 상기 제1 하드웨어 가속기가 상기 가속기 링크를 통해 상기 제2 하드웨어 가속기의 메모리에 액세스하는 것을 포함하는,
    시스템.
  3. 제2항에 있어서,
    상기 호스트 프로세서는 타겟 어드레스를 포함하는 데이터를 상기 제1 하드웨어 가속기에 전송함으로써 상기 제2 하드웨어 가속기의 상기 메모리에 액세스하도록 구성되고, 상기 타겟 어드레스는 상기 제2 하드웨어 가속기에 대응하도록 상기 호스트 프로세서에 의해 전환되고, 상기 제1 하드웨어 가속기는 상기 타겟 어드레스에 기초하여 상기 가속기 링크를 통해 상기 제2 하드웨어 가속기의 상기 메모리에 액세스하기 위한 트랜잭션을 개시하는,
    시스템.
  4. 제1항에 있어서,
    상기 제2 하드웨어 가속기는, 상기 가속기 링크를 통해 트랜잭션을 수신하는 것에 응답하여 상기 제2 하드웨어 가속기에 대한 어드레스 범위의 상한만큼 상기 데이터 전송을 위한 타겟 어드레스를 감분시키고, 상기 감분된 타겟 어드레스가 로컬인지 여부를 결정하도록 구성되는,
    시스템.
  5. 제1항에 있어서,
    상기 호스트 프로세서는 상기 통신 버스에 커플링된 상기 제2 하드웨어 가속기의 직접 메모리 액세스 회로의 상태에 기초하여 상기 제1 하드웨어 가속기와 상기 제2 하드웨어 가속기 간 상기 데이터 전송을 개시하도록 구성되는,
    시스템.
  6. 제1항에 있어서,
    상기 호스트 프로세서는 링 토폴로지(ring topology)에서 상기 제1 하드웨어 가속기 및 상기 제2 하드웨어 가속기의 시퀀스를 자동으로 결정하도록 구성되는,
    시스템.
  7. 제1항에 있어서,
    상기 호스트 프로세서는 원격 버퍼 플래그들을 사용하여 상기 제1 하드웨어 가속기 및 상기 제2 하드웨어 가속기에 대응하는 버퍼들을 추적하도록 구성되는,
    시스템.
  8. 집적 회로로서,
    통신 버스를 통해 호스트 프로세서와 통신하도록 구성된 엔드포인트;
    상기 집적 회로에 로컬인 메모리에 커플링된 메모리 제어기; 및
    상기 엔드포인트 및 상기 메모리 제어기에 커플링된 링크 회로를 포함하고, 상기 링크 회로는 상기 통신 버스에 또한 커플링된 타겟 하드웨어 가속기와 가속기 링크를 확립하도록 구성되고, 상기 가속기 링크는 상기 통신 버스와는 독립적인 상기 타겟 하드웨어 가속기와 상기 집적 회로 사이의 직접 접속인,
    집적 회로.
  9. 제8항에 있어서,
    상기 링크 회로는 상기 가속기 링크를 통해 상기 타겟 하드웨어 가속기와 데이터 전송을 개시하도록 구성되고, 상기 데이터 전송은 상기 통신 버스를 통해 상기 집적 회로에 의해 수신된 상기 호스트 프로세서로부터의 명령에 응답하여 발생하는,
    집적 회로.
  10. 제8항에 있어서,
    상기 타겟 하드웨어 가속기는 상기 집적 회로로부터 수신된 트랜잭션 내의 타겟 어드레스를 상기 집적 회로의 어드레스 범위의 상한만큼 감분시키도록 구성되는,
    집적 회로.
  11. 방법으로서,
    제1 하드웨어 가속기 내에서, 통신 버스를 통해 호스트 프로세서로부터 전송된 데이터 전송에 대한 타겟 어드레스 및 명령을 수신하는 단계;
    상기 제1 하드웨어 가속기가 상기 제1 하드웨어 가속기에 대응하는 어드레스 범위의 상한과 상기 타겟 어드레스를 비교하는 단계; 및
    상기 비교하는 단계에 기초하여 상기 타겟 어드레스가 상기 어드레스 범위를 초과한다고 결정하는 것에 응답하여, 상기 제1 하드웨어 가속기가, 상기 제1 하드웨어 가속기 및 제2 하드웨어 가속기를 직접 커플링하는 가속기 링크를 사용하여 데이터 전송을 수행하기 위해 상기 제2 하드웨어 가속기와 트랜잭션을 개시하는 단계를 포함하는,
    방법.
  12. 제11항에 있어서,
    상기 가속기 링크는 상기 통신 버스와는 독립적인,
    방법.
  13. 제11항에 있어서,
    상기 제2 하드웨어 가속기에서 상기 트랜잭션을 수신하는 것에 응답하여, 상기 제2 하드웨어 가속기가 상기 제2 하드웨어 가속기의 어드레스 범위의 상한을 상기 타겟 어드레스로부터 감분하고 상기 감분 결과가 상기 제2 하드웨어 가속기의 상기 어드레스 범위 이내인지 여부를 결정하는 단계를 더 포함하는,
    방법.
  14. 제11항에 있어서,
    상기 제2 하드웨어 가속기의 직접 메모리 액세스 회로의 상태를 결정하는 단계; 및
    상기 제2 하드웨어 가속기의 상기 직접 메모리 액세스 회로의 상태에 응답하여 상기 데이터 전송을 개시하는 단계를 더 포함하는,
    방법.
  15. 제11항에 있어서,
    상기 데이터 전송은 상기 제1 하드웨어 가속기가 상기 가속기 링크를 통해 상기 제2 하드웨어 가속기의 메모리에 액세스하는 것을 포함하는,
    방법.
KR1020217002267A 2018-07-26 2019-07-25 전용 저 레이턴시 링크를 사용한 다수의 하드웨어 가속기에 대한 통합된 어드레스 공간 KR20210033996A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/046,602 2018-07-26
US16/046,602 US10802995B2 (en) 2018-07-26 2018-07-26 Unified address space for multiple hardware accelerators using dedicated low latency links
PCT/US2019/043521 WO2020023797A1 (en) 2018-07-26 2019-07-25 Unified address space for multiple hardware accelerators using dedicated low latency links

Publications (1)

Publication Number Publication Date
KR20210033996A true KR20210033996A (ko) 2021-03-29

Family

ID=67551717

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020217002267A KR20210033996A (ko) 2018-07-26 2019-07-25 전용 저 레이턴시 링크를 사용한 다수의 하드웨어 가속기에 대한 통합된 어드레스 공간

Country Status (6)

Country Link
US (1) US10802995B2 (ko)
EP (1) EP3827356A1 (ko)
JP (1) JP2021530813A (ko)
KR (1) KR20210033996A (ko)
CN (1) CN112543925A (ko)
WO (1) WO2020023797A1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2020062305A1 (zh) * 2018-09-30 2020-04-02 华为技术有限公司 运算加速器、交换器、任务调度方法及处理系统
US10430355B1 (en) * 2018-10-30 2019-10-01 International Business Machines Corporation Mixing restartable and non-restartable requests with performance enhancements
US10922068B1 (en) * 2018-11-09 2021-02-16 Xilinx, Inc. Updating firmware for programmable integrated circuits in computing environments
US11615295B2 (en) * 2019-11-15 2023-03-28 Baidu Usa Llc Distributed AI training topology based on flexible cable connection
TWI811620B (zh) * 2020-03-24 2023-08-11 威盛電子股份有限公司 運算裝置與資料處理方法
US11941433B2 (en) 2020-03-24 2024-03-26 Via Technologies Inc. Computing apparatus and data processing method for offloading data processing of data processing task from at least one general purpose processor
CN111949590B (zh) * 2020-08-11 2022-05-06 国微集团(深圳)有限公司 一种可跨fpga平台的高速通讯方法
CN112463714B (zh) * 2020-11-30 2022-12-16 成都海光集成电路设计有限公司 远程直接内存访问方法、异构计算系统及电子设备
KR20220124551A (ko) * 2021-03-03 2022-09-14 삼성전자주식회사 이종 하드웨어 타입의 가속기들을 포함한 전자 장치
CN114363626B (zh) * 2022-01-04 2024-06-04 上海航天电子通讯设备研究所 一种星载超高速图像压缩系统
US11947469B2 (en) * 2022-02-18 2024-04-02 Xilinx, Inc. Flexible queue provisioning for partitioned acceleration device
CN115225694B (zh) * 2022-06-13 2023-12-12 中科驭数(北京)科技有限公司 数据流传输方法、装置、设备和介质
US12001352B1 (en) * 2022-09-30 2024-06-04 Amazon Technologies, Inc. Transaction ordering based on target address

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH03156558A (ja) * 1989-11-14 1991-07-04 Nec Home Electron Ltd ホストcpuとコプロセッサとの間の通信方法
US5940086A (en) 1997-01-10 1999-08-17 Hewlett Packard Company System and method for dynamically allocating data among geometry accelerators in a computer graphics system
JP4298006B2 (ja) * 1997-04-30 2009-07-15 キヤノン株式会社 画像プロセッサ及びその画像処理方法
US7430652B2 (en) * 2003-03-28 2008-09-30 Tarari, Inc. Devices for performing multiple independent hardware acceleration operations and methods for performing same
CN101095123A (zh) * 2003-10-10 2007-12-26 诺基亚公司 一种片上系统(SoC)的微控制体系结构
US20050276413A1 (en) * 2004-06-14 2005-12-15 Raja Neogi Method and apparatus to manage heterogeneous cryptographic operations
US7561163B1 (en) * 2005-12-16 2009-07-14 Nvidia Corporation Detecting connection topology in a multi-processor graphics system
US8122229B2 (en) * 2007-09-12 2012-02-21 Convey Computer Dispatch mechanism for dispatching instructions from a host processor to a co-processor
US8345052B1 (en) * 2007-11-08 2013-01-01 Nvidia Corporation Method and system for using a GPU frame buffer in a multi-GPU system as cache memory
US9170864B2 (en) * 2009-01-29 2015-10-27 International Business Machines Corporation Data processing in a hybrid computing environment
US9183145B2 (en) 2009-04-27 2015-11-10 Intel Corporation Data caching in a network communications processor architecture
US8803897B2 (en) * 2009-09-03 2014-08-12 Advanced Micro Devices, Inc. Internal, processing-unit memory for general-purpose use
US9785444B2 (en) * 2013-08-16 2017-10-10 Analog Devices Global Hardware accelerator configuration by a translation of configuration data
EP3087472B1 (en) 2013-12-27 2019-05-08 Intel Corporation Scalable input/output system and techniques
CN105940388A (zh) * 2014-02-20 2016-09-14 英特尔公司 用于图形处理单元的工作负荷批量提交机制
US10489178B2 (en) * 2015-04-28 2019-11-26 Altera Corporation Network functions virtualization platforms with function chaining capabilities
US10282330B2 (en) * 2016-09-29 2019-05-07 Amazon Technologies, Inc. Configurable logic platform with multiple reconfigurable regions
US20180115496A1 (en) * 2016-10-21 2018-04-26 Advanced Micro Devices, Inc. Mechanisms to improve data locality for distributed gpus
US11372787B2 (en) * 2017-12-09 2022-06-28 Intel Corporation Unified address space for multiple links
US20190303159A1 (en) * 2018-03-29 2019-10-03 Intel Corporation Instruction set architecture to facilitate energy-efficient computing for exascale architectures

Also Published As

Publication number Publication date
WO2020023797A1 (en) 2020-01-30
US10802995B2 (en) 2020-10-13
CN112543925A (zh) 2021-03-23
EP3827356A1 (en) 2021-06-02
US20200081850A1 (en) 2020-03-12
JP2021530813A (ja) 2021-11-11

Similar Documents

Publication Publication Date Title
KR20210033996A (ko) 전용 저 레이턴시 링크를 사용한 다수의 하드웨어 가속기에 대한 통합된 어드레스 공간
US11194753B2 (en) Platform interface layer and protocol for accelerators
KR100555394B1 (ko) Ngio/infiniband 어플리케이션용 리모트 키검증을 위한 방법 및 메커니즘
KR100666515B1 (ko) 저장 및 포워드 스위치 장치, 시스템 및 방법
CN101425966B (zh) 片上网络以及使用片上网络进行数据处理的方法
US11372787B2 (en) Unified address space for multiple links
KR102007368B1 (ko) Pci 익스프레스 스위치 및 이를 이용한 컴퓨터 시스템
US11403023B2 (en) Method of organizing a programmable atomic unit instruction memory
US11714776B2 (en) Enabling a multi-chip daisy chain topology using peripheral component interconnect express (PCIe)
US11797311B2 (en) Asynchronous pipeline merging using long vector arbitration
US9753883B2 (en) Network interface device that maps host bus writes of configuration information for virtual NIDs into a small transactional memory
CN118043796A (zh) 存储器计算系统中的基于片块的结果缓冲
US11537543B2 (en) Technique for handling protocol conversion
KR20210092222A (ko) 버스 상의 메모리 요청 체이닝
JP2009282917A (ja) サーバ間通信機構及びコンピュータシステム
US7039750B1 (en) On-chip switch fabric
CN117435549A (zh) 用于硬件组件之间的通信的方法和系统
US11698791B2 (en) On-demand programmable atomic kernel loading
CN114915499B (zh) 数据传输方法、相关装置、系统及计算机可读存储介质
US20080126472A1 (en) Computer communication
KR20050080704A (ko) 프로세서간 데이터 전송 장치 및 방법
CN117280332A (zh) 通过具有多个片上系统的结构避免死锁
US20170357594A1 (en) Transactional memory that is programmable to output an alert if a predetermined memory write occurs
US20220121483A1 (en) Thread execution control in a barrel processor
JP2007265108A (ja) バスブリッジ

Legal Events

Date Code Title Description
A201 Request for examination