KR20210023904A - 스트리밍 엔진 - Google Patents
스트리밍 엔진 Download PDFInfo
- Publication number
- KR20210023904A KR20210023904A KR1020207037780A KR20207037780A KR20210023904A KR 20210023904 A KR20210023904 A KR 20210023904A KR 1020207037780 A KR1020207037780 A KR 1020207037780A KR 20207037780 A KR20207037780 A KR 20207037780A KR 20210023904 A KR20210023904 A KR 20210023904A
- Authority
- KR
- South Korea
- Prior art keywords
- gateway
- data
- accelerator
- synchronization
- engine
- Prior art date
Links
- 230000015654 memory Effects 0.000 claims abstract description 257
- 238000003860 storage Methods 0.000 claims abstract description 114
- 238000012546 transfer Methods 0.000 claims abstract description 59
- 230000004888 barrier function Effects 0.000 claims description 66
- 238000000034 method Methods 0.000 claims description 32
- 230000005540 biological transmission Effects 0.000 claims description 31
- 230000004044 response Effects 0.000 claims description 20
- 238000013480 data collection Methods 0.000 claims description 3
- 238000004590 computer program Methods 0.000 claims description 2
- 238000012790 confirmation Methods 0.000 description 34
- 238000012545 processing Methods 0.000 description 31
- 239000000872 buffer Substances 0.000 description 29
- 238000007726 management method Methods 0.000 description 28
- 230000007246 mechanism Effects 0.000 description 23
- 239000004744 fabric Substances 0.000 description 21
- 230000006870 function Effects 0.000 description 14
- 230000001360 synchronised effect Effects 0.000 description 14
- 238000010586 diagram Methods 0.000 description 10
- 238000002360 preparation method Methods 0.000 description 10
- 230000008569 process Effects 0.000 description 9
- 238000011144 upstream manufacturing Methods 0.000 description 9
- 238000004364 calculation method Methods 0.000 description 8
- 238000004891 communication Methods 0.000 description 7
- 238000013473 artificial intelligence Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 6
- 244000035744 Hura crepitans Species 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 5
- 238000013434 data augmentation Methods 0.000 description 5
- 230000008676 import Effects 0.000 description 5
- 230000001960 triggered effect Effects 0.000 description 5
- 230000003416 augmentation Effects 0.000 description 4
- 230000036316 preload Effects 0.000 description 4
- 230000008685 targeting Effects 0.000 description 4
- 230000006837 decompression Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000012549 training Methods 0.000 description 3
- 230000007704 transition Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000006835 compression Effects 0.000 description 2
- 238000007906 compression Methods 0.000 description 2
- 230000001419 dependent effect Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000011010 flushing procedure Methods 0.000 description 2
- 238000002347 injection Methods 0.000 description 2
- 239000007924 injection Substances 0.000 description 2
- 238000007562 laser obscuration time method Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000013528 artificial neural network Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000011176 pooling Methods 0.000 description 1
- 238000012805 post-processing Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000003252 repetitive effect Effects 0.000 description 1
- 230000010076 replication Effects 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000000243 solution Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/522—Barrier synchronisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
- G06F15/173—Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0604—Improving or facilitating administration, e.g. storage management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0658—Controller construction arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N20/00—Machine learning
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06N—COMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
- G06N5/00—Computing arrangements using knowledge-based models
- G06N5/02—Knowledge representation; Symbolic representation
-
- H04L29/08—
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/10—Architectures or entities
- H04L65/102—Gateways
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/40—Support for services or applications
- H04L65/401—Support for services or applications wherein the services involve a main real-time session and one or more additional parallel real-time or time sensitive sessions, e.g. white board sharing or spawning of a subconference
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/509—Offload
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Mathematical Physics (AREA)
- Artificial Intelligence (AREA)
- Data Mining & Analysis (AREA)
- Evolutionary Computation (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Computational Linguistics (AREA)
- Medical Informatics (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
- Advance Control (AREA)
- Multi Processors (AREA)
Abstract
호스트에 대한 작업 가속기 역할을 하는 서브 시스템과 호스트를 인터페이스하기 위한 게이트웨이가 제공된다. 게이트웨이는 사전 컴파일된(pre-compiled) 데이터 교환 동기화 포인트들에서 서브 시스템으로 데이터 배치들(batches of data)을 전송할 수 있게 한다. 게이트웨이는 데이터 무버(mover) 엔진 및 메모리 관리 엔진을 갖는 스트리밍 엔진을 포함하고, 상기 데이터 무버 엔진 및 메모리 관리 엔진은 작업 디스크립터로부터의 명령들을 협력하여 실행하도록 구성된다. 메모리 관리 엔진은 게이트웨이와 관련된 로컬 메모리와 외부 저장소 사이에서 데이터를 전송하기 위해 작업 디스크립터로부터의 명령을 실행하도록 구성된다. 데이터 무버 엔진은 게이트웨이와 관련된 로컬 메모리와 서브 시스템 사이에서 데이터를 전송하기 위해 작업 디스크립터로부터 명령을 실행하도록 구성된다.
Description
본 발명은 작업 가속기의 역할을 하는 서브 시스템과 호스트를 인터페이스하기 위해 컴퓨터 시스템에서 사용하기 위한 게이트웨이에 관한 발명이며, 특히 게이트웨이를 통한 데이터 스트리밍에 관한 발명이다.
복잡하거나 대용량 어플리케이션을 위한 데이터 프로세싱과 관련하여, 작업 가속기는 소정 데이터의 프로세싱이 호스트 시스템으로부터 오프로드되는(offloaded) 서브 시스템일 수 있다. 이러한 작업 가속기는 특정 유형의 프로세싱를 수행하기 위한 특별한 하드웨어를 가질 수 있다.
일례로서, 이러한 특별한 가속기 서브 시스템이 이용될 수 있는 컴퓨팅 분야 중 하나는 머신 지능(machine intelligence)이다. 머신 지능 분야의 당업자들에게 익숙한 바와 같이, 머신 지능 알고리즘은 상호연결된 다수의 노드들의 그래프로 표현될 수 있는 "지식 모델"에 대한 반복적인 업데이트들의 수행을 기반으로 한다. 각 노드의 구현은 데이터 프로세싱을 포함하며 그리고 그래프의 상호연결들은 노드들 사이에서 교환되는 데이터에 해당한다. 일반적으로, 각 노드의 프로세싱 중 적어도 일부는 그래프의 노드들 중 일부 또는 다른 모든 노드들과 독립적으로 수행될 수 있으며, 따라서 큰 그래프는 병렬 프로세싱에 대한 큰 기회를 제공한다. 따라서, 머신 지능 어플리케이션에 특화된 작업 가속기는 대량의 병렬 프로세싱을 포함할 수 있다. 병렬 프로세싱(parallelism)의 한 형태는 동일 칩(즉, 동일 다이) 상의 다수의 타일들의 배열을 포함하는 프로세서에 의해 달성될 수 있으며, 각각의 타일은 그 자신의 개별 프로세싱 유닛 및 메모리(프로그램 메모리 및 데이터 메모리 포함)를 포함한다. 따라서, 프로그램 코드의 개별 부분들은 여러 다른 타일들에서 병렬로 실행될 수 있다. 타일들은 온-칩 상호연결을 통해 서로 연결되어 데이터를 서로 교환할 수 있다. 이러한 가속기는 호스트 시스템에 대한 서브 시스템으로 기능하여, 제공된 데이터 세트들에 대한 병렬 프로세싱을 수행할 수 있다.
일반적으로, 서로 다른 타일들 상에서 실행되는 프로그램의 부분들 간에는 종속성(dependencies)이 존재할 수 있다. 따라서, 종속된 데이터보다 앞서 실행되는 하나의 타일 상의 코드 조각이 다른 타일 상의 다른 코드 조각에 의해 이용가능하게 되는 것을 방지하는 기술이 필요하다. 이를 달성하기 위한 여러 가지 가능한 방식들이 있으며, 그 중 하나가 본 명세서에서 예를 들어. "BSP", 대량 동기 병렬 방식(bulk synchronous parallel)으로 설명된다. BSP에 따르면, 각 타일은 컴퓨팅 페이즈와 교환 페이즈를 교번 사이클(alternating cycle)에서 수행한다. 컴퓨팅 페이즈 동안 각 타일은 하나 이상의 계산 작업을 타일에서 로컬로 수행하지만, 그 계산 결과를 임의의 다른 타일들과 통신하지 않는다. 교환 페이즈에서 각 타일은 이전 컴퓨팅 페이즈의 하나 이상의 계산 결과를 그룹의 하나 이상의 다른 타일들과 교환할 수 있지만, 아직 다음번 컴퓨팅 페이즈로 진행하지는 않는다. 또한, BSP 원칙에 따르면, 배리어 동기화는 컴퓨팅 페이즈에서 교환 페이즈로 전환하는 시점 또는 교환 페이즈에서 컴퓨팅 페이즈로 전환하는 시점 또는 둘 다에 배치된다. 즉, (a) 그룹 내의 임의의 타일이 다음 교환 페이즈로 진행하는 것이 허용되기 전에, 모든 타일들은 각각의 컴퓨팅 페이즈를 완료해야만 하거나, 또는 (b) 그룹 내의 임의의 타일이 다음 컴퓨팅 페이즈로 진행하는 것이 허용되기 전에 그룹 내의 모든 타일들은 그들의 각각의 교환 페이즈을 완료해야만 하거나, 또는 (c) 이들 둘다가 요구된다. 일부 시나리오에서, 계산을 수행하는 타일은, 그룹 내의 다른 타일들과의 통신이 수반되지 않는 한, 네트워크 카드 또는 저장 디스크와 같은 다른 시스템 리소스와 통신할 수 있다.
교환 페이즈 동안, 데이터 교환은 가속기 내에서 내부적으로(즉, 타일들 간에) 발생할 수 있을 뿐만 아니라, 일부 상황에서는 가속기와 외부 저장소(예컨대, 호스트 시스템) 사이에서 발생해야만 할 수도 있으며 또는 서로 다른 가속기들 상의 타일들 사이에서 발생해야만 할 수도 있다. 서브 시스템이 작업 가속기 역할을 할 때, 서브 시스템은 제공된 데이터 세트(예컨대, 호스트 시스템으로부터 제공된)를 프로세싱하도록 구성된다. 배리어 동기화를 나타낼 수 있는 적절한 사전 컴파일된 데이터 교환 동기화 포인트에서 데이터 세트들이 가속기에 제공될 수 있도록, 데이터 세트들이 검색되는 것이 바람직하다.
서브 시스템들을 직접 또는 간접적으로 함께 연결하여 서브 시스템들을 확장하는 경우, 사전 컴파일된 데이터 교환 동기화 포인트에서 요구되어질 때 가속기로의 전달을 위해 데이터가 이용가능한지를 보장할 수 있을지에 대한 문제가 발생할 수 있다. 이러한 데이터는 사전 컴파일된 데이터 교환 동기화 포인트에서 가속기로 전달되기 전에, 외부 저장소(예컨대, 호스트 저장소 또는 네트워크 부착 저장소와 같은 서로 다른 유형들의 저장소들을 포함할 수 있음)로부터 검색될 수 있다.
본 발명은 게이트웨이의 개념을 이용하는데, 게이트웨이는 외부 저장소로부터 가속기들로 데이터를 제공하는데 이용될 수 있으며 따라서 이들을 상호연결하여 작업 가속기 역할을 하는 서브 시스템을 확장할 수 있다. 외부 저장소는 호스트 저장소, 네트워크 액세스 저장소, 다른 게이트웨이의 저장소 또는 다른 가속기의 저장소일 수 있다. 게이트웨이의 일부 형태에서 게이트웨이 자체는 데이터의 활성 프로세서이며 데이터 흐름을 자율적으로 관리한다. BSP 모델 및 외부 비동기 환경에서 동작하는 하나 이상의 가속기들 사이에서 중개자 역할을 수행한다. 게이트웨이는 외부 환경으로부터 가속기로 전달할 데이터를 임시로 저장하기 위한 로컬 메모리를 포함한다. 이것은, 사전 컴파일된 데이터 교환 동기화 포인트에서 가속기로 전달하기 위해 게이트웨이가 이용가능한 적절한 데이터를 로컬 메모리에서 가질 수 있는지를 보장하는 것과 관련된 문제점을 야기한다.
제 1 양상에 따르면, 호스트에 대한 작업 가속기 역할을 하는 서브 시스템과 호스트를 인터페이스하기 위한 게이트웨이가 제공되며, 상기 게이트웨이는 게이트웨이 및 서브 시스템을 적어도 포함하는 동기화 영역에 의해 획득된 사전 컴파일된(pre-compiled) 데이터 교환 동기화 포인트들에서 데이터 배치들(batches of data)의 서브 시스템으로의 전송을 가능하게 하며, 상기 사전-컴파일된 데이터 교환 동기화 포인트들은 동기화 영역의 컴퓨팅 페이즈와 교환 페이즈 사이의 배리어로서 역할을 하며, 상기 게이트웨이는 데이터 무버(mover) 엔진 및 메모리 관리 엔진을 갖는 스트리밍 엔진을 포함하고, 상기 데이터 무버 엔진 및 메모리 관리 엔진은 작업 디스크립터로부터의 명령들을 협력하여 실행하도록 구성되고, 각각의 작업 디스크립터는 데이터 스트리밍 동작들의 세트를 정의하며, 상기 메모리 관리 엔진은 게이트웨이의 데이터 연결 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리와 외부 저장소 사이에서 데이터를 전송하기 위해 작업 디스크립터로부터의 명령을 실행하도록 구성되고; 상기 데이터 무버 엔진은 게이트웨이의 가속기 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리와 서브 시스템 사이에서 데이터를 전송하기 위해 작업 디스크립터로부터 명령을 실행하도록 구성되며; 상기 스트리밍 엔진은 게이트웨이를 통해 데이터를 스트리밍하기 위해 상기 메모리 관리 엔진 및 데이터 무버 엔진에 의해 작업 디스크립터로부터의 명령을 실행하도록 구성된다.
일부 실시예에서, 상기 스트리밍 엔진은, 동기화 영역으로부터 동기화 포인트에 대한 표시를 수신하면, 작업 디스크립터로부터의 명령들의 실행을 트리거링하도록 구성된다.
일부 실시예에서, 상기 스트리밍 엔진은, 각 배리어에 대해, 상기 메모리 관리 엔진에 의해 실행되는 메모리 관리 명령들의 세트 및 상기 데이터 무버 엔진에 의해 실행되는 데이터 무버 명령들의 세트를 정의하는 작업 디스크립터 명령을 실행하도록 구성된다.
일부 실시예에서, 상기 작업 디스크립터 명령은, 배리어를 나타내는 동기화 포인트에 대한 표시에 응답하여 상기 데이터 무버 엔진에 의해서 전송될 각각의 데이터 배치(batch of data)의 사이즈를 정의한다.
일부 실시예에서, 상기 작업 디스크립터 명령은, 상기 메모리 관리 엔진에 의해서 외부 저장소와 로컬 메모리 사이에서 전송될 각각의 데이터 배치(batch of data)의 사이즈를 정의한다.
일부 실시예에서, 상기 메모리 관리 엔진은, 데이터 연결 인터페이스를 통해 외부 저장소로부터 게이트웨이와 관련된 로컬 메모리로 하나 이상의 데이터 배치를 전송하는 적어도 하나의 사전 작업 명령(pre-work instruction)을 실행하도록 구성된다.
일부 실시예에서, 상기 메모리 관리 엔진은, 획득되는 동기화 포인트보다 시간상 앞서서 상기 적어도 하나의 사전 작업 명령을 실행하도록 구성된다.
일부 실시예에서, 상기 메모리 관리 엔진은, 데이터 연결 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리로부터 외부 저장소로 하나 이상의 데이터 배치를 전송하는 적어도 하나의 사후 작업 명령(post-work instruction)을 실행하도록 구성된다.
일부 실시예에서, 상기 데이터 연결 인터페이스는, 호스트와 관련된 저장소; 네트워크 부착 저장소; 및 추가 게이트웨이와 관련된 추가 게이트웨이 메모리에 액세스하기 위한 추가 게이트웨이 또는 추가 가속기의 가속기 메모리 중 하나에 연결된다.
일부 실시예에서, 상기 작업 디스크립터는, 상기 메모리 관리 엔진에 의해 실행될 명령들의 세트에 있는 명령들의 개수 및 상기 데이터 무버 엔진에 의해 실행될 명령들의 세트에 있는 명령들의 개수를 정의한다.
일부 실시예에서, 상기 데이터 무버 엔진은, 게이트웨이와 관련된 로컬 메모리 내의 특정 위치로 또는 특정 위치로부터 데이터를 전송하기 위한 명령을 실행하며, 상기 특정 위치는 상기 명령에서 정의된다.
일부 실시예에서, 상기 메모리 관리 엔진은, 상기 특정 위치 안밖으로(into and out of) 하나 이상의 데이터 배치를 로딩하는 명령을 실행하도록 구성된다.
일부 실시예에서, 상기 메모리 관리 엔진은, 상기 게이트웨이와 관련된 로컬 메모리 내의 데이터가 로컬 메모리 밖으로 전송되기 전에, 상기 로컬 메모리 내의 데이터를 조작하는 명령을 실행하도록 구성된다.
일부 실시예에서, 상기 데이터 무버 엔진은, 로컬 메모리로부터 서브 시스템으로 전송 중인 데이터를 조작하도록 구성된다.
일부 실시예에서, 게이트웨이는 게이트웨이 전송 메모리를 포함하고, 상기 데이터 무버 엔진은 획득된 동기화 포인트에서 서브 시스템으로 데이터를 전송하기 전에, 상기 게이트웨이 전송 메모리에 데이터를 로딩하도록 구성된다.
일부 실시예에서, 하나의 데이터 무버 명령이 상기 작업 디스크립터의 메모리 관리 명령들의 세트에 관련되며, 메모리 관리 명령들 각각은, 데이터 수집 동작들을 위해 데이터 무버 명령에 의해 식별되는 위치에 데이터를 로딩한다.
일부 실시예에서, 다수의 데이터 무버 명령들을 지원하도록 하나의 사전 작업 명령이 데이터를 로딩한다.
제 2 양상에 따르면, 게이트웨이를 통해 데이터를 스트리밍하기 위한 스트리밍 엔진이 제공되며, 상기 스트리밍 엔진은 데이터 무버(mover) 엔진 및 메모리 관리 엔진을 가지며, 상기 데이터 무버 엔진 및 메모리 관리 엔진은 작업 디스크립터들로부터의 명령들을 협력하여 실행하도록 구성되고, 각각의 작업 디스크립터는 게이트웨이를 적어도 포함하는 동기화 영역에서 획득된 동기화 포인트와 관련하여 수행될 데이터 스트리밍 동작들의 세트를 정의하며, 상기 메모리 관리 엔진은 게이트웨이의 데이터 연결 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리와 외부 저장소 사이에서 데이터를 전송하기 위해 작업 디스크립터로부터의 명령을 실행하도록 구성되고; 상기 데이터 무버 엔진은 게이트웨이의 가속기 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리와 컴퓨터 서브 시스템 사이에서 데이터를 전송하기 위해 작업 디스크립터로부터 명령을 실행하도록 구성되며; 상기 스트리밍 엔진은 게이트웨이를 통해 데이터를 스트리밍하기 위해 상기 메모리 관리 엔진 및 데이터 무버 엔진에 의해 작업 디스크립터로부터의 명령을 실행하도록 구성된다.
제 3 양상에 따르면, 게이트웨이에 의한 실행을 위해 일시적인 또는 비일시적인 매체에 저장된 컴퓨터 판독가능한 명령들을 포함하는 컴퓨터 프로그램이 제공되며, 상기 명령들은 작업 디스크립터 명령들, 메모리 관리 명령들, 및 데이터 무버 명령들을 포함하고, 각각의 작업 디스크립터는 게이트웨이 및 게이트웨이에 연결된 적어도 하나의 가속기를 적어도 포함하는 동기화 영역에서 획득된 동기화 포인트와 관련하여 수행될 데이터 스트리밍 동작들의 세트를 정의하며, 상기 작업 디스크립터 명령은 적어도 하나의 메모리 관리 명령과 협력하여, 게이트웨이의 데이터 연결 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리와 외부 저장소 사이에서 데이터를 전송하고; 상기 작업 디스크립터 명령은 적어도 하나의 데이터 무버 명령과 협력하여, 게이트웨이의 가속기 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리와 컴퓨터 서브 시스템 사이에서 데이터를 전송한다.
본 발명의 더 나은 이해를 위해 그리고 동일한 것이 어떻게 실행될 수 있는지를 보여주기 위해, 이제 첨부된 도면을 예로서 참조할 것이다.
도 1은 다중 타일을 포함하는 프로세서 칩의 개략적인 블록도이다.
도 2는 BSP(bulk synchronous parallel) 컴퓨팅 모델의 개략도이다.
도 3은 BSP 모델의 또 다른 개략도이다.
도 4는 가속기와 게이트웨이 사이의 동기화 요청/확인 교환의 개략도이다.
도 5는 다중 프로세서 칩 시스템의 또 다른 개략도이다.
도 6은 호스트와의 동기화를 포함하는 프로그램 흐름을 개략적으로 도시한다.
도 7은 가속기, 게이트웨이 및 호스트를 포함하는 시스템을 개략적으로 도시한다.
도 8은 게이트웨이를 통한 다양한 데이터 경로의 개략도이다.
도 9는 게이트웨이를 사용하는 가속기들 및 호스트의 집합을 개략적으로 보여줍니다.
도 10은 게이트웨이를 통한 데이터 흐름의 개략도이다.
도 11은 가속기, 게이트웨이 및 호스트를 포함하는 시스템의 개략도이다.
도 12는 복수의 가속기 및 게이트웨이를 포함하는 머신의 개략도이다.
도 13은 복수의 기계를 포함하는 포드의 개략도이다.
도 14는 데이터를 배포하고 계산하는 예시적인 방법을 예시한다.
도 15는 세 게이트웨이 간의 동기화 요청 및 확인 교환을 개략적으로 도시한다.
도 1은 다중 타일을 포함하는 프로세서 칩의 개략적인 블록도이다.
도 2는 BSP(bulk synchronous parallel) 컴퓨팅 모델의 개략도이다.
도 3은 BSP 모델의 또 다른 개략도이다.
도 4는 가속기와 게이트웨이 사이의 동기화 요청/확인 교환의 개략도이다.
도 5는 다중 프로세서 칩 시스템의 또 다른 개략도이다.
도 6은 호스트와의 동기화를 포함하는 프로그램 흐름을 개략적으로 도시한다.
도 7은 가속기, 게이트웨이 및 호스트를 포함하는 시스템을 개략적으로 도시한다.
도 8은 게이트웨이를 통한 다양한 데이터 경로의 개략도이다.
도 9는 게이트웨이를 사용하는 가속기들 및 호스트의 집합을 개략적으로 보여줍니다.
도 10은 게이트웨이를 통한 데이터 흐름의 개략도이다.
도 11은 가속기, 게이트웨이 및 호스트를 포함하는 시스템의 개략도이다.
도 12는 복수의 가속기 및 게이트웨이를 포함하는 머신의 개략도이다.
도 13은 복수의 기계를 포함하는 포드의 개략도이다.
도 14는 데이터를 배포하고 계산하는 예시적인 방법을 예시한다.
도 15는 세 게이트웨이 간의 동기화 요청 및 확인 교환을 개략적으로 도시한다.
본 출원의 실시예는 호스트에 대한 작업 가속기의 역할을 하는 서브 시스템과 호스트를 인터페이스하기 위한 게이트웨이에 관한 것이다. 서브 시스템은 본 명세서의 설명 전체에서 "가속기"로 지칭될 수 있다. 게이트웨이는 적어도 게이트웨이 및 서브 시스템을 포함하는 동기화 영역에 의해 획득된 사전 컴파일된(pre-compiled) 데이터 교환 동기화 포인트들에서 데이터 배치들(batches of data)의 가속기로의 전송을 가능하게 하며, 상기 사전-컴파일된 데이터 교환 동기화 포인트들은 동기화의 컴퓨팅 페이즈와 교환 페이즈 사이의 배리어로서 역할을 한다.
사전 컴파일된 데이터 교환 동기화 포인트에서 가속기로의 전송을 위해 게이트웨이 메모리에서 데이터 배치들(batches of data)이 이용가능함을 보장하기 위하여, 게이트웨이는 작업 디스크립터들로부터의 명령들을 협력하여 실행하는 스트리밍 엔진을 포함하며, 각각의 작업 디스크립터는 동기화 포인트에 의해 트리거링되는 데이터 스트리밍 동작들의 세트를 정의한다.
게이트웨이의 스트리밍 엔진은 메모리 관리 엔진을 가지며, 상기 메모리 관리 엔진은 게이트웨이의 데이터 연결 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리와 외부 저장소 사이에서 데이터를 전송하기 위해 작업 디스크립터로부터의 명령을 실행하도록 구성된다. 또한, 게이트웨이의 스트리밍 엔진은 데이터 무버 엔진을 가지며, 상기 데이터 무버 엔진은 게이트웨이의 가속기 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리와 서브 시스템 사이에서 데이터를 전송하기 위해 작업 디스크립터로부터 명령을 실행하도록 구성된다. 상기 스트리밍 엔진은 동기화 영역으로부터 동기화 포인트에 대한 표시를 수신하고 그리고 게이트웨이를 통해 데이터를 스트리밍하기 위해 상기 메모리 관리 엔진 및 데이터 무버 엔진에 의한 작업 디스크립터로부터의 명령들의 실행을 트리거링하도록 구성된다.
동일한 작업 디스크립터에서 동작들을 이와 같이 함께 그룹핑함으로써, 가속기로 전송하기 위해 데이터 무버 엔진이 필요로 하는 데이터가, 사전 컴파일된 데이터 교환 동기화 포인트에 앞서서 메모리 관리 엔진에 의해서 이미 사용가능해질 수 있다.
다음의 설명은 본 출원의 다양한 실시예를 더 상세히 설명한다. 본 출원은 호스트 시스템에 대해 작업 가속기(work accelerator) 역할을 수행하는 서브 시스템 및 복수의 이러한 서브 시스템들의 조합에 관한 것이다. 서브 시스템은 호스트에 의해 할당된 데이터 세트들(작업)에 대해 미리결정된 프로세싱 단계들을 수행하는 가속기 역할을 하며, 호스트는 주로 반복적인 프로세싱을 받기 위해 많은 양의 데이터를 필요로 하는 프로세스를 실행한다. 각각의 서브 시스템은 소위 지능형 프로세싱 유닛(IPU: intelligence processing unit) 또는 모든 종류의 가속기(XPU)일 수 있다. 본 명세서에 설명된 기술들은, 본 출원인의 미국 출원(출원 번호: 15/885925)(상기 미국 출원의 내용은 참조로서 본 명세서에 포함됨)에 개시된 IPU들과 함께 사용될 수 있지만, 임의의 가속기에도 또한 적용될 수 있다. 보다 상세히 후술되는 바와 같이, 여러 가속기들이 결합되어 가속기 머신 또는 가속기 어플라이언스를 형성할 수 있다. 여러 개의 가속기 어플라이언스들이 섀시 내에 결합할 수 있다. 여러 개의 섀시들은 그룹으로 구성될 수 있으며, 이는 랙에 배치될 수 있다. 가속기들의 이러한 결과적인 조합들은 병렬 연산들을 수행하기 위한 방대한 분량의 프로세싱 파워를 구비한 시스템을 만들어낼 수 있다. 이것은 인공 지능 어플리케이션에서 뉴럴 네트워크 프로세싱을 구현하는데 특히 유용하다. 본 명세서의 원리들은 잠재적으로 단일 랙 이상으로 확장하는데 사용될 수 있다.
본 출원은 이러한 가속기들의 효과를 개선하는데 많은 장점이 있는 새로운 게이트웨이에 관한 것이다. 게이트웨이(들)는 가속기들에 의한 프로세싱를 위해 데이터 세트를 제공하는 하나 이상의 호스트 시스템들로부터 가속기들을 분리(disaggregation)할 수 있게 한다. 이것은 몇 가지 장점이 있다. 첫째, 이것은 호스트 당 가속기 수를 사용자가 구성할 수 있게하고 그리고 호스트의 물리적 용량 이상으로 늘릴 수 있게 한다. 둘째, 이것은 가속기 I/O가 호스트로부터 디커플링될 수 있게하여, IO 용량이 가속기들의 수에 따라 확장될 수 있게한다. 셋째, 이러한 분리를 통해 여러 호스트들은, 이러한 리소스들 및 관련 호스트들의 수명주기 관리를 지원하는 잘 정의된 API를 통해 요청시 호스트에 할당되고 그룹화되는 가속기 리소스들의 세트를 사용할 수 있다.
각 가속기는 단일 칩 프로세서일 수 있다. 도 1은 다수의 프로세서 타일들(4)의 어레이(6) 및 타일들(4) 사이를 연결하는 온칩 상호연결(34)을 포함하는 단일 칩 프로세서(2), 즉 단일 다이를 도시한다. 상기 칩(2)는 그 자신의 단일-칩 집적 회로 패키지 상에 단독으로 구현되거나 같은 IC 패키지 내의 다수의 패키징된 다이들 중 하나로서 구현될 수 있다. 온칩 상호연결은 또한 "교환 패브릭"(34)으로 지칭될 수 있는데, 왜냐하면 이는 타일들(4)이 서로 데이터를 교환할 수 있게하기 때문이다. 각 타일(4)은 로컬 명령 메모리로부터 명령들(코드)을 실행하고 로컬 데이터 메모리에서 데이터를 핸들링할 수 있는 프로세싱 유닛이다. 타일(4)은 배럴 스레드 프로세싱 유닛(10) 및 메모리(11)의 각각의 인스턴스를 포함할 수 있다. 예를 들어, 일례로서, 칩(2)은 대략 수백 개의 타일들(4), 또는 심지어는 수천 개의 타일들을 포함할 수 있다. 완전성을 위해, 여기에서 언급된 "어레이"는 반드시 타일들(4)의 특정 수의 치수들 또는 물리적 레이아웃을 의미하는 것은 아니다.
각 칩(2)은 또한 하나 이상의 외부 링크(8)를 포함하며, 외부 링크(8)는 칩(2)이 다른 칩(예를 들어, 같은 칩(2)의 하나 이상의 다른 인스턴스들) 상의 하나 이상의 다른 외부 프로세서에 연결될 수 있게한다. 이들 외부 링크들(8)은 동일한 IC 패키지 또는 IC 카드 또는 다른 IC 카드들 상의 상기 칩(2)의 하나 이상의 다른 인스턴스들을 함께 연결하기 위한 칩 대 칩 링크로서 작용할 수 있다. 상기 칩(2)의 여러 인스턴스들은 칩 대 칩 링크를 통해 카드들로 함께 연결될 수 있다(나중에 설명되는 도 12 참조). 칩은 또한 상기 칩을 게이트웨이에 연결하는 커넥터(9)를 가지고 있으며, 이에 대해서는 나중에 자세히 설명한다. 모든 가속기가 게이트웨이 커넥터(9)를 가질 필요는 없지만 적어도 일부는 여기에 설명된 목적을 위해 필요하다. 하나의 예시적인 구성에서, 칩(2)은 호스트에 의해 할당된 게이트웨이로부터 작업을 수신한다(칩(2)에 의해 프로세싱될 입력 데이터 형태로). 다음을 유의해야 하는바, 호스트에 대한 참조는 NAS(Network Attached Storage)와 같은 오프 칩 저장 시스템에 대한 참조를 의미할 수 있다. 게이트웨이는 호스트 또는 NAS로부터의 데이터가 하나 이상의 가속기들에 제공될 수 있게하며, 가속기들은 단일 칩 프로세서(2) 또는 여러 개의 상호연결된 카드들 상에 구성될 수 있는 여러 개의 단일 칩 프로세서(2)로 설계된다. 게이트웨이는 가속기와 호스트 사이의 릴레이 및 분리(disaggregation)를 가능하게 하며, 이에 대해서는 상세히 후술될 것이다.
상호연결(34)은 어레이(6) 내의 상이한 프로세서 타일들(4)이 칩(2)의 또 다른 프로세서 타일들과 서로 통신할 수 있도록 구성된다. 본 출원인의 앞선 특허 출원들에서 설명된 IPU에서, 가속기(2) 상의 타일들(4) 간의 통신은 시간 결정론적 방식(time deterministic fashion)으로 발생한다. 하지만, 다른 형태의 타일 간 교환도 또한 가능하다. 어레이(6) 내의 서로 다른 타일들(4)에서 실행되는 프로그램의 부분들 사이에서 종속성이 존재할 수도 있다. 즉, 하나의 타일에서 데이터를 프로세싱하는 것은 다른 타일의 결과에 의존할 수 있다. 예를 들어 다른 타일이 의존하는 결과를 제공할 수 있다. 따라서, 하나의 타일(4)에 있는 코드 조각이 그것이 의존하는 데이터가 다른 타일(4)에 있는 다른 코드 조각에 의해 이용가능해지기 전에 앞서서 실행되는 것을 방지하는 기술이 필요하다.
인공 지능(AI) 및 데이터 사이언스(Data Science)를 위한 병렬 프로그래밍 모델은 컴퓨팅(Compute), 배리어(Barrier), 및 교환(Exchange)의 3-페이즈 반복 실행 모델(3-phase iterative execution model)을 따르는 것이 일반적이다. 그 의미는, 가속기들 사이에서 그리고 각 가속기와 호스트 사이에서 데이터 일관성(data-consistency)을 제공하기 위해, 가속기로/로부터의 데이터 전송은 일반적으로 배리어 의존성이다(barrier dependent). 전형적으로 사용되는 데이터 일관성 모델은 벌크 동기식 병렬(Bulk Synchronous Parallel: BSP), 스테일 동기식 병렬(Stale Synchronous Parallel: SSP) 및 비동기식(Asynchronous)이다.
SSP에서, 다수의 작업자 스레드들(worker threds) 중 고속 작업자 스레드는, 가장 느린 작업자 스레드보다 여러 클럭 사이클들 만큼 먼저 실행될 수 있다. 작업자 스레드는 타임 스탬프 범위가 있는 공유 파라미터에 대한 업데이트를 볼 수 있다. 예를 들어, 클럭 t에서 작업자는 t-Δ에서 타임스탬프가 지정된 업데이트들까지의, 작업자들로부터의 모든 업데이트들을 볼 수 있다. BSP는 Δ = 0 인 특수한 경우이며, 따라서 작업자들은 서로 앞서 실행되지 않을 수 있다.
비동기식 데이터 일관성 모델에서, 공유 파라미터들은 언제든지 판독/기입될 수 있다.
본 명세서에 설명된 본 발명의 실시예들은 BSP 모델을 사용하지만, 임의의 다른 동기화 모델들이 대안으로 사용될 수 있음이 명백할 것이다.
도 2 및 3을 참조하면, BSP 교환 방식의 구현예를 예시하며, 여기서 각각의 타일(4)은 컴퓨팅 페이즈(33) 및 교환 페이즈(32)를 교번하여 수행하며, 타일들 간의 배리어 동기화(30)에 의해 서로 분리된다. 도 2 및 3에 도시된 일례에서, 배리어 동기화는 각 컴퓨팅 페이즈(33) 및 다음의 교환 페이즈(32) 사이에 배치된다. 컴퓨팅 페이즈(33) 동안, 각 타일(4)은 하나 이상의 계산 작업들을 타일에서 로컬로 수행하지만, 이러한 계산들의 임의의 결과들을 타일들(4) 중 그 누구와도 통신하지 않는다. 교환 페이즈(32)에서, 각 타일(4)은 이전 컴퓨팅 페이즈로부터의 하나 이상의 계산 결과들을 하나 이상의 다른 타일들과 교환할 수 있지만, 그 작업(들)이 의존성을 갖는 임의의 데이터를 다른 타일들(4)로부터 수신할 때까지 새로운 계산을 수행하지 않는다. 또한, 이전 컴퓨팅 페이즈에서 계산된 것을 제외한 임의의 데이터가 다른 타일들로 전송되지 않는다. 내부 제어 관련 연산들과 같은 다른 연산들이 교환 페이즈에서 수행될 수 있다는 것도 배제되지 않는다. 또한, 다음을 유의해야 하는바, 계산을 수행하는 타일(4)은, 동기화중인 타일들(4)의 어레이 외부에 있는 게이트웨이와 컴퓨팅 페이즈(33) 동안 통신하도록 허용될 수 있다(단, 동기화되는 그룹 내의 다른 타일들(4)과의 통신을 포함하지 않는 한). 타일 그룹 외부의 통신은 선택적으로 BSP 메커니즘을 사용할 수 있지만, 대안으로 BSP를 사용하지 않을 수 있으며, 대신 자체의 다른 동기화 메커니즘을 사용할 수 있다.
BSP 원리에 따르면, 배리어 동기화(30)는 컴퓨팅 페이즈(33)에서 교환 페이즈(32)로 전환하는 시점(juncture) 또는 교환 페이즈(32)에서 컴퓨팅 페이즈(33)로 전환하는 시점, 또는 둘 모두에 배치된다. 즉, (a) 그룹 내의 임의의 타일이 다음 교환 페이즈(32)로 진행하는 것이 허용되기 전에 모든 타일(4)들은 각각의 컴퓨팅 페이즈(33)을 완료해야만 하거나, 또는 (b) 그룹 내의 임의의 타일이 다음 컴퓨팅 페이즈(33)로 진행하는 것이 허용되기 전에 그룹 내의 모든 타일(4)들은 그들의 각각의 교환 페이즈(32)을 완료해야만 하거나, 또는 (c) 이들 조건들 둘다가 강제된다. 세 가지 변형들 모두에서, 페이즈들 사이에서 교번하는 것은 개별 프로세서들이며, 동기화하는 것은 전체 어셈블리이다. 이후, 일련의 교환 페이즈 및 컴퓨팅 페이즈가 여러 번 반복될 수 있다. BSP 용어에서, 교환 페이즈 및 컴퓨팅 페이즈의 각각의 반복은 때때로 "수퍼 스텝"이라 지칭된다(문헌에서 상기 용어가 항상 일관되게 사용되는 것은 아니지만, 때때로 각각의 개별 교환 페이즈 및 컴퓨팅 페이즈는 개별적으로 수퍼 스텝이라 지칭되는 반면에, 본 명세서에 채택된 용어와 같은 다른 곳에서는 교환 및 계산 페이즈들이 함께 슈퍼 스텝이라 지칭된다).
또한, 다음이 배제되지 않는바, 동일 칩(2) 또는 서로 다른 칩들에 있는 타일들(4)의 다수의 상이한 독립 그룹들 각각은 서로 비동기식으로 동작하는 개별 BSP 그룹을 형성할 수 있으며, 각각의 주어진 그룹 내에서만 컴퓨팅, 동기화 및 교환의 BSP 사이클이 부과되지만, 각 그룹은 다른 그룹들과 독립적으로 이렇게 할 수 있다. 즉, 멀티-타일 어레이(6)는, 그 각각의 독립적으로 동작하고 그리고 이러한 다른 그룹들과 비동기적으로 동작하는, 다수의 내부적으로 동기화된 그룹들을 포함할 수 있다(이에 대해서는 후술될 것이다). 일부 실시예에서 동기화 및 교환의 계층적 그룹핑이 있으며, 이는 나중에 더 자세히 설명된다.
도 2는 (a) 컴퓨팅 페이즈(33)로부터 교환 페이즈(32)로의 배리어 동기화(전술한 내용 참조)를 부과하는 경우, 어레이(6) 내의 일부 또는 모든 타일들의 그룹 4i, 4ii, 4iii 사이에서 구현되는 BSP 원리를 예시한다. 이러한 구성에서, 일부 타일들(4)은 일부 다른 타일들이 여전히 교환하고 있는 동안 컴퓨팅(33)을 시작할 수 있다.
본 명세서에 개시된 실시예에 따르면, 이러한 유형의 BSP는 배리어 동기화를 수행하기 위한 머신 코드 명령, 즉 동기화 명령(sync instruction)에 추가적이고, 특별하고, 전용의 기능을 통합함으로써 용이해질 수 있다. 동기화 명령은 타일들의 메모리들에 저장된 데이터의 동기화를 유발하기 위해 데이터가 교환되는 교환 페이즈를 시작하도록, 타일의 프로세서에서 실행될 수 있다.
동기화 명령은 동기화 모드를 정의하는 오퍼랜드(operand)를 갖는다. 이러한 모드 중 하나는 타일간 모드 동기화 칩(inter-tile mode sync chip)으로, 이는 칩의 모든 타일들이 데이터 교환을 위해 동기화 배리어에 도달하게 한다. 이것은 각 타일에 대한 명령들이 컴파일될 때 컴파일러에 의해 관리되는바, 이는 각 타일이 사전 결정론적인(pre-deterministic) 시간 기반 컴파일 프로토콜에 따라 실행되기 때문이다.
언급된 바와 같이, 단일 가속기에 비해 향상된 프로세싱 능력을 갖는 가속기 머신(161)을 생성하기 위해 여러 가속기들, 예를 들어 IPU를 결합하는 것이 가능하다. 이러한 가속기 머신(161)이 도 12에 도시되어 있다. 가속기 머신(161)은 각각의 가속기가 링크(8)에 의해 그 이웃과 연결되는 어레이에서 서로 연결된 복수개의 가속기들(162)(이 예에서는 4개) 포함한다. 상기 머신(161)은 또한 2 개의 게이트웨이(163)를 포함하며, 게이트웨이(163)는 머신(161)을 하나 이상의 호스트(미도시)에 연결하도록 구성된다. 각 게이트웨이(163)는 게이트웨이 링크(9)를 통해 4 개의 가속기(162) 중 2 개에 연결된다.
더 상세히 설명되는 바와 같이, 게이트웨이(163)들은 데이터 교환 동기화 포인트에 후속하여, 그들의 연결된 가속기들(162)과 교환 페이즈에서 데이터를 교환할 수 있다. 데이터 교환 동기화 포인트은, 가속기에서 실행되는 미리-컴파일된 코드의 일부인 동기화 명령을 실행한 결과로서 트리거링된다. 데이터 교환 동기화 포인트의 시작에서, 동기화 명령이 타일의 프로세서에서 실행될 수 있다. 가속기(162)의 하나 이상의 타일들에 의한 하나 이상의 동기화 명령들의 실행은, 하나 이상의 타일들에 의해 하나 이상의 동기화 요청들이 발행되게 한다. 이러한 동기화 요청들은 가속기(162)에 의해 집계되고, 이후 가속기(162)는 집계된 동기화 요청을 연관된 게이트웨이(163)로 발행한다. 게이트웨이들은 그들 사이에서 동기화 신호들을 전송하도록 연결될 수 있어, 동기화 영역들이 다수의 게이트웨이들 및 가속기들로 형성될 수 있다. 동기화 신호의 기능 중 하나는 BSP 모델의 교환 페이즈에서 게이트웨이(163)와 관련 가속기들(162) 사이에서 데이터 교환을 용이하게 하는 것이지만, 다른 비 데이터 관련 어플리케이션을 가질 수도 있다. 각각의 게이트웨이(163)는 로컬 메모리를 가지며 그리고 데이터 교환 동기화 포인트에서 가속기로 전송될 데이터를 획득(호스트로부터, 원격 저장소로부터 또는 다른 게이트웨이로부터) 및 저장하도록 구성된다. 상기 데이터는 가속기(162)로부터의 동기화 요청에 앞서서 로컬 메모리에 저장되며, 따라서 이것은 가속기로 전송될 준비가 된다. 게이트웨이의 기능 중 하나는 요청된 데이터를 가속기가 필요로할 때 상기 요청된 데이터를 가속기에 제공하는 것이다. 후술되는 상이한 메커니즘들을 통해 호스트 또는 원격 저장소로부터 데이터가 게이트웨이에 의해 획득될 수 있다.
각 게이트웨이(163)는 또한 다른 게이트웨이와 데이터를 교환하도록 구성된다. 게이트웨이(163)는 가속기들(162)로 전송될 데이터의 복사본들을 다른 게이트웨이들에게 배포할 수 있다. 이들 다른 게이트웨이들(162)은 그 후 그들이 연결된 가속기들(162)에 데이터를 분배할 수 있다. 따라서, 데이터의 복사본을 수신하는 다른 게이트웨이들(162)은 저장소(예를 들어, 호스트 또는 원격 저장소)로부터 데이터를 독립적으로 획득할 필요가 없으며, 따라서 리던던트 데이터가 다수의 게이트웨이에 의해 저장소로부터 검색되는 것을 방지한다. 이에 대해서는 나중에 자세히 설명한다. 또한, 후술하는 바와 같이 게이트웨이(163)는 복수의 상이한 유형들의 데이터 전송이 가능하도록 구성된다. 게이트웨이(163)는 다른 게이트웨이들과 데이터를 교환하도록 구성된다. 게이트웨이(163)는 게이트웨이(163)에 연결된 하나 이상의 가속기(162)와 데이터를 교환하도록 구성된다. 게이트웨이(163)는 하나 이상의 호스트(미도시)와 데이터를 교환하도록 구성된다.
이제 도 4를 참조하면, 도 4는 가속기(51)의 하나 이상의 타일들(53)이 게이트웨이(52)에 동기화 요청들을 발행하는 경우, 동기화 요청(sync request)/확인(acknowledgment) 메커니즘이 어떻게 작동하는지에 대한 일례를 예시한다.
게이트웨이(52)는 레지스터(59)를 포함하고, 레지스터(59)는 다가오는 동기화가 수행될 동기화 영역(sync zone)에 대한 표시를 포함한다. 레지스터(59)는 게이트웨이(52)의 공유 레지스터 블록(SRB)에서 구현될 수 있다. 배리어 동기화 이전에, 가속기(51)의 타일(53)은 다가오는 동기화에 대하여 그것이 속하는 동기화 영역에 대한 표시(32)를 전송하도록 구성된다. 가속기(51)의 많은 타일들(53)이 동일한 동기화 영역에 속할 수 있기 때문에, 가속기(51)는 표시(32)를 작성하기 위해 특정 동기화 영역에 속하는 타일을 지명한다. 동기화 영역은 어떤 타일들이 함께 동기화에 포함될지를 나타낸다. 일부 경우에, 동기화 영역은 동일한 칩 상의 타일들(53)만을 포함할 수 있으며, 이 경우 게이트웨이는 관련되지 않음을 유의해야 한다. 다른 경우에, 동기화 영역은 서로 다른 칩 상의 타일들(53)을 포함하는 외부 동기화(external sync)일 수 있다. 경우에 따라, 동기화 영역은 다른 가속기의 타일들을 포함한다. 경우에 따라, 동기화 영역에는 게이트웨이, 호스트 및/또는 원격 저장소가 포함된다.
비록 여기에서는 동기화 영역의 표시가 가속기(51)로부터 게이트웨이(52)로 전송되는 것으로 제시되지만, 일부 다른 실시예에서, 상기 표시는 게이트웨이(52)에 의해 결정되고 레지스터(59)에 저장될 수 있다. 게이트웨이(52)는 사전-컴파일된 코드를 기반으로 이러한 결정을 자율적으로 수행할 수 있다. 일부 다른 실시예에서, 상기 표시는 가속기(51)로부터 수신되는 동기화 요청(56)의 일부로서 제공될 수 있으며 또는 동기화 요청이 어써트되기 전에 제공된 대역 외(out of band)(예를 들어, PCIe 기입) 동기화 정보의 일부로서 제공될 수 있다.
데이터 교환 동기화 포인트은 가속기(51)의 타일(53)에서 실행되는 코드에서 사전-컴파일된 동기화 명령들의 결과로서 트리거링된다. 데이터 교환 동기화 포인트의 시작시에, 하나 이상의 동기화 명령들이 타일들(53)의 하나 이상의 프로세서들에서 실행될 수 있다. 동기화 명령을 실행하는 각 타일은 동기화 요청을 전송하며, 이는 가속기(51)의 동기화 로직(54)에서 수신된다. 동기화 로직(54)은 이러한 동기화 요청들(55)을 집계하고, 집계된 동기화 요청(56)을 게이트웨이(52)로 전송한다.
게이트웨이(52)는 가속기(51)로부터 동기화 요청(56)을 수신하고, 동기화 배리어가 통과되도록 할 수 있다. 이것은 동기화 요청(56)에 응답하여 동기화 확인(sync acknowledge)(57)을 가속기(51)로 전송하는 것을 포함한다. 동기화 배리어가 통과되도록 허용하면, 가속기(51)의 타일(53)들은 서로 데이터를 교환하게 되며, 일부 경우에서는 게이트웨이(52) 자체와 데이터를 교환하게 된다. 게이트웨이(52)와의 데이터 교환은 호스트(도시되지 않음)로부터 게이트웨이(52)에서 수신된 데이터가 가속기(51)의 하나 이상의 타일(53)로 전송되는 것을 포함할 수 있다. 게이트웨이(52)와의 데이터 교환은 다른 게이트웨이(미도시)로부터 게이트웨이(52)에서 수신된 데이터가 가속기(53)의 하나 이상의 타일로 전송되는 것을 포함할 수 있다. 다른 게이트웨이로부터 수신된 데이터는 다른 가속기로부터 유래되었을 수 있다. 이것은 가속기들 간의 데이터 교환이 게이트웨이들을 통해 수행될 수 있는 하나의 메커니즘이다. 다른 게이트웨이로부터 수신된 데이터는 다른 호스트로부터 유래되었을 수 있다. 또 다른 메커니즘은 게이트웨이 기능을 통해 게이트웨이에 연결된 하나의 가속기가, 게이트웨이들 사이의 패브릭 포트를 경유하여, 다른 게이트웨이에 연결된 다른 가속기에 직접 기입할 수 있게하는 것이다. 이를 달성하기 위해, 가속기들/게이트웨이들의 각각의 그룹핑(즉, 섀시/그룹/랙 등)의 모든 저장 위치들은, 단일 글로벌 어드레스 공간의 일부를 형성한다.
게이트웨이(52)는 3 개의 데이터 교환 경계들(boundaries)를 갖는다: (i) 게이트웨이-가속기; (ii) 게이트웨이- 외부; 및 (iii) 게이트웨이-게이트웨이. 이들은 상이한 요구 사항들을 가지며, 따라서 서로 다른 다른 프로토콜들로 관리된다. 하지만, 이들은 조정되어야만 하는바, 가속기(51) 데이터가 가속기(51)에 의해 요청될 때(즉, 동기화 중) 게이트웨이 메모리에서 이용가능하지만, 게이트웨이(52)를 위해 데이터를 저장하는 게이트웨이 메모리가 오버플로우되지 않도록, 이들이 조정되어야 한다.
전술한 바와 같이, 동기화 이전에, 가속기의 타일들(53)의 그룹에 대한 동기화 영역에 대한 표시가 레지스터(59)에 저장된다. 일부 실시예에서, 이러한 레지스터(59)에 대한 기입(write)(50)은 게이트웨이(52)에 대해 동기화 요청(56)을 발행하기 전에 수행된다. 타일은 이전 교환 페이즈의 말미에서 또는 해당 동기화가 발생할 교환 페이즈에 선행하는 컴퓨팅 페이즈의 시작시에, 상기 표시를 전송할 수 있다. 레지스터(59)에 대한 별도의 기입(50)은 각각의 동기화 배리어에 대해 수행된다. 동기화 요청(56)을 수신하면, 게이트웨이(52)는 레지스터(59)로부터 동기화 요청에 대응하는 표시를 소비하도록 구성된다. 게이트웨이(52)는 동기화 요청(56)에 대응하는 표시가 레지스터(59)에 기입된 경우에만, 동기화 요청에 대한 확인(57)을 가속기(51)로 전송하도록 구성된다. 다시 말해서, 게이트웨이(52)는 마지막 배리어 이후에 값이 리프레시된 경우에만, 동기화 요청에 대한 확인(57)을 가속기(51)로 전송할 것이다.
예를 들어, 가속기의 하나 이상의 타일(53)들이 컴퓨팅 페이즈가 끝날 때까지 그들의 동기화 영역을 결정할 수 없기 때문에, 동기화 영역에 대한 표시를 레지스터(59)에 기입함에 있어서 지연이 발생할 수 있으며, 이후 동기화 영역의 해당 표시로 레지스터가 업데이트되기 전에 동기화 요청이 수신될 수 있다. 이 경우, 게이트웨이(52)는 레지스터(59)가 동기화 영역의 해당 표시를 수신할 때까지 확인(57)의 전송을 대기한다. 따라서, 시스템은 레지스터(59)가 리프레시될 때까지 대기하는 동안 약간의 레이턴시를 겪을 수 있다.
게이트웨이(52)는 레지스터(59)에 저장되는 동기화 영역의 표시를 사용하여 동기화 확인(57)을 생성하고 정확한 타일, 칩 및/또는 가속기에 이를 전송한다. 예를 들어, 동기화 영역이 가속기(51) 및 추가 가속기(미도시)를 포함한다라고 동기화 영역의 표시가 나타내는 경우, 게이트웨이(52)는 동기화 요청의 수신에 응답하여 가속기(51) 및 추가 가속기에 동기화 확인을 전송한다. 게이트웨이(52)는 레지스터(59)로부터 동기화 영역의 표시를 판독할 수 있으며, 그리고 이 표시에 따라 동기화 확인 또는 요청(57)을 그에 따라 전파할 수 있다.
레지스터(59)에 저장되는 동기화 영역의 표시는 게이트웨이(52) 자체로부터의 데이터 전송이 동기화의 일부로서 필요한지 여부에 대한 표시를 포함한다. 이러한 표시는 레지스터(59)에 저장되는 동기화 영역의 표시로부터 암시될 수 있다. 데이터 전송이 필요하다라고 게이트웨이(52)가 결정하면, 게이트웨이(52)는 크레딧 제어 메커니즘을 적용하여, 동기화 배리어가 통과되는지의 여부를 결정한다. 데이터 전송이 필요하지 않다라고 게이트웨이(52)가 결정하면, 게이트웨이(52)는 크레딧 제어 메커니즘을 적용함이 없이, 동기화 확인(57)을 가속기(51)로 전송한다. 크레딧 제어 메커니즘의 경우, 게이트웨이(52)의 저장소(후술될 로컬 동기화 배리어 모듈(LSBM))에서 이용가능한 제 1 크레딧 세트(교환 동기화 포인트(ESP) 크레딧이라 지칭됨) 중 하나 이상이 있다면, 게이트웨이(52)는 동기화 확인(57)을 가속기(51)로 전송하고 동기화의 데이터를 게이트웨이 메모리(도면에 도시되지 않음)로부터 가속기(51)로 전송함으로써, 동기화 요청(56)의 수신에 응답하여 동기화 배리어가 통과되도록 구성된다. 만일, 이용가능한 ESP 크레딧이 0 이라면, 게이트웨이(52)는 동기화 요청(56)을 확인(57)하지 않을 것이며 그리고 게이트웨이 메모리(도 4에 도시되지 않음)로부터 가속기(51)로 데이터를 전송하지 않을 것인바, 따라서 동기화가 중단되게 한다. 보다 상세히 후술될 이러한 크레딧 제어 메커니즘은 게이트웨이(52) 및 가속기(51)가 서로에 대해 BSP 프로토콜에서 동기화된 채로 남아있게 한다.
일부 실시예에서, 게이트웨이(52) 및 가속기(51)는 각각 사전-컴파일된 코드를 포함하여, 게이트웨이(52)가 정확한 시간에 가속기(51)에 필요한 데이터를 제공할 수 있게한다.
가속기(51)의 동기화 로직(54)이 동기화 요청(56)을 전송한 후, 동기화 로직(54)은 게이트웨이(52)로부터의 동기화 확인(sync_ack)(57)을 기다릴 것이다. 가속기(51)의 동기화 로직(54)이 게이트웨이(52)로부터 동기화 확인(57)을 수신하면, 동기화 로직(54)은 동기화 요청(55)을 발행한 타일들(53)에 동기화 확인(57)(sync_ack)를 반환할 것이다. 모든 동기화 요청 타일들(53)은 외부 동기화 로직(54)으로부터의 동기화 확인(58)(sync_ack)이 반환될 때까지 자동으로 일시 중지될 것이다. 동기화 확인(58)에 응답하여, 타일들(53)은 수퍼바이저에 대한 명령 발행을 재개한다. 즉, 이들은 컴퓨팅 페이즈로 다시 진입한다.
실제 데이터(콘텐츠)는 동기화 요청들(55/56) 및 동기화 확인들(57/58)에 대해 다른 채널에 의해 가속기 타일(53)과 게이트웨이(52) 사이에서 전송될 수 있다. 또한, 다음을 유의해야 하는바, 당업자는 본 명세서에 개시된 이러한 기능에 대한 세부 내용을 감안하여, 동기화 및 집계(aggregation) 기능을 구현하기 위한 상이한 유형의 회로를 구축할 수 있을 것이다. 예를 들어, 동기화 로직(54)은 동기화 요청(56) 및 동기화 확인(57/58)을 전송하기 위해 전용 배선을 사용할 수 있다. 동기화 로직(54)은 전용 배선에 대한 대안으로서 상호연결을 통해 전달되는 패킷을 대신 사용할 수 있다. 예를 들어, 동기화 요청(55/56) 및/또는 동기화 확인(57/58)은 각각 하나 이상의 패킷들의 형태로 전송될 수 있다.
도 5를 참조하면, 도 5는 동기화 영역의 개념을 보다 자세히 예시한다. 도 5에 도시된 바와 같이, 실시예에서, 게이트웨이(52)의 레지스터(59)에 기입되는 동기화 영역의 표시는 다수의 상이한 가능한 외부 동기화 영역들, 예를 들어 zone_1 또는 zone_2 중 하나를 지정하는데 사용될 수 있다. 실시예에서, 이들은 상이한 계층적 레벨들에 대응한다. 즉, 각각의 상위 계층 레벨(92)(예를 들어, 영역 2)은 적어도 하나의 하위 계층 레벨의 2 이상의 영역들(91A, 91B)을 포함한다. 도 9를 일례로 사용하면, 게이트웨이들 및 가속기들에 대한 가장 왼쪽의 2개의 게이트웨이는 동기화 영역 0을 가질 수 있으며, 여기서는 2개의 게이트웨이들 중 하나가 마스터이다. 유사하게, 가장 오른쪽에 있는 2개의 게이트웨이들 및 가속기들은 2개의 게이트웨이들 중 하나가 마스터인 동기화 영역 0을 가질 수 있다. 다음으로, 도면 전체인 동기화 영역 1이 있을 수 있다(그러면 임의의 게이트웨이가 동기화 마스터로 지정될 수 있음). 그러면 여러 계층들의 동기화가 프로그램에 의해 이용될 수 있다:
1. 내부 가속기들만 동기화 - 동일한 가속기 상의 타일들이 동기화될 수 있음.
2. IPU + 게이트웨이만 (데이터) 동기화 - 동기화를 위해 게이트웨이를 요청하는 단일 가속기(예: 데이터 교환의 조정).
3. 가장 왼쪽의 동기화 영역 0 (각 게이트웨이에 크레딧이 있거나 없음).
4. 가장 오른쪽의 동기화 영역 0 (각 게이트웨이에 크레딧이 있거나 없음).
5. 동기화 영역 1 (각 게이트웨이에 크레딧이 있거나 없음).
상기 표시는 동기화를 위한 게이트웨이 관련(involvement)(즉, 게이트웨이(52)와 가속기(51) 사이에서 데이터가 전송될 것임)를 나타낼 수 있다. 상기 표시는 게이트웨이(52) 이외의 추가 게이트웨이의 관련을 나타낼 수 있으며, 여기서 가속기(51)는 게이트웨이(52)를 통해 상기 추가 게이트웨이와 통신할 수 있다. 따라서, 대응하는 동기화 명령이 실행될 때, 이러한 동기화 명령을 실행하는 타일(53)은 게이트웨이(52)와의 데이터 전송을 통해 호스트(63)와 함께 동기화될 것이다. 추가 게이트웨이가 관련됨으로 표시되는 경우, 가속기(51)로부터의 동기화 요청은(게이트웨이(52)에서 수신된 다른 동기화 요청들과 집계된 후) 추가 게이트웨이로 업스트림으로 통과될 수 있다. 게이트웨이(52)는 가속기에 동기화 확인을 제공하기 전에, 추가 게이트웨이로부터의 동기화 확인을 기다린다. 이러한 시나리오는 도 8과 관련하여 나중에 자세히 설명된다.
외부 동기화 영역을 나타내는 레지스터(59) 내의 표시에 응답하여, 게이트웨이(52)는 외부 동기화 영역의 가속기에 동기화 확인(57)을 전송한다. 가속기 내의 전용 하드웨어 동기화 로직(54)은 게이트웨이로부터 동기화 확인(sync_ack)(57)을 수신하고 그리고 동기화 확인(58)을 표시된 그룹의 타일들(4)로 전송한다. 동기화 로직(54)은 동기화 요청(sync_req)(55)이 해당 영역의 모든 타일들(4)로부터 수신된 경우에만 동기화 확인 신호(58)(sync_ack)를 시그널링된 동기화 영역의 타일들로 반환할 것이다(글로벌 동기화가 아닌 경우 해당 영역 외부의 다른 타일들에 대해서는 대기하지 않을 것이다).
다른 실시예에서, 레지스터(59)의 표시에 의해 지정될 수 있는 동기화 영역들은 본질적으로 계층적인 것으로 제한되지 않는다는 점에 유의한다. 일반적으로, 레지스터(59)의 표시에는 임의의 종류의 그룹핑에 대응하는 모드들이 제공될 수 있다. 예를 들어, 모드들은 오직 비계층적 그룹들 중에서만 선택하거나 계층적 그룹들과 하나 이상의 비계층적 그룹들(적어도 하나의 그룹이 다른 그룹 내에 완전히 중첩되지 않음)의 혼합 중에서 선택할 수 있게한다. 이러한 것은 프로그래머 또는 컴파일러가, 최소한의 코드 밀도로, 더 넓은 동기화가 요구될 때까지 서로 비동기식으로 실행할 수 있는 내부-동기화 그룹들의 서로 다른 레이아웃들 중에서 선택할 수 있는 유연성을 가능하게 한다.
설명한 바와 같이, 일부 동기화 배리어들은 가속기의 타일들을 호스트로부터의 데이터와 동기화하는 것과 관련이 있지만, 일부 동기화 배리어들은 그렇지 않다. 글로벌 동기화 영역(92)에 대한 일례가 도 6에 개략적으로 도시되어 있다. 시스템은 호스트(63)와의 동기화를 또한 필요로 하는 배리어(90)가 부과되기 전에, N 개의 동기화 배리어들(80)을 통과하는 N 개의 슈퍼 스텝들을 수행할 수 있다. 호스트(63)와의 동기화 배리어(90)에서, 호스트(63)로부터 게이트웨이(52)로 전송된 데이터는 게이트웨이(52)로부터 가속기(51)로 전송된다. N 개의 동기화 배리어들은 관련 동기화 그룹(92)의 모든 (비-절제: non-abstaining) 타일들(4)으로부터의 동기화 요청을 필요로 하지만 호스트(63)는 아니다. 후속 동기화 배리어(80)은 동기화 그룹(92)의 모든 (비-절제: non-abstaining) 타일들(4)로부터의 동기화 요청을 요구한다. 또한, 동기화 배리어(80)을 통과하기 위해서는 게이트웨이가 특정 배리어을 통과하기에 충분한 개수의 ESP 크레딧을 저장해야 한다. 이 배리어(90) 이후에, 예를 들어 하나 이상의 타일(4)에 대해 호스트(63)에 계산 결과를 보고하기 위해 게이트웨이와 하나 이상의 타일(4) 사이에서 교환(50")이 수행될 수 있다.
이제 호스트(63)가 가속기(51)와 상호작용하고 데이터를 교환하는 방법을 더 상세히 예시하는 도 7을 참조한다. 호스트(63)는 가속기(51)가 프로세싱할 데이터를 제공하도록 구성된다. 가속기(51)는 데이터를 프로세싱하고 프로세싱 결과를 호스트(63)에 전달하도록 구성된다. 게이트웨이(52)는 데이터 교환을 위해 호스트(63)와 가속기(51) 사이에서 관리되는 방식으로 데이터를 스트리밍하는 역할을 수행한다. 이 예에서, 가속기(51)는 앞선 도면을 참조하여 전술한 바와 같이 IPU 일 수 있다. 그러나, 게이트웨이(52)는 다른 유형의 가속기(51)와 호스트(63)를 인터페이싱하기 위해 사용될 수 있다.
교환 동기화 포인트를 통한 호스트(63), 게이트웨이(52) 및 가속기(51) 간의 데이터 동기화는 게이트웨이 데이터 일관성과 I/O 작업에 대한 준비를 보장한다. 게이트웨이(52)와 가속기(51) 사이의 데이터 가용성은 ESP 크레딧의 크레딧 메커니즘을 통해 프로세싱된다. 하나의 크레딧은 하나의 ESP를 통과시킬 수 있다. ESP에 앞서 게이트웨이 메모리(114) 준비는 "사전 작업(pre-wark)" 명령을 실행하는 게이트웨이(52)에 의해 핸들링된다. ESP 이후의 데이터 핸들링은 "사후 작업(post-work)" 명령을 실행하여 수행된다. 후술하는 PPE 실행 엔진(123)은 사전 및 사후 작업 명령을 실행한다.
도 7에 도시된 바와 같이(그리고 도 5도 참조), 게이트웨이(52)는 적어도 하나의 "로컬 동기화 전파 모듈"(LSPM)(117) 및 적어도 하나의 "로컬 동기화 배리어 모듈"(LSBM)(118)을 포함한다. LSBM(118)은 PPE에 대한 일종의 프록시로 간주되며 그리고 가속기에서 실행되는 프로그램이 호스트에서 분리될 데이터 배치들(batches)을 프로세싱하게 할 수 있다. 가속기(51)/게이트웨이(52) 동기화는 게이트웨이(52)에 데이터를 제공할 때 호스트(63) 활동으로부터 비동기적으로 실행될 수 있다. LSBM(118)은 위에서 논의된 ESP 크레딧을 저장하도록 구성된다. LSBM은 LSPM(117)에 액세스할 수 있다.
LSBM(118)은 호스트(63)가 각각의 동기화 그룹(92)에 참여할 수 있게 하는 하드웨어 회로를 포함하며, 여기서 LSBM(118)은 PPE에 대한 프록시로서 동작하도록 구성된다. 타일들(4)에 의해 방출된 동기화 요청(56)은(만일, 이것이 게이트웨이 개입 동기화인 경우), 게이트웨이(52)의 LSPM(117) 및 LSBM(118) 둘다를 사용할 것인 반면에, 게이트웨이(52)와 가속기(51) 간의 데이터 전송을 포함하지 않는 동기화를 위한 동기화 요청(56)은 LSPM(117)에 의해 수신될 것이고 그리고 LSBM(118)을 관련시킴이 없이 요청 타일들로 반환될 것이다. 따라서, 타일들(4)은 가속기(51)가 LSBM(118)을 통해 게이트웨이와 상호작용할 필요가 있을 때 실행하는 프로그램에 의해 결정한다.
만일, 가속기(51)가 게이트웨이와 상호작용해야만 한다면, LSBM(118)은 동기화 요청(56)이 수신될 때 동기화 배리어가 통과되도록 구성되며, 0보다 큰 ESP 크레딧 개수를 제공한다. 동기화 배리어가 통과되는 것을 허용하는 것은 동기화 확인(도시되지 않음)을 생성하고 그리고 이러한 동기화 확인을 가속기(51)로 보내는 것을 포함한다.
전술한 바와 같이, 게이트웨이(52)는 자신과 가속기(51) 사이의 인터페이스와 관련된 크레딧 세트를 저장한다. 이러한 크레딧은 본 명세서에서 교환 동기화 포인트(Exchange Synchronization Points: ESP) 크레딧으로 지칭된다. 그러나, 해당 기술분야의 당업자라면, 이러한 이름이 크레딧을 편리하게 식별하기 위한 것일 뿐이며, 크레딧의 성격에 대한 제한을 의미하지 않음을 이해할 것이다. ESP 크레딧은 하나의 배리어에 대해 데이터 교환 작업을 실행할 수 있는지 여부를 제어하기 때문에 배리어 크레딧이라고도 한다.
LSBM(118)의 ESP 크레딧 수가 0이면, 동기화 요청(56)이 수신되고 레지스터(59)의 해당 표시가 게이트웨이와의 데이터 전송이 필요하다는 것과 같은 경우, LSPM(117)은 동기화 배리어가 통과되게 허용하지 않으며, 따라서 ESP 크레딧 수가 0 보다 클 때까지 그룹(92)의 타일들(4)이 다시 실행되는 것을 허용하지 않는다. 교환 동기화 포인트에서 가속기(51)로의 전송을 위한 데이터가 게이트웨이(52)에서 이용가능하게될 때 ESP 크레딧이 생성될 수 있다. 일부 경우, 이러한 데이터는 호스트(63) 또는 부착 네트워크(network attached) 또는 기타 외부 저장소로부터 상기 데이터가 전송되는 결과로서 이용가능해질 수 있다. 다른 경우, 이러한 데이터가 다른 게이트웨이로부터 전송되는 결과로서 이용가능해질 수 있다. 다른 게이트웨이로부터 수신된 데이터는 다른 가속기 또는 다른 호스트 또는 원격 저장소로부터의 데이터일 수 있다.
일부 실시예에서, 게이트웨이(52)에 의해 보유되는 복수의 ESP 크레딧 세트들이 있을 수 있다. 상이한 동기화 그룹들에 대해 상이한 세트들의 크레딧이 있을 수 있다. 이 경우, 하나의 동기화 그룹에 대응하는 동기화 요청(56)은 게이트웨이(52)로 하여금 상기 요청을 확인(acknowledge)하도록 할 수 있지만(해당 그룹에 대한 ESP 크레딧 수가 0이 아닌 경우), 다른 동기화 그룹에 대응하는 동기화 요청(56)은 게이트웨이(52)로 하여금 상기 요청을 확인하게 하지 않을 수 있다(만일, 그 그룹에 대한 ESP 크레딧 수가 0 인 경우). 또한, 게이트웨이(52)와 통신하도록 구성된 상이한 가속기들에 대해 상이한 크레딧 세트들이 있을 수도 있다. 도 12에 도시된 바와 같이, 각 게이트웨이(163)는 두 개의 가속기(162)와 통신하도록 구성되어 있으므로, 게이트웨이(52)는 각각의 가속기(162)에 대한 2 세트의 ESP 크레딧을 저장할 수 있다. 만일, 각각의 가속기(162)가 게이트웨이 데이터 전송을 필요로 하는 2 개의 가능한 동기화 그룹들을 갖는 경우, 이는 총 4 세트의 크레딧이 각 게이트웨이(163)에 의해 보유되게 한다.
동기화 그룹의 타일들(4)은 동기화된 N 배리어들(동기화 요청들이 LSPM 117에 전달되고 확인됨)을 통해 계속 실행되도록 허용할 수 있으며(게이트웨이로 전혀 지연됨이 없이), 이후, 동기화 그룹의 타일들(4)은 LSBM(118)을 통해 게이트웨이와 동기화해야한다(그 다음 게이트웨이와 데이터를 교환할 수 있다). 예를 들어, 도 6을 참조하자.
위에서 설명한 바와 같이, 타일들(4)에서 실행되는 소프트웨어는, 동기화를 위해 게이트웨이 개입(involvement)이 요구되는지에 대한 표시(이는 동기화 요청에 포함되거나 별도로 전송될 수 있음)를 전송함으로써 게이트웨이와 동기화를 요청하도록 프로그래밍된다. 이러한 표시는 게이트웨이(52)의 레지스터(59)에 저장된다. 이러한 실시예에서, 위에서 설명된 크레딧 제어 메커니즘은 게이트웨이 개입을 요구하는 것으로 마킹된 동기화들에 대응하는 배리어들에 대해 LSBM(118)에 의해서만 적용된다(임의의 소정 배리어에 대한 게이트웨이의 "개입"은, 호스트를 대신하여 LSPM(118)에 의한 동기화 확인(sync ack)의 프록시 승인(granting)(LSBM)이거나 또는 때때로는 LSBM(118)에 더 많은 ESP 크레딧을 명시적으로 부여하는 것이다). 실시예에서, 게이트웨이 관련은 레지스터(59)에 저장된 동기화 영역 표시의 다른 변형들에 의해 선택된다. 즉, 각 동기화 그룹(91, 92)에 대해, 동기화 영역 표시가 취할 수 있는 두 가지 변형들이 존재한다: 즉, zone_1_host, zone_1_no_host; 및 zone_2_host, zone_2_no_host 이다. 타일의 실행 유닛은 동기화 로직(54)이 그에 따라 게이트웨이 개입 마커를 시그널링하게 하도록 구성된다. 그러나, 다른 실시예들에서, 게이트웨이 개입을 요청하기 위해 다른 메커니즘이 구현될 수 있거나 심지어 게이트웨이 개입이 하드와이어되어 항상 부과된다는 것이 배제되지 않는다.
실시예에서, 게이트웨이에 의해 수행되는 배리어들에 대한 준비는 모델 학습의 다음 스테이지를 위해 가속기(51)에 의해 요구되는 경험 데이터 세트들과 같은, 가속기(51)에 의해 페치될(fetched) 데이터의 준비를 포함할 수 있다. 이러한 문맥락에서의 준비는, 저장 디스크 또는 다른 매체로부터 데이터를 페칭하는 것, 가속기(51)에서 실행되는 트레이닝 알고리즘에 의해 요구되는 형태로 데이터를 포맷하는 것 또는 이미지 데이터의 압축을 푸는 것을 포함할 수 있다. 추가적으로, 배리어들을 위한 준비는 가속기(51)에 의해 생성된 출력 데이터를 소비하는 것을 포함할 수 있다. 나중에 논의되는 바와 같이, 이러한 준비의 일부 또는 전부는 게이트웨이(52)에서 수행될 수 있다. 최소한, 상기 게이트웨이(52)는 저장 디스크 또는 다른 매체와 가속기(51) 사이의 경로에 존재한다.
LSBM(118)에 대한 동기화 요청(56)은 프로세싱 요소로부터 네트워크(또는 PCIe) 패킷으로 전달될 수 있고, 및/또는 동기화 확인 응답(57)은 네트워크(또는 PCIe) 패킷으로 반환될 수 있다. 일반적으로, 게이트웨이는 하나 이상의 계층적 동기화 레벨들에 포함될 수 있다.
일반적으로, ESP 크레딧의 개념은 여기에 공개된 예시적인 아키텍처 뿐만 아니라 모든 다중 타일 아키텍처에 적용할 수 있다. 또한, 반드시 BSP 어플리케이션 컨텍스트로 제한되지 않는다. 개시된 기술은 BSP와 같은 단일 랑데부 포인트를 채용하는 시스템과 특정 시너지 효과를 갖거나, 또는 호스트 또는 다른 외부 시스템과 해당 머신 사이의 별개의 랑데뷰 포인트들의 개수가 하나의 랑데뷰 또는 매우 적은 수(예: CSP와 반대)로 제한될 때 효과를 갖는다. 그럼에도 불구하고 본 개시 내용의 적용가능성은 이와 관련하여 절대적으로 제한되지 않는다. 임의의 시스템 또는 어플리케이션에서, 게이트웨이를 개입시킴이 없이 타일들이 특정 개수의 동기화 배리어들을 통과할 수 있게 함으로써, 지연 감소가 성취될 수 있으며, 따라서 다중 타일 서브 시스템이 게이트웨이와 상호작용해야하는 횟수를 감소시킬 수 있으며 대기 시간 패널티가 발생하는 횟수를 감소시킬 수 있다.
더욱이, 비록 실시예들이 카드들 사이 또는 호스트(63)와의 PCIe 인터페이스의 관점에서 예시되었지만, 이것은 제한적이지 않고 다른 유형의 인터페이스, 예를 들어 이더넷이 사용될 수 있다.
더욱이, 구현예는 호스트 시스템(63)과 그렇지 않으면 비동기적으로 실행되는 가속기(51) 사이의 통신을 동기화하는 것으로 제한되지 않는다. 실시예에서, 내부적으로 동기적으로 실행되지만 서로에 대해 비동기적으로 실행되는 2 개의 독립적인 BSP 또는 다른 병렬 프로세싱 서브 시스템들 사이의 동기화를 위해 게이트웨이(52)가 사용될 수 있다. 게이트웨이(52)는 동기화 그룹의 크기가 훨씬 더 큰 크기로 증가되는 것을 허용하고 그리고 이들 더 큰 그룹에 대해 더 효율적인 트리 구조를 가능하게한다.
게이트웨이(52)에서 수신된 데이터 배치들(batches of data)은 메모리(114)에 저장된다. 메모리(114)는 게이트웨이(52)에 의해 사용되도록 예약된 로컬 메모리(예컨대, DRAM)이다. 동기화 요청(56)에 응답하여 게이트웨이(52)에 의해 메모리(114)로부터 데이터가 검색될 수 있으며 가속기(51)로 전송될 수 있다. 경로(116)는 각각의 데이터 배치의 흐름을 예시한다. 각각의 데이터 배치는 배치마다 변할 수 있는 기간 동안 메모리(114)에 유지된다는 점에 유의한다. 이것은 배치가 게이트웨이(52)에 들어가는 시간과 가속기(51)로 푸시되는 시간에 따라 다르며, 반드시 관련이 있는 것은 아니다.
LSPM(117)은 메모리(114)로부터 가속기(51)로 또는 가속기(51)로부터 메모리(114)로의 데이터 전송의 타이밍을 게이트웨이(52)에 나타내도록 구성될 수 있다. 이것은 LSPM(117)이 게이트웨이 메모리(114)의 오버 플로우를 방지하기 위해, 가속기(61)로부터 메모리(114)로 데이터를 배치하기 위한 적절한 타이밍을 지시할 수 있게한다.
더욱이, 호스트/원격 저장소로부터 게이트웨이 메모리(114)로의 데이터 흐름은 게이트웨이 메모리(114)의 오버 플로우를 방지하기 위해 관리된다.
도 7에서, 가속기(51)에 의한 프로세싱을 위한 데이터는 호스트(63)로부터 게이트웨이(52)로 전송되어 로컬 메모리(114)에 저장된다. 데이터는 RDMA 판독(RDMA read)을 통해 게이트웨이(52)에 의해 풀링되거나 또는 호스트(63)에 의해 게이트웨이(52)에 대해 행해진 RDMA 기입(RDMA write)을 통해 기록될 수 있다.
도 11을 참조하면, 도 11은 데이터(116)가 네트워크 부착 저장소(151)로부터 게이트웨이(52)에 의해 검색되는 대안적인 방식을 도시한다. 네트워크 부착 저장소(151)는 본 명세서에서 원격 저장소라고 지칭될 수도 있다. 도 11에서, 유사한 요소들은 유사한 참조번호로 표시된다.
도 11에서, 호스트(63)는 게이트웨이(52)로 디스크립터(119)를 전송한다. 디스크립터(118)는 게이트웨이(52)에 액세스할 수 있는 네트워크 부착 저장소(151)의 위치를 식별한다. 디스크립터(119)를 참조하는 데이터 페치 명령을 실행할 때, 게이트웨이(52)는 네트워크 부착 저장소(151)로부터 데이터(116)를 검색한다. 다음으로, 게이트웨이(52)는 데이터를 가속기(51)로 전송하기 전에 데이터(116)를 메모리(114)에 저장한다.
일부 실시예에서, 디스크립터(119)를 호스트(63)로부터 게이트웨이(52)로 전송하는 대신에, 게이트웨이(52)에 의해 저장된 사전 컴파일된 코드는 디스크립터를 포함한다. 이 경우, 게이트웨이(52)는 호스트의 개입없이 원격 저장소(151)로부터 데이터를 자율적으로 검색한다. 어플리케이션의 일부 예에서, 게이트웨이(52)는 외부 호스트(63)가 필요하지 않도록 독립형 어플라이언스로서 기능하는 시스템 온 칩(System on Chip: SoC)을 포함한다. 전체 어플리케이션 스택은 SoC 또는 더 광범위한 시스템의 SoC 중 하나에서 직접 실행된다. 게이트웨이(52)는 외부 호스트(63) 프로세서와 상호작용하는 제 1 모드 및 그러한 외부 호스트(63)가 필요하지 않은 제 2 모드에서 동작하도록 구성될 수 있다. 게이트웨이(52)의 나머지 부분들(예컨대, 도 8을 참조하여 설명된 스트리밍 엔진)은 게이트웨이(52)가 동작하도록 구성된 이러한 모드에 관계없이 동일한 기능을 수행한다.
게이트웨이(52)를 더 자세히 예시하는 도 8을 참조한다. 도 8은 데이터가 게이트웨이(52)를 통과하는 다양한 경로를 보여준다.
도 8은 가속기(51)에 의해 프로세싱되는 데이터(120)가 호스트(63) 또는 원격 저장소(151)로부터 메모리(114)로 전송되는 방법을 도시한다. 이미 언급한 바와 같이, 일부 예들에서, 데이터(120)는 호스트(63)로부터 게이트웨이(52)로 전송된다. 다른 예들에서, 데이터(120)는 게이트웨이(52)에 의해 수행된 원격 저장소(151)로부터의 판독 요청에 응답하여, 로컬 또는 원격 저장소(151)(예를 들어, 네트워크 부착 저장소)로부터 수신된다. 게이트웨이(52)는 RDMA를 통해 원격 저장소(151)로부터 데이터(120)를 검색한다. 데이터(120)는 데이터 센터 포트를 통해 수신된다. 추가로, 데이터를 검색할뿐만 아니라, 게이트웨이(52)는 데이터(도시되지 않음)를 호스트(63)/원격 저장소(151)에 기입한다. 데이터 기입은 데이터 센터 포트를 통해 이루어진다. 교환 페이즈 동안, 데이터는 게이트웨이 메모리(114)로부터 가속기(51)로 전송될 수 있다.
교환 페이즈 동안 게이트웨이 메모리(114)로부터 가속기(51)로 데이터를 전송하는 대신에 또는 이에 부가하여, 데이터는 가속기(51)로부터 게이트웨이(52)로 전송될 수 있다. 가속기(51)는 데이터 패킷의 형태로 데이터를 게이트웨이(52)로 전송하도록 구성되며, 여기서 각각의 데이터 패킷은 주소를 나타내는 헤더를 포함한다. 게이트웨이(52)는 데이터 패킷의 주소를 사용하여 데이터 패킷을 어디로 전송할지를 결정한다. 예를 들어, 데이터 패킷은 로컬 메모리(114)에 저장될 수 있다. 데이터 패킷은 추가 게이트웨이(128)로 전송될 수 있다. 데이터 패킷은 추가 게이트웨이(128)에 연결된 가속기로 발송될 수 있다. 데이터 패킷은 호스트(63)/원격 저장소(151)로 전송될 수 있다.
데이터(120)는 스트리밍 엔진(124)(가속기(51)로의 전달을 위해 메모리(114)로부터 데이터(121)의 검색을 담당 함)의 제어하에 게이트웨이(52)를 통과하여 메모리(114)로 이동한다. 스트리밍 엔진(124)은 데이터 스트리밍 동작의 실행을 수행한다. 데이터 배치를 위한 이러한 동작들은 작업 디스크립터(WD)에 의해 지정될 수 있다. 스트리밍 엔진(124)은 2 개의 실행 엔진들 및 코드 메모리(미도시)를 포함한다. 실행 엔진들 중 하나는 데이터 무버 엔진(Data Mover Engine: DME)(122)이고 다른 하나는 사전/사후 작업 엔진(Pre/Post Work Engine: PPE)(123)이다. 이들은 컴파일러에 의해 생성된 실행 가능 이미지로서 코드 메모리에 로드된 명령들을 실행한다. 스트리밍 엔진(124)은 DME(122)에 의한 실행을 위한 작업 명령들의 세트와 PPE(123)에 의한 실행을 위한 작업 명령들의 세트를 갖는다. DME 및 PPE에 대한 명령들의 세트는 컴파일 시간에 설정된대로 WD에 의해 조정된다. 하나의 데이터 교환 동기화 포인트에 대한 이러한 명령들은 단일 WD로 함께 그룹화될 수 있다. DME(124)는 실행가능 이미지의 DME 섹션에서 발견되는 특정 DME 명령에 의해 작동된다. DME(124)는 소정의 ESP와 관련된 데이터 무버(DMOV) 명령들의 세트로 네비게이팅하기 위해 WD를 사용한다. PPE(123)은 실행가능 이미지의 PPE 섹션에서 발견되는 특정 PPE 명령에 의해 작동된다. PPE(123)는 소정 ESP와 관련된 사전/사후 작업 명령들의 세트로 네비게이팅하기 위해 WD를 사용한다.
가속기(51)와의 데이터 교환 이전에, PPE의 사전 작업(pre-work)이 준비되어야한다. WD에서 PPE의 사후 작업은 교환이 완료된 후에만 시작할 수 있다. 데이터 교환은 동기화 요청(56)이 확인되고 그리고 가속기(51) 및 스트리밍 엔진(124) 둘다에 시그널링된 직후에 발생한다. 이러한 요청/확인(ack)은 "교환 동기화 포인트"(ESP)를 시그널링한다.
스트리밍 엔진(124)은 상이한 데이터 스트리밍 모델을 지원한다.
모든 모델은 호스트가 ESP 크레딧 소비를 엄격하게 제어할 수 있는 구성을 지원한다. 이것은 호스트(63), 게이트웨이(52) 및 가속기(51) 사이의 I/O 작업의 조정을 지원할뿐만 아니라, 게이트웨이 메모리(114)를 이용하지 않는 다른 가속기 레벨 I/O 메커니즘에 필요한 경우 가속기(51)을 정지시키는 메커니즘을 지원한다. 이것은 또한 브레이크-포인트를 설정하거나 가속기의 전체 패브릭을 단일 스테핑하는데 사용되는 메커니즘일 수 있다. 호스트(63)로부터의 엄격한 흐름 제어하에 모델을 실행할 때, 호스트(63)에 의해 부여된 ESP 크레딧은 PPE 스케줄러에 의해 "ESP 크레딧 레지스터"(LSBM 118의 일부)로 전송된다. ESP 크레딧 레지스터는 게이트웨이(52) 하드웨어 및 펌웨어에 의해서 판독/기입될 수 있다.
스트리밍 엔진(124)에 의해 지원되는 제 1 스트리밍 모델은 "어드밴스드 게이트웨이(GW) 푸시"라고 지칭된다. 어드밴스드 GW 푸시에서, PPE(123)는 외부 저장소 및 게이트웨이(GW) 메모리(114)로/로부터 데이터를 스트리밍하는 반면에, DME(122)는 데이터를 가속기(51)로 푸시한다. 실행은, 게이트웨이에 의해 보유되는 컴파일된 실행가능 이미지의 명령들에 기초한다. 스트리밍 엔진(124)을 위한 실행가능 이미지의 생성은 가속기 컴파일러와 통합된다. 컴파일러는 두 개의 관련 컴파일된 코드 시퀀스 또는 실행가능 이미지를 생성한다. 이들 중 첫 번째는 가속기(51)에서 실행되고, 두 번째는 게이트웨이에서 실행된다. 일부 실시예에서, 호스트(63)는 컴파일된 코드 시퀀스를 가속기(51) 및 게이트웨이(52)에 제공할 수 있다.
"게이트웨이 푸시 모델"은 게이트웨이(52)가 데이터를 푸시하는 사용 모델이다. 이 모델은 "게이트웨이 풀(pull) 모델"(아래에서 논의됨)과 다른데, 이것은 합의된 시점(합의된 ESP에서)에 데이터를 가속기(51)에 푸시한다는 점에서 다르다. 이러한 일반 푸시 모델은 병렬 프로그래밍을 위한 다양한 유형들의 메모리 일관성 프로토콜(Memory Consistency Protocols) 또는 브리징 모델(Bridging Models)을 지원할 수 있다. 일례들은, 벌크 동기 병렬(Bulk Synchronous Parallel: BSP), 스테일 동기 병렬(Stale Synchronous Parallel: SSP), 및 비동기 병렬(Async Parallel)을 포함한다.
어드밴스드 게이트웨이(GW) 푸시 모델은 푸시될 데이터 입력(가속기에 상대적인)의 가용성뿐만 아니라 가속기(51)가 데이터를 출력할 게이트웨이(52) 데이터 버퍼의 가용성을 제어하기 위한 크레딧 메커니즘을 사용한다. 게이트웨이(52)는 외부 노드(호스트, NAS 또는 다른 게이트웨이)와 데이터를 전송하기 위해, 데이터 무버(Data Mover) 명령들(DME 122가 데이터를 가속기(51)로 푸시하고 있음) 및 사전/사후 작업 엔진 명령들 둘다를 모두 실행한다. PPE(123)은 외부 I/O 병목 현상으로 인해 가속기 입력 데이터를 사용할 수 없는 경우 ESP 크레딧 누락을 통해 DME(122)를 효과적으로 지연(stalling)시키는 역할을 한다. 가속기 출력 데이터(원격 호스트/저장소로 향함)가 외부 I/O 병목 현상으로 인해 게이트웨이(52) 메모리(114)에 쌓이는 경우에도 유사한 지연(stall)이 필요하다.
이러한 모델은 게이트웨이(52)가 더 낮은 지연으로 데이터를 전달할 수 있게하는데, 왜냐하면 이러한 모델은 가속기(51)로의 푸시가 발생하기 전에, GW 메모리(114)로부터 고속 게이트웨이 전송 메모리(127)(예를 들어 SRAM)로의 데이터 프리-페칭을 허용하기 때문이다. 또한, 푸시는 풀보다 본질적으로 낮은 지연 동작인데, 왜냐하면 풀은 라운드 트립(round trip)을 요구하기 때문이다. 즉, 풀은 판독 요청에 응답하여 데이터 반환이 후속되는 판독 요청을 필요로 하는 반면에, 푸시는 단순히 데이터 전송을 포함한다.
어드밴스드 게이트웨이 푸시 모델의 또 다른 장점은 가속기(51)가 데이터를 가져오는데 귀중한 컴퓨팅 리소스를 소비하지 않고 대신 게이트웨이 DME(122)로 데이터 이동을 오프로드한다는 것이다.
위에서 설명한 메모리 일관성 모델들(BSP, SSP, Async 등)은 푸시 모델과 결합될 수 있다. 가속기(51) 런타임은 외부 배리어들이 DME(122) 및 PPE(123) 데이터 이동을 트리거링하는지를 확인해야만 한다. 푸시 동작의 경우, ESP 크레딧은 게이트웨이(52)에 의해 1 씩 감소될 것이다.
제 2 스트리밍 모델은 어드밴스드 가속기 풀이라 지칭된다. 이러한 스트리밍 모델에서, PPE(123)는 외부 저장소로부터/로의 데이터를 게이트웨이 메모리(114)로 스트리밍한다. 다음으로, 가속기(51)는 PCIe 판독 동작(들)을 통해 게이트웨이(52)로부터 데이터를 풀링한다. PPE(123) 실행은 코드 메모리에 있는 실행가능 이미지로부터의 명령들에 기초한다.
이러한 모델에서, DME(122)는 디스에이블되며 그리고 전술한 동작들을 실행하지 않는다. 반면에, PPE(123)는 활성이고 데이터를 획득하고 외부 저장소로부터 "풀 요청"(즉, 판독 요청)을 발행함으로써 이를 메모리(114)에 저장한다. 다음으로, 가속기(51)는 미리-정의된 ESP에서 메모리(114)로부터 데이터를 풀링할 것이다. 어드밴스드 가속기 풀 모델은 DMOV 명령들 없이, 사전/사후 작업 명령들을 포함하는 실행가능 이미지를 사용한다. 호스트(63)는 예상되는 ESP에서 게이트웨이 메모리(114)에 준비된 유효한 데이터를 풀링하도록, ESP 크레딧 메커니즘을 통해 가속기(51)를 동기화한다.
또한, 이 모델의 경우 PPE(123)는 외부 I/O 병목 현상으로 인해 가속기(51) 입력 데이터를 사용할 수 없을 때 LSPM을 지연시키는 역할을 한다(크레딧 메커니즘을 통해). 가속기(51) 출력 데이터(원격 호스트/저장소로 향함)가 외부 IO 병목 현상으로 인해 게이트웨이 메모리(114)에 쌓이는 경우에도 유사한 지연(stall)이 수행될 수 있다.
제 3 스트리밍 모델은 단순 가속기 풀(simple accelerator pull)이라 지칭된다. 이 스트리밍 모델에서, 호스트(63)는 게이트웨이 메모리(114)로/로부터 데이터를 스트리밍한다. 가속기(51)는 PCIe 판독 동작(들)을 통해 게이트웨이(52)로부터 데이터를 풀링한다. 이 경우 게이트웨이(52)는 PPE 명령을 실행하지 않고, 대신에 호스트(63) 또는 NAS와 게이트웨이(52) 사이의 미리정의된 I/O 체계의 슬레이브이다.
이 모델에서, 게이트웨이 메모리(114)는 메모리 영역의 역할을 하며, 호스트(63)는 그 내용을 제어한다. 메모리(114)에 데이터를 로딩하기 위해 게이트웨이(52)에서 실행되는 명령이 없다. 또한, DME(122)는 디스에이블되고 명령들을 실행하지 않는다. PPE(123)는 명령을 실행하지 않지만, 데이터가 이용가능할 때를 발견하기 위해 가속기(51)를 위해 호스트(63)에 의해 제공된 ESP 크레딧을 업데이트하기 위한 프록시로서 여전히 기능하고 있다.
데이터 스트리밍을 위해 할당된 게이트웨이 메모리(114)는 마치 그것이 PCIe 부착 메모리인 것처럼 호스트(63)에 의해 유지되며, PCIe 대신 RDMA가 사용된다는 유일한 차이점이 있다.
전술한 스트리밍 푸시 모델에서, 게이트웨이(52)는 게이트웨이 메모리(114)를 온-칩 스트리밍 버퍼로 사용함으로써 가속기 메모리 액세스 지연을 숨긴다. 스트리밍 엔진(124)의 전체적인 장점은 데이터 이동이 가속기 계산과 중첩될 수 있고 그리고 타이밍된 푸시 동작에 앞서서 게이트웨이(52)의 메모리(114)에 미리-로드될 수 있다는 것이다. 어드밴스드 GW 푸시 모델은 DMA 동작들에 달리 사용될 수 있는 가속기 리소스를 확보할 수 있다는 추가 이점이 있다.
게이트웨이(52)에서의 데이터 스트리밍 동작의 실행은 스트리밍 엔진(124)에 의해 수행되며, 스트리밍 엔진(124)은 동작 모델에 따라 게이트웨이(52) 명령 세트의 전부 또는 서브세트를 실행할 것이다. 명령들은 실행가능한 이미지로서 게이트웨이 메모리(114)에 로드된다. 스트리밍 엔진(124)에 대한 실행가능 이미지의 생성은 컴파일러가 가속기(51) 및 게이트웨이(52)에서 실행하기 위한 관련 코드를 생성하는 특정 가속기/게이트웨이 컴파일러 환경과 통합될 것이다.
스트리밍 엔진(124)은 가속기가 성능 최적 방식으로 데이터 I/O와 함께 공급되는 것을 보장하기 위해 함께 작동하는 하드웨어 및 소프트웨어 구성 요소의 세트를 포함하는 것으로 보일 수 있다. 게이트웨이(52) 또는 스트리밍 엔진(124)의 동작 모델에 따라, 스트리밍 엔진(124)은 "적시(just in time)" 방식으로, 즉 다음 가속기 컴퓨팅 페이즈에 대한 조건부 진입-포인트를 나타내는 계획된 데이터 교환 페이즈들에서, 데이터를 푸시할 수 있거나, 또는 가속기(51)가 동일한 "적시" 방식으로 풀링하도록 게이트웨이 메모리(114)에서 데이터를 이용가능하게 할 수 있다. 데이터 교환 페이즈 이전에 게이트웨이 메모리(114)에서 관련 데이터를 준비하는 것은, 게이트웨이 스트리밍 엔진(124)에 의해 실행되는 미리-스케줄링된 데이터 스트리밍 명령들을 통해 수행된다. 또한, 푸시 모델은, 데이터 교환 페이즈 동안 감소된 지연을 위해, 게이트웨이 메모리(114)로부터 게이트웨이 전송 메모리(127)(예를 들어, SRAM)로 데이터를 추가로 프리-페치(pre-fetch)할 수 있다. 데이터를 "적시에" 게이트웨이 메모리(114)로 가져오는 개념은, 게이트웨이 메모리(114)가 가속기 계산 알고리즘에 의해 필요한 모든 데이터를 보유하기에 충분히 크지 않은 경우에 유용하다.
PPE 엔진은 WD를 사용하여 소정 ESP와 관련된 사전 작업(PRE) 및 사후 작업(POW) 명령 세트들로 네비게이팅한다. "사전" 및 "사후"라는 용어는 가속기 또는 다른 타겟과의 WD의 데이터 교환 페이즈 전후에 동작이 발생하는지의 여부를 나타낸다. PRW 명령은 호스트(63)로부터 또는 하나 이상의 DMOV 푸시 명령들에 대한 준비로서, 데이터를 (예를 들어, 호스트 63, 원격 저장소 151 또는 추가 게이트웨이 128로부터) 게이트웨이 메모리(114)로 가져오는 주된 책임을 갖는다. "사후 작업"은 데이터를 GW 메모리(114)로부터(예를 들어, 호스트 63 또는 원격 저장소 151로) 이동시키는 주된 책임을 갖는다. PPE 명령들은 PPE 특정 이미지 섹션에 위치한다.
전술한 바와 같이, DME(122)는 "게이트웨이 푸시" 동작 모델에서 활성화된다. 푸시 모델에서, DME(122)는 소정 ESP와 관련된 데이터 무버(DMOV) 명령들의 세트로 네비게이팅하기 위해 WD를 사용한다. DMOV 명령들은 데이터를 가속기로 푸시한다. WD 및 DME 관련 명령들은 DME 특정 이미지 섹션에 위치한다. 게이트웨이(52)의 물리적 DDR 메모리에 있는 이미지로부터 소싱된 DME 명령들은 DMOV 명령들의 일부로서 DME의 DMA 머신에 의해 실행되는 DMA 디스크립터 목록으로 변환된다. DME(122)는 가속기(51)와의 각각의 일괄 데이터 교환의 사이즈를 완전한 제어할 수 있는 중지 기준(stop criteria)에 의해 제어되는 여러 계획된 데이터 교환들을 위한 DMA 디스크립터를 준비할 것이다.
DME(122)는 가속기 메모리 안팎으로 데이터를 스트리밍하도록 설계된 고레벨 프로그램가능 멀티-채널 DMA 머신을 사용한다. DME(122)는 부하 분산을 사용하여 하나 또는 두 개의 고속 데이터 버스를 통해 단일 가속기(51)로의 데이터 스트리밍을 지원한다. 만일, 가속기(51)가 데이터 로딩 시퀀스에 대해 불가지론적이면(agnostic), 부하 분산은 로컬 DME 결정에 의해 달성되고 그리고 실행가능 이미지에서 발견되는 정보에 의해 제어되지 않는다.
WD에 대한 종료-기준(end-criteria)을 갖는 모든 사후-작업 명령들 뿐만 아니라 이러한 WD에 대한 모든 사전-작업 관련 명령들이 완료되면, WD는 "실행 준비"(또는 완전히 준비된)로 간주된다. 오직 이러한 이후에만, WD에 대한 ESP 크레딧이 LSBM(118)의 ESP 크레딧 세트에 추가될 것이다.
WD는 "교환 종료" 기준이 충족되면 "완료된"것으로 간주된다. 이것은, 모든 배포 동작들(deployment opertion)(DMOV)이 완료되고 그리고 가속기(51)로부터 수신된 모든 출력 데이터가 예상 출력 크기와 동일하다고 결정되는 때이다. 예상 출력 크기는 WD에 표시된다.
게이트웨이(52)는 WD가 완전히 준비되었을 때 PPE(123)가 DME(122)에 신호를 보낼 수 있는 방법이 필요하며, 그리고 이는 DME(122)에 ESP 크레딧을 추가함으로써 수행된다(이를 WD 크레딧 또는 교환 크레딧이라고 부를 수도 있음). DME(122) 보다 앞서 여러 WD를 실행하는 PPE(123) 엔진은 여러 ESP 크레딧을 추가하도록 허용될 수 있다. 이렇게하면 가속기가 각 ESP에서 PPE 작업이 완료될 때까지 기다릴 필요가 없다. 최적으로, 각 ESP 트랜지션에서, ESP 크레딧을 이미 사용할 수 있어야만 가속기를 중단함이 없이 배리어가 통과될 수 있다.
하나의 크레딧은 가속기(52)와의 제 1 데이터 교환을 위해 모든 데이터를 전송하는 DME(122)의 능력을 나타낸다. PPE(123)는 PPE가 다음 순차 ESP를 위해 데이터 프리-페치를 완료할 때마다 새로운 크레딧을 추가함으로써 ESP 크레딧을 증가시킨다(즉, 사전 작업 완료). 만일, PPE(123)의 외부 노드들로부터 데이터 프리-로딩이 ESP에 대해 제시간에 완료되지 않은 경우, DME(122)는 ESP 크레딧이 0임을 발견할 것이며, 그리고 PPE(123)가 크레딧 카운트를 증가시킬 때까지 실행이 중단된다. 누락된 데이터로 인해 하나의 가속기(51)를 중단시키면, 동시에 실행되는(즉, 동일한 배리어 동기화 네트워크를 공유하는) 협력 가속기들의 전체 세트가 효과적으로 중단시킬 것이다.
각각의 DMOV 명령은 DMA 동작으로서 하드웨어에서 DME(122)에 의해 실행된다. 이러한 DMOV 명령들은 게이트웨이 푸시 모델이 적용될 때 실행된다. DMOV 명령들은 참조되는 데이터 버퍼(게이트웨이 메모리 114에 있는)에 상주하는 데이터를 그것의 목적지로 이동시킨다. 이것은 일반적으로 가속기(51) 메모리 위치이지만 다른 목적지들도 또한 지원된다.
데이터 스트리밍은 ESP마다 일괄 프로세싱되므로(batched), DME(122)는 게이트웨이 메모리(114)로부터 필요한 개수의 버퍼들이 전송될 때 데이터 전송을 중지할 것이다. ESP 배치(batch) 당 교환된 바이트 수는 WD에 표시되는데, 1) 스트리밍 엔진(124) 푸시 동작들 및 2) 게이트웨이 메모리(114)로의 기입들 둘다에 대한 파라미터 필드들에 의해 표시된다. 푸시할 바이트 수는 동일한 WD에 대해 스케줄링된 모든 버퍼들의 바이트 수와 동일하다. 불일치가 발생하는 경우, 이것은 예외 상황을 야기할 것이다.
DME(122)는 메모리 관리 유닛(MMU)의 지원없이 메모리(114)로부터 데이터를 검색하기 위해 물리적 메모리 주소를 사용하도록 구성된다.
게이트웨이(52)에 이중 버스가 부착된 가속기(51)의 경우, 데이터가 어느 버스로 향해야 하는지를 나타내는 정보가 DMOV에 없다. DME(122)는 2 개의 버스를 통해 전송되는 트래픽의 균형을 맞추기 위해 버스 선택을 제어한다.
DMOV는 게이트웨이 메모리(114)의 사전 초기화된 데이터 버퍼에 링크될 수 있으며, 따라서 이 경우, 관련된 사전 작업 명령이 버퍼를 채울 필요가 없다.
대안적으로, 단일 DMOV(메모리 114에 단일 메모리 데이터 버퍼를 갖는)는 데이터 수집 동작들을 위한 사전-작업 명령들의 세트에 링크될 수 있다. 이와 같이 참조되는 각각의 사전 작업 명령은 특정 소스 및 위치의 데이터를 서로 다른 오프셋들에서 동일한 데이터 버퍼로 가져오며, 따라서 수집 작업을 형성한다. 사전 작업 명령은 데이터를 준비하는 DMOV와 동일한 WD에서 예약된다. 단일 사전 동작은 여러 DMOV 동작들에 의해서 푸시되는 데이터를 제공할 수 있다.
사전/사후 작업 엔진 명령 세트들은 소프트웨어로 구현된 사전/사후 작업 엔진에 의해 실행된다. 주어진 ESP에 대해 "사전 작업"을 수행할 필요가 있고, 주어진 ESP에 대해 "사후 작업"을 수행해야할 필요가 있다.
PPE에 의한 명령들의 자율 실행은 "게이트웨이 푸시" 및 "어드밴스드 가속기 풀" 동작 모델에서 구현될 수 있다. PPE(123)은 RDMA, NFS, NVMoF, iSCSI 또는 기타 지원되는 파일 액세스 프로토콜을 사용하여 게이트웨이 외부 메모리/저장소(114)로/로부터 데이터를 이동한다. 스트리밍 동작의 실행은 실행가능한 이미지의 "사전/사후 작업 섹션들(post/pre work sections)"에서 발견되는 PPE 명령에 의해 직접 제어된다. PPE(123)는 이미지 파일에서 명령들을 가져와서, 이를 로컬/원격 저장소 작업으로 변환하는 소프트웨어 기반의 스트리밍 프로세서로 볼 수 있다. 이러한 전송은 게이트웨이 메모리(114)와 외부 메모리/저장소 사이에서 이루어질 것이다.
PPE(123)는 DME(122)와 병렬로 실행되고, DME(122)는 PPE(123)의 결과에 의존하기 때문에, PPE(123)는 DME(122)에 의해 수행되는 데이터 무버(Data Mover) 동작이 스케줄링되기 전에 자신의 작업을 완료해야한다. 이것은 동일한 데이터 교환 동기화 포인트에 속하는 DME(122) 및 PPE(123) 명령들을, 작업 디스크립터를 이용하여, 함께 그룹화함으로써 실행가능 이미지에서 처리된다.
각 PRW 명령은 외부 저장소에서 데이터를 검색하고, PRW 명령이 가리키는 사전 컴파일된 데이터 버퍼(게이트웨이 메모리 114 내의)에 데이터를 저장한다. PRW 명령들은 데이터 소스에 따라 다른 변형들로 제공된다. 이러한 변형들은 외부 IO 작업을 자세히 설명하는(detailing) 다른 파라미터 세트를 필요로 한다. 이러한 디테일들은 실행 시작 전에 게이트웨이 제어 채널을 통해 제어 플레인에서 설정한 참조된 IO 템플릿에서 조회된다.
컴파일러는 PRW 명령들에 의해 참조되는 버퍼들에 대해 메모리(114)의 영역들을 사전 할당한다. 이러한 버퍼들은 PRW 명령들이 실행될 때 외부 저장소로부터 검색된 데이터를 저장하는데 사용된다.
ESP 크레딧 세트는, 각 WD에 대해 PPE(123)에 의해 증분되는바, 이러한 WD에 대해 스케줄링된 모든 사전-작업 관련 명령들이 완료되고, 그리고 모든 과거 WD들에 대해 스케줄링된 모든 사전-작업 관련 명령들도 또한 완료될 때에만, 그리고 이러한 WD에 대한 종료-기준이 있는 모든 사후-작업 관련 명령들도 또한 완료될 때에만, 각 WD에 대해 PPE(123)에 의해 증분된다.
PRW 명령들은 데이터의 소스/목적지에 따라 다른 변형으로 제공된다.
PRW 명령들의 실행 순서는 실행가능 이미지에서 표현되는 순서이다. 그러나 원격 위치들로부터의 I/O 성능을 최적화하기 위해, PRW 명령들의 더 작은 배치(smaller batches)가 병렬로 실행될 것이다. 데이터가 필요할 때, 하나 이상의 WD로부터의 하나 이상의 PRW 명령은 WD 보다 먼저 실행된다. 이것은, WD에 의해 소비될 데이터 "파이프라인"을 채우는데 필요하다. 게이트웨이(52)는 사전 작업을 위한 병렬 실행 엔진을 가지며, 데이터 "파이프라인"을 채우는 이 사전 작업을 수행할 수 있다.
PRW 명령들의 완료 순서는 실행가능 이미지에서의 명령들의 순서와 다를 수 있다. 하지만, 이러한 순서가 다른 완료는 문제가 되지 않는데 왜냐하면, 시퀀스 요구 사항없이 게이트웨이 메모리(114)에서 데이터가 끝나기 때문이다. 가속기(51)에 대한 이러한 데이터의 배치 순서에 관해서, DME(122)는 명령 순서가 실행가능 이미지에 의해 표현된 것임을 보장한다.
PRW 명령은 항상 종료 기준을 갖는다. PRW 명령은 데이터가 제공된 소정의 WD 가속기(51)에 의해 필요해지기 전에 적시에 완료되도록 GW(52)에 의해 스케줄링된다. 종료 기준은 PRW 명령이 포함된 WD에 의해 표현된다. 데이터를 WD에 제때 제공할 수 없는 경우, 데이터를 사용할 수 있을 때까지 데이터 교환 페이즈가 지연될 것이다. 이것은 데이터가 이용가능할 때까지 가속기(51)의 컴퓨팅 페이즈를 효과적으로 정지시킨다. 이러한 정지들(stalls)의 발생은 카운트되며, 이러한 모니터링으로부터의 피드백은 게이트웨이 및/또는 컴파일러를 최적화하는데 도움이 될 것이다.
POW 명령은 주어진 ESP와 관련된 "사후 작업"을 수행한다. 이것의 주요 기능은 데이터를 게이트웨이 메모리(114)로부터 외부 저장소(예: 호스트 63 또는 원격 저장소 151)로 이동하는 것이다. 게이트웨이 메모리(114)에 저장된 데이터는 가속기(51)로부터 수신된 데이터이다. POW 명령은 데이터의 목적지에 따라 다른 변형으로 제공된다. 이러한 변형들은 외부 IO 동작을 자세히 설명하는 상이한 파라미터 세트를 필요로 할 것이다.
동작시에, 메모리(114)의 데이터 버퍼에 POW 명령들을 링크하는 것은 컴파일러에게 달려있다.
사후 작업의 경우, 결과들이 가속기(51)에 전달되지 않고 대신에, 순수한 데이터에 대한 기입 순서와 관련된 암시적 시맨틱(implied semantics)이 없는 호스트(63), 원격 저장소(151) 저장소 또는 게이트웨이 메모리(114)에 저장되기 때문에 명령들이 순서없이 실행될 수 있다.
POW 명령은 항상 필수 시작 기준이 있으며, 이는 명령이 실행될 수 있는 가장 빠른 시작점을 나타낸다. 필수 시작점 보다 늦게 실행될 수는 있지만 더 빨리 실행될 수는 없다. 따라서, 주어진 WD에서 시작하기 위해 POW 명령이 트리거된다. 이러한 트리거 WD는 POW 명령이 포함된 WD로 표시된다. 이전 WD가 완료되면 가속기(51)는 POW 명령의 버퍼에 기입하는 것을 완료해야만 한다.
POW 명령들은 여러 유형이 있다. 제 1 유형의 POW 명령은 로컬 GW 메모리(114)에서 원격 저장소(151)로 데이터를 이동하는 것을 포함한다. 이것은 제어 채널을 통해 전송된 명령들(예를 들어, 디스크립터 119)에 의해 호스트(63)에 의해 구성될 수 있다. 제 2 유형의 POW 명령은 로컬 게이트웨이 메모리(114)에서 호스트(63)로 데이터를 이동하는 것을 포함한다. 이것은 또한 제어 채널을 통해 전송된 명령들에 의해 호스트(63)에 의해 구성될 수 있다. 제 3 유형의 POW 명령은 게이트웨이 메모리(114)에 저장된 데이터의 조작을 포함한다.
POW 명령은 POW 명령의 파라미터에 의해 표시되는 선택적 종료 기준을 가질 수도 있다. 이것은 다음과 같은 용도로 사용될 수 있다. 첫째, 이러한 선택적 종료 기준은 POW 명령이 특정 WD에 대한 데이터를 준비할 수 있도록 할 수 있다. 이는 사전 작업 명령이 그것이 일부인 해당 WD에서 암시적으로 제공하는 종료 기준을 가지고있는 것과 같은 방식이다. 둘째, 게이트웨이 컴파일러가 외부 노드로 내보내기 위해 POW 명령에서 사용하는 "출력" 버퍼를 재사용하는 경우, 저장되지 않은 데이터를 여전히 보유하고 있는 버퍼들이 가속기(51)에 의해 덮어쓰이지 않도록 보호하는 것이 중요하다. 이 경우, 프로그램은 모든 POW가 버퍼 플러싱을 완료할 때까지 DME 명령 스트림에 소위 NEB(명명된 실행 배리어: Named Execution Barrier) 명령들을 중단 포인트들로 배치함으로써, 버퍼를 보호한다. 따라서 재사용 및 더 많은 가속기(51) 출력 동작들을 위해 버퍼들을 비울 수 있다. 이러한 NEB 명령들은 나중에 설명될 것이다.
POW 명령이 종료 기준을 충족할 수 없는 경우, PPE(123)는 로컬 DME(122)를 일시 중지할 것이며, 결과적으로 모든 가속기들이 동일한 동기화 레벨에서 동기화된다. PPE(123)은 POW 명령을 파싱하고 그리고 종료 기준을 찾는다. 동일한 중지 기준 또는 상이한 중지 기준 또는 중지 기준이 없는 POW 명령이 여러 개 있을 수 있다.
전술한 바와 같이, 컴파일러는 소정의 실행 시점들에서 중지/통과(stop/pass) "실행 배리어"을 설정할 수 있다. 상기 (NEB) 명령은 명명된 "실행 배리어" 완료(NEBC) 객체를 참조하며, 이는 완료되면 NEBC에 신호를 보내도록 지시된 객체들로부터 다수의 완료 보고서들을 수집한다(예컨대, POW 명령들). NEB 명령은 항상 WD에 속한다. 즉, 이것은 WD에 포함된다. 이것은 모두 3 개의 명령 스트림들(DME, PPE_PRE 및 PPE_POST)에 삽입될 수 있다.
"중지(stop)" 상태는 WD에서 명령 실행을 진행하지 않기 위해 DME/PPE에 대한 중지 신호를 나타낸다. 다른 가능한 상태는 "통과(pass)" 이며, 이는 DME/PPE가 WD에서 그들의 명령에 대한 실행을 진행할 수 있게 하며 따라서, NEB 명령을 통과시킨다. 이러한 종료 기준에 링크된 모든 명령들이 NEBC 객체(object)의 "completions_seen" 카운터를 증분시킴으로써 완료를 보고하면, 상태가 "중지"에서 "통과"로 변경된다.
"실행 배리어"의 개념은, 대량 동기 병렬(Bulk Synchronous Parallel: BSP) 메모리 일관성 모델에서 배리어들을 제어하는데 이용될 수 있는 ESP 동기화 프리미티브(primitive)와 혼동되어서는 안된다. 일부 실시예에서, NEB 명령 삽입 포인트는 가속기 프로그램에 대한 특정 ESP와 상관관계가 있지만, 그러한 직접적인 요구 사항은 없다. NEB는 모든 종류의 동기화를 위한 일반적인 중지 포인트로 사용될 수 있다.
NEB 명령의 제 1 사용 일례가 제공될 수 있으며, 여기서 NEB 명령(들)은 DME 명령 스트림의 시작에서 WD에 삽입된다. NEB는 DME 명령을 실행하기 위한 사전 조건을 나타낸다. 사전 조건은 POW 명령을 통해 외부 노드(예컨대, 호스트 63 또는 원격 저장소 151)로의 가속기 출력 버퍼들(또는 링 버퍼 충전 임계 값)의 플러싱을 제어하는데 사용된다. ESP 크레딧 세트는 다음 두 가지가 모두 수행될 때까지 증가하지 않는다(즉, NEB 사전 조건이 충족되고 PRW 명령들이 완료될 때까지). 이것은 WD가 DME에 의해 캐시될 수 있지만, 이용가능한 ESP 크레딧이 없는 경우 더 이상 실행되지 않음을 의미한다. PPE(122)가 PRW 명령의 실행을 완료하면, WD의 모든 NEB 명령들이 "통과"상태인지가 먼저 체크될 것이다. 이들이 통과 상태이고, 그리고 크레딧을 제공하기 위한 다른 모든 사전 조건들이 충족되면, 크레딧이 증분될 것이다. DME 실행 엔진은 만일 NEB 명령이 정지 상태임을 알게 된다면, 예외(exception)를 일으킬 것이다(raise). 이러한 예외는 "중지" 상태에도 불구하고 PPE가 크레딧을 잘못 추가했음을 나타내거나, 또는 DME/PPE 구현에 일부 레이즈 조건(raise condition)이 있음을 나타낸다.
NBE 명령의 제 2 사용 일례가 제공될 수 있으며, 여기서 NBE 명령은 게이트웨이(52)로부터 호스트(63)로의 데이터 익스포트의 흐름 제어를 위해, 사후 작업 명령 스트림에 삽입될 수 있다. 이 경우, 호스트(63)는 NEBC의 상태를 제어한다. 이 모델에서 호스트는, PPE(123)가 데이터를 호스트(63)로 전송하기 위해 POW 명령을 실행할 수 있는지 따라서, NBE 명령을 통과시키는지의 여부를 제어한다. 이것은, 상태를 "통과" 상태로 설정하기 위해, "링크된" NEBC 객체 상태에 대한 업데이트들을 제공하는 호스트에 의해 제어된다. 호스트는 링크된 모든 POW 명령들이 완료된 경우에만, "통과"상태를 설정하도록 허용될 수 있다.
종료 기준은 항상, 명령 스트림에서 NBE의 "다음 발생(next occurrence)" 에 배치된다. "다음 발생"은 POW의 실행과 관련된 것으로 이해되어야 한다.
NBE의 제 3 사용 일례가 제공되며, 여기서 NEB 명령은 호스트(63)로부터의 데이터 임포트 피딩(data import feeding)의 흐름 제어를 위해, 사전 작업 명령 스트림에 삽입될 수 있다. 이 경우, 호스트(63)는 NEBC 의 상태를 제어한다. 이러한 모델에서, 호스트는 PPE(123)가 호스트(63) 또는 원격 저장소(151)로부터 메모리(114)로 데이터를 전송하기 위해 POW 명령을 실행할 수 있는지 따라서, NBE 명령을 통과시키는지의 여부를 제어한다. 이것은, 상태를 "통과" 상태로 설정하기 위해, "링크된" NEBC 객체 상태에 대한 업데이트들을 제공하는 호스트에 의해 제어된다.
NEBC 객체는 항상 프로그램 실행 시작시 중지 상태로 초기화된다. NEB 이후의 다음 명령에서 시작할 때, 동일한 재초기화가 수행된다. 상태를 "중지"로 설정하면 "completions_seen"도 0으로 설정된다.
DME의 경우, DME(122) 자체는 NEB가 아직 보이지 않을 정도로 실행되지 않을 수 있으며, 그리고 링크된 모든 명령들이 NEB 명령이 보여질 때까지 완료된다면, "completions_seen"은 "expected_completions"와 동일하며, 그리고 상태는 "통과"로 관찰될 것이므로, 대기없이 실행이 계속된다. 그렇지 않으면 DME(122)는 링크된 모든 명령들 완료될 때까지 대기한다.
게이트웨이(52)에는 가속기(51) 당 하나의 스트리밍 엔진(124)이 있으며, 각 스트리밍 엔진(124)은 설명된 다양한 모드에서 실행될 수 있다.
패브릭 전체에서 사용할 수 있는 여러 스트리밍 엔진 인스턴스들이 있다. 가속기(51) 당 하나의 스트리밍 엔진(124)이 있으며, 각각의 스트리밍 엔진(124)은 이미지를 실행한다. 각각의 스트리밍 엔진(124)은 하나 이상의 고속 버스(예를 들어 PCIe Gen4)를 통해 가속기(51)에 데이터를 공급한다.
스트리밍 엔진(124)을 사용하여 구현될 수 있는 복수의 상이한 가능한 스트리밍 플로우들이 존재한다. 예를 들어, 제 1 가능한 스트리밍 플로우에서, 게이트웨이(52)는 가속기(51)로의 데이터 스트리밍을 가능하게 할 수 있다. 데이터의 이러한 스트리밍은, 데이터를 제공하도록 구성된 추가 가속기에 의해 개시될 수 있다. 대안적으로, 데이터의 스트리밍은 게이트웨이(52)의 DME(122)에 의해 개시될 수 있으며, 이는 메모리(114)로부터 가속기(51)로 데이터를 전송하는 명령을 실행한다. 이러한 데이터는 호스트(63) 또는 원격 저장소(151)로부터 게이트웨이(52)에서 수신되었을 수 있다.
제 2 가능한 스트리밍 플로우에서, 게이트웨이(52)는 데이터를 원격 가속기로 스트리밍할 수 있다. 가속기(51)는 글로벌 주소 공간에서 원격 가속기를 식별하는 어드레스를 갖는 게이트웨이(52)에 패킷을 제공할 수 있다. 게이트웨이(52)는 원격 가속기로의 전달을 위해 데이터 패킷을 추가 게이트웨이(128)로 전달하기 위해 이러한 어드레스를 용하도록 구성된다.
제 3 가능한 스트리밍 플로우에서, 게이트웨이(52)는 로컬 게이트웨이 메모리(114)로의 데이터 스트리밍을 가능하게할 수 있다. 이것은 로컬 게이트웨이 오프로드의 결과일 수 있다. 메모리(114)로의 데이터 전송은 ESP에서 가속기(51)로부터 이루어질 수 있다. 메모리(114)로의 데이터 전송은 로컬 RDMA 또는 호스트 RDMA의 결과일 수 있다. 데이터는 호스트(63), NAS(151)와 같은 외부 저장소로부터 또는 추가 게이트웨이(128)로부터 메모리(114)로 전송될 수 있다. 이러한 외부 저장소로부터 메모리(114)로의 데이터 전송은, PPE(123)에 의해 수행되는 사전 작업의 일부이다.
제 4 가능한 스트리밍 플로우에서, 게이트웨이(52)는 추가 게이트웨이(128)의 메모리로의 데이터 스트리밍을 가능하게할 수 있다. 데이터 전송은 게이트웨이(52) 자체에 의해 개시될 수 있다. 데이터 전송은 가속기(51)에 의해 개시될 수 있으며, 이는 글로벌 주소 공간에서 추가 게이트웨이(128)를 식별하는 주소를 갖는 게이트웨이(52)에 패킷을 제공한다. 추가 게이트웨이(128)로의 데이터 전송은 게이트웨이 메모리(114)로부터 데이터를 가져오기 위해 추가 게이트웨이(128)에 의해 실행되는 사전 작업 명령의 결과일 수 있다.
제 5 가능한 스트리밍 플로우에서, 게이트웨이(52)는 데이터의 원격 저장소(151)로의 스트리밍을 가능하게할 수 있다. 데이터는 다음 중 하나 이상에 의해 게이트웨이 메모리(114)로부터 원격 저장소(151)로 전송된다: RDMA, 네트워크 파일 시스템(NFS) 프로토콜, NVMoF(Non-Volatile Memory over Fabrics) 및 iSCSI(Internet Small Computer System Interface) 프로토콜. 데이터 전송은 게이트웨이에 의해 시작된다. 원격 저장소(151) 로의 이러한 전송은 PPE(123)에 의한 사후 작업 명령의 실행으로 인해 발생할 수 있다.
제 6 가능한 스트리밍 플로우에서, 게이트웨이(52)는 호스트(63)로의 데이터 스트리밍을 가능하게할 수 있다. 데이터는 게이트웨이 메모리(114)로부터 고정된 호스트 메모리 또는 RDMA 액세스가능 호스트 메모리로 전송된다. 호스트(63)로의 이러한 전송은 PPE(123)에 의한 사후 작업 명령의 실행에 기인할 수 있다.
제 7 가능한 스트리밍 플로우에서, 게이트웨이(52)는 하나 이상의 원격 NFS 서버로부터 데이터의 스트리밍을 가능하게할 수 있다. 이들 서버로부터의 데이터 전송은 게이트웨이(52)에 의해 전송된 요청에 응답하여 발생할 수 있다.
전술한 바와 같이, AI 및 HPC용 병렬 프로그래밍 모델은 일반적으로, 컴퓨팅(Compute), 배리어(Barrier) 및 실행(Exchange)(데이터 전송, Collective 및 Broadcast)의 3-페이즈 단계 반복 실행 모델을 따른다. 그 의미는 가속기가 일반적으로 사전 컴파일된 데이터 교환 동기화 포인트 및/또는 가속기 요청시 실행되는 콜렉티브(collectives)에서 가속기와의 데이터 전송을 필요로 한다는 것이다. 상기 요청은 동기화 포인트를 나타내며, 동기화 포인트에서 가속기(51)는 이용가능한 데이터의 프로세싱를 완료하고, 이제 일부 데이터를 내보낼 것을 요구하고 일부 데이터를 가져와야함을 요구한다. 게이트웨이(52)는 확인된 가속기 교환 요청 직후에 데이터 이동을 스케줄링할 것이다.
게이트웨이 스트리밍 엔진(124)은 데이터 이동을 최적화하고, 따라서 데이터 버퍼 "객체"는 데이터를 보유하는데 중요한 역할을 한다. 실행 동안(게이트웨이 메모리(114)에 있는) 버퍼에 포인터를 전달함으로써, 시스템은 동작 동안 제로 카피 시맨틱(zero copy semantic)을 구현한다. 데이터 버퍼들은 로드된 이미지에서 미리-초기화되거나, 또는 PPE(123)에 의해 충전된다. 두 경우 모두에서, ESP에서 데이터를 가속기(51)로 전송하기 위해, 메모리(114) 내의 버퍼에 대한 참조가 DME(122)에 의해 이용될 수 있다.
데이터가 이미 준비되고 그리고 로드된 실행 가능 이미지에 임베딩된 경우와 같이, 가속기 데이터를 준비하는데 그 어떤 사전 작업도 필요하지 않는 경우가 있을 수 있다. 이러한 경우, PPE(123)은 ESP 크레딧을 DME(122)에 포스팅할 책임이 있다.
가속기(51) 로의 데이터 이동이 없는 ESP도 또한 있을 수 있으며(예컨대, 오직 가속기 출력 데이터만), 이러한 경우 PPE(123)는 DME(122)에 ESP 크레딧을 포스팅할 책임이 또한 있을 것이다. 이 경우, PPE(123)는, 다가오는 ESP 동안 가속기(51)로의 데이터 이동이 없다는 결정에 응답하여, 상기 다가오는 ESP에 대한 ESP 크레딧을 증가시킬 것이다.
ESP 크레딧을 추가하는 것은 항상 PPE(123)이다.
사전 작업 명령에만 대해서: 앞서 발행된 WD들의 사전 작업과 비교하여 WD의 사전 작업이 미리 완료되는 경우, 설계(design)는 사전 작업 완료 정보를 대기열에 추가할 필요가 있을 것이며 그리고 이전의 모든 WD들의 핸들링 이후에 ESP 크레딧 수를 늘려야 할 것이다(이들이 완료되면).
가속기 데이터 임포트(즉, 게이트웨이(52)에서 가속기(51)로의 데이터 전송)의 경우, WD는 교환 동안 얼마나 많은 바이트들이 양방향으로(즉, 가속기(51)와 게이트웨이(52) 사이) 전송될지를 서술한다. 푸시 모델의 가속기(51)는 동일한 정보로 컴파일되며 따라서, 이러한 교환을 위해 모든 예상 데이터가 언제 수신되는지를 알며, 그리고 모든 데이터가 수신된 직후 컴퓨팅 페이즈를 시작한다. 풀 모델에서, 가속기(51)는 게이트웨이(52)로부터의 데이터 판독을 중지함으로써 교환이 종료되는시기를 제어한다.
가속기 데이터 익스포트의 경우: 가속기(51)는 소정 ESP에 대해 게이트웨이(52)로 보낼 데이터의 양을 컴파일된 코드로부터 알고 있으며, 게이트웨이(52)는 WD로부터 이러한 정보를 판독함으로써 얼마나 많은 데이터를 예상해야하는지 안다.
게이트웨이(52)가 가속기(51)로부터 예상되는 정확한 바이트 수를 수신했을 때, 이것은 다음 WD를 실행하기 위해 진행할 것이다. 다음 WD를 실행함에 있어서, 게이트웨이(52)는 게이트웨이 메모리(114)의 데이터에 대한 로컬 동작을 포함하는 사후 작업을 수행할 수 있다. 추가적으로 또는 대안적으로, 게이트웨이(52)는 데이터를 최종 목적지로 전송하기 위해 사후 작업을 수행할 수 있다. 대안적으로, 게이트웨이(52)는 사후 작업을 수행하지 않을 수 있다. 예를 들어, 이것은 데이터가 게이트웨이 메모리(114)에 머물게 할 수 있으며, 메모리(114)가 추후 판독을 위해 오프-가속기 데이터 캐시로서 기능하도록 할 수 있다. 다음 WD를 실행할 때, 게이트웨이(52)는 다음 ESP 이전에 완료되어야하는 사전 작업을 수행할 수 있다. 추가적으로 또는 대안적으로, 게이트웨이(52)는 다음 ESP 이후에 실행될 DMOV 명령을 수행할 수 있다. 만일, 이용가능한 ESP 크레딧이 있다면, DMOV 명령들은 ESP에 앞서서 게이트웨이 전송 메모리(127)에 데이터를 사전-로드하기 위해 사용된다. ESP 크레딧이 없는 경우, DME(122)는 ESP 크레딧을 기다리고, ESP 크레딧이 이용가능할 때 사전-로드를 수행한다.
만일, PPE 명령들(즉, 사후 작업(POW) 및 사전 작업(PRW) 명령들 둘다)이 저장 노드에서 이미 사용가능한 것으로 알려진 정적 데이터에 대해 원격 저장소(114)를 타겟팅하고 있는 경우, 게이트웨이가 데이터에 직접 액세스하기 위한 저장소 프로토콜을 지원하는 한, 해당 노드와의 데이터 동기화가 필요하지 않다.
호스트(63) 메모리는 게이트웨이(52) 및 가속기(51)로 전송되는 데이터의 양에 비해 작기 때문에 호스트(63)는 데이터를 "조각별로(piece by piece)" 자신의 메모리로 가져와야 한다. 이러한 "조각별(piece by piece)" 특성으로 인해, 게이트웨이(52)에 의해 시작된 RDMA 판독(게이트웨이 데이터 임포트)에 대해 데이터가 이용가능한 시기를 제어하도록 게이트웨이(52)와 호스트(63) 사이에 동기화 메커니즘이 필요하다. 마찬가지로, 게이트웨이(52)에 의해 시작된 RDMA 기입(즉, 게이트웨이 데이터 익스포트)의 경우, 유사한 동기화가 필요하다. 전체 AI 어플라이언스의 과제는 게이트웨이/가속기와 지속적으로 데이터를 스트리밍하는 것이므로 이러한 동기화 메커니즘은 AI 성능에 필수적이다. 시스템은 대규모 AI 패브릭으로 확장하기 위해 이에 대한 최소한의 오버헤드로 잘 설계된 솔루션이 필요하다.
스트리밍 엔진(123)은 게이트웨이와 호스트 사이에서 데이터를 이동하기 위한 여러 동작 모드를 갖는다.
제 1 동작 모드에서, 스트리밍 엔진(124)은 호스트(63)로부터의 커맨드에 따라 호스트(63)의 슬레이브로서 실행된다. 제 2 동작 모드에서, 스트리밍 엔진(124)은 코드 메모리에 저장된 사전-컴파일된 명령들에 기초하여 실행된다.
제 1 동작 모드에서, 스트리밍 엔진(124)은 호스트(63)의 슬레이브 역할을 하며 그리고 데이터를 메모리(114)에 저장하고, 호스트(63)의 제어하에 가속기(51)로 전달하기 위해 메모리(114)로부터 상기 데이터를 검색하는 동작을 수행한다.
제 2 동작 모드에서, 스트리밍 엔진(124)은 가속기와 게이트웨이로 구성된 완전한 시스템의 코드를 생성하는데 사용되는 컴파일러로부터 도출된 사전 컴파일된 실행 파일에 따라 호스트(63) 또는 원격 저장소(151)로부터 데이터를 프리페치한다(prefetch). 컴파일러는 게이트웨이(52)(이는 가속기 51로 전달될 데이터를 페치함(fetch)) 및 가속기(51)(상기 데이터를 프로세싱함)에 대한 코드를 생성하는데 사용되기 때문에, 호스트(63), 게이트웨이(52) 및 가속기(51)는 서로 동기식으로 동작할 수 있다. 게이트웨이(52) 파일은 가속기(51)가 필요로하는 데이터를 예측하고, 이것을 메모리(114)에 저장함으로써 관련 컴퓨팅 페이즈에 앞서 배치할 데이터를 준비한다. 게이트웨이(52)는 컴파일러에 의해 생성된 코드에 따라 적절한 시간에서 가속기(51)로 전송할 데이터를 준비한다. DME(122)는 가속기(51)로부터의 동기화 요청(56)에 응답하여, 가속기(51)에 대한 정확한 시간에 지연 최적화된 방식으로 가속기(51)로 이것을 전송한다. DME(122)는 지연 최적화 전달을 위해 가속기(51)에 가깝게 위치한다.
제 3 동작 모드에서, 가속기(51)는 다음 N 개의 배리어에 앞서서, 대응하는 N 개의 배리어들에 대해 메모리(114)로부터 가속기(51)로 전송하기 위해 어떤 데이터를 준비할지를 게이트웨이(52)에 알린다. 이러한 동작 모드에서, 가속기 컴파일러는 미래의 I/O 동작을 예측할 수 있고, 따라서 게이트웨이(52)가 데이터의 전달을 위한 적절한 시간을 갖도록 그러한 커맨드를 게이트웨이(52)에 스케줄링할 수 있다.
컴파일러는 가속기(51)에 의해 실행되는 컴퓨터 코드 명령들의 세트를 생성한다. 이러한 컴퓨터 코드 명령들의 세트는 실행가능 이미지로 지칭될 수 있다. 일부 실시예에서(예를 들어, 전술한 제 2 동작 모드에서), 컴파일러는 게이트웨이(52)에 의해 이행되는 스트리밍 엔진 데이터 이동/프로세싱 커맨드들 관련된 세트를 생성할 수도 있다.
컴파일러는 스트리밍 엔진 당 하나의 실행가능 이미지를 생성한다. 실행가능 이미지는 가속기에서 볼 수 있는 평면 연속 XPU 가상 주소(flat contiguous XPU Virtual Address: XVA) 공간을 참조한다. 이러한 XVA 공간은 내부 가속기 메모리뿐만 아니라 메모리 관리 유닛(MMU) 매핑을 통해 동일한 XVA 공간으로 매핑되는 "스트리밍 엔진 샌드 박스" 메모리를 커버한다. 실행 이미지는 또한 "호스트 샌드박스" 가상 주소(HSVA) 공간을 참조하며, 이는 스트리밍 엔진(122)에 액세스할 수 있는 필수 호스트 메모리를 커버한다. HSVA 공간은 GW 동작 모델인 "GW 푸시 모델" 및 "어드밴스들 XPU 풀 모델"과 관련이 있다.
이들 2 개의 가상 어드레스 공간(XVA 및 HSVA) 내에서, 컴파일러는 스트리밍 엔진(122), 가속기(51) 및 호스트(63)에 필요한 버퍼 리소스들 및 어드레싱가능한 요소들의 존재를 정의하는 역할을 한다.
컴파일러는 또한 제한된 게이트웨이 메모리(114)로 인해 필요한 경우 이터레이션들과 WD의 시퀀스 사이에서 메모리(114)의 게이트웨이 버퍼 재사용을 정의할 책임이 있다. 충분한 메모리가 게이트웨이(52)에 할당되는 한, 버퍼 재사용 최적화는 필요하지 않다.
2 이상의 가속기와 통신하도록 구성된 게이트웨이(52)의 경우, 현재 하나의 가속기가 다른 가속기들에 할당된 스트리밍 엔진 샌드 박스에 액세스하는 것은 불가능하다. 이는 각 가속기 또는 가속기 지원 칩 내부의 MMU 설정에 의해 시행된다. 서로 다른 가속기들의 XVA 공간은 물리적 게이트웨이 메모리에서 중첩되지 않는다. 스트리밍 엔진들은 그들의 별도의 "XPU 샌드 박스들"에서 실행되며 그리고 모든 액세스는 그 자신의 샌드박스 내에 유지되도록 런타임이 적용된다. 가속기의 온-보드 MMU로 인해, 이러한 스트리밍 엔진들 간에 공유되는 공통 메모리 영역을 구성할 수 있다.
도 7에 도시된 가속기로의 데이터 전송을 다시 참조하면, 일부 예들에서 게이트웨이(52)는 호스트(63) 또는 원격 저장소(151)로부터 데이터를 수신하고, 그리고 가속기(51)로의 전송을 위해 고속 게이트웨이 전송 메모리(127)에서 이용가능해지기 전에 이를 메모리(114)에 저장한다. DME(122)는 DME 명령에 따라 메모리(114)로부터 고속 게이트웨이 전송 메모리(127)를 사전 로딩한다(pre-load). 게이트웨이 전송 메모리(127)의 콘텐츠는 핸드셰이크 요청의 완료에 응답하여 가속기(51)로 전송된다. 게이트웨이 전송 메모리(127)로의 이러한 사전 로딩은 전술한 푸시 모델에서 사용된다. 일부 예들에서, 게이트웨이 전송 메모리(127)의 사전 로딩은 ESP 크레딧의 수가 0보다 큰 경우에만 수행된다.
도 14를 참조하면, 도 14는 데이터의 준비, 게이트웨이(52)와 가속기(51) 사이에서의 데이터 교환 및 이러한 데이터의 프로세싱이 어떻게 관련되는지를 나타낸다. 준비(prepare) 및 전개 스테이지들(deploy stages)은 게이트웨이(52)에 의해 수행되는 반면, 컴퓨팅 스테이지들은 가속기(51)에 의해 수행된다. 데이터는 관련 컴퓨팅 페이즈에 앞서서 게이트웨이(52)에 의해 준비된다. 데이터는 가속기(51)에 가능한한 가깝게 저장된다. 가속기(51)가 데이터를 수용할 수 있고, 게이트웨이(52)에 동기화 요청(56)을 전송함으로써 이와 같음을 나타내면, 게이트웨이(52)는 데이터의 외부 종속성없이 가속기(51)에 링크된 포트(들)의 전체 용량을 사용하여 데이터를 전개한다. 전개된 데이터가 가속기(51)에 의해 프로세싱되면, 게이트웨이(52)는 전개될 데이터의 다음 페이즈를 준비한다. 엔진은 이용가능한 모든 게이트웨이 데이터 센터 포트들에 대해 그 동작을 확장한다.
게이트웨이(52)는 호스트(63) 또는 원격 저장소(151)로부터 데이터를 수신할 수 있고 추가 게이트웨이가 필요로 하는 데이터의 저장 및 증강(augmentation)을 수행할 수 있다. 이 데이터는 추가 게이트웨이로 전송될 수 있다. 추가 게이트웨이로 전송된 데이터는 이러한 추가 게이트웨이와 관련된 가속기에 제공될 수 있다. 이것은 병목 현상을 피하는데 유용할 수 있다. 예를 들어, 각 게이트웨이가 원격 저장소(151)로부터 데이터를 독립적으로 검색하여, 원격 저장소(151)에 대한 액세스에 병목 현상을 일으키는 대신, 하나의 게이트웨이(52)가 원격 저장소(151)로부터 데이터를 검색하고 상기 데이터를 복수의 게이트웨이에 제공할 수 있다. 이것은 원격 저장소(151)에 액세스할 때 병목 현상의 문제를 해결할 수 있다.
게이트웨이(52)가 호스트(63) 또는 원격 저장소(151)로부터 데이터를 수신할 때, 이 데이터를 가속기(51)에 제공하기 전에, 게이트웨이(52)는 데이터를 프로세싱한다. 이러한 프로세싱는 스트리밍 엔진(124)에 의해 수행될 수 있다. 상기 프로세싱은 데이터 증강(노이즈 주입), 압축 해제, 디코딩(예를 들어, JPEG 포맷 이미지 및 H264 포맷 비디오와 같은 이미지 및 비디오 데이터에 대한) 중 하나 이상을 포함할 수 있다. 이 프로세싱는 위에서 논의한 단순 가속기 풀 모델에서는 수행되지 않는다.
메모리 사용을 최소로 유지하기 위하여, 데이터는 게이트웨이(52)로 로드될 때 압축되고 그리고 가속기(51)로 전달되기 전의 가능한 최대로 늦은 시간에서 압축해제된다. 게이트웨이(52)는 특정 유형들의 압축에 대한, 지연 최적화된 하드웨어 압축해제 엔진(미도시)을 제공할 수 있다. 또한, 임의의 압축 알고리즘에 대한 확장된 지원을 제공하기 위해 압축 해제는 게이트웨이 소프트웨어에서 구현될 수 있다.
게이트웨이(52)에서 데이터 증강(예를 들어, 노이즈 주입)를 수행함으로써, 오리지널 데이터는 오리지널 포맷으로 한 번 저장되고 한 번 페치될 수 있다. 이후, 이러한 데이터는 각각의 복제된 사본에 적용되는 상이한 증강 설정들을 갖는 다수의 가속기들로 게이트웨이(52)에 의해 복제될 수 있다. 게이트웨이(52)는 하드웨어에서 증강 방법들의 세트를 제공하고 게이트웨이 소프트웨어가 상기 증강을 위한 상이한 알고리즘을 구현하는 능력을 제공한다.
일 실시예에서, 스트리밍 엔진(124)은 2 개의 데이터 가속 피처들을 제공한다. 스트리밍 기능은 복제 피처(replicate feature)와 복제 및 전치(transpose) 피처를 제공한다. 이것은, 트레이닝 데이터가 하나의 게이트웨이로부터 다른 많은 게이트웨이들로 복제될 수 있게하며, 따라서 IO 연결 필요성을 감소시킬 수 있다.
데이터는 호스트(63) 또는 원격 저장소(151)로부터 게이트웨이(52)에서 수신되고 PPE(123)에 의해 메모리(114)에 저장된다(경로 120을 통과한 후). DME(122)는 메모리(114)로부터 경로(121)를 따라 전송될 데이터를 검색하며 그리고 데이터가 가속기(51)로 전송되게 한다. 데이터는 표시된 가속기 포트를 통해 메모리(114)로부터 가속기(51)로 전송된다. 경로(121)를 따른 데이터 전송은 이미 설명된 바와 같이 동기화 신호에 의해 트리거된다.
게이트웨이(52)는 가속기(51)로의 데이터 제공(경로 121를 통한 데이터의 전송을 포함함)이, 호스트(63) 또는 원격 저장소(151)로부터의 데이터 검색으로부터 분리되도록 허용한다. 달리 말하면, 게이트웨이(52)는 호스트(63) 또는 원격 저장소(151)로부터의 데이터 전송이 가속기(51)에 의해 수행되는 계산보다 앞서 진행되게 한다.
도 8은 게이트웨이(52)와 추가 게이트웨이 사이의 데이터 교환을 허용하는 2 개의 추가 데이터 경로를 도시한다. 게이트웨이(52)는 가속기(51)(도시된 가속기 포트에 의해 게이트웨이(52)에 연결됨)와 추가 가속기(도시되지 않음) 사이에서 추가 게이트웨이(128)(도시된 패브릭 포트에 의해 게이트웨이 52에 연결됨)를 통해 데이터가 전송될 수 있는 경로(125)를 포함한다. 게이트웨이(52) 및 추가 게이트웨이(128)는 이러한 경로(125) 상에서 스위치로서 작동하고 그리고 가속기들 사이에서 확장된 데이터 교환 패브릭을 가능하게 한다. 추가 게이트웨이(128)는 연결된 추가 호스트로/로부터 데이터를 전송하도록 구성될 수 있다. 이러한 경로(125)를 따른 데이터 전송은 유니캐스트(즉, 단일 가속기로 향하는 데이터), 브로드 캐스트(지정된 가속기들로 지향됨이 없이 전송된 데이터) 및 멀티 캐스트(지정된 다수의 가속기들로 지향되는 데이터)일 수 있다. 브로드캐스트 모드에서 패브릭 포트에서 전송된 패킷들은 멀티캐스트 그룹 ID를 포함한다. 각 게이트웨이는 각 멀티 캐스트 그룹 ID에 대한 목적지들의 목록이 포함된 테이블을 갖는다. 게이트웨이는 이러한 패킷을 수신하면, 패킷에 포함된 멀티캐스트 그룹 ID에 대응하는 목적지들의 리스트를 테이블에서 조회하며 그리고 상기 패킷을 이들 목적지들로 전송한다.
일 실시예에서 XPU 포트는 특별한 데이터 이동 능력들을 제공하는 커스텀 루트 컴플렉스 구현(custom Root Complex implementation)이다. 게이트웨이 메모리(114)로/로부터 패킷을 전송하는 것에 추가하여, XPU 포트는 또한 패브릭 포트로/로부터의 피어-투-피어 능력을 제공한다. 원격 가속기로 매핑되는 메모리 공간을 타겟으로 하는 패킷들이 XPU 포트에서 검출되며 그리고 적절한 패브릭 포트로 향한다. 수신 패브릭 포트는 패킷을 올바른 목적지 가속기 포트로 지향시킬 것이다. 또한, 게이트웨이는 하나의 패브릭 포트에서 다른 패브릭 포트로 패킷을 전달할 수 있다. 이것은 임의로 큰 패브릭이 횡단되게할 수 있다. 이러한 방식으로, 게이트웨이 패브릭을 통해 완전한 가속기 대 가속기 교환(full accelerator to accelerator exchange)이 가능해진다.
도 8은 또한 게이트웨이(52)와 추가 게이트웨이 사이에서 데이터를 교환하기 위한 데이터 경로(126)를 도시한다. 데이터 경로(126)는 게이트웨이(52)와 추가 게이트웨이(128) 사이의 동기화 및 관리 메시지의 교환을 위해 사용된다. 또한, 데이터 경로(126)는 게이트웨이(52)와 연관된 메모리(114)와 추가 게이트웨이(128)와 연관된 메모리 사이에서 데이터를 교환하기 위해 사용된다. 데이터 경로(126)를 통해 교환된 데이터는 사전 작업 명령이 PPE(123)에 의해 실행될 때 사전 작업의 일부로서 교환된다.
PPE(123)에 의한 사전 작업 명령의 실행에 응답하여, 추가 게이트웨이(128)의 메모리로부터 메모리(114)로 데이터가 전송될 수 있다. 이후, 이러한 데이터는, 다가오는 ESP에서 가속기(52)로의 전송을 위해(예를 들어, 가속기로부터의 PCIe 판독 동작에 의해서 또는 DME(122)에 의한 DMOV 명령의 실행에 의해서), 메모리(114)에서 이용가능해진다. 데이터를 메모리(114)로 전송하기 위한 사전 작업 명령의 실행을 PPE(123)가 완료하면, ESP 크레딧 세트가 증가한다.
전술한 바와 같이, 동기화 영역/그룹(sync zone/group)은 복수의 게이트웨이를 포함할 수 있다. 그러한 경우, 연관된 가속기(51)로부터 수신되는 동기화 요청 대신에 또는 뿐만 아니라, 동기화 요청이 추가 게이트웨이(128)로부터 게이트웨이(52)에서 수신될 수 있다. 이 경우, 이러한 다른 게이트웨이(128)는 "다운스트림 게이트웨이"이라 지칭될 수 있다.
이제 도 15를 참조하면, 도 15는 추가 게이트웨이(128) 및 추가적으로 제 3 게이트웨이(152)와 통신하는 게이트웨이(52)를 도시한다. 동기화 요청(129)이 추가 게이트웨이(128)로부터 수신되면, 게이트웨이(52)가 동기화 마스터가 아닌 경우(즉, 게이트웨이(52)가 동기화 슬레이브인 경우) 제 3 게이트웨이에 동기화 요청(153) 업스트림을 전송함으로써, 게이트웨이(52)는 동기화 배리어가 통과되게 허용할 수 있다. 동기화 요청(129)은 먼저 로컬 가속기(예를 들어, 가속기 51)로부터 수신된 하나 이상의 동기화 요청들(예를 들어, 동기화 요청 56)과 함께 집계될 수 있다. 이 경우, 제 3 게이트웨이로 업스트림으로 전송되는 것은 이 집계된 동기화 요청(153)이다.
대안적으로, 그리고 예를 들어 , 동기화 요청(129)이 다른 게이트웨이(128)로부터 수신될 때 게이트웨이(152)가 게이트웨이(52)의 동기화 영역에 연결되지 않은 경우, 게이트웨이(52)는 게이트웨이(52)가 마스터 게이트웨이인 경우 추가 게이트웨이(128)로 동기화 확인(154)을 전송함으로써 동기화 배리어가 통과되게 할 수 있다. 게이트웨이(128)가 마스터 게이트웨이인 경우, 구성된 모든 다운스트림 게이트웨이들로부터 동기화 요청들이 수신된다는 점을 고려하면, 로컬 가속기들(예를 들어, 가속기 51)로부터 수신된 임의의 동기화 요청들도 또한 확인된다(예를 들어 확인(155)을 전송함으로써).
게이트웨이(52)에 의해 보유되는 LSBM(118)의 ESP 크레딧은 게이트웨이(52)와 추가 게이트웨이(128) 사이에서의 동기화 요청 포워딩을 제어하는데 사용될 수 있다. 가속기(51)와 게이트웨이(52) 사이의 배리어과 마찬가지로, 게이트웨이(52)로 동기화 요청(155)을 전송하는 로컬 가속기(예를 들어, 가속기 51)에 의해 게이트웨이 개입이 표시되는 경우, 오직 ESP 크레딧만이 게이트웨이(52)와 추가 게이트웨이(128) 사이에서의 동기화 요청 포워딩을 제어하는데 사용된다. 이러한 표시는 전술한 바와 같이 레지스터(59)에 저장될 수 있다. 만일, 게이트웨이 개입이 표시되지 않는다면, 동기화 요청(129)이 수신될 때, 동기화 요청(153)이 업스트림으로 전송되고 동기화 확인(154)이 반환될 때 동기화 배리어가 통과된다.
가속기(51)에 의한 게이트웨이 참여가 표시된다고 가정하면, 가속기(51)와 연관된 ESP 크레딧의 수가 0이 아니고, 게이트웨이(52)가 다운스트림 게이트웨이(128)로부터 동기화 요청(129)을 수신한 경우, 게이트웨이(52)가 동기화 마스터 게이트웨이가 아니라면(즉, 동기화 슬레이브 게이트웨이라면), 배리어는 업스트림으로 전달된다. 동기화 요청(129)은 가속기(51)로부터의 동기화 요청(56)과 함께 집계되어, 업스트림 게이트웨이(152)로 전송되는 동기화 요청(153)을 형성한다. 게이트웨이 참여를 요구하는 동기화를 위한 동기화 요청(153)에 대응하는 동기화 확인(156)을 수신할 때 동기화 체인의 각 LSBM(118)의 ESP 크레딧이 감소된다.
가속기(51)에 의한 게이트웨이 참여가 표시되었다고 가정하면, 가속기(51)와 연관된 ESP 크레딧의 수가 0이 아니고, 게이트웨이(52)가 다운스트림 게이트웨이로부터 동기화 요청(129)을 수신한 경우, 게이트웨이(52)가 동기화 마스터 게이트웨이라면, 게이트웨이(52)는 동기화 확인(154)을 다운스트림 게이트웨이(128) 및 자신의 스트리밍 엔진(들)(124)에 전송할 것이다. 동기화 확인을 수신하면, 스트리밍 엔진(124)은 LSBM(118)에 의해 보유된 ESP 크레딧의 수를 감소시킨다.
따라서, 게이트웨이(52)의 LSPM(117)은 LSBM(118)에 ESP 크레딧이 없는 경우, 다른 게이트웨이들(즉, LSPM들)로의 동기화 요청의 전파를 방지할 수 있다. 이것은, 동기화 마스터에 의해 확인(acknowledgement)이 최종적으로 생성될 때, 모든 가속기들이 동시에 슈퍼 스텝을 실행하기 시작할 것임을 보장한다.
게이트웨이(52)는 복수의 인터페이스들, 예를 들어 가속기(51)에 대한 인터페이스, 추가 게이트웨이(128)에 대한 인터페이스, 제 3 게이트웨이(152)에 대한 인터페이스를 포함한다. 게이트웨이(52)는 동기화 목적을 위해 이들 인터페이스들 각각의 방향성을 나타내는 레지스터를 포함한다(즉, 추가 게이트웨이(128)와 같은 엔티티가 게이트웨이(52)의 업스트림 또는 다운스트림인지 여부). 따라서, 레지스터는 다운 스트림 엔티티로부터 게이트웨이(52)가 동기화 요청을 수신함에 응답하여, 어떤 인터페이스들에게 동기화 요청들이 게이트웨이(52)에 의해 전송될지를 나타낸다. 동기화 요청을 전송하기 위한 인터페이스가 없음을 상기 레지스터가 나타내는 경우, 이는 상기 게이트웨이(52)가 동기화 마스터임을 나타낸다. 이 경우 게이트웨이(52)는 동기화 요청들을 수신했던 모든 인터페이스들을 통해 동기화 확인들을 전송한다.
게이트웨이(52)가 슬레이브 게이트웨이로 기능하는 경우, 게이트웨이(52)는 그와 연관된 가속기들(예를 들어, 가속기 51)로부터 하나 이상의 동기화 요청을 수신할 수 있다. 이러한 동기화 요청들은 게이트웨이(52)에 의해 집계된 다음, 게이트웨이(52)는 이들을 추가 게이트웨이(128)로의 업스트림에 전달한다(동기화 요청을 수신하는 게이트웨이 참여를 나타내는 각 로컬 가속기에 대한 이용가능한 ESP 크레딧들이 있다고 가정하자). 추가 게이트웨이(128)도 또한 슬레이브라고 가정하면, 이러한 추가 게이트웨이는 상기 요청과 그 자신의 로컬 가속기들로부터의 모든 동기화 요청들을 수집한 다음, 새로운 집계된 동기화 요청들을 다음 게이트웨이로 전달한다(동기화 요청을 수신하는 게이트웨이 참여를 나타내는 각 로컬 가속기에 대한 이용가능한 ESP 크레딧들이 있다고 가정하자). 이것은 동기화 네트워크에서 병렬로 발생한다. 결국, 마스터 게이트웨이는 모든 다운스트림 게이트웨이들 및 그 자신의 관련 가속기들로부터 동기화 요청들을 수신한다. 그런 다음 동기화가 완료되고 마스터 게이트웨이에 의해 생성된 동기화 승인(동기화 요청을 수신하는 게이트웨이 참여를 나타내는 각 로컬 가속기에 사용할 수 있는 ESP 크레딧이 있다고 가정)이, 동기화 요청을 수신한 엔티티들(즉, 로컬 가속기들 또는 다운스트림 게이트웨이들)에게 다운스트림으로 전송된다. 동기화 확인을 수신하는 각각의 게이트웨이 다운스트림은 동기화 요청을 수신한 엔터티들에게 동기화 확인을 전송할 것이다.
언급된 바와 같이, 동기화 요청은 복수의 로컬 가속기들(예시적인 가속기(51) 뿐만 아니라)로부터 게이트웨이(52)에서 수신될 수 있다. 각 가속기는 서로 다른 ESP 크레딧 세트와 연관된다. 동기화 요청(및 게이트웨이 참여를 나타냄)이 수신된 각 가속기에 대한 모든 ESP 크레딧들이 0이 아닌 경우에만, 게이트웨이(52)는 집계된 동기화 요청 업스트림을 전달하거나(슬레이브인 경우) 또는 동기화 요청을 확인한다(마스터인 경우).
이전과 같이, 동기화 확인을 가속기(51)로 전송한 후, 게이트웨이(52)는 가속기(51)와 데이터를 교환하도록 구성된다.
스트리밍 엔진(124)에 의해 구현되는 게이트웨이 기능을 예시하는 도 10을 참조한다. PPE(123)는 DME(122)와 병렬로 실행되지만, DME(122)가 PPE(123)의 결과에 의존하므로, DME 동작이 스케줄링되기 전에 PPE(123)는 그 결과를 제공해야만 한다. 이것은 사전 컴파일된 실행 가능 이미지에서 또는 가속기(51)로부터 게이트웨이(52)로 전달된 커맨드들의 사용자 프로그램 시퀀싱을 통해 처리된다.
도 10에 도시된 바와 같이, PPE(123)와 네트워크 스택(141) 사이에 위치한 모듈(142)(GDxSM 모듈로 도시됨)이 있다. GDxSM 모듈(142)은 2개의 모듈들, 즉 GW 데이터 임포트 동기화 모듈(GW data import synchronisation module: GDISM) 및 GW 데이터 익스포트 동기화 모듈(GDESM)을 포함한다. 2개의 모듈들 모두는 게이트웨이와 호스트 간의 I/O 버퍼 요소들의 동기화를 처리한다.
동기화는 흐름 제어되며, 그리고 교환 동기화 포인트(ESP)에서 IO 동작들에 대한 GW 데이터 일관성 및 준비상태를 보장한다.
제 1 세트의 크레딧(이미 자세히 논의됨)은 ESP 크레딧이다. ESP 크레딧은 가속기(51)와 게이트웨이(52) 사이 또는 게이트웨이(52)와 추가 게이트웨이(128) 사이에서 동기화 배리어의 통과를 제어한다. ESP 크레딧을 사용하여, 게이트웨이(52)와 가속기(51) 사이의 데이터 전송을 제어하는데 배리어 크레딧 메커니즘이 이용된다. 하나의 ESP 크레딧의 이용가능성은 데이터 교환 동작이 하나의 배리어에 대해 실행될 수 있음을 의미한다.
제 2 세트의 크레딧은 게이트웨이(52)로의 데이터 전송을 제어한다(호스트(63), 원격 저장소(151) 또는 추가 게이트웨이(128)로부터의). 이러한 크레딧은 GDxSM(142)에 의해 저장된다. 보다 구체적으로, 이러한 크레딧은 GBxSM(142)의 GDISM에 저장된다. 제 2 세트의 크레딧은 GDISM 크레딧이라 지칭될 수 있다. 해당 기술분야의 당업자라면 "GDISM 크레딧"이라는 용어는 단지 이름일 뿐이며, 이러한 크레딧의 본질이 이름으로 제한되지 않는다는 점을 이해할 것이다.
게이트웨이(52)는 0 이 아닌 개수의 GDISM 크레딧이 이용가능하다는 결정에 응답하여, 호스트(63), 원격 저장소(151) 또는 추가 게이트웨이(128)로부터 데이터를 검색하기 위해 사전 작업 명령을 실행한다. 만일, 이용가능한 GDISM 크레딧이 없다고 결정되면, 게이트웨이(52)는 데이터를 검색하지 않는다. 호스트(63)는 명령을 전송하기 위해 RDMA를 사용하여 GDISM 크레딧을 업데이트/증가하기 위한 명령을 전송한다. 스트리밍 엔진(124)이 호스트(63)로부터의 RDMA 기입을 통해 GDISM 크레딧 레지스터에 대한 업데이트를 통지받으면, 스트리밍 엔진(124)은 그에 따라 크레딧 레지스터를 업데이트할 것이다. 게이트웨이(52)는 PPE(123)에 의해 사전 작업이 완료됨에 응답하여, 저장된 GDISM 크레딧의 수를 감소시킨다. 사전 작업은 외부 저장소로부터 게이트웨이(52)로 데이터를 전송하는 것이다.
GDISM 크레딧 제어 메커니즘은 사전 작업(PRW) 명령이 너무 일찍 실행되는 것을 방지할 수 있다. GDISM은 사전 작업(PRW) 엔진이 작동하도록 허용되는 현재 실행중인 ESP에 앞선 WD 수를 제어한다.
호스트(63)는 게이트웨이들의 그룹에 대한 GDISM 크레딧들에 대해, 동일한 크레딧 업데이트를 수행하도록 구성될 수 있다. 크레딧 업데이트는 안정적인 브로드캐스트를 만들기 위해 RDMA 및 RDMA 탑에 있는 프로토콜을 사용하여 수행된다. 이것은, 동기화 그룹이 복수의 게이트웨이들을 포함하는 경우 필요할 수 있다. 이 경우 게이트웨이들의 그룹은 동일한 개수의 이용가능한 GDISM 크레딧을 가져야할 수도 있다. 그렇지 않으면, 가속기들 중 하나가 중단될 수 있으며(stall) 따라서 다른 가속기들 모두가 중지될 수 있다.
일부 예에서 GDISM 크레딧은 게이트웨이로부터 호스트로의 데이터 전송을 제어하는데도 사용된다. 외부 저장소로부터 게이트웨이(52)로의 데이터 전송에 사용되는 동일한 GDISM 크레딧 세트(즉, 위에서 설명한 제 2 세트)가, 게이트웨이(52)로부터 외부 저장소(예컨대, 호스트 63, 원격 저장소 151)로의 데이터 전송을 제어하는데 사용될 수 있다. 게이트웨이(52)가 데이터를 외부 저장소로 전송하는 것에 응답하여, 임포트 및 익스포트 크레딧들 둘다를 나타내는 이들 GDISM 크레딧들은, PPE(123)가 WD에서 커맨드를 완료할 때 감소된다. 게이트웨이(128)는 GDISM 크레딧 수가 0이 아닌 경우에만 데이터를 외부 저장소로 전송할 것이다.
이러한 방식으로, GDISM 크레딧을 사용하여 POW 명령과 PRW 명령을 제한할 수 있다. GDISM 크레딧 수가 0이 아니라면, POW 명령이 실행될 수 없다. GDISM 크레딧이 외부 저장소와의 데이터 전송을 제어하는 경우, 소정의 ESP에 대하여 모든 POW 명령과 PRW 명령들이 완료될 때에만 하나의 GDISM 크레딧이 소비된다.
일부 예에서, 제 3 세트의 크레딧은 게이트웨이(52)로부터 호스트(63) 또는 원격 저장소(151)로의 데이터 전송을 제어한다. 이러한 크레딧은 GDxSM(142)에 의해 저장된다. 보다 구체적으로, 이러한 크레딧은 GBxSM(142)의 GDESM에 저장된다. 제 3 세트의 크레딧은 GDESM 크레딧이라 지칭될 수 있다. 해당 기술분야의 당업자라면, "GDESM 크레딧”이라는 용어는 단지 이름일 뿐이며, 이러한 크레딧의 본질이 이름으로 제한되지 않는다는 점을 이해할 것이다.
게이트웨이(128)는 GDESM 크레딧 수가 0이 아닌 경우에만 데이터를 외부 저장소로 전송할 것이다. 게이트웨이(52)가 데이터를 외부 저장소로 전송하는 것에 응답하여, GDESM 크레딧이 감소된다. 이러한 방식으로 GDESM 크레딧을 사용하여 POW 명령을 제한할 수 있다. GDESM 크레딧 수가 0이 아니면, POW 명령은 실행될 수 없다. 게이트웨이(52)는 POW 명령의 완료에 응답하여 GDESM 크레딧의 수를 감소시킨다.
호스트(63)는 명령을 전송하기 위해 RDMA를 사용하여 GDISM 크레딧을 업데이트/증가하기 위한 명령을 전송한다. 스트리밍 엔진(124)이 호스트(63)로부터의 RDMA 기입을 통해 GDISM 크레딧 레지스터에 대한 업데이트를 통지받으면, 그에 따라 크레딧 레지스터를 업데이트할 것이다.
GDISM 크레딧과 ESP 크레딧 사이에는 관련성이 있다. GDISM 크레딧은 하나의 수퍼 스텝(super-step) 동안 호스트 메모리로부터 게이트웨이 메모리(114)로 데이터를 전송할 수 있는 권한을 게이트웨이(52)에 제공한다. 게이트웨이(52)가 이러한 수퍼 스텝에 대한 데이터를 메모리(114)에 로드하면, 게이트웨이(52)는 GDISM 크레딧을 감소시키고 ESP 크레딧에 하나의 크레딧을 추가할 것이다. 이제, LSPM(117) 및/또는 LSBM(118)가 ESP 크레딧 수가 0 보다 클때 동기화 요청을 확인할 것이므로, 가속기(51)는 이러한 데이터에 대한 풀링(pull)을 수행하거나(임의의 풀링 모델에 따른 풀링을 포함하며) 또는 게이트웨이(52)는 데이터를 가속기(51)로 푸시할 수 있다(임의의 푸시 모델에 따른 푸시).
복수의 가속기(131), 복수의 게이트웨이(132) 및 복수의 호스트(133)를 포함하는 시스템(130)의 일례를 도시하는 도 9를 참조한다. 게이트웨이들(132)이 서로 통신하기 때문에, 게이트웨이들(132)은 이더넷 네트워크(134)를 형성한다. 게이트웨이들(132) 사이의 통신은 가속기와 호스트의 분해(disaggregation)를 가능하게 한다. 즉, 시스템(130)의 임의의 호스트(133)는 임의의 가속기(131)와 통신할 수 있다.
비록, 도 9는 각각의 게이트웨이(132)가 자신과 통신하는 호스트(133)와 연관되는 것을 도시하지만, 일부 실시예에서 게이트웨이 당 하나의 호스트가 존재하지 않는다. 일부 실시예에서는, 도 9에 도시된 게이트웨이(132) 중 하나만이 호스트(133)와 직접 통신할 수 있다. 이러한 하나의 호스트(133)는 복수의 게이트웨이(134)를 제어할 수 있다. 호스트에 연결된 게이트웨이는 호스트로부터 나머지 게이트웨이로 데이터를 분배할 수 있다. 대안적으로, 복수의 게이트웨이(134)는 원격 저장소(151)로부터 데이터를 검색할 수 있다.
오직 하나의 게이트웨이(134)만이 호스트(133)와 통신하는 경우, 이러한 하나의 게이트웨이(134)는 복수의 게이트웨이들(134) 중 네트워크 인터페이스 디바이스를 포함하는 유일한 게이트웨이(134)일 수 있다. 이는 나머지 게이트웨이를 구성하는데 필요한 컴포넌트들의 개수를 줄여서 비용을 감소시키는 장점이 있다. 나머지 게이트웨이들이 호스트에 데이터를 제공할 때, 이들은 호스트와 통신하기 위해 네트워크 인터페이스 디바이스를 포함하는 게이트웨이에 데이터를 제공하기 전에 먼저 데이터에 대한 데이터 증강 작업을 수행할 수 있다.
일부 실시예에서, 시스템(130)에는 외부 호스트(133)가 없지만 호스트 시스템은 하나 이상의 게이트웨이(134)에서 실행된다. 이 경우, 컴파일러는 게이트웨이(134)에서 실행된다.
일부 예에서, 게이트웨이(132)는 호스트(133)로부터 데이터를 수신하고 이 데이터를 하나 이상의 다른 게이트웨이(132)에 분배한다. 다른 예에서, 게이트웨이들(132)의 서브세트는 하나 이상의 호스트(133)로부터 데이터를 수신하고 수신된 데이터를 하나 이상의 다른 게이트웨이들(132)에 분배한다. 하나 이상의 다른 게이트웨이들(132) 각각은 분산된 데이터를 자신과 연관된 가속기(131)에 제공할 수 있다. 그렇게함으로써 모든 게이트웨이들(132)이 호스트(133)로부터 데이터를 수신할 필요는 없다. 이 방법은 비용을 줄일 수 있는데, 이 경우 모든 게이트웨이에 전체 대역폭이 제공될 필요가 없기 때문이다. 이것은 또한 효율성을 향상시킬 수 있다. 일부 예에서, 가속기 그룹의 각 가속기(131)는 동일한 데이터를 수신하고 프로세싱한다. 이 경우, 데이터는 호스트(133)로부터 한 번만 페치될 필요가 있다. 따라서, 게이트웨이(132)는 호스트(133)로부터 상기 데이터를 수신하고 그리고 이 데이터의 복사본을 하나 이상의 게이트웨이들(132)에 분배하고, 이들 게이트웨이들(132) 각각은 그들의 관련 가속기(131)로 데이터를 분배하도록 구성된다. 따라서, 동일한 데이터가 호스트(133)로부터 여러 번 페치될 필요가 없기 때문에 효율성 이득이 실현된다. 추가적으로, 이것은 게이트웨이들에 의한 데이터 검색을 위한 원격 저장소(151)의 사용과 결합될 수 있다. 검색을 위한 원격 저장소(151)의 사용은 비용 절감이 달성될 수 있고 게이트웨이가 전체 대역폭을 가질 수 있음을 의미한다. 호스트는 저장 디스크립터를 많은 게이트웨이들로 전송할 수 있으며, 이들은 병렬로 이러한 디스크립터들에 대해 작용하고 게이트웨이 당 독립적인 네트워크 연결을 통해 원격 저장소(151)로부터 데이터를 풀/푸시할 수 있다. 이 기술은 게이트웨이 수에 따라 I/O를 확장한다.
일부 경우에, 게이트웨이(132)로부터 하나 이상의 다른 게이트웨이(132)로 분배되는 데이터는 상기 하나 이상의 다른 게이트웨이(132)에서 수정된다. 예를 들어, 하나 이상의 다른 게이트웨이(132)는 하나 이상의 다른 게이트웨이(132)에 데이터 증강을 적용한다. 이러한 데이터 증강은 각 게이트웨이의 DME에 의해 수행된다. 하나 이상의 다른 게이트웨이(132) 각각이 수신된 데이터를 수정하면, 수정된 데이터를 연관된 가속기(131)로 푸시한다.
사전 컴파일된 게이트웨이 소프트웨어는 어떤 가속기(52)가 게이트웨이(132)에 의해 메모리(114)에 보유되는 어떤 데이터를 어떤 호스트로부터 획득하는지를 지정한다. 가속기 코드의 컴파일러는 가속기들 사이에서 작업을 할당하기 위해 가속기들 간에 데이터를 할당하는 방법을 결정한다. 게이트웨이(132)는 각각의 가속기를 향한 2 개의 PCIe 포트를 통해 I/O 트래픽의 부하를 분산한다.
도 13을 참조하면, 도 13은 장치(170)의 일례를 도시하며, 상기 장치(170)는 도 12에 예시된 바와 같은 복수의 머신들(161)을 포함한다. 복수의 머신들(161)은 장치(170) 내에 배열되며, 이는 클러스터(171)로 지칭된다. 각각의 클러스터(171)는 최대 4개까지의 머신들(161)을 포함한다. 복수의 클러스터들(171)이 장치(170) 내에 배열되며, 이는 포드(171)로 지칭된다. 각각의 포드(171)는 최대 32개의 머신들을 포함한다. 이러한 방식으로 시스템을 확장하면 포드(171)는 128 개의 가속기를 포함하여 16 개의 PFLop과 8 TB의 DRAM을 갖춘 시스템이 된다.
도 12 및 13에 예시된 이러한 모델에서, 각 게이트웨이(163)는 2 개 이상의 가속기 그룹(162) 사이에 낮은 지연 브리지를 제공하여, 서로 다른 게이트웨이들(163)에 연결된 가속기들(162)이 마치 동일한 내부 패브릭에 연결된 것처럼 서로 통신할 수 있게한다. 패킷들은 게이트웨이(163)의 XPU 포트(도 8에 표시됨)에서 가속기(162)로부터 수신된다. 원격 가속기에 매핑되는 메모리 공간을 타겟으로 하는 패킷은 XPU 포트에서 감지되고 그리고 게이트웨이(163)의 적절한 패브릭 포트(도 8에 표시됨)로 향하게 된다. 적절한 가속기 포트에서 수신된 패킷은 적절한 게이트웨이로 전달될 것이다. 다음으로, 게이트웨이는 원격 가속기로 패킷을 전달할 것인바, 원격 가속기는 패킷이 타겟팅하는 메모리 공간에 의해 표시된다.
각 게이트웨이(163)는 PCIe 포트를 포함한다. 이러한 PCIe 포트 중 4 개는 가속기(162)와 패킷을 주고 받도록 구성된다. 각각의 PCIe 포트(도 12 참조)는 서로 다른 가속기 특정 프로토콜을 사용하도록 구성될 수 있다. 다음으로, 커스텀 게이트웨이 트랜잭션 계층이 해당 프로토콜과 게이트웨이 내부 프로토콜 간에 변환한다. 커스텀 게이트웨이 계층은 주소 맵을 구현하고 그리고 콜렉티브(collective) 및 브로드캐스트/멀티캐스트 오프로드 지원을 제공한다. 각 게이트웨이(163)는 글로벌 주소 공간에서 모든 참여 가속기들(162)을 노출하는 어드레스 매핑 방식을 제공한다. 가속기(162)로부터 게이트웨이(163)에서 수신된 패킷은 패킷이 라우팅될 목적지 게이트웨이를 식별하는 게이트웨이 ID를 포함한다.
글로벌 주소 공간은 포드(170)에 속하는 모든 가속기들(162) 및 게이트웨이(163)의 모든 메모리 리소스들을 포괄한다. 가속기들은 글로벌 주소 공간에서 주소들을 지정하는 패킷들을 발송(dispatch)할 수 있다. 주소의 일부 부분들은 타겟 게이트웨이 상의 리소스들을 선택하는데 사용된다. 주소의 일부 부분들은 주소가 지정되는 게이트웨이를 식별하는데 사용된다. 일부 다른 부분들은 게이트웨이 메모리 또는 관련 가속기의 타일 메모리의 메모리에 있는 주소들을 식별하는데 사용된다. 가속기의 타일 메모리는 타일 인덱스와 메모리 오프셋에 의해 어드레싱가능하다. 어드레스는 데이터 패킷의 데이터가 저장될 가속기의 위치를 식별하기 위해이러한 타일 인덱스 및 메모리 오프셋을 포함할 수 있다.
패킷이 수신되면 어드레스의 게이트웨이에 대한 식별자가 이러한 게이트웨이의 글로벌 ID와 비교된다. 매칭이 있다면, 상기 요청은 이러한 게이트웨이에 속한 리소스를 타겟팅한다(로컬 가속기 또는 로컬 메모리). 그렇지 않으면 주소의 일부가 라우팅 테이블을 인덱싱하는데 사용된다. 라우팅 테이블의 콘텐츠는 시스템의 타겟 포트를 나타낸다. 어드레스의 일부 비트들은, 패킷을 라우팅할 위치를 결정하기 위해 게이트웨이 라우팅 테이블과 매칭될 것이다.
인입(ingress) 패킷 파이프라인은 필요한 피처들을 구현하는데 필요한 파이프라인 스테이지들 이외의 버퍼링이없는 컷 스루(cut-through) 파이프라인으로 의도된다. 패킷들은 먼저 유형별로 분류된다: 멀티캐스트/브로드캐스트, 콜렉티브 및 유니캐스트/메모리 기입들. 이후, 이들은 프로세싱를 위해 개별 블록들로 분할된다. 게이트웨이(52)는 유니캐스트 패킷들을 프로세싱하기 위한 유니캐스트 모듈 및 멀티캐스트 그룹화 테이블을 포함할 수 있다. 유니캐스트 패킷 라우팅 테이블이 게이트웨이(52)에 의해 이용되어, 유니캐스트 패킷들, 즉 단일 가속기로 향하는 패킷들의 라우팅을 수행한다. 인커밍 어드레스가 디코딩되고 그리고 선택된 비트들이 목적지를 결정하는데 사용된다. 이것은 2 단계 프로세스이다: 먼저 게이트웨이 ID 비트를 사용하여 이 패킷이 이 게이트웨이를 타겟팅하는지를 결정한다. 그렇지 않은 경우, 게이트웨이 ID 비트들은 이 패킷에 대한 출력 패브릭 포트를 반환하는 라우팅 테이블을 인덱싱하는데 사용된다.
만일, 패킷이 게이트웨이(52)를 타겟으로 하는 경우, 패킷 어드레스의 로컬 어드레스 비트들은, 복수의 영역들(즉, 게이트웨이 메모리에 대한 하나의 BAR 및 각 가속기 포트에 대한 하나의 BAR)로 구성된 로컬 게이트웨이 베이스 어드레스 레지스터(BARS)의 세트에서 검색하는데 사용된다. 만일, 로컬 어드레스 비트가 패킷이 게이트웨이 메모리, 예를 들어 메모리(114)에 저장하기 위한 것임을 나타낸다면, 상기 패킷은 게이트웨이 메모리용 BAR 내의 어드레스에 따라 게이트웨이 메모리에 저장된다. 만일, 로컬 어드레스 비트가 패킷이 가속기로 전달하기 위한 것임을 나타낸다면, 패킷은 게이트웨이(52)의 DME(122)로 포워딩된다. 여기서부터, 데이터 패킷은 관련 가속기 포트에 대한 BAR 내의 어드레스에 따라 가속기로 포워딩될 수 있다.
멀티캐스트/브로드캐스트 서비스를 지정하는 패킷들은 멀티캐스트 그룹 테이블에서 프로세싱된다. 각각의 패브릭 포트는 각 그룹(브로드캐스트 포함)에 대한 복사본을 획득할 포트들의 목록이 있는 그 자신의 테이블을 가질 수 있다. 목적지들의 3개의 세트들이 존재한다. 첫째, 패킷이 게이트웨이와 동일한 vFabric에 속하는 경우에만, 패킷이 로컬 가속기로 전송된다. 둘째, 모든 인커밍 브로드캐스트/멀티캐스트 패킷들은 이들이 포워딩되어야만하는지를 알아보기 위하여 페브릭 테이블에 대해 체크된다. 셋째, 복사본이 로컬 DRAM으로 전송된다. 목적지 포트 벡터가 구축되면, 벡터와 패킷이 복제 서비스를 제공하는 스위치 상호연결로 전달된다.
Claims (19)
- 호스트에 대한 작업 가속기 역할을 하는 서브 시스템과 호스트를 인터페이스하기 위한 게이트웨이로서, 상기 게이트웨이는 적어도 게이트웨이 및 서브 시스템을 포함하는 동기화 영역에 의해 획득된 사전 컴파일된(pre-compiled) 데이터 교환 동기화 포인트들에서 데이터 배치들(batches of data)의 서브 시스템으로의 전송을 가능하게 하며, 상기 사전-컴파일된 데이터 교환 동기화 포인트들은 동기화 영역의 컴퓨팅 페이즈와 교환 페이즈 사이의 배리어로서 역할을 하며, 상기 게이트웨이는 데이터 무버(mover) 엔진 및 메모리 관리 엔진을 갖는 스트리밍 엔진을 포함하고, 상기 데이터 무버 엔진 및 메모리 관리 엔진은 작업 디스크립터로부터의 명령들을 협력하여 실행하도록 구성되고, 각각의 작업 디스크립터는 데이터 스트리밍 동작들의 세트를 정의하며,
상기 메모리 관리 엔진은 게이트웨이의 데이터 연결 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리와 외부 저장소 사이에서 데이터를 전송하기 위해 작업 디스크립터로부터의 명령을 실행하도록 구성되고;
상기 데이터 무버 엔진은 게이트웨이의 가속기 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리와 서브 시스템 사이에서 데이터를 전송하기 위해 작업 디스크립터로부터 명령을 실행하도록 구성되며;
상기 스트리밍 엔진은 게이트웨이를 통해 데이터를 스트리밍하기 위해 상기 메모리 관리 엔진 및 데이터 무버 엔진에 의해 작업 디스크립터로부터의 명령을 실행하도록 구성되는 것을 특징으로 하는 게이트웨이. - 제1항에 있어서,
상기 스트리밍 엔진은, 동기화 영역으로부터 동기화 포인트에 대한 표시를 수신하면, 작업 디스크립터로부터의 명령들의 실행을 트리거링하도록 구성되는 것을 특징으로 하는 게이트웨이. - 제1항 또는 제2항에 있어서,
상기 스트리밍 엔진은, 각 배리어에 대해, 상기 메모리 관리 엔진에 의해 실행되는 메모리 관리 명령들의 세트 및 상기 데이터 무버 엔진에 의해 실행되는 데이터 무버 명령들의 세트를 정의하는 작업 디스크립터 명령을 실행하도록 구성되는 것을 특징으로 하는 게이트웨이. - 제3항에 있어서,
상기 작업 디스크립터 명령은, 배리어를 나타내는 동기화 포인트에 대한 표시에 응답하여 상기 데이터 무버 엔진에 의해서 전송될 각각의 데이터 배치(batch of data)의 사이즈를 정의하는 것을 특징으로 하는 게이트웨이. - 제3항에 있어서,
상기 작업 디스크립터 명령은, 상기 메모리 관리 엔진에 의해서 외부 저장소와 로컬 메모리 사이에서 전송될 각각의 데이터 배치(batch of data)의 사이즈를 정의하는 것을 특징으로 하는 게이트웨이. - 제1항 또는 제2항에 있어서,
상기 메모리 관리 엔진은, 데이터 연결 인터페이스를 통해 외부 저장소로부터 게이트웨이와 관련된 로컬 메모리로 하나 이상의 데이터 배치를 전송하는 적어도 하나의 사전 작업 명령(pre-work instruction)을 실행하도록 구성되는 것을 특징으로 하는 게이트웨이. - 제6항에 있어서,
상기 메모리 관리 엔진은, 획득되는 동기화 포인트보다 시간상 앞서서 상기 적어도 하나의 사전 작업 명령을 실행하도록 구성되는 것을 특징으로 하는 게이트웨이. - 제1항 또는 제2항에 있어서,
상기 메모리 관리 엔진은, 데이터 연결 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리로부터 외부 저장소로 하나 이상의 데이터 배치를 전송하는 적어도 하나의 사후 작업 명령(post-work instruction)을 실행하도록 구성되는 것을 특징으로 하는 게이트웨이. - 제1항 또는 제2항에 있어서,
상기 데이터 연결 인터페이스는,
호스트와 관련된 저장소;
네트워크 부착 저장소; 및
추가 게이트웨이와 관련된 추가 게이트웨이 메모리에 액세스하기 위한 추가 게이트웨이 또는 추가 가속기의 가속기 메모리
중 하나에 연결되는 것을 특징으로 하는 게이트웨이. - 제1항 또는 제2항에 있어서,
상기 작업 디스크립터는, 상기 메모리 관리 엔진에 의해 실행될 명령들의 세트에 있는 명령들의 개수 및 상기 데이터 무버 엔진에 의해 실행될 명령들의 세트에 있는 명령들의 개수를 정의하는 것을 특징으로 하는 게이트웨이. - 제1항 또는 제2항에 있어서,
상기 데이터 무버 엔진은, 게이트웨이와 관련된 로컬 메모리 내의 특정 위치로 또는 특정 위치로부터 데이터를 전송하기 위한 명령을 실행하며, 상기 특정 위치는 상기 명령에서 정의되는 것을 특징으로 하는 게이트웨이. - 제11항에 있어서,
상기 메모리 관리 엔진은, 상기 특정 위치 안밖으로(into and out of) 하나 이상의 데이터 배치를 로딩하는 명령을 실행하도록 구성되는 것을 특징으로 하는 게이트웨이. - 제1항 또는 제2항에 있어서,
상기 메모리 관리 엔진은, 상기 게이트웨이와 관련된 로컬 메모리 내의 데이터가 로컬 메모리 밖으로 전송되기 전에, 상기 로컬 메모리 내의 데이터를 조작하는 명령을 실행하도록 구성되는 것을 특징으로 하는 게이트웨이. - 제1항 또는 제2항에 있어서,
상기 데이터 무버 엔진은, 로컬 메모리로부터 서브 시스템으로 전송 중인 데이터를 조작하도록 구성되는 것을 특징으로 하는 게이트웨이. - 제1항 또는 제2항에 있어서,
상기 게이트웨이는 게이트웨이 전송 메모리를 포함하고, 상기 데이터 무버 엔진은 획득된 동기화 포인트에서 서브 시스템으로 데이터를 전송하기 전에, 상기 게이트웨이 전송 메모리에 데이터를 로딩하도록 구성되는 것을 특징으로 하는 게이트웨이. - 제3항에 있어서,
하나의 데이터 무버 명령이 상기 작업 디스크립터의 메모리 관리 명령들의 세트에 관련되며, 메모리 관리 명령들 각각은, 데이터 수집 동작들을 위해 데이터 무버 명령에 의해 식별되는 위치에 데이터를 로딩하는 것을 특징으로 하는 게이트웨이. - 제6항에 있어서,
다수의 데이터 무버 명령들을 지원하도록 하나의 사전 작업 명령이 데이터를 로딩하는 것을 특징으로 하는 게이트웨이. - 게이트웨이를 통해 데이터를 스트리밍하기 위한 스트리밍 엔진으로서, 상기 스트리밍 엔진은 데이터 무버(mover) 엔진 및 메모리 관리 엔진을 가지며, 상기 데이터 무버 엔진 및 메모리 관리 엔진은 작업 디스크립터들로부터의 명령들을 협력하여 실행하도록 구성되고, 각각의 작업 디스크립터는 게이트웨이를 적어도 포함하는 동기화 영역에서 획득된 동기화 포인트와 관련하여 수행될 데이터 스트리밍 동작들의 세트를 정의하며,
상기 메모리 관리 엔진은 게이트웨이의 데이터 연결 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리와 외부 저장소 사이에서 데이터를 전송하기 위해 작업 디스크립터로부터의 명령을 실행하도록 구성되고;
상기 데이터 무버 엔진은 게이트웨이의 가속기 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리와 컴퓨터 서브 시스템 사이에서 데이터를 전송하기 위해 작업 디스크립터로부터 명령을 실행하도록 구성되며;
상기 스트리밍 엔진은 게이트웨이를 통해 데이터를 스트리밍하기 위해 상기 메모리 관리 엔진 및 데이터 무버 엔진에 의해 작업 디스크립터로부터의 명령을 실행하도록 구성되는 것을 특징으로 하는 스트리밍 엔진. - 게이트웨이에 의한 실행을 위해 일시적인 또는 비일시적인 매체에 저장된 컴퓨터 판독가능한 명령들을 포함하는 컴퓨터 프로그램으로서, 상기 명령들은 작업 디스크립터 명령들, 메모리 관리 명령들, 및 데이터 무버 명령들을 포함하고, 각각의 작업 디스크립터는 게이트웨이 및 게이트웨이에 연결된 적어도 하나의 가속기를 적어도 포함하는 동기화 영역에서 획득된 동기화 포인트와 관련하여 수행될 데이터 스트리밍 동작들의 세트를 정의하며,
상기 작업 디스크립터 명령은 적어도 하나의 메모리 관리 명령과 협력하여, 게이트웨이의 데이터 연결 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리와 외부 저장소 사이에서 데이터를 전송하고;
상기 작업 디스크립터 명령은 적어도 하나의 데이터 무버 명령과 협력하여, 게이트웨이의 가속기 인터페이스를 통해 게이트웨이와 관련된 로컬 메모리와 컴퓨터 서브 시스템 사이에서 데이터를 전송하는 것을 특징으로 하는 컴퓨터 프로그램.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
GB1811009.8A GB2575289B (en) | 2018-07-04 | 2018-07-04 | Streaming engine |
GB1811009.8 | 2018-07-04 | ||
US16/235,515 | 2018-12-28 | ||
US16/235,515 US11237882B2 (en) | 2018-07-04 | 2018-12-28 | Streaming engine |
PCT/EP2019/066882 WO2020007667A1 (en) | 2018-07-04 | 2019-06-25 | Streaming engine |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20210023904A true KR20210023904A (ko) | 2021-03-04 |
Family
ID=63143516
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020207037780A KR20210023904A (ko) | 2018-07-04 | 2019-06-25 | 스트리밍 엔진 |
Country Status (6)
Country | Link |
---|---|
US (1) | US11237882B2 (ko) |
EP (1) | EP3811211A1 (ko) |
JP (1) | JP7406539B2 (ko) |
KR (1) | KR20210023904A (ko) |
CN (1) | CN112673351B (ko) |
GB (1) | GB2575289B (ko) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2575293B (en) * | 2018-07-04 | 2020-09-16 | Graphcore Ltd | Data Through Gateway |
CN116529724B (zh) * | 2020-10-14 | 2024-04-12 | 甲骨文国际公司 | 在无共享分布式数据库中快速检测和修复故障的系统和方法 |
US12093209B2 (en) | 2022-05-27 | 2024-09-17 | Nvidia Corporation | Streaming batcher for collecting work packets as remote descriptors |
Family Cites Families (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6185620B1 (en) * | 1998-04-03 | 2001-02-06 | Lsi Logic Corporation | Single chip protocol engine and data formatter apparatus for off chip host memory to local memory transfer and conversion |
JP2001142852A (ja) * | 1999-11-12 | 2001-05-25 | Natl Inst Of Advanced Industrial Science & Technology Meti | 高速並列計算用同期及び通信制御装置 |
CN1497900A (zh) * | 2002-10-23 | 2004-05-19 | 国际商业机器公司 | 对电话对话查询和作书签的系统及方法 |
JP2008109585A (ja) * | 2006-10-27 | 2008-05-08 | Toshiba Corp | ゲートウェイ機能を持ったデータ伝送装置および方法 |
WO2008057833A2 (en) * | 2006-11-08 | 2008-05-15 | Sicortex, Inc. | System and method for remote direct memory access without page locking by the operating system |
US8737454B2 (en) * | 2007-01-25 | 2014-05-27 | Adc Telecommunications, Inc. | Modular wireless communications platform |
US20090010265A1 (en) * | 2007-07-05 | 2009-01-08 | Cisco Technology, Inc. | Flexible mapping of virtual local area networks to Ethernet virtual circuits |
CN101420420A (zh) * | 2008-05-30 | 2009-04-29 | 北京天腾时空信息科技有限公司 | 一种数据流式传输的方法和装置 |
US8145749B2 (en) * | 2008-08-11 | 2012-03-27 | International Business Machines Corporation | Data processing in a hybrid computing environment |
US7870308B2 (en) * | 2008-12-23 | 2011-01-11 | International Business Machines Corporation | Programmable direct memory access engine |
US7870309B2 (en) * | 2008-12-23 | 2011-01-11 | International Business Machines Corporation | Multithreaded programmable direct memory access engine |
US9600429B2 (en) * | 2010-12-09 | 2017-03-21 | Solarflare Communications, Inc. | Encapsulated accelerator |
US9846673B2 (en) * | 2011-11-04 | 2017-12-19 | Waseda University | Processor, accelerator, and direct memory access controller within a processor core that each reads/writes a local synchronization flag area for parallel execution |
TWI623881B (zh) | 2013-12-13 | 2018-05-11 | 財團法人資訊工業策進會 | 事件串流處理系統、方法與機器可讀記憶體 |
US10313547B2 (en) * | 2015-05-29 | 2019-06-04 | Canon Kabushiki Kaisha | Data processing apparatus, data processing method, and storage medium |
US10691463B2 (en) * | 2015-07-30 | 2020-06-23 | Futurewei Technologies, Inc. | System and method for variable lane architecture |
US20190385707A1 (en) * | 2017-03-03 | 2019-12-19 | Fenologica Biosciences, Inc. | Phenotype measurement systems and methods |
-
2018
- 2018-07-04 GB GB1811009.8A patent/GB2575289B/en active Active
- 2018-12-28 US US16/235,515 patent/US11237882B2/en active Active
-
2019
- 2019-06-25 JP JP2021500029A patent/JP7406539B2/ja active Active
- 2019-06-25 EP EP19734059.9A patent/EP3811211A1/en active Pending
- 2019-06-25 CN CN201980045007.6A patent/CN112673351B/zh active Active
- 2019-06-25 KR KR1020207037780A patent/KR20210023904A/ko not_active Application Discontinuation
Also Published As
Publication number | Publication date |
---|---|
GB2575289B (en) | 2020-09-16 |
GB2575289A (en) | 2020-01-08 |
JP2021528789A (ja) | 2021-10-21 |
US11237882B2 (en) | 2022-02-01 |
CN112673351B (zh) | 2024-08-02 |
GB201811009D0 (en) | 2018-08-15 |
EP3811211A1 (en) | 2021-04-28 |
JP7406539B2 (ja) | 2023-12-27 |
US20200012534A1 (en) | 2020-01-09 |
CN112673351A (zh) | 2021-04-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP3821348B1 (en) | Streaming engine | |
US11740946B2 (en) | Gateway to gateway synchronisation | |
US11507416B2 (en) | Gateway pull model | |
US11281506B2 (en) | Virtualised gateways | |
US11615038B2 (en) | Data through gateway | |
US11455155B2 (en) | Code compilation for scaling accelerators | |
US11477050B2 (en) | Gateway fabric ports | |
US11334400B2 (en) | Sync groupings | |
US20210124626A1 (en) | Sync groupings | |
KR20210023904A (ko) | 스트리밍 엔진 | |
WO2020007648A1 (en) | Data through gateway | |
WO2020007667A1 (en) | Streaming engine |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal |