KR102167058B1 - 칩 밖으로 데이터 송신하기 - Google Patents

칩 밖으로 데이터 송신하기 Download PDF

Info

Publication number
KR102167058B1
KR102167058B1 KR1020180126037A KR20180126037A KR102167058B1 KR 102167058 B1 KR102167058 B1 KR 102167058B1 KR 1020180126037 A KR1020180126037 A KR 1020180126037A KR 20180126037 A KR20180126037 A KR 20180126037A KR 102167058 B1 KR102167058 B1 KR 102167058B1
Authority
KR
South Korea
Prior art keywords
tiles
tile
synchronization
exchange
external
Prior art date
Application number
KR1020180126037A
Other languages
English (en)
Other versions
KR20190044571A (ko
Inventor
다니엘 존 펠험 윌킨슨
리차드 루크 사우스웰 오스본
스테판 펠릭스
그레이엄 버나드 커닝햄
알란 그레이엄 알렉산더
Original Assignee
그래프코어 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from GB1717293.3A external-priority patent/GB2569271B/en
Priority claimed from GB1717294.1A external-priority patent/GB2569775B/en
Application filed by 그래프코어 리미티드 filed Critical 그래프코어 리미티드
Publication of KR20190044571A publication Critical patent/KR20190044571A/ko
Application granted granted Critical
Publication of KR102167058B1 publication Critical patent/KR102167058B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations 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/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17325Synchronisation; Hardware support therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations 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/163Interprocessor communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4204Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
    • G06F13/4221Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0024Peripheral component interconnect [PCI]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Multi Processors (AREA)

Abstract

동일한 칩 상에 다수의 타일들 및 패킷들의 형태로 데이터를 오프-칩으로 통신하기 위한 외부 상호연결을 포함하는 프로세서. 외부 상호연결은 플로우 제어 및 상기 패킷들의 큐잉(queuing)을 제공하도록 구성된 외부 교환 블록을 포함한다. 타일들 중 하나는 외부적으로 송신할 데이터를 가지는 다른 타일들을 대신하여 외부 교환 요청 메시지를 교환 블록에 송신하도록 컴파일러에 의해 지명된다. 상기 교환은 교환-온 메시지를 이들 타일들 중 제1 타일에 송신하여, 상기 제1 타일로 하여금 상기 외부 상호연결을 통해 패킷들을 송신하는 것을 시작하게 한다. 그 후, 일단 이 타일이 그것의 마지막 데이터 패킷을 보내면, 교환 블록은 교환-오프 제어 패킷을 상기 타일에 송신하여, 상기 타일로 하여금 패킷들을 송신하는 것을 중지하게 하고, 그리고 다른 교환-온 메시지를 송신할 데이터를 가지는 다음 타일에 송신하는 식으로 진행한다.

Description

칩 밖으로 데이터 송신하기{Sending Data Off-Chip}
본 발명은 동일한 칩(다이(die)) 상의 다수의 타일들(각 타일은 그것 자체의 메모리 및 프로세싱 유닛을 포함)의 구성을 포함하는 프로세서로부터 외부 상호연결을 통해 오프-칩으로 데이터를 송신하기 위한 메커니즘과 관련된다.
멀티-스레드 프로세서는 서로 나란히 다수의 프로그램 스레드들을 실행할 수 있는 프로세서이다. 프로세서는 다수의 서로 다른 스레드들에 공통되는 일부 하드웨어를 포함하지만(예를 들어, 공통 명령어 메모리, 데이터 메모리 및/또는 실행 유닛); 멀티-스레딩을 지원하기 위해 프로세서는 각 스레드에 특정적인 전용 하드웨어도 포함한다.
전용 하드웨어는 적어도 한번에 실행될 수 있는 다수의 스레드들 각각에 대한 각각의 컨텍스트 레지스터 파일을 포함한다. 멀티-스레드 프로세서에 대해 말할 때 “컨텍스트"는 다른 것과 함께 실행되는 스레드들 중 각각의 스레드의 프로그램 상태를 지칭한다(예를 들어, 프로그램 카운터 값, 상태 및 현재 오퍼랜드 값들). 컨텍스트 레지스터 파일은 각각의 스레드의 상기 프로그램 상태를 표현하기 위한 레지스터들의 각각의 집합을 지칭한다. 레지스터 파일에서 레지스터들은 레지스터 어드레스들이 명령어 워드들에서 비트들로서 고정되지만, 반면 메모리 어드레스들은 명령어들을 실행함으로써 계산될 수 있다는 점에서 일반적 목적의 메모리와 구분된다. 주어진 컨텍스트의 레지스터들은 일반적으로 각각의 스레드에 대한 각각의 프로그램 카운터 및 동작에 따른 데이터 및 상기 스레드에서 수행된 계산 중에 각각의 스레드에 의한 출력을 임시적으로 홀딩(holding)하기 위한 오퍼랜드 레지스터들의 각각의 세트를 포함한다. 또한, 각 컨텍스트는 각각의 스레드의 상태를 저장하기 위한 각각의 상태 레지스터를 포함할 수 있다(예를 들어, 그것이 정지되었는지 또는 실행중인지 여부). 따라서, 현재 실행중인 스레드들 각각은 그 자체의 별개의 프로그램 카운터 및 선택적으로 오퍼랜드 레지스터들 및 상태 레지스터(들)을 가진다.
멀티-스레딩의 하나의 가능한 형태는 병렬 처리(parallelism)이다. 즉, 다수의 컨텍스트들 뿐만 아니라, 다수의 실행 파이프라인들이 제공된다: 즉, 병렬로 실행될 명령어들의 각 스트림에 대한 별개의 실행 파이프라인. 그러나, 이는 하드웨어 면에서 많은 중복을 요한다.
따라서, 대신에, 멀티-스레드 프로세서의 다른 형태는 병렬 처리보다 동시 처리(concurrency)를 이용하며, 그에 의해 스레드들은 공통 실행 파이프라인(또는 적어도 파이프라인의 공통 부분)을 공유하고, 서로 다른 스레드들이 이 동일한, 공유된 실행 파이프라인에 인터리빙(interleave)된다. 멀티 스레드 프로세서의 성능은 파이프라인 지연을 숨기기 위한 증가된 기회들 덕분에 동시 처리를 하지 않는 것이나 병렬 처리에 비해 여전히 개선될 수 있다. 또한, 이 접근법은 다수의 실행 파이프라인들을 가지는 완전한 병렬 프로세서만큼 각 스레드 전용인 많은 추가적 하드웨어를 요구하지 않으며, 따라서 많은 추가적 실리콘을 발생시키지 않는다.
병렬 처리의 일 형태는 동일한 칩 상에 다수의 타일들의 구성을 포함하는 프로세서에 의해 달성될 수 있고, 각 타일은 그것 자체의 별개의 각각의 프로세싱 유닛 및 메모리(프로그램 메모리 및 데이터 메모리)를 포함한다. 따라서, 프로그램 코드의 별개의 부분들은 상기 타일들 중 서로 다른 타일에서 병렬로 실행될 수 있다. 타일들은 서로 다른 타일들에서 실행되는 코드로 하여금 타일들 간에 통신하게 하는 온-칩 상호연결을 통해 서로 연결된다. 일부 경우에서, 각 타일 상의 프로세싱 유닛은 타일 상에 다수의 동시적 스레드들을 스스로 실행하며, 각 타일은 상기 기술된 바와 같이 동일한 파이프라인을 통한 동일한 타일 상의 다수의 스레드들의 인터리빙를 지원하기 위해 그 자체의 컨텍스트들 및 대응하는 파이프라인의 각각의 세트를 가진다.
일반적으로, 서로 다른 타일들 상에서 실행되는 프로그램의 부분들 간에 종속성들이 존재할 수 있다. 그러므로, 한 타일 상의 코드의 조각이 다른 타일 상의 코드의 다른 조각에 의해 사용가능해지는 종속적인 데이터에 앞서 실행되는 것을 방지하기 위한 기법이 요구된다. 이를 달성하기 위한 다수의 가능한 방식들이 있지만, 본 명세서에서 관심이 있는 방식은 “벌크 동기식 병렬"(BSP)로 알려져 있다. BSP에 따르면, 각 타일은 계산 페이즈 및 교환 페이즈를 대안적 사이클에서 수행한다. 계산 페이즈에서 각 타일은 하나 이상의 계산 작업들을 타일에서 로컬적으로 수행하지만, 그것의 임의의 계산 결과를 임의의 다른 타일들과 통신하지 않는다. 교환 페이즈에서, 각 타일은 하나 이상의 계산의 결과들을 선행하는 계산 페이즈로부터 그룹에서 하나 이상의 다른 타일들로 및/또는 그로부터 교환하지만, 다음 계산 페이즈로 진행하지는 않는다. 추가로, BSP 원칙에 따라, 배리어 동기화가 계산 페이즈로부터 교환 페이즈로 트랜지션하는 또는 교환 페이즈로부터 계산 페이즈로 트랜지션하는 시점에 또는 둘 모두에 위치된다. 즉, (a) 모든 타일들은 그들 각각의 계산 페이즈들을 그룹에서 임의의 타일이 다음 교환 페이즈로 진행하도록 허용되기 전에 완료될 것이 요구되거나 또는 (b) 그룹에서 모든 타일들은 그들 각각의 교환 페이즈들을 그룹에서 임의의 타일이 다음 계산 페이즈로 진행하도록 허용되기 전에 완료될 것이 요구되거나 또는 (c) 둘 모두가 요구된다. 일부 시나리오들에서, 계산 페이즈에서의 타일은 그룹에서 다른 타일들과의 통신이 관련되지 않는 한, 네트워크 카드 또는 스토리지 디스크와 같은 다른 시스템 리소스들과 통신할 수 있다.
멀티-스레드 및/또는 멀티-타일 프로세싱의 사용예는 기계 지능에서 발견된다. 기계 지능의 통상의 기술자에게 익숙할 바와 같이, 기계 지능 알고리즘은 다수의 상호연결된 노드들의 그래프에 의해 표현될 수 있는 “지식 모델"에 대해 반복적 업데이트들을 수행하는 것에 기초한다. 각 노드는 그것의 입력들의 함수를 표현한다. 일부 노드들은 그래프에 대한 입력들을 수신하고, 일부는 하나 이상의 다른 노드를로부터의 입력들을 수신하며, 일부 노드들의 출력은 다른 노드들의 입력들을 형성하고, 그리고 일부 노드들의 출력은 그래프의 출력을 제공한다(그리고 일부 경우에, 주어진 노드는 이들 모두를 가질 수 있다: 그래프에 대한 입력들, 그래프로부터의 출력들 및 다른 노드들에 대한 연결). 추가로, 각 노드에서 함수는 예를 들어 가중치들과 같은 하나 이상의 각각의 파라미터들에 의해 파라미터화된다. 학습 스테이지 동안에, 목표는 그래프가 전체로서 가능한 입력들에 대한 범위에 대해 원하는 출력을 생성하도록 실험적 입력 데이터의 세트에 기초하여 다양한 파라미터들에 대한 값들을 찾는 것이다. 이를 위해, 확률적 기울기 강하에 기초한 역전파 알고리즘과 같은 다양한 알고리즘들이 공지되었다. 입력 데이터에 기초한 다수의 반복들을 통해, 파라미터들은 그 에러를 감소시키도록 점차적으로 튜닝되고, 따라서 그래프는 솔루션 쪽으로 수렴한다. 후속적 스테이지에서, 학습된 모델은 입력들의 특정된 세트가 주어진 출력들의 예측을 하거나 또는 출력들의 특정된 세트가 주어진(야기하는) 입력들을 추론하는데 사용될 수 있다.
각 노드의 구현예는 데이터의 프로세싱과 수반할 것이고, 그래프의 상호연결은 노드들 간 교환될 데이터와 대응한다. 일반적으로, 각 노드의 프로세싱의 적어도 일부는 그래프에서 일부 또는 모든 다른 노드들과 독립적으로 수행되며, 따라서, 많은 그래프들이 동시 처리 및 병렬 처리에 대한 큰 기회들에 노출된다.
본 명세서에 개시된 일 양태에 따르면, 동일한 칩 상에 다수의 타일들의 구성을 포함하는 프로세서가 제공되며, 각 타일은 그 자체의 별개의 각각의 프로세싱 유닛 및 프로그램 메모리 및 데이터 메모리를 포함하는 메모리를 포함하며, 프로그램 코드의 별개의 부분들은 상기 타일들 중 서로 다른 타일들에서 병렬로 실행되도록 구성된다. 프로세서는 서로 다른 타일들에서 실행되는 코드로 하여금 타일들 간에 통신하게 하는 온-칩 상호연결; 및 오프-칩으로 데이터를 통신하기 위한 전용 하드웨어 로직에서 구현되는 비-시간-결정론적 메커니즘을 포함하는 외부 상호연결을 더 포함하며, 데이터는 패킷들의 형태로 상기 외부 상호연결을 통해 송신되며, 각 패킷은 목적 어드레스가 존재하는 헤더를 포함하며, 그리고 상기 외부 상호연결을 통한 패킷들의 통신은 비-시간-결정적(non-time-deterministic)이다. 외부 상호연결은 플로우 제어 및 상기 패킷들의 큐잉(queuing)을 제공하도록 구성된 외부 교환 블록을 포함한다. 상기 타일들 중 하나는 외부 교환 요청 메시지를 상기 교환 블록에 송신하기 위해 상기 코드의 컴파일러에 의해 지명되며, 상기 외부 교환 요청 메시지는 상기 타일들 중 어느 것이 다른 칩 상의 목적지로 송신하기 위한 데이터 패킷들을 가지는지 표시하는 하나 이상의 제어 패킷들을 포함한다(상기 데이터 패킷들을 컨텐츠를 포함). 상기 플로우 제어를 수행하기 위해, 교환 블록은: A) 제1 타일이 상기 외부 상호연결을 통해 패킷들을 그들의 목적지들로 송신하는 것을 시작하게 하기 위한 교환-온 제어 패킷을 상기 교환 요청 메시지에서 외부적으로 송신할 데이터를 가지는 것으로 표시된 상기 타일들 중 제1 타일에 송신하고; 그리고 그 후 B) 상기 타일이 그것의 최종 데이터 패킷을 송신하면, 상기 제1 타일이 패킷들을 송신하는 것을 중지하게 하기 위한 교환-오프 제어 패킷을 상기 타일에 송신하고, 그리고 다른 교환-온 제어 패킷을 송신할 데이터 패킷들을 가지는 것으로 표시된 다음 타일에 송신하도록(계속됨) 구성된다. 즉, 교환-온 제어 패킷 및 교환-오프 제어 패킷의 송신은 교환 요청 메시지에서 표시된 각 타일에 대해, 상기 교환 요청 메시지에서 표시된 모든 타일들이 그들 각각의 패킷들을 송신할 때까지 차례로 반복된다.
따라서, 주어진 프로그램에서, 컴파일러는 입력 및/또는 출력(I/O)를 수행하기 위한 하나 이상의 타일들을 지명할 수 있다. 이는 칩 상의 타일들의 서브셋(예를 들어, 10개 또는 100개의 타일들 중 1개, 2개 또는 4개의 타일들)일 수 있지만, 일반적으로 타일들 중 어느 것도 또는 전부는 I/O를 수행하도록 프로그래밍될 수 있다. 동작에서, I/O 타일들 중 지명된 타일 상의 컴파일된 프로그램은 데이터를 오프-칩으로 송신할 다른 타일들 대신에 교환 요청 메시지를 송신하며, 교환 블록에 송신할 데이터를 가지는 타일들을 알린다. 이에 기초하여, 교환 블록은 송신할 데이터를 가지는 모든 타일들이 비-경쟁적 스케쥴(non-contended schedule)에서 서비스되게 구성한다. 교환 요청을 통해, 컴파일된 프로그램은 교환 블록에 데이터를 송신할 권리를 요구할 수 있다. 주어진 송신 타일을 대신한 교환 요청이 무기한으로 지속된다(모든 타일들의 현재 데이터가 송신될 때까지). 그러나, 모두 교환 블록의 동일한 큐에 엑세스하려고 시도하는 다수의 송신 타일들이 있다. 따라서, 교환 블록은 다수의 송신 타일들이 하나하나 순서대로 서비스되도록 강제하며, 따라서 경쟁을 해결한다. 실시예들에서, 교환 블록은 어떤 순서로 송신 타일들이 서비스될지 결정한다(비록 실시예들에서 하나하나 서비스되는 한 선택된 특정 순서는 상관없지만).
타일들 간에 송신할 충분한 데이터를 가지는 한, 기술된 메커니즘은 외부 대역폭이 항상 포화되게 유지할 수 있다(예를 들어, 네트워크 또는 외부 상호연결 및 목적지 또는 패킷들이 외부 상호연결과 상기 목적지 또는 목적지 사이에서 송신되는 목적지와 같은 외부 연결의 대역폭). 교환이 하나의 개별적 타일의 레벨에서 효율적이지 않을 수 있더라도, 외부 교환 요청 및 교환 블록은 외부 연결이 바쁘게 유지된다고 보며, 그리고 바람직하게 그것의 대역폭이 실질적으로 포화된 상태로 유지된다고 본다. 이는 대역폭이 포화되게 유지하기 위해 다른 특별한 구성들이 이루어질 필요가 없음을 의미한다.
데이터 패킷들은 컨텐츠를 포함하는 패킷들이다(제어 신호를 위해 사용되는 제어 패킷들과 반대로).
외부 상호연결은 그것이 외부적으로 통신하기 위한 것이므로 그렇게 불린다. 타일들과 같이 동일한 칩에서 내부적으로 구현될 수 있다. 대안적으로 칩 외부에서 구현될 수 있다.
프로그램 메모리 및 데이터 메모리는 서로 다른 어드레스가능한(addressable) 메모리 유닛들에서 구현될 수 있다. 대안적으로, 프로그램 메모리 및 데이터 메모리는 동일한 어드레스가능한 메모리 유닛들의 서로 다른 영역들에서 에서 구현될 수 있다. 이들 접근법의 조합 또한 사용될 수 있다.
실시예들에서, 패킷들 중 적어도 일부의 목적지는 다른 칩 상의 다른 타일 또는 타일들일 수 있다. 실시예들에서, 패킷들 중 적어도 일부의 목적지는 호스트 CPU를 포함하는 호스트 서브시스템일 수 있고, 상기 프로세서는 상기 호스트에 의해 할당된 작업을 수행하기 위해 작업 가속기로서 구성될 수 있다. 추가적 실시예들에서, 패킷들 중 적어도 일부의 목적지는 저장 디바이스일 수 있다.
외부 상호연결은 비-시간 결정적 상호연결이며, 이는 외부 상호연결을 통한 패킷들의 통신이 비-시간-결정적임을 의미한다. 실시예들에서, 내부 상호연결은 시간-결정적 상호연결일 수 있고, 칩 상의 타일들 간의 데이터의 통신은 시간-결정적이다.
이 경우에, 교환 블록 및 교환-온, 교환-오프 및 교환 요청 메시지를 포함하는 교환 프로토콜은 시간-결정적 범위와 비-시간-결정적 범위(realm) 사이의 간극을 연결하는 메커니즘 또는 “기어 박스"를 장점적으로 제공한다. 이는 시간-결정적 범위가 비-시간-결정적 범위로부터 시간 결정적 스케쥴을 요청하게 한다.
실시예들에서, 물리적 레이어에서 상기 외부 상호연결 메커니즘은 손실이 있으나, 상기 트랜잭션 레이어에서 상기 메커니즘은 아키텍처로 인해 손실이 없으며, 그에 의해 패킷이 수신확인(acknowledgement)되지 않은 경우 상기 외부 상호연결에서 하드웨어에 의해 자동적으로 재송신될 것이다. 그러나, 실제로 교환 요청 메커니즘은 외부 상호연결을 통한 손실의 야기 또는 더 일반적으로 비-시간 결정의 야기와 관계없이 적용될 수 있다. 대안적 실시예들에서, 예를 들면, 외부 상호연결 메커니즘은 물리적 레이어에서 손실이 없을 수 있으나, 트랜잭션 레이어에서 손실이 있을 수 있다. 다른 대안적 실시예에서, 외부 상호연결은 물리적 및 트랜잭션 레이어에서 손실이 없을 수 있으나, 예를 들어 상기 메커니즘이 큐잉 및/또는 비순차적(out-of-order) 전송을 수반할 수 있기 때문에 비-시간-결정적일 수 있다. 또한, 손실 트랜잭션 레이어 프로토콜 또는 혼잡한 무손실 상호연결은 시간-결정적 및 비-시간 결정적 범위들 사이를 연결하는 개시된 메커니즘의 적용으로 이익이 될 수 있는 비-시간 결정적 전송을 결과로 할 수 있다.
또한, 교환 메커니즘은 외부 연결 또는 목적지에 대한 연결이 손실이 있는지 여부와 관계없이 적용될 수 있다(예를 들어, 이더넷) 또는 (상기와 같이, 신뢰할 수 있는 예를 들어 PCI). 손실이 있는 링크의 경우에, 패킷 손실이 검출되는 한 상황은 전체 교환을 다시 실행함으로써 복구될 수 있다. 따라서, 개시된 기법들의 범위는 손실이 있는(예를 들어, 이더넷) 그리고 신뢰할 수 있는(예를 들어, PCI) 외부 구성들을 커버할 수 있다.
실시예들에서, 언제든 상기 교환 블록이 상기 외부 상호연결을 통해 패킷들을 송신하는 것을 계속할 수 없는 경우, 상기 교환 블록의 큐가 오버플로우하기 전에, 상기 교환 블록은 교환-오프 제어 패킷을 상기 송신 타일에 송신하도록 구성되며; 그리고 일단 혼잡이 해소되고 상기 교환 블록이 그것의 큐에 충분한 공간을 가지면, 상기 교환 블록은 교환-온 제어 패킷을 상기 송신 타일에 송신하여 상기 교환 블록이 그것의 컨텐츠를 전송하는 것을 계속하게 할 수 있다.
혼잡은 예를 들어 다른 타일들 및/또는 다른 교환 블록들에 의한 상호연결의 과용(over subscription) 때문일 수 있다(즉, 큐가 가득참). 대안적으로 또는 추가적으로, 상기 혼잡은 상기 외부 상호연결에서의 이전의 패킷 손실 및 재전송일 수 있다.
실시예들에서, 외부 상호연결은 헤더가 라우팅 목적의 정보를 더 포함하는 네트워크의 형태를 취할 수 있다.
실시예들에서, 상기 외부 상호연결은 비트-록(bit-lock)을 유지하기 위해 충분한 데이터 신호 트랜지션들을 가지는 수신된 데이터 스트림으로부터 클럭을 추론하기 위한 클럭-데이터-복구 기술을 사용하도록 구성될 수 있다. 대안적으로 명시적 클럭이 사용될 수 있다. 대안적 실시예들에서, 예를 들어, 외부 상호연결은 목적지에 의해 또는 다른 곳으로부터 명시적으로 신호된 클럭을 사용하도록 구성될 수 있다(예를 들어, 목적지 및 외부 상호연결 둘 모두에 공통되는 공통 클럭).
실시예들에서, 상기 외부 인터페이스는 상기 패킷을 상기 목적지, 또는 PCI, PCIe 또는 이더넷 버스 또는 상기 외부 인터페이스와 상기 목적지 또는 목적지들 사이의 네트워크를 통한 목적지에 송신하도록 구성될 수 있다. 그러나 더 일반적으로, 개시된 메커니즘은 이러한 특정한 외부 프로토콜들과 함께 사용되는 것으로 제한되지 않으며, 임의의 유형의 외부 버스, 네트워크 연결 또는 다른 연결과 함께 사용될 수 있다.
실시예들에서, 상기 타일 모듈들의 일부 또는 전부의 그룹은 시리즈의 벌크 동기식 병렬, BSP, 수퍼스텝들에서 동작하도록 프로그래밍되며, 이에 의해, 각 수퍼스텝에서 상기 그룹은:
- 상기 그룹에서 상기 타일들이 계산을 수행하지만 상기 계산의 결과들을 칩 밖으로 교환하지 않는 계산 페이즈, 그리고 그 후
- 상기 그룹에서 상기 타일들의 적어도 일부 상기 그룹에서 상기 타일들의 적어도 일부는 상기 계산의 하나 이상의 결과들을 상기 오프-칩 목적지 또는 목적지들로 교환하는 교환 페이즈, 상기 타일들의 적어도 일부는 상기 교환 요청에서 표시된 것들이며; 및
상기 그룹은 상기 시리즈에서 각 현재 수퍼스텝과 그 다음 간에 배리어 동기화(barrier synchronization)에 의해 동기화되며, 그에 의해 상기 그룹에서 각 타일은 상기 다음 수퍼스텝의 상기 교환 페이즈로 진행하기 전에 상기 현재 수퍼스텝의 상기 계산 페이즈를 완료하기 위해 상기 그룹의 모두에 대해 대기한다.
실시예들에서, 상기 온-칩 및/또는 외부 상호연결은 상기 배리어 동기화를 수행하도록 구성된 하드웨어 로직을 포함하며, 상기 배리어 동기화는:
- 상기 그룹에서 상기 타일들 각각으로부터 동기화 요청을 수신하고, 그리고
- 상기 동기화 요청들이 상기 모든 그룹으로부터 수신된다는 조건에서 동기화 수신확인을 발급함으로써 수행되며;
상기 그룹에서 상기 타일들 각각은 상기 동기화 수신확인의 발급까지 상기 각각의 프로세싱 유닛에서 명령어 발급을 정지하도록 더 구성된다.
실시예들에서, 상기 타일들 각각에서 상기 각각의 프로세싱 유닛은 미리 정의된 명령어 세트로부터 명령어들을 실행하도록 구성될 수 있고; 상기 타일들의 전부 또는 일부의 명령어 세트는 상기 타일이 상기 동기화 요청을 송신하기 위해 실행되게 하는 동기화 명령어를 포함한다.
실시예들에서, 상기 교환 블록은 복수의 교환 블록 컨텍스트들을 포함할 수 있고, 상기 교환 블록 컨텍스트 각각은 상기 타일들의 서로 다른 각각의 서브셋에 대해 상기 플로우 제어 메커니즘의 인스턴스를 구현하도록 구성된다.
실시예들에서, 프로세서는 적어도 20개의 타일들을 포함할 수 있다. 실시예들에서, 프로세서는 적어도 50개의 타일들을 포함할 수 있다. 실시예들에서, 프로세서는 적어도 100개의 타일들을 포함할 수 있다.
실시예들에서, 프로세서는 DMA 엔진을 사용하지 않고 송신하는 것을 수행하도록 구성될 수 있으며, 대신에 상기 타일들의 서브셋이 상기 데이터를 오프-칩 목적지로의 송신을 수행하고 및/또는 상기 오프-칩 목적지로부터 데이터를 읽기 위한 I/O 타일들로서 동작하기 위해 상기 컴파일러에 의해 지명되며, 상기 서브셋은 상기 교환 요청 메시지에서 표시된 타일들이다. 실시예들에서, 프로세서는 온-칩 DMA 엔진을 포함하지 않고 대신에 지명된 I/O 타일들을 사용하도록 구성된다. 일부 실시예들에서, 시스템은 온-칩 또는 오프-칩 DMA 엔진을 전혀 포함하지 않는다.
프로세서를 통해 데이터를 전송하기 위해, 프로세서는 메모리로부터 그것의 레지스터들로 값들을 로딩하기 위한 로딩 명령어들 및 그것의 레지스터들로부터 상기 값들을 외부 포트 또는 다른 그러한 인터페이스로 송신하기 위한 송신 명령어들을 실행해야 한다. 단일의 프로세싱 유닛 또는 소수의 코어들을 가지는 통상적 프로세서들에서, 이는 단지 데이터를 오프-칩으로 전송하기 위한 로딩 및 송신 명령어들을 실행하는 대량의 프로세서의 프로세싱 사이클들을 소비한다. 따라서, 일반적으로 프로세서에 이러한 부하를 주는 것은 바람직하지 않다. 대신에, 보통은 DMA(direct memory access) 엔진이 프로세서와 동일한 칩에 제공된다. DMA 엔진은 프로그래밍 가능하거나 또는 프로그래밍 가능하지 않을 수 있다. 프로그래머블 DMA는 프로세서 대신에 외부 전송을 수행하는 별개의 코드를 실행한다. 비-프로그래머블 DMA 엔진은 프로세서로 하여금 일련의 트랜잭션들을 특정하는 서술자(descriptor)를 DMA 엔진에 송신하게 하고, DMA 엔진은 상기 특정된 트랜잭션들을 프로세서의 추가적 관여 없이 수행할 것이다. 어느 경우든, 따라서 프로세서는 그렇지 않으면 데이터를 오프-칩으로 전송하는 것에 관여되었을 수 있는 프로세싱의 일부 또는 전부가 줄어든다.
그러나, DMA 엔진이 아닌 프로세서 그 자체에 의해 수행되는 전송은 실제적으로 더 빠를 수 있다. 추가로, 현재 개시된 프로세서의 실시예들에서, 실제로 프로세서는 다수의 타일들을 포함할 수 있다(예를 들어, 20개 이상, 50개 이상 또는 100개 이상의 타일들) 이는 I/O를 수행하는 프로세서의 리소스들을 너무 많이 소비하지 않고 DMA 엔진을 떠나서 할 수 있는 기회를 제시한다. 대신에, 컴파일러는 I/O 타일들처럼 동작할 타일들의 서브셋 만을 지명한다. 예를 들어, 이는 10개, 100개 또는 그 이상의 타일들 중에 단지 2개 또는 4개의 타일들 또는 칩 상의 타일들 중 1%, 2%, 5% 또는 10% 미만의 타일들일 수 있다. 따라서, DMA 엔진에 대한 성능 논쟁은 더 이상 적용되지 않는다.
이 방식은 계산과 교환을 직렬화하기 위해 선택되는 BSP 방식의 경우에 특히 적절할 수 있다. 즉, 계산의 대부분 또는 전부가 교환 페이즈와 구분되기 때문에, 오프-칩 전송에서 프로세서와 관련된 부담의 이슈가 적어지며, 계산 페이즈에서 교환이 없을 것이므로 계산에 관한 성능에 영향이 없다.
실시예들에서, 상기 외부 인터페이스는 상기 패킷들을 상기 목적지, 또는 상기 외부 인터페이스와 상기 목적지 또는 목적지들 사이의 연결(예를 들어, 버스 또는 네트워크)을 통한 목적지에 송신하도록 구성될 수 있고, 상기 링크는 상기 패킷들을 송신하기 위한 제1 대역폭을 가지며; 그리고 타일들 각각은 상기 패킷들을 송신하기 위한 제2 대역폭을 가지며, I/O 타일들로서 지명된 타일들의 수는 적어도 상기 제2 대역폭에 의해 나누어진 상기 제1 대역폭을 가장 가까운 완전수로 반올림 또는 내림한 것일 수 있다.
지명된 타일들의 최적의 수는 하나의 타일의 외부 I/O 대역폭 대비 칩의 I/O 대역폭에 종속된다. 예를 들어, 일 대표적 구현예에서, 각 타일은 32Gbps 전이중 대역폭을 가지며, 칩은 1536Gbps 외부 SERDES 대역폭을 가진다. 따라서, 상기에 기초하여 오프-칩 대역폭을 완전히 쓰기(subscribe) 위해서는 48개 타일들이 요구된다. 다른 구현예들에서, 숫자는 달라질 수 있고, 최적의 수는 타일의 대역폭 대 칩의 외부 오프-칩 대역폭에 종속될 수 있다.
실시예들에서, 이것의 다른 이점은, 모든 데이터 이동이 결정론을 지원하는 컴파일러에 의해 결정될 수 있다는 것이다.
본 명세서에 개시된 다른 양태에 따르면, 프로세서 및 패킷들의 오프-칩 목적지 또는 목적지들을 포함하는 시스템이 제공된다.
본 명세서에 개시된 다른 양태에 따르면, 프로세서를 동작하는 방법 또는 시스템이 제공되며, 상기 방법은 코드를 컴파일하기 위해 컴퓨터 상의 컴파일러를 실행하는 단계, 상기 컴파일은 타일들 중 어느 것이 교환 요청 메시지를 송신할 것인지 지명하는 컴파일러를 포함하며; 그리고 상기 프로세서 상에 상기 컴파일된 코드를 실행하는 단계를 포함하며, 그에 의해 상기 지명된 타일들로 하여금 상기 교환 요청 메시지를 상기 교환 블록에 송신하게 하여, 상기 교환 블록으로 하여금 큐잉 및 플로우 제어를 수행하게 하고, 상기 교환 요청 메시지에서 표시된 상기 타일들로 하여금 그들의 패킷들의 송신을 수행하게 한다.
실시예들에서, 상기 컴파일은 상기 타일들 중 어느 것이 상기 I/O 타일들인지 지명하는 컴파일러를 포함할 수 있다.
본 발명의 이해를 돕기 위해 그리고 실시예들이 어떻게 효과를 내는지 도시하기 위해, 예시로서 첨부 도면들에 대한 참조가 이루어진다.
도 1은 멀티-스레드 프로세싱 유닛의 개략적 블록도이다.
도 2는 복수의 스레드 컨텍스트들의 개략적 블록도이다.
도 3은 인터리빙된(interleaved) 타임 슬롯들의 방식을 개략적으로 도시한다.
도 4는 감독자 스레드(supervisor thread)와 복수의 작업자 스레드(worker thread)들을 개략적으로 도시한다.
도 5는 다수의 스레드들의 다수의 스레드들의 종료 상태(exit state)들을 집합시키기 위한 로직의 개략적 다이어그램이다.
도 6은 동일한 타일 상의 작업자 스레드들에서의 동기화를 개략적으로 도시한다.
도 7는 다수의 타일들을 포함하는 프로세서 칩의 개략적 블록도이다.
도 8은 BSP(bulk synchronous parallel) 컴퓨팅 모델의 개략적 도시이다.
도 9는 BSP 모델의 다른 개략적 도시이다.
도 10은 멀티-스레드 프로세싱 유닛들 간의 BSP의 개략적 도시이다.
도 11는 상호연결 시스템의 개략적 블록도이다.
도 12는 다수의 상호연결된 프로세서 칩들의 시스템의 개략적 도시이다.
도 13는 멀티-티어 BSP 방식의 다른 개략적 도시이다.
도 14는 다수의 프로세서 칩들의 시스템의 다른 개략적 도시이다.
도 15는 기계 지능 알고리즘에서 사용된 그래프의 개략적 도시이다.
도 16은 타일들 간에 데이터를 교환하기 위한 구성을 개략적으로 도시한다.
도 17은 인터리빙된(interleaved) 타임 슬롯들의 방식을 개략적으로 도시한다.
도 18은 칩들 간에 동기화를 위한 예시적 배선을 도시한다.
도 19는 외부 교환을 위한 플로우 제어 메커니즘을 개략적으로 도시한다.
도 20은 호스트 동기화 프록시와 관련되는 프로그램 플로우를 개략적으로 도시한다.
도 21는 다수의 프로세서 모듈들의 시스템의 개략적 블록도이다.
도 21은 본 발명의 예시적 실시예들에 따른 예시적 시스템들을 도시한다. 시스템은 다수의 프로세서 모듈들을 포함한다. 이들은 서로 다른 칩들(다이들)(2) 상의 프로세서들 및/또는 주어진 칩(2) 상의 서로 다른 프로세서 타일들(4)을 포함할 수 있다. 실시예들에서, 시스템은 외부(인터-칩) 상호연결(72)에 의해 서로 연결된 다수의 프로세서 칩들(2)을 포함한다. 칩들(2)은 동일한 집적 회로(IC) 패키지에 또는 상이한 패키지들에 또는 일부는 동일한 패키지에 그리고 일부는 상이한 패키지들에 패키징될 수 있다. 실시예들에서, 외부 상호연결(72)은 비-시간-결정적 상호연결일 수 있고, 이에 의해 이 상호연결을 통한 데이터의 교환은 본질적으로 비-시간-결정적이다. 이것의 추가적 세부내용은 곧 그리고 또한 도 19와 관련하여 논의될 것이다.
추가로, 실시예들에서, 프로세서 칩들(2) 중 하나, 일부 또는 전부 각각은 각각의 타일들(4)의 어레이를 포함할 수 있다. 각 타일(4)은 각각의 프로세싱 유닛(10) 및 메모리(11)를 포함한다. 실시예들에서, 각 타일들(4) 상의 프로세싱 유닛(10)은 타일(4)에서 다수의 동시적 스레드들을 실행하기 위한 멀티스레드 프로세싱 유닛(10)이다. 도 1 내지 4를 참조하여 예시적 구현예가 더 자세히 논의될 것이다. 타일들(4)은 타일들(4) 간의 데이터의 전송을 하게 하는 내부(온-칩), 인터-타일 상호연결(inter-tile interconnect)(34)을 통해 서로 연결된다. 실시예들에서, 인터-타일 상호연결(34)은 타일들(4) 간에 데이터의 시간-결정적 교환을 하게 하는 시간-결정적 상호연결일 수 있다. 도 16 내지 17를 참조하여 예시적 구현예가 더 자세히 논의될 것이다. 또한, 내부 상호연결(34)은 타일들(4) 간에 동기화를 가능하게 할 수 있다. 이것의 추가적인 예시적 세부내용들이 예를 들어, 도 7 및 11과 관련하여 논의될 것이다.
각 타일(4)은 실행 유닛(13) 예를 들어, 파이프라인을 포함하는 각각의 프로세싱 유닛(10)을 포함한다. 또한 각 타일(4)은 각각의 실행 유닛(10)에 의해 실행될 코드를 저장하기 위한 각각의 명령어 메모리(12) 및 각각의 실행된 코드에 의해 동작된 데이터(코드에 의해 동작될 데이터 및/또는 동작의 결과인 데이터)를 저장하는 각각의 데이터 메모리를 포함하는 각각의 메모리(11)를 포함한다. 실행 유닛(13)은 바람직하게는 파이프라인화된 방식으로 구성된 페치 스테이지(fetch stage)(14), 디코드 스테이지(decode stage)(16) 및 실행 스테이지(18)을 포함한다. 페치 스테이지(14)는 디코딩되고 상기 디코드 및 실행 스테이지들(16, 18)에 의해 각각 실행될, 명령어 메모리(12)로부터 나머지 파이프라인 또는 실행 유닛(13)으로의 기계 코드 명령어들의 발급을 제어한다. 명령어 발급이 각각의 타일(4)에서 잠시 멈춘 경우, 이는 파이프라인 또는 실행 유닛(13)이 명령어 발급이 재개될 때까지 그것의 각각의 코드를 실행하는 것을 중지함을 의미한다.
실시예들에서, 각 타일(4) 상의 프로세싱 유닛(10)은 동일한 각각의 파이프라인(13)을 통해 인터리빙된 다수의 동시적 스레드들을 실행하도록 구성된 멀티스레드 프로세싱 유닛(10)이며, 컨텍스트 레지스터들의 각각의 세트에 보유된 프로그램 상태와 함께 각각의 타임-슬롯 내에 각각 존재한다. 각 타일(4) 상의 스레드들은 각각의 감독자 스레드 및 각각의 복수의 작업자 스레드들을 포함할 수 있다. 이것의 예시적 구현예 세부내용이 도 1 내지 4를 참조하여 더 자세히 논의될 것이다. 명령어 발급이 잠시 멈추거나 정지된 경우, 타일(4) 상의 모든 슬롯들에 대해 정지된다(즉, 스레드들로부터의 명령어들이 발급되지 않음).
또한, 각 타일(4)은 내부 또는 외부 상호연결(36, 76)을 통해(내부 또는 외부 교환여부에 따라) 각각의 데이터 메모리(22)와 타일(4)의 외부 간의 데이터의 교환을 핸들링하기 위한 교환 인터페이스(311)을 포함한다.
실시예들에서, 시스템은 호스트 서브시스템(93)을 더 포함할 수 있고, 가속기 서브시스템(300)을 호스트(93)에 제공하기 위해 프로세서 모듈들(2, 4)은 가속기 프로세서들(XPU)로서 구성될 수 있다. 호스트(93)는 작업을 가속기 서브시스템(300)에 할당하기 위한 호스트 역할로 구성된 적어도 하나의 호스트 프로세서를 포함하며, 가속기 서브시스템(300)에서 가속기들(2, 4) 각각은 호스트(93)에 의해 할당된 작업을 수행하도록 구성된다. 호스트(93)는 특권을 가지며 가속기 디바이스들(2, 4)은 호스트(93)에 의해 위임된 작업을 수행한다. 실시예들에서, 가속기 프로세서 칩들(2) 각각은 기계 지능 가속기 프로세서로 사용하기 위해 특별히 설계된 IPU(“Intelligence Processing Unit")의 형태를 취한다.
호스트(93)는 단일의 호스트 CPU의 형태를 취할 수 있고, 또는 호스트 CPU와 가속기 프로세서들(2) 간에 중간자들로서 구성된 하나 이상의 게이트웨이 프로세서들(도시되지 않음)을 포함할 수 있다. 또한, 하나 이상의 게이트웨이들이 하나 이상의 네트워크 부착 저장 디바이스들(NAS)에 연결될 수 있다. 게이트웨이(들)은 예를 들면, 이미지들의 시퀀스들 오디오 스트림들 또는 가속기 프로세서들(2)에 스트리밍될 경험 데이터의 다른 스트림들과 같이, 이들이 그에 기초하여 기계 학습을 수행하게 하기 위한(예를 들어, 상기 수신된 경험 데이터에서 오브젝트들, 얼굴들, 소리들 도는 기타 구조들을 식별하기 위해 신경 네트워크를 트레이닝하기 위한), NAS(들)로부터 가속기들(2)로 향하는 데이터의 스트림들을 버퍼링하도록 구성될 수 있다.
인터-프로세서 상호연결(inter-processor interconnect)(72)은 또한 PCI, PCIe 또는 이더넷 인터페이스와 같은 적절한 호스트 인터페이스(97)를 통해 가속기 프로세서들(2)을 호스트(93)에 연결한다. 인터-프로세서 상호연결(72)은 가속기 프로세서들(2) 사이 및/또는 가속기(2)와 호스트(93) 사이에서 데이터를 교환하기 위한 데이터 경로들(301)의 네트워크를 포함한다.
상호연결(들)(34, 72)은 또한 프로세서 모듈들(2, 4) 간의 동기화를 위한 메커니즘을 포함하고, 실시예들에서 호스트(93)와 프로세서 모듈들(2, 4) 간의 동기화를 위한 메커니즘을 포함한다. 이 메커니즘은 인터-프로세서 상호연결(72)의 데이터 경로들(301)과는 별개인 동기화(sync) 네트워크(96)와 동기화 네트워크(96)를 통해 동기화 요청들 및 동기화 수신확인 신호들을 송신하기 위한 동기화 로직(36, 76, 98)를 포함할 수 있다. 이 메커니즘은 BSP 방식을 구현하는데 사용될 수 있다.
동기화 로직은 주어진 칩(2) 상의 타일들(4)의 일부 또는 전부의 그룹 간에 동기화를 위한, 내부 상호연결(34)에 내부 동기화 제어기(36)를 포함할 수 있다. 타일(4)이 특정 포인트에 도달한 경우, 예를 들어 그것의 계산 페이즈를 마친 경우, 타일(4)은 동기화 네트워크(96)를 통해 동기화 요청을 송신하고, 그리고 동기화 네트워크(96)를 통해 동기화 수신확인 신호를 다시 수신할 때까지 그 타일(4)에서 명령어 발급을 정지한다. 내부 동기화의 경우에, 동기화 요청이 그룹에서 모든 타일들(4)로부터 수신되었으면, 내부 동기화 제어기(36)는 동기화 수신확인만을 리턴한다. 또한, 동기화 로직(36)은 칩들(2)의 일부 또는 전부의 그룹 간에 동기화를 위한 외부 sync 제어기(76)를 포함할 수 있다. 타일(4)이 특정 포인트에 도달한 경우, 예를 들어 그것의 계산 페이즈를 마친 경우, 타일(4)은 동기화 네트워크(96)를 통해 동기화 요청을 송신하고, 그리고 동기화 네트워크(96)를 통해 동기화 수신확인 신호를 다시 수신할 때까지 그 타일(4)에서 명령어 발급을 정지한다.
외부 동기화가 호스트 수반(host involvement)과 관련되지 않는 경우에, 외부 동기화 제어기(76)는 동기화 수신확인을 리턴할 책임을 진다. 이는 그룹 내의 모든 칩들(2)로부터 동기화 요청 수신되었던 경우에만 그렇게 한다. 외부 동기화가 호스트 수반과 관련되지 않는 경우에, 외부 동기화 제어기(98)는 동기화 수신확인을 리턴할 책임을 진다. 이는 호스트가 통과될 동기화 배리어를 허용하는 HSP(98)의 레지스터에 기록했던 경우에만 그렇게 한다. 도시적 목적으로, 도 21에서 HSP(98)는 동기화 요청을 수신하고 동기화 수신확인을 발급하는 것으로서 도시되었지만, 이는 동기화 동작의 계층적 레벨 및 호스트 수반이 요구되는지 여부에 따라 내부 또는 외부 동기화 로직(36, 76)에 의해서도 이루어질 수 있다는 것이 인식될 것이다. HSP(98)는 적어도 개념적으로 또는 개략적으로 말해서, 외부 상호연결(76)의 부분으로 고려될 수 있다. 물리적으로 HSP(98)는 칩들 간의 상호연결(76)의 하드웨어에서 오프-칩 또는 대안적으로 게이트웨이들이 사용되는 경우 하나 이상의 게이트웨이들과 동일한 칩에서 온-칩으로 구현될 수 있다. 동기화 제어기들(36, 76)의 예시적 세부내용들은 도 11 및 14를 참조하여 이후에 논의될 것이다. HSP(98)의 예시적 구현 세부내용들은 도 18 및 20를 참조하여 이후에 논의될 것이다.
실시예들에서, 동기화 요청의 송신은 타일들(4)의 명령어 세트에 포함된 전용 SYNC 명령어를 실행함으로써 트리거링될 수 있다. 동기화 동작의 계층적 레벨(예를 들어, 온-칩, 칩들 간 또는 호스트 수반)은 SYNC 명령어의 오퍼랜드에 의해 설정될 수 있다. 이것의 예시적 구현 세부내용들도 이후에 논의될 것이다.
실시예들에서, 인터-프로세서 상호연결(72)은 이 상호연결(72)의 데이터 경로들(301)을 통한 데이터의 전송이(동기화 네트워크(96)를 통한 동기화 신호하기와 반대로) 본질적으로 비-시간-결정적인 점에서 비-시간-결정적 상호연결이다. 즉, 예를 들어, 전달이 보장되지 않고 따라서 재전송을 요할 수 있기 때문에, 타이밍은 알 수 없거나 적어도 보장되지 않는다.
칩들 사이의 통신을 시간-결정적으로 만드는 것이 실용적이지 않을 수 있다. 외부(오프-칩) 통신은 내부(온-칩) 통신에 비해 큰 불확실성을 경험한다. 예를 들어, 외부 교환은 덜 지역적이며(less local), 이는 배선이 더 멀리 도달하므로 더 용량성(more capacitive)이고 노이즈에 더 취약함을 의미한다. 이것은 차례로 손실을 초래할 수 있고, 따라서 물리적 레이어에서의 재전송을 제공하는 플로우 제어 메커니즘에 대한 필요를 초래할 수 있다. 대안적으로, 칩들(2) 간 상호연결은 물리적 및/또는 링크 레이어에서 무손실일 수 있으나, 큐들이 오버플로우되게 하고 패킷들이 떨어지는 상이한 소스들 및 목적지들 간 네트워크 레이어 플로우들의 경쟁 때문에 더 높은 네트워킹 레이어에서는 실제로는 손실이 있다.
칩들(2) 간 데이터의 교환을 동기화하기 위한 메커니즘을 제공하는 것이 바람직하다. 예를 들어, 상이한 시간-결정적 도메인들로 구성된 다수의 프로세싱 타일들을 포함하는 시스템에 걸친 BSP 교환 방식을 지원하는 것이 바람직할 수 있고, 여기서 동일한 도메인 내에서 타일들 간의 통신은 시간-결정적이지만, 상이한 도메인들에서 타일들 간의 통신은 비-시간-결정적이다.
본 명세서에 개시된 실시예들에 따르면, 외부 상호연결(72)은 다음과 같이 동작하도록 구성된 적어도 하나의 교환 블록(XB)(78)을 구비한다.
상이한 칩들(2) 상의 타일들(4) 간에 수행할 외부 교환이 있는 경우, 타일들(4) 중 적어도 하나에서 실행되는 소프트웨어(예를 들어, 감독자 스레드)는 외부 교환 요청 메시지(XREQ)를 교환 블록(78)에 송신한다. 교환 요청은 데이터(즉, 데이터 컨텐츠)를 교환하는데 사용된 것과 동일한 데이터 경로(301)를 통해 제어 패킷으로서 송신될 수 있다. 그러나 외부 상호연결(72)에 내장된 별개의 제어 경로를 통해 신호가 전달될 수 있다는 것을 배제하지 않는다. 실시예들에서, 타일들(40) 중 단일한 한 타일은 현재 교환 페이즈(예를 들어, BSP 수퍼스텝의 교환 페이즈)에서 외부적으로(오프-칩) 송신할 데이터를 가지는 타일들(4) 전부 또는 적어도 특정 그룹 내의 타일들 전부(실시예들에서, 동기화 그룹과 동일할 수 있음)를 대신하여 교환 요청을 송신한다. 컴파일러는 어떤 타일(4)이 어떤 다른 타일들을 대신하여 교환 요청을 송신할 것인지 결정하고, 교환 요청을 송신하기에 적절한 명령어 또는 명령어들로 책임있는 타일(4)에 소프트웨어(예를 들어, 감독자 스레드)를 컴파일한다. 이는 예를 들면, 시스템이 사전-컴파일된 정적 그래프(pre-compiled static graph)를 실행하고 있기 때문에 가능할 수 있다.
교환 요청 메시지(들)은 교환 블록(78)에 어떤 타일들(4)이 현재 교환 페이즈에서 외부적으로 교환할 데이터 컨텐츠를 가지는지 전한다. 교환 블록(78)은 그 타일(4)에 “교환-온" 메시지(XON)를 송신함으로써 이들 표시된 타일들(4) 중 하나로부터 시작한다. 응답으로, 해당 타일(4)은 외부 상호연결(72)을 통해 데이터 패킷들을 전송하는 것을 시작하며, 패킷들 각각은 패킷의 헤더에서 목적지 타일(4)을 표시한다. 교환 블록(78)은 외부 상호연결(72)을 통해 송신된 패킷을 수신하고 버퍼링하도록 구성된 큐(FIFO 버퍼)를 포함한다. 큐의 다른 단부에서, 교환 블록(78)은 패킷들을 그들의 헤더들에 기초하여 그들의 목적지로 라우팅한다. 현재 전송중인 타일(4)이 그것의 마지막 패킷을 송신하면, 교환 블록(78)은 교환-오프(XOFF) 메시지를 그 타일(4)에 송신한다(교환 블록(78)은 타일에 의해 방출된 패킷 헤더의 ‘마지막 패킷’ 플래그에 기초하여 주어진 패킷이 주어진 타일(4)로부터의 마지막 패킷임을 결정할 수 있다). 그 후, 교환 블록(78)은 송신할 데이터를 가지는 것으로서 교환-온을 교환 요청(들)에서 표시된 다음 타일(4)에 송신하고, 이것을 모든 표시된 타일들(4)이 현재 교환 페이즈에서 그들이 송신해야 하는 모든 패킷들을 송신할 때까지 계속한다. 교환-온 및 교환-오프 메시지들은 데이터(즉, 데이터 컨텐츠)를 교환하는데 사용된 것과 동일한 데이터 경로(301)를 통해 제어 패킷으로서 송신될 수 있다. 대안적으로 외부 상호연결(72)에 내장된 별개의 제어 경로를 통해 신호가 전달될 수 있다는 것을 배제하지 않는다.
실시예들에서, 교환 메커니즘은 외부 타일들(4)로부터의 전송과 타일들(4)이 아닌 외부 소스들로부터의 전송을 구별하지 않거나 또는 다른 그러한 소스들로부터의 전송들을 적어도 배제하지 않는다. 예를 들면, 그러한 다른 외부 소스들은 호스트(93) 및/또는 외부 저장 드라이브, 네트워크 카드 등과 같은 하나 이상의 다른 외부 소스들을 포함할 수 있다. 상기 경우들에, 타일들(4) 중 하나로부터의 교환 요청(XREQ)(예를 들어, 컴파일러에 의해 결정된 것으로서)은 또한 하나 이상의 다른 외부 소스들 예를 들어, 호스트(93)를 특정할 수 있다.
따라서, 각 타일(4)에 서로에 대해 비-시간-결정적 또는 비동기식인 도메인들 간에 데이터를 교환하기 위한 메커니즘이 이점적으로 제공된다.
이 메커니즘은 BSP 방식을 구현하는데 사용될 수 있다. 도 8 및 9에 도시된 바와 같이, BSP 방식에서, 시스템은 교환 페이즈(50) 및 계산 페이즈(52)의 대안적 사이클에서 동작한다. 각 사이클에서, 교환 페이즈(50)는 각 타일(4) 상에 각각의 교환 페이즈를 포함하고, 계산 페이즈(52)는 각 타일(4) 상의 각각의 계산 페이즈를 포함한다. 현재 경우에, 배리어 동기화(30)가 각 사이클에서 계산 페이즈(52)와 다음 교환 페이즈(50) 사이에 배치된다. 즉, 모든 타일들(4)은 임의의 타일이 다음 교환 페이즈(50)로 진행하기 전에 그들 각각의 계산 페이즈(52)를 완료할 것이 요구된다. 실시예들에서, 이는 동기화 네트워크(96)를 통해 송신된 동기화 요청들 및 수신확인들에 그리고 상호연결(34, 72)에서 동기화 로직(36, 76)(그리고 실시예들에서 HSP(98))에 기초하여 상기 기술된 동기화 메커니즘에 의해 구현될 수 있다. 즉, 타일(4)이 그것의 현재 계산 페이즈(52)를 완료했고, 동기화할 준비가 된 경우, 그 타일(4)의 소프트웨어(예를 들어, 감독자 스레드)는 동기화 요청을 송신하고 동기화 수신확인이 수신될 때까지 명령어 발급을 정지한다. 실시예들에서, 이는 각각의 타일(4)에서 SYNC 명령어를 실행함으로써 이루어진다. 실시예들에서, 이는 배리어 유형 동기화를 특정하기 위한 모드 오퍼랜드 세트를 가지는 SYNC 명령어의 인스턴스이다(그리고 또한, 실시예들에서, 배리어 동기화를 수행하기 위한 복수의 상이한 가능한 동기화 그룹들 중 하나를 특정함).
주어진 타일(4)이 그것의 현재 각의 교환 페이즈(50)를 완료한 경우, 타일(4)은 그것의 다음 계산 페이즈(52)로 바로 진행할 수 있고 - 타일(4)은 모든 다른 타일들(4)이 그들의 교환 페이즈를 완료할 것을 대기할 필요가 없다. 그럼에도 불구하고, 주어진 타일(4)에서 계산 페이즈(52)는 하나 또는 일부 다른 타일들(4) 및/또는 다른 외부 소스들로부터 데이터를 수신하는 것에 여전히 종속적일 수 있다. 동일한 칩 상의 타일들(4)로부터의 데이터에 대해, 프로그램은 시간-결정적 상호연결의 알려진 교환 타이밍과 관련하여 임의의 종속적 계산들의 시간을 맞출 수 있다.
노트: 설명의 편의상, 도 9를 참조하여 상기 논의는 모든 교환은 상이한 칩(2) 상의 적어도 일부 타일들(4) 간의 외부 교환과 관련된다고 가정한다. 사실상, 도 13과 관련하여 이후에 논의될 바와 같이, BSP 동작은 내부 및 외부 도메인들로 분리될 수 있다. 그럼에도 불구하고, 외부 데이터의 수신에 대한 동기화 원칙은 여전히 적용된다.
예시로서, 다음은 이제 도 21 또는 유사한 시스템의 구성들을 구현하기 위한 추가적인 선택적 세부사항을 기술한다. 추가로, 외부 교환의 예시적 세부사항들은 도 1 내지 18 및 20의 예시적 구현예의 맥락에서 도 19와 관련하여 기술될 것이다.
도 1은 본 발명의 실시예들에 따른 프로세서 모듈(4)의 예시를 도시한다. 예를 들어, 프로세서 모듈(4)은 동일한 칩 상의 유사한 프로세서 타일들의 어레이 중 하나의 타일이거나 또는 자체 칩 상의 단독형 프로세서로서 구현될 수 있다. 프로세서 모듈(4)은 배럴-스레드 프로세싱 유닛의 형태의 멀티 스레드 프로세싱 유닛(10) 및 로컬 메모리(11)을 포함한다(즉, 멀티 타일 어레이의 경우 동일한 타일에 또는 단일 프로세서 칩의 경우 동일한 칩에). 배럴-스레드 프로세싱 유닛은 멀티 스레드 프로세싱 유닛의 유형이며, 파이프라인의 실행 시간은 인터리빙된 타임 슬롯들의 반복 시퀀스로 분할되며, 각각은 주어진 스레드에 의해 소유될 수 있다. 이는 곧 더 자세히 논의될 것이다. 메모리(11)는 명령어 메모리(12) 및 데이터 메모리(22)(상이한 어드레스가능한 메모리 유닛 또는 동일한 어드레스가능한 메모리 유닛의 상이한 영역들에서 구현될 수 있음)를 포함한다. 명령어 메모리(12)는 프로세싱 유닛(10)에 의해 실행될 기계 코드를 저장하며, 데이터 메모리(22)는 실행된 코드에 의해 동작될 데이터 및 실행된 코드에 의해 출력된 데이터(예를 들어, 상기 동작의 결과로) 둘 모두를 저장한다.
메모리(12)는 다양한 상이한 스레드들의 프로그램을 저장하며, 각 스레드는 특정 작업 또는 작업들을 수행하기 위한 명령어들의 각각의 시퀀스를 포함한다. 본 명세서에서 참조되는 명령어는 기계 코드 명령어들 즉, 단일 op코드 및 0개 이상의 오퍼랜드들을 포함하는 프로세서들의 명령어 세트의 기본 명령어들의 중 하나의 인스턴스를 의미한다.
본 명세서에 기술된 프로그램은 복수의 작업자 스레드 및 하나 이상의 감독자 스레드들로서 구조화될 수 있는 감독자 서브프로그램을 포함한다. 이는 곧 더 자세히 논의될 것이다. 실시예들에서, 작업자 스레드들의 일부 또는 전부의 각각은 각각의 “코드렛(codelet)"의 형태를 취한다. 코드렛은 특정한 유형의 스레드이며, 때때로 “아토믹(atomic)" 스레드로서 참조된다. 그것은 스레드의 시작시(런칭되는 시점으로부터) 그것이 실행하는데 필요한 모든 입력 정보를 가진다. 즉, 그것은 프로그램의 임의의 다른 부분으로부터 또는 런칭된 이후 메모리로부터 임의의 입력을 취하지 않는다. 추가로, 프로그램의 다른 부분은 그것이 종료(완료)될 때까지 스레드의 임의의 출력들(결과들)을 사용하지 않을 것이다. 그것이 에러를 마주치지 않는 한, 완료하는 것이 보장된다. 주의. 일부 문서는 코드렛을 무상태(stateless)인 것으로 정의한다. 즉, 두번 실행하면, 그것은 그것의 제1 실행으로부터 어떠한 정보도 상속받지 못하지만, 추가적 정의는 여기에서 채택되지 않는다. 또한, 모든 작업자 스레드들이 코드렛들(아토믹)을 필요로 하는 것은 아니며, 실시예들에서, 대신에 작업자들의 일부 또는 전부는 서로 통신할 수 있다.
프로세싱 유닛(10) 내에서, 명령어 메모리(12)로부터의 스레드들 중 다수의 상이한 스레드들은 단일의 실행 파이프라인(13)을 통해 인터리빙될 수 있다(비록 일반적으로 명령어 메모리에 저장된 총 스레드의 서브셋만 전체 프로그램에서 임의의 주어진 포인트에 인터리빙될 수 있지만). 멀티 스레드 프로세싱 유닛(10)은 동시적으로 실행될 스레드들 중 상이한 각각의 스레드의 상태(컨텍스트)를 표현하도록 각각 구성된 복수의 컨텍스트 레지스터 파일들(26); 동시적으로 실행된 스레드들에 공통되는 공유된 실행 파이프라인(13); 및 인터리빙된 방식으로 바람직하게는 라운드 로빈(round robin) 방식으로 공유된 파이프라인을 통한 실행을 위해 동시적 스레드들을 스케쥴하기 위한 스케쥴러(24)를 포함한다. 프로세싱 유닛(10)은 복수의 스레드들에 공통되는 공유된 명령어 메모리(12) 및 복수의 스레드들에 다시 공통되는 공유된 데이터 메모리(22)에 연결된다.
실행 파이프라인(13)은 페치 스테이지(14), 디코드 스테이지(16) 및 실행 스테이지(18)을 포함하며, 실행 스테이지(18)는 산술 및 논리 연산, 어드레스 계산, 로딩 및 저장 동작 및 명령어 세트 아키텍처에 의해 정의된 다른 동작을 수행할 수 있는 실행 유닛을 포함한다. 컨텍스트 레지스터 파일들(26) 각각은 각각의 스레드의 프로그램 상태를 표현하기 위한 레지스터들의 각각의 세트를 포함한다.
컨텍스트 레지스터 파일들(26) 각각을 만드는 레지스터들의 예시는 도 2에 개략적으로 도시된다. 컨텍스트 레지스터 파일들(26) 각각은 각각의 스레드에 대해 적어도 하나의 프로그램 카운터(PC, program counter)를 포함하는(스레드가 현재 실행되는 명령어 어드레스를 계속 추적하기 위한) 각각의 하나 이상의 제어 레지스터들(28)을 포함하며, 실시예들에서, 각각의 스레드의 현재 상태(현재 실행중이거나 예를 들어 에러가 발생해 정지되었는지 여부와 같은)를 기록하는 하나 이상의 상태 레지스터들(SR, status register)의 세트를 포함한다. 컨텍스트 레지스터 파일들(26) 각각은 또한 각각의 스레드에 의해 실행되는 명령어들의 오퍼랜드들을 즉, 실행시 각각의 스레드의 op코드들에 의해 정의된 동작들에 따른 동작된 값들 또는 그로부터 결과하는 값들을 일시적으로 보유하기 위한 오퍼랜드 레지스터들(OP, operand register)(32)의 각각의 세트를 포함한다. 컨텍스트 레지스터 파일들(26) 각각이 각각의 하나 이상의 다른 유형의 레지스터(도시되지 않음)를 선택적으로 포함할 수 있다는 것이 인식될 것이다. 또한, 용어 “레지스터 파일"이 공통 레지스터 공간에서 레지스터들의 그룹을 지칭하도록 사용될 수 있지만, 이는 본 명세서에서 반드시 그렇지는 않으며, 하드웨어 컨텍스트들(26) 각각은(각 컨텐츠를 표현하는 레지스터 세트들(26) 각각은) 하나 또는 다수의 그러한 레지스터 파일들을 일반적으로 포함할 수 있다.
실시예들에서, 구성은 동시적으로 실행될 수 있는 스레드들의 수 M 각각에 대한 하나의 작업자 컨텍스트 레지스터 파일 CX0...CX(M-1) (도시된 예시에서 M=3이지만 이것은 제한이 아님) 및 하나의 추가적인 감독자 컨텍스트 레지스터 파일 CXS을 포함한다. 작업자 컨텍스트 레지스터 파일들은 작업자 스레드들의 컨텍스트들을 저장하기 위해 예약되며, 감독자 컨텍스트 레지스터 파일은 감독자 스레드의 컨텍스트를 저장하기 위해 예약된다. 실시예들에서, 감독자 컨텍스트는 그것이 작업자들 각각보다 상이한 수의 레지스터들을 가진다는 점에서 특별하다. 작업자 컨텍스트들 각각은 바람직하게는 서로 동일한 수의 상태 레지스터들 및 오퍼랜드 레지스터들을 가진다. 실시예들에서, 감독자 컨텍스트는 작업자들 각각 보다 더 적은 오퍼랜드 레지스터들을 가질 수 있다. 작업자 컨텍스트의 오퍼랜드 레지스터의 예시는 감독자는 포함하지 않는: 부동 소수점 레지스터들, 누적 레지스터들 및/또는 전용 가중치 레지스터들 (신경 네트워크의 가중치 보유용)을 가질 수 있다. 실시예들에서, 또한, 감독자는 상이한 수의 상태 레지스터들을 가진다. 추가로, 실시예들에서, 프로세서 모듈(4)의 명령어 세트 아키텍처는 작업자 스레드들 및 감독자 스레드(들)이 일부 상이한 유형들의 명령어를 실행하지만 일부 명령어 유형들을 공유하도록 구성될 수 있다.
페치 스테이지(14)는 페치 명령어들이 스케쥴러(24)의 제어 하에서 명령어 메모리(12)로부터 실행되도록 연결된다. 스케쥴러(24)는 타임 슬롯들의 반복 시퀀스에서 차례로 스레드들을 동시적으로 실행하는 세트 각각으로부터 명령어를 페치하기 위해 페치 스테이지(14)를 제어하도록 구성되며, 따라서 곧 자세히 논의될 바와 같이 파이프라인(13)의 리소스들이 복수의 시간적으로 인터리빙된 시간 슬롯들로 분할되게 한다. 예를 들면, 스케쥴링 방식은 라운드-로빈 또는 가중 라운드-로빈일 수 있다. 상기 방식에서 동작하는 프로세서에 대한 다른 용어는 배럴 스레드 프로세서(barrel threaded processor)이다.
일부 실시예들에서, 스케쥴러(24)는 스레드가 정지했는지 여부를 표시하는 각 스레드의 상태 레지스터들 SR 중 하나에 엑세스할 수 있고, 따라서 스케쥴러(24)는 사실상 페치 스테이지(14)를 제어하여 현재 동작중인 스레드들만의 명령어들을 페치하도록 한다. 실시예들에서, 바람직하게는 각 타임 슬롯(및 대응하는 컨텍스트 레지스터 파일)은 하나의 스레드 또는 다른 스레드에 의해 항상 소유되며, 즉, 각 슬롯은 어떤 스레드에 의해 항상 점유되며, 그리고 각 슬롯은 스케쥴러(24)의 시퀀스에 항상 포함되며; 비록 임의의 주어진 슬롯을 점유하는 스레드가 때때로 정지될 수 있지만, 시퀀스가 그 슬롯에 다다른 경우 각각의 스레드에 대한 명령어 페치는 지나간다(pass over). 대안적으로 예시에 포함되지 않았지만, 대안적으로 덜 바람직한 구현예들에서, 일부 슬롯들은 일시적으로 비어있고 스케쥴링된 시퀀스에서 배제될 수 있다. 실행 유닛이 인터리빙할 수 있는 타임 슬롯의 수를 참조하는 경우 등에, 이는 실행 유닛이 동시에 실행할 수 있는 최대 슬롯 수, 즉 실행 유닛의 하드웨어가 지원하는 동시 슬롯의 수를 지칭한다.
페치 스테이지(14)는 컨텍스트들 각각의 프로그램 카운터(PC)에 엑세스할 수 있다. 각각의 스레드에 대해, 페치 스테이지(14)는 프로그램 카운터에 의해 표시된 바와 같이 프로그램 메모리(12)에서 다음 어드레스로부터 그 스레드의 다음 명령어를 페치한다. 프로그램 카운터는 분기 명령에 의해 분기되지 않는 한 각 실행 사이클을 증가시킨다. 그 다음, 패치 스테이지(14)는 페치된 명령어를 디코딩될 디코드 스테이지(16)에 패스하고, 디코드 스테이지(16)는 명령어들이 실행되도록 디코딩된 명령어의 표시를 명령어에서 특정된 임의의 오퍼랜드 레지스터들(32)의 디코딩된 어드레스들과 함께 실행 유닛(18)에 패스한다. 실행 유닛(18)은 오퍼랜드 레지스터들(32) 및 제어 레지스터들(28)에 엑세스할 수 있고, 산술 명령어의 경우에서와 같이, 이는 디코딩된 레지스터 어드레스들에 기초하여 명령어를 실행하는 것에서 사용될 수 있다(예를 들어, 2개의 오퍼랜드 레지스터들의 값을 더함, 곱함, 뺌 또는 나누고, 그 결과를 각각의 스레드의 다른 오퍼랜드 레지스터에 출력함으로써). 또는 명령어가 메모리 엑세스(로딩 또는 저장)를 정의하면, 실행 유닛(18)의 로딩/저장 로직은 명령어에 따라, 데이터 메모리로부터 각각의 스레드의 오퍼랜드 레지스터로 값을 로딩하거나 또는 각각의 스레드의 오퍼랜드 레지스터로부터 데이터 메모리(22)로 값을 저장한다. 또는 명령어가 분기 또는 상태 변경을 정의하면, 그에 따라 실행 유닛은 프로그램 카운터 PC의 값을 변경하거나 또는 상태 레지스터들 SR 중 하나의 값을 변경한다. 한 스레드의 명령어가 실행 유닛(18)에 의해 실행되는 동안, 인터리빙된 시퀀스에서 다음 타임 슬롯의 스레드로부터의 명령어는 디코드 스테이지(16)에 의해 디코딩될 수 있고; 및/또는 한 명령어가 디코드 스테이지(16)에 의해 디코딩되는 동안, 그 다음 타임 슬롯의 스레드로부터의 명령어는 페치 스테이지(14)에 의해 페치될 수 있다(일반적으로 본 발명의 범위는 타임 슬롯 당 하나의 명령어, 예를 들어, 대안적인 시나리오에서, 2개 이상의 명령어들의 배치(batch)는 타임 슬롯마다 주어진 스레드로부터 발급될 수 있음). 따라서, 인터리빙은 공지된 배럴 스레드 프로세싱 기법들에 따라 파이프라인(13)에서 지연을 이점적으로 숨긴다.
스케쥴러(24)에 의해 구현된 인터리빙 방식의 예시가 도 3에 도시된다. 여기서, 동시 스레드들은 라운드-로빈 방식에 따라 인터리빙되며, 여기서 상기 구성의 각 라운드 내에서, 상기 라운드는 각각의 스레드를 실행하기 위해 타임 슬롯들(S0, S1, S2…)의 시퀀스로 분할된다. 일반적으로, 각 슬롯은 하나의 프로세서 사이클 길이이며, 다른 슬롯들은 모든 가능한 실시예들에서 필수적이지는 않지만, 균등하게 사이징된다. 예를 들면, 가중 라운드 로빈 방식도 가능하며, 일부 스레드들은 실행 라운드마다 다른 스레드보다 더 많은 사이클을 얻는다. 일반적으로, 배럴-스레딩은 라운드-로빈 또는 가중 라운드-로빈 스케쥴을 이용할 수 있고, 후자의 경우에 가중화는 고정적이거나 또는 적응적일 수 있다.
실행 라운드마다 시퀀스가 무엇이든, 이 패턴은 반복되고, 각 라운드는 각각의 타임 슬롯들의 각각의 인스턴스를 포함한다. 따라서, 본 명세서에서 언급된 타임 슬롯은 시퀀스의 주어진 반복에서의 타임 슬롯의 특정한 인스턴스가 아니라, 시퀀스 내의 반복 할당 위치를 의미한다. 달리 말하면, 스케쥴러(24)는 파이프라인(13)의 실행 사이클들을 복수의 시간적으로 인터리빙된(시간-분할 다중화된) 실행 채널들로 배분하고, 각각은 타임 슬롯들의 반복 시퀀스에서 각각의 타임 슬롯의 회귀(recurrence)를 포함한다. 도시된 실시예에서, 4개의 타임 슬롯들이 있으나, 이는 도시적인 목적 뿐이며, 다른 수도 가능하다. 예를 들어, 하나의 바람직한 실시예에서, 실제로 6개의 타임 슬롯들이 있다.
라운드-로빈 방식이 분할되는 타임 슬롯들의 수가 무엇이든, 본 개시에 따르면, 프로세싱 유닛(10)은 타임 슬롯들보다 하나 더 많은 컨텍스트 레지스터 파일(26)을 포함한다. 즉, 배럴 스레딩이 가능한 인터리빙된 타임 슬롯들의 수보다 하나 더 많은 컨텍스트를 지원한다.
이는 도 2에서 예시로서 도시된다: 도 3에서 도시된 바와 같이 4개의 타임 슬롯들(S0…S3)이 있으면, 5개의 컨텍스트 레지스터 파일들(CX0, CX1, CX2, CX3 및 CXS)이 있다. 즉, 비록 배럴-스레드 방식에서 단지 4개의 실행 타임 슬롯들 S0…S3이 있고, 따라서 단지 4개의 스레드들만이 동시적으로 실행될 수 있지만, 본 명세서에서는 제5의 프로그램 카운터(PC), 제5의 오퍼랜드 레지스터들(32)의 세트 및 실시예들에서 제5의 하나 이상의 상태 레지스터들(SR)의 세트를 포함하는 제5의 컨텍스트 레지스터 파일(CXS)를 추가하는 것이다. 언급된 바와 같이, 실시예들에서, 감독자 컨텍스트는 다른 것들(CX0 ... 3)과 다를 수 있고, 감독자 스레드는 실행 파이프라인(13)을 동작시키기 위한 상이한 세트의 명령어들을 지원할 수 있다.
제1의 4개의 컨텍스트들(CX0 ... CX3) 각각은 프로그래머가 원하는 애플리케이션 특정 계산 작업들이 무엇이든 수행하기 위해 4개의 실행 타임 슬롯들(S0 ... S3) 중 하나에 현재 할당된 복수의 "작업자 스레드들" 중 각각의 작업자 스레드의 상태를 표현하는데 사용된다(다시 말하면 이것은 명령어 메모리(12)에 저장된 프로그램의 작업자 스레드의 전체 수의 서브셋일 수 있음). 그러나, 제5의 컨텍스트(CXS)는 작업자 스레드의 실행을 조정하기 위한 역할인, 적어도 모든 작업자 스레드(W) 중 어느 것이 전체 프로그램의 어떤 지점에서 타임 슬롯들(S0, S1, S2 ...) 중 어느 것으로 실행되어야 하는지를 할당한다는 의미에서, “감독자 스레드(SV)"의 상태를 표현하기 위한 특별한 기능을 위해 예약된다. 선택적으로 감독자 스레드는 다른 "감독자"또는 조정 책임을 가질 수 있다. 예를 들면, 감독자 스레드는 특정 실행 순서를 보장하기 위해 배리어 동기화를 수행할 책임이 있을 수 있다. 예를 들어, 하나 이상의 제2 스레드들이 동일한 프로세서 모듈(4)에서 실행되는 하나 이상의 제1 스레드들에 의해 출력될 데이터에 종속되는 경우에, 감독자는 제1 스레드들이 종료될 때까지 제2 스레드들 중 어느 것도 시작되지 않을 것을 보장하기 위해 배리어 동기화를 수행할 수 있다. 및/또는, 감독자는 프로세서 모듈(4)의 하나 이상의 스레드들이 다른 타일 또는 프로세서 칩과 같은 데이터의 특정 외부 소스가 그 데이터를 사용가능하게 하기 위해 요구되는 프로세싱을 완료할 때까지 시작하지 않을 것을 보장하기 위해 배리어 동기화를 수행할 수 있다. 또한, 감독자 스레드는 다수의 작업자 스레드와 관련된 다른 기능을 수행하는데 사용될 수 있다. 예를 들면, 감독자 스레드는 데이터를 프로세서 모듈(4)로 외부적으로 통신할 책임이 있을 수 있다(스레드들 중 하나 이상에서 동작될 외부 데이터를 수신하고 및/또는 작업자 스레드들 중 하나 이상에 의해 출력된 데이터를 전송). 일반적으로, 감독자 스레드는 임의의 종류의 감독 또는 프로그래머가 원하는 조정 기능을 제공하는데 사용될 수 있다. 다른 예시로서, 예를 들어 감독자는 타일 로컬 메모리(12)와 저장 디스크 또는 네트워크 카드와 같은 더 넓은 시스템(어레이(6) 외부)의 하나 이상의 리소스들 간의 전송을 감독할 수 있다.
물론 4개의 타임 슬롯들은 단지 예시일 뿐이고, 일반적으로 다른 실시 예에서, 다른 수들이 있을 수 있으므로, 라운드 당 최대 M개의 타임 슬롯들(0 ... M-1)이 있는 경우, 프로세서 모듈(4)은 M+1 컨텍스트들(CX ... CX(M-1) & CXS)를 포함한다. 즉, 임의의 주어진 시간에 인터리빙될 수 있는 각 작업자 스레드에 대한 것과 감독자를 위한 추가 컨텍스트. 일 대표적 구현예에서, 예를 들어, 6개의 타임 슬롯들과 7개의 컨텍스트들이 있다.
도 4를 참조하면, 감독자 스레드(SV)는 인터리빙된 타임 슬롯들의 방식에서 그 자체의 타임 슬롯을 가지지 않는다. 또한 작업자 스레드들에 슬롯을 할당하는 작업자도 유연하게 정의되지 않는다. 오히려, 각 타임 슬롯은 작업자 컨텍스트를 저장하기 위한 그 자체의 전용 컨텍스트 레지스터 파일(CX0...CXM-1)을 가지며, 이는 슬롯이 작업자에게 할당된 경우 작업자에 의해 사용되지만, 슬롯이 감독자에게 할당된 경우에는 사용되지 않는다. 주어진 슬롯이 감독자에게 할당된 경우, 해당 슬롯은 대신에 감독자의 컨텍스트 레지스터 파일(CXS)로 사용된다. 감독자는 항상 그 자체의 컨텍스트에 엑세스할 수 있고 작업자들을 감독자 컨텍스트 레지스터 파일(CXS)을 점유할 수 없다.
감독자 스레드(SV)는 임의의 그리고 모든 타임 슬롯들(S0...S3)에서 (또는 더 일반적으로 (S0…SM-1)) 실행될 수 있다. 스케쥴러(24)는 프로그램이 전체로서 시작된 경우, 감독자 스레드를 타임 슬롯들 전부에 할당함으로써 시작되도록 구성된다. 즉, 따라서 감독자(SV)가 (S0…S3) 모두에서 실행을 시작함. 그러나, 감독자 스레드에는 어떤 후속 포인트에(즉시 또는 하나 이상의 감독자 작업 수행 후), 실행 중인 슬롯들 각각을 작업자 스레드들 예를 들어, 도 4에 도시된 예시에서 초기 작업자(W0…W3) 중 각각의 작업자 스레드에 일시적으로 양도하는 메커니즘이 제공된다. 이는 본 명세서에서 예로서 "RUN"이라 불리는 run 명령어를 실행하는 감독자 스레드에 의해 수행된다. 실시예들에서, 이 명령어는 2개의 오퍼랜드들을 가진다: 명령어 메모리(12)에서 작업자 스레드의 어드레스 및 데이터 메모리(22)에서 해당 작업자 스레드에 대한 일부 데이터의 어드레스:
RUN task_addr, data_addr
작업자 스레드들은 다른 것과 동시에 실행될 수 있는 코드의 부분들이며, 각각은 하나 이상의 수행될 각각의 계산 작업들을 표현한다. 데이터 어드레스는 작업자 스레드에 의해 동작될 일부 데이터를 특정할 수 있다. 대안적으로, run 명령어는 작업자 스레드의 어드레스를 특정하는 단일 오퍼랜드를 가지며, 데이터 어드레스는 작업자 스레드의 코드에 포함될 수 있고 또는 다른 예에서 단일 오퍼랜드는 작업자 스레드와 데이터의 어드레스들을 특정하는 데이터 구조를 가르킬 수 있다(point). 언급한 바와 같이, 일부 실시예들에서, 작업자들의 적어도 일부는 코드렛들 즉, 동시적으로 실행가능한 코드의 아토믹 유닛들의 형태를 취한다. 대안적으로 또는 추가적으로, 작업자들 중 일부는 코드렛일 필요는 없고, 대신에 상호 통신할 수 있다.
run 명령어(“RUN")는 스케쥴러(24) 상에서 동작하여, 이 명령어 그 자신이 실행되는 현재 타임 슬롯을 오퍼랜드에 의해 특정된 작업자 스레드에 양도하도록 한다. run 명령어에서 이 명령어가 실행되는 타임 슬롯이 양도된다는 것이 암시적이다(기계 코드 명령어들의 컨텍스트에서 암시적이라는 것은 이를 특정할 오퍼랜드가 없다는 것을 의미함 - op코드 그 자신으로부터 암시적인 것으로 이해됨). 따라서, 양도되는 타임 슬롯은 감독자가 run 명령어를 실행하는 타임 슬롯이다. 또는 다시 말해서, 감독자는 양도하는 동일한 공간에서 실행한다. 감독자가 “이 위치에서 코드 조각을 실행해"라고 말하면, 그 시점으로부터 되살아나는 슬롯은 관련 작업자 스레드에 의해 (일시적으로) 소유된다.
감독자 스레드(SV)는 유사한 동작을 그 타임 슬롯들의 일부 또는 전부를 (명령어 메모리(12)에서 더 큰 세트(W0…Wj)로부터 선택된) 작업자 스레드들(W0…W3) 중 다른 각각의 작업자 스레드들에 양도하기 위해 하나 이상의 다른 타임 슬롯들 각각에서 수행한다. 일단 이것을 마지막 슬롯까지 마치며, 감독자는 정지한다(이후에 슬롯들 중 하나가 작업자(W)에 의해 되돌려질 때 중단된 위치에서 재개된다).
따라서, 감독자 스레드(SV)는 각각은 하나 이상의 작업들을 수행하는 상이한 작업자 스레드들을 인터리빙된 실행 타임 슬롯들(S0...S3) 중 다른 하나에 할당할 수 있다. 감독자 스레드가 작업자 스레드를 실행할 시간임을 결정하면, run 명령어(“RUN")을 사용하여, 이 작업자를 RUN 명령어가 실행된 타임 슬롯에 할당한다.
또한, 일부 실시예들에서, 명령어 세트는 run 명령어의 변형 RUNALL(“run all")을 포함한다. 이 명령어는 모두 동일한 코드를 실행하는 하나의 작업자보다 많은 세트를 함께 런칭하는데 사용된다. 실시예들에서, 이는 프로세싱 유닛의 슬롯들(S0…S3)(또는 더 일반적으로(S0…. S(M-1)) 모두에서 작업자를 런칭한다.
추가로, 일부 실시예들에서, RUN 및/또는 RUNALL 명령어는 실행될 때, 자동적으로 일부 상태를 하나 이상의 감독자 상태 레지스터(CXS)(SR)로부터 RUN 또는 RUNALL에 의해 런칭되는 작업자 스레드(들)의 하나 이상의 대응하는 상태 레지스터들에 복사한다. 예를 들어, 복사된 상태는 부동 소수점 반올림 모드(예를 들어 가장 가까운 수로 반올림 또는 0으로 반올림) 및/또는 오버플로우 모드(예를 들어 무한대를 표현하는 별개의 값을 포화 또는 사용)와 같은 하나 이상의 모드들을 포함할 수 있다. 그 후, 복사된 상태 또는 모드는 문제되는 작업자를 제어하여 상기 복사된 상태 또는 모드에 따라 동작시킨다. 실시예들에서, 작업자는 이후에 이를 그 자신의 상태 레지스터로 오버라이트(overwrite)할 수 있다(다만 감독자의 상태를 변경시킬 수는 없음). 대안적 또는 추가적 실시예들에서, 작업자들은 감독자의 하나 이상의 상태 레지스터들로부터 일부 상태를 읽기 위해 선택할 수 있다(그리고 다시 그들 자신의 상태를 나중에 변경할 수 있음). 예를 들어, 다시 이는 부동 소수점 모드 또는 반올림 모드와 같은 감독자 상태 레지스터로부터 모드를 채택하기 위한 것일 수 있다. 그러나, 실시예들에서, 감독자는 작업자들의 컨텍스트 레지스터(CX0) 중 어느 것도 읽을 수 없다.
현재 할당된 작업자 스레드들(W0...W3) 각각은 각각의 run 명령어에 의해 특정된 코드에서 정의된 하나 이상의 계산 작업들을 수행하기 위해 진행한다. 이 작업이 끝나면, 각각의 작업자 스레드는 실행 중인 타임 슬롯을 감독자 스레드로 다시 전달한다. 이는 종료 명령어(“EXIT")를 실행함으로써 수행된다.
EXIT 명령어는 종료시 각각의 코드렛의 상태를 표시하기 위해(예를 들어, 특정 조건이 만족되었는지 여부를 표시하기 위해) 프로그래머가 원하는 모든 목적에 사용될 적어도 하나의 오퍼랜드 및 바람직하게는 단일의 오퍼랜드 exit_state (예를 들어, 바이너리 값)를 가진다:
EXIT exit_state
EXIT 명령어는 스케쥴러(24) 상에서 동작하여 실행되는 타임 슬롯이 감독자 스레드로 되돌아오게 한다. 그 후, 감독자 스레드는 하나 이상의 후속 감독자 작업들(예를 들어, 배리어 동기화 및/또는 데이터를 다른 타일들과 같은 외부 리소스들과 교환)을 수행하고 및/또는 다른 run 명령어를 실행하여 새로운 작업자 스레드(W4 등)를 문제되는 슬롯에 할당할 수 있다. 그러므로, 명령어 메모리(12)에서 스레드들의 총 수는 배럴-스레드 프로세싱 유닛(10)이 임의의 한 시간에 인터리빙할 수 있는 수보다 크다. 감독자 스레드(SV)의 역할은, 전체 프로그램의 어느 단계에서, 명령어 메모리(12)로부터의 작업자 스레드들(W0 ... Wj) 중 어느 것이 스케쥴러(24)의 라운드 로빈 스케쥴에서 인터리빙된 타임 슬롯들(S0...SM) 중 어느 것에 할당되어야 하는지를 스케줄링하는 것이다.
또한, 실시예들에서, EXIT 명령어는 추가적 특별한 기능을 가질 수 있는데 즉, EXIT 명령어의 오퍼랜드에 특정된 종료 상태로 하여금 (전용 하드웨어 로직(37)에 의해) 동일한 프로세서 모듈(4)(예를 들어, 동일한 타일)의 동일한 파이프라인(13)을 통해 실행되는 복수의 다른 작업자 스레드들의 종료 상태들로 집합(aggregation)되게 한다. 따라서, 작업자 스레드를 종료하기 위한 명령어에 추가적 암시적 기능이 포함된다.
이를 수행하기 위한 예시적 회로가 도 5에 도시된다. 이 예시에서, 개별 스레드들의 종료 상태들 및 집합된 종료 상태는 각각 단일 비트 즉, 0 또는 1의 형태를 취한다. 프로세서 모듈(4)은 그 프로세서 모듈(4)의 집합된 종료 상태를 저장하기 위한 “로컬 컨센서스(local consensus)"($LC) 레지스터(38)를 포함한다. 실시예들에서, 이 로컬 컨센서스 레지스터($LC)(38)는 감독자의 컨텍스트 레지스터 파일(CXS)에서 감독자의 상태 레지스터들 중 하나이다. 집합을 수행하기 위한 로직은 (A) EXIT 명령어들의 오퍼랜드에서 특정된 종료 상태와 (B) 로컬 컨센서스 레지스터($LC)(38)의 현재 값의 논리 AND를 수행하고, 그리고 결과(Q)를 로컬 집합의 새로운 값으로서 로컬 컨센서스 레지스터($LC)(38)로 다시 출력하도록 구성된 AND 게이트(37)를 포함할 수 있다. 그러나, 도 5는 단지 하나의 예시이며, 불리언 OR(0과 1의 해석이 반대로 된 경우와 동일) 또는 비-불리언 종료 상태들을 집합시키기 위한 더 복잡한 회로와 같이, 다른 형태의 자동화된 집합도 구현될 수 있다는 것이 인식될 것이다. 예를 들어, 실시예들에서, 종료 상태들은 세 부분으로된 상태(trinary state)일 수 있다.
프로그램에서 적절한 동기화 포인트에서, 로컬 컨센서스 레지스터($LC)(38)에 저장된 값은 초기적으로 1의 값으로 리셋된다. 즉, 이 포인트 이후에 종료된 임의의 스레드들은 다음 리셋 때까지 로컬로 집합된 종료 상태($LC)에 기여할 것이다. EXIT 명령어가 실행될 때마다, 그것의 종료 상태는 이전에 리셋된 이후의 상태로 집합된다(마지막 리셋 이후). 따라서, 도 5에 도시된 구성에 의해, 로직은 로컬 컨센서스 레지스터($LC)(38)가 리셋되었던 마지막 시간 이후 EXIT 명령어에 의해 종료된 임의의 작업자 스레드들의 종료 상태들의 실행 집합을 유지한다. 로컬 컨센서스 레지스터($LC)(38)에서 집합의 리셋은 하나 이상의 범용 명령어들을 사용하여 로컬 컨센서스 레지스터($LC)(38)의 레지스터 어드레스에 PUT을 수행하는 감독자(SV)에 의해 수행될 수 있다. 대안적으로, 리셋이 예를 들면, 본 명세서에서 이후에 기술될 SYNC 명령어를 실행함으로써 트리거링되는, 자동화된 메커니즘에 의해 수행되는 것을 배제하지 않는다.
종료 상태는 프로그래머가 원하는 것을 표현하기 위해 사용될 수 있지만, 특별히 예상되는 예는 종료 상태 1은 각각의 작업자 스레드가 "성공" 또는 "참" 상태에서 종료되었다는 것을 표시하고, 종료 상태 0은 각각의 작업자 스레드가 "실패" 또는 "거짓" 상태에서 종료되었다는 것을 표시하는데 사용하는 것이다. 예를 들어, 스레드의 종료 상태는 기계 지능 알고리즘의 그래프에서 각각의 노드의 하나 이상의 파라미터들 내의 에러(들)가 미리 결정된 메트릭에 따라 허용가능한 레벨 내에 있는지의 여부 또는 불리언이 아닌 경우, 스레드의 결과에 대한 신뢰도를 나타낼 수 있다.
프로그래머에 의해 종료 상태에 어떤 의미가 주어지든, 감독자 스레드(SV)는 로컬 컨센서스 레지스터($LC)(38)로부터 집합된 값을 얻어 예를 들어, 마지막 동기화 포인트에, 마지막으로 리셋된 이후, 예를 들어, 모든 작업자들이 성공 또는 참 상태에서 종료했는지 여부를 결정하기 위해, 종료된 모든 작업자 스레드들의 집합된 종료 상태를 결정할 수 있다. 이 집합된 값에 따라, 감독자 스레드는 프로그래머의 설계에 따라 호스트 프로세서(93H)에 보고할지 또는 동일한 작업자 스레드들을 포함하는 프로그램의 부분의 다른 반복을 수행할지와 같은 결정을 할 수 있다.
도 6을 참조하면, 실시예들에서, SYNC(동기화) 명령어가 프로세서의 명령어 세트에 제공된다. SYNC 명령어는 감독자 스레드(SV)로 하여금 모든 현재 실행중인 작업자들(W)이 EXIT 명령어에 의해 종료될 때까지 대기하는 효과를 가진다. 실시예들에서, SYNC 명령어는 오퍼랜드로서 모드를 가지며(실시예들에서 그것의 유일한 오퍼랜드), 모드는 SYNC가 동일한 프로세서 모듈(4) 상에서 로컬적으로 실행 중인 작업자 스레드들에 대해서만 로컬적으로 동작할지 여부(즉, 동일한 배럴 스레드 프로세싱 유닛(10)의 동일한 파이프라인(13)을 통한 스레드들만); 또는 대신에 다수의 타일이나 심지어 다수의 칩들에 걸쳐에 적용할지 여부를 특정한다.
SYNC mode // mode ∈ {tile, chip, zone_1, zone_2}
이는 이후에 더 자세히 논의될 것이지만 도 6의 목적을 위해 로컬 SYNC가 가정될 것이다(“SYNC 타일", 즉, 단일의 타일 내에서의 동기화).
배럴-스레드 프로세싱 유닛(10)의 타임 슬롯들(S0, S1, ...) 중 어느 것도 작업자에 의해 점유되지 않을 때까지 감독자(SV)가 자동으로 대기하도록 암시되므로, 작업자는 SYNC 명령어의 오퍼랜드로서 식별될 필요가 없다. 도 6에 도시된 바와 같이, 현재 작업자들의 배치(WLn) 각각이 감독자에 의해 모두 런칭되면, 감독자는 SYNC 명령어를 실행한다. 감독자(SV)가 배럴-스레드 프로세싱 유닛(10)의 모든 슬롯들(S0 ... 3)에서 작업자들(W)을 런칭하면(도시된 예시에서는 모두 4개이지만, 단지 하나의 구현예일 뿐이다), 일단 작업자 스레드들(WLn)의 현재 배치 중 첫번째가 종료되면, SYNC가 감독자에 의해 실행될 것이며, 따라서 적어도 하나의 슬롯의 제어를 감독자(SV)에게 되돌려준다. 이와 달리, 작업자들이 모든 슬롯들을 차지하지 않으면, 현재 배치(WLn)의 마지막 스레드가 런칭된 직후에 SYNC가 간단히 실행될 것이다. 어느 경우이든, SYNC는 감독자(SV)로 하여금 작업자들(WLn-1)의 현재 배치 중 다른 모두를 대기하게 하여 감독자가 진행할 수 있기 전에 EXIT를 실행한다. 이후에만, 감독자는 GET 명령어를 실행하여 로컬 컨센서스 레지스터($LC)(38)의 컨텐츠를 얻는다. 감독자 스레드에 의한 상기 대기는 SYNC가 실행되었던 하드웨어에 적용된다. 즉, SYNC 명령어의 op코드에 응답하여, 실행 스테이지(18)의 실행 유닛(EXU)에서의 로직은 페치 스테이지(14) 및 스케쥴러(24)로 하여금 감독자 스레드의 명령어들을 발급하는 것을 모든 현재 작업자 스레드들이 EXIT 명령어를 실행할 때까지 정지하게 한다. 로컬 컨센서스 레지스터($LC)(38)의 값을 얻은 후(선택적으로 그 사이 일부 다른 감독자 코드와 함께) 일부 포인트에, 감독자는 PUT 명령어를 실행하여 로컬 컨센서스 레지스터($LC)(38)를 리셋한다(도시된 예시에서 1로).
또한, 도 6에서 도시된 바와 같이, SYNC 명령어는 작업자 스레드들의 상이한 상호종속적 레이어들(WL1, WL2, WL3) 간에 동기화 배리어들을 위치시키는데 사용될 수 있으며, 각 연속적 레이어에서 하나 이상의 스레드들은 그것의 선행 레이어에서의 하나 이상의 작업자 스레드들에 의한 출력 데이터에 종속된다. 감독자 스레드에 의해 실행된 로컬 SYNC는 직전 레이어(WLn)의 모든 작업자 스레드가 종료하기 전까지(EXIT 명령어를 실행함으로써) 다음 레이어(WLn+1)의 작업자 스레드들 중 어느 것도 실행되지 않을 것을 보장한다.
언급된 바와 같이, 실시예들에서, 프로세서 모듈(4)은 멀티 타일 프로세서를 형성하는 상호연결된 타일들의 어레이 중 하나로서 구현될 수 있고, 타일 각각은 도 1 내지 6과 관련하여 상기 기술된 바와 같이 구성될 수 있다.
이는 도 7에서 추가로 도시되며, 도 7은 단일의 칩 프로세서(2)를 도시한다. 즉, 다수의 프로세서 타일들(4)의 어레이(6) 및 타일들(4) 간에 연결된 온-칩 상호연결(34)를 포함하는 단일의 다이(die). 칩(2)은 단독으로 그 자체의 단일-칩 통합 회로 패키지에서 구현되거나 또는 동일한 IC 패키지에서 패키징된 다수의 다이들 중 하나로서 구현될 수 있다. 또한, 온-칩 상호연결은 그것이 타일들(4)로 하여금 서로 데이터를 교환하게 하므로, “교환 패브릭(exchange fabric)"(34)로 지칭될 수 있다. 각 타일(4)은 배럴 스레드 프로세싱 유닛(10) 및 메모리(11)의 각각의 인스턴스를 포함하며, 각각은 도 1 내지 6과 관련하여 상기 기술된 바와 같이 구성된다. 예를 들어, 예시로서, 칩(2)은 수백개 또는 심지어 수천개의 타일들(4)의 순서를 포함할 수 있다. 완전성을 위해, 본 명세서에서 지칭되는 “어레이(array)"는 반드시 임의의 특정한 수의 타일들(4)의 규모 또는 물리적 레이아웃을 암시하지 않는다.
또한, 실시예들에서, 각 칩은 하나 이상의 외부 링크들(8)을 포함하며, 외부 링크는 칩(2)이 상이한 칩들 상의 하나 이상의 다른, 외부 프로세서들과 연결되게 한다(예를 들어, 동일한 칩(2)의 하나 이상의 다른 인스턴스들). 이들 외부 링크들(8)은 칩(2)을 호스트 프로세서에 연결하기 위한 하나 이상의 칩-투-호스트 링크들 및/또는 동일한 IC 패키지 또는 카드 또는 상이한 카드들 상의 칩(2)의 하나 이상의 다른 인스턴스들과 서로 연결하기 위한 하나 이상의 칩-투-칩 링크들 중 임의의 하나 이상을 포함할 수 있다. 일 예시적 구성에서, 칩(2)은 칩(2)에 의해 프로세싱될 입력 데이터의 형태로 칩-투-호스트 링크들 중 하나를 통해 칩에 연결된 호스트 프로세서(도시되지 않음)로부터의 작업을 수신한다. 칩(2)의 다수의 인스턴스들은 칩-투-칩 링크들에 의해 카드들에 서로 연결될 수 있다. 따라서, 호스트는 호스트 어플리케이션을 위해 요구되는 작업량에 따라, 단일의 칩 프로세서(2) 또는 가능하게는 다수의 상호연결된 카드들에 구성된 다수의 단일 칩 프로세서들(2)로 구성된 컴퓨터에 엑세스할 수 있다.
상호연결(34)은 어레이(6)에서 상이한 프로세서 타일들(4)로 하여금 온-칩(2)에서 서로 통신하게 하도록 구성된다. 그러나, 동일한 타일(4) 상의 스레드들 간에 종속성들이 잠재적으로 있을 뿐만 아니라, 또한 어레이(6)에서 상이한 타일들(4)에서 실행되는 프로그램의 부분들 간에 종속성들이 있을 수 있다. 그러므로, 한 타일(4) 상의 코드의 조각이 다른 타일(4) 상의 코드의 다른 조각에 의해 사용가능해지는 종속적인 데이터에 앞서 실행되는 것을 방지하기 위한 기법이 요구된다.
이는 도 8 및 9에서 개략적으로 도시된 바와 같이, 벌크 동기식 병렬(BSP) 교환 방식을 구현함으로써 달성될 수 있다.
BSP의 하나의 버전에 따르면, 각 타일(4)은 계산 페이즈(52)와 교환 페이즈(50)를 타일들 간 배리어 동기화(30)에 의해 서로 별개인, 대안적 사이클에서 수행한다. 도시된 경우에, 배리어 동기화는 각 계산 페이즈(52)와 후속하는 교환 페이즈(50) 사이에 위치된다. 계산 페이즈(52) 동안, 각 타일(4)은 하나 이상의 계산 작업들을 타일에서 로컬적으로 수행하지만, 그것의 임의의 계산 결과를 임의의 다른 타일들(4)과 통신하지 않는다. 교환 페이즈(50)에서, 각 타일(4)은 하나 이상의 계산의 결과들을 선행하는 계산 페이즈로부터 그룹에서 하나 이상의 다른 타일들로 및/또는 그로부터 교환하지만, 그것의 작업(들)이 종속성을 가지는 임의의 데이터를 다른 타일들(4)로부터 수신할 때까지 임의의 새로운 계산들을 수행하지 않는다. 또한 선행하는 계산 페이즈에서 계산된 제외한 임의의 데이터를 임의의 다른 타일에 송신하지도 않는다. 이는 교환 페이즈에서 수행될 수 있는 내부 제어 관련 동작들과 같은 다른 동작들을 배제하지 않는다. 실시예들에서, 교환 페이즈(50)는 임의의 비-시간-결정적 계산을 포함하지 않으나, 소수의 시간-결정적 계산들이 교환 페이즈(50) 동안에 선택적으로 허용될 수 있다. 계산을 수행하는 타일(4)은 계산 페이즈(52) 동안에, 동기화되는 그룹 내의 다른 타일들(4)과의 통신을 수반하지 않는 한, 동기화되는 타일들(4)의 어레이 외부인 다른 외부 시스템 리소스들 예를 들어, 네트워크 카드, 디스크 드라이브 또는 FPGA와 통신하는 것이 허용될 수 있다. 타일 그룹 외부의 통신은 선택적으로 BSP 메커니즘을 활용할 수 있지만, 대안적으로 BSP를 활용하지 않고 대신에 그 자체의 다른 동기화 메커니즘을 사용할 수 있다.
BSP 원칙에 따라, 배리어 동기화(30)가 계산 페이즈(52)로부터 교환 페이즈(50)로 트랜지션하는 또는 교환 페이즈(50)로부터 계산 페이즈(52)로 트랜지션하는 시점에 또는 둘 모두에 위치된다. 즉, (a) 모든 타일들(4)은 그들 각각의 계산 페이즈들(52)을 그룹에서 임의의 타일이 다음 교환 페이즈(50)로 진행하도록 허용되기 전에 완료될 것이 요구되거나 또는 (b) 그룹에서 모든 타일들(4)은 그들 각각의 교환 페이즈들(50)을 그룹에서 임의의 타일이 다음 계산 페이즈(52)로 진행하도록 허용되기 전에 완료될 것이 요구되거나 또는 (c) 이들 조건들 둘 모두를 만족할 것이 요구된다. 모든 3개의 변형에서, 페이즈들 간을 교차하는 것은 개별적 프로세서들이며, 동기화하는 것은 전체 어셈블리이다. 그 후, 교환과 계산 페이즈들의 시퀀스는 다수의 반복에 대해 반복될 수 있다. BSP 용어에서, 교환 페이즈와 계산 페이즈의 각 반복은 때때로 “수퍼스텝(superstep)으로 지칭된다(문서에서 용어는 항상 일관적으로 사용되지 않음: 때때로 각 개별적 교환 페이즈와 계산 페이즈가 개별적으로 수퍼스텝으로 불리며, 반면 다른 곳에서는 본 명세서에서 채용된 바와 같이, 교환과 계산 페이즈들이 함께 수퍼스텝으로 지칭됨).
동일한 칩(2) 또는 상이한 칩들 상의 타일들(4)의 다수의 상이한 그룹들이 서로에 대해 비동기적으로 동작하는 별개의 각각의 BSP 그룹을 형성할 수 있고, 계산, 동기화 및 교환의 BSP 사이클은 각 주어진 그룹은 내에서만 적용되지만, 각 그룹은 다른 그룹과 독립적으로 그렇게 한다. 즉, 멀티-타일 어레이(6)는 각기 다른 그룹들과 독립적이고 비동기식으로 동작하는 다수의 내부적인 동기식 그룹을 포함할 수 있다(이후에 더 자세히 논의됨). 일부 실시예들에서, 이후 더 자세히 논의될 바와 같이, 동기화 및 교환의 계층적 그룹화가 있다.
도 9는 어레이(6)에서 타일들의 일부 또는 전부의 그룹(4i, 4ii, 4iii) 가운데에서 구현되는 것으로서 BSP 원칙을 도시하며, 여기에서: (A) 계산 페이즈(52)로부터 교환 페이즈(50)로의 배리어 동기화(상기 참조)가 적용된다. 이 구성에서, 일부 타일들(4)은 일부 다른 타일들이 아직 교환중인 동안 계산(52)을 시작할 수 있다.
본 명세서에 개시된 실시예들에 따르면, 이 유형의 BSP는 배리어 동기화 즉, SYNC 명령어를 수행하기 위한 추가적, 특별한, 전용 기능을 기계 코드 명령어에 통합함으로써 지원될 수 있다.
실시예들에서, SYNC 기능은 오퍼랜드로서 인터-타일 모드에 의해 한정된 때 이 기능을 가진다. 예를 들어, 온-칩 모드: SYNC 칩.
이는 도 10에 개략적으로 도시된다. 각 타일(4)이 멀티-스레드 프로세싱 유닛(10)을 포함하는 경우, 각 타일의 계산 페이즈(52)는 실제로 동일한 타일(4) 상의 다수의 작업자 스레드들(W)에 의해 수행되는 작업들을 포함할 수 있다(그리고 주어진 타일(4)에서 주어진 계산 페이즈(52)는 작업자 스레드들의 하나 이상의 레이어들(WL)을 포함할 수 있고, 이전에 기술된 바와 같이, 다수의 레이어들은 오퍼랜드로서 로컬 온-타일 모드를 가지는 SYNC 명령어를 사용하여 내부 배리어 동기화들에 의해 분리될 수 있다). 주어진 타일(4)에서 감독자 스레드(SV)가 현재 BSP 수퍼스텝에서 마지막 작업자 스레드를 런칭하면, 상기 타일(4) 상의 감독자는 SYNC 명령어를 오퍼랜드: SYNC 칩으로서 인터-타일 모드 세트와 함께 실행한다. 감독자가 그 각각의 프로세싱 유닛(10)의 모든 슬롯들에서 작업자 스레드들을 런칭(RUN)하려는 경우, "SYNC 칩"은 더 이상 현재 BSP 수퍼스텝에서 더 이상 작업자를 실행할 필요 없는 첫 번째 슬롯이 감독자에 다시 전달되는 즉시 실행된다. 예를 들어, 이는 마지막 레이어(WL)에서 EXIT하려는 제1 스레드 후에 또는 단순히 단일 레이어만 있는 경우 EXIT하려는 제1 작업자 스레드 후에 발생할 수 있다. 이와 달리, 모든 슬롯들이 현재 BSP 수퍼스텝에서 작업자들을 실행하기 위해 사용될 것이 아닌 경우, “SYNC 칩"은 현재 BSP 수퍼스텝에서 RUN될 필요가 있는 마지막 작업자가 런칭되는 즉시 실행될 수 있다. 이는 마지막 레이어에서 모든 작업자들이 RUN된 후에 또는 단순히 단 하나의 레이어만 있는 경우 모든 작업자 스레드들이 RUN된 후에 발생할 수 있다.
실행 스테이지(18)의 실행 유닛(EXU)은 SYNC 명령어의 op코드에 응답하여, 온-칩(인터-타일) 오퍼랜드에 의해 한정된 경우, “SYNC 칩"이 실행된 감독자 스레드로 하여금 어레이(6)에서 모든 타일들(4)이 실행중인 작업자들을 종료할 때까지 정지하게 하도록 구성된다. 이는 다음 BSP 수퍼스텝에 대해 배리어를 구현하는데 사용될 수 있다. 즉, 칩(2) 상의 모든 타일들(4)이 배리어를 통과한 후에, 전체로서 크로스-타일 프로그램이 다음 교환 페이즈(50)로 진행할 수 있다.
도 11은 본 명세서에 개시된 실시예들에 따라 “SYNC 칩"에 의해 트리거링된 로직을 도시하는 개략도이다.
일단 감독자가 현재 계산 페이즈(52)에서 의도하는 모든 스레드를 런칭 (RUN)하면, 온-칩, 인터-타일 오퍼랜드: SYNC 칩과 함께 SYNC 명령어를 실행한다. 이는 타일(4) 상의 전용 동기화 로직(39)에서 그리고 하드웨어 상호연결(34)에서 구현된 동기화 제어기(36)에서 트리거링될 후속 기능을 트리거링한다. 상호연결(34)에서의 온-타일 동기화 로직(39) 및 동기화 제어기(36)의 이러한 기능은 전용 하드웨어 회로에서 구현되어, 일단 SYNC 칩이 실행되면, 나머지 기능은 그렇게 하도록 하는 추가적 명령어들 없이도 진행하도록 한다.
우선, 온-타일 동기화 로직(39)은 문제되는 타일(4) 상의 감독자에 대한 명령어 발급을 자동적으로 정지하게 한다(페치 스테이지(14) 및 스케쥴러(24)로 하여금 감독자의 명령어들의 발급을 정지하게 한다). 로컬 타일(4) 상의 모든 현재 작업자 스레드들이 EXIT을 수행하면, 동기화 로직(39)은 자동적으로 동기화 요청 “sync_req"를 상호연결(34)에서 동기화 제어기(36)에 송신한다. 그 후, 로컬 타일(4)은 정지된 감독자 명령어 발급을 계속 대기한다. 또한, 유사한 프로세스는 어레이(6)에서 다른 타일들(4) 각각에서 구현된다(각각 동기화 로직(39)의 그 고유의 인스턴스를 포함). 따라서, 어떤 포인트에, 현재 계산 페이즈(52)에서 모든 최종 작업자들이 어레이(6)에서 모든 타일들(4)을 EXIT하면, 동기화 제어기(36)는 어레이(6)에서 모든 타일들(4)로부터 각각의 동기화 요청(sync_req)을 수신할 것이다. 그 후에만, 동일한 칩(2) 상의 어레이(6)에서 모든 타일(4)로부터 sync_req을 수신함에 응답하여, 동기화 제어기(36)는 동기화 수신확인 신호 “sync_ack"를 타일들(4) 각각 상의 동기화 로직(39)에 다시 송신한다. 이 포인트까지, 타일들(4) 각각은 동기화 수신확인 신호(sync_ack)를 대기하는 그것의 정지된 감독자 명령어 발급을 가진다. sync_ack 신호를 수신함에 따라, 타일(4)에서 동기화 로직(39)은 상기 타일(4) 상의 각각의 감독자 스레드에 대한 감독자 명령어 발급을 자동적으로 재개한다. 그 후, 감독자는 후속 교환 페이즈(50)에서 상호연결(34)을 통해 다른 타일들(4)과 데이터를 교환하는 것을 진행할 수 있다.
바람직하게는, sync_req 및 sync_ack 신호들은 각 타일(4)을 상호연결(34)에서 동기화 제어기(36)에 연결하는 하나 이상의 전용 동기화 배선을 통해 동기화 제어기에게로 그리고 동기화 제어기로부터 각각 전송되고 수신된다.
추가로, 실시예들에서, 추가적 기능이 SYNC 명령어에 포함될 수 있다. 즉, 적어도 인터-타일 모드(예를 들어, SYNC 칩)에서 실행될 때, SYNC 명령어는 각 동기화된 타일들(4)의 로컬 종료 상태들($LC)이 상호연결(34)에서 추가적 전용 하드웨어(40)에 의해 자동적으로 집합되게 한다. 이를 보여주는 실시예에서, 로직(40)은 로컬 종료 상태들의 AND를 취한다. 그러나, 이는 단지 하나의 예시이며, 다른 실시예들에서, 글로벌 집합 로직(40)은 예를 들어, 불리언 OR 또는 비-불리언 종료 상태들의 보다 복잡한 조합을 취할 수 있다.
동기화 요청(sync_req)이 어레이(6)의 모든 타일들(4)로부터 수신됨에 응답하여, 동기화 제어기(36)는 글로벌 집합 로직(global aggregation logic)(40)의 출력이 각 타일(4) 상의 글로벌 컨센서스 레지스터(global consensus register)($GC)(42)에 저장되게 한다. 상기 레지스터($GC)(42)는 감독자 명령어 발급이 재개되면, 각각의 타일(4) 상의 감독자 스레드(SV)에 의해 엑세스 가능하다. 실시예들에서, 글로벌 컨센서스 레지스터($GC)는 감독자의 제어 레지스터 파일(CXS)(28)에서 제어 레지스터로서 구현되며, 감독자 스레드는 GET 명령어에 의해 글로벌 컨센서스 레지스터($GC)(42)의 값을 얻을 수 있다.
전역적으로 집합된 종료 상태($GC)는 프로그램이 각 개별적 타일에서 각 개별적 작업자 스레드의 상태를 개별적으로 검사할 필요 없이, 다수의 상이한 타일들(4)에서 실행되는 프로그램의 부분의 전반적인 결과를 결정할 수 있게 한다. 프로그래머가 원하는 어떤 목적으로도 예를 들어, 모든 타일들에서 실행 중인 코드의 부분들이 모두 미리 결정된 조건 또는 타일들의 결과의 전반적 신뢰도를 만족하는지 여부를 결정하기 위해 사용될 수 있다. 일 예시적 사용예에서, 하나 이상의 타일들 상의 감독자는 글로벌 집합이 거짓 또는 실패 결과를 표시하는 경우 호스트 프로세서(93H)에 보고할 수 있다. 다른 예시로서, 프로그램은 글로벌 종료 상태에 따라 분기 결정을 수행할 수 있다.
이전에 언급된 바와 같이, 실시예들에서, 칩(2)의 다수의 인스턴스들은 다수의 칩(2)에 확장하는 타일들(4)의 더 큰 어레이를 형성하기 위해 서로 연결될 수 있다. 이는 도 12에 개략적으로 도시된다. 칩들(2)의 일부 또는 전부는 동일한 IC 패키지에서 구현될 수 있고, 또는 칩들(2)의 일부 또는 전부는 상이한 IC 패키지들에서 구현될 수 있다. 칩들(2)은 외부 상호연결(72)에 의해 서로 연결된다(도 7에 도시된 외부 링크들(8)을 통해). 이는 동일한 IC 패키지 상의 칩들(2) 사이, 동일 한 카드 상의 상이한 IC 패키지들 사이 및/또는 상이한 카드들 상의 상이한 IC 패키지들 사이를 연결할 수 있다. 상이한 칩 상의 타일들(4) 간의 데이터 교환을 위한 도관을 제공하는 것 뿐만 아니라, 외부 상호연결(72)은 또한 상이한 칩들(2) 상의 타일들(4) 사이의 배리어 동기화를 수행하고 상이한 칩들(2) 상의 타일들(4)의 로컬 종료 상태를 집합시키기 위한 하드웨어 지원을 제공한다.
실시예들에서, SYNC 명령어는 적어도 하나의 외부 즉, 인터-칩 동기화: SYNC zone_n을 특정하기 위한 그것의 모드 오퍼랜드의 추가적 가능한 값을 가질 수 있고, 여기서 zone_n은 외부 동기화 존(sync zone)을 표현한다. 외부 상호연결(72)은 도 11과 관련하여 기술된 것과 유사한 하드웨어 로직을 포함하지만, 외부 인터-칩 스케일이다. SYNC 명령어가 그것의 오퍼랜드에서 2개 이상의 칩들(2)의 외부 동기화 존이 특정되어 실행된 경우, 이는 외부 상호연결(72)의 로직으로 하여금 내부 상호연결(34)과 관련하여 기술된 것과 유사한 방식으로 동작하게 하지만, 특정된 동기화 존에서 다수의 상이한 칩들(2) 상의 타일들(4)에 걸쳐 동작한다.
즉, 외부 동기화를 특정하는 오퍼랜드를 가지는 SYNC 명령어의 op코드에 응답하여, 실행 스테이지(18)는 오퍼랜드에 의해 특정된 동기화 레벨로 하여금 외부 상호연결(72)의 전용 하드웨어 동기화 로직(76)에 신호를 보내게 한다. 이에 응답하여, 외부 상호연결에서 동기화 로직(76)은 모든 외부 타일들(4) 중에서도 글로벌 동기화를 위해 시스템에서 모든 칩들(2)에 걸친 모든 타일들에서 수행될 동기화 요청(sync_req) 및 수신확인(sync_ack)의 프로세스를 수행한다. 즉, 동기화 요청(sync_req)이 칩들(2)로부터의 모든 타일들(4)로부터 수신되면, 외부 상호연결(72)에서 동기화 로직(76)은 동기화 수신확인 신호(sync_ack)를 칩들(2)에 걸쳐 타일들(4)에 리턴할 것이다. 모든 상기 칩들(2) 상의 타일들(4)은 외부 동기화 로직(76)으로부터 동기화 수신확인(sync_ack)가 리턴될 때까지 자동적으로 정지할 것이다.
따라서, 외부 SYNC에 응답하여, 감독자 명령어 발급은 외부 동기화 존에서 모든 칩들(2) 상의 모든 타일들(4)이 그들의 계산 페이즈(52)를 완료하고 동기화 요청을 제출할 때까지 정지된다. 추가로, 외부 상호연결(72)에서 로직은 문제되는 존에서의 다수의 칩들(2)에 걸쳐 모든 상기 타일들(4)의 로컬 종료 상태들을 집합시킨다. 외부 동기화 존에서 모든 타일들(4)이 동기화 요청을 했으면, 외부 상호연결(72)은 타일들(4)에 동기화 수신확인을 신호하고, 크로스-칩 글로벌 집합 종료 상태를 문제되는 모든 타일들(4)의 글로벌 컨센서스 레지스터($GC)(42)에 저장한다. 동기화 수신확인에 응답하여, 존에서 모든 칩들(2) 상의 타일들(4)은 감독자에 대한 명령어 발급을 재개한다.
실시예들에서, 상호연결(72)의 기능은 칩들(2)에서 구현될 수 있다. 즉, 로직은 칩들(2)에 분배되어 오직 칩들 간 유선 연결만 요구되게 한다(도 11 및 12는 개략적임).
언급된 동기화 존 내의 모든 타일들(4)은 그들 각각의 SYNC 명령어의 모드 오퍼랜드를 통해 동일한 동기화 존을 표시하도록 프로그래밍되었다. 실시예들에서, 외부 상호연결(72) 장치에서 동기화 로직(76)은 (메모리 패리티 에러와 같이) 프로그래밍 또는 다른 에러 때문이 아닌 경우, 일부 또는 모든 타일들(4)은 수신확인을 수신하지 못할 것이고 따라서 시스템이 다음 외부 배리어에서 중단될 것이면, 관리 외부(CPU)(예를 들어, 호스트)이 디버그 또는 시스템 복구를 위해 개입하도록 구성된다. 그러나, 바람직하게는 컴파일러가 동일한 존의 타일들이 관련 시간에 동일한 올바른 동기화 존을 모두 표시하는 것을 보장하도록 구성된다. 또한, 동기화 로직은 상이한 SYNC 명령어에 의해 표시된 모드들의 불일치의 경우에 다른 대안적 또는 추가적 측정치를 취하도록 구성될 수 있다. 예를 들어, 외부 CPU에 예외를 발생시킴 및/또는 어떤 다른 메커니즘에 의해 실행 중단.
도 14에서 도시된 바와 같이, 실시예들에서, SYNC 명령어의 모드는 다수의 상이한 가능한 외부 동기화 존들 예를 들어 zone_1 또는 zone_2 중 하나를 특정하는데 사용될 수 있다. 실시예들에서, 이들은 상이한 계층적 레벨들에 대응한다. 즉, 각각 더 높은 계층적 레벨(92)(예를 들어, zone_2)은 적어도 하나의 낮은 계층적 레벨 중 2개 이상의 존들(91A, 91B)를 포함한다. 실시예들에서, 단지 2개의 계층적 레벨만 있지만, 더 많은 수의 중첩된 레벨들이 배제되지 않는다. SYNC 명령어의 오퍼랜드가 외부 동기화 존의 낮은 계층적 레벨에 설정된 경우(SYNC zone_1), 상기 기술된 동기화 및 집합 동작은 SYNC가 실행된 타일과 동일한 낮은 레벨 외부 동기화 존에서의 칩들(2) 상의 타일들(4)과만 관련하여 수행된다. SYNC 명령어의 오퍼랜드가 외부 동기화 존의 높은 계층적 레벨에 설정된 경우(SYNC zone_2), 상기 기술된 동기화 및 집합 동작은 SYNC가 실행된 타일과 동일한 높은 레벨 외부 동기화 존에서의 모든 칩들(2) 상의 모든 타일들(4)과만 관련하여 자동적으로 수행된다.
오퍼랜드로서 외부 동기화 존을 가지는 SYNC 명령어의 op코드에 응답하여, 실행 스테이지(18)는 오퍼랜드에 의해 특정된 동기화 레벨로 하여금 외부 상호연결(72)의 전용 하드웨어 동기화 로직(76)에 신호를 보내게 한다. 이에 응답하여, 외부 상호연결에서 동기화 로직(76)은 신호된 그룹의 타일들(4)에서만 수행될 동기화 요청(sync_req) 및 수신확인(sync_ack)의 프로세스를 수행한다. 즉, 외부 상호연결(72)에서 동기화 로직(76)은 동기화 요청(sync_req)이 그 존의 모든 타일들(4)로부터 수신되면(그러나 글로벌 동기화가 아니면 그 존 외의 임의의 다른 타일들을 대기하지 않을 것임), 동기화 수신확인 신호(sync_ack)를 신호된 동기화 존의 타일들에 리턴할 것이다.
다른 실시예들에서, SYNC 명령어의 모드에 의해 특정될 수 있는 동기화 존들은 본질적으로 계층적인 것으로 제한되지 않는다. 일반적으로, SYNC 명령어에 임의의 종류의 그룹화에 대응하는 모드들이 제공될 수 있다. 예를 들어, 모드들은 비-계층적 그룹들 또는 계층적 그룹화와 하나 이상의 비-계층적 그룹들의 혼합(적어도 하나의 그룹이 다른 그룹에 완전히 중첩되지 않음)으로부터 선택할 수 있다. 이는 이점적으로 최소한의 코드 밀도로 프로그래머 또는 컴파일러에 대해 서로 비동기적인 내부적 동기식 그룹들의 상이한 레이아웃들 간에 선택하기 위한 유연성을 제공할 수 있다.
선택된 동기화 그룹(91, 92) 가운데에서 동기화를 구현하기 위한 예시적 메커니즘이 도 18에 도시된다. 도시된 바와 같이, 외부 상호연결(72)에서 외부 동기화 로직(76)은 각각의 칩(2)과 연관된 각각의 동기화 블록(95)을 포함한다. 각 동기화 블록(95)은 각각의 게이팅 로직(gating logic) 및 각각의 동기화 집합기(sync aggregator)를 포함한다. 게이팅 로직은 동기화 및 종료 상태 집합을 위해 데이지 체인 토폴로지(daisy chain topology)로 칩들(2)을 서로 연결하고, 후술할 내용에 따라 동기화 및 종료 상태 정보를 전파하는 하드웨어 회로를 포함한다. 동기화 집합기는 후술할 내용에 따라 동기화 요청들(sync_req) 및 종료 상태들을 집합시키도록 구성된 하드웨어 회로를 포함한다.
각 칩(2)과 연관된 각각의 동기화 블록(95)은 그것의 각각의 칩(2)에 연결되어, 동기화 블록(95) 상기 칩(2)에 의해 발생된 동기화 요청(Sync_req) 및 상기 칩(2)의 종료 상태를 검출할 수 있고, 그리고 동기화 블록(95)은 동기화 수신확인(Sync_ack) 및 글로벌 종료 상태를 각각의 칩(2)에 리턴할 수 있다. 또한, 각 칩(2)과 연관된 각각의 동기화 블록(95)은 하나 이상의 동기화 배선들(96)(동기화 네트워크의 부분)을 포함하는 동기화 인터페이스를 통해 적어도 하나의 다른 칩들(2)의 동기화 블록(95)에 연결된다. 칩들의 동기화 블록들(95) 중 일부는 2개의 인접한 칩들(2)의 동기화 블록(95)에 연결되며, 각 연결은 동기화 인터페이스(96)의 각각의 인스턴스를 통한다. 이 방식으로, 칩들(2)은 그들의 동기화 블록(95)을 통해 하나 이상의 데이지 체인들에 연결될 수 있다. 이는 동기화 요청들, 동기화 수신확인들, 종료 상태들의 실행 집합, 글로벌 종료 상태들이 체인 위와 아래로 전파되게 한다.
동작에서, 각 동기화 그룹(91, 92)에 대해, 해당 그룹에서 칩들(2) 중 하나와 연관된 동기화 블록(95)은 동기화 및 종료 상태 집합 목적으로 마스터(master)로서 설정되고, 그룹에서 나머지는 이 목적으로 슬레이브(slave)들로 설정된다. 슬레이브 동기화 블록들(95) 각각은 동기화 그룹(91, 92) 각각에 대해 동기화 요청들, 동기화 수신확인들 및 종료 상태들을 전파할 필요가 있는 방향(예를 들어, 좌측 또는 우측)으로 구성된다(즉, 마스터에 대한 방향). 실시예들에서, 이들 설정들은 소프트웨어에 의해 예를 들어, 구성이 시스템의 후속 동작 전반에 걸쳐 설정 상태로 유지되는 초기 구성 단계에서 구성가능하다. 예를 들어, 이는 호스트 프로세서에 의해 구성될 수 있다. 대안적으로, 구성이 하드웨어에 내장되는 것을 배제하지 않는다. 어느 방식이든, 상이한 동기화 그룹(91, 92)은 상이한 마스터들을 가질 수 있고, 일반적으로 주어진 칩(2)(또는 오히려 그것의 동기화 블록(95))이 하나의 그룹의 마스터가 되지만 멤버인 다른 그룹의 마스터는 되지 않거나 또는 다수의 그룹들의 마스터가 되는 것이 가능하다.
예를 들어, 예시로서 도 18의 예시적 시나리오를 고려한다. 칩(2IV)의 동기화 블록(95)이 주어진 동기화 그룹(91A)의 마스터로서 설정되는 예를 설명한다. 그들의 동기화 블록(95) 및 인터페이스(96)를 통해 궁극적으로 칩(2IV)에 연결된 칩들(2)의 체인 내의 제1 칩(2I)을 고려하자. 제1 칩(2I) 상의 현재 계산 페이즈의 모든 작업자 스레드들이 EXIT 명령어를 실행하고, 모든 (참여하는) 타일들(4) 상의 감독자들이 모두 동기화 그룹(91A)을 특정하는 SYNC 명령어를 실행하면, 제1 칩(2I)은 그것의 각각의 연관된 동기화 블록(95)에 그것의 동기화 준비를 신호한다. 또한, 칩(2I)은 그것의 칩-레벨 집합 종료 상태를 그것의 각각의 동기화 블록(95)에 출력한다(각각의 칩(2I) 상의 모든 참여 타일 상의 모든 종료하는 작업자의 집합). 응답으로, 제1 칩(2I)의 동기화 블록(95)은 체인 내의 다음 칩(2II)의 동기화 블록(95)에 동기화 요청(Sync_req)를 전파한다. 또한, 제1 칩(2I)의 종료 상태를 그 다음 칩(2II)의 동기화 블록(95)으로 전파한다. 상기 제2 칩(2II)의 동기화 블록(95)은 자신의 (참여하는) 타일들(4)의 감독자들이 모두 동기화 그룹(91A)을 특정하는 SYNC 명령어를 실행하여, 제2 칩(2II)이 동기화 준비를 신호하게 할 때까지 대기한다. 그런 다음, 제2 칩의 동기화 블록(95)은 체인 내의 다음(제3) 칩(2III)의 동기화 블록(95)에 동기화 요청을 전파하고, 또한 제1 칩(2I)의 종료 상태의 실행 집합을 제2 칩(2II)의 실행 집합에 전파한다. 제2 칩(2II)이 제1 칩(2I) 이전에 동기화 준비가 완료되면, 제2 칩(2II)의 동기화 블록(95)은 제3 칩(2III)의 동기화 블록(95)에 동기화 요청을 전파하기 전에 동기화 요청을 신호하기 위해 제1 칩(2I)을 대기할 수 있다. 제3 칩(2III)의 동기화 블록(95)은 유사한 방식으로 동작하고, 이번에는 다음에 전달할 다음 실행 집합을 획득하기 위해 제2 칩(2II)으로부터의 실행 집합 종료 상태를 집합한다. 이를 이 예에서 칩(2IV)의 동기화 블록인 마스터 동기화 블록을 향해 계속한다.
그 다음, 마스터의 동기화 블록(95)은 자신이 수신한 실행 집합 및 자체 칩(2IV)의 종료 상태에 기초하여 모든 종료 상태들의 글로벌 집합을 결정한다. 마스터의 동기화 블록(95)은 동기화 수신확인(Sync_ack)과 함께 상기 글로벌 집합을 체인을 따라 모든 칩들(2)에 전파한다.
위의 예에서와 같이, 마스터가 한쪽 끝인 것과 반대로 체인을 따라 부분인 경우, 동기화 및 종료 상태 정보는 마스터의 한 쪽에서 반대 방향으로, 마스터를 향해 양쪽으로 전파된다. 이 경우, 마스터는 양쪽으로부터 동기화 요청이 수신되었으면, 동기화 수신확인 및 글로벌 종료 상태만 발행한다. 예를 들어, 칩(2III)이 그룹(92)의 마스터인 경우를 고려하자. 추가로, 실시예들에서, 일부 칩들(2)의 동기화 블록(95)은 3개 이상의 다른 칩들(2)의 동기화 블록(95)에 연결되어 마스터를 향해 다수의 체인들의 분기를 생성한다. 각 체인은 상기 기술된 바와 같이 동작하며, 마스터는 모든 체인들로부터 동기화 요청이 수신되었으면, 동기화 수신확인 및 글로벌 종료 상태만 발행한다. 그리고/또는, 하나 이상의 칩들(2)은 호스트 프로세서, 네트워크 카드, 저장 디바이스 또는 FPGA와 같은 외부 리소스에 연결될 수 있다.
상기는 단지 동기화 및 종료 상태 정보를 전파하기 위한 메커니즘이다. 실제 데이터(컨텐츠)는 예를 들어, 도 19를 참조하여 후에 논의될 다른 채널에 의해 전송된다. 추가로, 이는 단지 하나의 예시적 구현예라는 것이 인식될 것이며, 통상의 기술자는 본 명세서에 개시된 기능의 사양이 주어지면 개시된 동기화 및 집합 기능을 구현하기 위한 다른 회로들을 구성할 수 있을 것이다.
동기화 및 종료 상태 정보를 신호하기 위한 특정한 메커니즘에 관계없이, 실시예들에서, 호스트 프로세서 또는 서브시스템(93)은 모든 참가자들(BSP와 같은)에 대해 단일 랑데뷰 포인트로 또는 일부 실시예들에서 충분히 작은 수(하나의 호스트에 모두 연결된 독립적 BSP 가속기들의 수와 같이)의 랑데뷰 포인트들로 동작하는 임의의 작업 가속기 서브시스템과 통신하게 하기 위한 메커니즘이 제공되어, 호스트 프로세서 친화적 동기화 메커니즘의 구현이 특히 효율적인 방식으로 하드웨어에서 구현될 수 있도록 한다. 이 상황은 랑데뷰 포인트들의 수가 어플리케이션 특정적이고 따라서 세마포어(semaphore)들과 같은 동기화 메커니즘이 반드시 소프트웨어에 의해 정의되어야 하고 따라서 이에 따라 비효율적(예를 들어, 프로세서 간섭 지연)이게 되는 전통적 CSP 접근법과 반대일 수 있다.
호스트(93)은 예를 들어, 도 21과 관련하여 기술된 바와 같이 호스트 프로세서 또는 CPU(93H); 또는 넓은 호스트 서브시스템의 게이트웨이 프로세서를 표현할 수 있다.
도 18(그리고 또한 도 12를 참조)에 도시된 바와 같이, 전체 시스템은 적어도 하나의 호스트 프로세서(93) 및 호스트 프로세서(93)를 외부 상호연결(72)에 연결하기 위한 외부 호스트 인터페이스(97)(외부 동기화 로직(76)에 포함)를 포함한다. 예를 들면, 실시예들에서 호스트 인터페이스(97)는 PCI 인터페이스의 형태를 취할 수 있다. 외부 상호연결(72)의 동기화 로직(76)은 적어도 하나의 “호스트 동기화 프록시"(HSP) 모듈(98)을 더 포함한다. HSP 모듈(98)은 인터페이스(97)와 동기화 블록들(95) 중 하나 사이에 연결된다. HSP 모듈(98)은 동기화를 위해 호스트(93)를 대신하여 프록시로서 동작하도록 구성되며, 곧 더 자세히 논의될 바와 같이 호스트 프로세서(93)로 하여금 동기화 존들 또는 그룹들(91, 92) 중 적어도 하나에서의 동기화에 참여하도록 한다.
실시예들에서, 하나의 HSP 모듈(98)은 칩(2) 마다 그리고 대응하는 동기화 블록(95) 마다 제공된다. 이 경우에, 어느 동기화 블록(95)이 주어진 동기화 그룹(91, 92)의 마스터로서 구성되는 경우, 그 동기화 블록의 HSP(98)는 그룹 내에서 호스트(93)의 프록시로서 설정되고 다른 HSP들은 비활성화된다. 따라서, 동기화 블록(95)과 마찬가지로, HSP들(98)은 동기화 그룹(91, 92)마다 구성될 수 있다. 그래서 하나의 HSP(98)는 하나의 동기화 그룹(예를 들어, 91A 또는 91B)을 위한 호스트 프록시로서 설정될 수 있으며, 다른 HSP(98)는 다른 그룹(예를 들어, 91B 또는 92)에 대한 호스트 프록시로서 설정될 수 있고; 또는 동일한 HSP(98)가 다수의 그룹들(예를 들어, 91과 92 둘 모두)에 대한 호스트 프록시로서 설정될 수 있다. 이를 위해, 호스트 인터페이스(97)는 HSP들(98)에 연결되어, 각 그룹(91, 92)에 대해 선택된 HSP(98)가 PCI 인터페이스(97)를 통해 HSP 모듈들(98)의 레지스터들에 기록함으로써 소프트웨어에 의해 구성 가능하도록 한다. 대안적으로, 구성이 하드웨어에 내장되거나 HSP 레지스터들이 다른 인터페이스 또는 프로토콜을 통해 업데이트되는 것을 배제하지 않는다. 또 다른 대안적 실시예들에서, 동기화 그룹(91, 92)마다 단일의 고정된 HSP(98)가 또는 심지어 전체 어레이 또는 서브시스템(6)에 대해 단일의 고정된 HSP(98)가 존재할 수 있다는 점을 배제하지 않는다.
상기 또는 각 호스트 동기화 프록시(HSP) 모듈(98)은 호스트(93)로 하여금 그 HSP(98)가 호스트의 프록시로서 동작하도록 구성된 각각의 동기화 그룹(91, 92)에 참여하게 하도록 구성된 하드웨어 회로를 포함한다. 타일들(4)에 의해 방출된 동기화 요청은, 그것이 호스트 수반 동기화인 경우, 그 그룹에 대한 동기화 로직(95)에 의해 활성 HSP(98)로 전달될 것인 반면, 호스트 수반을 특정하지 않는 동기화 요청은 집합되어 어떤 방식으로든 HSP(98)를 수반하지 않고 요청 타일에 리턴될 것이다. 따라서, 타일들(4)은 가속기가 HSP(98)를 통해 호스트와 인터렉션할 필요가 있는 경우 그들이 실행하는 프로그램에 의해 결정한다.
예시로서, 글로벌 동기화 그룹(92)에 대해 호스트(93)의 프록시로서 동작하도록 구성된 HSP(98)의 인스턴스를 고려한다. 예를 들어, 도 18에서, 단지 예시로서 도시된다. 유사 기능은 임의의 하위 레벨 동기화 그룹(91과 같은)에 대한 호스트의 참여에 대해 기술될 수 있다는 점이 인식될 것이다.
호스트(93)는 나머지 동기화 그룹(92)과 관련하여 비동기식이고 비-시간- 결정적이고, 비교적 많은 양의 배선 및 물리적 로직에 의해 분리된다. 또한, 호스트와의 임의의 통신은 호스트가 인터럽트를 처리하고 그 후 컨텍스트를 동기화 요청을 처리할 호스트 코드로 전환하는데 상당한 지연이 따르는 인터럽트를 가질 것을 요구할 가능성이 크다. 이러한 요소들은 호스트(93)를 수반하는 임의의 인터렉션의 지연이 나쁘다는 것을 의미한다. 가능한 한 호스트(93)와 직접적으로 통신할 필요가 없도록 하는 것이 바람직할 것이다.
이를 위해, HSP(98)는 적어도 하나의 카운터(99)를 포함하는 레지스터들 세트 및 다음과 같이 동작하도록 구성된 연관된 카운팅 로직을 포함한다. 카운터(99)는, 실시예들에서 기록된 값이 이 레지스터(99)에 이미 존재하는 값에 더해 지도록, 호스트 인터페이스(97)를 통해 호스트(93)에 의해 정수 값 n이 기록될 수 있도록 구성된다. 카운터(99)에서의 숫자는 크레딧들 수 또는 마크 카운트(예를 들어, ipu_mark_count)로 기술될 수 있다. HSP 카운터가 해당 HSP(98)가 호스트의 프록시로서 동작하는 동기화 그룹(92)보다 1 이상의 값을 가지는 경우, HSP(98)는 동기화 요청을 동기화 그룹(92)의 타일들(4)로부터 수신할 때 동기화 수신확인(sync_ack)을 생성하도록 구성된다. 연관된 카운팅 로직은 동기화 수신확인이 생성되고 대응하는 배리어가 통과 될 때마다(예를 들어, 동기화 그룹(92)의 경우 배리어(80)) 카운터(99)에서 하나씩 n을 자동적으로 감소시킨다. 이 프로세스는 HSP가 호스트에 접촉하거나 이와 달리 인터럽트할 필요 없이 발생한다. 그러나, 카운터 값 n이 이제는 0에 도달하면, HSP는 동기화 수신확인을 생성하지 않고, 따라서 그룹(92)의 타일들(4)은 i) 그룹(92)의 모든 타일들(4)이 동기화 요청(sync_req)를 송신하고, ii) HSP(98)는 호스트 인터페이스(97)를 통해 HSP(98)에 기록을 수행하여 명시 적으로 해제될 배리어를 허가할 때까지 다시 실행하는 것을 계속하지 않는다. 실시예들에서, 상기 제2 서브조건 ii)는 HSP카운터(99)가 이제 1 이상의 값을 갖는지 검사하는 HSP(98)에 의해 구현된다. 즉, 카운터에 호스트 인터페이스(97)를 통해 카운터(99)에 기록하는 호스트(93)에 의해 다시 더 많은 크레딧들이 부여되었다. 따라서, 그룹의 타일들(4)은 호스트(93)에 전혀 지연시키지 않고 n 개의 배리어들을 통해 계속해서 실행되도록 허용될 수 있고, 그 후에 이들은 호스트(93)와 동기화되어야 한다(그리고 나서 호스트로 및/또는 호스트로부터 데이터를 교환할 수 있다). 예를 들면, 도 20 참조. 일부 경우에, 호스트는 HSP 카운터 값이 절대로 0이 되지 않도록 하여 가속기가 호스트와 동기화하는 것을 절대 정지하지 않도록 함으로써 최대 효율로 그것의 동작을 구성할 수 있다.
바람직하게는, 타일들(4)에서 실행되는 소프트웨어는 그들 각각의 동기화 요청들을 호스트 수반을 요구하거나 요구하지 않는 것으로 집합적으로 표시함으로써, HSP 수반을 요구할지 여부를 자유롭게 선택할 수 있다. 상기 실시예들에서, 상기 동작은 호스트 수반을 요구하는 것으로 표시된 동기화 요청들에 대응하는 배리어들에 대해 HSP(98)에 의해서만 적용된다(임의의 주어진 배리어에 대한 호스트의 "수반(involvement)"는 호스트를 대신하여 HSP(98)에 의한 동기화 수신확인의 프록시 부여(granting) 또는 때때로 더 많은 크레딧의 명시적 부여임). 이 프로그램은 주어진 그룹(91, 92)의 모든 타일들(4)이 주어진 배리어 동기화에 대한 그들의 동기화 요청들(HSP 수반 여부)에서 동일한 선택을 신호하도록 구성된다. 실시예들에서, 호스트 수반은 SYNC 명령어의 모드의 상이한 변형들에 의해 선택된다. 즉, 각 동기화 그룹(91, 92)에 대해, SYNC 명령어의 오퍼랜드가 취할 수 있는 실효적인 2개의 변형들이 있다: zone_1_host, zone_1_no_host; 및 zone_2_host, zone_2_no_host. 실행 유닛(18)은 오퍼랜드에 따라 동작하고, 이에 응답하여 상호연결(72, 76)의 동기화 로직으로 하여금 호스트 수반 마커(marker)를 그에 따라 신호하게 하도록 구성된다. 그러나, 다른 실시예들에서, 호스트 수반을 요청하기 위한 다른 메커니즘을 구현될 수 있고 또는 심지어는 (덜 선호되지만) 호스트 수반이 하드웨어에 내장되어 항상 적용될 수 있는 것이 배제되지 않는다.
HSP(98)의 또 다른 기능은 통지 메시지를 호스트 메모리(본 실시예에서는 PCI 인터페이스를 통해)에 직접 기록함으로써 호스트에 통지하는 것이다. 통지 메시지는 전술한 카운터 값을 포함하는 HSP(98)의 현재 컨텐츠들을 포함한다. 선택적으로 HSP(98)은 이 포인트에서 호스트를 인터럽트하도록 구성될 수 있다. 그러므로, 호스트는 HSP로부터 인터럽트를 대기하거나 HSP에 의해 기록된 메모리 위치를 폴링하는 옵션을 가지며, 상기 두 방법은 호스트에 그것의 카운터의 값을 포함하여 HSP의 현재 새로운 상태를 알린다. 그 후, 호스트 프로그램은 HSP 카운터에 증분 값들을 포스팅하는 것이 따르는 장래의 배리어들에 준비하기 위해 요구되는 조치들을 취할 수 있다.
실시예들에서, 호스트에 의해 수행되는 배리어들에 대한 준비는 가속기에 의해 페치될 데이터 예를 들어, 모델을 학습하는 것에서 다음 스테이지를 위해 가속기에 의해 요구되는 경험 데이터 세트들의 준비를 포함한다. 이 컨텍스트에서 준비는 저장 디스크들 또는 다른 매체로부터 데이터를 페치하는 것, 가속기에서 실행되는 트레이닝 알고리즘에 의해 요구되는 형태로 데이터를 포맷팅하는 것 또는 이미지 데이터의 압축해제를 포함할 수 있다. 추가적으로, 배리어들의 준비는 가속기에 의해 생산된 출력 데이터를 소비하는 것을 포함할 수 있다.
HSP(98)의 다른 기능은 이전에 언급된 통지 메시지를 통해, 타일들(4)로부터 호스트(93)로의 동기화 요청을 동반하는 가속기의 종료 상태 값을 통신하는 것이다.
HSP(98)의 또 다른 기능은 호스트 프로그램으로 하여금 HSP 레지스터들 중 하나에 값을 기록함으로써 그 자체 종료 상태 값을 특정하게 하는 것이다. 그 후, HSP(98)가 타일들(4)에 대한 동기화 수신확인을 생성한 경우, 모든 타일들(4)의 집합된 종료 상태는 또한 호스트(93)에 의해 제공된 종료 상태 값과 함께 집합된다.
HSP(98)의 또 다른 기능은 호스트 프로그램으로 하여금 타일들(4)이 그들의 동기화 요청과 함께 제공할 것으로 가장 일반적으로 예상되는, 종료 상태에 대응하는 예상 종료 상태 값을 특정하게 하는 것이다. 호스트(93)가 이러한 방식으로 예상 종료 상태를 제공하는 경우, 타일들(4)의 종료 상태가 호스트에 의해 제공되는 값과 일치하는 한, HSP의 동작은 이전에 기술된 바와 같고, HSP는 동기화 수신확인을 생성하고, HSP 카운터 값 n이 0보다 크게 된다. 대안적으로 호스트의 예상 종료 상태 값이 타일(4)에 의해 제공된 값과 일치하지 않으면, HSP(98)는 타일들(4)에 대해 동기화 수신확인을 생성하지 않는다. 타일의 종료 상태(4)는 상술된 통지 기록 동안에 제공되고, 가속기는 타일 종료 상태와 호스트 종료 상태가 다른 배리어에서 정지될 것이기 때문에, 호스트 프로그램은 종료 상태에서의 변화에 의해 신호된 조건을 만족시킨 다음 상기 값이 새로운 준비를 반영하도록 카운터 값 n을 재설정하기 위해 요구될 수 있는 바와 같이 상기 배리어 준비 조치들을 취할 수 있다. 상기 카운터 값의 재설정을 지원하기 위해, HSP는 0의 카운트 값을 갖는 HSP 레지스터에 대한 기록을, 카운터 값이 변하지 않는 원하지 않는 효과를 가지는 카운터 값을 0으로 증가시키는 것보다는 카운터 값을 0으로하는 명령어로 해석한다.
상기 기술된 바와 같은 예상 못한 종료 상태 이벤트는 예상 값과 일치하는 타일 종료 상태를 예상하여 호스트에 의해 이루어진 이전의 준비를 포기하게 할 수 있지만, 예상 못한 종료 상태 값의 발생이 예상 종료 상태 값의 발생에 비해 드문 경우인 이상, 일반적으로 이 이벤트로 인한 효율성의 손실은 가속기가 각 배리어에서 인터럽트하거나 직접 호스트를 수반시켜야만 하는 경우 발생할 수 있는 효율성의 손실에 비해 작다.
크레딧들의 수를 감소시키기 위한 등가 카운터(99)는 0에서 시작하여 레지스터에 보유된 목표 값을 향해 자동으로 증가하는 카운터로서 구현될 수 있다. 다른 구현예들도 통상의 기술자에게 명백해질 수 있다. 본 명세서에서 "감소"는 논리적 카운팅 방향 또는 그와 같은 특정한 구현을 지칭하기 보다는 자동으로 줄어드는 크레딧의 남은 수를 카운트하는 근본적인 실질적 효과를 의미한다.
실시예들에서, 각 칩(2)과 연관된 HSP(98)는 카운터(99)의 복수의 인스턴스들 및 연관된 카운팅 로직, 각각의 칩이 잠재적으로 구성원일 수 있는 가능한 동기화 그룹(91, 92)의 일부 또는 전부 각각에 대한 하나의 인스턴스를 포함한다. 따라서, HSP(98)는 다수의 동기화 그룹(91, 92) 예를 들어, 다수의 계층적 레벨 각각에 대해 상이한 수의 동기화 크레딧들을 유지할 수 있다. 대안적으로, 주어진 HSP(98)는 하나의 동기화 그룹에 대한 동기화 크레딧을 유지하기 위한 하나의 카운터(99)만을 포함하지만, 각각이 그룹들(91, 92) 예를 들어, 다수의 계층적 레벨의 상이한 각각의 그룹에서 상기 기술된 바와 같이 동작하도록 구성될 수 있는 다수의 HSP들이 있다. 예를 들면, 상기 기술된 바와 같이, 실시예들에서, 칩(2) 당 하나의 HSP(98)가 있고, 각각은 호스트(93)에 의해 주어진 동기화 그룹(91, 92)에 부착될 수 있다. 다른 대안에서, 단일의 동기화 그룹 예를 들어, 글로벌 그룹(92)에 대해 다수의 동기화 크레딧을 유지하기 위한 단일의 카운터(99)만을 갖는 단일의 글로벌 HSP(98)가 배제되지 않는다.
또한, 일반적으로, 상기 구성이 하나 이상의 호스트 프로세서(93)에 적용될 수 있다. 예를 들어, 하나의 HSP(98)는 하나의 호스트 프로세서(93)는 동기화 그룹(91, 92) 중 하나에 포함하도록 구성 될 수 있는 한편, 다른 HSP는 다른 호스트 프로세서를 다른 동기화 그룹(91, 92)에 포함하도록 구성될 수 있다. 이 경우, 각 호스트(93)의 각 HSP(98)는 전술한 것과 유사한 방식으로 각각의 동기화 그룹(91, 92)과 관련하여 그 각각의 호스트(93)를 표현한다. 또는 다른 예에서, 일부 실시예들에서, 동일한 동기화 그룹(91 또는 92) 내에 2 개의 호스트 프로세서들(93)을 포함하는 것이 가능하다. 이 경우, 주어진 HSP(98)는 각 호스트(93)에 대한 별도의 카운터(99)를 포함 할 수 있고; 또는 상이한 HSP들(98)은 각 호스트(93)에 대해 주어진 그룹에 대해 설정될 수 있다. 어느 경우이든, 카운터들(99)은 각각의 호스트(93)에 의해 각각의 동기화 크레딧 수로 기록된다. 어느 하나의 카운터(99)가 0으로 감소하는 경우, 타일들(4)에 대한 동기화 수신확인은 발행되지 않을 것이다.
이전에 언급된 바와 같이, 모든 타일들(4)이 반드시 동기화에 반드시 참여할 필요는 없다. 논의된 바와 같이, 실시예들에서, 참여 타일들의 그룹은 동기화 명령어의 모드 오퍼랜드에 의해 설정될 수 있다. 그러나, 이는 미리 정의된 타일들의 그룹만 선택할 수 있다. 본 명세서에서, 타일-바이-타일 (tile-by-tile) 기반에서 동기화 참여를 선택할 수 있는 것이 바람직할 수 있다는 것이 인식된다. 따라서, 실시예들에서, 어떤 개별 타일들(4)이 배리어 동기화에 참여하는지를 선택하기 위한 대안적인 또는 부가적인 메커니즘이 제공된다.
특히, 이는 SYNC 명령어 대신에 하나 또는 몇몇 타일들(4)에 의해 실행될 프로세서 명령어 세트에서 추가적 유형의 명령어를 제공함으로써 달성된다. 이 명령어는 "불참" 명령어 또는 "SANS" 명령어(자동적 비참여 동기화 시작)로 지칭될 수 있다. 실시예들에서, SANS는 감독자 스레드에 의해 사용되도록 예약된다. 실시예들에서, 이는 단일의 즉시 오퍼랜드(immediate operand):
SANS n_barriers를 가진다.
SANS 명령어의 동작은 실행되고 있는 타일로 하여금 SYNC에 특정된 동기화 그룹의 모든 타일들을 대기하는 다른 타일을 유지하지 않고, 현재 배리어 동기화에 불참하게 한다. 효과상으로, 그것은 "나 없이 가라"고 말한다. SANS 명령이 실행된 경우, SANS 명령어의 op코드는 실행 스테이지(18)의 실행 유닛 내의 로직을 트리거하여, 동기화 요청 신호(Sync_req)의 인스턴스를 내부 및/또는 외부 동기화 제어기(36, 76)에(모드에 따라) 송신한다. 실시예들에서, SANS에 의해 생성된 동기화 요청은 SANS를 실행한 타일(4)을 포함하는 임의의 동기화 그룹(91, 92)에 적용된다. 즉, 이 로컬 칩 또는 칩들의 타일들(4) 다음에 사용할 동기화 그룹(동기화 그룹이 일치해야 함)이 무엇이든, SANS를 실행한 그룹으로부터의 sync_req는 항상 유효하다.
따라서, 동기화 제어기 로직(36, 76) 및 동기화 그룹 내의 다른 타일들(4)의 관점에서, SANS 명령어를 실행하는 타일(4)은 SYNC 명령어를 실행하는 타일(4)과 정확히 동일하게 나타나며, 동기화 배리어 및 동기화 로직(36, 76)으로부터의 동기화 수신확인(sync_ack)의 송신을 유지하지 않는다. 즉, SYNC 대신 SANS를 실행하는 타일들(4)은 문제되는 타일이 멤버인 임의의 동기화 그룹에 포함된 다른 타일들(4) 중 임의의 타일을 유지하거나 멈추게 하지 않는다. SANS에 의해 수행된 핸드쉐이크(handshake)는 모든 동기화 그룹(91, 92)에 대해 유효하다.
그러나 SYNC 명령어와 달리, SANS 명령어는 감독자 명령어 발급이 동기화 로직(36, 76)으로부터 동기화 수신확인 신호(Sync_ack)를 기다리는 동안 정지되지 않다. 대신에, 각각의 타일은 SYNC 명령어들을 실행하는 다른 타일들(4) 사이에서 수행되는 현재 배리어 동기화에 의해 단순히 억제되지 않고 계속될 수 있다. 따라서, 대기하지 않고 동기화를 모방함으로써, SANS 명령어는 그것의 타일(4)가 하나 이상의 작업들을 프로세싱하면서 눌리게(press) 하고, 다른 타일들(4)는 여전히 동기화되도록 한다.
오퍼랜드 n_barriers는 "포스팅된" 동기화들의 수, 즉 타일이 참여하지 않을 미래의 동기화 포인트들(배리어들)의 수를 특정한다. 대안적으로, 다른 실시 예에서, SANS 명령어는 이 오퍼랜드를 사용하지 않고 대신에 SANS 명령어의 각 실행이 일회성 불참이도록 한다.
SANS 명령어에 의해, 특정 타일들(4)은 BSP 동작 스케쥴의 직접적 범위를 벗어나는 작업들을 수행할 책임이 있을 수 있다. 예를 들어, 대부분의 타일들(4)이 주요 계산 작업(들)로 점유되는 동안, 호스트 메모리로 및/또는 호스트 메모리로부터의 데이터 전송을 개시(및 프로세싱)하기 위해 칩(2) 내에 소수의 타일들(4)을 할당하는 것이 바람직할 수 있다. 이러한 시나리오에서, 주요 계산과 직접 관련되지 않은 타일들(4)은 자동 비참여 동기화 구성(SANS)을 사용하여 일정 시간 동안 동기화 메커니즘으로부터 효과적으로 분리되는 것으로 스스로 선언할 수 있다. 이 구성을 사용하는 경우, 타일(4)은 능동적으로(즉, SYNC 명령어의 실행을 통해) 그것의 동기화 준비를 신호할 필요가 없으며(임의의 동기화 존들에 대해), 실시예들에서는 집합된 종료 상태에 널 기여(null contribution)를 하게 한다.
SANS 명령어는 그것이 실행되는 타일(4)이 인터-타일 동기화(또는 다른 외부 리소스들과의 동기화(그것이 동기화에 참여하는 경우)의 능동적 참여를 불참할 기간을 시작하거나 연장한다. 이 기간 동안, 이 타일(4)은 모든 존들 내에서 그것의 동기화 준비를 자동적으로 신호할 것이고, 실시예들에서 또한 글로벌 집합 컨센서스($GC)에 널 기여를 하게 한다. 이 기간은 얼마나 많은 추가적 미래 동기화 포인트들이 이 타일(4)에 의해 자동적으로 신호될 지를 표시하는 부호 없는 즉시 오퍼랜드(n_barriers)로서 표현될 수 있다. SANS를 실행하면, 오퍼랜드에 의해 특정된 값(n_barriers)이 각각의 타일(4)에서 카운트다운 레지스터($ANS_DCOUNT)에 위치된다. 이는 얼마나 많은 추가적인 미래의 sync_req들이 이루어져야 하는지를 추적하는데 사용되는 아키텍처적 상태의 조각이다. 자동적 비참여 동기화 메커니즘이 현재 비활성인 경우, 준비됨의 제1 주장(동기화 요청, sync_req)이 즉시 수행될 것이다. 후속 주장들은 이전 동기화가 완료되면(즉, 동기화 수신확인(sync_ack)의 후속하는 주장), 백그라운드에서 발생할 것이다. 자동적 비참여 동기화 메커니즘이 현재 활성화되어 있으면, 카운트다운 카운터 레지스터($ANS_DCOUNT)가 자동으로 업데이트될 것이며, 동기화 수신확인 신호가 미확인 상태로 남지 않을 것이다. 자동적 비참여 동기화 메커니즘은 전용 하드웨어 로직, 바람직하게는 각 타일 (4)에서 그것의 인스턴스로 구현되지만, 다른 실시예에서는 대신에 타일들의 그룹 또는 모든 타일들에 대해 중심적으로 구현될 수 있다는 것을 배제하지 않는다.
종료 상태 동작과 관련하여, 실제로 구현예에 따라 여러 가지 가능성이 있다. 실시예들에서, 전역적으로 집합된 종료 상태를 얻기 위해, 동기화 로직(36, 76)은 SYNC 명령어를 실행한 특정된 동기화 그룹 내의 타일들(4)로부터 로컬 종료 상태만을 수집하고, SANS 명령어를 실행한 타일은 제외한다(불참 타일 또는 타일들). 대안적으로, 전역적으로 집합된 종료 상태는 SYNC를 실행한 동기화 그룹 내의 모든 타일들(4) 및 SANS를 실행한 타일들(4)로부터의 로컬 종료 상태들을 집합시킴으로써 획득된다(참여 및 불참 타일들(4) 모두). 후자의 경우, 글로벌 집합에 대한 불참 타일(들)(4)에 의한 로컬 종료 상태 출력은 SYNC 명령어와 마찬가지로, SANS를 실행할 때의 그 타일의 작업자들의 실제 로컬하게 집합된 종료 상태일 수 있다(로컬 컨센서스 레지스터($LC)(38)의 설명 참조). 대안적으로, 불참 타일(4)에 의한 로컬 “종료 상태" 출력은 디폴트 값일 수 있다. 예를 들어, 종료 상태가 바이너리인 실시예들에서, 참 값(예컨대, 로직(1)). 이는 임의의 거짓 로컬 종료 상태가 글로벌 종료 상태를 거짓으로 만드는 실시예들에서, 불참 타일(4)이 글로벌 종료 상태와 간섭하는 것을 방지한다.
글로벌 종료 상태의 리턴과 관련하여, 불참 타일이 글로벌 집합을 생성하기 위해 로컬 종료 상태를 제출하는지 여부와 상관없이, 그리고 해당 값이 실제 값인지 기본값인지 여부에 관계없이, 이에 대한 두 가지 가능성이 있다. 즉, 일 구현예에서, 상호연결(34, 72) 내의 동기화 로직(36, 76)에 의해 생성된 글로벌 집합 출구 상태는 SANS 명령어를 대신 실행한 불참 타일들(4)이 아닌, SYNC 명령어를 실행한 참여 타일(4)의 글로벌 컨센서스 레지스터($GC)(42)에만 저장된다. 실시예들에서, 대신에 디폴트 값은 SANS를 실행한 타일(들)(4)(불참 타일들)의 글로벌 컨센서스 레지스터($GX)(42)에 저장된다. 예를 들어, 이 디폴트 값은 바이너리 글로벌 종료 상태인 경우 참(true) 예를 들어, 로직(1)일 수 있다. 그러나, 대안적 구현예에서, 동기화 로직(36, 76)에 의해 생성된 실제 글로벌 집합은 SYNC 명령어들을 실행한 참여 타일들(4) 및 SANS 명령어를 대신 실행한 불참 타일들(4) 모두의 글로벌 컨센서스 레지스터($GC)(42)에 저장된다. 따라서 그룹의 모든 타일들은 여전히 전역적으로 집합된 종료 상태에 액세스 할 수 있다.
도 13은 내부(온-칩) 및 외부(인터-칩) 동기화를 모두 포함하는 예시적 BSP 프로그램 플로우를 도시한다. 도시된 바와 같이, 플로우는 (동일한 칩(2) 상의 타일들(4) 간의 데이터의) 내부 교환(50)과 (상이한 칩들(2)상의 타일들(4) 간의 데이터의) 외부 교환(50')을 포함한다.
실시예들에서, 내부(온-칩) 상호연결(34)을 통한 데이터 교환은 도 16 및 도 17을 참조하여 상세히 논의될 바와 같이, 시간 결정적일 수 있으며; 반면에 외부 상호연결(72)를 통한 데이터의 교환은 예를 들어, 메시지들의 재전송을 요구할 손실이 있는 물리적 채널 때문에 비-시간-결정적일 수 있다. 일반적으로, 외부 상호연결은 시간-결정적일 수 있지만, 그렇게 하기 어렵거나 또는 비-결정적 상호연결에 비해 너무 적은 이점을 제공할 수 있어 실제로는 구현되지 않을 수 있다.
큐들이 상호연결(34)에서 바람직하지 않은 실리콘 풋프린트(silicon footprint)를 초래할 수 있기 때문에, 내부 상호연결(34)에서 큐를 필요로 하지 않고 수행될 수 있도록, 내부 통신 시간 결정적으로 유지하는 것이 바람직하다. 그러나, 실시예들에서, 외부 통신은 시간 결정적이지 않을 수 있다.
상세히 설명될 바와 같이, 큐가 없는 통신은 각 타일(4)이 그것의 데이터를 전송하는 시간을 알고 있고 또한 전송하고 수신하는 타일 간 온-칩 인터-타일 지연을 알고 있는 컴파일러에 의해 달성될 수 있다. 이 미리 결정된 지식이 주어지면, 컴파일러는 수신 타일을 프로그래밍하여 전송 타일에 의한 관련 데이터의 전송 이후의 특정 알려진 시간에, 즉 전송 시간에 인터-타일 지연을 더한 시간에, 전송 타일의 어드레스를 리스닝하게 할 수 있다. 컴파일러는 스스로 각 스레드의 어느 포인트에 송신 명령어(들)을 포함할지 선택하기 때문에, 전송 타이밍은 컴파일러에 의해 알려진다. 또한, 온-칩 통신을 위한 인터-타일 지연은 주어진 전송 및 수신 타일(4) 쌍에 대해 고정된 알 수 있는 값이다. 컴파일러는 이를 송신 및 수신 타일들의 상이한 가능한 조합에 대한 인터-타일 지연의 조회 테이블로부터 알 수 있다. 그 후, 컴파일러는 대응하는 수신 명령어를 전송 명령어 이후의 대응하는 사이클 수에서 송신자의 어드레스를 리스닝하기 위해 포함할 수 있다.
다수의 칩들에 걸친 글로벌 동기화 및 교환은 온-칩 동기화 및 전술된 내부 동기화 더하기 이를 전역적으로 집합시키기 위해 요구되는 추가적인 지연들의 총 비용을 가지는 교환보다 더 많은 비용이 들 것이다. 또한, 실시예들에서, 비록 동기화 신호하기 그 자체는 플로우 제어를 필요로 하지 않으며 따라서 상대적으로 빠르지만, 외부 동기화는 외부 교환으로 동기화한다. 외부 교환은 내부 교환보다 더 긴 지연 및 더 큰 불확실성을 경험한다.
우선, 일반적으로 온-칩보다 인터-칩은 사용가능한 데이터 대역폭이 훨씬 적다. 이는 인터-칩 배선 밀도가 패키지 연결(볼 또는 패드) 밀도에 의해 제한되어 칩에서 사용가능한 배선 밀도보다 훨씬 낮기 때문입니다. 따라서 칩들 간에 고정된 양의 데이터를 통신하는 것은 전송 지연이 유사 할지라도 온-칩보다 훨씬 오래 걸릴 수 있다. 또한, 외부 교환은 덜 지역적이며(less local), 이는 배선이 더 멀리 도달하므로 더 용량성(more capacitive)이고 노이즈에 더 취약함을 의미한다. 이것은 차례로 손실을 초래할 수 있고, 따라서 물리적 레이어에서의 재전송을 제공하는 플로우 제어 메커니즘에 대한 필요를 초래할 수 있어, 감소된 처리량을 초래한다(그리고 시간 결정론의 손실 - 아래 참조). 나아가, 물리적 거리가 멀 뿐만 아니라, 칩들 사이에서 전송된 신호 및 데이터는 일반적으로 SerDes(serializers-deserializer) 및 흐름 제어 메커니즘과 같은 많은 양의 로직을 순회해야만 하며, 이들 모두는 내부 통신에 비해 추가적 지연을 부가한다. 예를 들어, 발명자들은 종래의 기술을 사용하여, 외부 배리어 동기화 프로세스가 내부 동기화보다 10배 이상 걸릴 것으로 예상될 수 있으며, 프로그램 실행 시간의 5-10 %를 차지할 수 있다는 것을 확인했다. 본 명세서에 개시된 하드웨어 동기화 메커니즘을 사용하면, 이는 3배 정도 느려질 수 있지만, 여전히 내부 동기화보다 느리다. 또한, 이는 외부적인 데이터 교환의 예를 들어, 노이즈로 인한 물리 계층에서의 손실 및 재전송 및/또는 칩들 사이의 직렬화 및 비직렬화와 같은 요인들 때문일 것이다.
다른 변형들에서, 칩들 간 상호연결은 물리적 및/또는 링크 레이어에서 무손실일 수 있으나, 큐들이 오버플로우되게 하고 패킷들이 떨어지는 상이한 소스들 및 목적지들 간 네트워크 레이어 플로우들의 경쟁 때문에 더 높은 네트워킹 레이어에서는 실제로는 손실이 있다. 이것이 이더넷이 작동하는 방식이며, 대안적 비-시간-결정적 상호연결이 이더넷을 사용할 수 있음을 예상하게 한다. 또한, 무손실 또는 손실 여부에 관계없이, 임의의 교환 프로세스는 실제적으로 교환 실패를 초래하고 임의의 하드웨어 메커니즘(예를 들어, 링크 레이어)에 의해 복구될 수 없는 회복 불가능한 에러들(예를 들어, 알파 방사로 인한)를 겪을 수 있다. 실시예들에서, 시간-결정적 경우 및 비-시간-결정적 경우 모두에서, 시스템은 이러한 에러들을 검출할 수 있지만 정정할 수는 없다. 일단 검출되면, 에러는 BSP 어플리케이션 상태가 주기적으로 체크포인트되고, 그러한 치명적인 하드웨어 에러가 발생할 경우 어플리케이션의 상태를 마지막 체크포인트로 롤백할 것이 요구될 수 있는 전략을 가진 호스트에 신호될 수 있다. 이 메커니즘에 의해, 심지어 데이터 교환에 영향을 주는데 사용되는 손실 있는 메커니즘들이라도 일부 성능 비용으로 사용자에게 무손실인 것으로 보이게 할 수 있다.
도 13에 도시된 바와 같이, 실시예들에서, 외부 동기화 및 교환(상이한 칩들(2) 상의 타일들(4) 간의 데이터의 외부 교환(50')을 포함)과 별개인 내부 BSP 수퍼스텝(동일한 칩(2)상의 타일들(4) 간의 데이터의 내부 교환(50)을 포함)을 유지하는 것이 개시된다..
따라서, 프로그램은 다음의 순서를 포함하는 동기화, 교환 페이즈 및 계산 페이즈의 시퀀스를 수행하도록 구성될 수 있다: (I) 제1 계산 페이즈, 그 다음 (ii) 내부 배리어 동기화(3), 그 다음 (iii) 내부 교환 페이즈(50), 그 다음 (iv) 외부 배리어 동기화(80), 그 다음 (v) 외부 교환 페이즈(50’). 도 13에서 칩(2II)을 참조. 외부 배리어(80)는 내부 교환 페이즈(50) 다음에 적용되어, 프로그램은 내부 교환(50) 이후에만 외부 교환(50')으로 진행하도록 한다. 또한, 도 12의 칩(2I)과 관련하여 도시된 바와 같이, 선택적으로 내부 교환(iii)과 외부 배리어(iv) 사이에 계산 페이즈가 포함될 수 있다.
이 전체 시퀀스는 프로그램에 의해 시행된다(예를 들어, 컴파일러에 의해 생성됨). 실시예들에서, 프로그램은 이전에 기술된 SYNC 명령어에 의해 이러한 방식으로 동작하도록 프로그래밍된다. 내부 동기화 및 교환은 다른 칩(2) 상의 임의의 타일 또는 다른 개체로 확장되지 않는다. 시퀀스 (i)-(v)((iii)과 (iv) 사이의 전술한 선택적 계산 페이즈 포함)는 일련의 전체 반복으로 반복될 수 있다. 반복마다, 외부 동기화 및 교환 전에 내부 계산, 동기화 및 교환 (i) - (iii)의 다수의 인스턴스가 있을 수 있다. 즉, (i)-(iii)의 다수의 인스턴스들(그 순서를 유지), 즉 다수의 내부 BSP 수퍼 스텝들이 (iv) - (v), 즉 외부 동기화 및 교환 이전에 구현될 수 있다. 또한, 임의의 타일들(4)은 다른 타일들(4)과 병렬로 내부 동기화 및 교환(ⅱ)-(ⅲ)의 그 자신의 인스턴스를 각각 수행할 수 있다.
따라서 전체 BSP 사이클(ⅰ)-(ⅴ) 마다, 사이클(ⅱ)-(ⅲ)의 적어도 일부분이 있을 것이 보장되며, 동기화는 내부적으로, 즉 온-칩에서만 수행되도록 제한된다.
외부 교환(50) 동안에, 통신은 외부적인 것만으로 제한되는 것이 아니며; 일부 타일들은 단지 내부 교환을 수행 할 수도 있고, 일부 타일들은 외부 교환만을 수행할 수 있고, 일부 타일들은 혼합하여 수행할 수 있다. 그러나, 일부 실시예들에서 외부 상호연결(72)에서 발생하는 시간 결정적 손실로 인해, 그러한 실시예들에서, 타일이 일단 외부 통신을 수행하면, 다음 동기화까지 내부 통신을 다시 수행할 수 없다(메시지 타이밍 및 인터-타일 지연에 대한 미리 결정된 지식에 의존하는 바람직한 온-칩 통신 메커니즘의 아래의 설명 참조).
일부 실시예들에서, 또한 도 13에 도시된 바와 같이, 일부 타일들(4)은 계산 페이즈 동안 로컬 입력/출력을 수행할 수 있으며, 예를 들어 호스트와 데이터를 교환할 수 있다. 또한, 도 13에 도시된 바와 같이, 일반적으로 임의의 또는 모든 타일이 주어진 BSP 수퍼스텝에서 널 계산 페이즈(null compute phase)(52) 또는 널 교환 페이즈(null exchange phase)(50)를 갖는 것이 가능하다.
실시예들에서, 상이한 레벨의 동기화 존들(91, 92)은 시스템 내의 칩들(2)의 서브그룹에만 외부 동기화 및 교환 동작의 일부의 범위를 제한하는데 사용될 수 있고, 완전한 글로벌 동기화 및 교환이 필요한 페널티 횟수를 제한한다. 즉, 전체 사이클은 다음을 포함할 수 있다: (i) 제 1 계산 페이즈, 그 다음 (ii) 내부 배리어 동기화, 그 다음 (iii) 내부 교환 페이즈, 그 다음 (iv) 제1 하위 레벨의 동기화 존(91)의 타일들 내의 외부 배리어 동기화(80), 그 다음 (v) 제1 동기화 존(91)의 칩들 간의 외부 교환 페이즈; 그 다음 (vi) 제2 상위 레벨 동기화 존(92)을 통한 외부 배리어 동기화; 그 다음 (vii) 제2 레벨 동기화 존(92)의 칩들 사이의 외부 교환 페이즈. 제2 레벨 교환 페이즈에 대한 외부 배리어는 제1 레벨 외부 교환 페이즈 후에 적용되어, 프로그램은 제1 레벨 교환 페이즈 이후에만 제2 레벨 외부 교환으로 진행하도록 한다. 이 동작은 오퍼랜드에서 외부 모드의 상이한 레벨에 의해 규정된 SYNC 명령어를 사용하여 프로그래밍될 수 있다.
실시예들에서, 동기화 존의 최상위 계층적 레벨은 어레이(6) 내의 모든 칩들(2) 상의 모든 타일들(4)을 포함하며, 즉 글로벌 동기화를 수행하는데 사용된다. 다수의 하위-레벨 존들이 사용될 때, BSP는 각 존 내의 칩(들)(2) 상의 타일들(4)의 그룹 사이에 내부적으로 적용될 수 있지만, 글로벌 동기화가 수행 될 때까지 각 존은 서로에 대해 비동기식으로 동작할 수 있다.
노트: 하위 레벨 외부 동기화 및 교환(iv)-(v)과 관련하여, 하위-레벨 존들(91A, 91B) 중 어느 하나는 다른 하위-레벨 존(들)과 병렬로 하위-레벨 외부 교환의 그 자체의 인스턴스가 각각 수행될 수 있다. 그리고/또는 (i)-(v)의 여러 인스턴스가 (vi)-(vii) 전에 구현되는 경우에, 즉, 외부 동기화 및 교환 전에 하위-레벨 외부 BSP 수퍼스텝의 여러 인스턴스들이 있을 수 있다. 또한, 이 방식은 3개 이상의 계층적 레벨의 동기화 존으로 확장될 수 있다.
일반적으로, 호스트(93)는 임의의 하나 이상의 계층적 레벨의 동기화와 관련될 수 있다.
글로벌 동기화 존(92)에 대한 예시가 도 20에 개략적으로 도시된다. 시스템은 호스트 (93)로부터의 동기화 수신확인을 요구하는 배리어(90)가 적용되기 전에, P 동기화 배리어(80)를 통과하는 P회의 BSP 반복(p)을 수행할 수 있다. P 동기화 배리어는 호스트(93)이 아닌 관련된 동기화 그룹(92)에서 모든 (비-불참) 타일들(4)로부터의 동기화 요청들을 요구한다. 후속 동기화 배리어(80)는 동기화 그룹(92) 내의 그리고 호스트(93)가 이전에 특정한 배리어를 통과하는 허가를 표시했던 모든 (비-불참) 타일들 (4)로부터의 동기화 요청들을 요구한다. 이 배리어(90) 후에, 호스트(93)와 하나 이상의 타일들(4) 사이에 예를 들어, 하나 이상의 타일들(4)이 호스트(93)에 계산 결과를 보고하도록 교환(50’’)이 수행될 수 있다.
실시예들에서, 데이터의 온-칩 교환(내부 교환)은 큐를 필요로 하지 않고, 시간 결정적 방식으로 수행될 수 있다. 참조는 도 16에 이루어진다. 큐가 없는 통신은 각 타일(4)이 그것의 데이터를 전송하는 시간을 알고 있고 또한 전송하고 수신하는 타일 간 온-칩 인터-타일 지연을 알고 있는 컴파일러에 의해 달성될 수 있다. 이 미리 결정된 지식이 주어지면, 컴파일러는 수신 타일을 프로그래밍하여 전송 타일에 의한 관련 데이터의 전송 이후의 특정 알려진 시간에, 즉 전송 시간에 인터-타일 지연을 더한 시간에, 전송 타일의 어드레스를 리스닝하게 할 수 있다. 컴파일러는 스스로 각 스레드의 어느 포인트에 송신 명령어(들)을 포함할지 선택하기 때문에, 전송 타이밍은 컴파일러에 의해 알려진다. 또한, 온-칩 통신을 위한 인터-타일 지연은 주어진 전송 및 수신 타일(4) 쌍에 대해 고정된 알 수 있는 값이다. 컴파일러는 이를 송신 및 수신 타일들의 상이한 가능한 조합에 대한 인터-타일 지연의 조회 테이블로부터 알 수 있다. 그 후, 컴파일러는 대응하는 수신 명령어를 전송 명령어 이후의 대응하는 사이클 수에서 송신자의 어드레스를 리스닝하기 위해 포함할 수 있다.
각 칩(2)에서, 칩(2)은 칩 활동의 타이밍을 제어하는 각각의 클럭을 포함한다. 클럭은 모든 칩들의 회로들 및 컴포넌트들에 연결된다. 또한, 칩(2)은 내부, 시간-결정적 상호연결 또는 모든 타일들 및 링크들이 연결 배선들의 세트에 의해 연결되는 “스위칭 패브릭"(34)을 포함한다. 실시예들에서, 상호연결(34)은 소프트웨어가 읽을 수 있는 상태를 가지지 않는 점에서 무상태일 수 있다. 연결 배선의 각 세트는 끝과 끝이 고정된다. 배선은 파이프라인화된다. 각 세트는 하나 이상의 데이텀들로 구성되는 패킷을 전달하며, 한 데이텀은 클럭 사이클마다 전송된다. 단어 “패킷"은 하나 이상의 유효 비트를 가질 수 있는 데이텀을 표현하는 비트들의 세트를 표시한다(때때로 본 명세서에서 데이터 아이템으로 지칭됨). “패킷들"은 (고유하게 식별될 의도된 수신자를 허용하는) 헤더들 또는 임의의 형태의 목적지 식별자를 가지지 않으며, 패킷 종단부 정보도 가지지 않는다. 대신에, 패킷들은 타일에 대한 입력 또는 타일로부터의 출력인 숫자 값을 각각 표현한다. 각 타일은 그 자체의 로컬 메모리를 가진다(이후 기술됨). 칩(2)은 공유 메모리를 가지지 않는다. 스위칭 패브릭(24)은 연결 배선들의 크로스 세트만 구성하며, 어떠한 상태도 보유하지 않는다. 동일한 칩 상의 타일들 간 데이터 교환은 본 명세서에 기술된 바와 같이 시간-결정론 기반에서 수행된다. 파이프라인화된 연결 배선은 일련의 임시 저장소 예를 들어, 다음 저장소에 데이터를 릴리즈하기 전에 클럭 사이클에 대해 데이텀을 보유하는 랫치(latch) 또는 플립 플롭(flip flop)을 포함한다. 배선을 따른 이동의 시간은 이들 임시 저장소들에 의해 결정되며, 각각은 임의의 2개의 포인트들 간의 경로에서 시간의 클럭 사이클을 사용한다.
각 타일(4)은 내부 상호연결(34)에서 그것의 동기화 상태를 동기화 제어기(36)에 표시한다. 각 타일(4)이 데이터를 송신할 준비가 되면, 동기화 프로세스(30)는 시스템이 교환 페이즈(50)로 진입하게 한다. 각 타일은 상이하지만 알려진 시간 지연을 가지는 sync_ack을 경험한다. 감독자 프로그램은 필요에 따라 추가적 사이클 지연을 삽입하여 각 타일이 완전히 동일한 사이클에서 교환 페이즈를 시작하도록 한다. 이 교환 페이즈에서, 데이터 값은 타일 사이에서 이동한다(실제로는 메모리-대-메모리 데이터 이동에서 타일들의 메모리들 간에). 교환 페이즈에서, 계산이 없으므로 동시성 위험도 없다(또는 적어도 다른 타일(4)로부터 아직 수신하지 못한 데이터에 응답하는 계산이 없다). 교환 페이즈에서 각 데이텀은 전송 타일로부터 수신자 타일로 타일을 나가는 연결 배선을 따라 이동한다. 각 클럭 사이클에서, 데이텀은 파이프라인 방식으로 경로(저장소 대 저장소)를 따라 특정 거리를 이동한다. 데이텀이 타일로부터 발급될 때, 수신자 타일을 식별하는 헤더와 함께 발급되지 않는다. 대신에, 수신자 타일은 특정 시간에 특정 전송 타일로부터 데이텀을 예상한다는 것을 알고 있다. 따라서, 여기에 설명된 컴퓨터는 시간 결정적이다.
각 타일(4)은 프로그래머에 의해 또는 컴파일러 실행에 의해 할당된 프로그램의 일부분을 실행하며, 프로그래머 또는 컴파일러 기능은 특정 시간에 특정 타일에 의해 전송될 것이 무엇인지 그리고 특정 시간에 수신자 타일에 수신될 수 필요가 있는 것이 무엇인지의 지식을 가진다. 이를 달성하기 위해, SEND 명령어는 SEND 명령어의 실행 시간이 컴퓨터의 다른 타일들에서 실행되는 다른 명령어들의 타이밍에 비해 미리 결정되는, 각 타일 상의 프로세서에 의해 실행되는 로컬 프로그램에 포함된다.
각 타일(4)은 자신의 멀티플렉서(210)와 연관된다. 각 멀티플렉서는 칩 상에 타일(4)만큼 많은 입력을 가지며, 각 입력은 스위칭 패브릭(34)에 연결된다. 스위칭 패브릭의 교차선들은 각 타일(브로드캐스트 교환 버스)로부터의 연결 배선들(218)의 데이터-아웃 세트에 연결된다. 설명을 쉽게 하기 위해, 모든 교차선이 그림 16에 도시된 것은 아니다. 한 세트의 교차선은 140x라고 표시되어 그것이 다수의 교차선의 세트 중 하나임을 표시한다.
멀티플렉서(210)가 220x로 라벨링된 입력으로 스위칭될 때, 이것은 교차선(140x)에 연결될 것이고, 따라서 전송(송신) 타일(4T)의 데이터 버스(218T)에 연결될 것이다. 멀티플렉서가 특정 시간에 그 입력으로 스위칭되도록 제어되면, 교차선(140x)에 연결된 데이터 버스(230)에서 수신된 데이텀은 특정 시점에서 멀티플렉서(210)의 출력에 나타날 것이다. 그 다음에 특정 지연 후에 수신 타일(4R)에 도달할 것이며, 지연은 수신 타일(4R)로부터 멀티플렉서(210)의 거리에 의존한다. 멀티플렉서들은 스위칭 패브릭에 가깝게 구성되는 경향이 있기 때문에, 타일로부터 멀티플렉서까지의 지연은 수신 타일(4R)의 위치에 의존하여 변할 수 있다.
스위칭을 구현하기 위해, 타일들(4)에서 실행되는 로컬 프로그램들은 멀티플렉서 제어 신호(214)가 발급되게 하여 그 타일과 연관된 멀티플렉서(210)를 제어하여 특정 데이텀이 타일에서 수신될 것으로 예상되는 시간에 앞서는 특정 시간에 입력을 스위칭하도록 하는 스위치 제어 명령어들(PUTi)을 포함한다. 교환 페이즈에서, 멀티플렉서들이 스위칭되고 패킷들(데이터)이 스위칭 패브릭을 사용하여 타일 간에 교환된다. 이 설명으로부터, 내부 상호연결(34)은 상태가 없고 큐들을 필요로 하지 않음을 알 수 있다 - 각 데이텀의 이동은 각 멀티플렉서의 입력이 연결되는 특정한 교차선에 의해 미리 결정된다.
교환 페이즈에서, 모든 타일들(4)은 동기화 그룹 내의 다른 모든 타일들과 통신할 수 있다. 각 타일(4)은 그 자신의 고유 입력 멀티플렉서(210)의 제어를 갖는다. 따라서 들어오는 트래픽은 칩(2) 내의 임의의 다른 타일(또는 외부 교환에서 외부 연결 링크들 중 하나)로부터 선택될 수 있다. 멀티플렉서(210)가 임의의 주어진 교환 페이즈에서 널 입력, 즉 입력 없음을 수신하도록 설정될 수 있다.
각 타일(4)은 3 개의 인터페이스를 가진다: 스위칭 패브릭(34)으로부터 타일(4)로 데이터를 전달하는 "exin" 인터페이스(224); 브로드캐스트 교환 버스(218)를 통해 타일로부터 스위치 패브릭으로 데이터를 전달하는 "exout" 인터페이스(226); 및 제어 mux 신호(214)((mux-select)를 타일(4)로부터 멀티플렉서(210)로 전달하는 "exmux" 인터페이스(228).
각 개별적 타일이 SEND 명령어를 실행하고 올바른 데이터를 전송하고 수신하기 위해 적절한 시간에 제어 명령어들을 스위칭하는 것을 보장하기 위해, 개별 프로그램을 컴퓨터의 개별 타일들에 할당하는 교환 스케쥴링 요구 사항이 프로그래머 또는 컴파일러에 의해 만족되어야 한다. 이 함수는 바람직하게는 컴파일 시간에 다음의 파라미터들을 알 필요가 있는 교환 스케줄러에 의해 수행된다.
파라미터 I : 각 타일의 상대적인 SYNC 수신확인 지연. 이는 TILE_ID 레지스터에 보관되는 송신 및 수신 타일들의 타일 ID(TID)의 함수이다. 이는 각 타일이 모든 다른 타일들에 대해 동기화 제어기(36)로부터 동기화 수신확인 신호를 수신한 때를 표시하는 항상 0보다 크거나 같은 사이클들의 수이다. 이는 타일 ID가 그 타일의 칩 상의 특정한 위치를 표시하고 따라서 물리적 거리를 반영한다는 점에서, 타일 ID로부터 계산될 수 있다. 다시 말해서, 동기화 수신확인 지연이 균등화된다. 전송된 타일(4T)이 동기화 제어기(36)에 더 가깝고 수신 타일(4R)이 더 멀리 있는 경우, 동기화 수신확인 지연은 수신 타일(4R)보다 송신 타일(4T)에 더 짧을 것이며, 그 반대도 마찬가지이다. 특정한 값은 동기화 수신확인 지연을 위해 각 타일과 연관될 것이다. 이 값들은 예를 들어 지연 테이블에 보관되거나 또는 타일 ID에 기초하여 매번 계산될 수 있다.
파라미터 II : 교환 mux 제어 루프 지연. 이는 타일의 입력 mux 선택을 변경하는 명령어(PUTi MUXptr) 발급과 동일한 타일이 새로운 mux 선택의 결과로서 메모리에 저장된 교환 데이터에 대한 (가상의) 로딩 명령어를 발급할 수 있는 가장 빠른 포인트 사이의 사이클들의 수이다. 이는 수신자 타일(4R)의 exmux 인터페이스(228R)로부터 멀티플렉서(210R)로 도달하는 제어 신호의 지연 및 멀티플렉서의 출력으로부터 데이터 입력 exin 인터페이스(224)로의 라인의 길이를 포함한다.
파라미터 III: 타일-대-타일 교환 지연. 이는 하나의 타일에서 발급되는 SEND 명령어와 수신 타일이 자체 메모리에서 송신된 값을 가리키는 (가상의) 로딩 명령어를 발급할 수 있는 가장 빠른 포인트 사이의 사이클 수이다. 이는 테이블에 액세스하거나 즉석에서 계산함으로써 송수신 타일들의 TID들로부터 계산할 수 있다. 이 지연은 exout 인터페이스(226T)로부터의 전송 타일(4T)로부터 교환 버스(218T)를 따라 스위칭 패브릭(14)으로, 그 다음 수신 타일(4R)에서 입력 mux(210R)를 통해 수신 타일의 ex in 인터페이스(224R)로 데이터가 이동하기 위해 취한 시간을 포함한다.
파라미터 IV: 교환 트래픽 메모리 포인터 업데이트 지연. 이는 타일의 교환 입력 트래픽 메모리 포인터(232)를 변경하는 명령어(PUTi MEMptr) 발급과 동일한 타일이 새로운 포인터의 결과로서 메모리에 저장된 교환 데이터에 대한 (가상의) 로딩 명령어를 발급할 수 있는 가장 빠른 포인트 사이의 사이클들의 수이다. 이는 작고, 고정된 사이클들의 수이다. 메모리 포인터(232)는 데이터 메모리(202)로의 포인터로서 동작하고, exin 인터페이스(224)로부터 들어오는 데이터가 저장될 곳을 표시한다.
이들은 파라미터들은 함께 전송 타일(4T)로부터의 데이텀의 전송과 수신 타일(4R)에 의한 그 데이텀의 수신 사이에서 경험될 총 인터-타일 지연을 제공한다. 상기 특정한 교환 메커니즘 및 파라미터들은 예시로서만 제공된다. 다른 교환 메커니즘들은 지연의 정확한 구성이 다를 수 있지만, 교환이 시간 결정적으로 유지되는 한 그것은 프로그래머 또는 컴파일러가 알 수 있고 따라서, 큐 없는 교환이 가능할 수 있다.
도 17은 예시적 교환 타이밍을 자세히 도시한다. 왼쪽에는 0-30에서 실행되는 칩 클럭 사이클이 도시된다. 수신 타일(4R)의 프로세서가 전송 타일(4T) 상의 프로세스 출력이었던 데이텀에 대해 동작하기를 원한다면, 전송 타일(4T)은 특정 시간(예를 들어, 도 17에서 클럭 사이클(0))에 SEND 명령어 송신을 실행해야만 하며, 그리고 수신 타일(4R)은 전송 타일 상의 SEND 명령어의 실행에 대한 특정 시간만큼 스위치 제어 명령어 PUTi EXCH MXptr (클럭 사이클(11)에서와 같이)을 실행해야만 한다. 이는 데이터가 수신자 타일 (4R)에서 실행되는 코드-렛(code-let)에서 사용하기 위해 로딩될 시간에 수신자 타일에 도착하는 것을 보장할 것이다.
도 19는 오프-칩(외부 교환)과 통신하기 위한 대표적인 메커니즘을 도시한다. 이 메커니즘은 비-시간-결정적이다. 이 메커니즘은 외부 상호연결(72)에서 전용 하드웨어 로직으로 구현된다. 데이터는 패킷들의 형태로 외부 상호연결(72)를 통해 송신된다. 내부 상호연결을 통해 송신된 패킷과 달리, 이들 패킷들은 헤더를 가진다: 전송 순서가 변경될 수 있으므로, 목적지 어드레스가 패킷 헤더에 제시될 것을 요구한다. 실시예들에서, 외부 상호연결(72)은 네트워크의 형태를 취하며, 따라서 라우팅 목적의 추가적 정보를 요구한다.
물리적 레이어에서 상호연결 메커니즘은 손실이 있으나, 트랜잭션 레이어에서 메커니즘은 링크 레이어의 아키텍처로 인해 손실이 없다: 패킷이 수신확인되지 않은 경우, 상호연결(72)에서의 하드웨어에 의해 자동적으로 재송신될 것이다. 그러나 데이터 링크 레이어에서 손실 및 재전송 가능성은 외부 상호연결을 통한 데이터 패킷들의 전달이 시간-결정적이지 않음을 의미한다. 또한, 주어진 교환의 모든 패킷들은 시간이 흐름에 따라 임의의 순서로 함께 도착하거나 분리될 수 있으므로, 외부 상호 연결은 플로우 제어 및 큐가 필요하다. 추가로, 상호연결은 비트-록(bit-lock)을 유지하기 위해 충분한 데이터 신호 트랜지션들을 가지는 수신된 데이터 스트림으로부터 클럭을 추론하기 위한 클럭-데이터-복구(CDR) 기술을 사용하도록 구성될 수 있다. 이 추론된 클럭은 송신 클럭에 대해 알 수 없는 페이지 관계가 될 것이므로, 비-결정적 추가 소스를 표현한다.
도시된 바와 같이, 외부 상호연결(72)은 외부 교환 블록(XB)(78)을 포함한다. 컴파일러는 외부 교환 요청(XREQ)을 교환 블록(78)에 전송하기 위해 타일들(4) 중 하나를 지명한다(동작 S1). XREQ는 타일들(4) 중 어느 것이 다른 칩(2) 상의 다른 타일 또는 타일들(4)에 송신할 데이터 패킷(컨텐츠)을 갖는지를 표시하는 하나 이상의 제어 패킷들을 포함하는 메시지이다. 이는 체크표시와 X표시에 의해 도 19에 개략적으로 도시된다: 예시적 시나리오로서, 체크표시로 라벨이 된 것들은 외부로 송신할 데이터 패킷들을 가지며 X표시로 라벨이 된 것들은 외부로 송신할 데이터 패킷들을 갖지 않는다. 동작 S2에서, 교환 블록(78)은 교환-온(XON) 제어 패킷을 외부로 송신할 데이터를 가지는 타일들(4) 중 제1 타일에 송신한다. 이것은 제1 타일이 외부 상호연결(78)을 통해 관련된 목적지로 그것의 패킷들을 송신하기 시작하게 한다(동작 S3). 언제든 XB가 상호연결에 패킷들을 계속 송신할 수 없으면(예를 들어, 상호연결에서 이전의 패킷 손실 및 재전송 때문에 또는 많은 다른 XB들 및 타일들에 의한 외부 상호연결의 과용 때문에), XB는 XB들 큐가 오버플로우되기 전에 해당 타일로 교환-오프(XOFF)를 송신한다. 혼잡이 해소되고 XB가 다시 큐에 충분한 공간을 가지면, 타일에 XON을 송신하여 그것의 컨텐츠를 계속 전송하게 할 수 있다. 이 타일이 마지막 데이터 패킷을 송신했으면, 동작 S4에서, 교환 블록(78)은 교환-오프(XOFF) 제어 패킷을 이 타일에 송신하고, 그 다음 동작 S5에서, 다른 XON을 송신할 데이터 패킷들을 가지는 다음 타일(4)에 송신하고, 이렇게 계속한다. XON 및 XOFF의 신호하기는 외부 교환 블록(78)의 형태로 전용 하드웨어 로직에서의 하드웨어 메커니즘으로서 구현된다.
실시예들에서, 교환 블록(78)은 복수의 교환 블록 컨텍스트들을 포함할 수 있다. 각 교환 블록 컨텍스트는 상기 기술된 교환 메커니즘의 각각의 인스턴스를 구현하기 위한 하드웨어 로직의 일부이다. 교환 블록 컨텍스트는 해당 컨텍스트를 리스닝하도록 구성된 타일들의 서브셋의 교환-온 및 교환-오프를 독립적으로 발급한다. 이 경우, 교환 블록은 물리적 레이아웃을 위한 컨텍스트들의 편리한 그룹핑이며, 온-칩 SOC(on-chip system-on-chip) 상호 연결(34)에 의해 제공되는 것과 일치하도록 물리적 버스 폭의 관점에서 대역폭을 제공하기 위한 것이다. 예를 들면, 교환 블록(78)은 4개 또는 8개의 교환 블록 컨텍스트들을 포함할 수 있다. 다수의 블록들(78)도 제공될 수 있다. 따라서, 외부 상호연결은 더 많은 교환들을 병렬로 프로세싱할 수 있다. 다수의 교환 컨텍스트들 및/또는 블록들 간에 분할된 기능의 분할은 물리적 레이아웃 편의성 및 SOC 상호연결과의 폭/대역폭의 정합의 문제이다. 그러나 이것은 선택적이다. 단지 몇 개의 외부 링크들을 가지는 칩(2)에서(예를 들어, 단지 호스트 링크 및 칩-대-칩 링크 없음), 하나는 단지 단일의 교환 블록 또는 심지어 단일 컨텍스트를 가지는 교환 블록을 대신 사용할 수 있다.
외부 교환은 다른 칩(2) 내의 타일 인스턴스(4)(예를 들어, 다른 IPU) 또는 호스트 시스템(93)과의 통신이 필요할 때마다 발생한다. 외부 교환의 동작은 내부 교환과 상당히 다르다. 첫째, 외부 상호연결(72)은 통상적으로 내부 교환 패브릭(34)에 의해 제공되는 것보다 훨씬 더 높은 지연과 낮은 대역폭을 갖는 공유 리소스이다. 외부 교환을 통한 데이터 전송은 조정(arbitration) 및 배압(back-pressure)의 대상이 되며, 연관된 지연들은 가변적일 수 있다(즉, 정적으로 결정될 수 없음). 둘째, 데이터의 교환은 전송 프록시들(즉, 교환 블록 컨텍스트들)을 통해 수행된다. 타일 인스턴스(4)는 온-칩 프록시들과만 통신하며, 절대로 전송 대상과 직접 통신하지 않는다. 셋째, 데이터 전송은 타일 메모리(22)에서 트랜잭션 패킷의 형성을 수반하며, 그것은 전송 프록시들과 통신하는데 사용되는 패킷들이다. 외부 교환은 고유의 특성들을 가질 수 있는 여러 가지 동기화 존들을 지원한다.
외부 교환 전송은 온-칩 전송 프록시들과 통신하는데 사용되는 트랜잭션 패킷들의 형성 및 전송을 포함한다. 이러한 패킷들은 임의의 다른 데이터 구조에 따라 타일(4)에 의해 타일 메모리(22)에 형성되고, 외부 동기화 다음에 송신 및/또는 송신-오프 명령어들 (SEND, SENDOFF)을 사용하여 전송 프록시로 전송된다.
단일 트랜잭션 패킷을 전송하는데 사용되는 송신 명령어들의 수는 제한이 없다. 단일 송신 명령어는 다수의 패킷들을 전송하는데 사용될 수 없다. 일 구현예에서, sendoff 명령어는 64 워드(256 바이트)의 데이터 크기에 대해 강제된 상한을 갖는다. 더 큰 페이로드(payload)로 sendoff 명령어를 실행하려고 시도하면 예외 이벤트가 발생될 것이다. 송신 명령어는 플로우 제어의 대상이 되며, 플로우 제어가 꺼지면, 멈출 것이다.
개시된 메커니즘의 한 가지 이점은 타일들을 위해 반드시 DMA 엔진이 필요하지 않다는 것이다. 대신에, 타일들의 (바람직하게는 작은) 서브셋이 데이터를 오프-칩으로 송신 및/또는 수신하기 위한 I/O 타일들로서 컴파일러에 의해 지명된다. 칩(2)은 고밀도의 작은 타일을 포함하기 때문에, 일부는 나머지 타일들의 성능을 손상시키지 않고 I/O에 할당될 수 있고, 따라서 DMA 엔진에 대한 인수(argument)를 제거한다. 또한, 교환 메커니즘은 다수의 I/O 타일들 각각을 서비스하도록 구성되어 타일들 사이에서 외부 링크(예를 들어, PCI 또는 이더넷)의 대역폭이 양호하게 사용되도록, 바람직하게는 포화되도록 보장한다.
따라서, 실시예들에서, 프로세서 칩(2)은 적어도 온-칩 DMA를 포함하지 않는다. 오프-칩 DMA와 관련하여, 일부 경우에, 호스트 서브시스템(93)의 게이트웨이는 일부 DMA 기능을 가질 수 있지만, 일반적으로 이더넷 네트워크를 통해 원격 스토리지 또는 CPU로부터 데이터를 이동시키는데 사용되며, 이 데이터는 타일(4)에 기록된다. 대안적으로, 데이터는 게이트웨이 메모리로 이동될 수 있고, 그 다음 타일들은 그로부터 직접 데이터를 읽을 수 있다. 다른 방향으로 이동하는 데이터의 경우, 타일들은 게이트웨이 메모리에 직접 데이터를 기록하고, 그 다음 데이터를 DMA를 사용하여 원격 호스트 또는 스토리지로 개별적으로 이동한다. 게이트웨이가 타일에 데이터를 기록하는 경우에도, 이것은 BSP 인식 방식으로 그렇게 하며, 따라서 실제로 게이트웨이 기능은 다른 종류의 타일로 간주될 수 있다.
따라서, 일부 경우에, 시스템은 일부 외부 DMA 유사 리소스를 사용할 수 있지만, 그 이유는 이더넷을 통한 이러한 유형의 DMA가 일반적으로 칩(2)에서 실행될 수 없는 대규모 네트워킹 스택을 필요로 하기 때문이다. 게이트웨이는 네트워킹 스택을 실행하고, (거의 모든 범용 프로세서의 경우와 같이) DMA 유닛들로 무장된 하나 이상의 CPU 코어들을 포함할 수 있다. 따라서, 시스템은 여전히 본질적으로 타일들과 게이트웨이에서 의사-타일(pseudo-tile) 간에 게이트웨이와 원격 호스트/스토리지 간에 완전히 디커플링된 DMA를 가지는 비-DMA 프로세스를 가진다.
실시예들에서, 플로우 제어 메커니즘은 타일 인스턴스(4)가 외부 교환 전송 시퀀스의 끝에서 여분의 플로우 제어(XFC) 패킷들의 꼬리(tail)를 수신할 수 있도록 할 수 있다. 이러한 오래된 비동기 플로우 제어 패킷이 후속 외부 SYNC 명령어의 실행 후에 도착하면, 타일 인스턴스(4)는 다음 교환 페이즈에 대한 추가적 교환 데이터를 송신할 권한이 있음을 부정확하게 추론할 수 있다(동기화 명령어에 의해 적용된 타일 전송 플로우 제어(XOFF)의 디폴트 설정은 후속적으로 수신된 늦은 플로우 제어 메시지에 의해 오버라이드될 수 있다. 따라서, 내부 SYNC는 임의의 오래된 플로우 제어 패킷이 전파되는데 걸리는 시간을 허용하기 위해 외부 교환 전송 시퀀스의 끝에서 사용될 수 있다. 이것은 (후속적 외부 SYNC의 실행으로 시작되는) 새로운 외부 교환 전송을 시작하기 전에 XB 교환 버스가 조용한 상태임을 보장할 것이다.
XREQ 패킷과 관련하여, 온-칩 교환 블록 컨텍스트들은 고정된 그룹의 타일 인스턴스들(4) 사이에서 외부 교환 리소스들 조정하고 해당 그룹에 대한 플로우 제어를 조율하는데 사용된다. 임의의 외부 동기화에 대해, 각 타일 인스턴스(4)는 SYNC에 적절한 인수를 사용하여 그 자신을 해당 그룹에 대한 마스터 또는 슬레이브라고 선언할 수 있다.
마스터와 슬레이브 간의 차이는 작지만, 실시예들에서 외부 교환의 동작과 관련된다. 외부 교환 시퀀스의 시작에서, 플로우 제어 메커니즘은 각 타일(4)이 교환 패킷들을 전송하는 것을 방지한다. 그러나, 프로토콜은 XREQ 패킷이 외부 교환에 참여할 각 교환 블록 컨텍스트로 송신되는 것을 특정하며, XREQ 패킷은 그룹에서 어떤 타일 인스턴스들(4)이 송신할 데이터를 갖는지 특정한다. 그 다음 교환 블록 컨텍스트는 참여 타일들(4) 간의 조정을 제어한다. 마스터 타일 인스턴스들은 플로우 제어 설정을 무시하는 외부 SYNC 실행이 후속하는 단일 송신 또는 송신오프 명령어를 실행할 수 있는 능력을 가진다. 이는 마스터 타일들로 하여금 해당 컨텍스트를 시작하기 위해 XREQ 패킷을 교환 블록 컨텍스트로 송신할 것을 강제하게 한다.
실시예들에서 이에 대한 명시적인 검사가 없지만, 그룹 당 단 하나의 타일 인스턴스(4)만이 마스터로서 지정되어야 한다. 각 교환 블록 컨텍스트는 해당 그룹의 마스터로 지정된 타일(4)의 ID로 사전 구성된다. 교환 블록 컨텍스트가 상이한 타일(4)로부터 XREQ 패킷을 수신하면, 교환 블록(78)에 의해 에러가 발생될 것이다.
실시예들에서, 외부 슬레이브 열거(enumeration)들 중 하나와 함께 실행 동기화 명령어는 로컬 타일 플로우 제어 상태를 그것의 디폴트 설정(XOFF)으로 강제 재설정할 것이다.
외부 교환에 대한 수신은 내부 교환에 대한 수신과 상당히 다르다. 외부 수신 모드에서 동작할 때, 교환 인터페이스(311)는 온-칩 교환 프록시들로부터 트랜잭션 패킷들을 수신하고 해석한다. 상기 패킷들은 트랜잭션 유형을 특정하는 메타데이터 및 기록의 경우에 타일 메모리 시작 어드레스 및 페이로드 길이를 포함한다. 들어오는 기록에 대해, 모든 메타데이터는 교환 인터페이스(311)에 의해 제거되고, 실제 데이터 페이로드만 타일 메모리에 수용된다.
CSR 상태($INCOMING_MUX)는 외부 교환과 관련된다. 이는 지정된 송신자로부터 데이터를 샘플링하기 위해, 입력 데이터 멀티플렉서(210)를 구성하는데 사용된다. 각 타일 인스턴스(4)는 IPU(내부 교환용) 또는 교환 블록(78)(외부 교환용) 으로부터의 임의의 타일로부터 트래픽을 선택하게 하는 자신의 고유 입력 멀티플렉서(210)를 갖는다. 이 값은 교환 인터페이스(311)가 외부 교환 모드로 동작하기 위한 외부 교환과 연관된 범위(즉, 전송 프록시를 명시적으로 가리킴) 내에 있어야만 한다. 실시예들에서, NULL 범위는 외부 교환에 대한 유효한 범위가 아니다.
실시예들에서, 타일(4)이 교환 블록(78)에 교환 블록이 타일로 전송하는 것을 허용했는지 표시할 수 있는 플로우 제어 메커니즘이 없으며, 그리고 이것이 요구되지도 않는다. 이것은 타일(4)이 의도적으로 타일(4)로 송신되는 모든 것을 소비할 수 있기 때문이다. 그렇지 않은 경우, 역방향 플로우 제어가 필요하다. 타일(4)의 이러한 능력은 첫째로 시간-결정적 모드에서 수신을 절대 차단하지 않아야 하는 요구로부터 발생하고(플로우 제어가 시간-결정적 시스템에서 이용될 수 없음), 둘째로 컴파일러는 각 교환 시작시 수신 타일이 새로운 메시지들을 위해 얼마나 많은 메모리 공간을 가지고 있는지를 알고 있고, 해당 교환에서 메시지들을 위해 할당된 이 메모리가 절대 초과 사용(over-subscribed)되지 않도록 데이터 전송을 조정하므로 큐의 개념이 없다는 사실로부터 발생한다.
도 15는 본 명세서에 개시된 프로세서 아키텍처의 예시적인 어플리케이션, 즉 기계 지능에 대한 어플리케이션을 도시한다.
기계 지능 분야의 통상의 기술자에게 익숙한 바와 같이, 기계 지능은 기계 지능 알고리즘이 지식 모델을 학습하는 학습 스테이지로 시작한다. 상기 모델은 상호연결된 노드들(즉, 정점들)(102) 및 에지들(즉, 링크들)(104)의 그래프를 포함한다. 그래프에서 각 노드(102)는 하나 이상의 입력 에지들 및 하나 이상의 출력 에지들을 갖는다. 일부 노드들(102)의 입력 에지 중 일부는 노드들 중 일부 다른 노드의 출력 에지들이며, 따라서 노드를 연결하여 그래프를 형성한다. 또한, 하나 이상의 노드들(102)의 하나 이상의 입력 에지들은 전체로서 그래프에 대한 입력들을 형성하고, 하나 이상의 노드들(102)의 하나 이상의 출력 에지들이 전체로서 그래프의 출력들을 형성한다. 때때로 주어진 노드는 그래프의 입력들, 그래프로부터의 출력들 및 다른 노드들과의 연결 모두 가질 수도 있다. 각 에지(104)는 값 또는 더 자주 텐서(n차원 매트릭스)를 통신하며, 이들은 그들의 입력 및 출력 에지들에서 노드(102)에 그리고 노드(102)로부터 제공되는 입력들 및 출력들을 각각 형성한다.
각 노드(102)는 그 입력 에지 또는 에지들에서 수신되는 그 하나 이상의 입력들의 함수를 표현하며, 이 함수의 결과는 출력 에지 또는 에지들에 제공된 출력(들)이다. 각 함수는 하나 이상의 각각의 파라미터들에 의해 파라미터화된다(비록 곱셈 가중치일 필요는 없지만, 때때로 가중치로도 지칭됨). 일반적으로 상이한 노드들(102)에 의해 표현되는 함수들은 상이한 형태의 함수일 수 있고 및/또는 상이한 파라미터들에 의해 파라미터화될 수 있다.
또한, 각 노드의 함수의 하나 이상의 파라미터들 각각은 각각의 에러 값에 의해 특징화된다. 또한, 각각의 조건은 각 노드(102)의 파라미터(들)에서 에러(들)와 연관될 수 있다. 단일 파라미터에 의해 파라미터화된 함수를 표현하는 노드(102)에 대해, 조건은 단순한 임계치 일 수 있다. 즉, 조건은 에러가 특정된 임계치 내에 있으면 충족되지만 에러가 임계치을 초과하면 충족되지 않는다. 하나 이상의 각각의 파라미터에 의해 파라미터화된 노드(102)에 대해, 허용가능한 에러 레벨에 도달한 노드(102)에 대한 조건은 더 복잡할 수 있다. 예를 들어, 조건은 노드(102)의 각 파라미터가 각각의 임계치 내에 있는 경우에만 충족될 수 있다. 다른 예시로서, 동일한 노드(102)에 대한 상이한 파라미터들의 에러를 결합하는 결합된 메트릭이 정의될 수 있으며, 조건은 결합된 메트릭의 값이 특정된 임계치 내에 있다는 조건에서 충족될 수 있지만, 이와 달리 조건은 결합된 메트릭의 값이 임계치를 초과하면 충족되지 않을 수 있다(또는 메트릭의 정의에 따라 그 반대). 조건이 무엇이든, 노드의 파라미터(들)에서 에러가 허용가능한 특정 레벨 또는 정도 미만인지 여부의 측정을 제공한다. 일반적으로, 임의의 적합한 메트릭이 사용될 수 있다. 조건 또는 메트릭은 모든 노드에 대해 동일할 수 있고, 또는 노드들 중 각각의 상이한 노드에 대해 다를 수 있다.
학습 스테이지에서, 알고리즘은 경험 데이터, 즉 그래프에 대한 가능한 여러 가지 입력 조합 표현하는 다수의 데이터 포인트들을 수신한다. 점점 더 많은 경험 데이터가 수신됨에 따라, 알고리즘은 경험 데이터에 기초하여 그래프에서 다양한 노드(102)의 파라미터들을 점차적으로 튜닝하여 파라미터들의 에러를 최소화하려고 시도한다. 목표는 그래프의 출력이 주어진 입력에 대해 원하는 출력에 가능한 가깝도록 파라미터들의 값들을 찾는 것이다. 그래프가 전체적으로 이러한 상태에 가까워지면, 그래프가 수렴한다고 한다. 적절한 정도의 수렴 후에, 그래프를 사용하여 예측 또는 추론을 수행할 수 있다. 즉, 주어진 입력에 대한 결과를 예측하거나 주어진 출력에 대한 원인을 추론.
학습 스테이지는 여러 가지 가능한 다양한 형태를 취할 수 있다. 예를 들어, 감독된 접근법에서, 입력 경험 데이터는 훈련 데이터, 즉 알려진 출력에 대응하는 입력의 형태를 취한다. 각 데이터 포인트에서, 알고리즘은 출력이 주어진 입력에 대해 알려진 출력과 더 가깝도록 파라미터들을 조정할 수 있다. 후속 예측 스테이지에서, 그래프를 사용하여 입력 쿼리를 대략적인 예측 출력과 매핑 할 수 있다(또는 추론하는 경우 그 반대). 다른 접근법도 가능하다. 예를 들어, 감독되지 않는 접근법에서, 입력 데이텀마다의 참조 결과의 개념이 없으며, 대신에 기계 지능 알고리즘을 사용하여 출력 데이터에서 자신의 자체 구조를 식별한다. 또는 보강 접근법에서, 알고리즘은 입력 경험 데이터의 각 데이터 포인트에 대해 적어도 하나의 가능한 출력을 시도하고, 이 출력이 긍정(positive) 또는 부정(negative)인지 (그리고 잠재적으로 긍정인지 부정인지의 정도) 예를 들어, 승 또는 패 또는 보상 또는 처벌 등을 알려준다. 많은 시도를 통해, 알고리즘은 긍정적 결과를 가져올 입력을 예측할 수 있도록 그래프의 파라미터들을 점차적으로 조정할 수 있다. 그래프를 학습하기 위한 다양한 접근법 및 알고리즘은 기계 학습 분야의 통상의 기술자에게 공지될 것이다.
본 명세서에 개시된 기법의 대표적인 적용에 따르면, 각 작업자 스레드는 기계 지능 그래프에서 노드들(102) 중 각각의 개별적 노드와 연관된 계산을 수행하도록 프로그래밍된다. 이 경우, 노드들(102) 간의 에지들(104) 중 적어도 일부는 스레드들 간의 데이터 교환에 대응하고, 일부는 타일들 간의 교환과 관련된다. 또한, 작업자 스레드들의 개별 종료 상태들은 각각의 노드(102)가 그 노드의 파라미터(들)의 수렴에 대한 각각의 조건을 만족시키는지 여부, 즉 에러 공간에서 허용가능한 레벨 또는 영역 내에 그 파라미터 또는 파라미터들에서 에러를 갖는지를 표현하기 위해 프로그래머에 의해 사용된다. 예를 들어, 이것은 각 개별 종료 상태가 개별 비트이고 집합된 종료 상태가 개별 종료 상태들의 AND(또는 0은 양수로 취해진다면 등가적으로 OR)인 또는 집합된 종료 상태가 개별 종료 상태들이 모두 참인지 아니면 모두 거짓인지 또는 혼합인지를 표현하는 삼중 값인 실시예의 일 사용예이다. 따라서, 종료 상태 레지스터(38) 내의 단일 레지스터 값을 검사함으로써, 프로그램은 그래프 전체 또는 적어도 그래프의 하위 영역이 허용가능한 정도로 수렴했는지 여부를 결정할 수 있다.
이것의 다른 변형으로서, 집합이 개별 신뢰값의 통계적 집합의 형태를 취하는 실시예가 사용될 수 있다. 이 경우, 각 개별 종료 상태는 각각의 스레드에 의해 표현된 노드의 파라미터들이 허용가능한 에러 정도에 도달했다는 신뢰도(예를 들어, 백분율로서)를 표현한다. 그 다음, 집합된 종료 상태를 사용하여 그래프 또는 그래프의 하위영역이 허용가능한 정도로 수렴되었는지에 관한 전반적인 신뢰도를 결정할 수 있다.
멀티 타일 구성(6)의 경우, 각 타일은 그래프의 서브 그래프를 실행한다. 각 서브 그래프는 하나 이상의 감독자 스레드들을 포함하는 감독자 서브 프로그램, 및 작업자들의 일부 또는 모두가 코드렛의 형태를 취할 수 있는 작업자 스레드들의 세트를 포함한다.
상기 실시예들은 단지 예로서 기술되었다는 것이 인식될 것이다.
예를 들어, 대안적 시나리오들에서, 본 발명의 범위는 시간-결정적 내부 상호연결 또는 비-시간-결정적 외부 상호연결에 제한되지 않는다. 시간-결정적 영역과 비-시간-결정적 영역을 다른 방식으로 나누는 것도 가능할 것이다. 예를 들어, 다수의 칩들(2)에 걸친 시간-결정적 도메인을 비-시간-결정적 상호연결에 의해 연결된 상이한 멀티-칩 시간-결정적 도메인으로 확장하는 것을 배제하지 않는다(예를 들어, 상이한 멀티-칩 시간-결정적 도메인들이 다른 카드 또는 서버 섀시에서 구현됨). 또는 다른 예로서, 상이한 시간-결정적 도메인들이 주어진 칩(2) 상에서 구현될 수 있으며, 이러한 도메인들 사이에 비-시간-결정적 온-칩 상호연결이 제공된다. 또는 모든 타일들(4) 또는 모듈들 간의 통신은 시간-결정적 교환이 전혀 없이, 비-시간-결정적일 수 있다.
시간-결정적 상호연결이 사용되는 경우, 구현예는 인터-타일 지연 조회 테이블의 사용에 제한되지 않는다. 대신에, 예를 들어, 분석식이 인터-타일 지연을 결정하는데 사용될 수 있다. 또한, 인터-타일 지연 및 송수신 타이밍은 컴파일러에 의해 설정되는 것으로 제한되지 않는다. 대안적으로, 예를 들어, 프로그래머가 수동으로 구성될 수 있다.
또한, 개시된 교환 메커니즘은 비-시간-결정적 교환들의 사용에 제한되지 않는다. 모든 타일들(4), 칩들(2) 또는 다른 그러한 프로세싱 모듈들이 시간-결정적 방식으로 서로 데이터를 교환할 수 있는 시스템에서도, 개시된 교환 메커니즘은 랑데뷰 또는 포스트박스 메커니즘을 요구하거나 또는 교환의 정확한 타이밍을 알아야만 하는 프로그램 없이도 교환을 가능하게 하는 것이 여전히 바람직할 수 있다. 비록 그것이 본 명세서의 실시예들에서 내부 상호연결(34)에 대해 개시되었지만, 이는 모든 가능한 사용 경우에 대해 반드시 바람직하지는 않을 수 있는 프로그램 타이밍의 신중한 사전 결정을 요구한다.
또한, 개시된 교환 메커니즘의 적용 가능성은 BSP에 한정되지 않는다. 이는 BSP 수퍼스텝에서 교환 페이즈와 계산 페이즈를 분리하는데 특히 유용한 메커니즘을 제공하지만, 보다 일반적으로, 프로세서 모듈의 다음 동작을 데이터의 일부 미리 결정된 또는 특정된 양의 수신과 동기화하려는 임의의 시나리오에서도 사용될 수 있다.
주어진 타일 또는 프로세서에서, 구현예는 감독자 스레드에 대해 별개의 컨텍스트가 제공되거나 또는 감독자 스레드가 슬롯에서 실행된 다음 해당 슬롯을 작업자에게 양도하는 전술한 아키텍처로 제한되지 않는다. 대신에 감독자는 범용 컨텍스트를 사용할 수 있다. 또는 예를 들어, 다른 구성에서, 감독자는 그 자신의 전용 슬롯에서 실행될 수 있다. 또한, 구현예는 멀티 스레딩에 대해 감독자 역할 또는 의도를 가지는 스레드들 중 특정 스레드에 제한되지 않는다. 본 명세서에 개시된 기법들은 하나, 일부 또는 모든 칩 상의 하나, 일부 또는 모든 타일들이 비-멀티스레드 실행을 이용하는 시나리오들에서도 사용될 수 있다.
사용되는 경우, 호스트 동기화 프록시의 적용가능성은 상이한 동기화 그룹 간의 선택을 허용하는 시스템에 제한되지 않는다. 단일 동기화 도메인(배리어 동기화가 수행되는 타일들(4)의 단일 그룹)만을 갖는 시스템에서도, 타일들(4)이 호스트(93)에 연기하기 전에 통과할 수 있는 특정 수의 배리어들을 설정함으로써, 호스트 인터렉션의 양을 감소시킬 수 있는 것은 여전히 유리할 수 있다.
또한, 카드들 간의 또는 호스트(93)와의 PCI 인터페이스의 관점에서 실시예가 예시되었지만, 이는 제한적이지 않으며, 예를 들어 이더넷과 같은 다른 유형의 인터페이스도 사용될 수 있다.
멀티스레드 타일들이 사용되는 경우, "감독자"및 "작업자"라는 용어는 다르게 명시적으로 언급되지 않는 한 예상된 특정 책임들을 반드시 암시하지는 않으며, 특히 감독자 스레드가 그것의 타임 슬롯을 작업자에게 양도하는 상기 기술된 방식에 반드시 제한되지는 않는다. 일반적으로, 작업자 스레드는 일부 계산 작업이 할당되는 스레드를 참조할 수 있다. 감독자는 배럴 슬롯(실행 채널)에 작업자 할당 및/또는 다수의 스레드 간의 배리어 동기화 수행, 및/또는 하나 이상의 스레드의 결과에 종속하는 임의의 제어 플로우 작업(예들 들어, 분기) 수행과 같은 동작들에 대한 책임이 있는 스레드를 감독하거나 조정하는 임의의 종류를 표현할 수 있다.
인터리빙된 타임 슬롯들의 시퀀스 또는 이와 유사한 것을 참조하는 경우, 이는 상기 시퀀스가 모든 가능한 또는 사용가능한 슬롯들을 구성한다는 것을 반드시 의미하지는 않는다. 예를 들어, 문제의 시퀀스는 가능한 모든 슬롯들이거나 현재 활성화 된 슬롯일 수 있다. 스케쥴링된 시퀀스에 현재 포함되지 않은 다른 잠재적 슬롯들이 있을 수 있다는 것을 반드시 배제하지는 않는다.
본 명세서에서 사용된 용어 타일은 임의의 특정한 지형 또는 그와 같은 것에 반드시 제한되는 것은 아니며, 일반적으로 보통은 동일한 칩(동일한 다이) 상의 모듈 유사 어레이에서 프로세싱 유닛(10) 및 대응하는 메모리(11)를 포함하는 프로세싱 리소스의 임의의 모듈적 유닛을 지칭한다.
또한, 본 명세서에서 타일들의 그룹 또는 복수의 타일 등 간의 동기화 또는 집합을 수행하는 것을 언급하는 경우, 이는 명시적으로 언급되지 않는 한 시스템에서 칩 상의 모든 타일 또는 모든 타일들을 반드시 지칭하지는 않는다. 예를 들어, SYNC 및 EXIT 명령어들은 주어진 칩 상의 타일들(4) 중 특정 서브셋과 관련하여서만 및/또는 주어진 시스템에서 칩들(2)의 서브셋에서만 동기화 및 집합을 수행하도록 구성될 수 있고; 주어진 칩 상의 일부 다른 타일들(4) 및/또는 주어진 시스템에서 일부 다른 칩들은 주어진 BSP 그룹에 포함되지 않을 수 있고, 현재 그룹에 의해 수행되는 계산과 무관한 완전히 별개의 작업 세트에 사용될 수도 있다.
추가로, 실시예들에서, 상기 기술된 동기화 방식들은 하나 이상의 네트워크 카드들, 저장 디바이스들 및/또는 FPGA들과 같은 프로세서들이 아닌 외부 리소스들의 수반을 배제하지 않는다. 예를 들어, 일부 타일들은 외부 시스템과의 데이터 전송에 관련하도록 선택할 수 있고, 이러한 전송이 해당 타일의 계산 부담을 형성할 수 있다. 이 경우에, 전송은 다음 배리어 전에 완료되어야만 한다. 일부 경우에, 타일의 종료 상태는 외부 리소스와의 통신의 결과에 종속될 수 있고, 이 리소스는 대체로 종료 상태에 영향을 줄 수 있다. 대안적으로 또는 추가적으로, 멀티 타일 프로세서들이 아닌 리소스들 예를 들어, 호스트 또는 하나 이상의 FPGA들은 동기화 네트워크 그 자체에 통합될 수 있다. 즉, 배리어 동기화가 만족되고 타일들이 다음 교환 페이즈로 진행하기 위해, 이/이들 추가적 리소스들로부터 Sync_req와 같은 동기화 신호가 요구된다. 추가로, 실시예들에서, 집합된 글로벌 종료 상태는 외부 리소스(예를 들어, FPGA로부터)의 종료 상태를 상기 집합에 포함할 수 있다.
또한, SYNC 명령어들의 특정 모드들이 상기 기술되었지만, 본 발명의 범위는 일반적으로 그러한 모드들에 제한되지 않는다. 예를 들어, 상기 주어진 모드들의 리스트는 전체적인 것이 아니다. 다른 실시예들에서, SYNC 명령어는 더 적은 모드들을 가질 수 있다. 예를 들어, SYNC는 외부 동기화의 상이한 계층적 레벨들을 지원할 필요가 없고 또는 온-칩과 인터-칩 동기화들 간에 구별할 필요가 없다(즉, 인터-타일 모드에서, 온-칩 또는 오프-칩 여부와 관계없이 모든 타일들과 관련하여 항상 동작).
추가적 변형들에서, SYNC 명령어는 보다 큰 세분성 또는 범위의 계층적 동기화 존들(91, 92)을 수용하기 위해 보다 많은 수의 가능한 모드를 취할 수 있거나; 또는 시스템의 상이한 부문을 계층적 존들으로 수용하기 위한 모드들의 세트를 간단히 취할 수 있다. 예를 들어, 내부(온-칩)과 외부(오프-칩) 동기화 간의 선택(또는 심지어 이에 대안적인 것) 뿐만 아니라, SYNC 명령어의 모드들은 하나의 칩을 넘어 다른 물리적 브레이크 포인트들을 더 인식하도록 구성될 수 있다(예를 들어, 하나의 IC 패키지, 하나의 카드, 하나의 카드 박스 등). 또는 전용 SYNC 명령어가 사용되지 않더라도, 그러한 구분은 범용 코드를 사용하여 프로그래머 또는 컴파일러에 의해 구현될 수 있다. 따라서, 실시예들에서, 계층적 동기화 존들 중 하나는(예를 들어, SYNC 명령어의 모드들 중 하나) 동일한 IC 패키지 상의 모든 칩들 상의 모든 타일들로 구성될 수 있다(그러나 그 이상의 타일 또는 칩은 없다). 따라서, 실시예들에서, 계층적 동기화 존들 중 하나는(예를 들어, SYNC 명령어의 모드들 중 하나) 동일한 IC 패키지 상의 모든 칩들 상의 모든 타일들로 구성될 수 있다(그러나 그 이상의 타일 또는 칩은 없다). 따라서, 실시예들에서, 계층적 동기화 존들 중 하나는(예를 들어, SYNC 명령어의 모드들 중 하나) 동일한 IC 패키지 상의 모든 칩들 상의 모든 타일들로 구성될 수 있다(그러나 그 이상의 타일 또는 칩은 없다). 이는 IC 패키지들, 카드들 및 박스들 간의 통신이 동일한 패키지 내의 칩들(다이들) 사이의 통신보다 더 큰 페널티를 초래하는 경향이 있기 때문에 유리할 것이다.
또한, 동기화 존들은 계층적인 것으로 제한되지 않으며(즉, 하나가 다른 것에 중첩되지 않음), 다른 실시예들에서, 선택가능한 동기화 존들은 하나 이상의 비-계층적 그룹들로 구성되거나 하나 이상의 비-계층적 그룹들을 포함할 수 있다(그 그룹의 모든 타일들은 단일의 다른 선택 가능한 그룹 내에 중첩되지 않음).
다른 변형에서, 동기화는 전용 SYNC 명령어들 또는 EXIT 명령어들을 사용하여 수행되는 것으로 제한되지 않는다. 다른 경우에, 동기화 기능은 범용 코드를 사용하여 달성될 수 있다. 추가로, SYNC 명령어 및/또는 EXIT 명령어들이 사용되는 경우, 종료 상태들을 집합시키는 기술된 기능을 반드시 가질 필요가 없다.
개시된 기법들의 다른 적용들 및 변형들이 본 개시가 주어진 통상의 기술자에게 명백해질 것이다. 본 개시의 범위는 기술된 실시예들에 의해 제한되지 않으며, 첨부하는 청구항에 의해서만 제한된다.

Claims (22)

  1. 프로세서로서,
    동일한 칩 상의 다수의 타일들의 구성, 각 타일은 그 자체의 별개의 각각의 프로세싱 유닛 및 프로그램 메모리 및 데이터 메모리를 포함하는 메모리를 포함하며, 프로그램 코드의 별개의 부분들은 상기 타일들 중 서로 다른 타일들에서 병렬로 실행되도록 구성되며;
    상기 서로 다른 타일들 상에서 실행되는 상기 프로그램 코드로 하여금 타일들 간에 통신하게 하도록 구성된 온-칩 상호연결; 및
    오프-칩으로 데이터를 통신하기 위한 전용 하드웨어 로직에서 구현되는 비-시간-결정적 메커니즘을 포함하는 외부 상호연결을 포함하며, 데이터는 패킷들의 형태로 상기 외부 상호연결을 통해 송신되며, 각 패킷은 목적 어드레스가 존재하는 헤더를 포함하며, 그리고 상기 외부 상호연결을 통한 패킷들의 통신은 비-시간-결정적이며;
    상기 외부 상호연결은 플로우 제어 및 상기 패킷들의 큐잉(queuing)을 제공하도록 구성된 외부 교환 블록을 포함하며;
    상기 타일들 중 하나는 외부 교환 요청 메시지를 상기 교환 블록에 송신하기 위해 상기 프로그램 코드의 컴파일러에 의해 지명되며, 상기 외부 교환 요청 메시지는 상기 타일들 중 어느 것이 다른 칩 상의 목적지로 송신하기 위한 데이터 패킷들을 가지는지 표시하는 하나 이상의 제어 패킷들을 포함하며; 및
    상기 교환 블록은: A) 교환-온 제어 패킷을 상기 외부 교환 요청 메시지에서 상기 하나 이상의 제어 패킷들에 의해 외부적으로 송신할 데이터를 가지는 것으로 표시된 상기 타일들 중 제1 타일에 송신함으로써 - 상기 제1 타일은 상기 교환 블록의 큐에 큐잉되어 있는 패킷들을 상기 외부 상호연결을 통해 그들의 목적지들로 송신하는 것을 시작하게 하며 - ; 그리고 그 후 B) 상기 제1 타일이 그것의 최종 데이터 패킷을 송신하면, 상기 제1 타일이 패킷들을 송신하는 것을 중지하게 하기 위한 교환-오프 제어 패킷을 상기 제1 타일에 송신하고, 그리고 다른 교환-온 제어 패킷을 상기 외부 교환 요청 메시지에서 송신할 데이터 패킷들을 가지는 것으로 표시된 다음 타일에 송신함으로써, 상기 플로우 제어를 수행하도록 구성되는 것을 특징으로 하는 프로세서.
  2. 청구항 1에 있어서,
    상기 패킷들 중 적어도 일부의 목적지는 다른 칩 상의 다른 타일 또는 타일들인 것을 특징으로 하는 프로세서.
  3. 청구항 1 또는 2에 있어서,
    상기 패킷들 중 적어도 일부의 목적지는 호스트 CPU를 포함하는 호스트 서브시스템이며, 상기 프로세서는 상기 호스트에 의해 할당된 작업을 수행하기 위해 작업 가속기로서 구성되는 것을 특징으로 하는 프로세서.
  4. 청구항 1 또는 2에 있어서,
    상기 패킷들 중 적어도 일부의 목적지는 저장 디바이스인 것을 특징으로 하는 프로세서.
  5. 청구항 1 또는 2에 있어서,
    프로세싱 유닛들 간에 데이터를 통신하게 하는 내부 상호연결을 포함하며, 상기 내부 상호연결은 시간-결정적 상호연결이며, 칩 타일들 간의 데이터의 통신은 시간-결정적인 것을 특징으로 하는 프로세서.
  6. 청구항 1 또는 2에 있어서,
    물리적 레이어에서 상기 외부 상호연결은 손실이 있으나, 트랜잭션 레이어에서 상기 외부 상호연결은 손실이 없으며, 그에 의해 패킷이 수신확인(acknowledgement)되지 않은 경우 상기 외부 상호연결에서 하드웨어에 의해 자동적으로 재송신될 것을 특징으로 하는 프로세서.
  7. 청구항 1 또는 2에 있어서,
    상기 교환 블록이 상기 외부 상호연결에서의 혼잡으로 인하여 상기 외부 상호연결을 통해 패킷들을 송신하는 것을 계속할 수 없는 경우, 상기 교환 블록의 큐가 오버플로우하기 전에, 상기 교환 블록은 교환-오프 제어 패킷을 상기 송신 중인 타일에 송신하도록 구성되며; 그리고 혼잡이 해소되면, 상기 교환 블록은 교환-온 제어 패킷을 상기 송신 중이었던 타일에 송신하여 상기 교환 블록이 패킷들을 전송하는 것을 계속하게 하는 것을 특징으로 하는 프로세서.
  8. 청구항 1 또는 2에 있어서,
    상기 외부 상호연결은 네트워크의 형태를 취하며 그리고 상기 헤더는 라우팅 목적의 정보를 더 포함하는 것을 특징으로 하는 프로세서.
  9. 청구항 1 또는 2에 있어서,
    상기 외부 상호연결은 비트-록(bit-lock)을 유지하기 위해 충분한 데이터 신호 트랜지션들을 가지는 수신된 데이터 스트림으로부터 클럭을 추론하기 위해 클럭-데이터-복구 기술을 사용하도록 구성되는 것을 특징으로 하는 프로세서.
  10. 청구항 1 또는 2에 있어서,
    상기 외부 상호연결은 상기 패킷을 상기 목적지, 또는 PCI, PCIe 또는 이더넷 버스 또는 상기 프로세서의 외부 인터페이스와 상기 목적지 또는 목적지들 사이의 네트워크를 통한 목적지에 송신하도록 구성되는 것을 특징으로 하는 프로세서.
  11. 청구항 1 또는 2에 있어서,
    상기 타일들의 일부 또는 전부의 그룹은 시리즈의 벌크 동기식 병렬, BSP, 수퍼스텝들에서 동작하도록 프로그래밍되며, 이에 의해, 각 수퍼스텝에서 상기 그룹은:
    - 상기 그룹에서 상기 타일들이 계산을 수행하지만 상기 계산의 결과들을 칩 밖으로 교환하지 않는 계산 페이즈, 그리고 그 후
    - 상기 그룹에서 상기 타일들의 적어도 일부는 상기 계산의 하나 이상의 결과들을 다른 칩 상의 목적지로 교환하는 교환 페이즈, 상기 타일들의 적어도 일부는 상기 교환 요청에서 표시된 것들이며; 및
    상기 그룹은 상기 시리즈에서 각 현재 수퍼스텝과 그 다음 수퍼스텝 간에 배리어 동기화에 의해 동기화되며, 그에 의해 상기 그룹에서 각 타일은 상기 다음 수퍼스텝의 상기 교환 페이즈로 진행하기 전에 상기 현재 수퍼스텝의 상기 계산 페이즈를 완료하기 위해 상기 그룹의 모두에 대해 대기하는 것을 특징으로 하는 프로세서.
  12. 청구항 11에 있어서,
    상기 온-칩 상호연결 및/또는 상기 외부 상호연결은 상기 배리어 동기화를 수행하도록 구성된 하드웨어 로직을 포함하며, 상기 배리어 동기화는:
    - 상기 그룹에서 상기 타일들 각각으로부터 동기화 요청을 수신하고, 그리고
    - 상기 동기화 요청들이 상기 모든 그룹으로부터 수신된다는 조건에서 동기화 수신확인을 발급함으로써 수행되며;
    상기 그룹에서 상기 타일들 각각은 상기 동기화 수신확인의 발급까지 상기 각각의 프로세싱 유닛에서 명령어 발급을 정지하도록 더 구성되는 것을 특징으로 하는 프로세서.
  13. 청구항 12에 있어서,
    상기 타일들 각각에서 상기 각각의 프로세싱 유닛은 미리 정의된 명령어 세트로부터 명령어들을 실행하도록 구성되며; 상기 타일들의 전부 또는 일부의 명령어 세트는 상기 타일이 상기 동기화 요청을 송신하기 위해 실행되게 하는 동기화 명령어를 포함하는 것을 특징으로 하는 프로세서.
  14. 청구항 1 또는 2에 있어서,
    상기 교환 블록은 복수의 교환 블록 컨텍스트들을 포함하며, 상기 교환 블록 컨텍스트 각각은 상기 타일들의 서로 다른 각각의 서브셋에 대해 상기 플로우 제어 메커니즘의 인스턴스를 구현하도록 구성되는 것을 특징으로 하는 프로세서.
  15. 청구항 1 또는 2에 있어서,
    적어도 20개의 상기 타일들을 포함하는 것을 특징으로 하는 프로세서.
  16. 청구항 1 또는 2에 있어서,
    상기 프로세서는 DMA 엔진을 사용하지 않고 데이터를 송신하는 것을 수행하도록 구성되며, 상기 타일들의 서브셋이 상기 데이터를 오프-칩 목적지로의 송신을 수행하고 및/또는 상기 오프-칩 목적지로부터 데이터를 읽기 위한 I/O 타일들로서 동작하기 위해 상기 컴파일러에 의해 지명되며, 상기 서브셋은 상기 교환 요청 메시지에서 표시된 타일들인 것을 특징으로 하는 프로세서.
  17. 청구항 16에 있어서,
    상기 외부 상호연결은 상기 패킷들을 상기 목적지, 또는 상기 프로세서의 외부 인터페이스와 상기 목적지 또는 목적지들 사이의 연결을 통한 목적지에 송신하도록 구성되며, 상기 연결은 상기 패킷들을 송신하기 위한 제1 대역폭을 가지며; 그리고 타일들 각각은 상기 패킷들을 송신하기 위한 제2 대역폭을 가지며, I/O 타일들로서 지명된 타일들의 수는 적어도 상기 제2 대역폭에 의해 나누어진 상기 제1 대역폭을 가장 가까운 완전수로 반올림 또는 내림한 것인 것을 특징으로 하는 프로세서.
  18. 청구항 1 또는 2의 프로세서 및 다른 칩 상의 목적지를 포함하는 시스템.
  19. 청구항 1 또는 2의 프로세서를 동작하는 방법으로서,
    프로그램 코드를 컴파일하기 위해 컴퓨터 상의 컴파일러를 실행하는 단계, 상기 컴파일은 타일들 중 어느 것이 교환 요청 메시지를 송신할 것인지 지명하는 컴파일러를 포함하며; 그리고
    상기 프로세서 상에 상기 컴파일된 프로그램 코드를 실행하는 단계, 그에 의해 상기 지명된 타일들로 하여금 상기 교환 요청 메시지를 상기 교환 블록에 송신하게 하여, 상기 교환 블록으로 하여금 큐잉 및 플로우 제어를 수행하게 하고, 상기 교환 요청 메시지에서 표시된 상기 타일들로 하여금 그들의 패킷들의 송신을 수행하게 하는 것을 특징으로 하는 방법.
  20. 청구항 19에 있어서,
    상기 교환 블록이 상기 외부 상호연결에서의 혼잡으로 인하여 상기 외부 상호연결을 통해 패킷들을 송신하는 것을 계속할 수 없는 경우, 상기 교환 블록의 큐가 오버플로우하기 전에, 상기 교환 블록은 교환-오프 제어 패킷을 상기 송신 중인 타일에 송신하도록 구성되며; 그리고 혼잡이 해소되면, 상기 교환 블록은 교환-온 제어 패킷을 상기 송신 중이었던 타일에 송신하여 상기 교환 블록이 패킷들을 전송하는 것을 계속하게 하며; 및
    상기 혼잡은 적어도 부분적으로 상기 외부 상호연결의 과용(over subscription) 때문인 것을 특징으로 하는 방법.
  21. 청구항 19에 있어서,
    상기 교환 블록이 상기 외부 상호연결에서의 혼잡으로 인하여 상기 외부 상호연결을 통해 패킷들을 송신하는 것을 계속할 수 없는 경우, 상기 교환 블록의 큐가 오버플로우하기 전에, 상기 교환 블록은 교환-오프 제어 패킷을 상기 송신 중인 타일에 송신하도록 구성되며; 그리고 혼잡이 해소되면, 상기 교환 블록은 교환-온 제어 패킷을 상기 송신 중이었던 타일에 송신하여 상기 교환 블록이 패킷들을 전송하는 것을 계속하게 하며;
    상기 혼잡은 적어도 부분적으로 상기 외부 상호연결에서의 이전의 패킷 손실 및 재전송 때문인 것을 특징으로 하는 방법.
  22. 청구항 19에 있어서,
    상기 송신은 DMA 엔진을 사용하지 않고 수행되며, 대신에 상기 타일들의 서브셋이 상기 데이터를 오프-칩 목적지로의 송신을 수행하고 및/또는 상기 오프-칩 목적지로부터 데이터를 읽기 위한 I/O 타일들로서 동작하기 위해 상기 컴파일러에 의해 지명되며, 상기 서브셋은 상기 교환 요청 메시지에서 표시된 타일들이며; 그리고
    상기 컴파일은 상기 타일들 중 어느 것이 상기 I/O 타일들인지 지명하는 컴파일러를 포함하는 것을 특징으로 하는 방법.
KR1020180126037A 2017-10-20 2018-10-22 칩 밖으로 데이터 송신하기 KR102167058B1 (ko)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
GB1717293.3A GB2569271B (en) 2017-10-20 2017-10-20 Synchronization with a host processor
GB1717294.1A GB2569775B (en) 2017-10-20 2017-10-20 Synchronization in a multi-tile, multi-chip processing arrangement
GB1717293.3 2017-10-20
GB1717294.1 2017-10-20
GB1816930.0 2018-10-17
GB1816930.0A GB2569844B (en) 2017-10-20 2018-10-17 Sending data off-chip

Publications (2)

Publication Number Publication Date
KR20190044571A KR20190044571A (ko) 2019-04-30
KR102167058B1 true KR102167058B1 (ko) 2020-10-16

Family

ID=64394881

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180126037A KR102167058B1 (ko) 2017-10-20 2018-10-22 칩 밖으로 데이터 송신하기

Country Status (4)

Country Link
US (2) US10558595B2 (ko)
KR (1) KR102167058B1 (ko)
GB (1) GB2569844B (ko)
TW (1) TWI700641B (ko)

Families Citing this family (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
GB2569844B (en) 2017-10-20 2021-01-06 Graphcore Ltd Sending data off-chip
GB2569271B (en) 2017-10-20 2020-05-13 Graphcore Ltd Synchronization with a host processor
GB2569775B (en) 2017-10-20 2020-02-26 Graphcore Ltd Synchronization in a multi-tile, multi-chip processing arrangement
GB2575294B8 (en) * 2018-07-04 2022-07-20 Graphcore Ltd Host Proxy On Gateway
GB2579412B (en) 2018-11-30 2020-12-23 Graphcore Ltd Gateway pull model
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
BR112021016106A2 (pt) 2019-03-15 2021-11-09 Intel Corp Processador gráfico de propósito geral, método e sistema de processamento de dados
US20220180467A1 (en) 2019-03-15 2022-06-09 Intel Corporation Systems and methods for updating memory side caches in a multi-gpu configuration
US11704270B2 (en) * 2019-03-27 2023-07-18 Graphcore Limited Networked computer with multiple embedded rings
JP2021039658A (ja) * 2019-09-05 2021-03-11 富士通株式会社 Ac並列化回路、ac並列化方法及び並列情報処理装置
CN114651237A (zh) * 2019-10-24 2022-06-21 北京希姆计算科技有限公司 数据处理方法、装置、电子设备及计算机可读存储介质
CN111061674B (zh) * 2019-11-30 2023-05-16 武汉船舶通信研究所(中国船舶重工集团公司第七二二研究所) 多处理器交叉通信装置及方法
CN111445963B (zh) * 2020-03-31 2023-03-10 桂林电子科技大学 一种基于图节点信息聚合的子图同构约束求解方法
US11631001B2 (en) 2020-04-10 2023-04-18 SiMa Technologies, Inc. Heterogeneous computing on a system-on-chip, including machine learning inference
US11321607B2 (en) * 2020-04-03 2022-05-03 SiMa Technologies, Inc. Machine learning network implemented by statically scheduled instructions, with compiler
US11989581B2 (en) 2020-04-17 2024-05-21 SiMa Technologies, Inc. Software managed memory hierarchy
US11886981B2 (en) 2020-05-01 2024-01-30 SiMa Technologies, Inc. Inter-processor data transfer in a machine learning accelerator, using statically scheduled instructions
US11734549B2 (en) 2020-04-21 2023-08-22 SiMa Technologies, Inc. Avoiding data routing conflicts in a machine learning accelerator
US11734605B2 (en) 2020-04-29 2023-08-22 SiMa Technologies, Inc. Allocating computations of a machine learning network in a machine learning accelerator
US11586894B2 (en) 2020-05-04 2023-02-21 SiMa Technologies, Inc. Ordering computations of a machine learning network in a machine learning accelerator for efficient memory usage
GB2596872B (en) * 2020-07-10 2022-12-14 Graphcore Ltd Handling injected instructions in a processor
GB202010839D0 (en) * 2020-07-14 2020-08-26 Graphcore Ltd Variable allocation
US11782757B2 (en) 2021-05-07 2023-10-10 SiMa Technologies, Inc. Scheduling off-chip memory access for programs with predictable execution
US11742295B2 (en) * 2020-12-28 2023-08-29 Global Unichip Corporation Interface of integrated circuit die and method for arranging interface thereof
GB2608180A (en) * 2021-06-25 2022-12-28 Graphcore Ltd Control of data send from a multi-processor device
CN113282533B (zh) * 2021-07-20 2021-09-28 中科南京智能技术研究院 一种异步链路发送端电路及芯片接收端电路
CN113868171A (zh) * 2021-09-28 2021-12-31 上海兆芯集成电路有限公司 互连系统
CN114338530B (zh) * 2021-12-21 2023-09-29 浙江华锐捷技术有限公司 设备状态的调整方法、装置、存储介质及电子装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120089812A1 (en) 2009-06-12 2012-04-12 Graeme Roy Smith Shared resource multi-thread processor array
US20120179896A1 (en) 2011-01-10 2012-07-12 International Business Machines Corporation Method and apparatus for a hierarchical synchronization barrier in a multi-node system

Family Cites Families (25)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2303274B (en) 1995-07-11 1999-09-08 Fujitsu Ltd Switching apparatus
JP3532037B2 (ja) 1996-07-31 2004-05-31 富士通株式会社 並列計算機
US6771264B1 (en) 1998-08-20 2004-08-03 Apple Computer, Inc. Method and apparatus for performing tangent space lighting and bump mapping in a deferred shading graphics processor
US7861060B1 (en) 2005-12-15 2010-12-28 Nvidia Corporation Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior
US7636835B1 (en) * 2006-04-14 2009-12-22 Tilera Corporation Coupling data in a parallel processing environment
US8234652B2 (en) 2007-08-28 2012-07-31 International Business Machines Corporation Performing setup operations for receiving different amounts of data while processors are performing message passing interface tasks
US8078834B2 (en) * 2008-01-09 2011-12-13 Analog Devices, Inc. Processor architectures for enhanced computational capability
US8866827B2 (en) 2008-06-26 2014-10-21 Microsoft Corporation Bulk-synchronous graphics processing unit programming
US8151088B1 (en) * 2008-07-08 2012-04-03 Tilera Corporation Configuring routing in mesh networks
US20100115236A1 (en) 2008-10-31 2010-05-06 Cray Inc. Hierarchical shared semaphore registers
CN101586961B (zh) 2009-07-06 2011-04-06 中国人民解放军国防科学技术大学 用于组合导航处理器的多任务调度方法及组合导航处理器
US8312193B2 (en) * 2010-01-08 2012-11-13 International Business Machines Corporation Eager protocol on a cache pipeline dataflow
GB201001621D0 (en) 2010-02-01 2010-03-17 Univ Catholique Louvain A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms
CN103108000B (zh) 2011-11-09 2016-08-10 中国移动通信集团公司 用于任务同步的方法和系统及系统中的主节点和工作节点
US9465432B2 (en) 2013-08-28 2016-10-11 Via Technologies, Inc. Multi-core synchronization mechanism
US9977676B2 (en) 2013-11-15 2018-05-22 Qualcomm Incorporated Vector processing engines (VPEs) employing reordering circuitry in data flow paths between execution units and vector data memory to provide in-flight reordering of output vector data stored to vector data memory, and related vector processor systems and methods
US9620213B2 (en) * 2013-12-27 2017-04-11 Cavium, Inc. Method and system for reconfigurable parallel lookups using multiple shared memories
US10210134B2 (en) * 2015-05-21 2019-02-19 Goldman Sachs & Co. LLC General-purpose parallel computing architecture
US10248177B2 (en) 2015-05-22 2019-04-02 Advanced Micro Devices, Inc. Droop detection and regulation for processor tiles
EP3338192A1 (en) 2015-08-18 2018-06-27 Telefonaktiebolaget LM Ericsson (PUBL) Method for observing software execution, debug host and debug target
KR102397878B1 (ko) 2015-10-21 2022-05-13 어드밴스드 마이크로 디바이시즈, 인코포레이티드 프로세서 타일용 드룹 검출 및 규제
EP3400688B1 (en) * 2016-01-04 2020-05-20 Gray Research LLC Massively parallel computer, accelerated computing clusters, and two dimensional router and interconnection network for field programmable gate arrays, and applications
US10324730B2 (en) 2016-03-24 2019-06-18 Mediatek, Inc. Memory shuffle engine for efficient work execution in a parallel computing system
US10397124B2 (en) * 2017-01-17 2019-08-27 Argela Yazilim ve Bilisim Teknolojileri San. ve Tic. A.S. System and method to prevent persistent full switch queues in software defined networks
GB2569844B (en) 2017-10-20 2021-01-06 Graphcore Ltd Sending data off-chip

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120089812A1 (en) 2009-06-12 2012-04-12 Graeme Roy Smith Shared resource multi-thread processor array
US20120179896A1 (en) 2011-01-10 2012-07-12 International Business Machines Corporation Method and apparatus for a hierarchical synchronization barrier in a multi-node system

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
M.Krstic et al. ‘Globally Asynchronous, Locally Synchronous Circuits: Overview and Outlook’, IEEE Design & Test of Computers, IEEE Service Center, NY US, vol.24, no.5 2007.09.01.

Also Published As

Publication number Publication date
TWI700641B (zh) 2020-08-01
GB2569844A (en) 2019-07-03
GB2569844B (en) 2021-01-06
US20190354494A1 (en) 2019-11-21
US20190155768A1 (en) 2019-05-23
KR20190044571A (ko) 2019-04-30
US10817444B2 (en) 2020-10-27
US10558595B2 (en) 2020-02-11
GB201816930D0 (en) 2018-11-28
TW201928663A (zh) 2019-07-16

Similar Documents

Publication Publication Date Title
KR102167058B1 (ko) 칩 밖으로 데이터 송신하기
US10949266B2 (en) Synchronization and exchange of data between processors
KR102161683B1 (ko) 호스트 프로세서와의 동기화
KR102190879B1 (ko) 프로세서 타일들 간의 동기화
KR102263078B1 (ko) 복수-타일 복수-칩 프로세싱 구성에서의 동기화
US10705999B1 (en) Exchange of data between processor modules

Legal Events

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