KR20220051367A - 온칩 오퍼레이션 초기화 - Google Patents

온칩 오퍼레이션 초기화 Download PDF

Info

Publication number
KR20220051367A
KR20220051367A KR1020227009163A KR20227009163A KR20220051367A KR 20220051367 A KR20220051367 A KR 20220051367A KR 1020227009163 A KR1020227009163 A KR 1020227009163A KR 20227009163 A KR20227009163 A KR 20227009163A KR 20220051367 A KR20220051367 A KR 20220051367A
Authority
KR
South Korea
Prior art keywords
hardware
tile
tiles
data
forwarding
Prior art date
Application number
KR1020227009163A
Other languages
English (en)
Inventor
마이클 앨런 군터
라이너 포프
파벨 크라이체프스키
클리포드 비플
Original Assignee
구글 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 구글 엘엘씨 filed Critical 구글 엘엘씨
Publication of KR20220051367A publication Critical patent/KR20220051367A/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/25Routing or path finding in a switch fabric
    • 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/177Initialisation or configuration control
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • G06F30/347Physical level, e.g. placement or routing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/10Packet switching elements characterised by the switching fabric construction
    • H04L49/109Integrated on microchip, e.g. switch-on-chip
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/25Routing or path finding in a switch fabric
    • H04L49/253Routing or path finding in a switch fabric using establishment or release of connections between ports
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/30Peripheral units, e.g. input or output ports
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2115/00Details relating to the type of the circuit
    • G06F2115/06Structured ASICs

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Biophysics (AREA)
  • Neurology (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Geometry (AREA)
  • Logic Circuits (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)

Abstract

다중 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법은, 복수의 하드웨어 타일 중 마지막 하드웨어 타일을 제외한 각 하드웨어 타일을 데이터 포워딩 상태로 구성함으로써 복수의 하드웨어 타일을 통한 데이터 포워딩 경로를 설정하는 단계 -마지막 하드웨어 타일을 제외한 각 하드웨어 타일을 포워딩 상태로 구성하는 것은 하드웨어 타일이 데이터 포워딩 상태에 있는 해당하는 미리 정의된 시간 길이를 지정하는 각각의 포워딩 상태 카운터를 설치하는 것을 포함함-; 상기 데이터 포워딩 경로를 따라, 복수의 하드웨어 타일의 각 하드웨어 타일에 하드웨어 타일에 대한 프로그램 데이터를 포함하는 각각의 프로그램 데이터 패킷을 공급하는 단계; 그리고 복수의 하드웨어 타일의 각 하드웨어 타일에 대해, 각각의 프로그램 데이터를 설치하는 단계를 포함한다.

Description

온칩 오퍼레이션 초기화
본 개시는 집적 회로 오퍼레이션 및 상이한 집적 회로 하드웨어 블록의 초기화 오퍼레이션에 관한 것이다.
프로세서와 마이크로컨트롤러 칩이 전송하는 데이터에는 헤더와 같이 데이터를 보낼 위치를 지정하는 인코딩된 정보가 포함되는 경우가 많다. 따라서 그러한 데이터를 수신하는 각각의 다른 프로세서 또는 마이크로컨트롤러는 헤더를 디코딩하고 수신된 데이터를 저장해야 하는지, 프로세서 또는 마이크로컨트롤러를 초기화하기 위해 설치해야 하는지 또는 또 다른 회로로 전달해야 하는지를 결정하기 위한 디코딩 로직을 포함해야 한다.
일반적으로, 본 개시는 반도체 칩의 초기화 구성에 관한 것으로, 여기서 칩에서 수행되는 오퍼레이션은 명시적으로 스케줄링된다(오퍼레이션은 "결정적(deterministic)"이라고 할 수 있음). 보다 구체적으로, 본 발명은 개별 하드웨어 블록으로 분할된 반도체 칩에 관한 것으로, 여기서 데이터는 명시적 스케줄에 따라 하드웨어 블록 간에 전송된다. 수신된 데이터의 콘텐츠를 기반으로, 설치, 메모리에 저장 또는 수신된 데이터를 다른 하드웨어 블록으로 전달(포워딩)할지 여부를 결정하는 디코딩 로직 또는 유사한 기능을 포함하도록 하드웨어 블록을 구성하는 대신, 하드웨어 블록은 미리 결정된 액션에 따라 데이터를 처리하도록 미리 구성된다. 이러한 방식으로, 하드웨어 블록은 수신되는 데이터의 최종 목적지에 대해 "어그노스틱(agnostic)"인 것으로 특징지어질 수 있다.
일반적으로 일부 양태에서, 본 개시내용의 주제는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법으로 구현되며, 방법은, 복수의 하드웨어 타일 중 마지막 하드웨어 타일을 제외한 각 하드웨어 타일을 데이터 포워딩 상태로 구성함으로써 복수의 하드웨어 타일을 통한 데이터 포워딩 경로를 설정하는 단계 -마지막 하드웨어 타일을 제외한 각 하드웨어 타일을 포워딩 상태로 구성하는 것은 하드웨어 타일이 데이터 포워딩 상태에 있는 해당하는 미리 정의된 시간 길이를 지정하는 각각의 포워딩 상태 카운터를 설치하는 것을 포함함-; 상기 데이터 포워딩 경로를 따라, 복수의 하드웨어 타일의 각 하드웨어 타일에 하드웨어 타일에 대한 프로그램 데이터를 포함하는 각각의 프로그램 데이터 패킷을 공급하는 단계; 그리고 복수의 하드웨어 타일의 각 하드웨어 타일에 대해, 각각의 프로그램 데이터를 설치하는 단계를 포함한다.
방법의 구현은 다음 구성 중 하나 이상을 포함할 수 있다. 예를 들어, 일부 구현에서, 복수의 하드웨어 타일 중 마지막 하드웨어 타일을 제외한 각 하드웨어 타일의 포워딩 상태 카운터는 데이터 포워딩 경로를 통해 전달된 제1 데이터 패킷을 수신할 때 설치된다. 제1 데이터 패킷은 복수의 하드웨어 타일 중 마지막 하드웨어 타일에 대한 프로그램 데이터를 포함하는 프로그램 데이터 패킷을 포함할 수 있다.
일부 구현들에서, 각 하드웨어 타일에 대한 각각의 포워딩 상태 카운터를 설치하는 것은 하드웨어 타일의 트리거 테이블에서 포워딩 상태 카운터를 정의하는 것을 포함한다. 각 하드웨어 타일의 포워딩 상태 카운터가 해당 미리 정의된 시간 길이에 도달하면 트리거 테이블은 하드웨어 타일에 대한 프로그램 데이터 설치를 트리거하고 하드웨어 타일이 데이터 포워딩 상태를 종료하게 할 수 있다. 각각의 포워딩 상태 카운터를 포함하는 각 하드웨어 타일에 대해, 포워딩 상태 카운터의 해당하는 미리 정의된 시간 길이는 데이터 포워딩 경로의 후속 하드웨어 타일의 수(number)의 함수이다.
일부 구현에서, 복수의 하드웨어 타일의 각 하드웨어 타일은 하드웨어 타일에 대한 각각의 프로그램 데이터를 로컬 메모리에 저장한다.
일부 구현들에서, 각 하드웨어 타일은 적어도 하나의 프로그램 데이터 패킷을 데이터 포워딩 경로의 적어도 하나의 다른 하드웨어 타일로 전달하는 각각의 포워딩 상태 카운터를 포함한다.
일부 구현에서, 각 하드웨어 타일은 회로 요소의 시스톨릭 어레이를 포함한다.
일부 구현에서, 다중 타일은 1차원 또는 2차원 어레이로 배열된다.
일부 구현에서, 방법은 하드웨어 타일에 설치된 프로그램 데이터에 의해 정의된 오퍼레이션을 하드웨어 타일이 시작할 때까지 해당하는 미리 정의된 시간 길이를 지정하는 각각의 킥오프 카운터를 복수의 하드웨어 타일 중 적어도 일부에 설치하는 단계를 더 포함한다. 복수의 하드웨어 타일 중 마지막 하드웨어 타일을 제외한 각 하드웨어 타일의 각 킥오프 카운터는 제1 데이터 패킷을 수신할 때 설치될 수 있다. 각 킥오프 카운터에 대해 미리 정의된 시간 길이는 다를 수 있다. 각 킥오프 카운터에 대해 미리 정의된 시간 길이는 데이터 포워딩 경로에 있는 하드웨어 타일 수(number)의 함수일 수 있다. 복수의 하드웨어 타일이 각각의 프로그램 데이터를 동시에 실행하도록 각각의 킥오프 상태 카운터에 대한 미리 정의된 시간 길이가 정의될 수 있다. 각 하드웨어 타일의 각각의 킥오프 카운터를 설치하는 것은 하드웨어 타일의 트리거 테이블에서 킥오프 카운터를 정의하는 것을 포함할 수 있다.
일반적으로 다른 양태에서, 본 개시물의 주제는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법으로 구현될 수 있으며, 방법은, 상기 복수의 타일 중 마지막 하드웨어 타일을 제외한, 상기 복수의 타일의 각 하드웨어 타일을 통해 데이터 포워딩 경로를 설정하는 단계를 포함하고, 상기 데이터 포워딩 경로를 설정하는 단계는, (a) 타일에 대한 프로그램 데이터를 설치하고, (b) 타일을 포워딩 상태로 구성하고, (c) 하드웨어 타일이 데이터 포워딩 상태에 있는 해당하는 미리 정의된 시간 길이를 지정하는 킥오프 상태 카운터를 설치함으로써, 데이터 포워딩 경로의 각 하드웨어 타일을 순차적으로 구성하는 단계를 포함한다.
이러한 방법의 구현에는 다음 구성 중 하나 이상이 포함될 수 있다. 예를 들어, 일부 구현에서, 데이터 포워딩 경로의 특정 타일에 대해, 미리 정의된 시간 길이는 아직 프로그램 데이터가 설치되지 않은 복수의 타일 내의 타일 수의 함수이다.
일부 구현에서, 각 킥오프 상태 카운터가 해당하는 미리 정의된 시간 길이에 도달하면, 상기 킥오프 상태 카운터가 설치된 타일은 상기 타일에 설치된 프로그램 데이터에 따라 오퍼레이션을 실행하기 시작한다.
다양한 구현에는 다음 장점 중 하나 이상이 포함된다. 예를 들어, 일부 구현에서, 여기에 설명된 프로세스는 내부 하드웨어 블록이 데이터 소스에 직접 배선될 필요 없이 구성될 하드웨어 블록의 어레이 내에 내부에 위치한 다중 하드웨어 블록의 구성을 허용한다. 일부 구현에서, 여기에 설명된 프로세스는 데이터 패킷 내의 목적지 데이터를 인코딩할 필요 없이 하드웨어 블록의 구성을 허용한다. 일부 구현에서, 여기에 설명된 프로세스는 하드웨어 블록에 디코딩 로직을 설치할 필요 없이 하드웨어 블록이 구성되는 것을 허용한다.
하나 이상의 실시예의 세부사항은 첨부 도면 및 아래의 설명에 기재되어 있다. 다른 특징 및 이점은 설명, 도면 및 청구범위로부터 명백할 것이다.
도 1은 스케줄링된 오퍼레이션들에 따라 오퍼레이션하도록 구성된 예시적인 집적 회로 장치를 예시하는 개략도이다.
도 2는 구성 데이터로 하드웨어 타일을 초기화하기 위한 예시적인 프로세스를 예시하는 흐름도이다.
도 3은 하드웨어 타일 그룹을 초기화하기 위한 프로세스의 예를 예시하는 흐름도이다.
도 4는 트리거 테이블의 예를 나타내는 개략도이다.
도 5는 스케줄링된 오퍼레이션에 따라 오퍼레이션(동작)하도록 구성될 수 있는 특수 목적 로직 회로의 예를 예시하는 개략도이다.
도 6은 도 5의 ASIC 칩에 사용하기 위한 타일의 일 예를 나타내는 개략도이다.
도 7a, 8a, 9a, 10a, 11, 12a 및 13a는 ASIC에 의해 구현되는 예시적인 프로세스에서 상이한 시간에 ASIC을 통한 데이터 흐름의 개요를 예시하는 개략도이다.
도 7b, 8b, 9b, 10b, 12b 및 13b는 도 7a, 8a, 9a, 10a, 12a 및 13a와 연관된 시간에 ASIC의 단일 타일 내 데이터 흐름의 세부사항을 예시하는 개략도이다.
일반적으로, 본 개시는 반도체 칩의 초기화 구성에 관한 것으로, 칩 상에서 수행되는 오퍼레이션은 명시적으로 스케줄링된다(오퍼레이션은 "결정적(deterministic)"이라고 말할 수 있음). 일 예에서, 반도체 칩은 개별 하드웨어 블록으로 분할될 수 있으며, 여기서 데이터는 명시적 스케줄에 따라 하드웨어 블록 사이에서 전송된다. 보다 구체적으로, 개별 하드웨어 블록은 개별화된 오퍼레이션 스케줄에 따라 동작하여 반도체 칩 전체에서 실행되는 통합 프로그램을 수행할 수 있다. 다시 말해, 개별 하드웨어 블록은 예를 들어 제어 신호에 응답하여 또는 프로세스 명령의 예정되지 않은 순차적 목록에 따라 동작을 실행하기보다는 클록(예를 들어, 카운터)에 따라 스케줄링된 시간에 각각의 동작을 실행한다. 각 하드웨어 블록은 다른 하드웨어 블록에 의해 수행되는 태스크와 독립적인 태스크의 특정 세트를 수행하도록 구성된 칩 상의 전기 회로(예: 로직 회로)의 서브세트와 같은 복제된(replicated) 로직의 관련 세트를 나타낸다. 이러한 오퍼레이션(연산)에는 데이터 포워딩 오퍼레이션, 초기화 오퍼레이션, 행렬 오퍼레이션, 벡터 오퍼레이션, 스칼라 오퍼레이션, 로직 오퍼레이션, 메모리 액세스 오퍼레이션, 외부 통신 오퍼레이션, 또는 이들의 조합이 포함되지만 이에 국한되지는 않는다.
(예: 하드웨어 블록에서 프로그램 오퍼레이션을 초기화하기 위해) 수신된 데이터가 설치되어야 하는지, 메모리에 저장되어야 하는지 또는 다른 하드웨어 블록으로 전달되어야 하는지를 결정하는 디코딩 로직 또는 유사한 기능을 포함하도록 하드웨어 블록을 구성하는 대신, 본 개시의 하드웨어 블록은 대신에 구체적인 방식으로 데이터를 처리하도록 미리 구성된다. 예를 들어, 하드웨어 블록은 (예: 하드웨어 블록에서 프로그램 오퍼레이션을 초기화하기 위해) 수신된 데이터를 설치하거나, 수신된 데이터를 메모리에 저장하거나, 수신된 데이터를 다른 하드웨어 블록으로 전달하도록 미리 구성될 수 있다. 이러한 방식으로, 하드웨어 블록은 수신된 데이터와 독립적으로 특정 방식으로 데이터를 처리하도록 미리 구성되는 것으로 특징지어질 수 있다. 하드웨어 블록은 오퍼레이션 스케줄의 실행 동안 미리 정의된 시간에 특정 방식으로 데이터를 처리하도록 미리 구성될 수 있다. 즉, 하드웨어 블록은 미리 정의된 시간에 데이터를 처리하는 방식을 변경하도록 구성될 수 있다.
각 하드웨어 블록은 하드웨어 블록과 관련된 개별 오퍼레이션 스케줄을 실행한다. 각 하드웨어 블록에 대한 개별 스케줄은 함께 칩 전체에서 실행되는 완전한 프로그램(예: 신경망 오퍼레이션)을 나타낸다. 그러나 이러한 오퍼레이션을 수행하기 전에 수행할 특정 오퍼레이션을 지정하는 프로그램 데이터가 각 하드웨어 블록에 전달되어 설치된다. 디코딩 로직을 포함하지 않고 각 하드웨어 블록에 프로그램 데이터를 제공하기 위해, 한 가지 옵션은 프로그램 데이터 소스를 각 블록에 직접 연결하는 것이다. 많은 수의 하드웨어 블록의 경우 배선의 양(amount of wiring)은 상당한 공간을 필요로 하고 솔루션으로 사용할 수 없게 될 수 있다.
대안적으로, 본 개시에서 설명된 바와 같이, 하드웨어 블록의 일부만이(예를 들어, 블록의 2차원 어레이에서 최외곽 하드웨어 블록) 프로그램 데이터의 소스에 직접 연결된다. 어레이 내부에 위치한 하드웨어 블록에 도달하기 위해, 하드웨어 블록 그룹은 각 그룹이 내부 블록에 대한 데이터 포워딩(전달) 경로를 설정하도록 데이터 포워딩 상태에 놓일 수 있다. 포워딩 상태의 각 하드웨어 블록은 해당 하드웨어 블록에 특정한 미리 결정된 시간 후에 새로운 비-데이터(non-data) 포워딩 상태로 자동으로 재구성될 수 있다. 예를 들어, 하나 이상의 하드웨어 블록은 하드웨어 블록에서 수신된 데이터를 저장하는 데이터 저장 상태로 자동 재구성될 수 있다. 대안적으로 또는 추가로, 하나 이상의 하드웨어 블록은 하드웨어 블록에 의해 실행될 프로그램을 초기화하는 데이터 초기화 상태로 자동 재구성될 수 있으며, 여기서 프로그램은 수신된 데이터에 의해 정의된다. 경우에 따라 하드웨어 블록은 미리 결정된 카운터 시간에 프로그램 데이터에 지정된 스케줄링된 오퍼레이션을 수행할 수 있다.
일부 구현에서, 하드웨어 블록을 포함하는 반도체 칩은 기계 학습 오퍼레이션을 수행하도록 설계된 주문형 집적 회로(ASIC)이다. ASIC은 예를 들어 특정 용도를 위해 맞춤화되는 집적 회로(IC)를 포함한다. 예를 들어, ASIC은 예를 들어 심층 신경망, 기계 번역, 음성 인식, 또는 기타 기계 학습 알고리즘의 일부로서 이미지의 객체를 인식하는 것을 포함하는 기계 학습 모델의 오퍼레이션을 수행하도록 설계될 수 있다. 예를 들어 신경망의 가속기로 사용될 때 ASIC은 신경망에 대한 입력을 수신하고 입력에 대한 신경망 추론을 계산할 수 있다. 신경망 계층에 대한 데이터 입력, 예를 들어 신경망에 대한 입력 또는 신경망의 다른 계층의 출력은 활성화 입력이라고 할 수 있다. 추론은 신경망의 계층과 관련된 가중치 입력의 각 세트에 따라 계산될 수 있다. 예를 들어, 계층의 일부 또는 전부는 활성화 입력 세트를 수신하고 계층에 대한 가중치 입력 세트에 따라 활성화 입력을 처리(프로세싱)하여 출력을 생성할 수 있다. 또한 신경망 추론을 계산하기 위해 수행되는 계산 오퍼레이션의 반복적인 특성은 명시적으로 스케줄링된 칩 오퍼레이션에 도움이 된다.
도 1은 본 개시에 따른 집적 회로 칩(10)의 단순화된 예를 도시하는 개략도이다. 칩(10)은 범용 집적 회로 또는 특수 목적 집적 회로일 수 있다. 예를 들어, 칩(10)은 ASIC, FPGA( field programmable gate array), GPU(graphics processing unit), 또는 임의의 다른 적절한 집적 회로일 수 있다. 칩(10)은 어레이로 배열된 복수의 하드웨어 블록(14)("A", "B" 및 "C"로 표시됨)(본 명세서에서 "타일(tile)"이라고도 함)을 포함한다. 하드웨어 타일(14)은 데이터 버스(16)를 사용하여 서로 연결(커플링)될 수 있다. 비록 3개의 하드웨어 타일(14)만이 도 1에 도시되어 있지만, 칩(10)은 특히, 예를 들어, 10, 20, 30, 40, 50, 100, 또는 200과 같은 다른 수의 하드웨어 타일을 포함할 수 있다. 또한, 하드웨어 타일(14)이 선형 어레이로 배열되는 것으로 도시되어 있지만, 하드웨어 타일(14)은 다중 행 및 다중 열을 갖는 2차원 어레이와 같은 다른 구성으로도 배열될 수 있다. 칩(10)은 또한 통신 인터페이스(12)를 포함한다. 통신 인터페이스(12)는 데이터 버스(17)를 사용하여 적어도 제1 하드웨어 타일(14)(예를 들어, 타일 A)에 연결된다. 통신 인터페이스(12)는, 예를 들어, 직렬 변환기(serializer)/역직렬 변환기(deserializer)(SerDes) 인터페이스 및 범용 입력/출력(GPIO) 인터페이스의 하나 이상의 세트를 포함할 수 있다. SerDes 인터페이스는 ASIC(10)에 대한 데이터(예를 들어, 여기에 설명된 하드웨어 타일에 대한 구성 데이터 또는 프로그램 데이터)를 수신하고 ASIC(10)에서 외부 회로로 데이터를 출력하도록 구성된다. 칩(10)은 예시 및 설명를 위해 단순화된 방식으로 도시되어 있다. 그러나, 일부 구현에서, 칩(10)은 칩(10)의 목적에 적합한 메모리 및 기타 회로와 같은 추가 컴포넌트를 포함할 것이다.
하드웨어 타일(14)은 다른 하드웨어 타일(14)에 의해 수행되는 태스크와 독립적인 태스크의 특정 세트를 수행하도록 설계된 칩(10) 상의 전기 회로(예를 들어, 로직 회로)의 서브세트와 같은 복제된 로직 세트를 나타낸다. 각 하드웨어 타일(14)은 동일하거나 상이한 유형의 회로를 나타낼 수 있으며, 예를 들어 하드웨어 타일 A, B 및 C는 기계 학습 기능을 실행하도록 설계된 특수 목적 칩의 타일을 나타낼 수 있다(아래에서 더 자세히 설명됨). 예를 들어, 하드웨어 타일 A, B 및 C는 행렬 오퍼레이션(연산)을 수행하도록 구성된 신경망의 계산 노드를 나타낼 수 있다.
하드웨어 타일(14)의 오퍼레이션은 칩(10) 상의 공통 클록 신호에 따라 미리 정해진 시간에 수행될 수 있다. 각 하드웨어 타일(14)은 자신의 개별화된 오퍼레이션 스케줄에 따라 작동한다. 오퍼레이션 스케줄은 각각 칩(10)이 전체적으로 실행할 프로그램(예: "서브 프로그램")의 일부를 나타내고, 각 오퍼레이션 스케줄은 해당 개별 하드웨어 타일(14)에 의해 실행될 프로그램의 해당 부분을 나타낸다. 오퍼레이션 스케줄은 미리 결정된 카운터 값에서 하드웨어 타일(14)에 의해 실행될 프로그램 동작 세트를 포함한다. 다시 말해서, 오퍼레이션 스케줄은 미리 스케줄링된 "칩 시간(chip times)"에 특정 하드웨어 타일(14)에 의해 실행될 특정 오퍼레이션(예를 들어, 도 4 참조)을 트리거하는 타이머의 목록(리스트)으로 생각될 수 있다. 예를 들어, 각 스케줄은 카운터 값에서 실행될 관련 오퍼레이션과 함께 실행 카운터 값(예: 실행 시간)의 목록을 포함할 수 있다. 일부 예들에서, 각각의 오퍼레이션은 스케줄링된 카운터 값에서 특정 하드웨어 타일(14)에 의해 실행될 오퍼레이션을 식별하는 오퍼레이션 코드와 같은 스케줄링된 카운터 값 및 데이터에 의해 표현된다. 하드웨어 타일(14)에 의해 실행되는 오퍼레이션은 다른 하드웨어 타일에 의해 실행되는 오퍼레이션과 조정(coordinated)될 수 있다. 오퍼레이션 스케줄은 아래에서 더 자세히 설명되는 "트리거 테이블"을 사용하여 각 타일에 구현될 수 있다.
도 1에 도시된 바와 같이, 각 하드웨어 타일(14)은 제어 회로(18), 로컬 메모리(20), 및 하나 이상의 오퍼레이션 유닛(22)을 포함할 수 있다. 일부 구현에서, 오퍼레이션 스케줄에 의해 지정된 프로그램은 하드웨어 타일(14)의 로컬 메모리(20)에 저장될 수 있다. 오퍼레이션 유닛(22)은 특정 계산, 예를 들어 덧셈, 뺄셈, 곱셈, 로직 오퍼레이션 등을 수행하도록 구성된 전기 회로를 나타낸다. 제어 회로(18)는 메모리(20)에 저장된 프로그램의 오퍼레이션을 읽고 실행하도록 구성될 수 있다. 예를 들어, 제어 회로(18)는 메모리(20), 입력 버퍼 또는 버스(16) 및 스케줄링된 오퍼레이션을 실행하기 위한 적절한 계산 유닛(오퍼레이션 유닛)(22) 사이에서 데이터를 라우팅하는 멀티플렉서 및 플립플롭과 같은 제어 요소를 포함할 수 있다. 여기에 언급된 바와 같이, 프로그램의 오퍼레이션 스케줄은 특정 카운터 값에서 특정 기능의 실행을 시작하도록 제어 회로(18)를 트리거하는 일련의 타이머 역할을 할 수 있다. 따라서, 오퍼레이션 스케줄은 스케줄링된 시간에 스케줄링된 오퍼레이션을 실행하기 위해 하드웨어 타일(14) 내의 데이터를 적절한 계산 유닛(22)으로 라우팅하도록 제어 회로(18)의 제어 요소를 트리거할 수 있다.
여기에 설명된 바와 같이, 하드웨어 타일에 대한 오퍼레이션 스케줄을 정의하는 프로그램 데이터는 먼저 각 하드웨어 타일(14)에 제공되고 초기화되어야 한다. 통신 인터페이스(12)에 직접 결합되지 않은 타일에 도달하기 위해, 하드웨어 타일(14)의 그룹(예를 들어, 타일 A 및 B)은 데이터 포워딩 경로를 설정하기 위해 데이터 포워딩(전달)에 개별적으로 배치될 수 있다. 개별 타일(14)에 대한 프로그램 데이터는 통신 인터페이스(12)로부터 포워딩 경로를 따라 전송될 수 있다. 각 하드웨어 타일(14)이 대응하는 프로그램 데이터를 수신하면, 타일(14)은 미리 결정된 양의 시간 후에 새로운 비-데이터 포워딩 상태로 자동으로 재구성될 수 있다. 이 새로운 상태에서, 타일(14)은 프로그램 데이터에 의해 정의된 오퍼레이션을 실행하거나 대안적으로 어떤 다른 기능을 수행하도록 초기화될 수 있다.
도 2는 미리 정의된 프로그램을 실행하기 위해 하드웨어 타일을 로딩 및 초기화하기 위한 예시적인 프로세스(30)를 도시하는 흐름도이다. 프로세스(30)는 도 1에 도시된 예시적인 칩(10)과 관련하여 설명되지만 하드웨어 타일 어레이를 포함하는 다른 칩에도 적용할 수 있다. 이 개시의 목적을 위해, 구성 데이터 패킷은 타일이 상태를 변경하게 하는 구성 데이터를 포함하며, 예를 들어 타일이 수신된 데이터 패킷의 데이터를 판독하도록 작동 가능한 상태에서 타일이 수신된 데이터를 전달(포워딩)하도록 작동 가능한 상태로 변경하게 하는 구성 데이터, 또는 타일이 수신된 데이터 패킷을 포워딩하도록 동작가능한 상태로부터 타일이 수신된 데이터 패킷의 데이터를 판독하도록 동작가능한 상태로 변경하게 하는 구성 데이터를 포함한다. 본 개시의 목적을 위해, 프로그램 데이터 패킷은 하드웨어 타일에 대한 오퍼레이션 스케줄을 정의하는 프로그램 데이터를 포함한다.
제1 단계(32)에서, 하드웨어 타일(14)의 어레이에서 하드웨어 타일(14)의 그룹(예를 들어, 타일 A, B 및 C)을 따라 데이터 포워딩 경로가 설정된다. 데이터 포워딩 경로를 설정함으로써, 통신 인터페이스(12)로부터의 데이터는 통신 버스(16)에 의해 인터페이스(12)에 직접 연결(커플링)되지 않은 내부 타일(14)에 도달할 수 있다. 데이터 포워딩 경로를 설정하는 것은 어레이의 마지막 하드웨어 타일(예를 들어, 하드웨어 타일 C)을 제외하고 각 하드웨어 타일(14)이 대응하는 미리 정의된 시간 양 동안 포워딩 상태에 있도록 구성하는 것을 포함한다(33). 포워딩 상태에 있는 동안, 타일(14)은 수신된 데이터 패킷을 하나 이상의 데이터 링크를 통해 데이터 포워딩 경로의 다른 타일(14) 중 하나 이상으로 포워딩하도록 동작가능하다.
배열(어레이)의 마지막 하드웨어 타일을 제외한 각 하드웨어 타일(14)을 포워딩 상태로 구성하는 프로세스(33)는 마지막 타일(14)을 제외하고 타일(14)을 포워딩 상태에 있도록 구성하는 대응하는 구성 데이터를 각각의 하드웨어 타일(14)에 연속적으로 전송하는 것을 포함한다. 구성 데이터 전송은 여러 가지 방법으로 달성할 수 있다. 예를 들어, 일부 구현에서 구성 데이터를 전송하는 것은 어레이의 제1 타일에 다중 헤더를 갖는 단일 데이터 패킷을 전송하는 것을 포함한다. 데이터 패킷의 각 헤더에는 타일이 상태를 변경하도록 구성하는 타일에 구애받지 않는 데이터가 포함될 수 있다. 데이터 패킷을 수신하면 어레이의 제1 타일이 데이터 패킷의 제1 헤더를 읽고 제1 헤더의 구성 데이터를 기반으로 상태를 변경한다. 예를 들어, 구성 데이터는 타일의 상태를 포워딩 상태로 변경할 수 있다. 그 다음, 데이터 패킷은 어레이의 다음(두 번째) 타일로 제1 타일에 의해 전달될 수 있으며, 여기서 두 번째(제2) 타일은 데이터 패킷의 두 번째 헤더를 읽고 두 번째 헤더의 구성 데이터에 기초하여 상태를 변경한다. 예를 들어, 구성 데이터는 두 번째 타일의 상태를 포워딩 상태로 변경할 수 있다. 이는 어레이의 각 타일에 대해 또는 N-타일 어레이의 처음 N-1 타일에 대해서만 계속될 수 있다.
일부 구현에서, 개별 데이터 패킷이 타일로 전송되고, 각 데이터 패킷은 자체 구성 데이터를 가진다. 예를 들어, 구성 데이터를 갖는 제1 데이터 패킷은 제1 타일로 전송될 수 있고, 그 후에 제1 타일은 구성 데이터를 설치할 수 있다(예를 들어, 제1 타일 상태를 포워딩 상태로 변경하기 위해). 그 다음, 구성 데이터를 갖는 제2 데이터 패킷이 제1 타일로 전송될 수 있고, 제1 타일은 제2 데이터 패킷을 어레이의 제2 타일로 전송한다. 제2 데이터 패킷을 수신하면, 제2 타일은 (예를 들어, 제2 타일 상태를 포워딩 상태로 변경하기 위해) 구성 데이터를 설치할 수 있다. 이는 어레이의 각 타일에 대해 또는 N-타일 어레이의 처음 N-1 타일에 대해서만 계속될 수 있다.
하드웨어 타일 A, B, 및 C를 따라 포워딩 데이터 경로를 설정하는 예시적인 프로세스가 도 3의 시간 흐름도에도 도시되어 있다. 예를 들어, 예에서, 통신 인터페이스(12)와 같은 데이터 소스는 시간(t1)에서 도 1에 도시된 제1 하드웨어 타일 A에 구성 데이터를 포함하는 제1 데이터 패킷을 전송함으로써 시작할 것이다. 구성 데이터를 포함하는 제1 데이터 패킷을 수신하면, 제1 하드웨어 타일 A는 제1 데이터 패킷을 저장하지 않는다. 대신, 제1 데이터 패킷 수신에 응답하여, 제1 하드웨어 타일 A는 데이터 포워딩 상태에서 동작하도록 구성된다. 데이터 포워딩 상태에서 하드웨어 타일 A는 수신된 데이터를 로컬 메모리에 저장하지 않고 수신한 데이터를 전달한다. 예를 들어, 구성 데이터는 타일 A가 타일 B와 같은 어레이의 다음 인접 타일로 데이터를 전달하도록 구성되도록 할 수 있다. 따라서 구성 데이터는 제1 타일 A에 설치될 때 제1 타일이 포워딩 상태(전달 상태)에 놓이도록 하는 데이터를 포함한다. 제1 하드웨어 타일 A는 "listen for configuration packet" 상태로 설정되어 있으므로 제1 데이터 패킷을 읽을 수 있다. 즉, 제1 하드웨어 타일 A는 제1 하드웨어 타일에 도착하는 데이터 패킷을 읽도록 이 시점에서 이미 구성되어 있다. 각 타일(14)에 대한 이러한 구성 상태는 일부 구현들에서 칩(10)이 리셋되는 리셋 오퍼레이션 후에 설정될 수 있다. 따라서 전송된 제1 패킷, 즉 "데이터 포워딩 상태"를 구성하는 패킷에는 단순히 데이터를 전달하고 "리스닝(listening)"을 중지하도록 타일을 구성하는 타일에 구애받지 않는 데이터(tile-agnostic data)가 포함된다.
더 일반적으로, 하드웨어 타일 어레이의 각 하드웨어 타일은 "구성 패킷에 대한 리스닝(listening)" 상태로 지칭되는 것으로 초기화될 수 있으며, 본 명세서에서는 "리스닝(listening)" 상태로도 지칭된다. 위에서 설명된 바와 같이, 이러한 구성 상태에 대한 리스닝은 칩(10)이 리셋되는 리셋 오퍼레이션 후에 구현될 수 있다. 구성 상태를 위한 리스닝에서 데이터 패킷을 수신하면, 리스닝 상태의 각 타일은 헤더를 읽고 "소비(consume)"하며, 이는 타일이 상태를 변경, 예를 들어 포워딩 상태로 전환하고 구성 데이터에 대한 "리스닝(listening)"을 중지하도록 구성하는 타일에 구애받지 않는 데이터를 포함한다. 따라서 리스닝 상태(listening state)에 있도록 구성된 타일은 디코딩 로직이 필요하지 않을 수 있다. 또한, 일부 구현에서, 각 블록이 하나의 헤더를 소비하기 때문에, 특정 상태 변경 오퍼레이션을 위한 경로를 따라 하드웨어 블록이 있는 만큼 어레이에 제공된 타일 구성 데이터를 포함하는 헤더가 많다는 점에 유의한다. 예를 들어, (예: N개의 타일로 구성된 포워딩 경로 생성) 동일한 방식으로 N개의 타일을 변경하려면 N개의 순차 데이터 패킷의 스트링을 전송해야 할 수 있으며, 각각은 타일을 다른 상태로 변경하게 하는 구성 데이터(예: 타일이 리스닝 상태에서 포워딩 상태로 변경되도록 하는 구성 데이터)를 포함한다.
따라서, 제1 데이터 패킷을 전송한 후, 데이터 소스(예를 들어, 통신 인터페이스(12))는 시간 t2 에서 구성 데이터를 포함하는 제2 데이터 패킷을 제1 하드웨어 타일 A로 전송한다. 하드웨어 타일 A가 포워딩 상태에 있기 때문에 타일 A는 두 번째 데이터 패킷을 어레이의 다른 타일로 전달한다. 예를 들어, 타일 A는 제2 데이터 패킷을 하드웨어 타일 B로 전달할 수 있다. 구성 데이터를 포함하는 제2 데이터 패킷을 수신하면, 리스닝 상태에 있는 제2 하드웨어 타일 B는 제2 데이터 패킷을 저장하지 않는다. 대신, 제2 데이터 패킷을 수신하고 판독하는 것에 응답하여, 제2 하드웨어 타일 B는 데이터 포워딩 상태에서 동작하도록 구성된다. 데이터 포워딩 상태에서 하드웨어 타일 B는 수신된 데이터를 로컬 메모리에 저장하지 않고 수신한 데이터를 전달한다. 예를 들어, 제2 데이터 패킷 내의 구성 데이터는 타일 B가 타일 C와 같은 어레이의 다음 인접 타일로 데이터를 전달하도록 구성되도록 할 수 있다.
전술한 관점에서, 타일 A, B는 모두 포워딩 상태에 있고, 하드웨어 타일 A, B, C를 따라 데이터 포워딩 경로를 설정한다. 하드웨어 타일 C는 어레이 내의 마지막 타일이기 때문에 하드웨어 타일 C를 포워딩 상태로 구성할 필요가 없다. 오히려, 타일 C는 본 명세서에 설명된 바와 같이 스케줄링된 오퍼레이션을 실행하기 위한 프로그램 데이터를 수신 및 설치할 준비가 된 "리스닝" 상태로 구성된 채로 유지될 수 있다.
나머지 하드웨어 타일에서도 프로그램 데이터를 수신하고 설치하는 것이 바람직할 수 있으므로, 데이터 포워딩 상태로 구성된 하드웨어 타일은 미리 정의된 시점에서 데이터 포워딩 상태를 순차적으로 종료하도록 스케줄링된다. 예를 들어, 타일 A 및 B는 마지막 하드웨어 타일(예: 하드웨어 타일 C)이 프로그램 데이터를 수신하고 설치한 후 각각의 데이터 포워딩 상태를 순차적으로 종료하도록 구성될 수 있다. 이러한 방식으로 포워딩 상태의 각 하드웨어 타일은 해당 하드웨어 타일을 위한 프로그램 데이터를 수신하고 설치할 수 있는 상태로 다시 이동한다.
포워딩 상태를 종료하도록 하드웨어 타일을 구성하는 것은 예를 들어 포워딩 상태에 배치된 각각의 타일에 각각의 포워딩 상태 카운터를 설치하는 것을 포함할 수 있다. 타일에 포워딩 상태 카운터를 설치하는 것은 예를 들어 타일이 구성 데이터 패킷을 수신할 때 리스닝 상태에서 포워딩 상태로의 타일 상태 변경의 일부로 발생할 수 있다. 포워딩 상태 카운터에는 미리 정의된 시간이 지날 때까지 카운트다운(또는 업)하는 카운터가 포함된다. 포워딩 상태 카운터가 카운트다운(또는 업)되는 동안 카운터가 설치된 하드웨어 타일은 포워딩 상태를 유지한다. 포워딩 상태 카운터가 미리 정의된 시간에 도달하면 카운터가 트리거를 유발하여 하드웨어 타일이 포워딩 상태를 종료하도록 할 수 있다. 예를 들어, 일부 구현에서,
타일(14)에서 수신된 임의의 새로운 데이터 패킷에 대해, 데이터 패킷이 타일(41)의 로컬 메모리(예: 메모리(20))에 저장되도록 하드웨어 타일(14)이 재구성되게 하는 트리거가 발생할 수 있다. 대안적으로 또는 추가로, 트리거는 하드웨어 타일(14)이 메모리로부터 데이터를 설치하거나 타일(14)이 수신하는 임의의 새로운 데이터 패킷으로부터 데이터를 설치하도록 재구성하게 할 수 있다. 대안적으로 또는 추가로, 트리거는 하드웨어 타일(14)이 재구성되게 하여 타일이 리스닝 상태로 복귀하도록 할 수 있다. 타일(14)에 설치된 카운터는 칩(10) 상의 글로벌 클록 또는 타일(14)에서 실행되는 로컬 클록과 동기화될 수 있다. 미리 정의된 기간(시간)은 다중 클록 사이클을 포함할 수 있다. 예를 들어, 미리 정의된 기간은 무엇보다도 2, 5, 10, 20, 50 또는 100 클록 사이클을 포함할 수 있다. 미리 정의된 기간은 [2, 100] 클록 사이클 범위, 예를 들어 20 클록 사이클과 같은 범위 [10, 50] 클록 사이클에 있을 수 있다. 카운터에 대한 미리 정의된 기간은 구성 데이터 패킷을 수신할 때 타일이 읽는 구성 데이터에 정의될 수 있다.
포워딩 상태(예를 들어, 타일 A 및 B)로 구성된 하드웨어 타일(14)은 한번에 각각의 포워딩 상태를 종료해서는 안 된다. 대신, 어레이의 하드웨어 타일(14)은 포워딩 데이터 경로를 공유하기 때문에 각각은 다른 시간에 프로그램 데이터 패킷을 수신한다. 따라서 각 타일은 다른 시간에 포워딩 상태를 종료하고 각 포워딩 상태 카운터에 대해 미리 정의된 시간 길이가 다르다. 각 포워딩 상태 카운터에 대해 지정된 미리 정의된 시간 길이는 현재 하드웨어 타일이 데이터 패킷을 전달하는 데이터 포워딩 경로 내의 하드웨어 타일 수의 함수이다. 예를 들어, 도 1의 타일 A, B, C에 의해 설정된 데이터 포워딩 경로에서, 제1 타일 A가 데이터를 전달(포워딩)하는 두 개의 하드웨어 타일(B 및 C)이 있다. 따라서, 타일 A의 포워딩 상태 카운터와 관련된 미리 정의된 기간은 프로그램 데이터를 타일 B와 C에 전송하고 프로그램 데이터를 설치하는 시간의 함수이다. 도 3을 참조하면, 예를 들어, 제1 하드웨어 타일 A가 포워딩 상태로 구성된 때(t1 에서)와 제1 하드웨어 타일 A가 타일 A에 설치되도록 의도된 데이터 프로그램 패킷을 수신할 때(t5에서 ) 사이의 차이(즉 t5 - t1 의 시간)와 동일한 시간에 발생할 수 있다. 유사하게, 도 1의 타일 A, B, C에 의해 설정된 데이터 포워딩 경로에서, 두 번째 타일 B가 데이터를 전달하는 하나의 하드웨어 타일(C)이 있다. 따라서 타일 B의 포워딩 상태 카운터와 관련된 미리 정의된 기간은 프로그램 데이터를 타일 C로 전송하고 타일 C에 프로그램 데이터를 설치하는 시간의 함수이다. 도 3을 참조하면, 이는 예를 들어, 제2 하드웨어 타일 B가 포워딩 상태로 구성된 때(t2 에서)와 제2 하드웨어 타일 B가 타일 B에 설치되도록 의도된 데이터 프로그램 패킷을 수신할 때(t4 에서) 사이의 차이(즉, t4 - t2 의 시간에)와 동일한 시간에 발생할 수 있다. 각각의 포워딩 상태 카운터와 관련된 특정 시간은 미리 계산되어 제1 및 제2 데이터 패킷과 함께 제공되는 구성 데이터에 포함될 수 있다. 하드웨어 타일 C는 포워딩 상태로 설정되어 있지 않으므로 포워딩 상태 카운터를 포함하도록 구성되어 있지 않다.
포워딩 데이터 경로가 설정된 후, 데이터 소스(예를 들어, 통신 인터페이스(12))는 데이터 포워딩 경로를 따라 하드웨어 타일(14)에 각각의 프로그램 데이터 패킷을 공급한다(34). 프로그램 데이터 패킷에는 하드웨어 타일의 오퍼레이션 스케줄을 정의하는 프로그램 데이터가 포함된다. 프로그램 데이터 패킷은 데이터 포워딩 경로의 마지막 하드웨어 타일(예: 데이터 소스에서 가장 먼 하드웨어 타일)이 프로그램 데이터를 먼저 수신하고 데이터 포워딩 경로의 제1 하드웨어 타일(예: 데이터 소스에 가장 가까운 하드웨어 타일)이 프로그램 데이터를 마지막으로 수신하도록 순차적으로 공급될 수 있다. 프로그램 데이터 패킷이 수신되면 하드웨어 타일에 설치될 수 있다(36).
예를 들어, 도 1의 하드웨어 타일 A, B 및 C에 의해 설정된 데이터 포워딩 경로에서, 통신 인터페이스(12)는 시간 t3에서 하드웨어 타일 A로 제1 프로그램 데이터 패킷을 전송하고, 하드웨어 타일 A는 그 다음 제1 프로그램 데이터 패킷을 하드웨어 타일 B로 전송하고, 하드웨어 타일 B는 제1 프로그램 데이터 패킷을 하드웨어 타일 C로 전송한다. 제1 프로그램 데이터 패킷을 수신하면, 하드웨어 타일(C)은 제1 프로그램 데이터 패킷을 로컬 메모리(예를 들어, 메모리(20))에 저장 및/또는 패킷 내에 포함된 프로그램 데이터를 설치할 수 있다.
이어서, 통신 인터페이스(12)는 시간 t4에서 제2 프로그램 데이터 패킷을 하드웨어 타일 B로 전송한다. 하드웨어 타일 B가 제2 프로그램 데이터 패킷에 포함된 프로그램 데이터를 저장 및/또는 설치할 수 있기 전에, 하드웨어 타일 B에 설치된 포워딩 상태 카운터는 하드웨어 타일 B로 하여금 포워딩 상태에서 하드웨어 타일 B가 수신하는 데이터 패킷을 저장 및/또는 설치하도록 구성된 새로운 상태로 변경하도록 하는 트리거를 실행한다. 여기에 설명된 바와 같이, 이 트리거는 t4-t2 의 시간에 발생할 수 있다. 이러한 방식으로 제2 프로그램 데이터 패킷은 하드웨어 타일 C로 전달되는 대신 하드웨어 타일 B에 유지(retained)된다.
이어서, 통신 인터페이스(12)는 시간 t5 에서 제3 프로그램 데이터 패킷을 하드웨어 타일 A로 전송한다. 하드웨어 타일 A가 제2 프로그램 데이터 패킷에 포함된 프로그램 데이터를 저장 및/또는 설치할 수 있기 전에, 하드웨어 타일 A에 설치된 포워딩 상태 카운터는 하드웨어 타일 A로 하여금 포워딩 상태에서 하드웨어 타일 A가 수신하는 데이터 패킷을 저장 및/또는 설치하도록 구성된 새로운 상태로 변경되도록 하는 트리거를 발생시킨다. 여기에 설명된 바와 같이, 이 트리거는 t5 - t1 시간에 발생할 수 있다. 이러한 방식으로 제3 프로그램 데이터 패킷은 하드웨어 타일 B로 전달되는 대신 하드웨어 타일 A에 유지된다.
일부 구현에서, 어레이의 모든 하드웨어 타일이 설치/초기화 프로그램을 동시에 실행하는 것이 바람직하다. 그러한 경우, 가장 먼저 프로그램 데이터를 수신하고 초기화/설치한 하드웨어 타일은 어레이의 다른 하드웨어 타일도 각각의 프로그램 데이터를 수신 및 초기화/설치할 때까지 기다린다. 모든 하드웨어 타일이 설치된 프로그램 데이터의 실행을 시작하는 시간을 "킥오프(kickoff)" 시간이라고 한다. 각 하드웨어 타일이 동시에 킥오프되는 것을 보장하기 위해, 데이터 프로그램 패킷(36)의 설치는 예를 들어 본 명세서에서 킥오프 상태 카운터라고도 하는 대응하는 프로그램 킥오프 카운터(37)를 포함하도록 각 하드웨어 타일을 구성하는 것을 포함할 수 있다.
킥오프 상태 카운터에는 미리 정의된 시간이 지날 때까지 카운트다운(또는 카운트업)하는 카운터가 포함된다. 각 하드웨어 타일에 대해 지정하는 미리 정의된 기간은 해당 타일 내의 프로그램 데이터에 정의된 오퍼레이션이 시작될 때까지의 시간을 지정한다. 킥오프 상태 카운터가 카운트다운(또는 업)되는 동안 카운터가 설치된 하드웨어 타일은 오퍼레이션이 실행되지 않는 보류 상태로 유지된다. 킥오프 상태 카운터가 미리 정의된 시간 기간에 도달하면 카운터는 하드웨어 타일이 타일 내의 프로그램 데이터에 의해 정의된 오퍼레이션의 실행을 시작하게 하는 트리거를 실행하도록 유도할 수 있다. 각 시작 상태 카운터에 대해 미리 정의된 기간은 어레이 내의 모든 하드웨어 타일이 설치/초기화 프로그램을 동시에 실행하는 값으로 계산된다. 본 명세서에 설명된 바와 같이, 각각의 킥오프 상태 카운터의 미리 정의된 기간은 상이할 수 있다.
예를 들어, 일부 구현에서, 하드웨어 타일(14)이 타일(14)에서 이전에 수신되고 타일의 로컬 메모리(예를 들어, 메모리(20))에 저장된 프로그램 데이터에 정의된 오퍼레이션의 실행을 시작하게 하는 트리거가 발생할 수 있다. 미리 정의된 기간은 다중 클록 사이클을 포함할 수 있다. 예를 들어, 미리 정의된 기간은 무엇보다도 2, 5, 10, 20, 50 또는 100 클록 사이클을 포함할 수 있다. 여기에 설명된 바와 같이, 타일(14)에 설치된 킥오프 상태 카운터는 글로벌 클록(global clock)에 대해 다른 킥오프 상태 카운터와 동기화된다.
어레이의 하드웨어 타일(14)은 포워딩 데이터 경로를 공유하기 때문에 각기 다른 시간에 프로그램 데이터 패킷을 수신하고 설치할 것이다. 즉, 각 타일(14)은 오퍼레이션 실행을 시작할 수 있을 때까지 서로 다른 시간을 대기하고 각 킥오프 상태 카운터에 대해 미리 정의된 시간 길이가 다르다. 각 킥오프 상태 카운터에 대해 지정된 미리 정의된 시간 길이는 예를 들어 아직 프로그램 데이터를 수신하고 설치하지 않은 하드웨어 타일 수(number)의 함수일 수 있다. 이렇게 하면 어레이 내의 모든 타일이 설치/초기화 프로그램을 동시에 실행한다. 예를 들어, 도 1의 타일 A, B, C에 의해 설정된 데이터 포워딩 경로에서, 하드웨어 타일 C가 프로그램 데이터를 수신하면 타일 C는 자체 프로그램 데이터를 설치할 때까지 그리고 두 개의 다른 하드웨어 타일(A 및 B)이 각각의 프로그램 데이터를 수신하여 설치할 때까지 기다린다. 따라서, 타일 C의 킥오프 상태 카운터와 관련된 미리 정의된 기간은 예를 들어 타일 A 및 B에 프로그램 데이터를 전송 및 설치하는 데 필요한 시간뿐만 아니라 타일 C에 프로그램 데이터를 설치하는 데 필요한 시간의 함수일 수 있다. 도 3에 도시된 바와 같이, 이는 예를 들어 모든 하드웨어 타일이 킥오프되는 시점( t6 에서)과 마지막 하드웨어 타일 C가 타일 C에 설치될 데이터 프로그램 패킷을 수신한 시점( t3 에서) 사이의 차이(즉, t6 - t3 의 시간에)와 동일한 시간에 발생할 수 있다.
마찬가지로, 하드웨어 타일 B가 프로그램 데이터를 수신하면 타일 B는 자체 프로그램 데이터를 설치할 때까지 그리고 다른 하드웨어 타일(타일 A)이 각각의 프로그램 데이터를 수신하여 설치할 때까지 기다린다. 따라서, 타일 B의 킥오프 상태 카운터와 관련된 미리 정의된 기간은 예를 들어 타일 A에 프로그램 데이터를 전송하고 타일 A에 프로그램 데이터를 설치하는 시간과 프로그램 데이터를 타일 B에 설치하는 시간의 함수일 수 있다. 도 3에 도시된 바와 같이, 이는 예를 들어, 모든 하드웨어 타일이 킥오프되는 시점( t6 에서)과 하드웨어 타일 B가 타일 B에 설치될 데이터 프로그램 패킷을 수신할 때(t4 에서) 사이의 차이와 동일한 시간에 발생할 수 있다(즉, t6 - t4 의 시간에).
마찬가지로 하드웨어 타일 A가 프로그램 데이터를 수신하면 타일 A는 프로그램 데이터 실행을 시작하기 전에 자체 프로그램 데이터를 설치할 때까지 기다린다. 따라서, 타일 A의 킥오프 상태 카운터와 연관된 미리 정의된 기간은 예를 들어 타일 A에 프로그램 데이터를 설치하는 데 필요한 시간의 함수일 수 있다. 도 3에 도시된 바와 같이, 이는 예를 들어 모든 하드웨어 타일이 킥오프되는 시점( t6 에서)과 하드웨어 타일 A가 타일 A에 설치될 데이터 프로그램 패킷을 수신할 때(t5 에서) 사이의 차이와 동일한 시간에 발생할 수 있다(즉, t6 - t5 의 시간에).
각 킥오프 상태 카운터와 관련된 특정 시간은 미리 계산되어 각 프로그램 데이터 패킷과 함께 제공되는 프로그램 데이터에 포함될 수 있다. 여기에 설명된 바와 같이, 각 킥오프 상태 카운터와 관련된 다른 특정 시간이 계산되고 정의되어 모든 타일이 설치/초기화 프로그램을 동시에 실행하도록 정의할 수 있다. 일부 구현에서, 어레이 내의 각각의 타일은 대응하는 킥오프 상태 카운터를 포함하도록 구성될 수 있다. 예를 들어, 타일 A, B, 및 C 각각은 저장된 프로그램 데이터를 실행하기 위해 대기하기 위해 서로 다른 미리 정의된 기간을 갖는 대응하는 킥오프 상태 카운터를 포함하도록 구성될 수 있다.
일부 구현에서, 어레이 내의 타일 중 적어도 일부는 대응하는 킥오프 상태 카운터를 포함하도록 구성될 수 있다. 예를 들어, 어레이에 N개의 타일이 있는 경우 N-1개의 타일은 대응하는 킥오프 상태 카운터를 포함하도록 구성될 수 있다. 이는 어레이의 제1 타일을 제외한 어레이의 모든 타일이 대응하는 킥오프 상태 카운터를 포함하도록 구성하는 것을 포함할 수 있다. 본 출원의 예를 사용하여, 타일 B 및 C의 각각은 저장된 프로그램 데이터를 실행하기 위해 대기하는 상이한 미리 정의된 기간을 갖는 대응하는 킥오프 상태 카운터를 포함하도록 구성될 수 있다. 그러나 타일 A는 해당 킥오프 상태 카운터를 갖도록 구성되지 않을 수 있다. 이 경우 타일 B와 C는 수신된 프로그램 데이터를 실행하기 위해 킥오프 상태 카운터가 트리거될 때까지 기다릴 수 있지만 타일 A는 프로그램 데이터를 수신한 즉시 프로그램 데이터를 실행하여 타일 A, B 및 C 각각이 각각의 프로그램 데이터를 동시에 실행한다.
여기에 설명된 바와 같이, 여기에 설명된 칩은 명령이 모든 사이클에서 발행되고 칩의 기능 유닛의 다양한 구성에 대한 소스 및 대상 레지스터를 포함하는 전통적인 프로세서와 다르다. 대신, 칩의 각 하드웨어 타일은 구성 상태로 알려진 로직적 상태 세트(logical set of states)에 의해 제어된다. 구성 상태(configuration state)는 하드웨어 타일이 다른 기능 중에서 데이터를 포워딩, 메모리에 데이터를 저장, 데이터를 설치 또는 프로그램을 실행하도록 구성되었는지 여부를 설명한다. 하드웨어 타일이 구성된 특정 상태에 따라, 상태는 하드웨어 타일의 다양한 멀티플렉서에 대한 제어 신호와 하드웨어 타일 내의 메모리 및 레지스터에 대한 읽기 및 쓰기 오퍼레이션을 지정한다. 하드웨어 타일의 구성 상태는 트리거 테이블을 통해 업데이트(예: 포워딩 상태 또는 기타 상태로 전환)된다.
도 4는 트리거 테이블(40)의 예를 예시하는 개략도이다. 트리거 테이블(40)은 주소 지정 가능한 구성 상태 업데이트 세트이며, 각각은 특정 조건이 충족될 때 적용된다. 예를 들어, 본 명세서에 설명된 바와 같이 하드웨어 타일 내에 포워딩 상태 카운터를 설치할 때, 조건 및 관련 구성이 트리거 테이블(40)에 추가될 수 있다. 포워딩 상태 카운터가 0(또는 미리 정의된 시간까지)으로 카운트다운되면 테이블 40에 추가된 조건이 충족되므로 트리거가 실행되고, 해당 조건과 관련된 구성이 하드웨어 타일에 적용된다. 킥오프 상태 카운터는 유사한 방식으로 구현될 수 있다.
트리거 테이블(40)은 다중 엔트리(50)를 포함한다. 각각의 엔트리(50)는 예를 들어, 트리거 ID(트리거)(52), 어드레스(54), 구성 공간 업데이트(56), 및 인에이블 플래그(인에이블)(58), 및 하나 이상의 추가 플래그(60)를 포함할 수 있다. 트리거 ID(52)는 트리거 유형을 설명하고 관련 상태에 대한 포인터 역할을 한다. 어드레스(54)와 구성 공간 업데이트(56)의 조합은 하드웨어 타일의 구성 상태를 업데이트하는 방법을 설명한다. 인에이블 플래그(58)는 트리거가 현재 활성화되어 있고 언제든지 실행될 수 있는지 여부를 지정한다. 추가 플래그(flag)(60)는 트리거가 마지막 클록 사이클 내에서 발생했는지 여부와 같은 트리거와 관련된 다른 양태을 지정할 수 있다. 트리거 테이블(40)은 예를 들어, 8, 16, 32, 또는 64개의 엔트리를 포함하는 복수의 엔트리를 포함할 수 있다. 트리거 테이블(40)은 트리거 테이블(40)의 상이한 구성 상태를 메모리에 로컬적으로 저장하고 하드웨어 타일 내의 하나 이상의 멀티플렉서를 사용하여 상태를 선택함으로써 실현될 수 있다.
타일의 구성 상태를 수정하는 특정 구현이 설명되었다. 그러나 다른 구현도 가능하다. 예를 들어, 일부 구현에서, 포워딩 경로를 생성한 다음 여기에 설명된 대로 타일에 프로그램 데이터를 순차적으로 로드하는 대신, 타일을 포워딩 상태로 구성하고 타일 내에서 프로그램을 시작하기 위한 킥오프 상태 카운터를 설치함과 동시에 프로그램 데이터가 타일에 설치될 수 있다. 도 1에 도시된 타일 구조를 이용하여, 예를 들어 프로그램 데이터를 로딩하기 위한 대안적 또는 추가적인 예시적인 프로세스가 설명될 것이다. 예를 들어, 일부 구현에서, 통신 인터페이스(12)는 구성 데이터(예를 들어, 데이터 패킷의 헤더로서) 및 프로그램 데이터(예를 들어, 데이터 패킷의 페이로드로서)를 포함하는 제1 데이터 패킷을 제1 타일(예를 들어, 타일 A)에 전송한다. 구성 데이터는 타일 A에 의해 판독될 때 타일 A가 데이터 패킷의 프로그램 데이터를 로컬 메모리에 저장하게 하고 로직 회로가 미리 정의된 일련의 오퍼레이션을 수행하도록 구성한다. 또한, 구성 패킷은 타일 A가 킥오프 상태 카운터를 초기화함과 동시에 포워딩 상태에 놓이도록 구성할 수 있다. 본 명세서에 설명된 바와 같이, 킥오프 상태 카운터는 타일에 설치된 프로그램이 실행을 시작(즉, "킥오프")하도록 타일이 구성 상태를 변경하게 될 때까지 미리 결정된 시간을 카운트하는 카운터일 수 있다. 타일 A의 킥오프 상태 카운터가 카운팅하는 시간의 길이는 타일 A 이전에 발생하는 타일에 필요한 데이터의 양이 아니라 타일 A를 따르는 타일에 필요한 데이터의 양에 따라 다르다. 예를 들어, 타일 A 다음에 두 개의 타일이 있는 경우, 타일 A의 킥오프 상태 카운터 값은 구성 및 프로그램 데이터를 다음 두 타일로 전달하는 데 걸리는 시간을 기반으로 결정된다.
또한, 타일을 포워딩 상태에 배치하는 동시에 프로그램 데이터를 설치하도록 타일을 구성하는 것은 0 클록 사이클로 설정된 포워딩 상태에 대한 별도의 타이머를 설정하는 것을 포함할 수 있다는 점에 유의한다.
일단 제1 타일이 포워딩 상태에 있으면, 통신 인터페이스(12)는 제2 데이터 패킷을 전송한다. 이 제2 데이터 패킷은 포워딩 상태에서 제1 타일을 통과하고 어레이의 제2 타일(예를 들어, 타일 B)에 도달할 수 있다. 제2 데이터 패킷은 제1 데이터 패킷과 유사하다. 예를 들어, 제2 데이터 패킷은 구성 데이터(예를 들어, 제2 데이터 패킷의 헤더로서) 및 프로그램 데이터(예를 들어, 제2 데이터 패킷의 페이로드로서)를 포함한다. 구성 데이터는 제2 타일에 의해 판독될 때 제2 타일이 제2 데이터 패킷으로부터 프로그램 데이터를 로컬 메모리에 저장하게 하고/하거나 로직 회로가 미리 정의된 오퍼레이션 세트를 수행하도록 구성한다. 또한, 구성 패킷은 킥오프 상태 카운터를 초기화함과 동시에 제2 타일이 포워딩 상태에 놓이도록 구성할 수 있다. 제2 타일의 킥오프 상태 카운터 값은 전달될 데이터의 양에 의해 결정되고 어레이의 제2 타일 이후의 나머지 타일에 의해 구성된다.
이 구현에서, 경로의 각 타일은 경로의 마지막 타일(예: 타일 C)을 제외하고는 제1 및 제2 타일과 동일한 방식으로 구성된다. 마지막 타일에 대해, 통신 인터페이스(12)는 마지막 데이터 패킷을 전송한다. 마지막 데이터 패킷에는 구성 데이터와 프로그램 데이터가 포함된다. 이전 데이터 패킷과 달리 마지막 타일은 포워딩 상태로 구성되지 않는다. 대신 마지막 타일은 프로그램 데이터를 설치하고 설치가 완료되면 프로그램 데이터를 사용하여 오퍼레이션을 실행하도록 구성된다. 동시에 경로의 각 이전 타일(예: 타일 A 및 B)에 대한 킥오프 상태 카운터는 한계에 도달하고 각 타일이 타일에 로컬로 저장된 프로그램 데이터를 사용하여 오퍼레이션 실행을 시작하게 한다. 이러한 방식으로 타일은 통신 인터페이스에 의해 직접 프로그래밍된다고 말할 수 있으며, 여기서 포워딩 경로는 프로그램 데이터가 타일에 설치되고 킥오프 상태 카운터가 초기화됨에 따라 설정되고, 이는 본 명세서에 또한 기술된 바와 같이, 먼저 포워딩 경로를 설정하고, 포워딩 경로가 설정된 후 아래로 각 타일에 대한 프로그램 데이터를 전송함으로써 간접적으로 프로그래밍되는 것과는 대조적이다.
도 5는 스케줄링된 오퍼레이션에 따라 동작하도록 구성될 수 있고 여기에 설명된 바와 같이 초기화될 수 있는 특수 목적 로직 회로의 예를 예시하는 개략도이다. 예를 들어, 특수 로직 회로는 ASIC 100을 포함할 수 있다. ASIC(100)은 개별 오퍼레이션 스케줄에 따라 ASIC(100)의 전체 오퍼레이션을 실행하도록 구성될 수 있는 다양한 상이한 유형의 하드웨어 블록을 포함한다. 개별 오퍼레이션 스케줄에 따라 동작할 수 있는 예시적인 하드웨어 블록은 타일(102) 및 벡터 프로세싱 유닛(104)(도 1의 하드웨어 타일(14)과 유사) 및 통신 인터페이스(Comms)(108)(도 1의 통신 인터페이스(12)와 유사)를 포함한다.
더 구체적으로, ASIC(100)은 다중 타일(102)을 포함하고, 타일(102) 중 하나 이상이 예를 들어 곱셈 및 덧셈 연산과 같은 연산(오퍼레이션)을 수행하도록 구성된 특수 목적 회로를 포함한다. 특히, 각각의 타일(102)은 셀의 계산 어레이(예를 들어, 도 1의 계산 유닛(22)와 유사함)를 포함할 수 있고, 여기서 각각의 셀은 수학적 연산(오퍼레이션)을 수행하도록 구성된다(예를 들어, 도 6에 도시된 예시적인 타일(200) 참조). 일부 구현들에서, 타일들(102)은 그리드 패턴으로 배열되고, 타일들(102)은 제1 차원(101)(예를 들어, 행)을 따라 그리고 제2 차원(103)(예를 들어, 열)을 따라 배열된다. 예를 들어, 도 5에 도시된 예에서, 타일(102)은 4개의 다른 섹션(110a, 110b, 110c, 110d)으로 나뉘며, 각 섹션은 18개의 타일 아래 16개의 타일의 격자로 배열된 288개의 타일을 포함한다. 일부 구현에서, 도 5에 도시된 ASIC(100)은 개별 타일로 세분화/배열된 셀의 단일 시스톨릭 어레이를 포함하는 것으로 이해될 수 있으며, 여기서 각 타일은 셀, 로컬 메모리 및 버스 라인의 서브세트/서브 어레이를 포함한다(예를 들어, 도 6 참조).
ASIC(100)은 또한 벡터 프로세싱 유닛(104)을 포함한다. 벡터 프로세싱 유닛(벡터 처리 유닛)(104)은 타일(102)로부터 출력을 수신하고 타일(102)로부터 수신된 출력에 기초하여 벡터 계산 출력 값을 계산하도록 구성된 회로를 포함한다. 예를 들어, 일부 구현들에서, 벡터 프로세싱 유닛(104)은 타일들(102)로부터 수신된 출력들에 대해 누적 연산(오퍼레이션)들을 수행하도록 구성된 회로(예를 들어, 곱셈 회로, 가산기 회로, 시프터, 및/또는 메모리)를 포함한다. 대안적으로 또는 추가로, 벡터 프로세싱 유닛(104)은 타일(102)의 출력에 비선형 함수를 적용하도록 구성된 회로를 포함한다. 대안적으로 또는 추가로, 벡터 프로세싱 유닛(104)은 정규화된 값, 풀링된 값, 또는 둘 다를 생성한다. 벡터 프로세싱 유닛의 벡터 계산 출력은 하나 이상의 타일에 저장될 수 있다. 예를 들어, 벡터 계산 출력은 타일(102)과 고유하게 연관된 메모리에 저장될 수 있다. 대안적으로 또는 추가로, 벡터 프로세싱 유닛(104)의 벡터 계산 출력은 예를 들어 계산의 출력으로서 ASIC(100) 외부의 회로에 전송될 수 있다. 또한, 타일(102) 및 벡터 프로세싱 유닛(104)에 대한 개별 오퍼레이션 스케줄의 동작은 타일 출력을 벡터 프로세싱 유닛(104)으로 전송하는 것을 조정한다.
일부 구현들에서, 벡터 프로세싱 유닛(104)은 각각의 세그먼트(segment)가 타일들(102)의 대응하는 컬렉션으로부터 출력들을 수신하도록 구성된 회로를 포함하고 수신된 출력들에 기초하여 벡터 계산 출력들을 계산하도록 분할(segmented)된다. 예를 들어, 도 5에 도시된 바와 같이, 벡터 프로세싱 유닛(104)은 제1 차원(101)을 따라 확장되는 2개의 행을 포함하고, 각 행은 32개의 열로 배열된 32개의 세그먼트(106)를 포함한다. 각각의 세그먼트(106)는 타일(102)의 대응하는 열로부터의 출력(예를 들어, 누산)에 기초하여 본 명세서에 설명된 바와 같이 벡터 계산을 수행하도록 구성된 회로(예를 들어, 곱셈 회로, 가산기 회로, 시프터, 및/또는 메모리)를 포함한다. 벡터 프로세싱 유닛(104)은 도 5에 도시된 바와 같이 타일(102)의 그리드의 중간에 위치될 수 있다. 벡터 프로세싱 유닛(104)의 다른 위치 배열도 가능하다.
ASIC(100)은 또한 통신 인터페이스(108)(예를 들어, 인터페이스(1010A, 1010B))를 포함한다. 통신 인터페이스(108)는 직렬 변환기/역직렬변환기(SerDes) 인터페이스 및 범용 입력/출력(GPIO) 인터페이스의 하나 이상의 세트를 포함한다. SerDes 인터페이스는 명령어(예를 들어, ASIC(100)의 개별 하드웨어 블록에 대한 오퍼레이션 스케줄) 및/또는 ASIC(100)에 대한 입력 데이터를 수신하고 ASIC(100)에서 외부 회로로 데이터를 출력하도록 구성된다. 예를 들어, SerDes 인터페이스는 통신 인터페이스(108) 내에 포함된 SerDes 인터페이스 세트를 통해 32Gbps, 56Gbps 또는 임의의 적절한 데이터 속도로 데이터(예: 오퍼레이션 스케줄 및/또는 입력/출력 데이터)를 전송 및 수신하도록 구성될 수 있다. 예를 들어, ASIC(100)은 턴온될 때 부트 프로그램을 실행할 수 있다. GPIO 인터페이스는 특정 유형의 기계 학습 모델을 실행하기 위해 ASIC(100)에 오퍼레이션 스케줄을 로드하는 데 사용될 수 있다.
ASIC(100)은 통신 인터페이스(108), 벡터 프로세싱 유닛(104), 및 복수의 타일(102) 사이에서 데이터를 전달하도록 구성된 복수의 제어가능한 버스 라인(예를 들어, 도 6 참조)을 더 포함한다. 제어 가능한 버스 라인은 예를 들어 그리드의 제1 차원(101)(예를 들어, 행) 및 그리드의 제2 차원(103)(예를 들어, 열)을 따라 연장하는 와이어를 포함한다. 제1 차원(101)을 따라 연장하는 제어 가능한 버스 라인의 제1 서브세트는 데이터를 제1 방향(예를 들어, 도 5의 오른쪽)으로 전송하도록 구성될 수 있다. 제1 차원(101)을 따라 연장하는 제어 가능한 버스 라인의 제2 서브세트는 데이터를 제2 방향(예를 들어, 도 5의 왼쪽)으로 전송하도록 구성될 수 있다. 제2 차원(103)을 따라 연장하는 제어 가능한 버스 라인의 제1 서브세트는 데이터를 제3 방향(예를 들어, 도 5의 상단으로)으로 전송하도록 구성될 수 있다. 제2 차원(103)을 따라 연장하는 제어 가능한 버스 라인의 제2 서브세트는 데이터를 제4 방향(예를 들어, 도 5의 하단으로)으로 전송하도록 구성될 수 있다. 위에서 설명한 바와 같이, 서로 다른 하드웨어 블록의 개별 오퍼레이션 스케줄은 ASIC(100) 내에서 통신 오류를 방지하기 위해 제어 가능한 버스 라인과 같은 공유 리소스에 대한 액세스를 조정할 수 있다.
각각의 제어 가능한 버스 라인은 클록 신호에 따라 라인을 따라 데이터를 전달하는 데 사용되는 플립플롭과 같은 다중 컨베이어(conveyer) 요소를 포함한다. 제어 가능한 버스 라인을 통해 데이터를 전송하는 것은 각 클록 사이클에서 제어 가능한 버스 라인의 제1 컨베이어 요소로부터 제어 가능한 버스 라인의 제2 인접 컨베이어 요소로 데이터를 시프팅하는 것을 포함할 수 있다. 일부 구현에서, 데이터는 클록 사이클의 상승 또는 하강 에지에서 제어 가능한 버스 라인을 통해 전달된다. 예를 들어, 제1 클록 사이클에서 제어 가능한 버스 라인의 제1 컨베이어 요소(예: 플립플롭)에 존재하는 데이터는 제2 클록 사이클에서 제어 가능한 버스 라인의 제2 컨베이어 요소(예: 플립플롭)로 전송될 수 있다. 일부 구현에서, 컨베이어 요소는 서로 고정된 거리로 주기적으로 이격될 수 있다. 예를 들어, 일부 경우에, 각각의 제어 가능한 버스 라인은 복수의 컨베이어 요소를 포함하며, 각 컨베이어 요소는 대응하는 타일(102) 내에 또는 이에 근접하게 위치된다.
제어 가능한 각 버스 라인에는 다중 멀티플렉서 및/또는 디멀티플렉서도 포함된다. 제어 가능한 버스 라인의 멀티플렉서/디멀티플렉서는 버스 라인과 ASIC 칩(100)의 컴포넌트 사이에서 데이터를 전송하도록 구성된다. 예를 들어, 제어 가능한 버스 라인의 멀티플렉서/디멀티플렉서는 타일(102)로 및/또는 타일(102)로부터, 벡터 프로세싱 유닛(104)으로 및/또는 벡터 프로세싱 유닛(104)으로부터, 또는 통신 인터페이스(108)로 및/또는 통신 인터페이스(108)로부터 데이터를 전송하도록 구성될 수 있다. 타일(102), 벡터 프로세싱 유닛(104) 및 통신 인터페이스 간의 데이터 전송은 오퍼레이션 스케줄에 따라 조정될 수 있다. 오퍼레이션 스케줄은 어떤 ASIC 100 하드웨어 블록이 각 카운터에서 제어 가능한 장치로 데이터를 전송하거나 수신하는지 조정할 수 있다. 임의의 주어진 카운터 시간에 스케줄링된 오퍼레이션은 예를 들어, 소스(예를 들어, 타일(102) 또는 벡터 프로세싱 유닛(104) 내의 메모리)에서 제어 가능한 버스 라인으로 어떤 데이터가 전송되는지, 또는 대안적으로 어떤 데이터가 제어 가능한 버스 라인에서 싱크(예를 들어, 타일(102) 또는 벡터 프로세싱 유닛(104) 내의 메모리)로 전송되는지를 결정할 수 있다.
제어 가능한 버스 라인은 각 타일, 벡터 프로세싱 유닛 및/또는 통신 인터페이스가 해당 타일, 벡터 프로세싱 유닛 및/또는 통신 인터페이스를 통과하는 제어 가능한 버스 라인을 조작하기 위한 제어 요소의 자체 세트를 포함하도록, 로컬 레벨에서 제어되도록 구성된다. 예를 들어, 각각의 타일, 1D 벡터 프로세싱 유닛, 및 통신 인터페이스는 해당 타일 세트, 1D 벡터 프로세싱 유닛, 및 통신 인터페이스와의 데이터 전송을 제어하기 위한 컨베이어 요소, 멀티플렉서 및/또는 디멀티플렉서의 대응하는 세트를 포함할 수 있다. 따라서 각 타일, 1D 벡터 프로세싱 유닛 및 통신 인터페이스에 대한 오퍼레이션 스케줄은 스케줄링된 오퍼레이션에 따라 데이터를 라우팅하기 위해 해당 컨베이어 요소에 적절한 제어 신호를 제공하도록 각 하드웨어 블록을 트리거할 수 있다.
ASIC 칩(100)의 동작과 관련된 레이턴시를 최소화하기 위해, 타일(102) 및 벡터 프로세싱 유닛(104)은 다양한 컴포넌트 사이에서 데이터가 이동(travel)하는 거리를 감소시키도록 위치될 수 있다. 특정 구현에서, 타일(102) 및 통신 인터페이스(108) 모두는 타일 섹션 및 통신 인터페이스 섹션 모두가 타일과 통신 인터페이스 사이에서 이동하는 최대 거리 데이터가 감소되도록 배열되는 복수의 섹션으로 분리될 수 있다. 예를 들어, 일부 구현에서, 타일(102)의 제1 그룹은 통신 인터페이스(108)의 제1 사이드 상의 제1 섹션에 배열될 수 있고, 타일(102)의 제2 그룹은 통신 인터페이스의 제2 사이드 상의 제2 섹션에 배열될 수 있다. 그 결과, 모든 타일(102)이 통신 인터페이스의 일측에서 단일 섹션으로 배열되는 구성에 비해 통신 인터페이스에서 가장 먼 타일까지의 거리가 절반으로 단축될 수 있다.
대안적으로, 타일은 4개의 섹션과 같이 다른 수의 섹션으로 배열될 수 있다. 예를 들어, 도 5에 도시된 바와 같이, ASIC(100)의 다중 타일(102)은 다중 섹션(110)(110a, 110b, 110c, 110d)에 배열된다. 각각의 섹션(110)은 격자 패턴으로 배열된 유사한 수의 타일(102)을 포함한다(예를 들어, 각각의 섹션(110)은 16개의 행 및 16개의 열로 배열된 256개의 타일을 포함할 수 있다). 통신 인터페이스(108)는 또한 복수의 섹션으로 분할된다(제1 통신 인터페이스(1010A) 및 제2 통신 인터페이스(1010B)는 타일(102)의 섹션(110)의 양쪽에 배열된다). 제1 통신 인터페이스(1010A)는 제어 가능한 버스 라인을 통해 ASIC 칩(100)의 좌측에 있는 2개의 타일 섹션(110a, 110c)에 연결될 수 있다. 제2 통신 인터페이스(1010B)는 제어 가능한 버스 라인을 통해 ASIC 칩(100)의 우측에 있는 2개의 타일 섹션(110b, 110d)에 연결될 수 있다. 결과적으로, 통신 인터페이스(108)로 및/또는 통신 인터페이스(108)로부터 데이터가 이동하는 최대 거리(및 이에 따른 데이터 전파와 관련된 레이턴시)는 단일 통신 인터페이스만이 이용가능한 배열과 비교하여 절반으로 감소될 수 있다. 타일(102) 및 통신 인터페이스(108)의 다른 결합(커플링) 배열은 또한 데이터 레이턴시를 감소시키는 것이 가능하다. 타일(102)과 통신 인터페이스(108)의 결합 배열은 제어 가능한 버스 라인의 컨베이어 요소 및 멀티플렉서에 제어 신호를 제공함으로써 프로그래밍될 수 있다.
일부 구현에서, 하나 이상의 타일(102)은 ASIC(100) 내의 제어 가능한 버스 라인 및/또는 다른 타일(본 명세서에서 "제어 타일"로 지칭됨)에 대한 판독 및 기록 동작을 개시하도록 구성된다. ASIC(100) 내의 나머지 타일은 (예를 들어, 계층 추론을 계산하기 위해) 입력 데이터에 기초하여 계산을 수행하도록 구성될 수 있다. 일부 구현에서, 제어 타일은 ASIC(100) 내의 다른 타일과 동일한 컴포넌트 및 구성을 포함한다. 제어 타일은 추가 타일 또는 타일, 추가 행 또는 ASIC 100의 추가 열 또는 열로 추가될 수 있다. 예를 들어, 각 타일(102)이 입력 데이터에 대한 계산을 수행하도록 구성된 타일(102)의 대칭 그리드(symmetric grid)의 경우, 입력 데이터에 대한 계산을 수행하는 타일(102)에 대한 읽기 및 쓰기 동작을 처리하기 위해 제어 타일의 하나 이상의 추가 행이 포함될 수 있다. 예를 들어, 각 섹션(110)은 타일의 18행을 포함하고, 타일의 마지막 2행은 제어 타일을 포함할 수 있다. 별도의 제어 타일을 제공하면 일부 구현에서 계산을 수행하는 데 사용되는 다른 타일에서 사용 가능한 메모리 양이 증가한다. 별도의 제어 타일을 제공하면 오퍼레이션 스케줄 간의 데이터 전송 오퍼레이션 조정에 도움이 될 수도 있다. 예를 들어, 제어 타일을 사용하여 제어 가능한 버스 라인 및/또는 ASIC(100) 내의 다른 타일에 대한 읽기 및 쓰기 동작을 제어하는 것은 스케줄링 충돌을 확인해야 하는 개별 스케줄의 수를 줄일 수 있다. 즉, 제어 타일에 대한 오퍼레이션 스케줄이 동일한 카운터 시간에 특정 제어 가능한 버스 라인의 "이중 예약(double booking)" 사용을 피하기 위해 조정되면, 제어 가능한 버스 라인에서 통신 오류가 발생하지 않는다는 합리적인 보장이 있다. 그러나 여기에 설명된 제어를 제공하기 위한 별도의 타일은 필요하지 않으며 일부 경우에는 별도의 제어 타일이 제공되지 않는다. 오히려, 각 타일은 해당 타일에 대한 읽기 및 쓰기 동작(오퍼레이션)을 시작하기 위한 명령(명령어)을 로컬 메모리에 저장할 수 있다.
또한, 도 5에 도시된 각 섹션(110)은 18행 x 16열로 배열된 타일을 포함하고, 타일(102)의 수 및 섹션에서의 배열은 상이할 수 있다. 예를 들어, 일부 경우에 섹션(110)은 동일한 수의 행 및 열을 포함할 수 있다.
또한, 도 5에 도시된 바와 같이, 4개의 섹션으로 분할된 타일(102)은 다른 상이한 그룹으로 분할될 수 있다. 예를 들어, 일부 구현에서, 타일(102)은 벡터 프로세싱 유닛(104) 위의 제1 섹션(예를 들어, 도 5에 도시된 페이지의 상단에 더 가까움)과 벡터 프로세싱 유닛(104) 아래의 제2 섹션(예를 들어, 도 5에 도시된 페이지의 하단에 더 가까움)과 같은 두 개의 다른 섹션으로 그룹화된다. 이러한 배열에서, 각각의 섹션은, 예를 들어 (방향 101을 따라) 가로질러 32개의 타일만큼 아래로 (방향 103을 따라) 18개의 타일의 그리드로 배열된 596개의 타일을 포함할 수 있다. 섹션에는 다른 총 타일 수가 포함될 수 있으며 다른 크기의 배열로 배열될 수 있다. 어떤 경우에는 섹션 간의 구분이 ASIC 100의 하드웨어 기능에 따라 구분된다. 예를 들어, 도 5에 도시된 바와 같이, 섹션(110a, 110b)은 벡터 프로세싱 유닛(104)에 의해 섹션(110c, 110d)으로부터 분리될 수 있다.
ASIC 칩(100)에서 사용하기 위한 타일(200)의 예를 예시하는 개략도가 도 6에 도시된다. 각 타일(200)은 로컬 메모리(202) 및 메모리(202)에 연결된 계산 어레이(204)를 포함한다. 로컬 메모리(202)는 계산 어레이(204)에 근접하게 위치된 물리적 메모리를 포함한다. 계산 어레이(204)는 복수의 셀(206)을 포함한다. 계산 어레이(204)의 각각의 셀(206)은 셀(206)에 대한 활성화 입력 및 가중치(weight) 입력과 같은 데이터 입력에 기초하여 계산(예를 들어, 곱셈 및 누산 연산)을 수행하도록 구성된 회로를 포함한다. 각 셀은 클록 신호의 주기에 대한 계산(예: 곱셈 및 누적 연산)을 수행할 수 있다. 계산 어레이(204)는 열보다 더 많은 행, 행보다 더 많은 열, 또는 동일한 수의 열과 행을 가질 수 있다. 예를 들어, 도 6에 도시된 바와 같이, 계산 어레이(204)는 8행 및 8열로 배열된 64개의 셀을 포함한다. 16개 셀, 32개 셀, 128개 셀 또는 256개 셀을 갖는 계산 어레이와 같은 다른 계산 어레이 크기도 가능하다. 각 타일은 동일한 수의 셀 및/또는 동일한 크기의 계산 배열을 포함할 수 있다. ASIC 칩에 대해 병렬로 수행할 수 있는 오퍼레이션의 총 수는 칩 내에서 동일한 크기의 계산 어레이를 갖는 타일의 총 수에 따라 다르다. 예를 들어, 도 5에 도시된 ASIC 칩(100)의 경우, 약 1150개의 타일이 포함되어 있으므로 매 주기마다 약 92, 000개의 계산을 병렬로 수행할 수 있다. 사용될 수 있는 클록 속도의 예는 225MHz, 500MHz, 950MHz, 1GHz, 1.25GHz, 1.5GHz, 1.95GHz 또는 2GHz를 포함하지만 이에 국한되지 않는다. 각각의 개별 타일의 계산 어레이(204)는 도 5에 예시된 바와 같이 타일의 더 큰 시스톨릭 어레이의 서브세트이다.
타일(200)에 포함된 메모리(202)는 예를 들어, SRAM과 같은 랜덤 액세스 메모리(RAM)를 포함할 수 있다. 대신 다른 메모리를 사용할 수 있다. 각각의 메모리(202)는 ASIC 칩의 n개의 타일(102)과 연관된 전체 메모리의 (1/n)번째를 저장하도록 구성될 수 있다. 메모리(202)는 단일 칩 또는 다중 칩으로 제공될 수 있다. 예를 들어, 도 6에 도시된 메모리(202)는 4개의 단일 포트 SRAM으로 제공되며, 이들 각각은 계산 어레이(204)에 연결된다. 대안적으로, 메모리(202)는 다른 구성 중에서 2개의 단일 포트 SRAM 또는 8개의 단일 포트 SRAM으로 제공될 수 있다. 메모리의 결합 용량(joint capacity)은 오류 정정 코딩 후, 예를 들어 16kB, 32kB, 64kB, 또는 128kB일 수 있지만 이에 제한되지 않는다. 물리적 메모리(202)를 계산 어레이에 로컬적으로 제공함으로써, 일부 구현에서 ASIC(100)에 대한 배선 밀도가 크게 감소될 수 있다. 본 명세서에 기술된 바와 같이 로컬적으로 제공되는 것과는 대조적으로, 메모리가 ASIC(100) 내에 집중되는 대안적인 구성에서, 메모리 대역폭의 각 비트에 대한 배선이 필요할 수 있다. ASIC 100의 각 타일을 덮는 데 필요한 총 와이어 수는 ASIC 100 내에서 사용 가능한 공간을 훨씬 초과한다. 이에 반해, 타일마다 전용 메모리를 제공함으로써 ASIC(100)의 면적에 걸쳐 필요한 총 개수를 상당히 줄일 수 있다.
타일(200)은 또한 제어 가능한 버스 라인을 포함한다. 제어 가능한 버스 라인은 여러 그룹으로 분류될 수 있다. 예를 들어, 제어 가능한 버스 라인은 각 기본 방향으로 타일 간에 데이터를 전송하도록 구성된 제1 그룹의 범용 제어 가능한 버스 라인(210)을 포함할 수 있다. 즉, 제어 가능한 버스 라인(210)의 제1 그룹은, 타일 그리드의 제1 차원(101)을 따라 제1 방향으로 데이터를 전송하도록 구성된 버스 라인(210a)(도 6에서 "이스트(East)"으로 지칭됨); 타일 그리드의 제1 차원(101)을 따라 데이터를 제2 방향으로 전송하도록 구성된 버스 라인(210b)(도 6에서 "웨스트(West)"으로 지칭됨), 여기서 제2 방향은 제1 방향의 방향과 반대이고; 타일 그리드의 제2 차원(103)을 따라 제3 방향으로 데이터를 전송하도록 구성된 버스 라인(210c)(도 6에서 "노우스(North)"으로 지칭됨); 그리고 타일 그리드의 제2 차원(103)을 따라 제4 방향(도 6에서 "사우스(South)"으로 지칭됨)으로 데이터를 전송하도록 구성된 버스 라인(210d)을 포함할 수 있으며, 여기서 제4 방향은 제3 방향과 반대이다. 범용 버스 라인(210)은 제어 데이터, 활성화 입력 데이터, 통신 인터페이스로부터 및/또는 통신 인터페이스로의 데이터, 벡터 프로세싱 유닛로부터 및/또는 벡터 프로세싱 유닛로의 데이터, 및 타일(200)에 의해 저장 및/또는 사용되는 데이터(예: 가중치 입력)를 전달하도록 구성될 수 있다. 타일(200)은 제어 가능한 버스 라인을 제어하여 타일(200) 및/또는 메모리(202)로부터 데이터를 라우팅하기 위한 하나 이상의 제어 요소(221)(예를 들어, 플립플롭 및 멀티플렉서)를 포함할 수 있다.
제어 가능한 버스 라인은 또한 본 명세서에서 계산 어레이 부분 합 버스 라인(220)으로 지칭되는 제어 가능한 버스 라인의 제2 그룹을 포함할 수 있다. 계산 어레이 부분 합 버스 라인(220)은 계산 어레이(204)에 의해 수행된 계산으로부터 데이터 출력을 전달하도록 구성될 수 있다. 예를 들어, 버스 라인(220)은 도 6에 도시된 바와 같이 계산 어레이(204)의 행(rows)으로부터 획득된 부분 합 데이터를 전달하도록 구성될 수 있다. 그러한 경우에, 버스 라인(220)의 수는 어레이(204)의 행의 수와 일치할 것이다. 예를 들어, 8x8 계산 어레이의 경우, 8개의 부분 합 버스 라인(220)이 있을 것이며, 이들 각각은 계산 어레이(204)의 대응하는 행의 출력에 연결된다. 계산 어레이 출력 버스 라인(220)은 예를 들어, ASIC 칩 내의 다른 타일의 계산 어레이에 대한 입력으로서 ASIC 칩 내의 다른 타일에 연결하도록 추가로 구성될 수 있다. 예를 들어, 타일(200)의 어레이 부분 합 버스 라인(220)은 타일(200)로부터 이격된 적어도 하나의 타일에 위치된 제2 타일의 계산 어레이의 입력(예를 들어, 부분 합(Partial Sums)(220a))을 수신하도록 구성될 수 있다. 계산 어레이(204)의 출력은 타일(200)로부터 출력될 수 있는 새로운 부분 합(Partial Sums)(220b)을 생성하기 위해 부분 합 라인(220)에 추가된다. 그 다음 부분 합(220b)은 다른 타일 또는 대안적으로 벡터 프로세싱 유닛으로 전달될 수 있다. 예를 들어, 각각의 버스 라인(220)은 벡터 프로세싱 유닛의 대응하는 세그먼트(도 5의 세그먼트(106)와 같은)에 연결될 수 있다.
도 9에 대해 설명된 바와 같이, 제어 가능한 버스 라인은 데이터가 버스 라인을 따라 전달되도록 구성된 컨베이어 요소(예를 들어, 플립플롭)와 같은 회로를 포함할 수 있다. 일부 구현에서, 각각의 제어 가능한 버스 라인은 각각의 타일에 대해 대응하는 컨베이어 요소를 포함한다. 도 5에 대해 추가로 설명된 바와 같이, 제어 가능한 버스 라인은 데이터가 서로 다른 타일, 벡터 프로세싱 유닛 및 ASIC 칩의 통신 인터페이스 간에 전송되도록 구성된 멀티플렉서와 같은 회로를 포함할 수 있다. 멀티플렉서는 데이터 소스(source) 또는 싱크(sink)가 있는 곳이면 어디든지 위치할 수 있다. 예를 들어, 일부 구현에서, 도 6에 도시된 바와 같이, 멀티플렉서와 같은 제어 회로(221)는 제어 가능한 버스 라인의 교차점(crossings)에 위치할 수 있다(예: 범용 버스 라인(210a, 210d)의 교차점(크로스), 범용 버스 라인(210a, 210c)의 교차점, 범용 버스 라인(210b, 210d)의 교차점 및/또는 범용 버스 라인(210b 및 210c)의 교차점). 버스 라인 교차점의 멀티플렉서는 교차점들의 버스 라인들 간에 데이터를 전송하도록 구성할 수 있다. 제어 회로(221)는 타일(102) 내의 적절한 컴포넌트로 데이터를 라우팅하거나 제어 가능한 버스 라인으로/로부터 출력 데이터 및 입력 데이터를 라우팅(예를 들어, 활성화 데이터 또는 계층 가중치(layer weights)를 SRAM(202)으로/부터 계산 어레이(204)의 적절한 셀(206)로 라우팅)함으로써 오퍼레이션 스케줄의 동작을 실행할 수 있다.
도 7a 내지 도 13b는 ASIC(100)이 신경망 추론을 계산하기 위한 하드웨어 가속기로 사용되는 예시적인 프로세스를 도시하는 개략도이다. 도 7a, 8a, 9a, 10a, 11, 12a 및 13a는 프로세스의 상이한 시간에 ASIC(100)을 통한 데이터 흐름의 개요를 예시하는 개략도이다. 도 7b, 8b, 9b, 10b, 12b 및 13b는 도 7a, 8a, 9a, 10a, 12a 및 13a에 각각 연관된 시간에 ASIC(100)의 단일 타일(예를 들어, 제어 타일 또는 다른 타일(102)) 내의 데이터 흐름을 예시하는 개략도이다. 도 7a 내지 도 13b의 타원은 도면에 도시되지 않은 반복 피처(repeating features)의 존재를 나타낸다. 나침반(300)은 데이터 흐름에 대한 방향을 제공하기 위해 도 7a 내지 도 13b 각각에 제공된다. 레이블 "N", "W", "S" 및 "E"는 실제 지리적 방향에 해당하지 않지만 대신 데이터가 그리드를 통해 흐를 수 있는 다른 상대 방향을 나타내는 데 사용된다. 레이블 "N", "W", "S" 및 "E"로 표시된 방향으로 데이터를 전달하는 제어 가능한 버스 라인은 여기에서 노우스로 흐르는 버스 노선, 웨스트로 흐르는 버스 노선, 사우스로 흐르는 버스 노선 및 이스트로 흐르는 버스 노선이라고 한다.
도 7a 내지 도 13a의 벡터 프로세싱 유닛(104) 및 타일(102)의 배열은 도 5에 도시된 배열과 유사하다. 예를 들어, 타일(102)의 절반은 벡터 프로세싱 유닛(104)의 제1 측에 배열될 수 있고 타일(102)의 다른 절반은 벡터 프로세싱 유닛(104)의 제2 반대측(opposite side)에 배열될 수 있다. 통신 인터페이스(108)는 타일 그리드의 우측에 전체적으로 배열된 도 7a 내지 도 13a에 도시되지만, 도 5의 개략도에 도시된 바와 같이 타일 그리드의 어느 한쪽에 위치될 수 있다.
도 7a에 도시된 바와 같이, 제1 스텝에서, 모델(예를 들어, 신경망 모델)의 제1 계층에 대한 입력 값(예를 들어, 활성화 입력 및/또는 가중치 입력)은 통신 인터페이스(108)로부터 ASIC(100) 내의 하나 이상의 타일(102)(예를 들어, 모든 타일(102))로 로드된다. 즉, 도 1 내지 도 3과 관련하여 본 명세서에서 설명된 바와 같이 구성 데이터 패킷 또는 프로그램 동작 패킷과 같은 데이터는 통신 인터페이스(108)로부터 수신된다. 통신 인터페이스(108)로부터, 입력 값은 제어 가능한 버스 라인(예: 여기에 설명된 범용 제어 가능한 버스 라인 등)을 따라 하나 이상의 제어 타일로의 데이터 경로를 따른다. 데이터는 서로 다른 버스 라인이 교차하는 위치에서 멀티플렉서를 사용하여 서로 다른 버스 라인 간에 전송할 수 있다(예를 들어, 도 6의 라우팅(routing) 요소(221) 참조). 예를 들어, 도 7a에 도시된 바와 같이, 입력 데이터는 웨스트로 흐르는(서향) 범용 제어 가능한 버스 라인을 따라 이동한 다음 사우스로 흐르는(남향) 범용 제어 가능한 버스 라인을 따라 이동하는 데이터 경로를 따라 흐른다. 입력 데이터는 서향 버스 라인과 남향 버스 라인이 교차하는 위치에서 멀티플렉서를 사용하여 서향 버스 라인에서 남향 버스 라인으로 전송할 수 있다. 일부 구현에서, 이전의 제1 추론이 ASIC(100)에 의해 실행되는 동안 제2 추론에 대한 가중치 입력이 하나 이상의 제어 타일에 로드될 수 있다. 다시 말해서, 제어 타일의 오퍼레이션 스케줄은 추론을 계산하는 다른 타일(102)의 오퍼레이션 스케줄과 조정되어, 다른 타일(102)이 제1 추론을 계산하는 동일한 카운터 시간에, 제어 타일(102)은 다음 추론의 계산을 위해 다른 타일(102)에 전송될 다음 추론에 대한 새로운 활성화 데이터 및/또는 가중치를 준비한다.
도 7b는 ASIC(100)으로부터의 타일(102)의 예에 대한 상세도를 예시하는 개략도이다. 도 7b에 도시된 바와 같이, 타일(102)은 입력 값이 저장되는 메모리(302)를 포함할 수 있다. 메모리(302)는 도 6과 관련하여 본 명세서에 설명된 임의의 적절한 메모리를 포함할 수 있다. 위에서 설명된 바와 같이, 메모리(302)는 (예를 들어, 구성 데이터 패킷들로부터의) 구성 상태 데이터 또는 타일의 개별 오퍼레이션 스케줄과 같은 프로그램 데이터를 저장하는 데 사용될 수 있다. 입력 값은 타일(102)에 인접하거나 타일(102)을 통과하는 하나 이상의 사우스로 흐르는(남향) 범용 제어 가능한 버스 라인(310d)으로부터 얻어진다. 사우스로 흐르는(남향) 제어 가능한 버스 라인(310d)으로부터의 데이터는 멀티플렉서를 사용하여 메모리(302)로 전송될 수 있다. 다른 범용 제어 가능한 버스 라인(310a, 310b, 310c)은 이 스텝(단계)에서 사용되지 않는다.
타일(102)은 또한 메모리(302)에 직접 연결된 셀(306)의 계산 어레이를 포함한다. 본 명세서에 설명된 바와 같이, 셀(306)의 계산 어레이는 ASIC의 타일을 구성하는 더 큰 시스톨릭(systolic) 어레이의 셀의 서브세트일 수 있다. 셀(306)은 위치(i, j)=(0, 0)에서 도 7b에 도시된 단일 셀(306)을 갖는 어레이로 배열되며, 파라미터 i 는 어레이(배열) 내의 셀 행 위치를 나타내고, j는 배열의 셀 열 위치를 나타낸다. 도 7b에 도시된 예에서, 계산 어레이(배열)에는 8개의 행과 8개의 열이 있지만 다른 크기도 가능하다. 계산 어레이의 각각의 셀(306)은 타일에서 수신된 데이터에 기초하여 계산을 수행하도록 구성된 회로를 포함할 수 있다. 예를 들어, 각각의 셀(306)은 승산기 회로, 가산기 회로, 및 하나 이상의 레지스터를 포함할 수 있다. 각 셀(306)의 출력은 계산 어레이 내의 인접 셀 또는 ASIC(100)의 다른 타일의 계산 어레이 내의 셀에 부분 합으로서 전달될 수 있다. 셀(306)의 계산 어레이는 이후 단계에서 사용된다.
타일(102)은 또한 이전 타일로부터 데이터를 제공하기 위한 제어 가능한 버스 라인(320)을 포함한다. 예를 들어, 제어 가능한 버스 라인(320)은 ASIC(100)의 이전 타일의 계산 어레이로부터 획득된 부분 합 출력 데이터를 전달하고 타일(102) 내의 계산 어레이의 셀에 대한 입력으로서 부분 합 출력 데이터를 제공할 수 있다. 제어 가능한 버스 라인(320)은 이 단계에서 사용되지 않는다.
타일(102)은 또한 계산 어레이의 셀(306)에 대한 입력으로서 활성화 입력 값을 제공하기 위한 제어 가능한 버스 라인(330)을 포함한다. 예를 들어, 활성화 입력 값은 셀(306) 내의 곱셈기 회로에 제공될 수 있다. 활성화 입력 값은 통신 인터페이스(108) 또는 ASIC(100)의 다른 타일 내의 셀로부터 획득될 수 있다. 제어 가능한 버스 라인(330)으로부터의 데이터는 멀티플렉서를 사용하여 셀(306)로 전송될 수 있다. 제어 가능한 버스 라인(330)은 도 7a 및 도 7b에 도시된 예시적인 단계에서 사용되지 않는다.
본 명세서에 설명된 바와 같이, 일부 구현에서, 하나 이상의 타일(102)은 오퍼레이션 스케줄 및/또는 벡터 프로세싱 유닛(104)으로부터의 출력 정보와 같은 프로그램 데이터를 저장하는 데 전용된다. 일부 구현에서, 하나 이상의 제어 타일 내의 계산 어레이는 계산을 수행하는 데 사용되지 않을 수 있다. 대안적으로, 하나 이상의 제어 타일은 수신된 가중치 입력 및 활성화 값과 같은 입력 데이터에 대한 계산을 수행하는 것 외에도 오퍼레이션 스케줄과 같은 프로그램 데이터를 저장하도록 구성될 수 있다. 일부 구현에서, 가중치 입력은 가중치 입력을 하나 이상의 제어 타일의 서브세트에 먼저 저장하지 않고 가중치 입력이 사용될 각 타일(102)의 메모리에 로드된다.
제2 단계(스텝)에서, 도 8a에 도시된 바와 같이, 스케줄링된 카운터 값에서 가중치 입력(301)은 타일(102) 내의 계산 어레이의 개별 셀(306)에 로드된다. 가중치 입력(301)을 개별 셀(306)에 로딩하는 것은 하나 이상의 제어 타일의 메모리로부터 가중치 입력(301)이 속하는 대응하는 타일(102)로 데이터를 전송하는 것을 포함할 수 있다. 가중치 입력(301)은 범용 제어 가능한 버스 라인을 따라 타일(102)로 전달될 수 있고 버스 라인 및 메모리에 연결된 멀티플렉서를 통해 메모리로 전송될 수 있다. 도 8b는 타일(102)의 예의 상세도이다. 가중치 입력(301)은 다중 추론의 계산을 포함할 수 있는 모델 실행 기간 동안 메모리(302)에 저장될 수 있다. 하나 이상의 제어 타일로부터 가중치 입력(301)을 로드하는 것에 대한 대안으로서, 가중치 입력(301)은 통신 인터페이스(108)로부터 직접 타일(102)의 메모리로 사전 로드될 수 있다. 실행을 위한 모델을 준비하기 위해, 각 타일(102)에 대한 가중치 입력(301)은 타일(102)의 메모리(302)로부터 그 타일(102) 내의 계산 어레이의 각 셀(306)로 로딩될 수 있다. 예를 들어, 가중치 입력(301)은 셀(306) 내의 레지스터(400)("백 레지스터"라고도 함)에 로드될 수 있다. 백 레지스터를 사용하면 다음 가중치 입력이 백 레지스터에 로드되는 동안 현재 가중치 입력에 대해 셀(306)에 의해 계산이 수행될 수 있다. 가중치 레지스터를 로드하는 것이 도 8b에서 하나의 셀(306)에 대해서만 도시되지만, 계산 어레이 내의 다른 셀의 가중치 레지스터도 이 단계 동안 로드될 수 있다.
제3 단계에서, 도 9a에 도시된 바와 같이, 스케줄링된 카운터 값에서, 활성화 값(500)은 타일(102)에 도입되고 그곳의 메모리(302) 내에 저장될 수 있다. 활성화 값(500)은 다중 클록 사이클에 걸쳐 전송될 수 있다. 그 다음, 타일(102)의 메모리(302)로부터 수신된 활성화 값(500) 및 가중치 입력(301)을 사용하여 각 타일(102)의 계산 어레이에 의해 계산이 수행된다. 예를 들어, 계산은 활성화 값에 가중치 입력을 곱한 다음 결과를 다른 가중치 입력 및 활성화 값의 곱과 합산하는 것을 포함할 수 있다. 일부 구현에서, 활성화 값(500)은 제어 가능한 버스 라인(330) 상의 타일(102)로 그리고 타일(102) 사이에서 전달된다. 제어 가능한 버스 라인들(330) 각각은 동일한 방향을 따라 연장될 수 있다. 예를 들어, 도 9b에 도시된 바와 같이, 제어 가능한 버스 라인(330)은 제어 가능한 버스 라인(320)이 연장되는 그리드 치수에 직교하는 그리드 치수를 따라 측방향으로 연장된다. 또한, 도 9a의 화살표(501), 그리고 도 9b의 제어 가능한 버스 라인(330)의 화살표(501)로 표시된 바와 같이, 활성화 입력 데이터(500)는 버스 라인(330) 상에서 동일한(예를 들어, 이스트로 흐르는) 방향으로 이동한다. 대안적으로, 일부 구현에서, 활성화 입력 값(500) 중 일부는 제어 가능한 버스 라인(330) 중 일부에서 제1 방향(예: 이스트 방향)으로 이동(travel)하고, 일부 다른 활성화 입력 값(500)은 제2 반대 방향(예: 웨스트로 흐르는 방향)으로 이동한다.
일부 구현들에서, 각각의 타일(102)을 통해 연장되는 제어가능한 버스 라인들(330)의 수는 계산 어레이의 크기에 의해 결정된다. 예를 들어, 각각의 타일(102)을 통해 연장되는 제어가능한 버스 라인(330)의 수는 적어도 계산 어레이 내의 셀의 행의 수와 동일할 수 있다. 도 9b에 도시된 바와 같이, 타일(102)의 계산 어레이 내에 8개의 셀(306) 행이 있는 경우 타일(102)을 통과하는 8개의 제어 가능한 버스 라인(330)이 있다. 일부 구현에서, 각각의 개별 제어 가능한 버스 라인(330)은 계산 어레이의 대응하는 행 내의 셀(306)에 활성화 입력 값(500)을 전달한다. 예를 들어, 타일(102) 내의 셀(306)의 8 x 8 계산 어레이의 경우, 제1 제어 가능한 버스 라인(330)은 어레이의 제1 행 내의 셀(306)에 활성화 입력 값(500)을 전달하고, 제2 제어 가능한 버스 라인(330)은 활성화 입력 값(500)을 어레이의 제2 행 내의 셀(306)에 전달하고, 마지막 제어 가능한 버스 라인(330)까지 활성화 입력 값(500)을 어레이의 마지막 행 내의 셀(306)에 전달한다. 추가적인 제어 가능한 버스 라인(예를 들어, 부분 합 버스 라인)은 각 타일을 통과하여 다른 타일로부터 부분 합을 제공하고, 타일 내의 계산 결과를 수신 및 제공된 부분 합으로 결합하고, 새로운 부분 합을 새로운 타일 또는 벡터 프로세싱 유닛에 출력할 수 있다.
일부 구현에서, 제어 가능한 버스 라인(330)은 활성화 입력 값(500)을 셀(306) 내에서 계산을 수행하도록 구성된 회로에 전달한다. 예를 들어, 도 9b에 도시된 바와 같이, 제어 가능한 버스 라인(330)은 활성화 입력 값(500)을 셀(306) 내의 승산기 회로(502)로 전송하도록 구성된다. 활성화 입력 값(500)은 제어 가능한 버스 라인(330) 상의 멀티플렉서를 사용하여 승산기 회로(502)로 전달될 수 있다. 일부 구현에서, 활성화 입력 값(500) 및 가중치 입력 값(301)이 제자리에 있는 것으로(예: 로딩 오퍼레이션을 수행하는 데 필요한 카운터 사이클의 미리 결정된 수 이후) 결정되면, 타일(102) 내의 계산 어레이의 셀(306)은 타일(102)의 메모리(302)로부터 수신된 활성화 입력 값(500) 및 가중치 입력 값(301)을 사용하여 계산을 수행한다. 예를 들어, 도 9b에 도시된 바와 같이, 이전에 레지스터(400)에 저장된 가중치 입력 값(301)은 레지스터(504)("프론트 레지스터(front register)"라고도 함)로 전송된다. 그 다음, 승산기 회로(502)를 사용하여 가중치 입력 값(301)에 수신된 활성화 입력 값(500)을 곱한다.
여기에 설명된 바와 같이, 활성화 입력 값(500)은 제어 가능한 버스 라인(330)을 통해 전달된다. 일부 구현에서, 제어 가능한 버스 라인(330)은 범용 제어 가능한 버스 라인이다. 일부 구현들에서, 제어가능한 버스 라인들(330)은 활성화 입력들을 제공하기 위해 전용될 수 있다. 예를 들어, 도 9b에 도시된 바와 같이, 활성화 입력 값은 라인(330)에 의해 타일(102)(예를 들어, 타일(102) 내의 계산 어레이의 셀(306)에)에 제공될 수 있는 반면, 다른 범용 제어 가능한 버스 라인(310b)은 타일(102)에 다른 데이터 및/또는 명령어를 제공하는 데 사용될 수 있다.
제4(네 번째) 단계에서, 도 10b에 도시된 바와 같이, 스케줄링된 카운터 값에서, 각 셀(306) 내에서 가중치 입력 값(301)과 활성화 입력 값(500) 사이의 계산 결과는 출력 값(600)을 생성하기 위해 셀(306) 내의 회로(602)로 전달된다. 도 10b에서, 회로(602)는 합산 회로를 포함한다. 각 셀(306) 내의 합산 회로(602)는 곱셈기 회로(502)의 곱을 ASIC(100)의 다른 타일(102) 또는 계산 어레이 내의 다른 셀(306)로부터 획득된 다른 값과 합산하도록 구성된다. 다른 타일(102) 또는 다른 셀(306)로부터 획득된 값은 예를 들어, 누적된 값을 포함할 수 있다. 따라서, 합산 회로(602)의 출력 값(600)은 새로운 누적 값이다. 그 다음, 합산 회로(602)는 타일(102) 내의 계산 어레이의 하단(예를 들어, 남향 방향으로) 인접 셀에 위치한 다른 셀에 새로운 누적 값(600)을 보낼 수 있다. 새로운 누적 값(600)은 하단 인접 셀에서 합산을 위한 피연산자로 사용될 수 있다. 계산 어레이 내의 셀의 마지막 행에 대해, 새로운 누적 값(600)은 도 10a에 도시된 바와 같이 ASIC(100) 내의 다른 타일(102)로 전송될 수 있다. 다른 예에서, 새로운 누적 값(600)은 새로운 누적 값(600)이 생성된 타일(102)로부터 적어도 하나의 타일인 다른 타일(102)로 전송될 수 있다. 대안적으로, 도 10a에 도시된 바와 같이, 계산 어레이 내의 셀의 마지막 행으로부터의 새로운 누적 값(600)은 벡터 프로세싱 유닛(104)으로 전송된다.
타일(102) 내로 전송되거나 타일(102) 외부로 전송되는 누적 값(600)은 제어 가능한 버스 라인(320)을 따라 전달될 수 있다. 제어 가능한 버스 라인(320) 각각은 동일한 방향을 따라 연장된다. 예를 들어, 도 10b에 도시된 바와 같이, 제어 가능한 버스 라인(320)은 제어 가능한 버스 라인(330)이 연장되는 그리드 치수(grid dimension)에 직교하는 그리드 치수를 따라 수직으로 연장된다. 또한, 도 10a의 화살표(604) 및 도 10b의 화살표(604)로 표시된 바와 같이, 누적된 값(600)은 누적된 값(600)이 생성되는 타일(102)에 대한 벡터 프로세싱 유닛(104)의 위치에 따라 노우스 방향 또는 사우스 방향으로 제어 가능한 버스 라인(320)을 따라 이동한다. 예를 들어, 도 10a의 벡터 프로세싱 유닛(104) 위에 위치한 타일(102)의 경우, 누적된 값(600)은 제어 가능한 버스 라인(320)을 따라 벡터 프로세싱 유닛(104)을 향해 사우스로 흐르는 방향으로 이동하는 반면, 벡터 프로세싱 유닛(104) 아래에 위치한 타일(102)에 대해, 누적된 값(600)은 벡터 프로세싱 유닛(104)을 향해 노우스로 흐르는 방향으로 이동한다.
도 11에 도시된 바와 같이 제5 단계에서, 스케줄링된 카운터 값에서, 벡터 프로세싱 유닛(104)에 의해 수신된 데이터(예를 들어, 누적 값)는 처리된(프로세싱된) 값(900)을 제공하기 위해 벡터 프로세싱 유닛(104)에 의해 처리된다. 벡터 프로세싱 유닛(104)에서의 데이터의 프로세싱은 벡터 프로세싱 유닛(104)에서 수신된 데이터에 바이어스를 적용하는 것, 추가적인 누적 연산(오퍼레이션)들을 수행하는 것, 및/또는 수신된 데이터에 비선형 함수(예: 신경망 시스템에서 알려진 정류기 함수 또는 시그모이드 함수)를 적용하는 것을 포함할 수 있다. 다른 연산들도 벡터 프로세싱 유닛(104)에 의해 적용될 수 있다. 벡터 프로세싱 유닛(104)은 복수의 세그먼트(106)에 배열된 회로를 포함할 수 있고, 여기서 각각의 세그먼트(106)는 타일(102)의 대응하는 열로부터 수신된 데이터를 처리하고 대응하는 처리된 값(900)을 생성하도록 구성된다.
제6(여섯 번째) 단계에서, 도 12a에 도시된 바와 같이, 스케줄링된 카운터 값에서, 벡터 프로세싱 유닛(104)으로부터의 처리된 값(900)은 ASIC(100)의 하나 이상의 타일, 예를 들어, ASIC(100)의 타일의 서브세트로 전송되어 저장된다. 예를 들어, 처리된 값(900)은 벡터 프로세싱 유닛(104)에 직접 인접하여 위치하는 제어 타일(103)로 전송될 수 있다. 대안적으로 또는 추가로, 처리된 값(900)은 ASIC(100) 내의 다른 타일(102) 중 하나 이상으로 전송될 수 있다. 처리된 값(900)은 제어 가능한 버스 라인(310c)과 같은 범용 제어 가능한 버스 라인을 통해 하나 이상의 타일로 전송될 수 있다. 타일(예를 들어, 제어 타일 또는 다른 타일(102))에 도달하면, 처리된 값(900)은 타일의 메모리(202)에 저장될 수 있다. 예를 들어, 처리된 값(900)은 제어 가능한 버스 라인(310c)과 연관된 멀티플렉서를 사용하여 메모리(902)로 전송될 수 있다. 처리된 값을 저장하는 단계(900)는 각 모델 계층의 추론이 획득된 후에 발생할 수 있다. 일부 구현에서, 처리된 값(900)은 모델의 다음 계층에 대한 입력 값으로서 제공될 수 있다.
제7(일곱 번째) 단계에서, 도 13a 및 도 13b에 도시된 바와 같이, 스케줄링된 카운터 값에서, 처리된 값(900)은 ASIC(100) 외부로 반출(exported off)될 수 있다. 예를 들어, 처리된 값(900)은 하나 이상의 제어 타일의 메모리(202)로부터 통신 인터페이스(108)로 전송될 수 있다. 처리된 값(900)은 제어 가능한 버스 라인(예를 들어, 제어 가능한 버스 라인(310c 및/또는 310d))을 통해 통신 인터페이스(108)로 전달될 수 있다. 처리된 값(900)은 버스 라인과 관련된 멀티플렉서를 통해 제어 가능한 버스 라인으로 전송될 수 있다.
처리된 값(900)은 예를 들어 모델의 최종 계층에 대한 추론이 획득되었거나 모델이 여러 ASIC 간에 분할되었고 ASIC(100)과 관련된 최종 계층에 대한 추론이 획득된 경우, ASIC(100) 외부로 내보낼 수 있다. 처리된 값(900)은 통신 인터페이스(108)의 SerDes 인터페이스에 의해 수신되고 예를 들어, 다른 ASIC(100) 또는 필드 프로그램 가능 게이트 어레이 칩을 포함하지만 이에 제한되지 않는 다른 목적지로 내보낼 수 있다.
도 7a 내지 도 13b와 관련하여 설명된 예시적인 프로세스는 셀 계산이 수행되기 전에 각 타일의 계산 어레이 전체에 걸쳐 활성화 값 및 가중치 입력이 완전히 전파(propagated)되는 것을 요구할 수 있거나 모든 값이 완전히 전파되기 전에 셀이 계산을 수행할 수 있다. 두 경우 모두 개별 타일의 오퍼레이션 스케줄을 조정하여 계산 시간이 적절하게 맞춰질 수 있다. 예를 들어, 특정 기계 학습 프로그램에서 셀 계산이 수행되기 전에 활성화 값과 가중치 입력이 각 타일의 계산 배열을 통해 완전히 전파되어야 하는 경우, 오퍼레이션 명령어는 활성화 값과 가중치가 완전히 전파되도록 하는 시간 동안 계산 실행을 예약(스케줄링)할 수 있다. 뿐만 아니라, ASIC(100)이 계산 어레이의 열로 전송되는 가중치 입력 및 계산 어레이의 행으로 전송되는 활성화 입력으로 설명되었지만, 일부 구현에서 가중치 입력은 어레이의 행으로 전송되고 활성화 입력은 어레이의 열로 전송된다.
또한, 계산 어레이가 여기에서 각 셀 내의 개별 합산 회로를 사용하는 것으로 설명되었지만, 계산 어레이 내의 셀 그룹(예: 열 내의 모든 셀)은 단일 합산 회로에 직접 결합될 수 있으며, 이는 그룹의 셀로부터 수신된 출력을 합산하여 출력을 저장하는 데 필요한 합산 회로의 수를 줄인다.
본 명세서에 기술된 주제 및 기능적 동작의 실시예는 본 명세서에 개시된 구조 및 이들의 구조적 등가물을 포함하는 컴퓨터 하드웨어에서, 또는 이들 중 하나 이상의 조합으로 구현될 수 있다. 본 명세서에 기술된 주제의 실시예는 하나 이상의 컴퓨터 프로그램, 즉, 데이터 처리 장치에 의한 실행을 위해 또는 데이터 처리 장치의 동작을 제어하기 위해 유형의 비일시적 프로그램 캐리어 상에 인코딩된 컴퓨터 프로그램 명령어의 하나 이상의 모듈로서 구현될 수 있다. 대안적으로 또는 추가로, 프로그램 명령어는 데이터 처리 장치에 의한 실행을 위해 적절한 수신기 장치로의 전송을 위한 정보를 인코딩하도록 생성된 인공적으로 생성된 전파 신호, 예를 들어 기계 생성 전기, 광학 또는 전자기 신호에 인코딩될 수 있다. 컴퓨터 저장 매체는 기계 판독 가능한 저장 장치, 기계 판독 가능한 저장 기판, 랜덤 또는 직렬 액세스 메모리 장치, 또는 이들 중 하나 이상의 조합일 수 있다.
"데이터 처리 장치"라는 용어는 예를 들어 프로그램 가능한 프로세서, 컴퓨터, 또는 다중 프로세서 또는 컴퓨터를 포함하여 데이터를 처리하기 위한 모든 종류의 장치, 장치 및 기계를 포함한다. 장치는 FPGA(field programmable gate array) 또는 ASIC과 같은 특수 목적 로직 회로를 포함할 수 있다. 장치는 또한 하드웨어 외에, 해당 컴퓨터 프로그램에 대한 실행 환경을 생성하는 코드, 예를 들어 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 체제, 또는 이들 중 하나 이상의 조합을 구성하는 코드를 포함할 수 있다.
본 명세서에 설명된 프로세스 및 로직 흐름은 입력 데이터에 대해 작동하고 출력을 생성함으로써 기능을 수행하기 위해 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그래밍 가능한 컴퓨터에 의해 수행될 수 있다. 프로세스 및 로직 흐름은 또한 특수 목적 로직 회로, 예를 들어 FPGA, ASIC 또는 GPGPU(범용 그래픽 처리 장치)에 의해 수행될 수 있고, 이들에 의해 장치가 또한 구현될 수 있다.
본 명세서는 많은 특정 구현 세부사항을 포함하지만, 이는 임의의 발명의 범위 또는 청구될 수 있는 것에 대한 제한으로 해석되어서는 안 되며, 오히려 특정 발명의 특정 실시예에 특정될 수 있는 특징의 설명으로 해석되어야 한다. 별도의 실시예와 관련하여 본 명세서에 설명된 특정 특징은 단일 실시예에서 조합하여 구현될 수도 있다. 역으로, 단일 실시예의 맥락에서 설명된 다양한 특징은 또한 개별적으로 또는 임의의 적절한 하위 조합으로 다중 실시예에서 구현될 수 있다. 더욱이, 특징들이 특정 조합으로 작용하는 것으로 위에서 설명될 수 있고 심지어 초기에 그러한 것으로 청구될 수도 있지만, 청구된 조합의 하나 이상의 특징은 일부 경우에 조합에서 제거될 수 있으며 청구된 조합은 하위 조합 또는 하위 조합의 변형에 관한 것일 수 있다.
유사하게, 오퍼레이션이 특정 순서로 도면에 도시되어 있지만, 이는 바람직한 결과를 달성하기 위해 그러한 오퍼레이션이 도시된 특정 순서 또는 순차적인 순서로 수행되거나 도시된 모든 오퍼레이션이 수행될 것을 요구하는 것으로 이해되어서는 안 된다. 특정 상황에서는 멀티태스킹 및 병렬 처리가 유리할 수 있다. 더욱이, 상술한 실시예에서 다양한 시스템 모듈 및 컴포넌트의 분리는 모든 실시예에서 그러한 분리를 요구하는 것으로 이해되어서는 안되며, 설명된 프로그램 컴포넌트 및 시스템은 일반적으로 단일 소프트웨어 제품에 함께 통합되거나 여러 소프트웨어 제품에 패키징될 수 있음을 이해해야 한다.
주제의 특정 실시예가 설명되었다. 다른 실시예는 다음 청구항의 범위 내에 있다. 예를 들어, 버스 라인이 "제어 가능"으로 설명되어 있지만 모든 버스 라인이 동일한 수준의 제어를 가질 필요는 없다. 예를 들어, 일부 버스 라인이 데이터를 소싱할 수 있거나 데이터를 보낼 수 있는 타일 수가 제한된 경우에만 일부 버스 라인을 제어할 수 있는 다양한 제어 가능성이 있을 수 있다. 다른 예에서, 일부 버스 라인은 여기에 설명된 바와 같이 노우스, 이스트, 웨스트 또는 사우스와 같은 단일 방향을 따라 데이터를 제공하기 위해 전용될 수 있다. 어떤 경우에는 청구범위에 인용된 액션이 다른 순서로 수행될 수 있으며 여전히 바람직한 결과를 얻을 수 있다. 일례로서, 첨부 도면에 도시된 프로세스는 바람직한 결과를 달성하기 위해 도시된 특정 순서 또는 순차적인 순서를 반드시 필요로 하지는 않는다. 특정 구현에서, 멀티태스킹 및 병렬 처리가 유리할 수 있다.

Claims (21)

  1. 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법으로서,
    복수의 하드웨어 타일 중 마지막 하드웨어 타일을 제외한 각 하드웨어 타일을 데이터 포워딩 상태로 구성함으로써 복수의 하드웨어 타일을 통한 데이터 포워딩 경로를 설정하는 단계 -마지막 하드웨어 타일을 제외한 각 하드웨어 타일을 포워딩 상태로 구성하는 것은 하드웨어 타일이 데이터 포워딩 상태에 있는 해당하는 미리 정의된 시간 길이를 지정하는 각각의 포워딩 상태 카운터를 설치하는 것을 포함함-;
    상기 데이터 포워딩 경로를 따라, 복수의 하드웨어 타일의 각 하드웨어 타일에 하드웨어 타일에 대한 프로그램 데이터를 포함하는 각각의 프로그램 데이터 패킷을 공급하는 단계; 그리고
    복수의 하드웨어 타일의 각 하드웨어 타일에 대해, 각각의 프로그램 데이터를 설치하는 단계를 포함하는 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  2. 제1항에 있어서, 상기 복수의 하드웨어 타일 중 마지막 하드웨어 타일을 제외한 각 하드웨어 타일의 포워딩 상태 카운터는 상기 데이터 포워딩 경로를 통해 전달된 제1 데이터 패킷을 수신할 때 설치되는 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  3. 제2항에 있어서, 상기 제1 데이터 패킷은 복수의 하드웨어 타일 중 마지막 하드웨어 타일에 대한 프로그램 데이터를 포함하는 프로그램 데이터 패킷을 포함하는 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  4. 선행하는 청구항 중 어느 한 항에 있어서, 각 하드웨어 타일에 대한 각각의 포워딩 상태 카운터를 설치하는 단계는 하드웨어 타일의 트리거 테이블에 포워딩 상태 카운터를 정의하는 단계를 포함하는 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  5. 제4항에 있어서, 각 하드웨어 타일의 포워딩 상태 카운터가 해당하는 미리 정의된 시간 길이에 도달할 때, 상기 트리거 테이블은 하드웨어 타일에 대한 프로그램 데이터의 설치를 트리거하고 그리고 하드웨어 타일로 하여금 데이터 포워딩 상태를 종료하게 하는 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  6. 선행하는 청구항 중 어느 한 항에 있어서, 각각의 포워딩 상태 카운터를 포함하는 각 하드웨어 타일에 대해, 포워딩 상태 카운터의 해당하는 미리 정의된 시간 길이는 데이터 포워딩 경로의 후속 하드웨어 타일의 수(number)의 함수인 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  7. 선행하는 청구항 중 어느 한 항에 있어서, 상기 복수의 하드웨어 타일의 각 하드웨어 타일은 상기 하드웨어 타일에 대한 각각의 프로그램 데이터를 로컬 메모리에 저장하는 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  8. 선행하는 청구항 중 어느 한 항에 있어서, 각각의 포워딩 상태 카운터를 포함하는 각 하드웨어 타일은 적어도 하나의 프로그램 데이터 패킷을 상기 데이터 포워딩 경로의 적어도 하나의 다른 하드웨어 타일로 포워딩하는 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  9. 선행하는 청구항 중 어느 한 항에 있어서, 각 하드웨어 타일은 회로 요소의 시스톨릭(systolic) 어레이를 포함하는 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  10. 선행하는 청구항 중 어느 한 항에 있어서, 상기 복수의 타일은 1차원 또는 2차원 어레이로 배열되는 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  11. 선행하는 청구항 중 어느 한 항에 있어서, 상기 방법은,
    상기 하드웨어 타일이 상기 하드웨어 타일 상에 설치된 프로그램 데이터에 의해 정의된 오퍼레이션을 시작할 때까지 해당하는 미리 정의된 시간 길이를 지정하는 각각의 킥오프(kickoff) 상태 카운터를 복수의 하드웨어 타일 중 적어도 일부 하드웨어 타일에 설치하는 단계를 더 포함하는 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  12. 제11항에 있어서, 상기 복수의 하드웨어 타일 중 마지막 하드웨어 타일을 제외한 각 하드웨어 타일의 각각의 킥오프 상태 카운터는 상기 제1 데이터 패킷을 수신할 때 설치되는 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  13. 제12항에 있어서, 각각의 킥오프 상태 카운터에 대한 미리 정의된 시간 길이가 상이한 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  14. 제13항에 있어서, 각각의 킥오프 상태 카운터에 대한 미리 정의된 시간 길이는 데이터 포워딩 경로의 하드웨어 타일의 수의 함수인 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  15. 제11항 내지 제14항 중 어느 한 항에 있어서, 각각의 킥오프 상태 카운터에 대한 미리 정의된 시간 길이는 복수의 하드웨어 타일이 각각의 프로그램 데이터를 동시에 실행하도록 정의되는 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  16. 제11항 내지 제15항 중 어느 한 항에 있어서, 각 하드웨어 타일의 각각의 킥오프 상태 카운터를 설치하는 단계는 하드웨어 타일의 트리거 테이블에 킥오프 상태 카운터를 정의하는 단계를 포함하는 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  17. 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법으로서,
    상기 복수의 타일 중 마지막 하드웨어 타일을 제외한, 상기 복수의 타일의 각 하드웨어 타일을 통해 데이터 포워딩 경로를 설정하는 단계를 포함하고, 상기 데이터 포워딩 경로를 설정하는 단계는,
    (a) 타일에 대한 프로그램 데이터를 설치하고, (b) 타일을 포워딩 상태로 구성하고, (c) 하드웨어 타일이 데이터 포워딩 상태에 있는 해당하는 미리 정의된 시간 길이를 지정하는 킥오프 상태 카운터를 설치함으로써, 데이터 포워딩 경로의 각 하드웨어 타일을 순차적으로 구성하는 단계를 포함하는 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  18. 제17항에 있어서, 데이터 포워딩 경로의 특정 타일에 대해, 미리 정의된 시간 길이는 아직 프로그램 데이터가 설치되지 않은 복수의 타일 내의 타일 수의 함수인 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  19. 제17항 또는 제18항에 있어서, 각 킥오프 상태 카운터가 해당하는 미리 정의된 시간 길이에 도달하면, 상기 킥오프 상태 카운터가 설치된 타일은 상기 타일에 설치된 프로그램 데이터에 따라 오퍼레이션을 실행하기 시작하는 것을 특징으로 하는 복수의 하드웨어 타일을 포함하는 집적 회로를 구성하는 방법.
  20. 집적 회로를 포함하는 시스템으로서,
    복수의 하드웨어 타일; 그리고
    상기 복수의 하드웨어 타일을 커플링하는 데이터 버스를 포함하며,
    상기 시스템은 선행하는 청구항 중 어느 한 항에 따른 방법을 수행하도록 구성되는 것을 특징으로 하는 시스템.
  21. 데이터 버스에 의해 커플링된 복수의 하드웨어 타일을 포함하는 컴퓨팅 시스템에 의해 실행될 때, 상기 컴퓨팅 시스템으로 하여금 제1항 내지 제19항 중 어느 한 항에 따른 방법을 수행하게 하는 컴퓨터 판독가능 코드를 포함하는 컴퓨터 프로그램 제품.
KR1020227009163A 2019-08-22 2020-08-20 온칩 오퍼레이션 초기화 KR20220051367A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201962890149P 2019-08-22 2019-08-22
US62/890,149 2019-08-22
PCT/US2020/047120 WO2021035015A1 (en) 2019-08-22 2020-08-20 Initializing on-chip operations

Publications (1)

Publication Number Publication Date
KR20220051367A true KR20220051367A (ko) 2022-04-26

Family

ID=72422232

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227009163A KR20220051367A (ko) 2019-08-22 2020-08-20 온칩 오퍼레이션 초기화

Country Status (6)

Country Link
US (1) US20220277125A1 (ko)
EP (1) EP4000229A1 (ko)
JP (2) JP7282980B2 (ko)
KR (1) KR20220051367A (ko)
TW (1) TWI758833B (ko)
WO (1) WO2021035015A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP4113312A1 (en) * 2021-06-28 2023-01-04 Google LLC Control of machine-learning systems
WO2023114417A2 (en) * 2021-12-16 2023-06-22 Google Llc One-dimensional computational unit for an integrated circuit

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0991262A (ja) * 1995-09-20 1997-04-04 Fuji Xerox Co Ltd マルチプロセッサシステム
US7804504B1 (en) * 2004-12-13 2010-09-28 Massachusetts Institute Of Technology Managing yield for a parallel processing integrated circuit
JP2009271724A (ja) * 2008-05-07 2009-11-19 Toshiba Corp ハードウェアエンジン制御装置
US9952831B1 (en) * 2017-02-16 2018-04-24 Google Llc Transposing in a matrix-vector processor
US10261786B2 (en) * 2017-03-09 2019-04-16 Google Llc Vector processing unit

Also Published As

Publication number Publication date
CN116057914A (zh) 2023-05-02
TW202127840A (zh) 2021-07-16
TWI758833B (zh) 2022-03-21
WO2021035015A1 (en) 2021-02-25
US20220277125A1 (en) 2022-09-01
JP2023107786A (ja) 2023-08-03
JP7282980B2 (ja) 2023-05-29
JP2022545115A (ja) 2022-10-25
EP4000229A1 (en) 2022-05-25

Similar Documents

Publication Publication Date Title
CN111164616B (zh) 能够后向传播的脉动神经网络引擎的装置和方法
KR102662211B1 (ko) 칩에 상주하는 파라미터를 갖는 신경망 가속기
US20220197714A1 (en) Training a neural network using a non-homogenous set of reconfigurable processors
US11451229B1 (en) Application specific integrated circuit accelerators
US11392740B2 (en) Dataflow function offload to reconfigurable processors
US10564929B2 (en) Communication between dataflow processing units and memories
CN111199275B (zh) 用于神经网络的片上系统
JP2023107786A (ja) オンチップ動作の初期化
US20190057060A1 (en) Reconfigurable fabric data routing
US20200167309A1 (en) Reconfigurable fabric configuration using spatial and temporal routing
US20190197018A1 (en) Dynamic reconfiguration using data transfer control
WO2023080976A1 (en) Schedule-aware dynamically reconfigurable adder tree architecture for partial sum accumulation in machine learning accelerator
WO2022133047A1 (en) Dataflow function offload to reconfigurable processors
WO2020112992A1 (en) Reconfigurable fabric configuration using spatial and temporal routing
CN115244909A (zh) 机器学习加速器中的队列分配
CN114258538B (zh) 片上操作的显式调度
JP7173985B2 (ja) 汎用並列コンピューティングアーキテクチャ
CN116057914B (en) Method and system for initializing on-chip operations
US20220058468A1 (en) Field Programmable Neural Array
US20220129769A1 (en) Modular neural network computing apparatus with distributed neural network storage
US20240054099A1 (en) Cluster-Based Placement and Routing of Memory Units and Compute Units in a Reconfigurable Computing Grid
Moreno et al. Synchronous digital implementation of the AER communication scheme for emulating large-scale spiking neural networks models
Dong A study on hardware design for high performance artificial neural network by using FPGA and NoC
WO2019169238A1 (en) Dynamic reconfiguration using data transfer control
WO2019040339A1 (en) RECONFIGURABLE MATRIX DATA ROUTING