KR20220045026A - 신경망 계산 가속화를 위한 하드웨어 회로 - Google Patents

신경망 계산 가속화를 위한 하드웨어 회로 Download PDF

Info

Publication number
KR20220045026A
KR20220045026A KR1020227008209A KR20227008209A KR20220045026A KR 20220045026 A KR20220045026 A KR 20220045026A KR 1020227008209 A KR1020227008209 A KR 1020227008209A KR 20227008209 A KR20227008209 A KR 20227008209A KR 20220045026 A KR20220045026 A KR 20220045026A
Authority
KR
South Korea
Prior art keywords
tile
computing
neural network
super
network layer
Prior art date
Application number
KR1020227008209A
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 KR20220045026A publication Critical patent/KR20220045026A/ko

Links

Images

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0207Addressing or allocation; Relocation with multidimensional access, e.g. row/column, matrix
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/0284Multiple user address space allocation, e.g. using different base addresses
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/044Recurrent networks, e.g. Hopfield networks
    • G06N3/0445
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • G06N3/0454
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • G06F2212/1024Latency reduction

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Mathematical Physics (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Evolutionary Computation (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Memory System (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)

Abstract

신경망을 구현하도록 구성된 하드웨어 회로를 위한 컴퓨터 판독 가능 매체를 포함하여 방법, 시스템 및 장치가 설명된다. 회로에는 다수의 슈퍼 타일이 포함된다. 각 슈퍼 타일에는 신경망 계층에 대한 입력과 계층에 대한 가중치를 저장하기 위한 통합 메모리가 포함된다. 각 슈퍼 타일에는 다수의 컴퓨팅 타일이 포함된다. 각 컴퓨팅 타일은 계산을 수행하여 신경망 계층에 대한 출력을 생성하는데 사용되는 컴퓨팅 스레드를 실행한다. 각 슈퍼 타일은 통합 메모리 및 각 컴퓨팅 타일에 연결된 중재 로직을 포함한다. 중재 로직은 통합 메모리에 저장된 입력을 컴퓨팅 타일로 전달하고, 계층에 대한 입력 및 가중치를 사용하여 컴퓨팅 타일에서 수행된 계산에 기초하여 계층에 대해 생성된 출력을 통합 메모리로 전달하도록 구성된다.

Description

신경망 계산 가속화를 위한 하드웨어 회로
본 명세서는 일반적으로 신경망 계산을 수행하는데 사용되는 하드웨어 가속기용 회로에 관한 것이다.
신경망은 하나 이상의 노드 계층을 사용하여 수신된 입력에 대한 출력(예를 들어, 분류)을 생성하는 기계 학습 모델이다. 일부 신경망에는 출력 계층 외에 하나 이상의 은닉 계층이 포함된다. 각 은닉층의 출력은 네트워크에 있는 하나 이상의 다른 계층(예를 들어, 다른 은닉층 또는 네트워크의 출력 계층)에 대한 입력으로 사용된다. 네트워크의 일부 계층은 개별 파라미터 세트의 현재 값에 따라 수신 입력으로부터 출력을 생성한다. 일부 신경망은 (예를 들어, 이미지 처리에 사용되는) 컨볼루션 신경망(CNN) 또는 (예를 들어, 음성 및 언어 처리에 사용되는) 순환 신경망(RNN)이다.
CNN 및 RNN은 개별 컨볼루션 또는 순환 신경망 계층 세트를 포함하는 신경망이다. 신경망 계층은 파라미터 또는 가중치에 대응할 수 있는 관련 커널 세트를 가질 수 있으며, 이는 신경망 추론을 계산하기 위해 계층의 대응하는 출력을 생성하기 위해 계층을 통해 입력을 처리하는데 사용된다. 커널은 가중치의 다차원 배열인 텐서로 나타낼 수 있다. 예를 들어, 계층 시퀀스의 신경망 계층는 이미지 픽셀 데이터의 입력 또는 계층 시퀀스의 다른 신경망 계층에 의해 생성된 활성화 값과 같은 입력 세트를 처리할 수 있다. 입력 세트 또는 활성화 값 세트도 텐서로 나타낼 수 있다.
본 문서는 인공 신경망 계층의 계산과 같은 예시적인 신경망 모델의 계산을 가속화하도록 구성된 하드웨어 가속기에서 사용될 수 있는 개선된 하드웨어 회로를 설명한다. 회로 아키텍처는 다수의 슈퍼 타일을 포함하고, 각 슈퍼 타일은 슈퍼 타일의 통합 메모리로부터 획득된 데이터에 기초하여 다수의 컴퓨팅 스레드를 실행하도록 구성된다. 통합 메모리는 각 컴퓨팅 스레드에 대한 계산이 수퍼 타일에서 동시에 실행될 수 있도록 각 컴퓨팅 스레드 간에 효율적으로 공유될 수 있는 메모리 구성을 제공한다.
일부 구현에서, 설명된 하드웨어 회로 및 처리 기술은 기계 학습 워크로드의 추론(또는 트레이닝) 계산을 수행하는데 사용되는 다수의 특수 목적 프로세서(예를 들어, 하드웨어 가속기)용 회로를 포함하는 소규모 또는 대규모 분산 시스템과 같은 예시적인 컴퓨팅 시스템에서 사용될 수 있다. 본 명세서에 회로 아키텍처는 다수의 특수 목적 프로세서 각각에 통합되어 프로세서가 다양한 유형의 기계 학습 모델에 대한 작업을 실행하기 위한 계산을 수행하는 속도 및 효율을 향상시킬 수 있다.
본 명세서에서 설명된 주제의 일 양태는 다수의 신경망 계층을 포함하는 신경망을 구현하고 신경망 계층에 대한 출력을 생성하기 위한 계산을 수행하도록 구성된 하드웨어 가속기용 회로로 구현될 수 있다. 회로는 다수의 슈퍼 타일을 포함하며, 다수의 슈퍼 타일의 각 슈퍼 타일은 신경망 계층에 대한 입력 및 신경망 계층에 대한 다수의 가중치를 저장하도록 구성된 통합 메모리와; 각각의 컴퓨팅 타일이 출력을 생성하기 위한 계산을 수행하는데 사용되는 컴퓨팅 스레드를 실행하도록 구성되는 다수의 컴퓨팅 타일과; 그리고 통합 메모리 및 컴퓨팅 타일 각각에 연결된 중재 로직 유닛을 포함한다. 중재 로직 유닛은 통합 메모리에 저장된 하나 이상의 입력을 각각의 컴퓨팅 타일로 전달하고; 통합 메모리에 저장된 개별 가중치 세트를 각각의 컴퓨팅 타일로 전달하고; 그리고 하나 이상의 입력 및 개별 가중치 세트를 사용하여 각각의 컴퓨팅 타일에서 수행된 계산에 기초하여 신경망 계층에 대해 생성된 출력을 통합 메모리로 전달하도록 구성된다.
이들 및 다른 구현은 각각 다음의 특징 중 하나 이상을 선택적으로 포함할 수 있다. 예를 들어, 일부 구현에서, 회로는 각 슈퍼 타일에 대한 개별 컨트롤러를 포함하고, 개별 컨트롤러는 통합 메모리의 대응하는 위치에 신경망 계층에 대한 각각의 입력을 저장하고, 대응하는 위치 각각은 개별 어드레스에 의해 식별되고; 통합 메모리의 대응하는 위치에 신경망 계층에 대한 다수의 가중치의 각 가중치를 저장하고, 대응하는 위치 각각은 개별 어드레스에 의해 식별되고; 그리고 중재 로직이 하나 이상의 입력을 특정 컴퓨팅 타일의 컴퓨팅 셀에 전달하고 개별 가중치 세트를 특정 컴퓨팅 타일에 전달하도록 하는데 사용되는 하나 이상의 제어 신호를 생성하도록 구성된다.
일부 구현에서, 컨트롤러는 특정 컴퓨팅 타일에 대해 로컬인 특정 컴퓨팅 타일의 개별 레지스터 파일에 특정 컴퓨팅 타일에 대한 개별 가중치 세트를 저장하도록 구성된다. 일부 구현에서, 컨트롤러는 슈퍼 타일의 대응하는 컴퓨팅 타일로 전달될 개별 입력 배치(batch)를 저장하기 위해 통합 메모리에서 어드레스의 파티셔닝(분할)을 결정하도록 구성되고, 어드레스의 각 파티션은 슈퍼 타일의 개별 컴퓨팅 타일에 할당된다.
일부 구현에서, 어드레스 파티션의 개별 어드레스는 입력 특징의 샘플을 형성하는 입력 배치의 입력에 해당하고; 입력 특징의 샘플은 다수의 입력 특징 세트를 포함하고; 그리고 입력 특징 세트는 오디오 데이터의 이미지 또는 스트림에 해당한다. 일부 구현에서, 중재 로직 유닛은 제1 어드레스 파티션에 대해, 어드레스 파티션내의 어드레스들에 의해 식별된 메모리 위치들로부터 제1 입력 배치를 획득하고; 그리고 제1 입력 배치를 제1 컴퓨팅 타일의 셀들로 전달하도록 구성되고, 제1 컴퓨팅 타일은 통합 메모리에 있는 결정된 어드레스 파티셔닝에 기초하여 제1 입력 배치의 각 입력을 수신하도록 할당된다.
일부 구현에서, 각각의 개별 슈퍼 타일에 대해: 다수의 컴퓨팅 타일의 각 컴퓨팅 타일은 컴퓨팅 타일에서 2개 이상의 컴퓨팅 스레드를 병렬로 실행하도록 구성되고; 그리고 각 컴퓨팅 타일은 신경망 계층에 대한 하나 이상의 입력과 신경망 계층에 대한 가중치 사이에 곱셈을 수행하여 신경망 계층에 대한 부분(partial) 출력을 생성하도록 컴퓨팅 스레드를 실행한다.
일부 구현에서, 각각의 개별 슈퍼 타일에 대해: 다수의 컴퓨팅 타일의 각 컴퓨팅 타일은 컴퓨팅 타일에서 2개 이상의 컴퓨팅 스레드를 병렬로 실행하는 것에 응답하여 신경망 계층에 대한 출력을 생성하기 위한 계산의 일부를 수행하고; 그리고 계산의 일부를 수행하는 것에 응답하여, 신경망 계층에 대한 출력을 생성하는데 사용되는 하나 이상의 부분 출력을 생성하도록 구성된다.
일부 구현에서, 회로는 슈퍼 타일에 있는 다수의 컴퓨팅 타일의 각 개별 컴퓨팅 타일에 대해, 컴퓨팅 타일에서 2개 이상의 컴퓨팅 스레드를 병렬로 실행하도록 구성된다. 그리고 다수의 슈퍼 타일의 각 개별 슈퍼 타일에 대해, 신경망 계층에 대한 출력을 생성하기 위해 각 컴퓨팅 타일에 할당된 2개 이상의 컴퓨팅 스레드를 병렬로 실행하도록 구성된다.
일부 구현에서, 컴퓨팅 스레드를 사용하여 수행되는 연산의 제1 부분은 제1 다차원 텐서의 하나 이상의 차원을 순회하기 위한 제1 텐서 연산 세트에 대응하고; 그리고 제1 다차원 텐서는 통합 메모리에 저장된 입력에 대응하는 데이터 요소를 포함하는 입력 텐서이다.
일부 구현에서, 컴퓨팅 스레드를 사용하여 수행되는 연산의 제2 부분은 제1 다차원 텐서와 상이한 제2 다차원 텐서의 하나 이상의 차원을 순회하기 위한 제2 텐서 연산 세트에 대응하고; 그리고 제2 다차원 텐서는 통합 메모리에 저장된 다수의 가중치에 대응하는 데이터 요소를 포함하는 가중치 텐서이다.
본 명세서에 설명된 주제의 일 양태는 신경망을 구현하도록 구성된 하드웨어 가속기용 회로를 사용하여 다수의 신경망 계층을 포함하는 신경망의 신경망 계층에 대한 출력을 생성하기 위한 계산을 수행하는 방법으로 구현될 수 있다. 방법은 다수의 슈퍼 타일의 슈퍼 타일에서, 신경망 계층에 대한 입력 및 신경망 계층에 대한 다수의 가중치를 수신하는 단계와; 그리고 슈퍼 타일의 통합 메모리에, 신경망 계층에 대한 입력 및 신경망 계층에 대한 복수의 가중치를 저장하는 단계를 포함한다. 방법은 또한 슈퍼 타일의 중재 로직 유닛을 사용하여, 통합 메모리에 저장된 하나 이상의 입력을 슈퍼 타일의 다수의 컴퓨팅 타일의 각 컴퓨팅 타일로 전달하는 단계와, 중재 로직 유닛은 통합 메모리 및 다수의 컴퓨팅 타일의 각 컴퓨팅 타일에 연결되고; 그리고 슈퍼 타일의 중재 로직 유닛을 사용하여, 통합 메모리에 저장된 개별 가중치 세트를 각각의 컴퓨팅 타일로 전달하는 단계를 포함한다. 방법은 신경망 계층에 대한 출력을 생성하기 위한 계산을 수행하기 위해 슈퍼 타일의 컴퓨팅 타일 각각에서 컴퓨팅 스레드를 실행하는 단계와; 그리고 하나 이상의 입력 및 각각의 컴퓨팅 타일의 개별 가중치 세트를 사용하여 수행된 계산에 기초하여 신경망 계층에 대한 출력을 생성하는 단계를 포함한다.
이들 및 다른 구현은 각각 다음의 특징 중 하나 이상을 선택적으로 포함할 수 있다. 예를 들어, 일부 구현에서, 방법은 중재 로직 유닛과 통합 메모리를 사용하여, 신경망 계층에 대해 생성된 출력을 전달하는 단계와; 그리고 슈퍼 타일의 개별 컨트롤러를 사용하여, 신경망 계층에 대해 생성된 출력을 회로의 다른 슈퍼 타일로 전달하는 단계를 포함한다.
일부 구현에서, 방법은 슈퍼 타일의 개별 컨트롤러에 의해 제어 신호를 생성하는 단계와; 제어 신호에 기초하여, 신경망 계층에 대한 각각의 입력을 통합 메모리의 대응하는 위치에 저장하는 단계와, 대응하는 위치 각각은 개별 어드레스에 의해 식별되고; 제어 신호에 기초하여, 신경망 계층에 대한 복수의 가중치의 각 가중치를 통합 메모리의 대응하는 위치에 저장하는 단계와, 대응하는 위치 각각은 개별 어드레스에 의해 식별되고; 제어 신호에 기초하여, 중재 로직이 특정 컴퓨팅 타일의 컴퓨팅 셀에 하나 이상의 입력을 전달하고 특정 컴퓨팅 타일에 개별 가중치 세트를 전달하도록 하는 단계를 포함한다
일부 구현에서, 방법은 각각의 개별 슈퍼 타일에 대해, 다수의 컴퓨팅 타일의 각 컴퓨팅 타일에서 2개 이상의 컴퓨팅 스레드를 병렬로 실행하는 단계를 포함하고; 각각의 컴퓨팅 타일은 신경망 계층에 대한 하나 이상의 입력과 신경망 계층에 대한 가중치 사이의 곱셈을 수행하여 신경망 계층에 대한 부분 출력을 생성하도록 컴퓨팅 스레드를 실행한다.
본 명세서에서 설명되는 주제의 일 양태는 시스템-온-칩(SoC)으로 구현될 수 있다. SoC는 복수의 신경망 계층을 포함하는 신경망을 구현하고 신경망 계층에 대한 출력을 생성하기 위한 계산을 수행하도록 구성된 하드웨어 가속기용 회로와; 하드웨어 가속기용 회로 외부에 있는 메모리에 액세스하도록 구성된 호스트 컨트롤러와, 상기 메모리는 신경망 계층에서 처리하기 위한 데이터를 저장하도록 구성되고; 그리고 하드웨어 가속기용 회로와 호스트 컨트롤러 사이에서 데이터 통신을 교환하도록 구성된 호스트 인터페이스를 포함한다.
SoC는 회로에 배치된 다수의 슈퍼 타일을 포함한다. 다수의 슈퍼 타일의 각 슈퍼 타일은 신경망 계층에 대한 입력 및 신경망 계층에 대한 복수의 가중치를 저장하도록 구성된 통합 메모리를 포함한다. 입력 및 복수의 가중치는 호스트 컨트롤러에 의해 액세스 가능한 메모리에 저장된 데이터에 해당한다. 각 슈퍼 타일에는 다수의 컴퓨팅 타일이 포함되어 있으며, 각 컴퓨팅 타일은 계산을 수행하여 출력을 생성하는데 사용되는 컴퓨팅 스레드를 실행하도록 구성된다. 각 슈퍼 타일은 통합 메모리 및 복수의 컴퓨팅 타일의 각각의 컴퓨팅 타일에 연결된 중재 로직 유닛을 포함한다.
중재 로직 유닛은 통합 메모리에 저장된 하나 이상의 입력을 컴퓨팅 타일 각각에 전달하고; 통합 메모리에 저장된 개별 가중치 세트를 컴퓨팅 타일 각각에 전달하고; 그리고 하나 이상의 입력 및 개별 가중치 세트를 사용하여 각각의 컴퓨팅 타일에서 수행된 계산에 기초하여 신경망 계층에 대해 생성된 출력을 통합 메모리로 전달하도록 구성된다.
이것 및 다른 양태의 다른 구현은 컴퓨터 저장 디바이스 상에 인코딩된 방법의 동작들을 수행하도록 구성된 대응하는 시스템, 장치 및 컴퓨터 프로그램을 포함한다. 하나 이상의 컴퓨터로 구성된 시스템은 소프트웨어, 펌웨어, 하드웨어 또는 동작시 시스템으로 하여금 동작들을 수행하게 하는 시스템에 설치된 이들의 조합으로 구성될 수 있다. 하나 이상의 컴퓨터 프로그램은 데이터 처리 장치에 의해 실행될 때 장치로 하여금 동작들을 수행하게 하는 명령을 가짐으로써 그렇게 구성될 수 있다.
본 명세서에 기술된 주제는 다음 이점들 중 하나 이상을 실현하기 위해 특정 실시예에서 구현될 수 있다. 본 명세서에 설명된 회로 아키텍처 및 데이터 처리 기술은 예시적인 분산 시스템에 통합되어 컨볼루션 또는 순환 신경망과 같은 신경망의 계층을 통해 입력 세트를 처리하는 데 필요한 처리 시간을 줄일 수 있다.
회로 아키텍처 및 데이터 처리 기술은 신경망 계산을 수행하기 위한 이전 회로 설계에 비해 계산이 타일에 걸쳐 병렬화되는 방식을 최적화하기 위한 접근 방식의 상이한 조합을 제공한다. 예를 들어, 설명된 기술은 활성화들이 필터의 다른 차원에서 재사용되고 파라미터들이 배치의 다수의 활성화에서 재사용되는 경우와 같이 계산 간에 데이터를 많이 재사용하는 사용 사례에 대해 타일간에 계산을 병렬화되는 방식을 최적화할 수 있니다.
기술은 슈퍼 타일 내에서 다수의 동시 컴퓨팅 스레드를 허용하는 하나 이상의 슈퍼 타일을 제공하는 회로 아키텍처 및 소프트웨어 스택을 구현하는데 사용될 수 있다. 아키텍처는 파라미터(가중치)와 활성화 모두를 브로드캐스트 및/또는 슬라이스할지 여부를 결정하는 것을 포함하는 처리 기술을 허용한다. 이 결정은 아키텍처를 통합하는 예시적인 하드웨어 가속기의 성능을 최적화하기 위해 상이한 유형의 워크로드(작업부하)에 따라 다를 수 있다.
최적화는 하드웨어 회로의 계산 유닛에서 다중 누적 셀(multiply accumulate cells)의 이용률과 관련될 수 있다. 이용률은 개선된 회로 아키텍처에 기초하여 슈퍼 타일에 걸쳐 텐서의 차원을 파티셔닝하기 위한, 예를 들어 4개의 슈퍼 타일에 걸쳐 텐서의 Z-차원을 파티셔닝하거나 2개의 슈퍼 타일에 걸친 텐서의 Y 차원을 파티셔닝하기 위한 상이한 접근 방식을 참조하여 평가될 수 있다. 예를 들어, 본 문서에 설명된 기술을 사용하여, 다수의 접근 방식은 타일에 걸쳐 계산을 병렬화할 수 있으므로 회로의 다중 누적 셀은 이전 회로 설계에서의 셀 활용률보다 높은 임계 활용률(예를 들어, 70%)을 달성할 수 있다.
본 명세서에 기술된 주제의 하나 이상의 구현의 세부 사항은 첨부 도면 및 아래의 설명에 설명되어 있다. 주제의 다른 잠재적인 특징, 측면 및 이점은 설명, 도면 및 청구범위에서 명백해질 것이다.
도 1은 하드웨어 가속기를 위한 예시적인 회로를 포함하는 컴퓨팅 시스템의 블록도이다.
도 2는 하드웨어 가속기용 회로의 예시적인 컴퓨팅 타일 아키텍처의 블록도이다.
도 3은 예시적인 텐서 및 텐서의 요소에 대응하는 데이터를 처리하기 위한 프로그램 코드를 도시한다.
도 4는 하나 이상의 슈퍼 타일에 대한 명령 세트 아키텍처의 예시적인 명령들을 포함하는 테이블을 도시한다.
도 5는 신경망 계산을 가속화하기 위한 예시적인 프로세스를 도시하는 흐름도이다.
다양한 도면에서 유사한 참조 번호 및 명칭은 유사한 요소를 나타낸다.
본 명세서는 개선된 하드웨어 회로의 아키텍처를 사용하여 구현될 수 있는 데이터 처리 기술 뿐만 아니라 개선된 하드웨어 회로를 설명한다. 하드웨어 회로는 신경망 프로세서, 주문형 집적 회로(ASIC) 또는 하드웨어 가속기와 같은 특수 목적 프로세서일 수 있다.
하드웨어 회로는 다수의 슈퍼 타일을 포함한다. 각 슈퍼 타일에는 신경망 계층에 대한 입력 및 그 계층에 대한 가중치를 저장하기 위한 통합(unified) 메모리가 포함되어 있다. 각 슈퍼 타일은 슈퍼 타일의 통합 메모리로부터 획득된 데이터 및 슈퍼 타일 각각에 연결된 통신 버스를 통해 슈퍼 타일에서 수신된 명령들에 기초하여 다수의 컴퓨팅 스레드를 실행하도록 구성된다. 일부 구현에서, 각 슈퍼 타일은 다수의 컴퓨팅 타일을 포함하며, 여기서 각 컴퓨팅 타일은 하나 이상의 컴퓨팅 스레드를 실행하도록 구성된다. 일부 경우, 각 컴퓨팅 타일은 슈퍼 타일이 다수의 컴퓨팅 스레드를 병렬로 실행할 수 있도록 하나의 컴퓨팅 스레드를 실행하도록 구성된다. 다른 경우, 각 컴퓨팅 타일은 슈퍼 타일이 다수의 컴퓨팅 스레드 각각을 병렬로 실행하도록 다수의 컴퓨팅 스레드를 실행하도록 구성할 수 있다. 컴퓨팅 스레드는 계산을 수행하여 신경망 계층에 대한 출력을 생성하는데 사용된다.
각 슈퍼 타일은 통합 메모리 및 슈퍼 타일에서 실행될 수 있는 각 컴퓨팅 타일 또는 각 컴퓨팅 스레드에 결합되는 중재 로직 유닛을 포함한다. 중재 로직 유닛은 통합 메모리에 저장된 입력 및 가중치를 컴퓨팅 타일에 전달하도록 구성된다. 중재 로직 유닛은 또한 출력을 수신하도록 할당된 슈퍼 타일의 통합 메모리에 또는 출력의 일부를 수신하도록 할당된 하나 이상의 슈퍼 타일 각각에 계층에 대해 생성된 출력을 전달하도록 구성된다.
일부 구현에서, 신경망 계층에 대한 출력은 중재 로직 유닛에 의해 컴퓨팅 타일에 전달되는 계층에 대한 가중치 및 입력을 사용하여 슈퍼 타일의 컴퓨팅 타일들에서 수행된 계산에 기초하여 슈퍼 타일에서 생성된다. 다른 구현에서, 신경망의 하나 이상의 계층은 다수의 슈퍼 타일에 걸쳐 분할될 수 있는데, 예를 들어, 계층는 각각의 슈퍼 타일이 계층에 대한 처리의 일부를 수행하도록 다수의 슈퍼 타일들에 걸쳐 병렬화될 수 있다. 이러한 구현에서, 신경망 계층에 대한 출력은 함께 형성하는 출력값(예를 들어, 활성화 값의 벡터)의 개별 세트로서 다수의 슈퍼 타일에 걸쳐 생성된다.
도 1은 하드웨어 가속기를 위한 예시적인 회로를 포함하는 컴퓨팅 시스템(100)의 블록도이다. 일부 경우, 시스템(100)은 RNN 또는 CNN과 같은 인공 심층 신경망(DNN)과 관련된 텐서 또는 신경망 계산을 가속화하기 위한 예시적인 컴퓨팅 시스템이다. 예를 들어, 시스템(100)은 특수 목적 하드웨어 회로와 같은 하드웨어 회로(101) 상에서 예시적인 인공 신경망(예를 들어, CNN)을 구현하도록 구성된다. 일부 구현에서, 시스템(100)은 시스템-온-칩이다. 예를 들어, 시스템-온-칩은 하드웨어 회로(101) 및 시스템(100)에 포함되는 것으로 본 문서에서 설명된 다른 컴포넌트(구성요소) 및 디바이스의 일부(또는 전부)를 포함할 수 있다.
하드웨어 회로(101)는 신경망 모델의 실행 및/또는 수행을 가속화하도록 구성된 하드웨어 가속기일 수 있다. 예를 들어, 신경망 모델의 실행은 중앙 처리 장치(CPU)와 같은 예시적인 범용 머신에서 모델의 실행에 비해 가속화될 수 있다. 유사하게, 신경망 모델의 성능 및 실행은 본 명세서에 설명된 기술과 관련된 향상된 하드웨어 기능 및 소프트웨어 기능이 없는 다른 하드웨어 가속기(예를 들어, 그래픽 처리 장치(GPU))에서 모델이 구현될 때에 비해 가속될 수 있다.
예시적인 회로(101)를 포함하는 시스템(100)은 하나 이상의 슈퍼 타일(102)을 포함할 수 있다. 일부 구현에서, 시스템(100)은 다수의 슈퍼 타일(102)을 포함한다. 도 1(및 아래에서 설명되는 도 2)의 예에서, 시스템(100)은 4개의 슈퍼 타일(102)을 포함하는 것으로 도시되지만, 시스템(100)뿐만 아니라 본 명세서에 설명된 하드웨어 회로(101)는 더 많거나 더 적은 슈퍼 타일을 포함할 수 있다. 아래에서 더 자세히 설명되는 바와 같이, 슈퍼 타일(102)은 시스템(100)(또는 하드웨어 회로(101))의 독립된 독립형 컴퓨팅 유닛이다. 일부 구현에서, 각 슈퍼 타일(102)은 다층 신경망의 하나 이상의 계층에 의해 요구되는 계산(예를 들어, 신경망 계산)을 독립적으로 실행하도록 구성된다.
계산은 기계 학습 워크로드에 대한 데이터를 처리하거나 그 워크로드의 특정 작업을 실행하기 위해 필요할 수 있다. 일부 구현에서, 하나 이상의 신경망 계층에 대한 슈퍼 타일(102) 내에서 수행되는 계산 프로세스는 입력 텐서의 개별 요소에 저장된 데이터 값들(예를 들어, 입력 또는 활성화)과 파라미터 텐서의 개별 요소에 저장된 데이터 값들(예를 들어, 가중치)의 곱을 포함할 수 있다. 예를 들어, 계산은 입력 또는 활성화 값에 하나 이상의 사이클에 대한 가중치 값을 곱하고 많은 사이클에 걸쳐 곱의 누적을 수행하는 것을 포함할 수 있다.
각각의 슈퍼 타일(102)은 일반적으로 개별 컨트롤러(104), 개별 통합 메모리(106), 개별 다중 컴퓨팅 타일(또는 스레드)(108), 및 개별 중재 로직 유닛(110)("중재 로직(110)")을 포함한다.
컨트롤러(104)는 슈퍼 타일(102) 내에서 발생하는 동작들을 제어하기 위한 제어 신호들(114)을 생성하도록 구성된다. 예를 들어, 제어 신호(114)는 a) 수신된 입력 각각을 통합 메모리(106)의 대응하는 위치에 있는 신경망 계층에 저장하고, b) 통합 메모리(106)의 대응하는 위치에 있는 신경망 계층에 대해 상기 수신된 가중치 각각을 저장하는데 사용될 수 있다. 개별 입력 또는 가중치를 저장하는 각각의 대응하는 메모리 위치는 개별 어드레스로 식별된다.
컨트롤러(104)는 다이렉트 메모리 액세스(DMA) 연산("DMAOp") 제어(105a) 및 DMAOp 텐서 순회 유닛(TTU)(105b)을 포함하는 DMA 모듈(105)을 포함한다. DMAOp 제어(105a)는 i) 통합 메모리(106)의 메모리 위치에 계산을 위한 데이터 기록/저장을 관리하고 ii) 통합 메모리(106)의 메모리 위치로부터 계산을 위한 데이터 판독/획득을 관리하기 위해 컨트롤러(104)에 의해 사용될 수 있는 제어 로직을 나타낸다. 예를 들어, DMAOp 제어(105a)는 컨트롤러(104)에 의해 실행되어 슈퍼 타일(102)에서 수신된 입력 텐서의 입력을 통합 메모리(106)의 메모리 위치에 기록하고, 슈퍼 타일(102)에서 수신된 가중치 텐서의 가중치를 통합 메모리(106)의 메모리 위치에 기록하는 것을 관리한다.
DMAOp 제어(105a)는 DMAOp TTU(105b)에 의한 실행을 위한 순회 연산을 관리하도록 동작 가능하다. 일부 구현에서, 특정 입력 또는 활성화가 기록되거나 판독될 통합 메모리(106)의 위치 또는 어드레스는 DMAOp TTU(105b)는 통신 버스(124)(아래에서 설명됨)를 통해 수신된 인바운드/아웃바운드 DMAOp 명령들에 기초하여 DMAOp TTU(105b)에 의해 생성된다. 예를 들어, DMAOp 명령은 통신 버스(124)를 통해 수신된 입력 및 가중치를 저장하는데 사용되는 통합 메모리(106)의 위치 또는 어드레스를 생성하기 위해 DMAOp TTU(105b)에 의해 실행되는 순회 연산을 관리하기 위해 DMAOp 제어(105a)에 의해 처리될 수 있다.
일부 경우, 인바운드 DMAOps 및 아웃바운드 DMAOps는 동시에 실행될 수 있다. 예시적인 아웃바운드 DMAOp는 시스템(100)의 인접 슈퍼 타일(102)에 생성된 계층 출력의 활성화 값을 제공하는 슈퍼 타일(102)을 포함할 수 있다. 인바운드 및 아웃바운드 DMAOps의 동시 실행 동안, 메모리 위치 액세스의 임의의 필요한 동기화 또는 중재는 컨트롤러(104)에 의해 관리되는 동기화(sync) 플래그 제어 방식을 통해 관리될 수 있다. 일부 구현에서, 컨트롤러(104)는 중재 로직(110)과 함께 동기화 플래그 제어 방식을 관리하도록 동작 가능하다.
컨트롤러(104)에 의해 생성된 제어 신호(114)는 또한 a) 판독 중재 로직(110a)이 통합 메모리(106)로부터 획득된 하나 이상의 입력을 특정 컴퓨팅 타일(108n)의 산술 셀(152)(아래에서 설명됨)로 전달하게 하고, 그리고 b) 판독 중재 로직(110a)이 통합 메모리(106)로부터 획득된 개별 가중치 세트를 특정 컴퓨팅 타일(108n)로 전달하게 하는데 사용될 수 있다. 일부 구현에서, 중재 로직(110)은 입력 버스(112)를 통해 입력 및 가중치를 컴퓨팅 타일(108n)에 전달한다.
도 1의 예에 도시된 바와 같이, 중재 로직(110)은 개별 입력 버스(112) 및 개별 출력 버스(113)를 통해 슈퍼 타일(102)의 각각의 컴퓨팅 타일(108n)에 연결될 수 있다. 중재 로직(110)은 통합 메모리(106)의 메모리 위치들로부터 입력의 다수의 배치(batch)를 검색(또는 판독)하도록 구성된다. 중재 로직(110)은 또한 통합 메모리(106)의 메모리 위치에 각각의 컴퓨팅 타일(108)에 의해 제공되는 출력 또는 출력 활성화의 다중 세트를 저장(또는 기록)하도록 구성된다.
일부 예에서, 통합 메모리(106)는 신경망 계층에서 처리될 입력, 활성화 또는 이득 값을 저장하고, 계층을 통한 입력 또는 활성화를 처리하는 것에 응답하여 신경망 계층에 의해 생성된 출력 활성화를 출력하도록 작동 가능한 협소(narrow) 메모리 구조로 설명될 수 있다. 출력 활성화 생성 및 저장에 대해 더 자세히 설명한다. 각 슈퍼 타일(102)의 통합 메모리(106)는 단일 사이클 판독 및 기록 동작과 같은 특정 메모리 동작에 대한 뱅크 충돌을 피하면서 임의의 순서로 다차원 어레이를 순회할 수 있도록 하는 어드레스싱 중재 및 유연성을 제공하는 메모리 계층 구조를 사용할 수 있다. 일부 구현에서, 통합 메모리(106)는 다수의 메모리 뱅크(예를 들어, 다수의 독립적으로 중재된 메모리 뱅크)를 포함하고, 중재 로직(110)은 통합 메모리(106)에 있는 각 메모리 뱅크의 각각의 메모리 위치에 대한 판독 액세스 및 쓰기 액세스를 중재하도록 구성된다.
중재 로직(110)에 의해 전달되는 입력의 각 배치는 특정 컴퓨팅 타일(108n)을 중재 로직(110)에 연결하는 개별 입력 버스(112)를 통해 입력의 배치가 특정 컴퓨팅 타일(108n)에 제공되도록 특정 컴퓨팅 타일(108n)에 대응할 수 있다. 예를 들어, 중재 로직(110)은 중재 로직(110)을 슈퍼 타일의 제1 컴퓨팅 타일(108n)에 연결하는 제1 입력 버스(112)에 대한 제1 입력 배치의 각 입력을 로드하도록 구성된다. 중재 로직(110)은 또한 중재 로직(110)을 슈퍼 타일(102)의 상이한 제2 컴퓨팅 타일(108n)에 연결하는 상이한 제2 입력 버스(112)에 대한 상이한 제2 입력 배치의 각 입력을 로드하도록 구성된다. 대안적으로, 일부 경우에 다수의 입력 배치 각각은 동일한 컴퓨팅 타일(108n)에 대응하고 로드될 수 있다.
중재 로직(110)은 통합 메모리(106)의 논리적 유닛 또는 구조이다. 예를 들어, 중재 로직(110)은 각 메모리 사이클에 대해 어떤 제어 디바이스(예를 들어, DMAOp 제어(105a) 또는 TensorOp 제어(132))가 통합 메모리(106)의 공유 메모리 리소스에 액세스할 수 있는지를 결정하기 위해 공유 메모리 시스템(예를 들어, 통합 메모리(106))에서 사용되는 특수 목적 메모리 중재자일 수 있다. 예를 들어, 수퍼 타일(102)에서 DMAOp 제어(105a) 및 TensorOp 제어(132)의 상이한 명령 유형은 메모리 액세스를 요청하는 독립 제어 스레드로 구성될 수 있으며, 여기서 요청은 중재 로직(110)에 의해 중재되어야 한다.
본 명세서에 설명된 바와 같이, 각 슈퍼 타일(102)은 k개의 컴퓨팅 스레드를 실행하도록 구성되며, 여기서 k는 1 이상의 정수이다. 일부 구현에서, k개의 컴퓨팅 스레드의 각각은 개별 슈퍼 타일(102)에서 실행되는 소프트웨어 구성이며, 여기서 k개의 컴퓨팅 스레드의 일부는 슈퍼 타일(102)의 개별 컴퓨팅 타일(108n)에 의해 관리되거나 실행될 수 있다. 수퍼 타일(102)은 다수의 TensorOp 파이프라인(또는 스레드)이 병렬로, 즉 동시에 실행되는 독립 컴퓨팅 유닛을 나타내는 수퍼스칼라 타일 또는 수퍼벡터 타일일 수 있다. 예를 들어, 파라미터 또는 변수 kNumberComputeThreads는 수퍼스칼라 타일(102) 또는 수퍼벡터 타일(102)에서 병렬 TensorOp 파이프라인의 수를 나타낼 수 있다. 슈퍼스칼라 타일(102)은 스칼라 입력 값에 대해 동작하는 예시적인 슈퍼 타일(102)일 수 있는 반면, 슈퍼벡터 타일(102)은 입력 값의 벡터에 대해 동작하는 예시적인 슈퍼 타일(102)일 수 있다.
슈퍼 타일(102)에서, 각 컴퓨팅 스레드는 단일 컴퓨팅 타일에 대응할 수 있으며, 여기서 컴퓨팅 타일은 단일 컴퓨팅 스레드를 실행한다. 대안적으로, 각 컴퓨팅 타일은 다수의 컴퓨팅 스레드를 실행하도록 구성될 수 있다. 일부 구현에서, 컴퓨팅 타일(108n)의 세트는 시스템(100)의 개별 슈퍼 타일(102)에 물리적으로 또는 논리적으로 배열될 수 있다. 예를 들어, 시스템(100)(또는 하드웨어 회로(101))에서, 개별 슈퍼 타일(102)에 대한 컴퓨팅 타일(108n)의 세트는 하드웨어 또는 소프트웨어로 배열될 수 있다. 일부 구현에서, 개별 슈퍼 타일(102)에 대한 컴퓨팅 타일(108n)이 소프트웨어로 배열될 때, 슈퍼 타일(102)은 n개의 컴퓨팅 타일(108)을 실행하도록 구성될 수 있으며, 여기서 n은 1 이상의 정수이다. 이들 구현에서, n개의 컴퓨팅 타일(108n) 각각은 k개의 컴퓨팅 스레드를 실행하도록 구성될 수 있다.
컨트롤러(104)에 의해 생성된 제어 신호(114)는 또한 a) 기록 중재 로직(110b)으로 하여금 메모리(106)에 저장하기 위해 통합 메모리(106)로 생성된 계층 출력의 활성화를 전달하게 하고, b) 슈퍼 타일(102)로 하여금 생성된 계층 출력의 활성화 값을 이웃 슈퍼 타일에 제공하게 하는데 사용될 수 있다.
시스템(100)은 호스트 인터페이스(122)를 통해 슈퍼 타일(102) 각각에 연결된 외부 호스트/컨트롤러(120)를 포함한다. 일부 구현에서, 호스트 인터페이스(122)는 호스트 컨트롤러(120)와 시스템-온-칩에 포함될 수 있는 하드웨어 가속기(예를 들어, 하드웨어 회로(101))용 회로와 사이에 연결된다. 호스트 인터페이스(122)는 호스트 컨트롤러(120)와 하드웨어 가속기용 회로 사이에서 데이터 통신을 교환하도록 구성된다. 일부 구현에서, 호스트 컨트롤러(120)는 하드웨어 가속기용 회로의 외부에 있는 메모리(예를 들어, 외부 메모리)에 액세스하도록 구성된다. 외부 메모리는 회로에 구현된 신경망에서 처리하기 위한 데이터를 저장하도록 구성된다. 예를 들어, 데이터는 신경망의 하나 이상의 계층에 의해 처리될 입력 및 가중치일 수 있다.
호스트 인터페이스(122)는 외부 호스트/컨트롤러(120)로부터 명령 및 데이터 값을 수신하고 슈퍼 타일(102) 각각에 명령 및 데이터 값의 개별 세트를 제공한다. 일부 예에서, 데이터 값은 호스트 컨트롤러(120)에 의해 액세스 가능한 외부 메모리로부터 획득될 수 있고 그런 다음 호스트 인터페이스(122)를 통해 슈퍼 타일들(102)로 전달될 수 있다. 호스트 인터페이스(122)는 명령 및 데이터 값을 슈퍼 타일에 전달하기 위해 슈퍼 타일(102) 각각에 의해 액세스 가능한 예시적인 통신 버스를 사용하도록 동작 가능하다. 일부 구현에서, 시스템(100)의 명령 세트 아키텍처는 슈퍼 타일(102) 각각이 개별 단일 명령을 수신할 수 있도록 구성된다. 단일 명령에는 데이터 값(예를 들어, 입력 및 가중치), 특정 데이터 필드 및 워크로드 또는 워크로드의 작업 세트에 대한 동작 파라미터가 포함될 수 있다.
일반적으로, 명령 및 데이터 값은 통신 버스(124)(예를 들어, 명령 또는 링 버스)를 통해 시스템(100)의 하나 이상의 디바이스에 제공된다. 일부 경우, 슈퍼 타일(102)은 시스템(100)에서 2개 이상의 슈퍼 타일을 연결하는 예시적인 통신 버스(124)를 통해 기계 학습 작업을 위한 데이터 및 명령을 수신한다. 예를 들어, 통신 버스(124)는 예시적인 링 형식의 시스템(100)의 슈퍼 타일들(102)을 호스트 인터페이스(122)를 통해 호스트 컨트롤러(120)에 연결하는 버스 데이터 경로를 통해 통신 결합을 제공하도록 구성된다. 링 형식은 도 2의 예에 나와 있다.
일부 구현에서, 하나 이상의 명령은 초기 시간에 호스트 인터페이스(122)로부터 슈퍼 타일(102)의 각각의 개별 컨트롤러(104)에 의해 수신되고 나중에 컨트롤러(104)에 의한 실행을 위해 개별 컨트롤러(104)의 예시적인 명령 메모리에 저장된다. 데이터에는 입력, 활성화, 이득 값 또는 각각의 조합이 포함될 수 있다. 일부 예에서, 데이터는 신경망 계층에 대한 출력을 생성하기 위해 신경망 계층에서 처리될 슈퍼 타일(102)에서 수신된다. 이러한 예에서, 계층 출력을 생성하기 위해 신경망 계층에서 데이터를 처리하는 것은 다수의 부분 출력들(예를 들어, 누적 또는 사전 활성화 값들)을 생성하는 것을 포함한다.
컴퓨팅 타일(108n) 각각은 텐서 연산("TensorOp") 제어(132) 및 TensorOp TTU(134)를 포함하는 개별 텐서 모듈(130)을 포함한다. 개별 텐서 모듈(130) 각각은 컨트롤러(104)의 DMAOp 모듈(105)에 의해 제공되는 기능과 유사하거나 이와 관련된 기능을 제공할 수 있다. 예를 들어, TensorOp 제어(132)는 i) 입력을 저장하는 통합 메모리(106)의 대응하는 메모리 위치로부터 입력 텐서의 특정 요소에 할당된 입력 값을 판독/액세스하기 위한 동작들을 관리하고, ii) 컴퓨팅 타일(108n)에서 실행되는 하나 이상의 컴퓨팅 스레드에 응답하여 출력 값이 생성된 후 출력 값(또는 부분 출력)을 출력 텐서의 특정 요소에 연관시키거나 할당하는 것을 관리하기 위해, 컨트롤러(104) 또는 컴퓨팅 타일(108n)에 의해 사용되는 제어 로직을 나타낼 수 있다.
TensorOp 제어(130)는 컨트롤러(104) 또는 컴퓨팅 타일(108n)의 컴퓨팅 스레드에 의해 실행되어 TensorOp TTU(134)에 의한 실행을 위한 순회 연산들을 관리할 수 있다. 예를 들어, TensorOp TTU(134)는 N차원 또는 다차원 텐서(예를 들어, 2D 입력 텐서, 3D 가중치 텐서 또는 4D 출력 텐서)의 특정 차원을 따라 요소 세트에 액세스하기 위한 명령을 실행하도록 작동 가능하다. 예시적인 N차원 텐서는 N차원 각각에 걸쳐 배열된 다수의 요소를 가질 수 있으며, N은 1이상의 정수이다.
TensorOp TTU(134)는 컴퓨팅 타일(108n)(또는 컴퓨팅 스레드)이 텐서가 특정 차원을 따라 요소의 값을 나타내는 데이터를 읽기 위한 데이터를 저장하는 대응하는 메모리 또는 레지스터 파일에 액세스할 수 있도록 텐서(예를 들어, 2D 가중치 텐서)의 특정 차원을 따라 요소 세트에 있는 각 요소의 어드레스를 결정한다. 일부 구현에서, TensorOp TTU(134)와 관련된 프로그램 코드는 하나 이상의 중첩(nested) 루프를 포함할 수 있고, TensorOp TTU(134)는 중첩 루프의 현재 인덱스 변수 값에 따라 중첩 루프 내의 2차원 어레이/텐서 변수의 요소에 액세스하기 위한 명령을 실행할 수 있다. 중첩 루프의 현재 인덱스 변수 값에 기초하여, TensorOp TTU(134)는 2차원 어레이 변수의 제1 요소로부터의 오프셋을 나타내는 오프셋 값을 결정할 수 있다. 예를 들어, 특정 요소의 어드레스는 N차원 텐서의 다른 요소로부터 오프셋된 어드레스일 수 있다.
컴퓨팅 타일(108n) 각각은 다수의 로컬 레지스터 파일(142)을 포함하는 와이드(wide) 메모리 구성(140)을 포함한다. 일부 구현에서, 컨트롤러(104)는 특정 컴퓨팅 타일(108n)의 개별 레지스터 파일에 특정 컴퓨팅 타일(108n)에 대한 가중치 세트를 저장하도록 구성되며, 여기서 특정 레지스터 파일(142)은 특정 컴퓨팅 타일(108n)에 대해 로컬이다. 예를 들어, 컨트롤러(104)는 통합 메모리(106)로부터 특정 컴퓨팅 타일(108n)로 가중치 세트를 전달하는 것에 응답하여 로컬 레지스터 파일(142)의 특정 메모리 위치에 계층에 대한 가중치 세트의 개별 가중치를 저장하도록 구성된다.
컴퓨팅 타일(108n) 각각은 컴퓨팅 타일(108n)에 전달된 입력 및 가중치 값에 대응하는 피연산자를 사용하여 덧셈 및 곱셈과 같은 산술 연산을 수행하도록 구성된 개별 계산 유닛(150)을 포함한다. 계산 유닛(150) 각각은 다수의 산술 셀(152)을 포함할 수 있다. 각각의 산술 셀(152)은 입력 및 가중치를 사용하여 산술 연산(예를 들어, 곱셈)을 수행하도록 구성된 다중 누적 셀(multiply accumulate cells)일 수 있다. 예를 들어, 계산 유닛(150)에 의해 수행되는 산술 연산은 일반적으로 누적 값 세트를 생성하기 위해 통합 메모리(106)로부터 획득된 입력 또는 활성화를 파라미터와 곱하는 것을 포함한다. 계산을 위한 파라미터는 다수의 로컬 레지스터 파일(142)을 포함하는 컴퓨팅 타일(108n)의 와이드 메모리 구성(140)으로부터 획득될 수 있다.
컴퓨팅 타일(108n) 각각은 레지스터 어레이(160) 및 비선형 유닛(170)("NLU(170)")을 포함한다. 레지스터 어레이(160)는 다수의 개별 시프트 레지스터(162)를 포함한다. 각 시프트 레지스터(162)는 파이프라인형 시프트 레지스터(162)일 수 있다. 어레이(160)의 파이프라인형 시프트 레지스터들(162)은 계층에 대한 출력 값(예를 들어, 누적 값 또는 부분 합)을 비선형 유닛(170)("NLU(170)")으로 시프트하는데 사용된다. NLU(170)는 계층에 대한 출력 활성화 세트를 생성하기 위해 출력 값에 비선형 활성화 함수를 적용한다. NLU(170)는 기록 중재 로직(110b)과 상호작용하여, 생성된 계층 출력의 출력 활성화를 메모리(106)에 저장하기 위해 통합 메모리(106)로 전달한다. 예를 들어, 출력 활성화는 출력 활성화 버스(113)를 통해 중재 로직(110b)을 기록하기 위해 NLU(170)로부터 제공될 수 있다.
일부 구현에서, NLU(170)는 컴퓨팅 타일(108n)로부터 또는 컨트롤러(104)에 의해 그로부터 NLU(170)에 제공된 제어 신호에 기초하여 최종 선형 출력(예를 들어, 값의 벡터)으로 다수의 부분 합 또는 누적 값을 집계하도록 동작 가능하다.
도 2는 하드웨어 가속기용 회로의 예시적인 컴퓨팅 타일 아키텍처를 도시하는 블록도이다. 도 2의 예에서 블록도는 제1 타일 아키텍처(200) 및 상이한 제2 타일 아키텍처(210)를 포함한다. 제1 타일 아키텍처(200)는 특수 목적 하드웨어 회로의 예시적인 이전 회로 설계의 타일 아키텍처를 나타내는 반면, 제2 타일 아키텍처(210)는 본 문서에서 설명된 기술에 기초한 개선된 하드웨어 회로의 새로운 타일 아키텍처를 나타낸다.
새로운 타일 아키텍처(210)는 다수의 슈퍼 타일(102)을 포함한다. 문맥상, 개별 컴퓨팅 타일(202) 및 컴퓨팅 스레드(204)를 사용하여 신경망 계산을 수행하기 위한 일부 이전 접근 방식은 아키텍처 전체에서 계산을 병렬화할 수 있는 방법이 제한적이었다. 이러한 이전 접근 방식과 대조적으로, 새로운 타일 아키텍처(210)는 다수의 슈퍼 타일(102)을 포함하고 슈퍼 타일(102)의 컴퓨팅 타일(108n) 내 및 다수의 슈퍼 타일(102)에 걸친 병렬화 옵션을 허용한다. 예를 들어, 각각의 수퍼 타일(102)은 다수의 컴퓨팅 스레드(214)를 실행하도록 구성되며, 여기서 다수의 스레드의 각각은 수퍼 타일(102)에서 동시에 실행될 수 있다. 일부 경우, 다수의 스레드의 동시 실행은 신경망의 계층에서 입력을 처리할 때 둘 이상의 컴퓨팅 스레드의 직렬 실행을 요구할 수 있는 이전 접근 방식에 비해 처리 대기 시간(latency)을 줄이거나 완화한다.
슈퍼 타일(102)에서 실행되는 다수의 컴퓨팅 스레드(214) 각각은 슈퍼 타일(102)의 통합 메모리(106)로부터 획득된 데이터, 슈퍼 타일(102)에서 수신된 명령, 컨트롤러(104)에 의해 생성된 제어 신호(114) 또는 각각의 조합에 기초할 수 있다. 일부 구현에서, 각 슈퍼 타일에서 실행되는 다수의 컴퓨팅 스레드는 하나 이상의 텐서 연산에 대응한다. 도 2의 예에서, 각 슈퍼 타일(102)은 4개의 개별 텐서 연산을 실행하는 것으로 도시되지만, 각 슈퍼 타일(102)은 더 많거나 더 적은 텐서 연산을 실행하도록 구성될 수 있다.
일부 구현에서, X, Y 차원을 갖는 2D 입력 텐서를 사용하는 신경망 계층과 관련된 예시적인 계산에 대해, 외부/호스트 컨트롤러(120)는 슈퍼 타일(102)의 그리드(예를 들어, 새로운 타일 아키텍처(210))에 걸쳐 출력 X, Y를 분배하기 위해 입력 파티셔닝(분할) 알고리즘을 실행하도록 동작 가능하다. 외부/호스트 컨트롤러(120)는 입력 활성화, 할로(halo) 픽셀 및 출력 활성화를 저장하기 위해 각 슈퍼 타일(102)에 대해 개별 통합 메모리(106) 각각에 공간을 할당하도록 동작 가능하다. 이미지 프로세싱 워크로드의 맥락에서, 할로 픽셀은 2개 이상의 컴퓨팅 타일(108n) 사이에서 공유되는 입력에 해당한다. 예를 들어, 할로 픽셀에 해당하는 입력 세트는 이미지의 가장자리에 대한 입력이 공유되는 컨볼루션에서 사용될 수 있다.
도 2의 예에서, 제1 파티셔닝 알고리즘(220)은 슈퍼 타일(102)에 의해 수행된 순(총) 작업을 표현하기 위해 사용될 수 있는 루프 중첩(loop nest)을 포함한다. 파티셔닝 알고리즘(220) 및 루프 종첩은 슈퍼 타일(102)에서 상이한 컴퓨팅 타일(108n)의 개별 TensorOp TTU(134)에 의해 실행되는 프로그램 코드의 일부로 표현될 수 있다. 예를 들어, 파티셔닝 알고리즘(220)의 변형은 다중 컴퓨팅 타일(108n)에 걸쳐 각 TensorOp TTU(134)에 의해 실행되어, 3D 입력 텐서를 2D 가중치(필터) 텐서(kx, ky)로 컨볼루션하여 1D 출력 텐서(zout)를 생성하기 위해 예시적인 3D 입력 텐서(x, y, zin)의 다른 차원을 따라 특정 요소를 순회(traverse)할 수 있다. 이에 대해서는 도 3을 참조하여 아래에서 더 자세히 설명한다.
도 3은 예시적인 텐서(300)(예를 들어, 3D 입력 텐서) 및 텐서(300)의 요소에 대응하는 데이터를 처리하기 위한 제2 파티셔닝 알고리즘(310)을 도시한다. 전술한 새로운 타일 아키텍처(210)에 기초하여, 본 문서에 설명된 개선된 하드웨어 회로(101)는 작업 및 계산과 같은 작업이 수퍼 타일(102)에서 또는 다른 수퍼 타일(102)에 걸쳐 실행되는 TensorOp 스레드(304 및 306)에 대해 kNumberComputeThreads 간에 분할될 수 있는 다수의 접근 방식과 방법을 제공한다.
예를 들어, 컴퓨팅 타일(108n) 각각 사이에서 작업을 분할하기 위한 접근 방식의 상이한 조합은 a) 텐서(300)의 X,Y 차원에 대한 제1 요소 세트를 제1 슈퍼 타일(102)의 제1 컴퓨팅 타일(108n)에 할당하는 것 및 b) 텐서(300)의 X,Y 차원, 또는 텐서(300)의 다른 차원에 대한 제2 요소 세트를 제1 슈퍼 타일(102)의 상이한 제2 컴퓨팅 타일(108n)에 할당하는 것을 포함할 수 있다.
접근 방식의 상이한 조합은 또한 각각의 수퍼 타일(102)에서 다수의 슈퍼 타일(102) 및 각각의 다수의 컴퓨팅 타일(108n) 사이에서 작업을 분할하기 위해 사용될 수 있다. 예를 들어, 접근 방식의 조합은 i) 제1 슈퍼 타일(102)의 적어도 2개의 컴퓨팅 타일(108n)에 텐서(300)의 X,Y 차원에 대한 상이한 요소 세트를 할당하는 것 및 ii) 텐서(300)의 X,Y 차원에 대한 상이한 요소 세트를 상이한 제2 슈퍼 타일(102)의 하나 이상의 컴퓨팅 타일(108n)에 할당하는 것을 포함할 수 있다.
슈퍼 타일(102)에 할당된 X,Y 차원의 요소가 큰 경우(예를 들어, 컴퓨팅 타일(108n)에 있는 SRAM의 임계값 크기를 초과하는 경우), 다수의 컴퓨팅 스레드는 할당된 X,Y 차원의 추가 2D 서브-파티션에서 작동할 수 있다. 일부 구현에서, 이미지 프로세싱 워크로드에 대해, 2D 서브-파티션을 위한 데이터는 슈퍼 타일(102)의 하나 이상의 컴퓨팅 스레드에 걸쳐 할로 픽셀(302)의 명시적 교환을 요구하지 않고 프로세싱될 수 있다. 일부 구현에서, 슈퍼 타일(102)의 하나 이상의 컴퓨팅 스레드에 의해 요구되는 입력 픽셀은 대응하는 컴퓨팅 스레드로 전달되기 전에 슈퍼 타일(102)의 통합 메모리(106)에 초기에 상주한다.
위에서 논의한 바와 같이, 본 문서에 설명된 회로 아키텍처 및 데이터 처리 기술은 신경망 계산을 수행하기 위한 이전 회로 설계에 비해 타일 간에 계산이 병렬화되는 방식을 최적화하기 위한 다양한 접근 방식(또는 접근 방식의 조합)을 제공한다. 일부 경우 최적화는 개선된 회로 아키텍처의 슈퍼 타일(102)에 걸쳐 2개 이상의 텐서의 차원을 파티셔닝하기 위한 상이한 옵션과 관련하여 계산 유닛(150)에서 다중 누적 셀(152)의 이용률에 결부될 수 있다. 예를 들어, 일부 일반 옵션에는 4개의 슈퍼 타일에 걸쳐 입력 텐서의 Zin 차원을 분할하거나 2개의 슈퍼 타일에 걸쳐 2D 텐서의 X,Y 차원을 분할하는 것이 포함될 수 있다.
예를 들어, 다수의 접근 방식은 계산 유닛(150)의 다중 누적 셀(152)이 이전 회로 설계에서 관련 셀의 이용률보다 높은 임계 이용률(예를 들어, 70%)을 달성할 수 있도록 타일들에 대해 계산을 병렬화하는데 사용될 수 있다. 일부 경우, 이전 설계가 회로 아키텍처 전반에 걸쳐 계산을 병렬화할 수 있는 방법에 대한 제한된 옵션을 가지고 있더라도 다수의 상이한 접근 방식 각각에 대한 더 높은 임계값 이용률은 이전 설계의 이용률보다 높을 수 있다.
하나 이상의 슈퍼 타일(102)에 의해 제공되는 접근 방식은 슈퍼 타일(102)에 할당된 입력 텐서의 일부(예를 들어, 일부 또는 전부)가 슈퍼 타일(102) 내에서 상이한 컴퓨팅 타일(108n) 사이에서 더 분할되고 그에 의해 작동되는 것을 허용하고, 슈퍼 타일(102)에 할당된 파라미터 텐서의 일부(예를 들어, 일부 또는 전부)가 슈퍼 타일(102) 내에서 상이한 컴퓨팅 타일(108n) 사이에서 더 분할되고 그에 의해 작동되는 허용하거나 둘 다를 허용한다. 유사하게, 접근 방식은 신경망 계층에서의 처리가 2개 이상의 슈퍼 타일(102)에 걸쳐 분할되도록 허용하고, 예를 들어, 각 슈퍼 타일이 계층에 대한 처리의 일부를 수행하도록 계층이 다수의 슈퍼 타일(102)에 걸쳐 병렬화될 수 있다. 예를 들어, 전체 계층는 슈퍼 타일(102)의 전체(또는 일부)에 걸쳐 파티션될 수 있다. 일반적으로, 이 접근 방식의 개선된 회로 아키텍처를 사용하여 병렬화를 위한 다수의 옵션을 추구할 수 있다.
따라서, 슈퍼 타일(102)과 각 슈퍼 타일(102)에 대한 컴퓨팅 스레드의 상이한 조합이 N차원 출력 텐서를 생성하기 위해 N차원 가중치(필터) 텐서로 텐서(300)를 컨벌루션하기 위해(또는 다른 연산을 수행하기 위해) N차원 텐서(300)의 다른 차원을 따라 특정 요소를 순회하는데 사용될 수 있도록 텐서(300)의 작업 및 파티션 요소와 차원을 할당하기 위해 상이한 접근법이 사용될 수 있다. 따라서, 단일 슈퍼 타일(102)에 있는, 통합 메모리(106) 및 와이드 메모리 구성(140)으로부터 액세스 가능한 하나 이상의 N차원 텐서는 슈퍼 타일(102)에서 개별 TensorOp TTU(134)에 의해 처리된 메모리 어드레스 값에 기초하여 순회될 수 있다.
시스템(100)은 주어진 슈퍼 타일(102)에 대한 다수의 컴퓨팅 스레드의 각 컴퓨팅 스레드 간의 어드레스의 파티셔닝(분할)을 결정하도록 구성된다. 어드레스 파티션은 작업 할당과 시스템(100)에서 처리되는 텐서의 요소 및 차원을 할당하기 위한 특정 접근 방식에 기초하여 결정될 수 있다. 일부 구현에서, DMAOp 제어(105a)는 신경망 계층을 통해 처리될 입력의 배치 내의 개별 입력에 대한 파티션의 어드레스 매핑을 결정하도록 동작 가능하다. 예를 들어, 개별 입력 배치는 입력 텐서(300)의 상이한 요소와 연관될 수 있고 어드레스의 각각의 파티션은 특정 컴퓨팅 타일(108n) 또는 컴퓨팅 타일(108n)에서 실행될 컴퓨팅 스레드에 할당될 수 있다.
도 4는 하나 이상의 슈퍼 타일에 대한 명령 세트 아키텍처의 예시적인 명령을 포함하는 테이블(400)을 도시한다.
전술한 바와 같이, 시스템(100)의 명령 세트 아키텍처는 슈퍼 타일(102) 각각이 개별 단일 명령(또는 다중 명령)을 수신하도록 구성될 수 있다. 각각의 단일 또는 다중 명령에는 데이터 값(예를 들어, 입력 및 가중치), 특정 데이터 필드, 워크로드 또는 워크로드의 작업 세트에 대한 동작 파라미터가 포함될 수 있다. 따라서, 통신 버스(124)를 통해 슈퍼 타일(102)에 제공되는 하나 이상의 명령 각각은 다수의 파라미터 또는 데이터 필드를 포함할 수 있다. 각 데이터 필드는 특정 연산과 연관될 수 있다. 일부 경우, 명령의 데이터 필드에 대한 하나 이상의 비트는 특정 연산이 단일 컴퓨팅 타일(108) 또는 다수의 컴퓨팅 타일(108)에서 발생하도록 하는 특정 이진 값으로 설정될 수 있다.
이제 테이블(400)을 참조하면, 특정 컴퓨팅 타일(108n)의 컴퓨팅 스레드에서 실행될 예시적인 텐서 연산("TensorOp")을 위한 데이터 필드는 타겟(대상) 스레드의 TensorOp 파이프라인(402)을 나타낸다. 일부 구현에서, 슈퍼 타일(102)에서 수신된 명령에 기초하여, 다수의 데이터 필드는 컴퓨팅 타일(108n)에서 실행될 개별 컴퓨팅 스레드에 대해 컴퓨팅 타일(108n) 각각에 동시에 멀티캐스트될 수 있다.
예시적인 DMA 연산을 위한 데이터 필드("NarrowToWide DMA")는 통합 메모리(106(404))로부터 검색된 데이터를 수신하는 타겟 스레드의 와이드 메모리 구성(140)을 나타낸다. 일부 구현에서, DMA 연산은 통합 메모리(106)(예를 들어, 협소 메모리)로부터 와이드 메모리 구성(140)의 로컬 레지스터 파일(140)로 신경망 층에 대한 개별 가중치 세트를 나타내는 데이터를 이동시키기 위해 슈퍼 타일(102)에서 실행될 수 있다. 예를 들어, 가중치 세트는 타겟 컴퓨팅 스레드의 와이드 메모리 구성(140)의 로컬 레지스터 파일(142)로 이동된다. 일부 구현에서, 타겟 컴퓨팅 스레드에 의해 수행되는 예시적인 연산은 TensorOp TTU(134)가 로컬 레지스터 파일(142)로부터 가중치 값을 획득하고, 셀(152)이 신경망 계층에 대한 출력을 생성하기 위해 실행되는 신경망 계산을 위한 피연산자로서 가중치 값을 사용하는 것을 포함한다.
다른 DMA 연산을 위한 데이터 필드("RingBusConsumer DMA")는 슈퍼 타일(102)(406)에 제공된 명령에 포함된(또는 명령내에 포함된) 데이터의 일부를 수신하는 타겟 스레드의 와이드 메모리 구성(140)을 나타낸다. 일부 구현에서, 이 DMA 연산을 위한 데이터 필드는 통신 버스(124)(예를 들어, 링 버스)로부터 획득된 명령의 특정 비트맵 필드에 대응할 수 있다. 일반적으로, 비트맵은 비트 단위로 정의된 특정 폭을 가질 수 있다.
예를 들어, 명령의 헤더(예를 들어, 비트맵)는 헤더에 대한 비트맵 필드의 개별 비트 값(들)에 기초하여 헤더와 연관된 데이터의 일부를 수퍼 타일(102)이 소비하는데 필요한 방법을 수신 슈퍼 타일(102)에 나타낼 수 있다. 슈퍼 타일(102)이 데이터의 일부를 소비하는데 필요한 특정 방법은 명령 서브-타입(또는 명령의 서브-타입)일 수 있다. 일부 구현에서, 수신 슈퍼 타일(102)의 개별 컨트롤러(104)는 명령(예를 들어, 단일 명령)의 헤더 비트맵을 검사하여 명령의 서브-유형이 데이터의 일부가 슈퍼 타일(102)의 와이드 메모리 구성(140)에 의해 수신될 것임을 나타낸다고 결정한다. 예를 들어, 명령 서브-유형은 데이터의 일부와 연관된 개별 가중치 세트를 수신하는 타겟 스레드의 로컬 레지스터 파일(142)을 나타낼 수 있다.
다른 예시적인 동작을 위한 데이터 필드("LoadCoefficientTables")는 슈퍼 타일(102)에 제공된 명령에 포함된(또는 내에 포함된) 계수 테이블을 로드하기 위한 슈퍼 타일(102)의 메모리를 나타낸다(408). 이 로드 동작을 위한 데이터 필드는 위에서 설명한 RingBusConsumer DMA 동작에 대한 비트맵 필드와 상이한 명령의 특정 비트맵 필드에 해당할 수 있다. 일부 구현에서, 계수 테이블은 예시적인 기계 학습 워크로드에 대한 신경망 계산을 수행하기 위해 슈퍼 타일(102)의 타겟 스레드 각각에 의해 사용된다. 일부 경우에, 계수 테이블은 각각의 컴퓨팅 스레드와 관련된 개별 와이드 메모리 구성(140)에 걸쳐 저장될 수 있다. 다른 경우, 계수 테이블은 k개의 컴퓨팅 스레드 각각에 의해 액세스 가능한 슈퍼 타일(102)의 일부 다른 전용 메모리에 저장될 수 있다.
동기화 플래그 동작을 위한 데이터 필드("SyncFlag")는 타겟 스레드의 동기화 플래그를 나타낸다(410). 일부 구현에서, 명령의 예시적인 동기화 플래그 동작을 위한 데이터 필드는 2개 이상의 슈퍼 타일(102)에 걸쳐 복제되는 동기화 플래그에 대해서만 설정된다. 수퍼 타일(102)에서 동기화 감시자 동작("SyncWatcher")을 위한 데이터 필드는 a) 자체 컴퓨팅 스레드에 해당하는 SyncFlag를 기다리고 "SyncFlag" 복제 명령에 대한 명령의 "thread_id" 필드를 무시할지 여부 또는 b) "SyncFlag" 복제 명령의 "thread_id" 필드에 해당하는 SyncFlag를 기다릴지 여부를 나타내는 부울 필드이다(412). 예시적인 타일 펜스 동작("TileFence")을 위한 데이터 필드는 "reset_sync_flag_thread_ids" 데이터 필드 및 "wait_idle_thread_ids" 데이터 필드를 포함할 수 있다(414). 이 데이터 필드는 타일 펜스 동작이 연결된 해당 컴퓨팅 스레드의 동기화 플래그를 재설정할지 아니면 기다릴지를 지정한다.
도 5는 신경망 계산을 가속화하기 위한 예시적인 프로세스(500)를 도시하는 흐름도이다. 프로세스(500)는 위에서 설명된 시스템(100)을 사용하여 구현되거나 실행될 수 있다. 프로세스(500)의 설명은 시스템(100)의 전술한 컴퓨팅 리소스를 참조할 수 있다. 일부 구현에서, 프로세스(500)의 단계들 또는 동작들은 본 문서에 설명된 디바이스 및 리소스의 하나 이상의 프로세서에 의해 실행 가능한 프로그래밍된 펌웨어 또는 소프트웨어 명령에 의해 활성화된다.
이제 프로세스(500)를 참조하면, 시스템(100)의 예시적인 슈퍼 타일(102)은 신경망 계층에 대한 입력 및 그 계층에 대한 가중치를 수신한다(502). 예를 들어, 슈퍼 타일(102)은 통신 버스(124)를 통해 입력 및 가중치를 수신할 수 있다. 입력 및 가중치를 수신하는 것에 추가하여, 슈퍼 타일은 계층에 대한 출력을 생성하기 위해 신경망 계층에 대한 신경망 계산을 수행하기 위한 하나 이상의 명령을 수신할 수 있다. 슈퍼 타일의 컨트롤러는 슈퍼 타일의 통합 메모리에 입력과 가중치를 저장한다(504). 예를 들어, 컨트롤러(104)는 통신 버스(124)를 통해 수신된 명령에 기초하여 통합 메모리(106)에 입력 및 가중치를 저장한다.
슈퍼 타일의 중재 로직 유닛은 통합 메모리에 저장된 입력 중 하나 이상을 슈퍼 타일에 있는 다수의 컴퓨팅 타일의 각 컴퓨팅 타일로 전달한다(506). 중재 로직 유닛(110)은 통합 메모리(106) 및 다수의 컴퓨팅 타일(108)의 각각의 컴퓨팅 타일(108n)에 연결된다. 일부 구현에서, 컨트롤러(104)는 슈퍼 타일(102)의 대응하는 컴퓨팅 타일(108n)에 전달될 입력의 개별 배치를 저장하기 위해 통합 메모리(106)에서 어드레스의 파티셔닝(분할)을 결정하도록 구성된다. 예를 들어, 통합 메모리(106)에 대한 어드레스의 각각의 파티션은 슈퍼 타일의 개별 컴퓨팅 타일(108n)에 할당될 수 있다.
중재 로직 유닛은 제1 어드레스 파티션에 대해, 어드레스 파티션내의 어드레스들에 의해 식별된 메모리 위치들로부터 입력의 제1 배치(제1 입력 배치)를 획득하여; 제1 입력 배치를 제1 컴퓨팅 타일(108n)의 셀들(152)로 전달하도록 구성되며, 여기서 제1 컴퓨팅 타일(108n)은 통합 메모리에서 상기 결정된 어드레스 파티셔닝에 기초하여 제1 입력 배치에서 각각의 입력을 수신하도록 할당된다. 일부 예에서, 어드레스 파티션의 어드레스 세트는 입력 특징(features)의 샘플을 형성하는 입력 배치에 대한 것일 수 있다. 입력 특징의 샘플에는 다수의 입력 특징 세트가 포함될 수 있으며, 여기서 입력 특징 세트는 오디오 데이터의 이미지 또는 스트림에 해당한다.
중재 로직 유닛은 통합 메모리에 저장된 개별 가중치 세트를 컴퓨팅 타일 각각에 전달한다(508). 슈퍼 타일(102)은 슈퍼 타일의 컴퓨팅 타일 각각에서 다수의 컴퓨팅 스레드를 실행하여 신경망 계층(510)에 대한 출력을 생성하기 위한 계산을 수행한다. 슈퍼 타일(102)은 각각의 컴퓨팅 타일에서 하나 이상의 입력 및 개별 가중치 세트를 사용하여 수행된 계산에 기초하여 신경망 계층에 대한 출력을 생성한다(512). 일부 구현에서, 신경망 계층은 컨볼루션 신경망의 임베딩 계층이고 신경망 계층에 의해 생성된 출력은 임베딩 특징 벡터를 포함하는 임베딩 출력이다.
본 명세서에 기술된 주제 및 기능적 동작의 실시예는 디지털 전자 회로, 유형적으로 구현된 컴퓨터 소프트웨어 또는 펌웨어, 본 명세서에 개시된 구조 및 그 구조적 등가물을 포함하는 컴퓨터 하드웨어 또는 이들 중 하나 이상의 조합으로 구현될 수 있다. 본 명세서에 기술된 주제의 실시예는 하나 이상의 컴퓨터 프로그램, 즉 데이터 처리 장치에 의해 실행되거나 데이터 처리 장치의 동작을 제어하기 위해 유형의 비-일시적 프로그램 매체에 인코딩된 컴퓨터 프로그램 명령의 하나 이상의 모듈로 구현될 수 있다.
대안적으로 또는 추가로, 프로그램 명령은 데이터 처리 장치에 의한 실행을 위해 적절한 수신기 장치로 전송하기 위한 정보를 인코딩하기 위해 생성되는 인공적으로 생성된 전파 신호, 예를 들어 기계 생성 전기, 광학 또는 전자기 신호에 인코딩될 수 있다. 컴퓨터 저장 매체는 기계 판독 가능 저장 장치, 기계 판독 가능 저장 기판, 랜덤 또는 직렬 액세스 메모리 디바이스, 또는 이들 중 하나 이상의 조합일 수 있다.
"컴퓨팅 시스템"이라는 용어는 예를 들어 프로그램 가능 프로세서, 컴퓨터, 또는 다중 프로세서 또는 컴퓨터를 비롯하여 데이터를 처리하기 위한 임의의 종류의 장치, 디바이스 및 기계를 포함한다. 장치는 예를 들어 FPGA(필드 프로그래머블 게이트 어레이) 또는 ASIC(주문형 집적 회로)와 같은 특수 목적 논리 회로를 포함할 수 있다. 장치는 또한 하드웨어 외에 문제의 컴퓨터 프로그램에 대한 실행 환경을 생성하는 코드, 예를 들어 프로세서 펌웨어, 프로토콜 스택, 데이터베이스 관리 시스템, 운영 체제, 또는 이들 중 하나 이상의 조합을 구성하는 코드를 포함할 수 있다.
컴퓨터 프로그램(프로그램, 소프트웨어, 소프트웨어 애플리케이션, 모듈, 소프트웨어 모듈, 스크립트 또는 코드라고도 함)은 컴파일된 또는 해석된 언어, 선언적 또는 절차적 언어를 비롯하여 모든 형태의 프로그래밍 언어로 작성할 수 있고, 독립 실행형 프로그램이나 모듈, 컴포넌트, 서브루틴 또는 컴퓨팅 환경에서 사용하기에 적합한 기타 단위를 비롯하여 임의의 형태로 배포될 수 있다.
컴퓨터 프로그램은 파일 시스템의 파일에 해당할 수 있지만 반드시 그럴 필요는 없다. 프로그램은 예를 들어 마크업 언어 문서에 저장된 하나 이상의 스크립트, 문제의 프로그램 전용 단일 파일 또는 다수의 조정 파일(예를 들어, 하나 이상의 모듈, 서브 프로그램 또는 코드의 일부를 저장하는 파일)에 저장된 다른 프로그램 또는 데이터를 보유하는 파일의 일부에 저장될 수 있다. 컴퓨터 프로그램은 하나의 컴퓨터 또는 한 사이트에 있거나 여러 사이트에 분산되어 있고 통신 네트워크로 상호 연결된 여러 컴퓨터에서 실행되도록 배포될 수 있다.
본 명세서에 설명된 프로세스 및 논리 흐름은 입력 데이터에 대해 동작하고 출력을 생성함으로써 기능을 수행하기 위해 하나 이상의 컴퓨터 프로그램을 실행하는 하나 이상의 프로그램 가능한 컴퓨터에 의해 수행될 수 있다. 프로세스 및 논리 흐름은 또한 FPGA, ASIC 또는 GPGPU(범용 그래픽 처리 장치)와 같은 특수 목적 논리 회로에 의해 구현될 수 있으며, 장치도 이들로 구현될 수 있다.
컴퓨터 프로그램의 실행에 적합한 컴퓨터는 예로서 범용 또는 특수 목적 마이크로프로세서 또는 둘 다, 또는 임의의 다른 종류의 중앙 처리 장치에 기초할 수 있다. 일반적으로, 중앙 처리 장치는 판독 전용 메모리나 랜덤 액세스 메모리 또는 둘 다에서 명령 및 데이터를 수신한다. 컴퓨터의 일부 요소는 명령을 수행하거나 실행하기 위한 중앙 처리 장치와 명령 및 데이터를 저장하기 위한 하나 이상의 메모리 디바이스이다. 일반적으로, 컴퓨터는 또한 데이터를 저장하기 위한 하나 이상의 대용량 저장 디바이스, 예를 들어 자기, 광자기 디스크 또는 광 디스크로부터 데이터를 수신하거나 이들로 데이터를 전송하거나 둘 다 포함하거나 동작 가능하게 연결된다. 그러나 컴퓨터에는 이러한 디바이스가 필요하지 않다. 더욱이, 컴퓨터는 휴대 전화, 개인 휴대 정보 단말기(PDA), 모바일 오디오 또는 비디오 플레이어, 게임 콘솔, GPS 수신기 또는 휴대용 저장 디바이스(예를 들어, USB 플래시 드라이브)와 같은 다른 디바이스에 내장될 수 있다.
컴퓨터 프로그램 명령 및 데이터를 저장하기에 적합한 컴퓨터 판독 가능 매체는 예를 들어 반도체 메모리 디바이스(예를 들어, EPROM, EEPROM 및 플래시 메모리 디바이스), 자기 디스크(예를 들어, 내부 하드 디스크 또는 이동식 디스크), 자기 광 디스크, 및 CD ROM 및 DVD-ROM 디스크를 비롯하여 모든 형태의 비-휘발성 메모리, 매체 및 메모리 디바이스를 포함한다. 프로세서와 메모리는 특수 목적 논리 회로에 의해 보완되거나 통합될 수 있다.
사용자와의 상호작용을 제공하기 위해, 본 명세서에 설명된 주제의 실시예는 사용자에게 정보를 디스플레이하기 위한 디스플레이 디바이스(예를 들어 LCD(액정 디스플레이) 모니터 및 사용자가 컴퓨터에 입력을 제공할 수 있는 키보드 및 포인팅 디바이스(예를 들어 마우스 또는 트랙볼)를 갖는 컴퓨터에서 구현될 수 있다. 다른 종류의 디바이스도 사용자와의 상호 작용을 제공하는데 사용할 수 있는데, 예를 들어, 사용자에게 제공되는 피드백은 시각적 피드백, 청각적 피드백 또는 촉각적 피드백과 같은 임의의 형태의 감각적 피드백일 수 있고, 사용자로부터의 입력은 음향, 음성 또는 촉각 입력을 포함한 모든 형태로 수신될 수 있다. 또한, 컴퓨터는 예를 들어 웹 브라우저에서 수신된 요청에 응답하여 사용자의 클라이언트 디바이스의 웹 브라우저로 웹 페이지를 전송함으로써, 사용자에 의해 사용되는 디바이스로 문서를 송수신함으로써 사용자와 상호 작용할 수 있다.
본 명세서에 기술된 주제의 실시예는 백엔드 컴포넌트(예를 들어, 데이터 서버)를 포함하거나, 미들웨어 컴포넌트(예를 들어, 애플리케이션 서버)를 포함하거나, 프론트 엔드 컴포넌트(예를 들어, 그래픽 사용자 인터페이스를 갖는 클라이언트 컴퓨터 또는 사용자가 이를 통해 본 명세서에 설명된 주제의 구현과 상호 작용할 수 있는 웹 브라우저), 또는 하나 이상의 백엔드, 미들웨어 또는 프론트엔드 컴포넌트의 조합을 포함하는 컴퓨팅 시스템에서 구현될 수 있다. 시스템의 컴포넌트는 통신 네트워크와 같은 디지털 데이터 통신의 임의의 형태 또는 매체에 의해 상호 연결될 수 있다. 통신 네트워크의 예는 근거리 통신망("LAN") 및 광역 통신망("WAN"), 예를 들어 인터넷을 포함한다.
컴퓨팅 시스템은 클라이언트 및 서버를 포함할 수 있다. 클라이언트와 서버는 일반적으로 서로 멀리 떨어져 있으며 일반적으로 통신 네트워크를 통해 상호 작용한다. 클라이언트와 서버의 관계는 각각의 컴퓨터에서 실행되고 서로 클라이언트-서버 관계를 갖는 컴퓨터 프로그램으로 인해 발생한다.
본 명세서는 많은 특정 구현 세부 사항을 포함하지만, 이들은 임의의 발명 또는 청구될 수 있는 것의 범위에 대한 제한으로 해석되어서는 안 되며, 오히려 특정 발명의 특정 실시예에 특정될 수 있는 특징의 설명으로 해석되어야 한다. 별도의 실시예와 관련하여 본 명세서에 설명된 특정 특징은 단일 실시예에서 조합하여 구현될 수도 있다. 역으로, 단일 실시예의 맥락에서 설명된 다양한 특징은 또한 개별적으로 또는 임의의 적절한 하위 조합으로 다수의 실시예에서 구현될 수 있다. 더욱이, 특징들이 특정 조합으로 작용하는 것으로 위에서 설명될 수 있고 심지어 초기에 그러한 것으로 청구될 수도 있지만, 청구된 조합의 하나 이상의 특징은 일부 경우에 조합에서 제거될 수 있으며 청구된 조합은 하위 조합 또는 하위 조합의 변형에 관한 것일 수 있다.
유사하게, 동작들이 도면에 특정 순서로 도시되어 있지만, 이는 바람직한 결과를 달성하기 위해 이러한 동작들이 도시된 특정 순서 또는 순차적인 순서로 수행되거나 모든 도시된 동작들이 수행되어야 함을 요구하는 것으로 이해되어서는 안 된다. 특정 상황에서는 멀티태스킹 및 병렬 처리가 유리할 수 있다. 더욱이, 위에서 설명된 실시예에서 다양한 시스템 모듈 및 컴포넌트의 분리는 모든 실시예에서 이러한 분리를 요구하는 것으로 이해되어서는 안 되며, 설명된 프로그램 컴포넌트 및 시스템은 일반적으로 단일 소프트웨어 제품 또는 여러 소프트웨어 제품으로 패키징된다.
주제의 특정 실시예가 설명되었다. 다른 실시예는 다음 청구항의 범위 내에 있다. 예를 들어, 청구범위에 언급된 동작들은 다른 순서로 수행될 수 있으며 여전히 바람직한 결과를 얻을 수 있다. 일 예로서, 첨부 도면에 도시된 프로세스는 바람직한 결과를 달성하기 위해 도시된 특정 순서 또는 순차적인 순서를 반드시 필요로 하지는 않는다. 특정 구현에서, 멀티태스킹 및 병렬 처리가 유리할 수 있다.

Claims (24)

  1. 복수의 신경망 계층을 포함하는 신경망을 구현하고 신경망 계층에 대한 출력을 생성하기 위한 계산을 수행하도록 구성된 하드웨어 가속기용 회로로서,
    복수의 슈퍼 타일을 포함하며, 복수의 슈퍼 타일의 각 슈퍼 타일은,
    신경망 계층에 대한 입력들 및 신경망 계층에 대한 복수의 가중치를 저장하도록 구성된 통합 메모리와;
    각 컴퓨팅 타일이 출력을 생성하기 위한 계산을 수행하는데 사용되는 컴퓨팅 스레드를 실행하도록 구성되는 복수의 컴퓨팅 타일과; 그리고
    통합 메모리 및 복수의 컴퓨팅 타일의 각 컴퓨팅 타일에 연결된 중재 로직 유닛을 포함하고, 중재 로직 유닛은,
    통합 메모리에 저장된 하나 이상의 입력을 각각의 컴퓨팅 타일로 전달하고;
    통합 메모리에 저장된 개별 가중치 세트를 각각의 컴퓨팅 타일로 전달하고; 그리고
    통합 메모리로, 하나 이상의 입력 및 개별 가중치 세트를 사용하여 각 컴퓨팅 타일에서 수행된 계산에 기초하여 신경망 계층에 대해 생성된 출력을 전달하도록 구성되는 것을 특징으로 하는 하드웨어 가속기용 회로.
  2. 제1항에 있어서,
    각 슈퍼 타일에 대한 개별 컨트롤러를 포함하고,
    개별 컨트롤러는,
    통합 메모리의 대응하는 위치에 신경망 계층에 대한 각각의 입력을 저장하고, 상기 대응하는 위치 각각은 개별 어드레스에 의해 식별되고;
    통합 메모리의 대응하는 위치에 신경망 계층에 대한 복수의 가중치의 각 가중치를 저장하고, 상기 대응하는 위치 각각은 개별 어드레스에 의해 식별되고; 그리고
    중재 로직이 하나 이상의 입력을 특정 컴퓨팅 타일의 컴퓨팅 셀에 전달하고 개별 가중치 세트를 특정 컴퓨팅 타일에 전달하도록 하는데,
    사용되는 하나 이상의 제어 신호를 생성하도록 구성되는 것을 특징으로 하는 하드웨어 가속기용 회로.
  3. 제2항에 있어서,
    컨트롤러는,
    특정 컴퓨팅 타일에 대한 개별 가중치 세트를 특정 컴퓨팅 타일에 로컬인 특정 컴퓨팅 타일의 개별 레지스터 파일에 저장하도록 구성되는 것을 특징으로 하는 하드웨어 가속기용 회로.
  4. 제3항에 있어서,
    컨트롤러는,
    슈퍼 타일의 대응하는 컴퓨팅 타일로 전달될 개별 입력 배치(batch)를 저장하기 위해 통합 메모리에서 어드레스의 파티셔닝(partitioning)을 결정하도록 구성되고, 어드레스의 각 파티션은 슈퍼 타일의 개별 컴퓨팅 타일에 할당되는 것을 특징으로 하는 하드웨어 가속기용 회로.
  5. 제4항에 있어서,
    어드레스 파티션의 개별 어드레스는 입력 특징의 샘플을 형성하는 입력 배치의 입력에 해당하고;
    입력 특징의 샘플은 다수의 입력 특징 세트를 포함하고; 그리고
    입력 특징 세트는 오디오 데이터의 이미지 또는 스트림에 해당하는 것을 특징으로 하는 하드웨어 가속기용 회로.
  6. 제4항 또는 제5항에 있어서,
    중재 로직 유닛은,
    제1 어드레스 파티션에 대해, 어드레스 파티션의 어드레스들에 의해 식별된 메모리 위치들로부터 제1 입력 배치를 획득하고; 그리고
    제1 입력 배치를 제1 컴퓨팅 타일의 셀들로 전달하도록 구성되고, 상기 제1 컴퓨팅 타일은 통합 메모리에 있는 결정된 어드레스의 파티셔닝에 기초하여 제1 입력 배치의 각 입력을 수신하도록 할당되는 것을 특징으로 하는 하드웨어 가속기용 회로.
  7. 임의의 선행하는 청구항에 있어서,
    각 개별 슈퍼 타일에 대해:
    복수의 컴퓨팅 타일의 각 컴퓨팅 타일은 컴퓨팅 타일에서 2개 이상의 컴퓨팅 스레드를 병렬로 실행하도록 구성되고; 그리고
    각 컴퓨팅 타일은 신경망 계층에 대한 하나 이상의 입력과 신경망 계층에 대한 가중치 사이에 곱셈을 수행하여 신경망 계층에 대한 부분(partial) 출력을 생성하도록 컴퓨팅 스레드를 실행하는 것을 특징으로 하는 하드웨어 가속기용 회로.
  8. 제7항에 있어서,
    각 개별 슈퍼 타일에 대해:
    복수의 컴퓨팅 타일의 각 컴퓨팅 타일은,
    컴퓨팅 타일에서 2개 이상의 컴퓨팅 스레드를 병렬로 실행하는 것에 응답하여 신경망 계층에 대한 출력을 생성하기 위한 계산의 일부를 수행하고; 그리고
    계산의 일부를 수행하는 것에 응답하여, 신경망 계층에 대한 출력을 생성하는데 사용되는 하나 이상의 부분 출력을 생성하도록 구성되는 것을 특징으로 하는 하드웨어 가속기용 회로.
  9. 제1항 또는 제8항에 있어서,
    회로는,
    슈퍼 타일에 있는 복수의 컴퓨팅 타일의 각 개별 컴퓨팅 타일에 대해:
    컴퓨팅 타일에서 2개 이상의 컴퓨팅 스레드를 병렬로 실행하고; 그리고
    복수의 슈퍼 타일의 각 개별 슈퍼 타일에 대해:
    신경망 계층에 대한 출력을 생성하기 위해 각 컴퓨팅 타일에 할당된 2개 이상의 컴퓨팅 스레드를 병렬로 실행하도록 구성되는 것을 특징으로 하는 하드웨어 가속기용 회로.
  10. 제1항 또는 제6항에 있어서,
    컴퓨팅 스레드를 사용하여 수행되는 연산의 제1 부분은 제1 다차원 텐서의 하나 이상의 차원을 순회하기 위한 제1 텐서 연산 세트에 대응하고; 그리고
    제1 다차원 텐서는 통합 메모리에 저장된 입력에 대응하는 데이터 요소를 포함하는 입력 텐서인 것을 특징으로 하는 하드웨어 가속기용 회로.
  11. 제10항에 있어서,
    컴퓨팅 스레드를 사용하여 수행되는 연산들의 제2 부분은 제1 다차원 텐서와 상이한 제2 다차원 텐서의 하나 이상의 차원을 순회하기 위한 제2 텐서 연산 세트에 대응하고; 그리고
    제2 다차원 텐서는 통합 메모리에 저장된 복수의 가중치에 대응하는 데이터 요소를 포함하는 가중치 텐서인 것을 특징으로 하는 하드웨어 가속기용 회로.
  12. 신경망을 구현하도록 구성된 하드웨어 가속기용 회로를 사용하여 복수의 신경망 계층을 포함하는 신경망의 신경망 계층에 대한 출력을 생성하기 위한 계산을 수행하는 방법으로서, 방법은,
    복수의 슈퍼 타일의 슈퍼 타일에서, 신경망 계층에 대한 입력 및 신경망 계층에 대한 복수의 가중치를 수신하는 단계;
    슈퍼 타일의 통합 메모리에, 신경망 계층에 대한 입력 및 신경망 계층에 대한 복수의 가중치를 저장하는 단계;
    슈퍼 타일의 중재 로직 유닛을 사용하여, 통합 메모리에 저장된 하나 이상의 입력을 슈퍼 타일의 복수의 컴퓨팅 타일의 각 컴퓨팅 타일로 전달하는 단계, 상기 중재 로직 유닛은 통합 메모리 및 복수의 컴퓨팅 타일의 각 컴퓨팅 타일에 연결되고;
    슈퍼 타일의 중재 로직 유닛을 사용하여, 통합 메모리에 저장된 개별 가중치 세트를 각각의 컴퓨팅 타일로 전달하는 단계;
    신경망 계층에 대한 출력을 생성하기 위한 계산을 수행하기 위해 슈퍼 타일의 컴퓨팅 타일 각각에서 컴퓨팅 스레드를 실행하는 단계; 및
    하나 이상의 입력 및 각각의 컴퓨팅 타일의 개별 가중치 세트를 사용하여 수행된 계산에 기초하여 신경망 계층에 대한 출력을 생성하는 단계를 포함하는 것을 특징으로 하는 계산을 수행하는 방법.
  13. 제12항에 있어서,
    중재 로직 유닛과 통합 메모리를 사용하여, 신경망 계층에 대해 생성된 출력을 전달하는 단계; 및
    슈퍼 타일의 개별 컨트롤러를 사용하여, 신경망 계층에 대해 생성된 출력을 회로의 다른 슈퍼 타일로 전달하는 단계를 포함하는 것을 특징으로 하는 계산을 수행하는 방법.
  14. 제13항에 있어서,
    슈퍼 타일의 개별 컨트롤러에 의해 제어 신호를 생성하는 단계;
    제어 신호에 기초하여, 신경망 계층에 대한 각각의 입력을 통합 메모리의 대응하는 위치에 저장하는 단계, 대응하는 위치 각각은 개별 어드레스에 의해 식별되고;
    제어 신호에 기초하여, 신경망 계층에 대한 복수의 가중치의 각 가중치를 통합 메모리의 대응하는 위치에 저장하는 단계, 대응하는 위치 각각은 개별 어드레스에 의해 식별되고; 및
    제어 신호에 기초하여, 중재 로직이 특정 컴퓨팅 타일의 컴퓨팅 셀에 하나 이상의 입력을 전달하고 특정 컴퓨팅 타일에 개별 가중치 세트를 전달하도록 하는 단계를 포함하는 것을 특징으로 하는 계산을 수행하는 방법.
  15. 제14항에 있어서,
    제어 신호에 기초하여, 특정 컴퓨팅 타일에 대한 개별 가중치 세트를 특정 컴퓨팅 타일에 대해 로컬인 특정 컴퓨팅 타일의 개별 레지스터 파일에 저장하는 단계를 포함하는 것을 특징으로 하는 계산을 수행하는 방법.
  16. 제15항에 있어서,
    컨트롤러에 의해, 슈퍼 타일의 대응하는 컴퓨팅 타일에 전달될 입력의 개별 배치를 저장하기 위해 통합 메모리에서 어드레스의 파티셔닝을 결정하는 단계를 ㅍ포함하고, 어드레스의 각 파티션은 슈퍼 타일의 개별 컴퓨팅 타일에 할당되는 것을 특징으로 하는 계산을 수행하는 방법.
  17. 제16항에 있어서,
    어드레스 파티션의 개별 어드레스는 입력 특징의 샘플을 형성하는 입력 배치의 입력에 해당하고,
    상기 입력 특징의 샘플은 다수의 입력 특징 세트를 포함하고, 그리고
    상기 입력 특징 세트는 오디오 데이터의 이미지 또는 스트림에 해당하는 것을 특징으로 하는 계산을 수행하는 방법.
  18. 제16항 또는 제17항에 있어서,
    어드레스의 제1 파티션에 대해,
    중재 로직 유닛에 의해, 어드레스 파티션의 어드레스에 의해 식별된 메모리 위치들로부터 입력의 제1 배치를 획득하는 단계; 및
    입력의 제1 배치를 제1 컴퓨팅 타일의 셀들에 전달하는 단계를 포함하고, 상기 제1 컴퓨팅 타일은 통합 메모리의 상기 결정된 어드레스 분할에 기초하여 입력의 제1 배치에서 각 입력을 수신하도록 할당되는 것을 특징으로 하는 계산을 수행하는 방법.
  19. 제12항 또는 제18항에 있어서,
    각 개별 슈퍼 타일에 대해,
    복수의 컴퓨팅 타일의 각 컴퓨팅 타일에서 2개 이상의 컴퓨팅 스레드를 병렬로 실행하는 단계를 포함하고; 그리고
    각각의 컴퓨팅 타일은 신경망 계층에 대한 하나 이상의 입력과 신경망 계층에 대한 가중치 사이의 곱셈을 수행하여 신경망 계층에 대한 부분 출력을 생성하도록 컴퓨팅 스레드를 실행하는 것을 특징으로 하는 계산을 수행하는 방법.
  20. 제19항에 있어서,
    각 개별 슈퍼 타일에 대해:
    복수의 컴퓨팅 타일의 각 컴퓨팅 타일에서, 컴퓨팅 타일에서 2개 이상의 컴퓨팅 스레드를 병렬로 실행하는 것에 응답하여 신경망 계층에 대한 출력을 생성하기 위한 계산의 일부를 수행하는 단계; 및
    계산의 일부를 수행하는 것에 응답하여, 신경망 계층에 대한 출력을 생성하는데 사용되는 하나 이상의 부분 출력을 생성하는 단계를 포함하는 것을 특징으로 하는 계산을 수행하는 방법.
  21. 제12항 또는 제20항에 있어서,
    슈퍼 타일에 있는 복수의 컴퓨팅 타일의 각 개별 컴퓨팅 타일에 대해:
    컴퓨팅 타일에서 2개 이상의 컴퓨팅 스레드를 병렬로 실행하는 단계; 및
    복수의 슈퍼 타일의 각 개별 슈퍼 타일에 대해:
    신경망 계층에 대한 출력을 생성하기 위해 각 컴퓨팅 타일에 할당된 2개 이상의 컴퓨팅 스레드를 병렬로 실행하는 단계를 포함하는 것을 특징으로 하는 계산을 수행하는 방법.
  22. 제12항 또는 제21항에 있어서,
    컴퓨팅 스레드를 사용하여 수행되는 계산의 제1 부분은 제1 다차원 텐서의 하나 이상의 차원을 순회하기 위한 제1 텐서 연산 세트에 대응하고; 그리고
    제1 다차원 텐서는 통합 메모리에 저장된 입력에 대응하는 데이터 요소를 포함하는 입력 텐서인 것을 특징으로 하는 계산을 수행하는 방법.
  23. 제22항에 있어서,
    컴퓨팅 스레드를 사용하여 수행되는 연산의 제2 부분은 제1 다차원 텐서와 상이한 제2 다차원 텐서의 하나 이상의 차원을 순회하기 위한 제2 텐서 연산 세트에 대응하고; 그리고
    제2 다차원 텐서는 통합 메모리에 저장된 복수의 가중치에 대응하는 데이터 요소를 포함하는 가중치 텐서인 것을 특징으로 하는 계산을 수행하는 방법.
  24. 시스템 온 칩으로서,
    복수의 신경망 계층을 포함하는 신경망을 구현하고 신경망 계층에 대한 출력을 생성하기 위한 계산을 수행하도록 구성된 하드웨어 가속기용 회로와;
    하드웨어 가속기용 회로 외부에 있는 메모리에 액세스하도록 구성된 호스트 컨트롤러와, 상기 메모리는 신경망 계층에서 처리하기 위한 데이터를 저장하도록 구성되고;
    하드웨어 가속기용 회로와 호스트 컨트롤러 사이에서 데이터 통신을 교환하도록 구성된 호스트 인터페이스와; 그리고
    상기 회로에 배치된 복수의 슈퍼 타일을 포함하고, 복수의 슈퍼 타일의 각 슈퍼 타일은:
    신경망 계층에 대한 입력 및 신경망 계층에 대한 복수의 가중치를 저장하도록 구성된 통합 메모리와, 상기 입력 및 복수의 가중치는 호스트 컨트롤러에 의해 액세스 가능한 메모리에 저장된 데이터에 대응하고;
    복수의 컴퓨팅 타일과, 각 컴퓨팅 타일은 계산을 수행하여 출력을 생성하는데 사용되는 컴퓨팅 스레드를 실행하도록 구성되고; 그리고
    통합 메모리 및 복수의 컴퓨팅 타일의 각각의 컴퓨팅 타일에 결합된 중재 로직 유닛을 포함하고, 중재 로직 유닛은:
    통합 메모리에 저장된 하나 이상의 입력을 컴퓨팅 타일 각각에 전달하고;
    통합 메모리에 저장된 개별 가중치 세트를 컴퓨팅 타일 각각에 전달하고; 그리고
    통합 메모리로, 하나 이상의 입력 및 개별 가중치 세트를 사용하여 각각의 컴퓨팅 타일에서 수행된 계산에 기초하여 신경망 계층에 대해 생성된 출력을 전달하도록 구성되는 것을 특징으로 하는 시스템 온 칩.
KR1020227008209A 2019-12-19 2019-12-19 신경망 계산 가속화를 위한 하드웨어 회로 KR20220045026A (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2019/067648 WO2021126225A1 (en) 2019-12-19 2019-12-19 Hardware circuit for accelerating neural network computations

Publications (1)

Publication Number Publication Date
KR20220045026A true KR20220045026A (ko) 2022-04-12

Family

ID=69187951

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227008209A KR20220045026A (ko) 2019-12-19 2019-12-19 신경망 계산 가속화를 위한 하드웨어 회로

Country Status (7)

Country Link
US (1) US20210326683A1 (ko)
EP (1) EP4014122A1 (ko)
JP (1) JP2023508812A (ko)
KR (1) KR20220045026A (ko)
CN (1) CN114402337A (ko)
TW (1) TW202127326A (ko)
WO (1) WO2021126225A1 (ko)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210357748A1 (en) * 2020-05-14 2021-11-18 Samsung Electronics Co., Ltd. Hierarchical weight preprocessing for neural network accelerator
US11726746B1 (en) * 2022-09-14 2023-08-15 Moffett International Co., Limited Vector operation acceleration with convolution computation unit
WO2024065860A1 (en) * 2022-10-01 2024-04-04 Intel Corporation Hardware support for n-dimensional matrix load and store instructions

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10891538B2 (en) * 2016-08-11 2021-01-12 Nvidia Corporation Sparse convolutional neural network accelerator
US11436483B2 (en) * 2018-01-17 2022-09-06 Mediatek Inc. Neural network engine with tile-based execution

Also Published As

Publication number Publication date
JP2023508812A (ja) 2023-03-06
US20210326683A1 (en) 2021-10-21
CN114402337A (zh) 2022-04-26
WO2021126225A1 (en) 2021-06-24
EP4014122A1 (en) 2022-06-22
TW202127326A (zh) 2021-07-16

Similar Documents

Publication Publication Date Title
JP7158543B2 (ja) ニューラルネットワーク命令セットアーキテクチャ
KR102412937B1 (ko) 합성곱 계층 가속 장치, 그것을 포함하는 임베디드 시스템 및 그것의 동작 방법
WO2021057713A1 (zh) 用多核处理器实现神经网络模型拆分方法及相关产品
JP2022046552A (ja) ニューラルネットワーク計算タイル
US9886377B2 (en) Pipelined convolutional operations for processing clusters
US20110057937A1 (en) Method and system for blocking data on a gpu
JP2020513120A (ja) ベクトル縮小プロセッサ
US11934826B2 (en) Vector reductions using shared scratchpad memory
KR20220045026A (ko) 신경망 계산 가속화를 위한 하드웨어 회로
TWI783263B (zh) 用於神經網路順序輸入之資料處理方法及非暫時性電腦程式產品
KR20220116050A (ko) 병렬 로드-저장을 이용하는 공유 스크래치패드 메모리
EP3971787A1 (en) Spatial tiling of compute arrays with shared control
US11704562B1 (en) Architecture for virtual instructions
US11972349B1 (en) Flexible compute array utilization in a tensor processor
US11922306B2 (en) Tensor controller architecture
KR20240063137A (ko) 하드웨어 가속기 최적화형 그룹 컨볼루션 기반 신경망 모델
TW202347145A (zh) 在機器學習硬體加速器處利用資料稀疏性
KR20240050389A (ko) 그룹 컨볼루션 구현을 위한 신경망 아키텍처