KR20190044526A - 컴파일러 방법 - Google Patents

컴파일러 방법 Download PDF

Info

Publication number
KR20190044526A
KR20190044526A KR1020180124595A KR20180124595A KR20190044526A KR 20190044526 A KR20190044526 A KR 20190044526A KR 1020180124595 A KR1020180124595 A KR 1020180124595A KR 20180124595 A KR20180124595 A KR 20180124595A KR 20190044526 A KR20190044526 A KR 20190044526A
Authority
KR
South Korea
Prior art keywords
processing unit
local program
tile
data
program
Prior art date
Application number
KR1020180124595A
Other languages
English (en)
Other versions
KR102228501B1 (ko
Inventor
시몬 크리스티안 노우레스
다니엘 존 펠험 윌킨슨
리차드 루크 사우스웰 오스본
알란 그레이엄 알렉산더
스테판 펠릭스
조나단 맹널
데이비드 레이시
Original Assignee
그래프코어 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 그래프코어 리미티드 filed Critical 그래프코어 리미티드
Publication of KR20190044526A publication Critical patent/KR20190044526A/ko
Application granted granted Critical
Publication of KR102228501B1 publication Critical patent/KR102228501B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/04Generating or distributing clock signals or signals derived directly therefrom
    • G06F1/12Synchronisation of different clock signals provided by a plurality of clock generators
    • 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/17318Parallel communications techniques, e.g. gather, scatter, reduce, roadcast, multicast, all to all
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/40Bus structure
    • G06F13/4004Coupling between buses
    • G06F13/4022Coupling between buses using switching circuits, e.g. switching matrix, connection or expansion network
    • 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/17312Routing techniques specific to parallel machines, e.g. wormhole, store and forward, shortest path problem congestion
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/458Synchronisation, e.g. post-wait, barriers, locks
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional 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/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • 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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N20/00Machine learning

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Multimedia (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Devices For Executing Special Programs (AREA)
  • Multi Processors (AREA)

Abstract

본 발명은 컴퓨터화된 기능을 전달하기 위해 다수의 프로그램들을 생성하는 컴퓨터로 구현되는 방법에 관한 것으로, 각 프로그램은 로컬 프로그램을 유지하기위한 명령 저장부를 각각 가지는 복수의 프로세싱 유닛들, 데이터를 유지하기 위한 로컬 프로그램 및 데이터 저장을 실행하기 위한 실행 유닛, 각 프로세싱 유닛의 출력 인터페이스에 접속되고, 각 프로세싱 유닛에 의해 제어 가능한 스위칭 회로에 의해 각 프로세싱 유닛의 입력 인터페이스에 접속 가능한 스위칭 패브릭 및 동기화 신호를 생성하도록 동작 가능한 동기화 모듈을 포함하는 컴퓨터의 프로세싱 유닛에서 실행되고, 상기 방법은, 실행 가능한 명령들의 시퀀스를 포함하는 각각의 프로세싱 유닛에 대한 로컬 프로그램을 생성하는 단계; 각각의 프로세싱 유닛에 대해, 각각의 로컬 프로그램의 명령들의 상대적 실행 시간을 결정하는 단계를 포함하며, 이를 통해, 하나의 프로세싱 유닛에 대해 할당된 로컬 프로그램은, 미리 결정된 송신 시간에 적어도 하나의 데이터 패킷을 송신하라는 송신 명령을 동기 신호에 비례하여, 그리고 수신 프로세싱 유닛을 위해 예정되지만 목적지 식별자를 갖지 않는 상기 동기 신호에 비례하여, 미리결정된 지연으로 시행되도록 스케줄링되며, 수신 프로세싱 유닛에 할당된 로컬 프로그램은 미리 결정된 스위치 시간에 스위치 제어 명령을 실행하여 프로세싱 유닛 와이어를 스위칭 패브릭에 연결하여 수신 시간에 데이터 패킷을 수신하도록 스위칭 회로를 제어하기 위해 스케줄링된다.

Description

컴파일러 방법{COMPILER METHOD}
본 발명은 다수의 타일을 포함하는 프로세서에서 다수의 상이한 타일들의 작업 부하를 동기화하는 것에 관한 것으로, 각 타일은 로컬 메모리를 갖는 프로세싱 유닛을 포함한다. 특히, 본 발명은 대량 동기 병렬(BSP) 컴퓨팅 프로토콜에 관한 것으로, 그룹 내의 타일들 중 임의의 타일이 교환 단계로 진행하기 전에 타일들의 그룹 내의 각 타일이 계산 단계를 완료해야한다.
컴퓨팅의 병렬 처리는 상이한 형태들을 갖는다. 프로그램 조각들은 동시에 실행되도록 구성될 수 있거나(프로그램 조각들은 시간이 겹치지만 실행 리소스들을 공유할 수 있음) 또는 상이한 리소스들에서 동시에 실행될 수 있다.
컴퓨팅의 병렬 처리는 여러 가지 방법, 예를 들어, 다수의 상호 접속된 프로세서 타일들의 어레이, 또는 멀티-스레드 프로세싱 유닛, 또는 실제로는 각각의 타일이 멀티-스레드 프로세싱 유닛을 포함하는 멀티-타일 어레이에 의해 구현될 수 있다.
동일한 칩(또는 동일한 집적 회로 패키지 내의 칩들) 상의 다수의 타일들의 어레이를 포함하는 프로세서에 의해 병렬 처리가 달성될 때, 각각의 타일은 (프로그램 메모리 및 데이터 메모리를 포함하는) 로컬 메모리를 갖는 그 자신의 분리된 개별 프로세싱 유닛을 포함한다. 따라서, 프로그램 코드의 분리된 부분들은 상이한 타일상에서 동시에 실행될 수 있다. 타일들은 서로 다른 타일에서 실행되는 코드가 타일들 간에 통신할 수 있게 해주는 온칩 상호접속을 통해 서로 연결된다. 어떤 경우들에서, 각각의 타일 상의 프로세싱 유닛은 배럴-스레드 프로세싱 유닛 (또는 다른 멀티-스레드 프로세싱 유닛)의 형태를 취할 수 있다. 각 타일은 일련의 컨텍스트들과 실행 파이프 라인을 가질 수 있으므로 각 타일은 여러 개의 인터리브된 스레드들을 동시에 실행할 수 있다.
일반적으로, 어레이의 상이한 타일들에서 실행되는 프로그램 부분들 간에는 종속성이 있을 수 있다. 따라서, 하나의 타일에 있는 코드 조각이 다른 타일에 있는 다른 코드의 조각에 의해 사용 가능하게 되는 데이터에 앞서 실행되는 것을 방지하는 기술이 요구된다. 이를 달성하기 위한 가능한 여러 가지 기법들이 있지만, 여기에서 관심있는 방식은 "대량 동기 병렬(bulk synchronous parallel)"(BSP)로서 알려진다. BSP에 따르면, 각 타일은 계산 단계와 교환 단계를 교대로 수행한다. 계산 단계에서 각 타일은, 타일 상에서 하나 이상의 계산 작업들을 로컬로 수행하지만 계산 결과를 다른 타일들과 통신하지 않는다. 교환 단계에서, 각 타일은 선행 계산 단계로부터의 계산들의 하나 이상의 결과를 그룹 내의 다른 타일 중 하나 이상의 다른 타일로 교환하고 그리고/또는 다른 타일 중 하나 이상의 다른 타일로부터 교환하지만, 타일이 교환 단계를 마칠 때까지 아직 새로운 계산 단계를 시작하지 않는다. 또한, BSP 원리의 이러한 형태에 따르면, 배리어 동기화는 계산 단계에서 교환 단계로 전환하는 시점 또는 교환 단계에서 계산 단계로 전환하는 시점, 또는 둘 다에 배치된다. 즉, (a) 모든 타일들은 해당 그룹의 구성원이 다음 교환 단계로 진행하기 전에 각자의 계산 단계들을 완료해야 하도록 요구되거나, 또는 (b) 그룹의 모든 타일들은 해당 그룹의 어떤 타일이 다음 계산 단계로 진행하기 전에 각자의 교환 단계들을 완료해야 하도록 요구되거나, 또는 (c) 둘 모두를 수행하도록 요구된다. 여기에서, "계산 단계와 교환 단계 사이(between a compute phase and an exchange phase)"라는 문구는 이러한 옵션들 모두를 포함한다.
다중 스레드 및/또는 다중 타일 병렬 프로세싱의 사용 예가 기계 지능에서 발견된다. 기계 지능 분야의 통상의 기술자에게 익숙한 바와 같이, 기계 지능 알고리즘은 "지식 모델들을 생성할 수 있고(are capable of producing knowledge models)" 그리고 지식 모델을 사용하여 학습 및 추론 알고리즘을 실행한다. 지식 모델 및 알고리즘들을 통합한 기계 지능 모델은 여러 개의 상호 연결된 노드들의 그래프로 표현될 수 있다. 각 노드는 입력들의 기능을 나타낸다. 일부 노드들은, 그래프에 대한 입력들을 수신하고 그리고 일부 노드들은 하나 이상의 다른 노드들로부터 입력들을 수신한다. 일부 노드들의 출력 활성화는, 다른 노드들의 입력들을 형성하고 그리고 일부 노드들의 출력은 그래프의 출력을 제공하고, 그리고 그래프의 입력들은 일부 노드들에 입력들을 제공한다. 또한, 각 노드에서의 기능은 하나 이상의 각각의 파라미터들, 예를 들어, 중량에 의해 파라미터화된다. 학습 단계에서 목표는, 일련의 경험적 입력 데이터를 기반으로, 그래프가 전체 가능한 입력들의 범위에 대해 원하는 출력을 생성할 수 있도록 다양한 파라미터들에 대한 값을 찾는 것이다. 확률적인 그래디언트 디센트에 기초한 역 전파 알고리즘과 같은 이를 행하는 다양한 알고리즘이 당업계에 알려져있다. 여러 번의 반복을 통해 파라미터들이 점차적으로 에러들을 줄이기 위해 조정되므로, 따라서, 그래프가 솔루션쪽으로 수렴된다. 후속 단계에서, 학습된 모델을 사용하여 지정된 입력들의 집합이 주어지면 출력들의 예측을 수행하거나 지정된 출력 집합들이 주어지면 입력들(원인들)에 대한 추론을 수행할 수 있거나 또는 다른 내성적인 형태들의 분석이 수행될 수 있다.
각 노드의 구현은 데이터의 처리를 포함할 것이고, 그래프의 상호 연결들은 노드 들간에 교환될 데이터에 대응한다. 일반적으로, 각 노드의 처리 중 적어도 일부는 그래프의 노드 중 일부 또는 전부와 독립적으로 수행될 수 있으므로 큰 그래프들은 방대한 병렬 처리를 위한 기회들을 노출한다.
위에서 언급했듯이 지식 모델을 나타내는 기계 지능 모델과 어떻게 지식 모델이 학습 및 추론에 사용되는지에 대한 알고리즘 정보는 일반적으로 여러 개의 상호 연결된 노드 그래프로 표현될 수 있고, 각 노드는 데이터에 대한 처리 요구 사항을 갖는다. 그래프의 상호 연결은 노드들 간에 교환될 데이터를 나타내며, 결과적으로 노드들에서 실행되는 프로그램 조각들간의 의존성을 야기한다. 일반적으로 노드에서 처리는 다른 노드와 독립적으로 수행될 수 있으므로 큰 그래프는 거대한 병렬 처리를 나타낸다. 고도로 분산된 병렬 기계는 그러한 기계 지능 모델들을 계산하기에 적합한 기계 구조이다. 이러한 피처들은 일정 시간을 결정적으로 보장하도록 기계를 설계할 수 있다.
본 발명에서 이용되는 지식 모델의 팩터는 일반적으로 그래프의 정적 특성이다. 즉, 그래프를 구성하는 노드 및 그래프의 구조는 일반적으로 기계 지능 알고리즘들의 실행 중에 변경되지 않는다. 본 발명자들은 기계 지능 모델에 대한 계산을 최적화하기 위해 일정 시간을 결정적으로 보장을 하는 기계를 제조하였다. 이를 통해 컴파일러는 시간 결정적 방식으로 노드들 전체에서 작업을 분할하고 스케줄링할 수 있다. 지식 모델들에 기초하여 작업 부하들을 처리하도록 최적화된 컴퓨터를 설계하는 것에서, 이러한 시간 결정론이 중요한 최적화를 위해 다음의 서술된 실시예들에서 이용된다.
본 발명의 일 양상에 따라, 컴퓨터화된 기능을 전달하기 위해 다수의 프로그램들을 생성하는 컴퓨터로 구현되는 방법이 제공되고, 각 프로그램은, 로컬 프로그램을 유지하기 위한 명령 저장부를 각각 가지는 복수의 프로세싱 유닛들, 데이터를 유지하기 위한 로컬 프로그램 및 데이터 저장을 실행하기 위한 실행 유닛, 각 프로세싱 유닛의 출력 인터페이스에 접속되고, 각 프로세싱 유닛에 의해 제어 가능한 스위칭 회로에 의해 각 프로세싱 유닛의 입력 인터페이스에 접속 가능한 스위칭 패브릭, 및 동기화 신호를 생성하도록 동작 가능한 동기화 모듈을 포함하는 컴퓨터의 프로세싱 유닛에서 실행되고, 상기 방법은, 실행 가능한 명령들의 시퀀스를 포함하는 각각의 프로세싱 유닛에 대한 로컬 프로그램을 생성하는 단계; 및 각각의 프로세싱 유닛에 대해, 각각의 로컬 프로그램의 명령들의 상대적 실행 시간을 결정하는 단계를 포함하며, 이를 통해, 하나의 프로세싱 유닛에 대해 할당된 로컬 프로그램은, 미리 결정된 송신 시간에 적어도 하나의 데이터 패킷을 송신하라는 송신 명령을 동기화 신호에 비례하여, 그리고 수신 프로세싱 유닛을 위해 예정되지만 목적지 식별자를 갖지 않는 상기 동기화 신호에 비례하여, 미리결정된 지연으로 시행되도록 스케줄링되며, 수신 프로세싱 유닛에 할당된 로컬 프로그램은 미리 결정된 스위치 시간에 스위치 제어 명령을 실행하여 프로세싱 유닛 와이어를 스위칭 패브릭에 연결하여 수신 시간에 데이터 패킷을 수신하도록 스위칭 회로를 제어하기 위해 스케줄링된다.
이러한 방식으로, 상기 방법을 구현하는 컴파일러는 각각의 로컬 프로그램들을 시간 결정적 방식으로 동작하도록 구조화된 컴퓨터의 각 프로세싱 유닛들(타일들)에 자동으로 할당할 수 있다. 그러한 컴퓨터의 예가 여기에서 서술되고 IPU[지능 프로세싱 유닛]으로 지칭되며, 출원 번호 [PWF Ref : 408525 및 408527]가 추가로 참조되며, 그 내용은 본 명세서에 참고로 포함된다.
이 방법은 방법 단계들을 수행하도록 동작 가능한 프로세서를 갖는 컴파일러에 의한 구현에 적합하며, 그리고 상기 컴파일러는, 컴퓨터화된 기능을 나타내는 고정된 그래프 구조 및 미리결정된 송신 시간 및 미리 결정된 스위치 시간이 각 프로세싱 유닛에 대해 결정될 수 있게 하는 지연을 유지하는 테이블을 수신하도록 연결된다.
전송 시간 및 스위치 시간은 동기화 신호에 관련되고 절대 시간을 나타내지 않는다는 것을 알 수 있다. 동기화 신호는 각 계산 단계 다음에 교환 단계가 오는 BSP 프로토콜에서 교환 단계의 개시를 나타낼 수 있다.
서술된 실시예에서, 모든 시간들은 프로세서 클록에 의해 제어되는 IPU 프로세서 클록 사이클에서 측정되므로, 지연은 동기화 신호에 이어지는 미리 결정된 수의 IPU 클록 사이클들로서 측정된 간격으로 결정될 수 있다. 시간 결정적 IPU 프로세서 칩의 동작에 있어서, 동기 이벤트는 칩상의 특정 물리적 위치에서 발생하고, 확인 응답은 사이클 내의 고정된 지연을 갖는 모든 프로세싱 유닛들(타일들)에 송신된다. 따라서, 각 타일은 상이한 시간에 확인 응답 신호(자신의 동기화 신호)를 수신하지만 그 시간 이전에 얼마나 많은 사이클에서 동기화 이벤트가 발생했는지 알 수 있어, 다른 타일들이 후속 송신을 실행할 시간에 대한 기준으로서 동기화 신호 수신 시간을 효과적으로 사용할 수 있다. 하지만, 자체 동기화 요청을 실행하는 타일과 동기화 이벤트의 총 지연은 컴파일러와 타일 프로그램에 알려지지 않는데, 이는 데이터 의존적이기 때문이다. 실제로는, 프로세서 클록이 특별히 규칙적일 필요는 없으며 전력 소모를 완화하기 위해 속도는 동적으로 변경될 수 있어, 프로세서 클록이 절대 시간을 유지하지 못할 수 있다. 컴퓨터의 모든 부분들이 동일한 동기식 프로세서 클록으로 제어되므로 동일한 클록 사이클들의 수를 계산하는 것만이 중요하다. 절대 시간이 아닌 상대적 지연들/시간들이 중요하다.
로컬 프로그램에서, 송신 명령은 교환 단계의 일부를 형성할 수 있다. 스위치 제어 명령은 또한 교환 단계의 일부를 형성할 수도 있다. 각 로컬 프로그램에는 계산 단계를 구현하기 위해 데이터에 대한 계산을 수행하기 위한 지침이 포함될 수 있다.
로컬 프로그램들을 실행하려는 컴퓨터에서, 프로세싱 유닛들은 서로에 대해 고정된 위치 관계를 가질 수 있고, 상기 결정하는 단계는 상기 컴퓨터 내의 각 쌍의 프로세싱 유닛들 간의 상기 위치 관계에 기초하여 고정된 지연을 결정하는 단계를 포함한다. 즉, 각 쌍은 송신 명령을 실행하도록 스케줄링된 하나의 프로세싱 유닛 및 스위치 제어 명령을 포함하도록 스케줄링된 다른 프로세싱 유닛을 포함할 것이다. 이것은 동시에 서로 송신 및 수신할 수 있다.
프로세싱 유닛들 간의 고정된 위치 관계는 행 및 열의 어레이를 포함할 수 있으며, 각각의 프로세싱 유닛은 어레이 내의 그 위치를 식별하는 식별자를 갖는다.
단일 프로세싱 유닛 상의 각각의 로컬 프로그램은 송신 명령 및 스위치 제어 명령을 포함할 수 있다는 것을 이해할 것이다. 어떤 경우에는, 프로세싱 유닛에 대한 스위치 제어 명령은 이전의 시간에 동일한 프로세싱 유닛 상의 송신 명령에 의해 송신된 데이터 패킷을 수신하도록 설정될 수 있다.
다른 양상은, 컴퓨터화된 기능을 전달하기 위해 다수의 프로그램들을 생성하는 방법을 구현하도록 프로그래밍된 프로세서를 갖는 컴파일러를 제공하고, 각 프로그램은, 로컬 프로그램을 유지하기 위한 명령 저장부를 각각 가지는 복수의 프로세싱 유닛들, 데이터를 유지하기 위한 로컬 프로그램 및 데이터 저장을 실행하기 위한 실행 유닛, 각 프로세싱 유닛의 출력 인터페이스에 접속되고, 각 프로세싱 유닛에 의해 제어 가능한 스위칭 회로에 의해 각 프로세싱 유닛의 입력 인터페이스에 접속 가능한 스위칭 패브릭, 및 동기화 신호를 생성하도록 동작 가능한 동기화 모듈을 포함하는 컴퓨터의 프로세싱 유닛에서 실행되고, 상기 방법은, 실행 가능한 명령들의 시퀀스를 포함하는 각각의 프로세싱 유닛에 대한 로컬 프로그램을 생성하는 단계; 및 각각의 프로세싱 유닛에 대해, 각각의 로컬 프로그램의 명령들의 상대적 실행 시간을 결정하는 단계를 포함하며, 이를 통해, 하나의 프로세싱 유닛에 대해 할당된 로컬 프로그램은, 미리 결정된 송신 시간에 적어도 하나의 데이터 패킷을 송신하라는 송신 명령을 동기화 신호에 비례하여, 그리고 수신 프로세싱 유닛을 위해 예정되지만 목적지 식별자를 갖지 않는 상기 동기화 신호에 비례하여, 미리결정된 지연으로 시행되도록 스케줄링되며, 수신 프로세싱 유닛에 할당된 로컬 프로그램은 미리 결정된 스위치 시간에 스위치 제어 명령을 실행하여 프로세싱 유닛 와이어를 스위칭 패브릭에 연결하여 수신 시간에 데이터 패킷을 수신하도록 스위칭 회로를 제어하기 위해 스케줄링되며, 상기 컴파일러는, 상기 컴퓨터화된 기능을 나타내는 고정된 그래프 구조 및 미리 결정된 송신 시간 및 미리 결정된 스위치 시간이 각 프로세싱 유닛에 대해 결정될 수 있게 하는 지연들을 유지하는 테이블을 수신하도록 연결된다.
후술하는 실시예에서, 스위칭 회로는 자신의 프로세싱 유닛에 연결된 와이어들의 출력 세트 및 스위칭 패브릭에 접속가능한 다수의 입력 와이어들의 세트들을 갖는 멀티플렉서를 포함한다. 멀티플렉서는 그들의 프로세싱 유닛들에 대하여 미리 결정된 물리적 위치들에서 컴퓨터 상에 위치된다. 상기 결정 단계는, 멀티플렉서에 도달하기 위해 스위치 제어 명령에 대한 고정된 지연 및 상기 미리결정된 물리적 위치 및 결과적인 전송 시간에 기초하여 그 프로세싱 유닛의 입력 인터페이스에 도달하기 위해 상기 멀티플렉서로부터의 출력 데이터 패킷을 결정하는 단계를 포함한다. 여기에서 중요한 것은 데이터 패킷이 수신 프로세싱 유닛의 로컬 메모리로 로딩될 수 있는 정확한 시간을 송신 명령과 관련하여 결정하는 것이다.
각각의 로컬 프로그램은 프로세싱 유닛에서의 계산 단계가 완료되었음을 동기화 모듈에 알려주는 동기화 명령을 포함할 수 있다. 결정 단계는 칩상의 동기화 이벤트 사이의 고정된 지연을 각 처리 유닛에 대해 결정하는 단계 및 상기 프로세싱 유닛에서 동기화 이벤트가 발생했다는 확인 응답을 다시 수신하는 단계를 포함할 수 있다. 시간 결정적 시스템에서, 컴파일러는 동기화에 참여하는 다른 타일들에 데이터 종속적이기 때문에 수퍼바이저가 다음 명령을 실행하면 지연을 알 수 없다. 컴파일러가 알아야 할 점은 각 타일의 다음 수퍼바이저 명령을 실행하기 위해 온 칩 동기화 이벤트(모든 시간이 동기화를 실행한 후 어느 시점에서 발생함)로부터의 지연들의 세트이다. 동기화(sync_ack) 신호는 수퍼바이저가 동기화 후 명령을 실행하기 전에 일정한 짧은 시간 내에 타일에 도달할 것이다.
상기 결정 단계는 상기 미리 결정된 송신 시간 및 미리 결정된 스위치 시간이 결정되도록 하는 지연들에 관한 정보를 유지하는 룩업 테이블을 액세스하는 단계를 포함할 수 있다. 대안으로, 지연들은 컴퓨터의 아키텍처에 대한 정보를 기반으로 컴파일러에 의해 계산할 수 있다.
이 방법은 컴퓨터화된 기능이 기계 학습 기능이고 고정된 그래프 구조가 그러한 기능을 나타내는 경우에 특히 적합하다. 고정 그래프 구조는 복수의 노드를 포함할 수 있으며, 각 노드는 로컬 프로그램 내의 코드렛(codelet)에 의해 표현된다. 이해되는 바와 같이, 코드렛은 일련의 명령이다. 각각의 로컬 프로그램은 복수의 코드렛들을 포함할 수 있으며, 여기서 코드렛들은 동일한 프로세싱 유닛 상에서 실행되더라도 그래프의 동일한 노드를 나타낼 필요가 없다.
다른 양상은, 비 전송 매체에 기록되고 그리고 컴파일러의 프로세서에 의해 실행될 때 컴퓨터화된 기능을 전달하기 위해 다수의 프로그램을 생성하는 방법을 구현하는 컴퓨터 판독가능한 명령을 포함하는 컴퓨터 프로그램을 제공하고, 각 프로그램은, 로컬 프로그램을 유지하기 위한 명령 저장부를 각각 가지는 복수의 프로세싱 유닛들, 데이터를 유지하기 위한 로컬 프로그램 및 데이터 저장을 실행하기 위한 실행 유닛, 각 프로세싱 유닛의 출력 인터페이스에 접속되고, 각 프로세싱 유닛에 의해 제어 가능한 스위칭 회로에 의해 각 프로세싱 유닛의 입력 인터페이스에 접속 가능한 스위칭 패브릭, 및 동기화 신호를 생성하도록 동작 가능한 동기화 모듈을 포함하는 컴퓨터의 프로세싱 유닛에서 실행되고, 상기 방법은, 실행 가능한 명령들의 시퀀스를 포함하는 각각의 프로세싱 유닛에 대한 로컬 프로그램을 생성하는 단계; 및 각각의 프로세싱 유닛에 대해, 각각의 로컬 프로그램의 명령들의 상대적 실행 시간을 결정하는 단계를 포함하며, 이를 통해, 하나의 프로세싱 유닛에 대해 할당된 로컬 프로그램은, 미리 결정된 송신 시간에 적어도 하나의 데이터 패킷을 송신하라는 송신 명령을 동기화 신호에 비례하여, 그리고 수신 프로세싱 유닛을 위해 예정되지만 목적지 식별자를 갖지 않는 상기 동기화 신호에 비례하여, 미리결정된 지연으로 시행되도록 스케줄링되며, 수신 프로세싱 유닛에 할당된 로컬 프로그램은 미리 결정된 스위치 시간에 스위치 제어 명령을 실행하여 프로세싱 유닛 와이어를 스위칭 패브릭에 연결하여 수신 시간에 데이터 패킷을 수신하도록 스위칭 회로를 제어하기 위해 스케줄링된다.
본 발명의 일 양상에 따라, 로컬 프로그램을 유지하기 위한 명령 저장부를 각각 가지는 복수의 프로세싱 유닛들, 데이터를 유지하기 위한 로컬 프로그램 및 데이터 저장을 실행하기 위한 실행 유닛, 입력 와이어들의 세트를 갖는 입력 인터페이스 및 출력 와이어들의 세트를 갖는 출력 인터페이스; 상기 출력 와이어들의 각각의 세트에 의해 상기 프로세싱 유닛들 각각에 연결되고 각 프로세싱 유닛에 의해 제어 가능한 스위칭 회로를 통해 상기 각각의 입력 와이어들에 의해 상기 프로세싱 유닛들 각각에 연결 가능한 스위칭 패브릭; 컴퓨터가 계산 단계와 교환 단계 사이를 스위치하도록 제어하기 위한 동기화 신호를 생성하도록 동작 가능한 동기화 모듈을 포함하는 컴퓨터가 제공되고, 상기 프로세싱 유닛들은 공통 클록에 따라 상기 로컬 프로그램들을 실행하도록 구성되고, 상기 로컬 프로그램들은 교환 단계에서 적어도 하나의 프로세싱 유닛이 전송 시간에 접속 와이어들의 출력 세트 상에 데이터 패킷을 전송하기 위해 그 로컬 프로그램으로부터 송신 명령을 실행하고, 상기 데이터 패킷은 적어도 하나의 수신 프로세싱 유닛으로 예정되지만 목적지 식별자를 갖지 않으며, 미리결정된 교환 시간에서, 수신 프로세싱 유닛은 자신의 로컬 프로그램으로부터 스위치 제어 명령을 실행하여 그 입력 와이어들의 세트를 스위치 패브릭에 연결하여 수신 시간, 송신 시간 및 스위치 시간에 데이터 패킷을 수신하고 그리고 수신 시간은 동기화 신호에 대한 공통 클록에 의해 지배된다.
본 발명의 다른 양상은, 로컬 프로그램을 유지하기 위한 명령 저장부를 각각 가지는 복수의 프로세싱 유닛들, 데이터를 유지하기 위한 로컬 프로그램 및 데이터 저장을 실행하기 위한 실행 유닛, 입력 와이어들의 세트를 갖는 입력 인터페이스 및 출력 와이어들의 세트를 갖는 출력 인터페이스; 상기 출력 와이어들의 각각의 세트에 의해 상기 프로세싱 유닛들 각각에 연결되고 각 프로세싱 유닛에 의해 제어 가능한 스위칭 회로를 통해 상기 각각의 입력 와이어들에 의해 상기 프로세싱 유닛들 각각에 연결 가능한 스위칭 패브릭; 컴퓨터가 계산 단계와 교환 단계 사이를 스위치하도록 제어하기 위한 동기화 신호를 생성하도록 동작 가능한 동기화 모듈을 포함하는 컴퓨터에서 함수를 계산하는 방법을 제공하고, 상기 방법은, 프로세싱 유닛들이 공통 클록에 따라 상기 로컬 프로그램들을 실행하는 단계를 포함하고, 상기교환 단계의 미리결정된 시간에서, 적어도 하나의 프로세싱 유닛이 전송 시간에 접속 와이어들의 출력 세트 상에 데이터 패킷을 전송하기 위해 그 로컬 프로그램으로부터 송신 명령을 실행하고, 상기 데이터 패킷은 적어도 하나의 수신 프로세싱 유닛으로 예정되지만 목적지 식별자를 갖지 않으며, 미리결정된 교환 시간에서, 수신 프로세싱 유닛은 자신의 로컬 프로그램으로부터 스위치 제어 명령을 실행하여 그 입력 와이어들의 세트를 스위치 패브릭에 연결하여 수신 시간, 송신 시간 및 스위치 시간에 데이터 패킷을 수신하고 그리고 수신 시간은 동기화 신호에 대한 공통 클록에 의해 지배된다.
원칙적으로 동기화 신호는 스위치를 계산 단계에서 교환 단계로 또는 교환 단계에서 계산 단계로 스위칭을 제어하기 위해 생성될 수 있다. 그러나, 본 명세서에서 정의된 시간 결정적 아키텍처에 대해, 동기화 신호가 교환 단계를 시작하도록 생성되는 것이 바람직하다. 일 실시예에서, 각 프로세싱 유닛은 자체 계산 단계가 완료되었음을 동기화 모듈에 지시하고, 모든 프로세싱 유닛들이 자신의 계산 단계가 완료되었음을 나타낼 때 동기화 신호를 생성하여 교환 단계를 시작한다.
송신 시간은 시간 결정적 교환이 적절히 완료될 수 있도록 미리 결정되어야 한다. 송신 명령이 실행되는 시간 이후에 알려진 클럭 사이클 수로 결정될 수 있으며, 송신 명령이 실행되는 시간은 미리 결정된다고 가정한다. 대안적으로, 송신 시간은 송신 명령의 실행으로부터 알려진 시간으로부터 미리결정된 다른 방식으로 결정된 알려진 지연일 수 있다. 중요한 것은 전송 시간이, 의도된 수신 프로세싱 유닛의 수신 시간에 상대적이라는 것이다.
송신 명령의 피처들은 송신 명령이 데이터 패킷이 송신될 데이터 저장 장치 내의 위치를 식별하는 송신 어드레스를 명시적으로 정의하는 것을 포함할 수 있다. 대안으로, 송신 명령에 명시적으로 정의된 송신 어드레스가 없고, 데이터 패킷들은 송신 명령에 의해 암시적으로 정의된 레지스터에 정의된 송신 어드레스로부터 송신된다. 로컬 프로그램은 암시적 레지스터의 송신 어드레스를 업데이트하기 위한 송신 어드레스 업데이트 명령을 포함할 수 있다.
여기에서 서술된 실시예에서, 스위칭 회로는 자신의 프로세싱 유닛에 연결된 출력 와이어들의 출구 세트 및 스위칭 패브릭에 연결된 다수의 입력 와이어들의 세트를 갖는 멀티플렉서를 포함하고, 상기 다수의 입력 와이어들의 세트 중 하나는 상기 프로세싱 유닛에 의해 제어되는 것으로 선택된다. 각 세트는 32비트를 포함 할 수 있다. 64비트 데이터가 사용될 때, 한 쌍의 멀티플렉서들은 프로세싱 유닛에 연결되어 함께 제어될 수 있다.
서술된 실시예에서, 수신 프로세싱 유닛은 데이터 패킷을 수신하여 메모리 포인터에 의해 식별된 메모리 위치에서 데이터 저장 장치로 로딩하도록 구성된다. 메모리 포인터는 각 데이터 패킷이 데이터 저장 장치에 로딩된 후 자동으로 증가할 수 있다. 대안으로, 수신 프로세싱 유닛의 로컬 프로그램은 메모리 포인터를 업데이트하는 메모리 포인터 업데이트 명령을 포함할 수 있다.
송신 명령은 송신될 데이터 패킷의 수를 식별하도록 구성될 수 있으며, 각각의 데이터 패킷은 프로세싱 유닛으로부터 순차적으로 송신되기 때문에 각각의 데이터 패킷은 상이한 송신 시간과 관련된다.
멀티플렉서의 입력 와이어 세트 중 하나는 널 입력에 연결되도록 제어될 수 있다. 이것은 프로세싱 유닛에 도착한 데이터를 무시하는 데 사용될 수 있다.
특정 데이터 패킷을 수신하도록 의도된 수신 프로세싱 유닛은 더 이른 시간에 송신 명령을 실행한 동일한 프로세싱 유닛일 수 있고, 이를 통해 동일한 프로세싱 유닛은 데이터 패킷을 송신하고 그 데이터 패킷을 나중에 수신하도록 구성된다. '자신에게 송신하는' 프로세싱 유닛의 목적은 다른 프로세싱 유닛들로부터 수신된 데이터로 인터리빙된 인입 데이터의 메모리에 배열을 고수하는 것일 수 있다.
다수의 프로세싱 유닛들은 각각의 데이터 패킷들을 송신하기 위해 각각의 송신 명령을 실행하도록 구성될 수 있으며, 여기서 데이터 패킷들 중 적어도 일부는 어떠한 수신 프로세싱 유닛들도 예정되지 않는다.
계산되는 함수는 복수의 상호 접속된 노드를 포함하는 정적 그래프의 형태로 제공될 수 있으며, 각 노드는 로컬 프로그램의 코드렛에 의해 구현된다. 코드렛은 그래프의 정점(노드)을 정의해, 실행의 원자적 스레드라고 생각할 수가 있고, 상세한 것에 대해서는 후술된다. 계산 단계에서 각 코드릿은 결과를 생성하기 위해 데이터를 처리할 수 있으며, 결과들 중 일부는 후속 계산 단계에 필요하지 않으며 임의의 수신 프로세싱 유닛에서 수신하지 않는다. 그것들은 효과적으로 폐기되지만, 긍정적인 폐기 행동을 취할 필요는 없다. 교환 단계에서, 데이터 패킷은 스위칭 패브릭 및 스위칭 회로를 통해 프로세싱 유닛들 간에 전송된다. 교환 단계에서 일부 명령들은 교환 단계를 구현하기 위해 로컬 프로그램에서 실행된다. 이 명령들은 송신 명령을 포함한다. 계산 단계는 계산을 담당하는 반면, 교환 단계에서 산술적 또는 논리적 함수들을 포함하는 것이 가능할 수도 있지만, 이러한 함수들은 로컬 프로그램의 타이밍에 대한 데이터 의존성을 포함하지 않으므로 동기화를 유지할 수 있다.
여기에 서술된 시간 결정적 아키텍처는 그래프가 기계 지능 기능을 나타내는 상황에서 특히 유용하다.
스위칭 패브릭은, 교환 단계에서 데이터 패킷이 일시적인 저장 장치들을 통해 파이프 라인 방식으로 데이터 패킷을 통해 전송되며, 각 저장 장치는 공통 클럭의 한 사이클 동안 데이터 패킷을 보유하도록 구성된다.
다른 양상에 따르면, 컴퓨터 프로그램을 유지하기 위한 명령 저장 장치, 컴퓨터 프로그램을 실행하기 위한 실행 유닛 및 데이터를 유지하기 위한 데이터 저장 장치를 갖는 프로세싱 유닛 상에서 실행하기 위한 일련의 명령들을 포함하는 컴퓨터 프로그램이 제공되며, 상기 컴퓨터 프로그램은 실행될 때 기능을 구현하는 하나 이상의 컴퓨터 실행 가능 명령을 포함하고, 상기 기능은:
수신 프로세싱 유닛으로 향하는 데이터 패킷을 상기 프로세싱 유닛에 접속된 한 세트의 접속 와이어들에 송신시키도록 하는 송신 기능 - 상기 데이터 패킷은 목적지 식별자를 가지지 않지만 미리 결정된 송신 시간에 송신되며 - 과; 그리고
상기 프로세싱 유닛이 미리 결정된 수신 시간에 데이터 패킷을 수신하기 위해 상기 프로세싱 유닛의 연결 와이어 세트를 스위칭 패브릭에 연결하기 위해 스위칭 회로를 제어하게 하는 스위치 제어 기능을 포함한다.
일부 실시예들에서, 하나 이상의 명령은, 스위치 제어 명령, 및 데이터 패킷이 전송될 명령 저장 장치 내의 위치를 정의하는 송신 어드레스를 정의하는 송신 명령을 포함한다.
일부 실시예들에서, 송신 명령은 송신될 다수의 데이터 패킷들을 정의하며, 각 패킷은 상이한 미리 결정된 송신 시간과 연관된다.
일부 실시예들에서, 송신 명령은 송신 어드레스를 명시적으로 정의하지 않지만, 송신 어드레스가 유지되는 레지스터를 암시적으로 정의한다.
일부 실시예들에서, 컴퓨터 프로그램은 암시적으로 정의된 레지스터에서 송신 어드레스를 업데이트하기 위한 추가 명령을 포함한다.
일부 실시예들에서, 적어도 하나의 추가 명령어는 수신 프로세싱 유닛에서 수신되는 데이터 패킷을 저장하기 위해 데이터 저장장치 내의 메모리 위치를 식별하는 메모리 포인터를 업데이트하는 메모리 포인터 업데이트 기능을 정의한다.
일부 실시예들에서, 하나 이상의 명령은 단일 실행 사이클에서 송신 기능 및 스위치 제어 기능을 병합하는 병합된 명령이고, 이를 통해, 프로세싱 유닛은 데이터 패킷을 송신하고 그 스위칭 회로를 제어하여 다른 프로세싱 유닛으로부터 상이한 데이터 패킷을 수신하도록 동작되는 구성을 갖는다.
일부 실시예들에서, 적어도 하나의 추가 명령은 송신 기능 및 메모리 포인터 업데이트 기능을 병합하는 병합된 명령이다.
일부 실시예들에서, 병합된 명령은 송신 함수를 메모리 포인터 업데이트 함수 또는 스위치 제어 함수와 병합하는지 여부를 지정하는 오퍼레이션 코드 부분을 갖는 공통 포맷으로 구성된다.
일부 실시예들에서, 하나 이상의 명령은 단일 실행 사이클에서 송신 기능, 스위치 제어 기능 및 메모리 포인터 업데이트 기능을 병합하는 단일 명령이다.
일부 실시예들에서, 각각의 하나 이상의 명령은 실행 유닛의 페치 스테이지의 비트 폭과 매칭하는 제1 비트 폭을 갖는다.
일부 실시예들에서, 각각의 하나 이상의 명령은 실행 유닛의 페치 스테이지의 비트 폭과 매칭하는 제1 비트 폭을 가지며, 그리고 상기 송신 기능, 스위치 제어 기능 및 메모리 포인터 업데이트 기능을 병합하는 상기 명령은 상기 실행 유닛의 페치 스테이지의 비트 폭의 2배인 제2 비트 폭을 갖는다.
일부 실시예들에서, 각각의 하나 이상의 명령은 실행 유닛의 페치 스테이지의 비트 폭과 매치하는 제1 비트 폭을 가지며, 그리고 제1 비트 폭의 명령은 상기 제1 비트 폭의 피연산자를 식별하고, 상기 피연산자는 상기 스위치 제어 기능 및 메모리 기록 업데이트 기능을 구현한다.
일부 실시예들에서, 컴퓨터 프로그램은 프로세싱 유닛의 계산 단계가 완료될 때 표시를 생성하는 동기화 명령을 포함한다.
일부 실시예들에서, 컴퓨터 프로그램은 비 일시적인 컴퓨터 판독 가능 매체상에 기록된다.
일부 실시예들에서, 컴퓨터 프로그램은 전송 가능한 신호의 형태이다.
다른 양상에 따르면, 명령 저장 장치, 컴퓨터 프로그램을 실행하기 위한 실행 유닛 및 데이터를 유지하기 위한 데이터 저장 장치를 포함하는 프로세싱 유닛이 제공되며, 상기 명령 저장 장치는, 상기 실행 유닛에 의해 실행될 때 기능을 구현하는 하나 이상의 컴퓨터 실행가능한 명령을 포함하는 컴퓨터 프로그램을 유지하고, 상기 기능은:
수신 프로세싱 유닛으로 향하는 데이터 패킷을 상기 프로세싱 유닛에 접속된 한 세트의 접속 와이어들에 송신시키도록 하는 송신 기능 - 상기 데이터 패킷은 목적지 식별자를 가지지 않지만 미리 결정된 송신 시간에 송신되며 - 과; 그리고
상기 프로세싱 유닛이 미리 결정된 수신 시간에 데이터 패킷을 수신하기 위해 상기 프로세싱 유닛의 연결 와이어 세트를 스위칭 패브릭에 연결하기 위해 스위칭 회로를 제어하게 하는 스위치 제어 기능을 포함한다.
다른 양상에 따르면, 통합 패키지 내에 하나 이상의 다이를 포함하는 컴퓨터가 제공되며, 상기 컴퓨터는 복수의 프로세싱 유닛들을 포함하고, 각 프로세싱 유닛은 컴퓨터 프로그램을 유지하는 명령 저장 장치와, 상기 컴퓨터 프로그램을 실행하는 실행 유닛과, 데이터를 유지하는 데이터 저장 장치를 갖고, 각 프로세싱 유닛에 대한 명령 저장 장치는 실행될 때 기능을 구현하는 하나 이상의 컴퓨터 실행가능한 명령을 포함하는 컴퓨터 프로그램을 유지하고, 상기 기능은:
수신 프로세싱 유닛으로 향하는 데이터 패킷을 상기 프로세싱 유닛에 접속된 한 세트의 접속 와이어들에 송신시키도록 하는 송신 기능 - 상기 데이터 패킷은 목적지 식별자를 가지지 않지만 미리 결정된 송신 시간에 송신되며 - 과; 그리고
상기 프로세싱 유닛이 미리 결정된 수신 시간에 데이터 패킷을 수신하기 위해 상기 프로세싱 유닛의 연결 와이어 세트를 스위칭 패브릭에 연결하기 위해 스위칭 회로를 제어하게 하는 스위치 제어 기능을 포함한다.
본 발명을 더 잘 이해하고 어떻게 동일하게 실시할 수 있는지를 나타내기 위해, 이하의 도면들을 참고로 하여 참조가 이루어질 것이다.
도 1은 단일 칩 프로세서의 아키텍처를 개략적으로 도시한다.
도 2는 스위칭 구조에 연결된 타일의 개략도이다.
도 3은 BSP 프로토콜을 나타내는 도면이다.
도 4는 시간 결정적 교환에서 2개의 타일들을 도시하는 개략도이다.
도 5는 시간 결정적 교환을 나타내는 개략적인 타이밍도이다.
도 6은 기계 지능 그래프의 한 예이다.
도 7은 시간 결정적 프로그램을 생성하기 위한 컴파일러의 동작을 도시하는 개략적인 아키텍처이다.
도 8 내지 도 11은 시간 결정적 아키텍처에서 사용 가능한 상이한 명령들의 명령 포맷들을 도시한다.
도 1은 단일 칩 프로세서(2)의 아키텍처를 개략적으로 도시한다. 이 프로세서는 본 명세서에서 기계 지능 애플리케이션에 대한 적응성을 나타내는 IPU (Intelligence Processing Unit)로 지칭된다. 컴퓨터에서, 단일 칩 프로세서들은, 이후에 논의된 것처럼, 컴퓨터를 구성하기 위해 칩 상의 링크를 사용하여 함께 접속된다. 본 설명은 단일 칩 프로세서(2)의 아키텍처에 초점을 맞춘다. 프로세서(2)는 타일들로서 지칭되는 다수의 프로세싱 유닛들을 포함한다. 일 실시예에서, 본 명세서에서 "북(North)" 및 "남(South)"으로 지칭되는 어레이들(6a, 6b)로 조직화된 1216개의 타일들이 있다. 서술된 예에서, 각각의 어레이는 76개의 타일들로 된 8개의 컬럼들을 갖는다 (실제로는 리던던시 목적으로 80개의 타일이 존재할 것이다). 여기에 서술된 개념들은 다수의 상이한 물리적 아키텍처들로 확장된다는 것을 이해할 수 있을 것이다. 이해를 돕기 위해 여기에 하나의 예가 제시되어있다. 칩(2)은 2개의 칩 대 호스트 링크들(8a, 8b) 및 4개의 칩 대 칩 링크들(30a, 30b)을 칩(2)의 "서(West)"에 배치한다. 칩(2)은 칩(2)에 의해 처리될 입력 데이터의 형태로 카드 대 호스트 링크들 중 하나를 통해 칩에 접속된 호스트(도시되지 않음)로부터 작업을 수신한다. 칩은 칩의 "동(East)"을 따라 배열된 추가의 6개의 칩-대-칩 링크들(30a, 30b)에 의해 카드들에 함께 접속될 수 있다. 호스트는 본 명세서에서 서술된 단일 칩 프로세서(2) 또는 다수의 상호 연결된 단일 칩 프로세서들(2)의 그룹으로 구성된 컴퓨터에 호스트 애플리케이션의 작업부하에 따라 액세스할 수 있다.
칩(2)은 칩 동작의 타이밍을 제어하는 클록(3)을 갖는다. 클록은 칩들의 회로들 및 컴포넌트들 모두에 접속된다. 칩(2)은, 모든 타일들 및 링크들이 접속 와이어들의 세트들에 의해 접속되는 시간 결정성 스위칭 패브릭(34)을 포함하며, 상기 스위칭 패브릭은 비상태(stateless)이다(즉, 상기 스위칭 패브릭은 프로그램 가시 상태를 갖지 않는다). 접속 와이어들의 각 세트는 끝과 끝이 고정되어 있다. 와이어들은 파이프라인 방식이다. 이 실시예에서, 세트는 32개의 데이터 와이어들 및 제어 와이어들, 예를 들어, 유효한 비트를 포함한다. 각각의 세트는 32 비트 데이터 패킷을 운반할 수 있지만, 여기서 "패킷(packet)"이라는 단어는 하나 이상의 유효 비트를 갖는 데이터(때때로 데이터 항목으로 언급됨)를 나타내는 비트 세트를 나타낸다는 것을 주목해야 한다. "패킷들(packets)"에는 헤더들 또는 의도된 수신자를 고유하게 식별할 수 있는 어떤 형식의 수신지 식별자도 없고 패킷 끝(end-of-packet) 정보도 없다. 대신, 각각은 타일에 입력되거나 출력되는 수치 또는 논리 값을 나타낸다. 각 타일에는 자체 로컬 메모리가 있다(나중에 서술됨). 타일은 메모리를 공유하지 않는다. 스위칭 패브릭은 후술하는 바와 같이 멀티플렉서들 및 타일들에만 접속된 접속 와이어들의 크로스 세트를 구성하고, 프로그램 가시 상태를 유지하지 않는다. 스위칭 패브릭은 비상태인 것으로 간주되며 어떤 메모리도 사용하지 않는다. 타일들 간의 데이터 교환은 여기에서 서술된 것 같이 시간 결정론적 기초로 수행된다. 파이프라인인 접속 와이어는, 일련의 임시 저장소, 예를 들어, 다음 저장소로 릴리스하기 전에 클록 주기 동안 데이터를 유지하는 래치(latch)들 또는 플립 플롭(flip flop)들을 포함한다. 와이어를 따라 이동하는 시간은 이 임시 저장소들에 의해 결정되며, 각 저장소는 임의의 두 점들 사이의 경로에서 시간의 클록 사이클을 사용한다.
도 2는 본 발명의 실시예에 따른 예시적인 타일(4)을 도시한다. 타일에서 다중 스레드들은 단일 실행 파이프라인을 통해 인터리브된다. 타일(4)은, 각각이 복수의 스레드들 중 상이한 각 스레드의 상태를 나타내기 위해 배열된 복수의 콘텍스트들(26); 복수의 스레드들에 공통인 공유 명령 메모리(12); 상기 복수의 스레드들에 공통인 공유 데이터 메모리(22); 복수의 스레드들에 다시 공통인 공유 실행 파이프라인(14, 16, 18); 및 인터리빙된 방식으로 공유 파이프라인을 통해 실행을 위해 복수의 스레드들을 스케줄링하기 위한 스레드 스케줄러(24)를 포함한다. 스레드 스케줄러(24)는 시간 슬롯들(S0 ... S5)의 시퀀스에 의해 도면에 개략적으로 나타내지만, 실제로는 그들의 시간 슬롯들에 관련하여 스레드들의 프로그램 카운터들을 관리하는 하드웨어 메커니즘이다. 실행 파이프라인은 페치 스테이지(14), 디코드 스테이지(16) 및 실행 유닛 (EXU)과 로드/저장 유닛(LSU)을 포함하는 실행 스테이지(18)를 포함한다. 콘텍스트들(26) 각각은 각 스레드의 프로그램 상태를 나타내는 레지스터들(R0, R1 ... )의 각 세트를 포함한다.
페치 스테이지(14)는 스레드 스케줄러(24)의 제어 하에 명령 메모리(12)로부터 실행될 페치 명령어들에 접속된다. 스레드 스케줄러(24)는 후술하는 바와 같이, 각 시간 슬롯에서의 실행을 위해 로컬 프로그램으로부터 명령을 인출하도록 페치 스테이지(14)를 제어하도록 구성된다.
페치 스테이지(14)는, 현재 시간 슬롯에 할당된 스레드들 각각의 프로그램 카운터(PC)에 대한 액세스를 갖는다. 주어진 스레드에 대해, 페치 스테이지(14)는 스레드의 프로그램 카운터에 의해 지시된 바와 같이 명령 메모리(12)의 다음 어드레스로부터 그 스레드의 다음 명령을 인출한다. 여기서 언급되는 명령어는, 컴퓨터 코드 명령, 즉, 컴퓨터 명령 세트의 기본 명령들 중 하나의 예로서, 오퍼레이션 코드 및 0 이상의 피연산자로 이루어진 것을 의미한다. 각 타일에 로딩된 프로그램은 지원되는 기계 지능 모델의 그래프를 기반으로 작업을 할당하기 위해 프로세서 또는 컴파일러에 의해 결정된다.
그 다음, 페치 스테이지(14)는 인출된 명령을 디코드 스테이지(16)에 전달하여 디코딩되고, 그리고 디코드 스테이지(16)는 디코딩된 명령의 표시를, 명령이 실행되도록 명령에서 지정된 현재 콘텍스트의 임의의 피연산자 레지스터들의 디코딩된 어드레스들과 함께 실행 스테이지(18)로 전달한다.
본 예에서, 스레드 스케줄러(24)는 라운드 로빈 방식에 따라 스레드들을 인터리빙하고, 이를 통해, 상기 방식의 각각의 라운드 내에서 상기 라운드는 각각의 스레드를 실행하기 위한 각각의 시간 슬롯들(S0, S1, S2, S3)의 시퀀스로 분할된다. 전형적으로 각 슬롯은 하나의 프로세서 사이클 길이이고 상이한 슬롯들은 (비록 모든 가능한 실시예들에서 필수적이지는 않지만) 균등하게 크기가 정해진다. 이 패턴은 (모든 가능한 실시예들에서 반드시 그런 것은 아니지만 매번 동일한 순서로 실시 예에서) 각 시간 슬롯의 각각의 인스턴스를 포함하는 각 라운드를 반복한다. 따라서, 본 명세서에서 언급된 시간 슬롯은, 시퀀스의 주어진 반복에서의 시간 슬롯의 특별한 인스턴스가 아니라, 시퀀스 내의 반복 할당된 장소를 의미한다. 도시된 실시예에서, 8개의 시간 슬롯들이 있지만, 다른 개수들도 가능하다. 각 시간 슬롯은 하드웨어 리소스, 예를 들어, 실행중인 스레드의 콘텍스트를 관리하는 레지스터와 관련된다.
SV로 표시된 콘텍스트들(26) 중 하나는, "작업자(worker)" 스레드들의 실행을 조정하는 "수퍼바이저(supervisor)"(SV)의 상태를 나타내는 특별한 기능을 위해 예약되어 있다. 수퍼바이저는 동시에 실행될 수 있는 하나 이상의 감독자 스레드들로 구성된 프로그램으로 구현될 수 있다. 수퍼바이저 스레드는 또한 나중에 서술할 장벽 동기화들을 수행할 책임을 가질 수 있거나 또는 타일 사이의 데이터 교환뿐만 아니라 로컬 메모리 안팎으로 데이터를 교환할 책임을 가질 수 있으므로 연산들 사이의 작업자 스레드간에 공유될 수 있다. 스레드 스케줄러(24)는, 전체 프로그램이 시작될 때, 수퍼바이저 스레드를 모든 시간 슬들ㄷ에 할당함으로써 시작되도록 구성된다. 즉, 수퍼바이저(SV)는 모든 시간 슬롯들(S0 ... S5)에서 실행을 시작한다. 하지만, 수퍼바이저는, 어떤 후속 지점에서(즉시 또는 하나 이상의 수퍼바이저 작업들을 수행한 후), 작업자 스레드가 할당된 슬롯들을 나타내는 작업자 스레드들(C0, C1) 각각에 대해 실행중인 슬롯들 각각을 일시적으로 양도(relinquish)하는 매커니즘을 갖는다. 이것은, 일 예로서, "RUN"이라고 하는 양도 명령을 실행하는 수퍼바이저 스레드에 의해 달성된다. 실시예들에서, 이 명령은 2개의 피연산자, 즉, 명령 메모리(12) 내의 작업자 스레드의 어드레스 및 데이터 메모리(22)의 스레드에 대한 일부 데이터의 어드레스를 가진다.
RUN task_addr, data_addr
각 작업 스레드는 그래프의 정점을 나타내고 원자적으로 실행되도록 의도된 코드렛이다. 이것이 소비자가 출시할 때 사용할 수 있는 모든 데이터이며, 생성된 모든 데이터는 종료될 때까지 다른 스레드에서 볼 수 없다. 이는 완료될 때까지 실행된다(오류 조건 제외). 데이터 어드레스는 코드렛에 의해 처리될 일부 데이터를 지정할 수 있다. 대안으로, 양도 명령은 코드렛의 어드레스를 지정하는 단 하나의 피연산자만을 가질 수 있으며, 데이터 어드레스는 코드렛의 코드에 포함될 수 있거나; 또는 단일 피연산자가 코드렛 및 데이터의 어드레스들을 지정하는 데이터 구조를 가리킬 수 있다. 코드렛들은 서로 동시에 그리고 독립적으로 실행될 수 있다.
어느 쪽이든, 이 양도 명령("RUN")은, 현재 시간 슬롯, 즉, 이러한 명령이 실행되는 시간 슬롯을 피연산자에 의해 지정된 작업자 스레드로 전달하도록 스레드 스케줄러(24) 상에서 실행한다. 양도하라는 이러한 명령이 실행되는 시간 슬롯에서 양도 명령은 암시적임을 알아야 한다(기계 코드 명령들의 콘텍스트에서 암시적으로, 이를 지정하기 위해서는 피연산자가 필요치 않음을 의미한다. 이는 오퍼레이션 코드 자체로부터 암시적으로 이해된다). 따라서, 주어진 슬롯은 수퍼바이저가 양도 명령을 실행하는 슬롯이다. 다른 말로 하면, 수퍼바이저는 제공되는 동일한 공간에서 실행하고 있다. 수퍼바이저는 "이 코드렛을 이 시간 슬롯에서 실행하시오(run this codelet at this time slot)"라고 말하면, 이후, 그 시점부터 관련 작업 스레드가 슬롯을 (일시적으로) 소유한다. 수퍼바이저가 슬롯을 사용하는 경우, 수퍼바이저는 해당 슬롯과 관련된 콘텍스트를 사용하지 않고 자체 컨텍스트 SV를 사용함을 알 수 있다.
수퍼바이저 스레드(SV)는 시간 슬롯들 각각에서 유사한 동작을 수행하여 모든 슬롯들(C0, C1)을 작업자 스레드들 중 상이한 것들 각각에 제공한다. 마지막 슬롯에 대해 이와 같이 행해지면, 수퍼바이저는 실행할 슬롯이 없으므로 실행을 일시 중지한다. 수퍼바이저는 모든 슬롯들을 수여할 수 없으며 자체 실행을 위해 일부 슬롯을 유지할 수 있다.
수퍼바이저 스레드가 코드렛을 실행할 시간이라고 결정하면, 양도 명령(RUN)을 사용하여 이 코드렛을 'RUN' 명령을 실행하는 슬롯에 할당한다.
슬롯들(C0, C1)의 작업자 스레드들 각각은 하나 이상의 계산 작업들을 수행한다. 작업(들)이 종료되면, 이후 작업자 스레드는 실행중인 시간 슬롯을 수퍼바이저 스레드로 다시 전달한다.
이것은 종료 명령(exit instruction)("EXIT")을 실행하는 작업자 스레드에 의해 달성된다. 일 실시예에서, 종료 명령은 종료시 각각의 코드렛의 상태를 나타내기 위해 프로그래머가 원하는 임의의 목적으로 사용되는 적어도 하나의 피연산자, 바람직하게는 단일 피연산자, 즉, 종료 상태(예를 들어, 2진 값)를 가진다.
EXIT exit_state
일 실시예에서, 종료 명령은 스케줄러(24)에 작용하여, 실행된 시간 슬롯이 수퍼바이저 스레드로 다시 리턴되도록 한다. 이후, 수퍼바이저 스레드는 하나 이상의 후속 수퍼바이저 작업들(예를 들어, 작업자 스레드들 간의 데이터 교환을 용이하게 하기 위해 메모리 내의 장벽 동기화 및/또는 데이터 이동)를 수행할 수 있고, 그리고/또는 문제의 슬롯에 새로운 작업자 스레드(W4 등)를 할당하기 위해 또 다른 양도 명령을 계속 수행할 수 있다. 따라서, 명령 메모리(12) 내의 스레드들 전체 수는 배럴 스레드식 프로세싱 유닛(10)이 어느 한 순간에 인터리빙할 수 있는 수보다 클 수 있다. 수퍼바이저 스레드(SV)의 역할은, 전체 프로그램의 어느 단계에서 명령 메모리(12)로부터의 워커 스레드들(W0 ... Wj)을 실행할 것인지를 스케줄링하는 것이다.
다른 실시예에서, 종료 명령은 종료 상태를 정의할 필요가 없다.
이 명령은 스레드 스케줄러(24)에서 실행되어, 스레드 스케줄러(24)가 실행되는 시간 슬롯이 수퍼바이저 스레드로 다시 리턴되도록 한다. 수퍼바이저 스레드는 하나 이상의 수퍼바이저 후속 작업들(예를 들어, 장벽 동기화 및/또는 데이터 교환)을 수행할 수 있고 그리고/또는 다른 양도 명령 등을 계속 실행할 수 있다.
위에서 간단히 언급했듯이 칩의 타일들 간에 데이터가 교환된다. 각 칩은 계산 단계와 교환 단계로 구성된 대량 동기 병렬 프로토콜(Bulk Synchronous Parallel protocol)을 운영한다. 이 프로토콜은, 예를 들어, 도 3에서 도시된다. 도 3의 좌측 도면은, 상태기반 코드렛들이 로컬 메모리(12, 22) 상에서 실행하는 단계에 각 파일(4)이 존재하는 계산 단계를 나타낸다. 도 3에서, 타일들(4)은 원으로 배열되어 도시되어 있지만, 이는 단지 설명을 위한 것이며 실제 아키텍처를 반영하지는 않는다.
계산 단계 후에, 화살표(30)로 표시된 동기화가 존재한다. 이를 달성하기 위해, 프로세서의 명령 세트에 SYNC(동기화) 명령이 제공된다. SYNC 명령은 현재 실행중인 모든 작업자들(W)이 EXIT 명령을 통해 종료할 때까지 수퍼바이저 스레드(SV)가 대기하도록 하는 효과가 있다. 실시예들에서, SYNC 명령은 모드를 피연산자(실시예들에서 유일한 피연산자)로서 취하고, 상기 모드는, SYNC가 동일한 프로세서 모듈(4), 예를 들어, 동일한 타일 상에서 국부적으로 실행중인 작업자 스레드들에 대해서만 국부적으로 동작하는지 또는 대안으로 여러 타일들에 걸쳐 또는 여러 칩들에 걸쳐 적용할지를 특정한다.
SYNC mode // mode ∈ {tile, chip, zone_1, zone_2}
BSP 그 자체는 당업게에게 알려져 있다. BSP에 따르면, 각 타일(4)은 계산 단계(52) 및 교환 (때로는 통신 또는 메시지 전달) 단계(50)을 번갈아 수행한다. 계산 단계 및 교환 단계는 타일 실행 명령들에 의해 수행된다. 계산 단계(52) 동안, 각 타일(4)은 타일상에서 국부적으로 하나 이상의 계산 작업들을 수행하지만, 이들 계산들의 임의의 결과들을 타일들(4)의 임의의 다른 것과 통신하지는 않는다. 교환 단계(50)에서, 각 타일(4)은, 이전의 계산 단계로부터 그룹 내의 타일들 중 하나 이상의 다른 것들로 하나 이상의 계산들의 결과들을 교환(통신)하고 그리고/또는 그룹 내의 타일들의 하나 이상의 다른 것들로부터 하나 이상의 계산들의 결과들을 교환(통신)하도록 허용되지만, 다른 타일(4) 상에서 수행되는 작업에 대해 잠재적인 의존성을 가지거나 또는 다른 타일(4) 상의 작업이 잠재적으로 의존성을 가질 수 있는 새로운 계산들을 아직 수행하지 않는다(내부 제어 관련 연산들과 같은 다른 연산들은 교환 단계에서 수행될 수 있음을 배제하지 않는다). 또한, BSP 원리에 따르면, 장벽 동기화는 계산 단계(52)로부터 교환 단계 (50)로 이행하는 시점 또는 교환 단계(50)로부터 계산 단계(52)로 이행하는 시점 또는 둘 모두에 존재한다. 즉, (a) 모든 타일들(4)은 그룹 내의 임의의 것이 다음 교환 단계(50)로 진행하기 전에 각각의 계산 단계(52)를 완료하는 것이 요구되거나, 또는 (b) 그룹의 모든 타일들(4)은 그룹 내의 임의의 타일이 다음 계산 단계(52)로 진행할 수 있기 전에 해당 각 교환 단계(50)를 완료하도록 요구되거나, 또는 (c) 이 두가지 조건들이 모두 적용된다. 이후, 이러한 교환 단계 및 계산 단계는 여러 번 반복될 수 있다. BSP 용어에서, 교환 단계 및 계산 단계의 각각의 반복은 BSP의 몇몇 이전의 서술들에서의 사용법과 일치하는 "슈퍼스텝(superstep)"으로 여기에서 언급된다. 본 명세서에서 "슈퍼스텝"이라는 용어는 때때로 교환 단계 및 계산 단계 각각을 나타내기 위해 본 기술 분야에서 사용된다는 것을 유의해야 한다.
실행 단계(18)의 실행 유닛(EXU)은, 온 칩(타일 간) 피연산자에 의해 수식 될 때, SYNC 명령의 오퍼레이션 코드에 응답하여, 어레이(6)의 모든 타일들(4)이 실행하는 작업자들을 종결할 때까지 "SYNC 칩(SYNC chip)"이 실행된 수퍼바이저 스레드가 일시 정지되도록 구성된다. 이것은, 다음 BSP 슈퍼스텝에 대한 장벽을 구현하는데 사용될 수 있다. 즉, 칩(2)상의 모든 타일들(4)이 장벽을 통과한 후에, 전체로서 크로스 타일 프로그램은 다음 교환 단계(50)로 진행할 수 있다.
각각의 타일은 그 동기화 상태를 동기 모듈(36)에 표시한다. 각 타일이 데이터를 전송할 준비가 된 것으로 설정되면, 동기화 프로세스(30)는 시스템으로 하여금 도 3의 우측에 도시된 교환 단계로 들어가도록 한다. 이 교환 단계에서, 데이터 값들은 타일들 사이(실제로, 메모리 대 메모리 데이터 이동에서 타일들의 메모리들 사이)를 이동한다. 교환 단계에서, 타일 프로그램들 사이에서 동시성 위험을 유발할 수 있는 계산들은 존재하지 않는다. 교환 단계에서, 각 데이터는 송신 타일들로부터 하나 이상의 수신 타일(들)로 타일을 나오게 하는 접속 와이어를 따라 이동한다. 각 클록 사이클에서, 데이터는 파이프라인 방식으로 경로(저장소 대 저장소)를 따라 특정 거리를 이동한다. 타일로부터 데이터가 발행될 때, 수신 타일을 식별하는 헤더가 발행되지 않는다. 대신, 수신 타일은, 특정 시간에 특정 송신 타일로부터 데이텀을 예상한다는 것을 알고 있다. 따라서, 여기에 서술된 컴퓨터는 시간 결정적이다. 각각의 타일은 프로그래머에 의해 또는 컴파일러 실행에 의해 할당된 프로그램을 동작시키고, 프로그래머나 컴파일러 기능은 특정 시간에 특정 타일에 의해 전송될 지식과 특정 시간에 수신 타일에 의해 수신될 필요가 있는 지식을 갖는다. 이것을 달성하기 위해서, SEND 명령들은 각 타일 상의 프로세서에 의해 실행되는 로컬 프로그램들에 포함되며, 여기서, SEND 명령의 실행 시간은 컴퓨터 내의 다른 타일들 상에서 실행되는 다른 명령들의 타이밍에 대해 미리결정된다. 이것은 이후에보다 상세하게 설명되지만, 먼저 수신 타일이 미리 결정된 시간에 데이터를 수신할 수 있는 메커니즘이 서술될 것이다. 긱 타일(4)은 그 자신의 멀티플렉서(210)와 관련되어, 칩은 1216 멀티플렉서를 갖는다. 각 멀티플렉서는 1216 개의 입력들을 가지며, 각 입력은 32 비트 폭(선택적으로 일부 제어 비트들을 포함)이다. 각각의 입력은 스위칭 패브릭(34) 내의 접속 와이어들(140x in)의 각 세트에 접속된다. 스위칭 패브릭의 접속 와이어들은 또한 각 타일(후술하는 방송 교환 버스)로부터 접속 와이어들(218)의 데이터 출력 세트에 접속되고, 따라서, 이 실시 예에서 칩을 가로지르는 방향으로 연장하는 1216 세트들의 접속 와이어가 존재한다. 설명을 용이하게 하도록, 남쪽 어레이(6b)에서, 도 2에 도시되지 않은 타일로부터 나오는, 데이터 아웃 와이어들(218s)에 접속된 하나의 굵은 와어들의 세트(140sc)가 도시된다. 이 와이어 세트는 140x라는 라벨이 붙여져 크로스 와이어들 1400 ~ 1401215 세트 중 하나임을 나타낸다. 이제, 도 2에서 볼 수 있는 바와 같이, 멀티플렉서(210)가 220x라고 표시된 입력으로 스위칭될 때, 이것은 크로스 와이어들(140x) 및 남쪽 어레이(6b)로부터의 타일(도 2에 도시되지 않음)의 데이터 아웃 와이어들(218s)에 접속될 것임을 알 수 있다. 멀티플렉서가 특정 시간에 그 입력(220sc)으로 스위칭하도록 제어되면, 접속 와이어(140x)의 세트에 접속된 데이터 출력 와이어들 상에서 수신되는 데이터는 특정 시점에서 멀티플렉서(210)의 출력(230)에 나타날 것이다. 데이터는, 타일(4)에서 그 다음에 일정한 지연 후에 도착할 것이고, 상기 지연은 타일로부터 멀티플렉서의 거리에 의존한다. 멀티플렉서가 스위칭 패브릭의 일부를 형성하기 때문에, 타일에서 멀티플렉서까지의 지연은 타일의 위치에 따라 달라질 수 있다. 스위칭을 구현하기 위해, 타일들 상에 실행되는 로컬 프로그램들은 스위치 제어 명령들(PUTi)을 포함하는데, 특정 데이터가 타일에서 수신될 것으로 예상되는 시간보다 앞서 특정 시간에 그 입력을 스위칭하기 위해, 이 스위치 제어 명령들(PUTi)은, 멀티플렉서 제어 신호(214)로 하여금 그 타일과 관련된 멀티플렉서를 제어하도록 발행된다. 교환 단계에서, 멀티플렉서가 스위칭되고 그리고 패킷들(데이터)이 스위칭 패브릭을 사용하여 타일들 간에 교환된다. 이 설명으로부터, 스위칭 패브릭에는 상태가 없음이 분명하다. 각 데이터의 이동은 각 멀티플렉서의 입력이 스위칭되는 특정 와이어들의 세트에 의해 미리 결정된다.
교환 단계에서, 모든 타일 대 모든 타일들 통신은 가능하게 된다. 교환 단계는 여러 사이클들을 가질 수 있다. 각 타일(4)은 그 자신의 고유한 입력 멀티플렉서(210)의 제어를 갖는다. 칩의 임의의 다른 타일 또는 연결 링크들 중 하나로부터 들어오는 트래픽이 선택될 수 있다. 멀티플렉서가 '널(null)' 입력을 수신하도록 설정될 수 있다(즉, 특정 교환 단계에서 임의의 다른 타일로부터의 입력이 없음). 선택은 교환 단계 내에서 주기별로 바뀔 수 있다. 그것을 통해 일정하지 않아도 된다. 데이터는 선택된 링크에 따라 칩 상에서, 또는 칩에서 칩으로, 또는 칩에서 호스트로 교환될 수 있다. 본 출원은 주로 칩상의 타일 간 통신에 관한 것이다. 칩 상에서 동기화를 수행하려면, 적은 수의 파이프 라인을 통한 신호들이 모든 타일로부터 칩상의 동기 제어기(36)로 제공되고, 파이프 라인을 통한 동기 확인 신호는 동기 제어기로부터 모든 타일들로 다시 방송된다. 일 실시예에서, 파이프 라인을 통한 신호들은 1 비트폭의 데이지 체인 AND/OR 신호이다. 타일들 간의 동기화가 달성되는 하나의 메커니즘은 위에서 언급한 SYNC 명령이거나 아니면 아래에서 서술된다. 다른 메커니즘이 활용될 수 있다. 중요한 것은 모든 타일들이 칩의 계산 단계와 칩의 교환 단계 사이에서 동기화될 수 있다는 것이다(도 3). SYNC 명령은 타일(4) 상의 전용 동기화 로직에서 그리고 동기화 제어기(36)에서 다음 기능을 야기한다. 동기 제어기(36)는, 하드웨어 상호 접속부(34)에서 또는 도시된 바와 같이 별도의 온 칩 모듈에서 구현될 수 있다. 온 타일(on-tile) 동기 로직 및 동기화 제어기(36)의 이러한 기능은 전용 하드웨어 회로에 구현되어, 일단 SYNC 칩이 실행되면, 나머지 기능은 그와 같은 명령들이 실행되지 않고 계속 진행된다.
우선, 온 타일 동기 로직은 문제의 타일(4) 상의 수퍼바이저에 대한 명령 발행이 자동적으로 중단되도록 한다(페치 스테이지(14) 및 스케줄러(24)가 수퍼바이저의 발행 명령들을 중지하게 함). 로컬 타일(4) 상의 모든 미해결 작업자 스레드가 EXIT를 수행하면, 동기 로직은 동기화 요청 "sync_req"을 동기화 제어기(36)에 자동으로 전송한다. 이후, 로컬 타일(4)은 수퍼바이저 명령 발행이 일시 정지된 상태로 계속 대기한다. 유사한 프로세스가 어레이(6) 내의 다른 타일들(4) 각각에 또한 구현된다(각각은 동기 논리의 자체 인스턴스를 포함한다). 따라서, 어떤 시점에서, 현재 계산 단계(52)의 모든 최종 작업자들이 어레이(6)의 모든 타일들(4) 상에서 나가면, 동기화 제어기(36)는 어레이(6)의 모든 타일들(4)로부터 각각의 동기화 요청(sync_req)을 수신할 것이다. 오직 그때만, 동일한 칩(2)상의 어레이(6) 내의 모든 타일(4)로부터 sync_req를 수신하는 것에 응답하여, 동기화 제어기(36)는 동기화 확인 신호 "sync_ack"를 각 타일(4)상의 동기 로직으로 다시 전송한다. 이 시점까지, 각각의 타일(4)은 그 수퍼바이저 명령 발행이 동기화 확인 신호(sync_ack)를 기다리는 동안 일시 정지된다. 상기 sync_ack 신호를 수신하면, 타일(4)의 동기 로직은 그 타일(4) 상의 각각의 수퍼바이저 스레드에 대한 수퍼바이저 명령 발행을 자동적으로 해제한다. 수퍼바이저는 후속하는 교환 단계(50)에서 상호접속부(34)를 통해 다른 타일들(4)과 데이터 교환을 자유롭게 진행할 수 있다.
바람직하게, sycn_req 및 sync_ack 신호들은, 각각의 타일(4)을 상호접속부(34)의 동기화 제어기(36)에 접속하는 하나 이상의 전용 동기 와이어들을 통해 각각 동기화 제어기로 전송되고 그리고 동기화 제어기로부터 수신된다.
타일의 연결 구조가 이제 더 상세히 설명될 것이다.
각 타일에는 3 개의 인터페이스들:
스위칭 패브릭(34)으로부터 타일(4)로 데이터를 전달하는 엑스인 인터페이스 (224);
방송 교환 버스(218)를 통해 타일로부터 스위치 패브릭으로 데이터를 전달하는 엑스아웃 인터페이스(226); 및
제어 멀티플렉서 신호(214)(mux-select)를 타일(4)로부터 멀티플렉서(210)로 전달하는 엑스먹스 인터페이스(228)를 갖는다.
각각의 개별 타일이 SEND 명령들을 실행하고 적절한 시간들에 제어 명령을 전환하여 올바른 데이터를 전송하고 수신하려면, 교환 스케줄링 요구 사항들은 개별 프로그램들을 컴퓨터의 개별 타일들에 할당하는 프로그래머 또는 컴파일러에 의해 충족되어야 한다. 이 기능은 다음 교환 타이밍(BNET) 파라미터들을 알아야 하는 교환 스케줄러에 의해 수행된다. 파라미터들을 이해하기 위해, 도 2의 단순화 된 버전이 도 4에 도시되어 있다. 도 4는 또한 수신 타일과 함께 송신 타일을 도시한다.
Ⅰ. 각 타일의 상대적인 동기 확인 응답 지연, BNET_RSAK (TID).
TID는 후술하는 TILE_ID 레지스터에 유지되는 타일 식별자이다. 이것은 각 타일이 가장 빠른 수신 타일에 대해 동기 제어기(36)로부터 확인 응답 신호를 수신 할 때를 나타내는 항상 0보다 크거나 같은 사이클 수이다. 이것은 타일 ID가 그 타일의 칩 상의 특정 위치를 나타내며, 따라서 물리적 거리를 반영함을 나타냄을 타일 ID로부터 계산될 수 있다. 도 4는 하나의 송신 타일(4T) 및 하나의 수신 타일 (4R)을 도시한다. 개략적으로만 도시되고 비례하진 않지만, 타일(4T)은 동기 제어기에 더 가깝게 표시되고, 타일(4R)은 멀리 떨어져 있는 것으로 표시되며, 동기 확인 응답 지연은 타일(4T)에 대해 타일(4R)보다 짧을 것이다. 특정 값은 동기 확인 응답 지연을 위해 각 타일과 관련될 것이다. 이러한 값들은 예를 들어 지연 테이블에 보관될 수 있거나 또는 타일 ID를 기반으로 매번 계산할 수 있다.
Ⅱ. 교환 멀티플렉서 제어 루프 지연, BNET_MXP(수신 타일의 TID).
이것은, 타일의 입력 멀티플렉서 선택을 변경하는 명령(PUTi-MUXptr)을 발행하는 것과, 동일한 타일이 새로운 멀티플렉서 선택의 결과로서 메모리에 저장된 교환 데이터에 대해 (가설적인) 로드 명령을 발행할 수 있는 가장 이른 시점 간의 사이클들의 수이다. 도 4를 보면, 이러한 지연은 수신 타일(4R)의 엑스먹스 인터페이스(228R)로부터 멀티플렉서(210R)로 향하는 제어 신호의 지연 및 멀티플렉서의 출력으로부터 데이터 입력 엑스인 인터페이스(224)로의 라인의 길이를 포함한다.
Ⅲ. 타일 대 타일 교환 지연, BNET_TT (송신 타일의 TID, 수신 타일의 TID). 이것은 하나의 타일에서 발행되는 SEND 명령어와 수신 타일이 자체 메모리에서 전송 된 값을 가리키는 (가상의)로드 명령어를 발행 할 수있는 가장 빠른 포인트 사이의 사이클 수이다. 이것은 하나의 타일에서 발행되는 SEND 명령어와 수신 타일이 자체 메모리에서 전송된 값을 가리키는 (가상의) 로드 명령을 발행할 수 있는 가장 빠른 포인트 사이의 사이클 수이다. 이것은 이미 논의된 테이블에 액세스하거나 계산에 의해 송신 타일 및 수신 타일의 타일 ID들롭터 결정된다. 도 4를 다시 보면, 이 지연은, 데이터가, 송신 타일(4T)에서 그 ex_out 인터페이스 (226T)로부터 그 교환 버스(218T)를 따라 스위칭 패브릭(34)으로, 이후, 입력 멀티플렉서(210R)를 통해 수신 타일(4R)에서 수신 타일의 ex_in 인터페이스(224R)로 전송되는데 걸리는 시간을 포함한다.
IV. 교환 트래픽 메모리 포인터 업데이트 지연, BNET_MMP(). 이것은 타일의 교환 입력 트래픽 메모리 포인터를 변경하는 명령(PUTi-MEMptr) 발행과 동일한 타일이 새로운 포인터의 결과로서 메모리에 저장된 교환 데이터에 대해 (가상의) 로드 명령을 발행할 수 있는 가장 이른 시점 사이의 사이클들의 수이다. 이는 작고 고정된 사이클들의 수이다. 메모리 포인터는 아직 논의되지 않았지만, 도 2의 232에 도시되어 있다. 이는 데이터 메모리(202)로의 포인터로서 작동하고, ex_in 인터페이스(224)로부터 인입 데이터가 저장될 곳을 지시한다. 이것은 이후에 더 상세하게 서술될 것이다.
도 5는 교환 타이밍을 더 자세히 도시한다. 도 4의 좌측에는 0-30에서 실행되는 IPU 클록 사이클이 나와 있다. 송신 타일(4T)에 대한 동작은 송신 명령(SEND F3)의 발행으로 시작하여 IPU 클록 사이클 0과 9 사이에서 발생한다. IPU 클록 사이클 10 내지 24에서, 데이터는 스위칭 패브릭(34)을 통해 그 파이프 라인을 통과한다.
IPU 클록 사이클(11)에서 수신 타일(4R)을 보면 타일 입력 멀티플렉서 선택 : PUTi-MXptr(F3)을 변경하는 PUTi 명령이 실행된다. 도 5에서 이러한 PUTi 명령어는 "PUTi INCOMING MUX (F3)"로 표시된다.
사이클 18에서, ITU 클록 사이클 25에서 로드 명령을 허용하는 메모리 포인터 명령, PUTi-MEMptr(F3)이 실행된다. 도 5에서, 이 PUTi 명령어는 "PUTi INCOMING ADR (F3)"으로 표시된다.
송신 타일(4T)에서, IPU 클록 사이클 1, 3 및 5는 "전송 ()"으로 표시된다. 이것은 SEND 명령 발행과 엑스아웃 인터페이스로의 전송시 이전 SEND 명령들의 데이터를 나타내는 엑스아웃 인터페이스 F4, E1, E3 등에 대한 SEND 명령어의 데이터 표현 사이의 내부 타일 지연이다. IPU 클록 사이클 2는 SEND 명령에 대한 어드레스 EO를 형성하도록 할당된다. 이것이 목적지 어드레스가 아닌 EO를 인출하는 위치이다. IPU 클록 사이클 4에서 메모리 매크로는 메모리에서 E2를 인출하도록 실행된다. IPU 클록 사이클 6에서 패리티 검사가 E4에서 수행된다. IPU 클록 사이클 7에서, MUX 출력 명령은 E5를 전송하기 위해 실행된다. IPU 클록 사이클 8에서는 E6이 인코딩되고 IPU 클록 사이클 E7이 출력된다.
교환 패브릭(34)에서, IPU 클록 사이클 10 내지 24는 "교환 파이프 스테이지(exchange pipe stage)"로 표시된다. 각 사이클에서, 데이터는 파이프 라인을 따라 (임시 저장소들 사이에서) "한 단계(one step)" 이동한다.
사이클 25-28은 엑스인 인터페이스(메모리 매크로(E2)에서 Exc 참조)에서 데이터를 수신하는 사이의 수신 타일(4R)의 지연을 나타내는 반면, 사이클 25-29는 엑스인 인터페이스에서 데이텀을 수신하는 것과 LD에 대한 메모리(메모리 메크로(E2) 참조)에 로딩하는 것 사이의 지연을 나타낸다. 다른 기능들이 그러한 지연에서 수행될 수 있다 - 가장 빠른 LD(F3), Reg 파일 rd(F4), 양식 추가(EO), 전송(E1)을 참조.
간단히 말해서, 수신 타일(4R)의 프로세서가 송신 타일(4T) 상의 프로세스 출력인 데이터(예를 들어, F3)에 작용하기를 원한다면, 송신 타일(4T)은 특정 시간 (예를 들어, 도 5의 IPU 클록 사이클 0)에서 SEND 명령[SEND (F3)]을 실행해야 하고, 그리고 수신 타일은 송신 타일 상의 SEND 명령[SEND (F3)]의 실행에 대한 특정 시간만큼 스위치 제어 명령 PUTi EXCH MXptr(IPU 클록 사이클 11에서와 같음)을 실행해야 한다. 이것은 데이터가 수신 타일에서 실행되는 코드 렛에서 사용하기 위해 IPU 사이클 25에 로딩되는 [가장 빠른 LD(F3)] 시간 내에 수신 타일에 도착하도록 한다.
수신 타일의 수신 프로세스에는 PUTi MEMptr 명령과 같이 메모리 포인터를 설정하는 것이 필요하지 않다. 그 대신에, 메모리 포인터(232)(도 2)는 각 데이터가 엑스인 인터페이스(224)에서 수신된 후에 자동으로 증가한다. 이후, 수신된 데이터는 다음 사용 가능한 메모리 위치로 로딩된다. 그러나, 메모리 포인터를 변경하는 기능을 사용하면 수신 타일로 하여금 데이터가 기입된 메모리 위치를 변경할 수 있다. 이 모든 것은 개별 프로그램들을 개별 타일들에 기입하는 컴파일러 또는 프로그래머가 적절하게 통신할 수 있도록 결정할 수 있다. 이로써 내부 교환(칩 상의 상호 교환) 타이밍이 완전히 시간 결정적이게 된다. 이러한 시간 결정론은 교환 스케줄러에 의해 교환 시퀀스들을 고도로 최적화하는데 사용될 수 있다.
도 6은 본 명세서에 개시된 프로세서 아키텍처의 예시적인 애플리케이션, 즉, 기계 지능에 대한 애플리케이션을 도시한다.
전술한 바와 같이 그리고 기계 지능 분야의 당업자에게 익숙한 바와 같이, 기계 지능은 기계 지능 알고리즘이 지식 모델을 학습하는 학습 단계로 시작한다. 상기 모델은 상호 연결된 노드들(102) 및 링크들(104)의 그래프(60)로 표현될 수 있다. 노드들 및 링크들은 정점들 및 에지들이라고 할 수 있다. 그래프 내의 각 노드(102)는 하나 이상의 입력 에지들 및 하나 이상의 출력 에지들을 가지며, 일부 노드들(102)의 입력 에지들 중 일부는 노드의 몇몇 다른 노드들의 출력 에지들이며, 이에 따라 노드를 연결하여 그래프를 형성한다. 또한, 하나 이상의 노드들(102)의 하나 이상의 입력 에지들이 전체적으로 그래프에 대한 입력들을 형성하고, 하나 이상의 노드들(102)의 하나 이상의 출력 에지들이 전체적으로 그래프의 출력을 형성한다. 각각의 에지(104)는 텐서(n차원 매트릭스)의 형태로 공통적으로 값을 전달하며, 이들은 입력 및 출력 에지 상에서 각각 노드들(102)에 그리고 노드들(102)로부터 제공되는 입력 및 출력을 형성한다.
각각의 노드(102)는 그 입력 에지 또는 에지들 상에 수신되는 그 하나 이상의 입력들의 함수들을 나타내며, 이 함수들의 결과는 출력 에지 또는 에지들 상에 제공되는 출력(들)이다. 이러한 결과들을 때때로 활성화라고 한다. 각 함수는 하나 이상의 파라미터들(때로는 곱셈 가중치일 필요는 없지만 가중치라고도 함)에 의해 파라미터화 된다. 일반적으로 상이한 노드들(102)에 의해 표현되는 함수들은 상이한 형태들의 함수일 수 있고 그리고/또는 상이한 파라미터들에 의해 파라미터화될 수 있다.
또한, 각 노드의 함수의 하나 이상의 파라미터들 각각은 각각의 에러 값에 의해 특징 지워진다. 또한, 각각의 에러 조건은 각 노드(102)의 파라미터(들) 내의 에러(들)와 관련될 수 있다. 단일 에러 파라미터에 의해 파라미터화된 함수를 나타내는 노드(102)에 대해, 에러 조건은 간단한 임계값일 수 있다. 즉, 에러가 지정된 임계값 내에 있으면 에러 조건이 충족되지만 에러가 임계값을 초과하면 에러 조건이 충족되지 않는다. 하나 이상의 각각의 파라미터에 의해 파라미터화된 노드(102)에 대해, 그 노드(102)에 대한 에러 조건은 보다 복잡할 수 있다. 예를 들어, 에러 조건은 그 노드(102)의 파라미터들 각각이 각각의 임계치 내에 있는 경우에만 만족될 수 있다. 다른 예로서, 결합된 메트릭은 동일한 노드(102)에 대한 상이한 파라미터들의 에러들을 결합하여 정의될 수 있고, 그리고 상기 결합된 메트릭의 값이 특정 임계값 내에 있는 조건에서 상기 에러 조건이 만족될 수 있지만, 그렇지 않으면, 결합된 메트릭의 값이 임계 값을 초과하면(또는 역으로 메트릭의 정의를 따르면), 에러 조건이 충족되지 않는다. 에러 조건이 무엇이든 간에, 이것은 노드의 파라미터(들)의 에러가 특정 레벨 또는 허용 정도 아래로 떨어지는 지의 척도를 제공한다.
학습 단계에서, 알고리즘은 경험 데이터, 즉 그래프에 대한 상이한 가능한 입력들의 조합을 나타내는 다수의 데이터 포인트들을 수신한다. 점점 더 많은 경험 데이터가 수신됨에 따라, 알고리즘은 경험 데이터에 기초하여 그래프에서 다양한 노드들(102)의 파라미터를 점차적으로 튜닝하여 파라미터들의 에러들을 최소화하려고 시도한다. 그 목표는, 그래프의 출력이 원하는 결과에 최대한 근접하도록 파라미터들의 값을 찾는 것이다. 그래프가 전체적으로 이러한 상태를 향하기 때문에 계산은 수렴이라고 한다.
예를 들어, 감독되는 접근법에서, 입력 경험 데이터는 훈련 데이터, 즉, 알려진 출력들에 대응하는 입력들의 형태를 갖는다. 각 데이터 포인트에서, 알고리즘은 출력이 주어진 입력에 대해 알려진 출력과 더 가깝게 매칭하도록 파라미터들을 조정할 수 있다. 후속 예측 단계에서, 그래프는, 입력 쿼리를 대략적으로 예측된 출력과 매핑하기 위해 사용될 수 있다(또는 그 역으로도 추론가능 하다). 다른 방법들도 가능하다. 예를 들어 감독되지 않은 접근법에서는, 입력 데이터마다 참조 결과 개념이 없으며, 대신 기계 지능 알고리즘이 출력 데이터에서 자체 구조를 식별하도록 남아있다. 또는 보강 접근법에서, 알고리즘은 입력 경험 데이터의 각 데이터 포인트에 대해 적어도 하나의 가능한 출력을 시도하고, 이 출력이 긍정 또는 부정(그리고 긍정의 정도 또는 부정의 정도)인지 여부, 예를 들어, 승패 또는 보상 또는 처벌 등을 알려준다. 많은 시도들에서 알고리즘은 긍정적인 결과를 가져올 입력들을 예측할 수 있도록 그래프의 파라미터들을 점차 조정할 수 있다. 그래프를 학습하기 위한 다양한 접근법들 및 알고리즘들은 기계 학습 분야의 통상의 기술자에게 공지될 것이다.
본 명세서에 개시된 기술들의 예시적인 애플리케이션들에 따르면, 각각의 작업자 스레드는 기계 지능 그래프에서 노드들(102) 중 개별적인 하나와 관련된 계산들을 수행하도록 프로그래밍된다. 이 경우, 노드들(102) 사이의 에지들(104)은 스레드들 간의 데이터 교환에 대응하고, 적어도 일부는 타일들 간의 교환을 포함할 수 있다.
도 7은 컴파일러(70)의 기능을 도시하는 개략도이다. 컴파일러는 이러한 그래프(60)를 수신하고 그래프들 내의 함수들을 도 7의 72로 표시된 로컬 프로그램들에 포함된 다수의 코드렛들로 컴파일링한다. 각 로컬 프로그램은 컴퓨터의 특정 타일에 로딩되도록 설계되었다. 각 프로그램은 하나 이상의 코드렛들(72a, 72b ...) 및 수퍼바이저 서브 프로그램(73)을 포함하며, 이들 각각은 일련의 명령어들로 형성된다. 컴파일러는 시간적으로 서로 연결되어 시간 결정적이라는 프로그램들을 생성한다. 이를 수행하기 위해, 컴파일러는 타일들의 위치를 나타내는 타일 식별자들을 포함하는 타일 데이터(74)에 액세스하고, 따라서, 로컬 프로그램들을 생성하기 위해 컴파일러가 이해할 필요가 있는 지연들을 액세스한다. 지연들은 이미 위에서 언급한 바 있으며 그리고 타일 데이터를 기반으로 계산될 수 있다. 대안으로, 타일 데이터는 이러한 지연들이 룩업 테이블을 통해 이용 가능한 데이터 구조를 통합할 수 있다.
이제, 여기에 정의된 컴퓨터 아키텍처에 대한 명령 집합의 일부로 개발된 새로운 명령들에 대한 서술이 이어진다. 도 8은 32비트의 SEND 명령을 보여준다. SEND 명령은 타일 메모리부터 데이터가 전송되었음을 나타낸다. 이는 타일의 로컬 메모리(22) 내의 특정 어드레스에 저장된 하나 이상의 데이터가 타일의 엑스아웃 인터페이스에서 전송되도록 한다. 각 데이터(명령의 "항목(item)"이라고 함)는 하나 이상의 단어가 될 수 있다. SEND 명령은 보내기 기능을 구현하기 위해 한 단어 또는 여러 단어에 대해 작동한다. SEND 명령은 오퍼레이션 코드(80), 메시지 카운트를 나타내는 필드(82), 어드레스 필드(84)에 표시된 SEND 어드레스들로부터 하나 이상의 패킷의 형태로 전송될 항목들의 수를 갖는다. 필드(84)는, 아이템들이 기본 어드레스 레지스터에 저장된 기본 값에 부가되는 즉시 값의 형태로 전송되는 로컬 메모리 내의 어드레스를 정의한다. SEND 명령은 또한 4 및 8 바이트 중 하나로 선택된 워드 크기를 나타내는 전송 제어 필드(86)(SCTL)를 갖는다. 패킷에는 목적지 식별자가 없다. 즉, 항목들을 수신할 수신 타일이 명령어에서 고유하게 식별되지 않는다. 송신 기능은, 송신 어드레스로부터의 지정된 수의 데이터 항목이 로컬 메모리에서 액세스되고 타일의 ex_out 인터페이스에 배치되어 다음 클록 주기에 전송되도록 한다. SEND 명령의 또 다른 변형에서, 항목들이 전송되는 어드레스는 암시적 일 수 있다. 이는 기본 어드레스 레지스터의 기본 값과 출력 델타 레지스터의 델타 값에서 가져온 값이다. 델타 값은 이전의 SEND 명령의 정보에 기초하여 설정될 수 있다. 의도된 수신 타일의 고유 식별자 대신에, 컴파일러는 올바른 수신 타일이 본 명세서에서 이미 설명된 바와 같이 데이터(데이터 항목들)를 수신하기 위한 정확한 시간에 자신의 로컬 멀티플렉서(들)를 전환할 것을 결정했다. 어떤 경우에는, 의도된 수신 타일이 송신 타일 자체일 수 있음을 알 수 있다.
이를 위해, 전술한 바와 같이 스위치 제어 기능이 제공된다. 도 9는 이 기능을 수행하는 PUT-i-MUX 명령을 보여준다. 오퍼레이션 코드 필드(90)는 명령을 PUT-i-MUX 명령으로 정의한다. 지연 기간은 지연 즉시 값(92)에 의해 특정될 수 있다. 이 지연 값은 'no op' 명령을 대체하는데 사용될 수 있고, 코드 압축을 최적화하는 방법이다. 이 명령이 실행될 때, 멀티플렉서(210)의 입력이 다른 타일로부터 전송된 항목들을 '청취(listen)'하도록 설정될 incoming_mux 필드(98)를 정의한다. 소형화를 위해, 이 멀티플렉서 제어 기능은 위에 정의된 송신 기능을 사용하여 단일 명령어로 결합될 수 있다(도 10 참조). 타일이 전송 타일로 작동하게 하는 전송 기능과 스위치 제어 기능 간에는 연결이 없고, 이 스위치 제어 기능은, 이는 타일이 동일한 타일의 단일 실행 사이클에서 수행될 수 있다는 것을 제외하고 타일이 수신 타일로 작용할 때의 기능이다.
도 10은 "병합(merge)" 명령의 예이다. 이러한 맥락에서, "병합" 명령은 한 타일에서 동시에 (한 실행 사이클에서) 수행될 수 있는 두 개 이상의 기능들을 정의하는 명령을 의미한다.
도 10은 '병합' 송신 명령의 형태를 도시하며, 송신 기능은 타일에서 레지스터에 보유된 상태를 수정할 수 있는 제2 기능과 결합된다. 한 가지 기능은 해당 타일에서 수신된 데이터에 대한 메모리 포인터를 변경하는 것이다. 또 다른 기능은 인입하는 멀티플렉서를 설정하는 것이다. PUTi_MEMptr 기능은 타일에 의해 수신된 다음 데이터가 식별되도록 로딩될 로컬 메모리 내의 메모리 위치를 인에이블한다. 이 기능은 전용 '수신' 명령에 의해 수행될 수 있지만, 그 기능은 데이터의 수신을 가능하게 하지 않고 메모리 포인터를 수정하는 것이다. 실제로, 타일에서 데이터를 수신하기 위해 특정 명령을 실행할 필요가 없다. 엑스인 인터페이스에 도달하는 데이터는 엑스인 인터페이스의 제어하에 메모리 포인터에 의해 식별된 다음 메모리 위치로 로딩될 것이다. 도 10의 명령은 오퍼레이션 코드 필드(100) 및 송신될 다수의 아이템 필드 (102)를 갖는다. 인입하는 상태 변경 필드(106)의 즉시 값은 필드(104)에 의해 지정된 교환 구성 상태 레지스터에 기입된다. 일 형태에서, 상태 변경 필드(106)는 메모리 포인터가 설정될 수신 어드레스를 계산하기 위한 입력 델타를 기입할 수 있다. 다른 형태에서, 교환 구성 상태는 멀티플렉서 입력을 설정하는 인입 멀티플렉서 값으로 기입된다.
이 형식의 "병합" 명령들의 경우, 송신 기능은 명령에 내포된 하나 이상의 레지스터들에 저장된 값에서 결정된 송신 어드레스를 사용한다. 예를 들어, 송신 어레드레스는 기본 레지스터와 델타 레지스터로부터 결정될 수 있다.
도 11은 교환 명령(EXCH)이라고 불리는 "이중 폭(double width)" 명령을 보여준다. 이 명령은 타일 메모리의 지정된 어드레스에서 데이터 전송을 시작하고 그리고 인입 교환 구성 상태 (멀티플렉서 및/또는 데이터를 수신하기 위한 메모리 포인터)를 설정한다. 교환 명령은 명령 바로 다음의 메모리 위치에 있는 인라인 32 비트 페이로드가 바로 뒤따르는 점에서 고유하다. 교환 명령은 교환 명령을 나타내는 오퍼레이션 필드(110)를 갖는다. 페이로드는 '코이슈(coissue)' 플래그(119)를 갖는다.
교환 명령은 인입 포맷 데이터 폭(32 비트 또는 64 비트)을 지정하는 단일 비트를 갖는 포맷 필드(112)를 포함한다. 데이터 폭은 멀티플렉서 라인들(멀티플렉서 라인들이 단일로 설정되는지 또는 쌍으로 설정되는지 여부)의 설정에 영향을 미칠 수 있다. 항목 필드(114)는 교환 명령에 의해 전송되도록 야기된 항목들의 수를 정의한다. 이들 항목들은, 도 9의 송신 명령에서와 같이, 필드(116)에서 즉시 사용하여 계산된 송신 어드레스로부터 송신된다. 이 필드의 값은 기본 레지스터의 값에 더해진다.
참조 번호 118은 송신 데이터에 대한 워드 크기를 정의하는 제어 필드를 나타낸다. 페이로드는 도 9와 관련하여 전술한 바와 같이 인입 멀티플렉서에 대한 스위치 제어를 수행하는 스위치 제어 필드(120)를 포함한다. 참조 번호 122는 도 10의 명령과 관련하여 전술한 바와 같이, 인입 데이터가 저장될 어드레스를 계산하기 위한 인입 델타를 정의하는 페이로드의 필드를 나타낸다. 도 11의 64 비트 폭 교환 명령(EXCH)은 매 클록 사이클마다 실행될 수 있고, 따라서 동시에 허용된다.
Figure pat00001
특정 어드레스로부터 송신
Figure pat00002
인입 멀티플렉서의 업데이트
Figure pat00003
인입 어드레스의 업데이트
따라서, 임의의 교환 일정을 단일 명령으로 인코딩될 수 있다. 도 8, 도 9 및 도 10의 명령들은 유사한 기능들을 수행하지만, 단지 32 비트 길이이므로 각 타일의 로컬 메모리에서 교환 코드의 크기를 최소화하기 위해 사용될 수 있다. 임의의 특정 맥락에서 어떤 명령을 사용할지에 관한 결정은 로컬 프로그램 (72)에 대한 코드렛들을 구성할 때 컴파일러(70)에서 이루어진다.
위의 명령들을 지원하는 주요 레지스터들 및 그 의미들에 대한 목록은 다음과 같다. 각 타일에 있는 레지스터 파일의 일부로부터의 레지스터들이다.
TILE_ID 해당 타일의 고유 식별자를 보유
INCOMING_MUX 인입 메시지들에 대한 소스 타일의 타일 ID를 보유 하고, 이 타일은 수신 타일과 관련된 멀티플렉서
에 대한 '청취' 입력을 선택하도록 동작
INCOMING_DELTA 이것은 인입 데이터가 저장될 어드레스를 계산하기
위한 자동 증가 값을 보유; 명시적인 필드[예 : 도
10 참조]로 덮어쓸 수 있음. 이는 INCOMING_BASE에
추가됨.
INCOMING_BASE 메모리 포인터를 업데이트하기 위한 공통 기본
어드레스를 보유(INCOMING_DELTA에 추가됨).
OUTGOING_BASE 송신 명령에 대한 공통 기본 어드레스를 보유
OUTGOING_DELTA 이것은 송신 어드레스 명령들을 계산을 위한 델타
를 보유. '송신' 어드레스는 나가는 베이스 + 나가
는 델타이다.
INCOMING_FORMAT 32b 또는 64b 수신 데이터를 식별.
INCOMING_DELTA 및 INCOMING_MUX 레지스터는 타일의 교환 상태의 일부를 구성한다.
본 명세서에서는 기계 학습을 한 지식 모델의 맥락에서 특히 효과적인 새로운 컴퓨터 패러다임을 서술하고 있다. 방대한 양의 데이터를 효율적으로 처리하기 위해 BSP 패러다임의 교환 단계에서처럼 시간 결정론을 이용하는 아키텍처가 제공된다. 특정 실시예가 설명되었지만, 개시된 기술들의 다른 응용 및 변형은 개시물이 공개된다면 당업자에게 명백해질 수있다. 본 개시물의 범위는 서술된 실시예에 의해 제한되지 않고 첨부된 청구 범위에 의해서만 제한된다.

Claims (14)

  1. 컴퓨터화된 기능을 전달하기 위해 다수의 프로그램들을 생성하는 컴퓨터로 구현되는 방법으로서,
    각 프로그램은, 로컬 프로그램을 유지하기 위한 명령 저장부를 각각 가지는 복수의 프로세싱 유닛들, 데이터를 유지하기 위한 로컬 프로그램 및 데이터 저장을 실행하기 위한 실행 유닛, 각 프로세싱 유닛의 출력 인터페이스에 접속되고, 각 프로세싱 유닛에 의해 제어 가능한 스위칭 회로에 의해 각 프로세싱 유닛의 입력 인터페이스에 접속 가능한 스위칭 패브릭, 및 동기화 신호를 생성하도록 동작 가능한 동기화 모듈을 포함하는 컴퓨터의 프로세싱 유닛에서 실행되고,
    상기 방법은, 실행 가능한 명령들의 시퀀스를 포함하는 각각의 프로세싱 유닛에 대한 로컬 프로그램을 생성하는 단계; 및
    각각의 프로세싱 유닛에 대해, 각각의 로컬 프로그램의 명령들의 상대적 실행 시간을 결정하는 단계를 포함하며,
    이를 통해, 하나의 프로세싱 유닛에 대해 할당된 로컬 프로그램은, 미리 결정된 송신 시간에 적어도 하나의 데이터 패킷을 송신하라는 송신 명령을 동기화 신호에 비례하여, 그리고 수신 프로세싱 유닛을 위해 예정되지만 목적지 식별자를 갖지 않는 상기 동기화 신호에 비례하여, 미리결정된 지연으로 시행되도록 스케줄링되며, 수신 프로세싱 유닛에 할당된 로컬 프로그램은 미리 결정된 스위치 시간에 스위치 제어 명령을 실행하여 프로세싱 유닛 와이어를 스위칭 패브릭에 연결하여 수신 시간에 데이터 패킷을 수신하도록 스위칭 회로를 제어하기 위해 스케줄링되는 것을 특징으로 하는
    컴퓨터로 구현되는 방법.
  2. 제1항에 있어서,
    상기 프로세싱 유닛들은 서로에 대해 고정된 위치 관계를 가지며, 상기 결정하는 단계는 상기 컴퓨터 내의 각 쌍의 프로세싱 유닛들 간의 위치 관계에 기초하여 고정된 지연을 결정하는 단계를 포함하는 것을 특징으로 하는
    컴퓨터로 구현되는 방법.
  3. 제2항에 있어서,
    상기 고정된 위치 관계는 행 및 열의 어레이를 포함하고, 각 프로세싱 유닛은 상기 어레이 내의 각 프로세싱 유닛의 위치를 식별하는 식별자를 갖는 것을 특징으로 하는
    컴퓨터로 구현되는 방법.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 스위칭 회로는 프로세싱 유닛에 연결된 와이어들의 출력 세트 및 상기 스위칭 패브릭에 접속 가능한 다수 세트의 입력 와이어들을 갖는 멀티플렉서를 포함하고, 상기 멀티플렉서는 상기 프로세싱 유닛에 대해 미리 결정된 물리적 위치에서 컴퓨터 상에 위치되며, 그리고
    상기 결정하는 단계는 상기 멀티플렉서에 도달하는 상기 스위치 제어 명령에 대한 상기 고정된 지연 및 상기 프로세싱 유닛의 입력 인터페이스에 도달하는 상기 멀티플렉서로부터의 출력 데이터 패킷을 결정하는 단계를 포함하는 것을 특징으로 하는
    컴퓨터로 구현되는 방법.
  5. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 프로세싱 유닛에서의 계산 단계가 완료되었음을 상기 동기화 모듈에 지시하는 동기화 명령을 각 프로그램에 제공하는 단계를 포함하는 것을 특징으로 하는
    컴퓨터로 구현되는 방법.
  6. 제5항에 있어서,
    상기 결정하는 단계는, 칩 상의 동기화 이벤트 사이의 고정된 지연을 각각의 프로세싱 유닛에 대해 결정하는 단계 및 동기화 이벤트가 발생했다는 확인 응답을 상기 프로세싱 유닛에서 다시 수신하는 단계를 포함하는 것을 특징으로 하는
    컴퓨터로 구현되는 방법.
  7. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 결정하는 단계는, 칩 상의 동기화 이벤트 사이의 고정된 지연을 각각의 프로세싱 유닛에 대해 결정하는 단계 및 동기화 이벤트가 발생했다는 확인 응답을 상기 프로세싱 유닛에서 다시 수신하는 단계를 포함하는 하는 것을 특징으로 하는
    컴퓨터로 구현되는 방법.
  8. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 결정하는 단계는, 상기 미리 결정된 송신 시간 및 미리 결정된 스위치 시간을 결정할 수 있는 지연들에 관한 정보를 유지하는 룩업 테이블을 액세스하는 단계를 포함하는 것을 특징으로 하는
    컴퓨터로 구현되는 방법.
  9. 제1항 내지 제3항 중 어느 한 항에 있어서,
    상기 컴퓨터화된 기능은 기계 학습 기능인 것을 특징으로 하는 방법.
  10. 컴퓨터화된 기능을 전달하기 위해 다수의 프로그램들을 생성하는 방법을 구현하도록 프로그래밍된 프로세서를 갖는 컴파일러로서,
    각 프로그램은, 로컬 프로그램을 유지하기 위한 명령 저장부를 각각 가지는 복수의 프로세싱 유닛들, 데이터를 유지하기 위한 로컬 프로그램 및 데이터 저장을 실행하기 위한 실행 유닛, 각 프로세싱 유닛의 출력 인터페이스에 접속되고, 각 프로세싱 유닛에 의해 제어 가능한 스위칭 회로에 의해 각 프로세싱 유닛의 입력 인터페이스에 접속 가능한 스위칭 패브릭, 및 동기화 신호를 생성하도록 동작 가능한 동기화 모듈을 포함하는 컴퓨터의 프로세싱 유닛에서 실행되고,
    상기 방법은, 실행 가능한 명령들의 시퀀스를 포함하는 각각의 프로세싱 유닛에 대한 로컬 프로그램을 생성하는 단계; 및
    각각의 프로세싱 유닛에 대해, 각각의 로컬 프로그램의 명령들의 상대적 실행 시간을 결정하는 단계를 포함하며,
    이를 통해, 하나의 프로세싱 유닛에 대해 할당된 로컬 프로그램은, 미리 결정된 송신 시간에 적어도 하나의 데이터 패킷을 송신하라는 송신 명령을 동기화 신호에 비례하여, 그리고 수신 프로세싱 유닛을 위해 예정되지만 목적지 식별자를 갖지 않는 상기 동기화 신호에 비례하여, 미리결정된 지연으로 시행되도록 스케줄링되며, 수신 프로세싱 유닛에 할당된 로컬 프로그램은 미리 결정된 스위치 시간에 스위치 제어 명령을 실행하여 프로세싱 유닛 와이어를 스위칭 패브릭에 연결하여 수신 시간에 데이터 패킷을 수신하도록 스위칭 회로를 제어하기 위해 스케줄링되며,
    상기 컴파일러는, 상기 컴퓨터화된 기능을 나타내는 고정된 그래프 구조 및 미리 결정된 송신 시간 및 미리 결정된 스위치 시간이 각 프로세싱 유닛에 대해 결정될 수 있게 하는 지연들을 유지하는 테이블을 수신하도록 연결되는 것을 특징으로 하는
    컴파일러.
  11. 제10항에 있어서,
    상기 컴퓨터화된 기능은 기계 학습 기능인 것을 특징으로 하는
    컴파일러.
  12. 제10항 또는 제11항에 있어서,
    상기 고정된 그래프 구조는 복수의 노드들을 포함하고, 각 노드는 로컬 프로그램 내의 코드렛(codelet)에 의해 표현되는 것을 특징으로 하는
    컴파일러.
  13. 제10항 또는 제11항에 있어서,
    상기 고정된 그래프 구조는 복수의 노드들을 포함하고, 각 노드는 로컬 프로그램 내의 코드렛에 의해 표현되는 것을 특징으로 하는
    컴파일러.
  14. 비 전송 매체에 기록되고 그리고 컴파일러의 프로세서에 의해 실행될 때 컴퓨터화된 기능을 전달하기 위해 다수의 프로그램을 생성하는 방법을 구현하는 컴퓨터 판독가능한 명령을 포함하는 컴퓨터 프로그램으로서,
    각 프로그램은, 로컬 프로그램을 유지하기 위한 명령 저장부를 각각 가지는 복수의 프로세싱 유닛들, 데이터를 유지하기 위한 로컬 프로그램 및 데이터 저장을 실행하기 위한 실행 유닛, 각 프로세싱 유닛의 출력 인터페이스에 접속되고, 각 프로세싱 유닛에 의해 제어 가능한 스위칭 회로에 의해 각 프로세싱 유닛의 입력 인터페이스에 접속 가능한 스위칭 패브릭, 및 동기화 신호를 생성하도록 동작 가능한 동기화 모듈을 포함하는 컴퓨터의 프로세싱 유닛에서 실행되고,
    상기 방법은, 실행 가능한 명령들의 시퀀스를 포함하는 각각의 프로세싱 유닛에 대한 로컬 프로그램을 생성하는 단계; 및
    각각의 프로세싱 유닛에 대해, 각각의 로컬 프로그램의 명령들의 상대적 실행 시간을 결정하는 단계를 포함하며,
    이를 통해, 하나의 프로세싱 유닛에 대해 할당된 로컬 프로그램은, 미리 결정된 송신 시간에 적어도 하나의 데이터 패킷을 송신하라는 송신 명령을 동기화 신호에 비례하여, 그리고 수신 프로세싱 유닛을 위해 예정되지만 목적지 식별자를 갖지 않는 상기 동기화 신호에 비례하여, 미리결정된 지연으로 시행되도록 스케줄링되며, 수신 프로세싱 유닛에 할당된 로컬 프로그램은 미리 결정된 스위치 시간에 스위치 제어 명령을 실행하여 프로세싱 유닛 와이어를 스위칭 패브릭에 연결하여 수신 시간에 데이터 패킷을 수신하도록 스위칭 회로를 제어하기 위해 스케줄링되는 것을 특징으로 하는
    컴퓨터 프로그램.
KR1020180124595A 2017-10-20 2018-10-18 컴파일러 방법 KR102228501B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1717304.8A GB2569276B (en) 2017-10-20 2017-10-20 Compiler method
GB1717304.8 2017-10-20

Publications (2)

Publication Number Publication Date
KR20190044526A true KR20190044526A (ko) 2019-04-30
KR102228501B1 KR102228501B1 (ko) 2021-03-16

Family

ID=60481709

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180124595A KR102228501B1 (ko) 2017-10-20 2018-10-18 컴파일러 방법

Country Status (8)

Country Link
US (2) US10802536B2 (ko)
EP (1) EP3474141B1 (ko)
JP (1) JP6797878B2 (ko)
KR (1) KR102228501B1 (ko)
CN (1) CN109697186B (ko)
CA (1) CA3021412C (ko)
GB (1) GB2569276B (ko)
TW (1) TWI699700B (ko)

Families Citing this family (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11277455B2 (en) 2018-06-07 2022-03-15 Mellanox Technologies, Ltd. Streaming system
CN109471708B (zh) * 2018-10-12 2023-10-31 北京奇虎科技有限公司 一种任务处理方法、装置及系统
GB2580165B (en) 2018-12-21 2021-02-24 Graphcore Ltd Data exchange in a computer with predetermined delay
US11625393B2 (en) 2019-02-19 2023-04-11 Mellanox Technologies, Ltd. High performance computing system
EP3699770A1 (en) * 2019-02-25 2020-08-26 Mellanox Technologies TLV Ltd. Collective communication system and methods
US11704270B2 (en) 2019-03-27 2023-07-18 Graphcore Limited Networked computer with multiple embedded rings
GB201904267D0 (en) 2019-03-27 2019-05-08 Graphcore Ltd A networked computer with multiple embedded rings
US20220326988A1 (en) * 2019-08-16 2022-10-13 Google Llc Explicit scheduling of on-chip operations
US11750699B2 (en) 2020-01-15 2023-09-05 Mellanox Technologies, Ltd. Small message aggregation
US11252027B2 (en) 2020-01-23 2022-02-15 Mellanox Technologies, Ltd. Network element supporting flexible data reduction operations
US11321607B2 (en) * 2020-04-03 2022-05-03 SiMa Technologies, Inc. Machine learning network implemented by statically scheduled instructions, with compiler
US11631001B2 (en) * 2020-04-10 2023-04-18 SiMa Technologies, Inc. Heterogeneous computing on a system-on-chip, including machine learning inference
US11989581B2 (en) 2020-04-17 2024-05-21 SiMa Technologies, Inc. Software managed memory hierarchy
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
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
US11876885B2 (en) 2020-07-02 2024-01-16 Mellanox Technologies, Ltd. Clock queue with arming and/or self-arming features
US11556378B2 (en) 2020-12-14 2023-01-17 Mellanox Technologies, Ltd. Offloading execution of a multi-task parameter-dependent operation to a network device
US11782757B2 (en) 2021-05-07 2023-10-10 SiMa Technologies, Inc. Scheduling off-chip memory access for programs with predictable execution
US11922237B1 (en) 2022-09-12 2024-03-05 Mellanox Technologies, Ltd. Single-step collective operations

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005032018A (ja) * 2003-07-04 2005-02-03 Semiconductor Energy Lab Co Ltd 遺伝的アルゴリズムを用いたマイクロプロセッサ
US8127111B1 (en) * 2006-04-14 2012-02-28 Tilera Corporation Managing data provided to switches in a parallel processing environment
JP2013069189A (ja) * 2011-09-26 2013-04-18 Hitachi Ltd 並列分散処理方法および並列分散処理システム

Family Cites Families (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3699532A (en) * 1970-04-21 1972-10-17 Singer Co Multiprogramming control for a data handling system
US5434861A (en) 1989-02-02 1995-07-18 Pritty; David Deterministic timed bus access method
US5734826A (en) 1991-03-29 1998-03-31 International Business Machines Corporation Variable cyclic redundancy coding method and apparatus for use in a multistage network
US5408646A (en) 1991-03-29 1995-04-18 International Business Machines Corp. Multipath torus switching apparatus
US5689719A (en) * 1991-06-28 1997-11-18 Sanyo Electric O., Ltd. Parallel computer system including processing elements
KR100304063B1 (ko) 1993-08-04 2001-11-22 썬 마이크로시스템즈, 인코포레이티드 2지점간상호접속통신유틸리티
US5434995A (en) * 1993-12-10 1995-07-18 Cray Research, Inc. Barrier synchronization for distributed memory massively parallel processing systems
GB2303274B (en) 1995-07-11 1999-09-08 Fujitsu Ltd Switching apparatus
US6876652B1 (en) 2000-05-20 2005-04-05 Ciena Corporation Network device with a distributed switch fabric timing system
GB2370381B (en) * 2000-12-19 2003-12-24 Picochip Designs Ltd Processor architecture
US20040172631A1 (en) 2001-06-20 2004-09-02 Howard James E Concurrent-multitasking processor
US7100021B1 (en) 2001-10-16 2006-08-29 Cisco Technology, Inc. Barrier synchronization mechanism for processors of a systolic array
US7221650B1 (en) * 2002-12-23 2007-05-22 Intel Corporation System and method for checking data accumulators for consistency
JP4103994B2 (ja) * 2003-01-31 2008-06-18 富士通コンポーネント株式会社 コンソールスイッチ、これを用いたシステム、経路接続方法及び経路接続プログラム
US7577727B2 (en) * 2003-06-27 2009-08-18 Newisys, Inc. Dynamic multiple cluster system reconfiguration
US7904905B2 (en) 2003-11-14 2011-03-08 Stmicroelectronics, Inc. System and method for efficiently executing single program multiple data (SPMD) programs
CN1266592C (zh) * 2003-11-26 2006-07-26 中国人民解放军国防科学技术大学 依据确定延迟的动态vliw指令调度方法
FR2865290A1 (fr) * 2004-01-21 2005-07-22 Thomson Licensing Sa Procede de gestion de donnees dans un processeur matriciel et processeur matriciel mettant en oeuvre ce procede
US8868790B2 (en) * 2004-02-13 2014-10-21 Oracle International Corporation Processor-memory module performance acceleration in fabric-backplane enterprise servers
ITMI20040309U1 (it) * 2004-06-23 2004-09-23 Dario Toncelli Macchina per la lavorazione di materiale in lastre in particolare di materiale lapideo naturale materiale ceramico e conglomerato
US7635987B1 (en) * 2004-12-13 2009-12-22 Massachusetts Institute Of Technology Configuring circuitry in a parallel processing environment
US7689784B2 (en) * 2005-03-18 2010-03-30 Sony Computer Entertainment Inc. Methods and apparatus for dynamic linking program overlay
US7818725B1 (en) 2005-04-28 2010-10-19 Massachusetts Institute Of Technology Mapping communication in a parallel processing environment
US7561584B1 (en) * 2005-11-09 2009-07-14 Sun Microsystems, Inc. Implementation of a graph property in a switching fabric for fast networking
US8194690B1 (en) 2006-05-24 2012-06-05 Tilera Corporation Packet processing in a parallel processing environment
US8560495B1 (en) * 2006-07-07 2013-10-15 Sybase, Inc. System and method for synchronizing message processing in a continuous processing system
JP5055942B2 (ja) * 2006-10-16 2012-10-24 富士通株式会社 計算機クラスタ
US8001409B2 (en) * 2007-05-18 2011-08-16 Globalfoundries Inc. Synchronization device and methods thereof
GB2471067B (en) 2009-06-12 2011-11-30 Graeme Roy Smith Shared resource multi-thread array processor
GB201001621D0 (en) 2010-02-01 2010-03-17 Univ Catholique Louvain A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms
KR20120070969A (ko) * 2010-12-22 2012-07-02 한국전자통신연구원 애플리케이션 프로세싱 모듈 장치
JP5568048B2 (ja) 2011-04-04 2014-08-06 株式会社日立製作所 並列計算機システム、およびプログラム
US8990497B2 (en) 2012-07-02 2015-03-24 Grayskytech, LLC Efficient memory management for parallel synchronous computing systems
US9116738B2 (en) * 2012-11-13 2015-08-25 International Business Machines Corporation Method and apparatus for efficient execution of concurrent processes on a multithreaded message passing system
US9924490B2 (en) * 2013-10-09 2018-03-20 International Business Machines Corporation Scaling multi-core neurosynaptic networks across chip boundaries
US9733847B2 (en) 2014-06-02 2017-08-15 Micron Technology, Inc. Systems and methods for transmitting packets in a scalable memory system protocol
US20160164943A1 (en) 2014-12-05 2016-06-09 Qualcomm Incorporated Transport interface for multimedia and file transport
TWI580199B (zh) 2015-12-18 2017-04-21 瑞昱半導體股份有限公司 接收裝置及其封包處理方法
JP6450330B2 (ja) 2016-02-03 2019-01-09 日本電信電話株式会社 並列計算処理装置および並列計算処理方法
US20190050020A1 (en) * 2017-08-10 2019-02-14 Qualcomm Incorporated Clock Signal Staggering with Clock Frequency Adjustment
US10963003B2 (en) * 2017-10-20 2021-03-30 Graphcore Limited Synchronization in a multi-tile processing array

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005032018A (ja) * 2003-07-04 2005-02-03 Semiconductor Energy Lab Co Ltd 遺伝的アルゴリズムを用いたマイクロプロセッサ
US8127111B1 (en) * 2006-04-14 2012-02-28 Tilera Corporation Managing data provided to switches in a parallel processing environment
JP2013069189A (ja) * 2011-09-26 2013-04-18 Hitachi Ltd 並列分散処理方法および並列分散処理システム

Also Published As

Publication number Publication date
US11262787B2 (en) 2022-03-01
CA3021412C (en) 2024-03-05
TWI699700B (zh) 2020-07-21
GB201717304D0 (en) 2017-12-06
EP3474141A1 (en) 2019-04-24
CN109697186B (zh) 2023-10-31
KR102228501B1 (ko) 2021-03-16
CA3021412A1 (en) 2019-04-20
JP2019079522A (ja) 2019-05-23
US10802536B2 (en) 2020-10-13
TW201923570A (zh) 2019-06-16
US20190121388A1 (en) 2019-04-25
EP3474141B1 (en) 2022-06-22
GB2569276A (en) 2019-06-19
CN109697186A (zh) 2019-04-30
GB2569276B (en) 2020-10-14
JP6797878B2 (ja) 2020-12-09
US20200150713A1 (en) 2020-05-14

Similar Documents

Publication Publication Date Title
KR102228501B1 (ko) 컴파일러 방법
KR102167059B1 (ko) 멀티-타일 프로세싱 어레이의 동기화
KR102178190B1 (ko) 명령 세트
US10963003B2 (en) Synchronization in a multi-tile processing array
US11416440B2 (en) Controlling timing in computer processing
KR102145457B1 (ko) 방향 인디케이터
CN111352744B (zh) 计算机中的数据交换
US11176066B2 (en) Scheduling messages

Legal Events

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