KR20210082058A - 콘볼루션 신경망들을 구현하기 위한 구성 가능형 프로세서 엘리먼트 어레이들 - Google Patents

콘볼루션 신경망들을 구현하기 위한 구성 가능형 프로세서 엘리먼트 어레이들 Download PDF

Info

Publication number
KR20210082058A
KR20210082058A KR1020200120679A KR20200120679A KR20210082058A KR 20210082058 A KR20210082058 A KR 20210082058A KR 1020200120679 A KR1020200120679 A KR 1020200120679A KR 20200120679 A KR20200120679 A KR 20200120679A KR 20210082058 A KR20210082058 A KR 20210082058A
Authority
KR
South Korea
Prior art keywords
tensor processing
neural network
layer
template
tensor
Prior art date
Application number
KR1020200120679A
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 KR20210082058A publication Critical patent/KR20210082058A/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
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/045Combinations of networks
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Molecular Biology (AREA)
  • General Health & Medical Sciences (AREA)
  • Evolutionary Computation (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)

Abstract

본 명세서에 개시된 예시적인 장치는 프로세서 엘리먼트들의 어레이를 포함하고, 어레이는 각각 제1 개수의 프로세서 엘리먼트를 갖는 행들 및 각각 제2 개수의 프로세서 엘리먼트를 갖는 열들을 포함한다. 개시된 예시적인 장치는 또한 다수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿에 대응하는 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 계층을 구현하도록 어레이를 구성하기 위해 디스크립터들을 저장하기 위한 구성 레지스터들을 포함하고, 프로세서 엘리먼트들의 프로세서 엘리먼트들은 디스크립터들에 기초하여, 콘볼루션 신경망의 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 콘볼루션 신경망의 계층과 연관된 출력 활성화 데이터를 생성하기 위해 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿을 구현하도록 구성된다. 개시된 예시적인 장치는 콘볼루션 신경망의 계층과 연관된 입력 활성화 데이터, 필터 데이터 및 출력 활성화 데이터를 저장하기 위한 메모리를 추가로 포함한다.

Description

콘볼루션 신경망들을 구현하기 위한 구성 가능형 프로세서 엘리먼트 어레이들{CONFIGURABLE PROCESSOR ELEMENT ARRAYS FOR IMPLEMENTING CONVOLUTIONAL NEURAL NETWORKS}
본 개시내용은 일반적으로 신경망들에 관한 것으로, 특히, 콘볼루션 신경망들을 구현하기 위한 구성 가능형 프로세서 엘리먼트 어레이들에 관한 것이다.
신경망들은, 예를 들어, 얼굴 인식, 음성 인식, 내비게이션, 시장 조사 등과 같은 광범위한 기술 분야들에서 기본 기술 솔루션들로서 채택되어 왔으며, 계속해서 채택되고 있다. 따라서, 신경망 분야는 추론 알고리즘 개발뿐만 아니라 진화하는 추론 알고리즘들을 구현하기 위한 하드웨어 플랫폼 개발 측면 모두에서 빠르게 성장해 왔으며, 계속해서 성장하고 있다. 딥 러닝 콘볼루션 신경망들과 같은 신경망들의 네트워크 계층들은 많은 가능한 텐서 형태들로 제공되며, 기존의 신경망 추론 알고리즘들이 수정되고/되거나 새로운 신경망 추론 알고리즘들이 개발됨에 따라 그 차원들이 계속 변경된다.
도 1은 본 개시내용의 교시들에 따라 콘볼루션 신경망들을 구현하기 위한 예시적인 구성 가능형 프로세서 엘리먼트 어레이의 블록도이다.
도 2는 도 1의 구성 가능형 프로세서 엘리먼트 어레이에 의해 수행되는 예시적인 텐서 연산을 예시한다.
도 3 및 도 4는 도 1의 구성 가능형 프로세서 엘리먼트 어레이에 포함된 예시적인 프로세서 엘리먼트들에 의해 구현될 예시적인 텐서 프로세싱 템플릿들 및 대응하는 예시적인 데이터 흐름 스케줄들을 예시한다.
도 5는 도 1의 구성 가능형 프로세서 엘리먼트 어레이에 의해 구현되는 예시적인 연산 파이프라인을 예시한다.
도 6은 도 1의 구성 가능형 프로세서 엘리먼트 어레이에 포함된 예시적인 프로세서 엘리먼트의 블록도이다.
도 7 내지 도 12는 도 1의 구성 가능형 프로세서 엘리먼트 어레이에 대한 예시적인 연산 단계들(phases of operation) 및 연산 단계들 간의 예시적인 천이들을 예시한다.
도 13a 및 도 13b는 도 1의 구성 가능형 프로세서 엘리먼트 어레이에서 외부 부분 합 누산(external partial sum accumulation)을 지원하기 위한 예시적인 하드웨어 아키텍처를 예시한다.
도 14는 도 1의 구성 가능형 프로세서 엘리먼트 어레이에서 엘리먼트-별 연산들을 지원하기 위한 예시적인 하드웨어 아키텍처를 예시한다.
도 15는 도 1의 구성 가능형 프로세서 엘리먼트 어레이에서 맥스풀(maxpool) 연산들을 지원하기 위한 예시적인 하드웨어 아키텍처를 예시한다.
도 16 내지 도 19는, 4개의 대응하는 예시적인 텐서 프로세싱 템플릿에 따라 구성될 때, 도 1의 구성 가능형 프로세서 엘리먼트 어레이에 의해 구현되는 4개의 예시적인 데이터 흐름 스케줄을 예시한다.
도 20 및 도 21은 도 16의 제1 예시적인 데이터 흐름 스케줄의 예시적인 데이터 파티셔닝 및 차단 연산들의 양태들을 예시한다.
도 22 내지 도 25는 도 16 내지 도 19의 대응하는 예시적인 데이터 흐름 스케줄들을 구현하기 위해 도 1의 구성 가능형 프로세서 엘리먼트 어레이를 구성하는 데 사용될 구성 레지스터 디스크립터 값들의 예시적인 세트들을 예시한다.
도 26은 도 1 및/또는 도 6의 구성 가능형 프로세서 엘리먼트 어레이를 동작시키기 위해 실행될 수 있는 예시적인 컴퓨터 판독 가능 명령어들을 나타내는 흐름도이다.
도 27은 도 1 및/또는 도 6의 예시적인 구성 가능형 프로세서 엘리먼트 어레이를 포함하고, 도 1 및/또는 도 6의 구성 가능형 프로세서 엘리먼트 어레이를 동작시키기 위해 도 26의 예시적인 컴퓨터 판독 가능 명령어들을 실행하도록 구성되는 예시적인 프로세서 플랫폼의 블록도이다.
도면들은 축척대로 도시되어 있지 않다. 일반적으로, 동일하거나 유사한 부분들, 엘리먼트들 등을 참조하기 위해 도면(들) 및 첨부된 기재 설명 전반에 걸쳐 동일한 참조 번호들이 사용될 것이다.
"제1", "제2", "제3" 등과 같은 기술어들은 개별적으로 참조될 수 있는 다수의 엘리먼트들 또는 컴포넌트들을 식별할 때 본 명세서에서 사용된다. 이러한 기술어들은 그들의 사용 맥락에 기초하여 달리 지정되거나 이해되지 않는 한, 임의의 의미의 우선 순위 또는 시간 정렬을 의미하려는 것이 아니라, 개시된 예들의 이해를 용이하게 하기 위해 개별적으로 다수의 엘리먼트들 또는 컴포넌트들을 참조하기 위한 레이블들로서만 의도된다. 일부 예들에서, "제1"과 같은 기술어는 상세한 설명에서의 엘리먼트를 참조하는 데 사용될 수 있고, 동일한 엘리먼트가 "제2" 또는 "제3"과 같은 상이한 기술어와 함께 청구항에서 참조될 수 있다. 이러한 경우들에서, 이러한 기술어들은 단지 다수의 엘리먼트들 또는 컴포넌트들을 용이하게 참조하는 데에만 사용된다는 것이 이해되어야 한다.
콘볼루션 신경망들을 구현하기 위한 예시적인 구성 가능형 프로세서 엘리먼트 어레이들이 본 명세서에서 개시된다. 위에서 언급된 바와 같이, 신경망 분야는 추론 알고리즘 개발뿐만 아니라 진화하는 추론 알고리즘들을 구현하기 위한 하드웨어 플랫폼 개발 측면 모두에서 빠르게 성장해 왔으며, 계속해서 성장하고 있다. 딥 러닝 콘볼루션 신경망들과 같은 신경망들의 네트워크 계층들은 많은 가능한 텐서 형태들로 제공되며, 기존의 신경망 추론 알고리즘들이 수정되고/되거나 새로운 신경망 추론 알고리즘들이 개발됨에 따라 그 차원들이 계속 변경된다. 빠르게 진행되는 신경망들의 진화를 수용하기 위해서는, 신경망들을 구현하는 데 사용되는 하드웨어 플랫폼들이 네트워크 계층 텐서 형태들의 변화하는 차원들을 지원하도록 구성 가능할 필요가 있다. 종래의 신경망 플랫폼들은 애플리케이션 특정 집적 회로(application specific integrated circuit)(ASIC)를 채택하는 대신 이러한 구성 가능성을 제공하기 위해 필드 프로그래밍 가능 게이트 어레이(field programmable gate array)(FPGA)들을 채택하는데, 왜냐하면 ASIC 구현에서의 네트워크 계층 텐서 형태들의 재구성은 ASIC를 교체해야 할 수 있고, ASIC 설계 사이클들이 길 수 있기 때문이다. 따라서, 특정 딥 러닝 추론 알고리즘을 위한 ASIC-기반 솔루션이 시장에 출시될 때쯤에는, 추론 알고리즘들이 이미 진화했을 수 있으며, 따라서, ASIC-기반 솔루션이 구식이 될 수 있다. 그러나, FPGA들은 ASIC들의 프로세싱 성능 및 에너지 효율이 부족하다.
이러한 종래의 신경망 하드웨어 플랫폼들과 대조적으로, 본 명세서에 개시된 예시적인 구성 가능형 프로세서 엘리먼트 어레이들은 ASIC들의 에너지 효율을 유지하면서 FPGA들과 유사한 구성 가능성을 제공한다. 개시된 예시적인 구성 가능형 프로세서 엘리먼트 어레이들은 런타임 시에 상이한 텐서 형상 계산들의 구성을 가능하게 하며, 이는 ASIC에 의해 제공되는 성능 및 에너지 효율을 유지하면서 광범위하게 변화하는 텐서 차원들을 갖는 네트워크 계층들을 갖는 신경망 알고리즘들의 빠르게 진화하는 분야를 수용할 수 있다.
개시된 예시적인 구성 가능형 프로세서 엘리먼트 어레이들은 본 명세서에서 프로세싱 엘리먼트들 또는 원시 커널 모듈들(primitive kernel modules)이라고도 지칭되는 소프트웨어 구성 가능형 프로세서 엘리먼트(processor element)(PE)들의 어레이들에 기초하며, 이는 신경망의 주어진 계층을 구현하기 위해 필터 가중치들, 입력 활성화들 및/또는 출력 활성화들과 같은 유연한 형태들의 텐서 데이터에 대해 콘볼루션 계산들을 수행할 수 있다. 이하에서 더 상세하게 개시되는 바와 같이, 구성 가능형 프로세서 엘리먼트 어레이에 포함된 예시적인 PE의 마이크로-아키텍처는 주어진 신경망의 연속적인 계층들을 구현하거나 또는 다른 신경망들을 구현하기 위해 (예를 들어, 소프트웨어 프로그래밍 가능 구성 레지스터들에 기초하여) 런타임 시에 재구성 가능하다. 일부 예들에서, PE는 PE 자체에 포함된 계산 유닛들에 가까운 일부 분산형 로컬 스토리지의 위치를 찾음으로써 에너지 효율을 위해 활성화 및 가중치 재사용을 활용한다.
이하에서 더 상세하게 개시되는 바와 같이, 하드웨어에서 가변 텐서 형상 계산들을 지원하기 위한 개시된 예시적인 PE의 유연성은 신경망의 주어진 계층과 연관된 텐서 계산들을 가능한 텐서 프로세싱 템플릿들의 세트 중 하나의 텐서 프로세싱 템플릿으로 분해하는 것에 기초한다. 이러한 텐서 프로세싱 템플릿들의 예들은 벡터-벡터, 벡터-매트릭스 및 매트릭스-매트릭스 텐서 프로세싱 템플릿들을 포함하되, 이에 제한되지 않는다. 이하에서 더 상세하게 개시되는 바와 같이, 예시적인 PE들은 하드웨어에서 특정 텐서 계산을 지원하기 위해 구성 디스크립터들의 세트에 기초하여 제어되며, 구성 디스크립터들의 세트는 신경망의 주어진 계층의 실행 시작시에 초기화된다. 이와 같이, 본 명세서에 개시된 예시적인 PE들은 (예를 들어, ASIC을 통해) 순전히 하드웨어 솔루션으로서 구현될 수 있지만, 이것은 하드웨어 구성 레지스터들을 소프트웨어에 노출시켜, 소프트웨어가 런타임 동안 주어진 망 계층에 대한 텐서 데이터 흐름을 구성할 수 있게 한다. 따라서, 본 명세서에 개시된 예시적인 PE들 및 본 명세서에 개시된 예시적인 구성 가능형 프로세서 엘리먼트 어레이들로의 PE들의 연관된 배열은 콘볼루션 신경망 계층들의 유연한 데이터 흐름들이, 예를 들어, 임의의 작업을 외부 프로세서 또는 소프트웨어로 분담시켜야 하는 것으로 인한 성능 저하 없이 하드웨어 가속기들에서 실행될 수 있게 한다.
본 명세서에 개시된 예시적인 구성 가능형 프로세서 엘리먼트 어레이들은 콘볼루션 신경망들을 구현하기 위한 종래의 하드웨어 플랫폼들에 비해 많은 이점들을 제공한다. 예를 들어, 구성 가능형 프로세서 엘리먼트 어레이들은 FPGA들이 아닌 ASIC들로 구현될 수 있으므로, 종래의 플랫폼들에 비해 향상된 성능 및 전력 소비를 보여준다. 본 명세서에 개시된 예시적인 구성 가능형 프로세서 엘리먼트 어레이들의 에너지-효율적인 특성은 얼굴 인식, 음성 인식, 내비게이션, 시장 조사 등과 같은 광범위한 애플리케이션들에서 머신 학습 가속기들의 추가 사용을 가능하게 할 수 있다. 본 명세서에 개시된 예시적인 구성 가능형 프로세서 엘리먼트 어레이들의 에너지 효율적인 특성은 또한 종래의 신경망 하드웨어 플랫폼들에 의해 보여진 상대적으로 높은 전력 소비로 인해 머신 학습 기술들을 이용할 수 없었던 사물 인터넷(Internet of Things)(IoT) 애플리케이션들, 드론(예를 들어, 무인 차량) 애플리케이션들 등과 같은 애플리케이션들에서도 머신 학습 가속기들의 채택을 가능하게 할 수 있다.
도면들을 참조하면, 본 개시내용의 교시들에 따라 콘볼루션 신경망들을 구현하기 위한 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)의 블록도가 도 1에 예시되어 있다. 도 1의 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)는 예시적인 행들(110a-c) 및 예시적인 열들(115a-c)을 포함하는 어레이에 배열된 예시적인 PE들(105a-i)을 포함하며, 행들(110a-c)의 각각의 행들은 제1 개수의 PE를 갖고, 열들(115a-c)의 각각의 열들은 제2 개수의 PE를 갖는다. 행들(110a-c)의 PE들의 제1 개수 및 열들(115a-c)의 PE들의 제2 개수는 동일할 수도 있고 또는 상이할 수도 있다. 예시된 예에서, 행들(110a-c)의 PE들의 제1 개수와 열들(115a-c)의 PE들의 제2 개수는 동일하며, 도 1에는 "N"으로 라벨링되어 있다. 예를 들어, N은 16 또는 일부 다른 값일 수 있다.
도 1의 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)는 또한, 예를 들어, 하나 이상의 하드웨어 레지스터, 어레이, 메모리, 데이터 셀 등, 또는 이들의 임의의 조합(들)에 의해 구현될 수 있는 예시적인 구성 레지스터들(120)을 포함한다. 구성 레지스터들(120)은 데이터 흐름 스케줄에 기초하여 예시적인 콘볼루션 신경망의 주어진 계층을 구현하도록 PE들(105a-i)의 어레이를 구성한다. 예시된 예에서, 데이터 흐름 스케줄은 PE들(105a-i)에 의해 지원되는 가능한 텐서 프로세싱 템플릿들의 세트 중 하나의 텐서 프로세싱 템플릿에 대응한다. 이하에서 더 상세하게 개시되는 바와 같이, 구성 레지스터들(120)은 콘볼루션 신경망의 주어진 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 콘볼루션 신경망의 주어진 계층과 연관된 출력 활성화 데이터를 생성하기 위해 가능한 텐서 프로세싱 템플릿들 중 하나를 구현하도록 PE들(105a-i) 중 하나를 구성하는 디스크립터들의 세트를 수용한다. 이하에서 더 상세하게 개시되는 바와 같이, 구성 레지스터들(120)은 컨볼루션 신경망의 후속 계층을 구현하도록 PE들(105a-i)의 어레이를 재구성하기 위해 새로운 디스크립터 세트를 수용할 수 있다. 예를 들어, 새로운 디스크립터 세트는 구성 레지스터들(120)에 적용된 종래의 디스크립터 세트와 동일할 수 있다. 이러한 예들에서는 디스크립터들을 동일하게 유지함으로써, PE들(105a-i)의 PE들이 종래의 신경망 계층에 대한 것과 동일한 텐서 프로세싱 템플릿을 구현하도록 구성될 수 있다. 다른 예들에서, 새로운 디스크립터 세트는 구성 레지스터들(120)에 적용된 종래의 디스크립터 세트와 상이할 수 있다. 이러한 예들에서는 상이한 디스크립터들을 사용함으로써, PE들(105a-i)의 PE들이 콘볼루션 신경망의 후속 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 콘볼루션 신경망의 후속 계층과 연관된 출력 활성화 데이터를 생성하기 위해 가능한 텐서 프로세싱 템플릿들 중 하나를 구현하도록 구성될 수 있다. 따라서, 구성 레지스터들(120)은 복수의 텐서 프로세싱 템플릿들 중 하나에 대응하는 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 계층을 구현하기 위해 복수의 디스크립터들에 기초하여 PE들(105a-i)의 어레이를 구성하기 위한 수단의 예이다. 또한, PE들(105a-i)은 텐서 프로세싱 템플릿에 기초하여, 콘볼루션 신경망의 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 컨볼루션 신경망의 계층과 연관된 출력 활성화 데이터를 생성하기 위한 수단의 예들이다.
도 1의 예시적인 예는 디스크립터들의 세트를 구성 레지스터들(120)에 로드하기 위한 예시적인 구성 로더(122)를 포함한다. 일부 예들에서, 구성 로더(122)는 구성 가능형 프로세서 엘리먼트 어레이(100)에 의해 구현되는 콘볼루션 신경망의 계층의 디스크립션을 가능한 텐서 프로세싱 템플릿들의 세트 중 선택된 것에 대응하는 데이터 흐름 스케줄로 변환하기 위한 컴파일러를 포함한다. 이러한 예들의 컴파일러는 데이터 흐름 스케줄을 구성하는 데 사용될 텐서 프로세싱 템플릿을 선택하기 위해 실행 시간, 메모리 사용량, 활성화될 PE들의 수 등과 같되, 이에 제한되지 않는 하나 이상의 기준을 활용할 수 있다. 또한, 이러한 예들에서의 컴파일러는 그 후 결과적인 데이터 흐름 스케줄을 구성 레지스터들(120)에 기입될 디스크립터들의 세트로 변환할 수 있다. 일부 예들에서, 구성 로더(122)는 도 27과 연관되어 이하에서 논의되는 예시적인 프로세서 플랫폼(2700)에 도시된 예시적인 프로세서(2712)와 같은 하나 이상의 프로세서에 의해 구현된다. 이와 같이, 구성 로더(122)는 디스크립터들을 결정하고/하거나 디스크립터들을 구성 레지스터들(120)에 기입/로드하기 위한 수단의 예이다.
도 1의 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)는 PE들(105a-i)에 의해 구현되는 콘볼루션 신경망의 주어진 계층과 연관된 입력 활성화 데이터, 필터 데이터 및 출력 활성화 데이터를 저장하기 위한 예시적인 메모리(125)를 추가로 포함한다. 예시된 예에서, 메모리(125)는 정적 랜덤 액세스 메모리(static random access memory)(SRAM)의 뱅크들에 의해 구현된다. 그러나, 다른 예들에서는, 다른 개수들 및/또는 타입들의 메모리, 및/또는 이들의 조합(들)이 메모리(125)를 구현하는 데 사용될 수 있다. 따라서, 메모리(125)는 콘볼루션 신경망의 계층과 연관된 입력 활성화 데이터, 필터 데이터 및 출력 활성화 데이터를 저장하기 위한 예이다.
도 1의 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)는 또한 메모리(125)로부터 데이터를 판독하고 데이터를 PE들(105a-i)에 기입하기 위한 예시적인 텐서 데이터 분배 유닛(130)을 포함한다. 텐서 데이터 분배 유닛(130)은 또한 PE들(105a-i)에 의해 구현될 주어진 신경망 계층에 대한 디스크립터들의 세트에 의해 구성된 텐서 프로세싱 템플릿에 기초하여, PE들(105a-i)로부터 데이터를 수용하고, 메모리(125)에 데이터를 저장한다. 텐서 데이터 분배 유닛(130)의 예시적인 구현은 2019년 6월 28일자로 출원된 미국 특허 출원 번호 제16/456,707호에 기술되어 있다.
가능한 텐서 프로세싱 템플릿은 전체 텐서 연산이 구성 가능형 프로세서 엘리먼트 어레이(100)에 포함된 PE들(105a-i)의 조합에 의해 달성될 수 있도록, 주어진 신경망 계층을 구현하기 위해 구성 가능형 프로세서 엘리먼트 어레이(100)에 의해 수행될 전체 텐서 연산을 분해하는 상이한 방법들을 제공한다. 주어진 신경망 계층을 구현하기 위해 구성 가능형 프로세서 엘리먼트 어레이(100)에 의해 수행되는 이러한 예시적인 전체 텐서 연산(200)이 도 2에 예시되어 있다. 도 2의 예는 본 개시내용 전반에 걸쳐 사용될 표기법을 도입한다.
예시적인 텐서 연산(200)은, 입력 활성화 데이터(205) 또는 입력 활성화들(205)이라고도 지칭되는 입력 데이터(205)의 세트가 필터 가중치들(210) 또는 단순히 가중치들(210)이라고도 지칭되는 필터 커널들(210)의 세트와 콘볼루션되어, 출력 활성화 데이터(215) 또는 출력 활성화들(215)이라고도 지칭되는 출력 데이터(215)의 세트를 생성하는 신경망 계층에 대응한다. 예시된 예에서, 입력 활성화들(205)은 x-차원의 Ix개의 엘리먼트, y-차원의 Iy개의 엘리먼트, 및 입력 활성화 데이터의 Ic개의 상이한 채널을 갖는 어레이들에 배열된다. 차원들 Ix, Iy 및 Ic는 동일할 수도 있고 상이할 수도 있으며, 임의의 값(들)이 될 수 있다. 예를 들어, 텐서 연산(200)에 대응하는 신경망 계층이 이미지 프로세싱 신경망의 입력 계층(예를 들어, 제1 계층)인 경우, Ix 및 Iy 차원들은 입력 이미지의 행들 및 열들의 픽셀들의 수에 각각 대응할 수 있고, Ic 차원은 RGB(red-blue-green) 포맷으로 표현된 이미지 데이터에 대한 3개의 채널과 같은 이미지 데이터의 채널들의 수에 대응할 수 있다. 다른 예로서, 텐서 연산(200)에 대응하는 신경망 계층이 이미지 프로세싱 신경망의 중간 계층(예를 들어, 제2 계층)인 경우, Ix 및 Iy 차원들은 프로세싱되는 이미지의 행들 및 열들의 픽셀들의 수에 각각 대응할 수 있고, Ic 차원은 이전의 신경망 계층의 입력 활성화 데이터와 콘볼루션된 64개의 필터 또는 일부 다른 개수의 필터와 같은 상이한 필터들의 수에 대응할 수 있다.
예시된 예에서, 차원 Ix x Iy x Ic를 갖는 입력 활성화 데이터(205)는 필터들(210)의 세트에 의해 프로세싱된다. 예시된 예에서, 필터들(210)은 x-차원의 Fx개의 엘리먼트(예를 들어, 가중치), y-차원의 Fy개의 엘리먼트(예를 들어, 가중치) 및 채널 차원의 Ic개의 엘리먼트를 갖는 어레이들에 배열되며, 후자는 입력 활성화 데이터의 채널들의 수 Ic와 동일하다. 예를 들어, Fx 및 Fy 차원들은 3x3 필터(210)가 각각의 입력 활성화 데이터 엘리먼트 및 그 인접한 이웃들과 콘볼루션되도록 각각 3 및 3에 대응할 수 있다. 물론, 필터들(210)은 Fx 및 Fy 차원들에 대해 다른 값들을 가질 수 있고, Fx 및 Fy 차원들은 서로 동일할 수도 있고 상이할 수도 있다.
도 2의 예시적인 텐서 연산(200)은 필터들(210)의 각각의 필터와 입력 활성화 데이터(205)를 콘볼루션하고, 결과 데이터를 채널 차원(Ic)에 걸쳐 합산(누산)하여, 출력 활성화 데이터(215)를 생성하는 것을 포함한다. 예를 들어, 필터들 중 주어진 필터(210a)는 주어진 입력 활성화 데이터 엘리먼트(225)를 중심으로 하는 입력 활성화 데이터(205)의 주어진 부분(220)과 콘볼루션된다. 도시된 바와 같이, 채널 차원들 각각에 대한 결과는 합산되어(예를 들어, Ic 차원들에 걸친 누산에 대응) 입력 활성화 데이터 엘리먼트(225)의 어레이 포지션에 대응하는 어레이 포지션에서 출력 활성화 데이터 엘리먼트(230)를 생성한다. 예시된 예에서, 필터들(210)의 각각의 필터를 입력 활성화 데이터(205)와 콘볼루션하면 출력 활성화 데이터(215)를 생성하는데, 이는 x-차원의 Ox개의 엘리먼트, y-차원의 Oy개의 엘리먼트 및 출력 활성화 데이터의 Oc개의 상이한 채널을 갖는 어레이들에 배열된다. Ox 및 Oy 차원들은 동일한 값 또는 상이한 값들을 가질 수 있고, Ix 및 Iy 차원들과 동일할 수도 있고 상이할 수도 있다. Oc 차원은 입력 활성화 데이터(205)와 콘볼루션된 상이한 필터들(210)의 수에 대응할 수 있다.
본 개시내용에서 사용되는 다른 용어는 다음과 같다. On은 배치 사이즈(batch size)를 지칭한다. 예를 들어, 구성 가능형 프로세서 엘리먼트 어레이(100)가 이미지들을 프로세싱하기 위해 콘볼루션 신경망을 구현하는 경우, On은 병렬로 프로세싱될 이미지들의 수를 지칭한다. 약어 "IF"는 입력 활성화 데이터를 지칭하는 데 사용되고, 약어 "FL"은 필터 데이터(예를 들어, 가중치들)를 지칭하는 데 사용되고, 약어 "OF"는 출력 활성화 데이터를 지칭하는 데 사용된다. 또한, "Psum"이라는 용어는 콘볼루션 연산에서의 부분적인 결과를 지칭하는 데 사용되며, 이하에서 더 상세하게 설명된다.
도 1의 구성 가능형 프로세서 엘리먼트 어레이(100)에 포함된 예시적인 PE들(105a-i)에 의해 구현되는 예시적인 텐서 프로세싱 템플릿들(305, 310 및 315) 및 대응하는 예시적인 데이터 흐름 스케줄들(405, 410 및 415)이 도 3 및 도 4에 각각 예시되어 있다. 텐서 프로세싱 템플릿(305)은 벡터-벡터 텐서 프로세싱 템플릿의 예이다. 텐서 프로세싱 템플릿(310)은 벡터-매트릭스 텐서 프로세싱 템플릿의 예이다. 텐서 프로세싱 템플릿(315)은 매트릭스-매트릭스 텐서 프로세싱 템플릿의 예이다. 데이터 흐름 스케줄(405)은 벡터-벡터 텐서 프로세싱 템플릿(305)에 따라 예시적인 콘볼루션 신경망의 주어진 계층을 구현하는 예시적인 텐서 연산의 일부를 PE들(105a-i) 중 하나에 매핑한 것을 나타낸다. 데이터 흐름 스케줄(410)은 벡터-매트릭스 텐서 프로세싱 템플릿(310)에 따라 예시적인 콘볼루션 신경망의 주어진 계층을 구현하는 예시적인 텐서 연산의 일부를 PE들(105a-i) 중 하나에 매핑한 것을 나타낸다. 데이터 흐름 스케줄(415)은 매트릭스-매트릭스 텐서 프로세싱 템플릿(315)에 따라 예시적인 콘볼루션 신경망의 주어진 계층을 구현하는 예시적인 텐서 연산의 일부를 PE들(105a-i) 중 하나에 매핑한 것을 나타낸다. 스칼라-벡터 프로세싱 템플릿과 같은 다른 텐서 프로세싱 템플릿들도 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)에 의해 지원될 수 있다.
도 3 및 도 4의 예시된 예들은 특정 텐서 프로세싱 템플릿을 정의하기 위해 표기법 "DTd/j/k"를 사용한다. 이 표기법에서, "DT"는 데이터 타입을 지칭하는데, 이는 정의된 템플릿에 따라 PE에 의해 프로세싱되는 입력 활성화 데이터의 경우에는 "I"일 수 있고, 또는 정의된 템플릿에 따라 PE에 의해 생성되는 출력 활성화 데이터의 경우에는 "O"일 수 있다. 표기법 "d"는 차원들을 나타내며, "x", "y" 또는 "c" 중 어느 것일 수 있다. 표기법 "j"는 정의된 템플릿에 따라 주어진 PE에 의해 프로세싱되는 차원 "d"의 데이터 타입 "DT"의 엘리먼트들의 수를 나타낸다. 표기법 "k"는 정의된 템플릿에 따라 구현되는 주어진 신경망 계층에 대한 전체 텐서 연산 출력을 산출하기 위해 차원 "d"에서 데이터 타입 "DT"의 엘리먼트들을 프로세싱/생성하는 데 관여되는 PE들의 수를 나타낸다. 예시된 예에서, 표기법 "k"는 PE들(105a-i) 중 단일의 것에 적용되는 템플릿을 참조할 때 대시(-)로 설정된다. 예시된 예에서, 특정 데이터 타입 및/또는 차원이 생략될 때, 템플릿은 PE가 해당 차원에서 해당 데이터 타입의 한 개(1개)의 엘리먼트를 프로세싱/생성하는 것을 지정하는 것으로 가정된다.
예를 들어, 예시된 예의 텐서 프로세싱 템플릿(305)은 표기법 "Ox/1/-", "Oy/1/-" 및 "Ic/64/-"에 의해 정의되며, 이는 해당 템플릿에 따라 구성된 PE가 Ox 및 Oy 차원들의 한 개(1개)의 포지션에서 OF 데이터를 생성하기 위해 Ic 차원의 IF 데이터의 64개의 엘리먼트를 프로세싱하는 것을 지정한다. 예시된 예의 텐서 프로세싱 템플릿(310)은 표기법 "Oc/8/-" 및 "Ic/8/-"에 의해 정의되며, 이는 해당 템플릿에 따라 구성된 PE가 Ox 및 Oy 차원들의 한 개(1개)의 포지션에서 Oc 차원의 여덟 개(8개)의 포지션에서 OF 데이터를 생성하기 위해 Ic 차원의 IF 데이터의 여덟 개(8개)의 엘리먼트를 프로세싱하는 것을 지정한다. 예시된 예의 텐서 프로세싱 템플릿(315)은 표기법 "Ox/8/-," "Ic/8/-" 및 "Oc/8/-"에 의해 정의되며, 이는 해당 템플릿에 따라 구성된 PE가 Oc 차원의 여덟 개(8개)의 포지션 및 Ox 및 Oy 차원들의 한 개(1개)의 포지션에서 OF 데이터를 생성하기 위해 Ox 차원의 여덟 개(8개)의 포지션 및 Ic 차원의 여덟 개(8개)의 포지션에서 IF 데이터의 엘리먼트들을 프로세싱하는 것을 지정한다.
예시적인 데이터 흐름 스케줄(405)에 의해 예시된 바와 같이, 벡터-벡터 텐서 프로세싱 템플릿(310)은 주어진 Ox 및 Oy 포지션에서 Ic 차원에 걸쳐 필터링된 IF 데이터(예를 들어, 대응하는 FL 데이터를 곱한 IF 데이터)의 소정 개수(예를 들어, 예에서는 64개)의 엘리먼트를 누산함으로써 해당 Ox 및 Oy 포지션에서 1개의 데이터 엘리먼트를 계산하는 스케줄들과 같이, 벡터와 벡터를 곱하는 것에 대응하는 텐서 연산의 각각의 부분들을 수행하기 위해 데이터 흐름 스케줄들을 구현하도록 PE들(105a-i)의 PE들을 구성하는 데 사용될 수 있다. 예시적인 데이터 흐름 스케줄(410)에 의해 예시된 바와 같이, 벡터-매트릭스 텐서 프로세싱 템플릿(310)은 제1 개수(예를 들어, 예에서는 8개)의 필터들로부터 대응하는 FL 데이터로 필터링한 후, 주어진 Ox 및 Oy 포지션에서 Ic 차원에 걸쳐 IF 데이터의 제2 개수(예를 들어, 예에서는 8개)의 엘리먼트를 누산함으로써 해당 Ox 및 Oy 포지션에서 Oc 차원의 데이터의 제1 개수의 엘리먼트를 계산하는 스케줄들과 같이, 벡터를 매트릭스와 곱하는 것에 대응하는 텐서 연산의 각각의 부분들을 수행하기 위해 데이터 흐름 스케줄들을 구현하도록 PE들(105a-i)의 PE들을 구성하는 데 사용될 수 있다. 예시적인 데이터 흐름 스케줄(415)에 의해 예시된 바와 같이, 매트릭스-매트릭스 텐서 프로세싱 템플릿(315)은, 제3 개수(예를 들어, 예에서는 8개)의 필터들로부터 대응하는 FL 데이터로 필터링한 후, 해당 Ox 포지션 및 Oy 포지션에서 Ic 차원에 걸쳐 IF 데이터의 제3 개수의 엘리먼트를 누산함으로써 Ox 차원들의 제2 개수(예를 들어, 예에서는 8개)의 포지션 각각에서, 그러나 동일한 Oy 포지션에서, Oc 차원의 데이터의 제1 개수(예를 들어, 예에서는 8개)의 엘리먼트를 계산하는 스케줄들과 같이, 매트릭스와 매트릭스를 곱하는 것에 대응하는 텐서 연산의 각각의 부분들을 수행하기 위해 데이터 흐름 스케줄들을 구현하도록 PE들(105a-i)의 PE들을 구성하는 데 사용될 수 있다.
콘볼루션 신경망 계층에 대한 특정 데이터 흐름이 가능한 텐서 템플릿들 중 하나에 매핑된 후, 표기법 "DTd/j/k"로 나타낸 매크로 레벨 명령어들은 (예를 들어, 컴파일러에 의해) 유연한 PE 파이프라인을 사용하여 주어진 PE에 의해 프로세싱될 수 있는 여러 마이크로 명령어들로 분해된다. 도 5는 도 1의 구성 가능형 프로세서 엘리먼트 어레이(100)의 PE들에 의해 구현되는 예시적인 연산 파이프라인(500)을 예시한다. 예시적인 파이프라인(500)은 매크로 입도 명령어들을 구성, 로드, 계산, 누산 및 드레인과 같은 다수의 더 간단한 마이크로 명령어들로 분해한 것을 나타낸다. 예시된 예에서는, 동일한 마이크로 명령어 세트가 상이한 매크로 명령어들을 구현하는 데 사용될 수 있다. 이를 달성하기 위해, 마이크로 명령어들 내의 필드들은 상이한 가능한 텐서 프로세싱 템플릿들(예를 들어, 벡터-벡터 텐서 프로세싱 템플릿들, 벡터-매트릭스 텐서 프로세싱 템플릿들, 매트릭스-매트릭스 텐서 프로세싱 템플릿들, 스칼라-벡터 텐서 프로세싱 템플릿들 등)을 수용하도록 다양하다.
다시 도 1로 돌아가면, 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)는 콘볼루션 신경망의 현재 계층에 대해 구성된 데이터 흐름 스케줄에 기초하여 IF, FL 및 OF 텐서 데이터(뿐만 아니라 이하에서 설명되는 Psum 텐서 데이터)에 대한 계산들을 수행하고, 데이터 흐름 스케줄은 벡터-벡터, 벡터-매트릭스, 매트릭스-매트릭스 또는 스칼라-벡터 텐서 프로세싱 템플릿들 중 하나로 캐스팅된다. 위에서 설명된 바와 같이, 구성 가능형 프로세서 엘리먼트 어레이(100)는 가능한 텐서 프로세싱 템플릿들의 세트 중 하나의 텐서 프로세싱 템플릿에 대응하는 데이터 흐름을 제어하는 구성 가능한 디스크립터들을 수용하기 위한 구성 레지스터들(120)를 포함한다. 구성 가능형 프로세서 엘리먼트 어레이(100)는 또한 개별 PE들(105a-i)의 NxN 그리드(예를 들어, 여기서 N=16 또는 일부 다른 값)로서 배열되는 PE들(105a-i)의 어레이를 포함한다.
예시된 예의 구성 가능형 프로세서 엘리먼트 어레이(100)는 메모리(125)의 SRAM 뱅크들과 PE들(105a-i) 내의 로컬 레지스터 파일 스토리지 사이의 데이터를 버퍼링하기 위한 열 버퍼 스토리지(135a-c)를 추가로 포함하며, 열 버퍼들(135a-c)의 각각의 열 버퍼들은 PE들(105a-i)의 열들(115a-c) 중 대응하는 열들과 연관된다. 예시된 예에서, 열 버퍼들(135a-c)은 또한 메모리(135)에 저장하기 위해 PE들(105a-i)로부터 출력되는 데이터에 대해 절단 및/또는 정류 선형 유닛(rectified linear unit)(ReLU) 연산들을 수행할 수 있는 각각의 예시적인 출력 데이터 프로세서들(138a-c)을 포함한다. 예시된 예의 구성 가능형 프로세서 엘리먼트 어레이(100)는 PE들(105a-i)의 어레이와 열 버퍼들(135a-c) 사이에서 IF, FL 및 OF 텐서 데이터를 각각 이동시키기 위한 예시적인 전용 버스들(140a-c)을 포함한다.
예시된 예에 도시된 바와 같이, PE들(105a-i)의 각각의 PE들은 해당 PE에 대한 IF, FL 및 OF 텐서 데이터를 각각 저장하기 위한 예시적인 레지스터 파일(register file)(RF) 로컬 스토리지(145a-c)를 포함한다. PE들(105a-i)의 각각의 PE들은 또한 해당 PE에 의해 프로세싱될 IF 및 FL 데이터에 대해 곱셈 및 누산 연산들을 수행하기 위한 (파이프라인일 수 있는) 예시적인 곱셈-및-누산(multiple-and-accumulate)(MAC) 유닛(150), 해당 PE에 의해 프로세싱될 IF 데이터에 대해 엘리먼트-별 연산들을 수행하기 위한 예시적인 엘리먼트-별 계산 유닛(155), 및 해당 PE와 연관된 OF 텐서 데이터를 생성하기 위해 맥스-풀링 연산들을 수행하기 위한 예시적인 맥스-풀링 유닛(160)과 예시적인 풀러 레지스터(165)를 포함한다. PE들(105a-i)의 각각의 PE들은 예시적인 구성 레지스터(들)(170) 및 예시적인 유한 상태 머신(finite state machine)(FSM)(175)을 추가로 포함한다. FSM(175)은 (i) RF 스토리지(145a-b)로부터의 IF 및 FL 텐서 데이터를 PE 내의 상이한 계산 유닛들(150-160)에 로드하는 것, (ii) 각각의 컴퓨팅 유닛(150-160) 내의 계산 시퀀싱, (iii) 구성된 데이터 흐름 스케줄에 따라 PE 내의 부분 합들의 누산을 위한 제어 신호들의 제공, (iv) 상이한 프로세싱 반복들 및/또는 PE들에 걸친 부분 합들의 누산을 위해 PE에 대한 및 PE로부터의 부분 합 OF 텐서 데이터의 전송을 위한 제어 신호들의 제공, (v) 열 버퍼들(135a-c)을 통해 PE로부터 메모리(135)의 SRAM 버퍼들로 완료된 OF 텐서 데이터의 추출 - 여기서, 다음 계층 계산을 위해 메모리(125)의 SRAM들에 저장하기 전에 절단 및/또는 ReLU 연산들이 OF 텐서 데이터를 하나의 사이즈(예를 들어, 32비트 데이터)로부터 상이한(예를 들어, 더 작은) 사이즈(예를 들어, 8비트)로 잘라내기 위해 발생할 수 있음 - 을 관리한다.
아래의 표 1은 가능한 텐서 프로세싱 템플릿들 중 하나 또는 이들의 세트에 따라 PE들(105a-i) 내의 입력 텐서 데이터의 다양한 계산 단계들의 적절한 시퀀싱을 제어함으로써 유연한 데이터 흐름 스케줄들을 지원하기 위한 예시적인 디스크립터 필드 세트를 나타낸다.
디스크립터 필드들 설명들
Stride 주어진 네트워크 계층에 대한 Stride 파라미터
IcPF Ic 파티션 팩터로서, 얼마나 많은 PE들이 동일한 입력 채널에서 작업 중인지를 나타낸다
PEColActv 열에서 활성 PE들의 원-핫 인코딩
PERowActv 행에서 활성 PE들의 원-핫 인코딩
OpPEColActv 열에서 OF 추출을 위한 활성 사이트 PE들의 원-핫 인코딩
OpPERowActv 행에서 OF 추출을 위한 활성 사이트 PE들의 원-핫 인코딩
TotalWrIFRF IF 레지스터 파일에 대한 총 입력 활성화 텐서 데이터 기입들의 수
TotalWrFLRF FL 레지스터 파일에 대한 총 가중치 텐서 데이터 기입들의 수
TotalWrOFRF OF 레지스터 파일에 대한 총 출력 활성화 텐서 데이터 기입들의 수
StAddrIFRF 계산의 하위-블록에 대한 IF RF 내의 시작 어드레스
LenAddrIFRF 계산의 하위-블록에 대해 액세스된 IF RF 내의 총 포인트들의 수
Reset2StartIF IF RF 어드레스가 시작 어드레스로 재설정될 필요가 있는지를 나타내는 부울 값
IncCycIFRF IF RF 액세스 어드레스가 증가될 필요가 있는 총 사이클들의 수
StAddrFLRF 계산의 하위-블록에 대한 FL RF 내의 시작 어드레스
LenAddrFLRF 계산의 하위-블록에 대해 액세스된 FL RF 내의 총 포인트들의 수
Reset2StartFL FL RF 어드레스가 시작 어드레스로 재설정될 필요가 있는지를 나타내는 부울 값
IncCycFLRF FL RF 액세스 어드레스가 증가될 필요가 있는 총 사이클들의 수
StAddrOFRF 계산의 하위-블록에 대한 OF RF 내의 시작 어드레스
LenAddrOFRF 계산의 하위-블록에 대해 액세스된 OF RF 내의 총 포인트들의 수
Reset2StartOF OF RF 어드레스가 시작 어드레스로 재설정될 필요가 있는지를 나타내는 부울 값
IncCycOFRF OF RF 액세스 어드레스가 증가될 필요가 있는 총 사이클들의 수
BlocksPERF 계산의 하나의 매크로 블록 라운드에 대한 RF의 총 하위-계산 블록들의 수
NumPEComp 계산의 하나의 매크로 블록 라운드에서의 총 단위 레벨 계산들의 수
IcMapDirX 동일한 Ic가 행 내의 PE들에 걸쳐 매핑되었는지를 나타내는 부울 값
IcMapDirY 동일한 Ic가 열 내의 PE들에 걸쳐 매핑되었는지를 나타내는 부울 값
NumIncStAddr 상이한 Fx 및 Fy를 프로세싱할 때, IF RF의 상이한 시작 어드레스들의 수
IncStAddrPerBlockIFRF 상이한 Fx 및 Fy를 프로세싱할 때, IF RF의 시작 어드레스 증가(콘볼루션 필터 차원 Fx 또는 Fy > 1)
StepIFRF IF RF에 액세스할 때, 어드레스 증가 단계
ExtPsum 스케줄이 외부 Psum 누산을 필요로 하는지를 나타내는 부울 값
OFGenStartNthBlock 하나의 생성 블록에 대한 총 매크로 블록 계산의 수
PsumLoadStartNthBlock 이전에 계산된 Psum을 다시 로드할 때까지의 총 매크로 블록 계산의 수
LinesPsumPerLoad 하나의 라운드의 Psum 로드에 있는 총 라인들의 수
LinesTotalPsum 모든 외부 Psum을 다시 로드하기 위해 로드될 총 라인들의 수
Relu 특정 계층에 대해 ReLU가 활성화되는지를 나타내는 부울 값
ReluThreshold ReLU가 계층에 대해 활성화되는 경우에 사용될 ReLU 임계값
EltWise 계층에 대해 엘리먼트-별 연산이 수행되는를 나타내는 부울 값
Drain2FLSRAM Eltwise 연산 동안 제2 오퍼랜드가 FL SRAM으로 드레인됨을 나타내는 부울 값
Maxpool 맥스풀 연산자가 계층에 대해 활성화되는지를 나타내는 부울 값
표 1의 디스크립터 필드들은 구성 가능형 프로세서 엘리먼트 어레이(100)에 포함된 각각의 PE에 적용된다. 이와 같이, 활성화된 각각의 PE들은 주어진 네트워크 계층에 대한 IF 및 FL 데이터의 총량 중 상이한 블록들에 대해 동작할 것이지만, 활성화된 각각의 PE들에 의해 동작되는 데이터의 볼륨은 유사할 것이다.
표 1에서, Stride 디스크립터 필드는 콘볼루션 신경망의 파라미터이다. IcPF 디스크립터 필드는 얼마나 많은 PE들이 주어진 Ic 차원의 데이터의 파티션들에서 작업 중인지를 나타내는 Ic 파티셔닝 팩터이다. 따라서, 이 필드는 얼마나 많은 PE들이 Ic 차원에서 누산될 필요가 있는 부분 합들을 갖는지를 나타낸다. PEColActv 디스크립터 필드는 PE들(105a-i)의 열들(115a-c) 중 어느 것이 구성 가능형 프로세서 엘리먼트 어레이(100)에서 활성화되는지를 나타낸다. PERowActv 디스크립터 필드는 PE들(105a-i)의 행들(110a-c) 중 어느 것이 구성 가능형 프로세서 엘리먼트 어레이(100)에서 활성화되는지를 나타낸다. OpPEColActv 디스크립터 필드는 열들(115a-c) 중 어느 열이 구현되는 현재 네트워크 계층에 대한 출력을 가질 것인지를 나타낸다. OpPERowActv 디스크립터 필드는 행들(110a-c) 중 어느 행이 구현되는 현재 네트워크 계층에 대한 출력을 가질 것인지를 나타낸다. 예를 들어, IcPF 디스크립터 필드는 Ic 차원이 다수의 PE들(105a-i)에 걸쳐 파티셔닝되는 때를 나타낸다. 이러한 시나리오에서, PE들(105a-i) 중 일부는 출력 데이터에 대한 부분 합 기여들만을 생성할 것이고, OpPEColActv 및 OpPERowActv 디스크립터 필드들은, 부분 합들이 누산된 후, 어느 PE들(105a-i)이 최종 출력 데이터를 가질 것인지를 나타낸다.
표 1에서, TotalWrIFRF 디스크립터 필드는 얼마나 많은 IF 데이터 포인트들이 PE들(105a-i)에 기입되는지를 나타낸다. TotalWrFLRF 디스크립터 필드는 얼마나 많은 FL 데이터 포인트들이 PE(105a-i)에 기입되는지를 나타낸다. TotalWrOFRF 디스크립터 필드는 얼마나 많은 OF 데이터 포인트들이 PE들(105a-i)에 기입되는지를 나타낸다.
표 1에서, StAddrIFRF 디스크립터 필드는 IF RF 스토리지(145a)의 시작 어드레스를 나타낸다. LenAddrIFRF 디스크립터 필드는 계산 사이클 동안 얼마나 많은 IF 데이터 포인트들이 액세스되는지를 나타낸다. 예를 들어, 8개의 필터 채널(FL)이 있고 각각의 채널이 상이한 Ix 차원에서 8개의 IF 데이터 포인트를 프로세싱하는 텐서 프로세싱 템플릿(315)을 고려하도록 한다. LenAddrIFRF 디스크립터 필드는 8개의 IF 데이터 포인트의 각각의 그룹이 상이한 필터 채널에 의해 프로세싱될 것임을 나타낸다. Reset2StartIF 디스크립터 필드는, LenAddrIFRF 디스크립터 필드의 값에 도달했을 때 PE(105a-i)가 IF RF 스토리지(145a)의 시작 어드레스로 재설정되는지, 또는 PE(105a-i)가 IF RF 스토리지(145a)를 통해 계속 증가해야 하는지를 나타낸다. IncCycIFRF 디스크립터 필드는 IF RF 스토리지(145a)의 시작 어드레스가 증가되는 계산 사이클들의 수를 나타낸다.
마찬가지로, StAddrFLRF 디스크립터 필드는 FL RF 스토리지(145b)의 시작 어드레스를 나타낸다. LenAddrFLRF 디스크립터 필드는 계산 사이클 동안 얼마나 많은 FL 데이터 포인트들이 액세스되는지를 나타낸다. Reset2StartFL 디스크립터 필드는, LenAddrFLRF 디스크립터 필드의 값에 도달했을 때 PE(105a-i)가 FL RF 스토리지(145b)의 시작 어드레스로 재설정되는지 또는 PE(105a-i)가 FL RF 스토리지(145b)를 통해 계속 증가해야 하는지를 나타낸다. IncCycFLRF 디스크립터 필드는 FL RF 스토리지(145b)의 시작 어드레스가 증가되는 계산 사이클의 수를 나타낸다.
마찬가지로, StAddrOFRF 디스크립터 필드는 OF RF 스토리지(145c)의 시작 어드레스를 나타낸다. LenAddrOFRF 디스크립터 필드는 계산 사이클 동안 얼마나 많은 OF 데이터 포인트들이 액세스되는지를 나타낸다. Reset2StartOF 디스크립터 필드는, LenAddrOFRF 디스크립터 필드의 값에 도달했을 때 PE(105a-i)가 OF RF 스토리지(145c)의 시작 어드레스로 재설정되는지, 또는 PE(105a-i)가 OF RF 스토리지(145c)를 통해 계속 증가해야 하는지를 나타낸다. IncCycOFRF 디스크립터 필드는 OF RF 스토리지(145c)의 시작 어드레스가 증가되는 계산 사이클들의 수를 나타낸다.
표 1에서, BlocksPERF 디스크립터 필드는 얼마나 많은 계산 작업의 블록들이 PE(105a-i)에 의해 수행되는지를 나타내며, 작업 블록은 1개의 출력 포인트(또는 주어진 출력 포인트와 연관된 1개의 부분 합)를 계산하는 것에 대응한다. NumPEComp 디스크립터 필드는 얼마나 많은 사이클들이 구성된 텐서 프로세싱 템플릿에 따른 프로세싱을 위해 PE(105a-i)로 가져온 데이터 볼륨을 프로세싱하는 데 필요한지를 나타낸다. 예를 들어, Ox 및 Oy 차원들의 1개의 포지션에서 OF 데이터를 생성하기 위해 FL 데이터의 64개의 엘리먼트를 사용하여 Ic 차원의 IF 데이터의 64개의 엘리먼트를 프로세싱하는 벡터-벡터 텐서 프로세싱 템플릿(305)은 64사이클을 활용할 것이며, 이는 Ic 차원의 IF 데이터의 64개의 엘리먼트를 FL 데이터의 64개의 엘리먼트와 곱하고, 결과들을 누산하는 데 사용되는 64개의 곱셈-및-누산 연산에 대응한다.
표 1에서, IcMapDirX 디스크립터 필드는 IC 차원의 파티셔닝이 PE들(105a-i)의 행들(110a-c)에 걸쳐 매핑되는지를 나타내는 부울 값(예를 들어, True 또는 False)이다. IcMapDirY 디스크립터 필드는 IC 차원의 파티셔닝이 PE들(105a-i)의 열들(115a-c)에 걸쳐 매핑되는지를 나타내는 부울 값(예를 들어, True 또는 False)이다. 이들 디스크립터 필드들은 부분 합들이 PE들(105a-i) 사이에서 공유되는 방법을 나타낸다.
표 1에서, NumIncStAddr 디스크립터 필드, IncStAddrPerBlockIFRF 디스크립터 필드 및 StepIFRF 디스크립터 필드는 Fx 및 Fy 차원들을 갖는 FL 데이터가 OF 데이터를 생성하기 위해 IF 데이터에 걸쳐 시프트되는 방법을 지정하는 데 사용된다.
표 1에서, ExtPsum 디스크립터 필드는 구성된 텐서 프로세싱 템플릿이 부분 합들을 포함하는지를 나타내는 부울 값(예를 들어, True 또는 False)이다. 값이 False인 경우, 각각의 PE는 주어진 OF 데이터 포인트를 출력하기 위해 자율적으로 동작할 수 있다. 값이 True인 경우, 부분 합들이 OF 데이터를 생성하는 데 사용될 것이다.
표 1에서, OFGenStartNthBlock 디스크립터 필드 및 PsumLoadStartNthBlock 디스크립터 필드는 구현되는 신경망 계층에 대한 OF 데이터 포인트를 생성하기 위해 구성된 텐서 프로세싱 템플릿이 수행되는 횟수, 및 이전에 계산된 부분 합들이 추가 누산을 위해 다시 로드되는 때를 지정한다. 예를 들어, 현재 네트워크 계층에 256개의 Ic 차원이 있고 구성된 텐서 프로세싱 템플릿이 64개의 Ic 차원을 프로세싱하는 경우, 구성된 텐서 프로세싱 템플릿은 현재 신경망 계층에 대한 OF 데이터 포인트를 결정하기 위해 모든 256개의 Ic 차원을 프로세싱하기 위해 4회 수행된다.
표 1에서, LinesPsumPerLoad 디스크립터 필드는 구성된 텐서 프로세싱 템플릿에 기초하여 부분 합들을 누산하기 위해 로드될 Psum들의 사이즈(예를 들어, SRAM의 라인 단위)를 지정한다. LinesTotalPsum 디스크립터 필드는 OF 데이터 포인트를 계산하기 위해 로드될 Psum들의 수를 지정한다.
표 1에서, Relu 디스크립터 필드는 구현되는 현재 신경망 계층에 대해 ReLU 연산이 활성화되는지를 나타내는 부울 값(예를 들어, True 또는 False)이다. ReluThreshold 디스크립터 필드는 ReLU 연산에 의해 사용될 임계값을 지정한다.
표 1에서, EltWise 디스크립터 필드는 구현되는 현재 신경망 계층에 대해 엘리먼트-별 연산이 활성화되는지를 나타내는 부울 값(예를 들어, True 또는 False)이다. Drain2FLSRAM 디스크립터 필드는 엘리먼트-별 연산에 사용된다.
표 1에서, Maxpool 디스크립터 필드는 구현되는 현재 신경망 계층에 대해 맥스풀 연산이 활성화되는지를 나타내는 부울 값(예를 들어, True 또는 False)이다.
도 1의 PE들(105a-i) 중 하나의 PE의 예시적인 구현의 블록도가 도 6에 예시되어 있다. 편의상, 도 6의 블록도는 PE(105a)의 예시적인 구현을 예시한다. 그러나, 도 6의 예시적인 구현은 PE들(105a-i) 중 임의의 것을 구현하는 데 사용될 수 있다. 도 6의 예시적인 PE(105a)는 PE(105a)에 의해 프로세싱되는 콘볼루션 신경망의 각각의 계층의 시작부에서 업데이트되는 표 1에 나타낸 디스크립터들의 값들을 수용하기 위한 구성 레지스터들(170)의 세트를 포함한다. 예시된 예에서, 구성 레지스터들(170)에 적용되는 디스크립터 필드들의 세트는 구현되는 콘볼루션 신경망의 현재 계층(L)에 대한 IF 및 FL 텐서 데이터를 프로세싱하기 위해, 텐서 프로세싱 템플릿에 기초하여, 데이터 흐름 스케줄을 구현하도록 구성 로더(122)를 통해 프로그래밍된다. 예를 들어, 프로그래밍되는 디스크립터 필드들의 세트는 FSM(175)에 의해, 입력 텐서 데이터에 대해 수행되는 로드, 계산 및 드레인 동작들 동안 데이터 리디렉션을 수행하는 데 사용된다. 이와 같이, PE들(105a-i)의 각각의 PE들의 구성 레지스터들(170)은 복수의 텐서 프로세싱 템플릿들 중 하나에 대응하는 데이트 흐름 스케줄에 기초하여 콘볼루션 신경망의 계층을 구현하기 위해 복수의 디스크립터들에 기초하여 PE들(105a-i)의 어레이를 구성하기 위한 수단의 예이다.
도 6의 예시적인 PE(105a)는 또한 FSM(175)을 포함한다. 예시된 예에서, FS(175)는 (i) IF, FL 및 OF 레지스터 파일들(145a-c)을 구동하기 위한 판독 및 기입 제어 신호들, (ii) 구현되는 콘볼루션 신경망의 현재 계층에 대한 텐서 데이터에 대해 PE(105a)에 의해 수행될 연산의 타입(예를 들어, MAC 유닛(150)에 대한 곱셈 및 누산, 맥스-풀링 유닛(160)에 대한 비교 등)에 기초하여, 레지스터 파일들(145a-c)로부터의 데이터를 MAC 비교 유닛(150), 엘리먼트-별 계산 유닛(155) 또는 맥스-풀링 계산 유닛(160) 중 적절한 것으로 라우팅하기 위한 멀티플렉서 제어 신호들을 생성하기 위한 내부 카운터들 및 로직을 포함한다. 예시된 예에서, 판독 및 기입 제어 신호들을 IF, FL 및 OF 레지스터 파일들(145a-c)에 생성하기 위해, FSM(170)은 관련 제어 신호들을 생성하기 위해 "StAddr<IF/FL/OF>RF", "LenAddr<IF/FL/OF>RF", "Reset2Start<IF/FL/OF>", "IncCyc<IF/FL/OF>RF" 디스크립터 필드들을 사용한다. 내부적으로, 카운터들 ifcount, wcountofcount는 IF, FL, OF 레지스터 파일들(145a-c)에 대한 어드레스들/인덱스들을 계속 추적하는데, 이들은 계산 블록 동안 각각의 OF 포인트(또는 pSum)를 계산하는 데 필요한 ("<LenAddrIF/FL>RF" 디스크립터 필드에 의해 설정된) 입력 활성화들 및 가중치들의 수에 따라 증가 또는 재설정된다. ("BlocksPERF" 디스크립터 필드에 의해 설정된) 블록들의 수는 OF 레지스터 파일(145c)에 기입될 총 포인트들(또는 pSum들)의 수를 결정한다. (IF, FL 또는 OF가 고정되었든 간에) 주어진 신경망 계층에 대한 데이터 흐름은 "Reset2Start <IF/FL/OF>" 디스크립터 필드에 의해 생성된 신호와 함께 위에서 언급된 카운터들에 의해 내부적으로 제어된다. "StAddr<IF/FL/OF>RF" 디스크립터 필드는 각각의 새로운 계산 블록에 대한 각각의 레지스터 파일들(145a-c)의 시작 어드레스를 계속 추적한다. FSM(170)에 포함된 이러한 내부 구조들 및 연관된 제어 로직은 PE(105a)에서 유연한 데이터 흐름 스케줄들을 지원한다.
도 6의 예시적인 예에서, PE(105a)는 효율적인 하드웨어 자원 재사용을 달성하기 위해 MAC 계산 유닛(150), 엘리먼트-별 계산 유닛(155) 및 맥스-풀링 계산 유닛(160) 사이에서 공유되는 예시적인 공유형 계산 로직(605)을 포함한다. 예시적인 공유형 계산 로직(605)은 MAC 계산 유닛(150), 엘리먼트-별 계산 유닛(155) 또는 맥스-풀링 계산 유닛(160)의 프로세싱을 구현하도록 엘리먼트들(610-615) 중 하나 이상에 적절한 텐서 데이터를 라우팅하기 위해 연관된 예시적인 멀티플렉서 제어 로직(625, 630, 635, 640, 645, 650, 655 및 660)(집합적으로 멀티플렉서 제어 로직(625-660)으로 지칭됨)과 함께, 예시적인 승산기(610), 예시적인 가산기(615) 및 예시적인 비교기(620)를 포함한다. 예시된 예에서, 공유형 계산 로직(605)의 멀티플렉서 제어 로직(625-660)의 디폴트 구성은 맥스-풀링 계산 유닛(160)을 구현하는 것이다. 디스크립터 필드들 "Eltwise" 및 "Maxpool"은 각각 엘리먼트-별 계산 유닛(155) 및 맥스-풀링 계산 유닛(160)을 구현하기 위해 공유형 계산 로직(605)을 재구성하는 데 사용된다.
도 6의 예시적인 PE(105a)는 RF 로컬 스토리지(145a-c)를 포함한다. 예시된 예는 IF, FL 및 OF 텐서 데이터를 각각 저장하기 위한 3개의 RF(145a-c)를 포함한다. 예시된 예에서, 각각의 RF들(145a-c)은 하나의 레지스터로부터의 판독 및 하나의 레지스터에 대한 기입을 동시에 지원하는 1-판독-1-기입 레지스터들의 그룹에 의해 구현된다. 예시된 예에서, IF 및 FL RF들(145a-b)에 저장되는 텐서 데이터는 폭이 8비트이고(그러나, 다른 예시적인 구현들은 다른 폭들을 지원할 수 있음), OF RF(145c)에 저장되는 텐서 데이터는 폭이 32 비트여서(그러나, 다른 예시적인 구현들은 다른 폭들을 지원할 수 있음), 데이터 흐름 스케줄들에 대한 부분 합 누산 피처를 수용할 수 있으며, 여기서 모든 입력 채널들이 하나의 프로세싱 반복/블록에서 누산될 수는 없고, 이에 따라 부분 합들이 PE(105a)로부터 가져와지고 최종 OF 텐서 데이터 계산을 완료하기 위해 나중 시점에 다시 가져와진다.
IF RF(145a)의 출력에서, 예시적인 멀티플렉서 로직(625)은 IF 텐서 데이터를 MAC 계산 유닛(150), 엘리먼트-별 계산 유닛(155) 또는 맥스-풀링 계산 유닛(160) 중 하나로 리디렉션하기 위한 1:3 멀티플렉서를 포함한다. FL RF(145b)의 출력에서, 예시적인 멀티플렉서 로직(630)은 FL 텐서 데이터를 MAC 계산 유닛(150) 또는 엘리먼트-별 계산 유닛(155) 중 하나로 리디렉션하기 위한 1:2 멀티플렉서를 포함하는데, 왜냐하면 맥스-풀링 계산 유닛(160)이 FL RF(145b)에 보관된 데이터에 대해서는 동작하기 않기 때문이다. OF RF(145c)에 대한 입력에서, 예시적인 멀티플렉서 로직(635)은 MAC 계산 유닛(150), 엘리먼트-별 계산 유닛(155) 또는 맥스-풀링 계산 유닛(160) 중 하나의 것의 출력을 저장하기 위해 OF RF(145c)에 대한 기입 경로에 1:2 멀티플렉서를 포함한다. 풀러 레지스터(165) 형태의 추가 스토리지가 맥스-풀링 계산 유닛(160)의 중간 결과들을 저장하는 데 사용된다.
도 6의 예시적인 PE(105a)는 내부 및 외부 부분 합 누산을 모두 지원하도록 구성된다. PE(105a)는 수평(pSumX) 또는 수직 방향(pSumY)에서 그것의 이웃 PE로부터의 부분 합을 수용할 수 있다. 일부 예들에서, PE(105a)는 다른 방향들에서 다른 PE들로부터의 부분 합들을 수용할 수 없다. 구성 레지스터들(170)에 적용되는 프로그래밍 가능형 디스크립터 필드들은 예시적인 "accum_dir" 신호(665)를 통해 내부 누산의 방향을 지정하는 데 사용될 수 있다. 예시적인 "accum_Nbr" 제어 신호(670)는 부분 합들의 누산이 PE(105a) 내에 있는지 또는 PE(105a) 및 허용된 이웃 PE를 포함하는 PE들에 걸쳐 있는지를 식별하는 데 사용될 수 있다. 외부 부분 합 누산의 경우, 하나의 값 세트는 "ext_pSum" 레지스터(675)에 유지되고, 제2 값 세트는 OF RF(145c)에 상주한다. 예시적인 멀티플렉서 제어 신호 "en_ext_pSum"(680)은 내부 부분 합 누산과 외부 부분 합 누산 사이에서 선택하는 데 사용된다.
도 7 내지 도 12는 도 1의 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)에 의해 지원되는 예시적인 연산 단계들뿐만 아니라, 구성 가능형 프로세서 엘리먼트 어레이(100)에 대해 지원되는 연산 단계들 사이의 예시적인 허용 가능한 천이들을 예시한다. 도 7의 예시적인 상태 천이 다이어그램(700)에 도시된 바와 같이, 구성 가능형 프로세서 엘리먼트 어레이(100)에 의해 지원되는 예시적인 연산 단계들은 예시적인 구성 단계(705), 예시적인 로드 단계(710), 예시적인 계산 단계(715), 예시적인 누산 단계(720), 예시적인 외부 부분 합 누산 단계(725) 및 예시적인 리트리브 단계(730)(예시적인 드레인 단계(730)로도 지칭됨)를 포함한다. 그 예가 도 8에서 더 상세하게 예시되는 구성 단계(705)에서는, 구현되는 현재 신경망 계층(뿐만 아니라 일부 예들에서는 후속 신경망 계층)에 대한 구성 가능형 프로세서 엘리먼트 어레이(100)의 구성 레지스터들(120)에 적용된(또는 일부 예들에서는 메모리(125)에 저장된) 디스크립터 값들이 PE들(105a-i)의 구성 레지스터들(170)로 이동되고, 해당 디스크립터들에 기초하여 PE들(105a-i)의 FSM들(175)이 구성된다. 예를 들어, 디스크립터 값들은 PE들(105a-i)의 PE들의 구성 레지스터들(170)에 로드되어, 계산을 가능한 텐서 프로세싱 템플릿 타입들(예를 들어, 벡터-벡터, 벡터-매트릭스, 매트릭스-매트릭스, 스칼라 벡터 등) 중 하나로 조정한다.
그 예가 도 9에서 더 상세하게 예시되는 로드 단계(710)에서는, 텐서 데이터가 메모리(125)로부터 PE들(105a-i)의 RF들(145a-c)로 로드된다. 예를 들어, IF, FL 또는 OF 텐서 데이터는 메모리(125)로부터 열 버퍼들(135a-c)을 통해 PE들(105a-i)의 PE들 내의 로컬 RF 스토리지(145a-c)로 전송된다. 그 예가 도 10에서 더 상세하게 예시되는 계산 단계(710)에서는, 산술 연산들(예를 들어, MAC, 엘리먼트-별 또는 맥스-풀 중 하나)이 PE들(105a-i)의 PE들의 RF들(145a-c)에 상주하는 텐서 데이터에 대해 수행된다. 예를 들어, PE들(105a-i)의 PE들은 구현되는 현재 콘볼루션 신경망 계층에 대한 부분 합(Psum)들 또는 최종 OF 텐서 데이터를 생성하기 위해 MAC 연산들을 계산할 수 있다. 그 예가 도 12에서 더 상세하게 예시되는 내부 누산 단계(720) 및 외부 부분 합 누산 단계(725)는 각각 콘볼루션 신경망의 현재 네트워크 계층(L)을 구현하도록 구성되는 주어진 데이터 흐름 스케줄에 대해 존재할 수도 있고 또는 존재하지 않을 수도 있는 임의적 단계들이다. 예시된 예에서, 내부 누산 단계(720)는 동일한 OF 텐서 데이터의 개별 입력 채널들에서 작업하고 있는 이웃 PE들의 부분 합들이 누산되는 내부 누산 단계에 대응한다. 누산 방향은 수평 또는 수직 중 어느 것으로 제약된다. 외부 부분 합 누산 단계(725)에서는, 시간적으로 앞서 계산되었지만 로컬 PE RF(145c)에서 제거되어야 했던 부분 합들이 최종 OF 텐서 출력을 생성하기 위한 누산을 위해 PE로 다시 가져와진다. 그 예가 도 11에서 더 상세하게 예시되는 리트리브 단계(730)에서는, 부분 합들 또는 최종 OF 텐서 데이터가 PE들(105a-i)의 PE들의 로컬 PE RF(145c)로부터 해당 PE들(105a-i)에 대응하는 각각의 열 버퍼들(135a-c)로 전송되어 메모리(125)로 이동된다.
구성 단계(705), 로드 단계(710), 계산 단계(715), 내부 누산 단계(720), 외부 부분 합 누산 단계(725) 및 리트리브 단계(730) 사이의 허용 가능한 천이들은 도 7의 상태 천이 다이어그램(700)의 방향 선들로 표현된다. 예시된 예시적인 상태 천이 다이어그램(700)에서, 구성 단계(705), 로드 단계(710), 계산 단계(715) 및 리트리브 단계(730)는 강제적인 반면, 내부 누산 단계(720) 및 외부 부분 합 누산 단계(725)는 구현되는 특정 데이터 흐름 스케줄에 의존한다. 예시적인 상태 천이 다이어그램(700)은 구성 단계(705)에서 시작하며, 여기서는 구성 가능형 프로세서 엘리먼트 어레이(100)의 구성 레지스터들(120), 및 그 후 PE들(105a-i)의 각각의 PE들의 구성 레지스터들(170)이 디스크립터 필드들로 채워진다. 그 후, 프로세싱은 로드 단계(710)로 천이되며, 여기서는 IF 및 FL 텐서 데이터가 메모리(125)로부터 구현되는 현재 콘볼루션 신경망 계층에 대해 활성화되는 PE들(105a-i)의 각각의 PE들의 PE RF들(145a-b)로 이동된다.
예시된 예에서는, 하나의 천이가 로드 단계(710)로부터 허용되며, 이는 계산 단계(715)로의 천이이다. 계산 단계(715)로부터, 프로세싱은 로드 단계(710), 계산 단계(715), 누산 단계(720), 외부 부분 합 누산 단계(725) 및 리트리브 단계(730) 중 임의의 것으로 천이될 수 있다. 예를 들어, 프로세싱은 계산 단계(715)에 머물러서 계산을 계속할 수도 있고, 또는 프로세싱은 새로운 IF/FL 텐서 데이터를 PE들(105a-i)에 로드하기 위해 로드 단계(710)로 되돌아갈 수도 있다. 이것은 통상적으로 구현되는 현재 신경망 계층에 대한 데이터 흐름 스케줄에 Ic 파티셔닝이 없는 경우이다. 구현되는 현재 신경망 계층에 대한 데이터 흐름 스케줄에 Ic 파티셔닝이 있는 경우, 모든 Ic 프로세싱이 현재 신경망 계층에 대한 데이터 흐름 스케줄에서 이웃 PE들(105a-i) 사이에서 파티셔닝되는지, 또는 동일한 PE들(105a-i)에 의해 수행되는 상이한 프로세싱 반복들에 걸쳐 파티셔닝되는지에 따라, 프로세싱은 계산 단계(715)로부터 내부 누산 단계(720) 또는 외부 부분 합 누산 단계(725)로 천이된다.
최종 OF 결과가 계산 단계(715) 동안 이용 가능한 경우, 프로세싱은 리트리브 단계(730)로 천이된다. 내부 누산 단계(720)에서, 최종 OF 결과가 이용 가능하면, 프로세싱은 리트리브 단계(730)로 천이될 수 있고, 또는 이것이 외부 누산 단계(725)가 시작되기 전의 내부 누산의 마지막 라운드인 경우, 프로세싱은 외부 누산 단계(725)로 천이된다. 외부 누산 단계(725)로부터, 프로세싱은 로드 단계(705)로 천이하여 메모리(125)로부터 추가 부분 합 데이터를 페치할 수 있고, 또는 최종 OF 결과가 이용 가능하면, 프로세싱은 리트리브 단계(730)로 천이하여 OF 데이터를 메모리(125)로 전송할 수 있다.
도 1의 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)에서 외부 부분 합 누산을 지원하기 위한 예시적인 하드웨어 아키텍처가 도 13a 및 도 13b에 예시되어 있다. 일부 데이터 흐름 스케줄들에서는, IF 텐서 데이터의 필터링된 입력 채널들(Ic)의 누산이 1회의 프로세싱 반복에서 완료되지 않는다. 오히려, 입력 채널의 일부가 주어진 PE(105a-i)의 IF RF(145a)로 가져와지고, 계산된 부분 합이 메모리(125)로 추출된다. 그런 다음, 해당 부분 합은 나머지 입력 채널들이 누산된 나중 시점에 주어진 PE(105a-i)의 OF RF(145c)로 다시 가져와진다. 최종 콘볼루션 결과의 정확성을 보존하기 위해, 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)는 부분 합 데이터에 대해 절단 또는 ReLU를 수행하지 않는다. 예를 들어, 주어진 PE(105a-i)의 MAC 유닛(150)의 출력인 부분 합 데이터는 32비트 정밀도(또는 다른 예들에서는 일부 다른 정밀도)이다. 정상 동작 모드(예를 들어, 부분 합들을 포함하지 않음) 동안, 각각의 텐서 데이터 포인트에 대한 로드 및 드레인 데이터 경로는 8비트 정밀도(또는 다른 예들에서는 일부 다른 정밀도)이다. 외부 부분 합 누산을 지원하기 위해, 구성 가능형 프로세서 엘리먼트 어레이(100)는 예시된 예에서 32비트인 부분 합 데이터의 원래 정밀도에서 열 버퍼들(135a-c)과 메모리(125) 사이에 부분 합 데이터의 직접 판독 및 기입 액세스를 지원하는 예시적인 우회 데이터 경로들(1305a-c)을 포함한다. 또한, 예시된 예에서, 열 버퍼(135a)에 대한 우회 데이터 경로(1305a)와 같은 주어진 열 버퍼에 대한 우회 데이터 경로는 열 버퍼(1305a)와 메모리(125) 사이에 포함된 OF 드레인 멀티플렉싱 로직(1310)을 우회함으로써 32비트 폭의 데이터 경로를 열 버퍼(1305a)와 메모리(125) 사이에서 1바이트 청크들로 분할한다.
도 1의 예로 되돌아가면, 입력 IF 및 FL 텐서 데이터가 8비트 정밀도(또는 다른 예들에서는 일부 다른 정밀도)이지만, PE 내의 MAC의 출력은 누산 및 정확도 손실 방지를 고려하여 32비트 정밀도(또는 다른 예들에서는 일부 다른 더 큰 정밀도)이다. 그러나, 주어진 신경망 계층(L)에 의해 생성된 OF 텐서 데이터가 후속 신경망 계층(L+1)에 대한 IF 텐서 데이터로서 역할을 하기 때문에, 구성 가능형 프로세서 엘리먼트 어레이(100)는 메모리(125)에 기입하기 전에 누산된 OF 텐서 데이터 값들의 비트 정밀도를 8비트로 조정하는 절단 연산을 수행하기 위해 대응하는 열 버퍼들(135a-c)과 연관된 예시적인 출력 데이터 프로세서들(138a-c)을 포함한다. 또한, ReLU 연산이 주어진 신경 계층에 의해 수행되는 경우, 출력 데이터 프로세서들(138a-c)은 ReLU 연산을 수행하여, 최종 OF 텐서 데이터를 생성하기 위한 비트 정밀도 조정을 생성한다. 이와 같이, 출력 데이터 프로세서들(138a-c)은 대응하는 열 버퍼들(135a-c)로부터 출력된 32비트 OF 텐서 데이터를 SRAM 버퍼들에 기입하기 전에 데이터에 포화 절단 또는 ReLU 중 어느 것을 적용한다. 출력 데이터 프로세서들(138a-c)에 의해 채택되는 ReLU 임계값은 또한 표 1의 "ReluThreshold" 디스크립터를 통해 조정 가능하다.
도 1의 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)에서 엘리먼트-별 연산들을 지원하기 위한 예시적인 하드웨어 아키텍처가 도 14에 예시되어 있다. ResNet과 같은 일부 잔여 신경망(residual neural network)들은 신경망의 2개의 콘볼루션 계층으로부터 OF 텐서 데이터 엘리먼트들을 추가하는 것과 같은 엘리먼트-별 연산들을 채택한다. 하드웨어 자원 재사용을 활용하면서 엘리먼트-별 연산들을 지원하기 위해, 구성 가능형 프로세서 엘리먼트 어레이(100)는 기존의 로드 경로 및 드레인 경로를 재사용함으로써 2개의 상이한 계층의 OF 텐서 데이터 엘리먼트들을 PE들(105a-i) 중 주어진 하나로 라우팅한다. 예를 들어, 구성 가능형 프로세서 엘리먼트 어레이(100)는 계층들 중 제1 계층으로부터의 OF 텐서 데이터를 주어진 PE(105a-i)의 IF RF(145a)로 라우팅하고, 계층들 중 제2 계층으로부터의 OF 텐서 데이터를 주어진 PE(105a-i)의 FL RF(145b)로 라우팅한다. 따라서, IF 및 FL RF들(145a-b)은 2개의 개별 계층으로부터의 OF 텐서 데이터를 포함할 것이다. 표 1의 "Eltwise" 프로그래밍 가능 디스크립터 필드는 "True"로 설정되어 엘리먼트-별 연산이 활성화됨을 나타내고, eltwise 인에이블 신호가 주어진 PE(105a-i) 내에서 MAC 연산을 우회하여, 대신 IF RF(145a)에 저장된 제1 OF 텐서 데이터 및 FL RF(145b)에 저장된 제2 OF 텐서 데이터의 엘리먼트-별 연산(예를 들어, 가산 또는 최대)을 수행하는 데 사용된다.
도 1의 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)에서 맥스풀 연산들을 지원하기 위한 예시적인 하드웨어 아키텍처가 도 15에 예시되어 있다. 맥스풀 연산은 생성된 피처 맵들의 사이즈를 줄이기 위해 많은 딥 신경망(deep neural network)(DNN)들에서 널리 사용된다. 맥스풀 연산을 지원하기 위해, 구성 가능형 프로세서 엘리먼트 어레이(100)는 또한 맥스풀될 네트워크 계층의 OF 데이터가 주어진 PE(105a-i)의 IF RF(145a)에 저장되게 하도록 로드 및 드레인 경로들을 재사용한다. 주어진 PE(105a-i)의 풀러 레지스터(165)는 맥스풀될 계층의 후속 OF 포인트들이 비교될 현재 최대값을 계속 추적하는 데 사용된다.
도 16 내지 도 25는 구성 가능형 프로세서 엘리먼트 어레이(100)가 ResNet과 같은 잔여 신경망의 계층들을 구현하기 위해 네 개(4개)의 상이한 데이터 흐름 스케줄에 따라 동작하도록 구성되는 예시적인 사용 사례들을 예시한다. 도 16 내지 도 19는 이들 예들에서 구성 가능형 프로세서 엘리먼트 어레이(100)에 의해 구현되는 상이한 데이터 흐름 스케줄들을 나타내는 각각의 예시적인 의사 코드(pseudocode)를 예시한다. 이하에서 더 상세하게 설명하는 바와 같이, 이러한 예들에 예시된 네 개(4개)의 상이한 데이터 흐름 스케줄은 대응하는 네 개(4개)의 상이한 텐서 프로세싱 템플릿에 기초한다. 다음 예들에서, 구성 가능형 프로세서 엘리먼트 어레이(100)에 포함된 PE들(105a-i)의 어레이는 NxN = 16x16으로서 총 256개의 PE(105a-i)인 것으로 가정된다. 그러나, 이들 및 다른 예시적인 사용 사례들은 상이한 차원들을 갖는 PE들(105a-i)의 어레이들로 구현될 수 있다.
도 16은 잔여 신경망의 예시적인 계층에 대한 OF 텐서 데이터를 생성하기 위해 IF 텐서 데이터 및 FL 텐서 데이터를 프로세싱하는 제1 예시적인 데이터 흐름 스케줄(1600)에 대한 예시적인 의사 코드를 예시한다. 도 16의 예시된 예에서, 프로세싱될 IF 텐서 데이터의 볼륨은 Ix 차원의 56개의 엘리먼트, Iy 차원의 56개의 엘리먼트, 및 Ic 차원의 64개의 엘리먼트를 갖고, 생성될 OF 텐서 데이터의 볼륨은 Ox 차원의 56개의 엘리먼트, Oy의 56개의 엘리먼트, 및 IF 텐서 데이터에 적용될 256개의 상이한 필터(FL 데이터)에 대응하는 Oc 차원의 256개의 엘리먼트를 갖는다. 예시적인 데이터 흐름 스케줄은 1-엘리먼트 Ox 데이터의 8개의 파티션 및 32-엘리먼트 Ic 데이터의 2개의 파티션을 PE들(105a-i)의 어레이의 16개의 행(110a-c)에 매핑하고, 2-엘리먼트 Oy 데이터의 14개의 파티션을 PE들(105a-i)의 어레이의 14개의 열(115a-c)에 각각 매핑하는 예시적인 내부 프로세싱 루프(1605)를 포함한다. 따라서, PE들(105a-i)의 어레이의 16x14 부분에 있는 각각의 PE(105a-i)는 한 개(1개)의 Ox 포인트, 2개의 Oy 포인트 및 32개의 입력 채널(Ic) 포인트를 취하고, 한 개(1개)의 출력 채널(Oc)에 속하는 두 개(2개)의 OF 포인트에 대한 부분 합들을 생성한다. 따라서, 각각의 PE(105a-i)는 32개의 상이한 Ic에 대한 64개의 IF 포인트 및 32개의 상이한 Ic에 대한 32개의 FL 포인트를 프로세싱하면서, 단일 Oc에 속하는 두 개(2개)의 상이한 OF 포인트를 생성한다. Ic 파티셔닝 팩터가 PE 열들(115a-c)을 따라 두 개(2개)이기 때문에, 이는 인접한 행들(110a-c)에 있는 두 개(2개)의 PE가 OF 출력 데이터 볼륨의 해당 포지션에서 최종 OF 포인트를 생성하는 것에 대한 작업을 하고 있음을 의미한다는 것에 유의하도록 한다. 따라서, 이웃 행들(110a-c)에 있는 두 개(2개)의 PE(105a-i)에 걸친 부분 합들의 내부 누산이 OF 출력 데이터의 해당 포지션에서 최종 OF 포인트를 생성하는 데 사용된다. 그 결과, PE들(105a-i)의 어레이의 주어진 열(115a-c) 내에서 여덟 개(8개)의 PE가 최종 OF 포인트를 생성하고, 총 112개의 PE(106a-i)(열당 8개 x 14열)가 내부 프로세싱 루프(605)로부터 기인하는 최종 OF 포인트들을 생성하고 있다. 따라서, 내부 루프(1605)는 Ox 차원의 여덟 개(8개)의 엘리먼트, Oy 차원의 28개의 엘리먼트 및 Oc 차원의 한 개(1개)의 엘리먼트를 갖는 OF 데이터 볼륨을 생성한다. 예시적인 데이터 흐름 스케줄은 Oc 차원에서 256회 반복, Ox 차원에서 일곱 번(7회) 반복, Oy 차원들에서 두 번(2회) 반복을 수행하여, 56x56x256개의 OF 포인트의 최종 OF 데이터 볼륨을 산출하는 예시적인 외부 프로세싱 루프(1610)를 포함한다. IF 데이터가 외부 루프(1610)에 의해 재사용되기 때문에, 데이터 흐름(1600)은 입력 활성화 정지 상태이다. 데이터 흐름이 동일한 Oc 차원에 걸쳐 Ic 데이터 엘리먼트들을 누산하기 때문에, 데이터 흐름(1600)은 벡터-벡터 텐서 프로세싱 템플릿에 대응한다.
도 16의 예시적인 데이터 흐름 스케줄(1600)의 예시적인 데이터 파티셔닝 및 차단 양태들은 도 20에 시각적으로 도시되어 있다. 도 16의 예시적인 데이터 흐름 스케줄(1600)을 구현하기 위해 PE들(105a-i)의 어레이에 의해 수행되는 예시적인 콘볼루션 연산들은 도 21에 예시되어 있다. 도 22는 도 16의 예시적인 데이터 흐름 스케줄(1600)을 구현하기 위해 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)를 구성하는 데 사용될 수 있는 표 1의 구성 디스크립터들의 예시적인 값들을 예시한다.
도 17은 잔여 신경망의 예시적인 계층에 대한 OF 텐서 데이터를 생성하기 위해 IF 텐서 데이터 및 FL 텐서 데이터를 프로세싱하는 제2 예시적인 데이터 흐름 스케줄(1700)에 대한 예시적인 의사 코드를 예시한다. 도 17의 예시된 예에서, 프로세싱될 IF 텐서 데이터의 볼륨은 Ix 차원의 28개의 엘리먼트, Iy 차원의 28개의 엘리먼트, 및 Ic 차원의 128개의 엘리먼트를 갖고, 생성될 OF 텐서 데이터의 볼륨은 Ox 차원의 28개의 엘리먼트, Oy 차원의 28개의 엘리먼트, 및 IF 텐서 데이터에 적용될 512개의 상이한 필터(FL 데이터)에 대응하는 Oc 차원의 512개의 엘리먼트를 갖는다. 예시적인 데이터 흐름 스케줄(1700)은 8-엘리먼트 Oc 데이터의 16개의 파티션 및 8-엘리먼트 Ic 데이터의 16개의 파티션을 PE들(105a-i)의 어레이의 16개의 행(110a-c) 및 16개의 열(115a-c)에 각각 매핑하는 예시적인 내부 프로세싱 루프(1705)를 포함한다. 각각의 PE(105a-i)는 여덟 개(8개)의 입력 채널(Ic) 포인트 및 여덟 개(8개)의 출력 채널(Oc) 포인트를 사용하여 여덟 개(8개)의 OF 데이터 포인트를 생성한다. 따라서, 각각의 PE(105a-i)는 여덟 개(8개)의 상이한 Ic에 대한 여덟 개(8개)의 IF 데이터 포인트, 및 여덟 개(8개)의 상이한 Ic 데이터 포인트에 적용되는 64개의 FL 포인트에 대해 동작하여 여덟 개(8개)의 상이한 Oc 데이터 포인트를 생성한다. 따라서, 내부 루프(1705)는 Ox 차원의 한 개(1개)의 엘리먼트, Oy 차원의 한 개(1개)의 엘리먼트 및 Oc 차원의 8x16=128개의 엘리먼트를 갖는 OF 데이터 볼륨을 생성한다. 예시적인 데이터 흐름 스케줄은 Ox 차원에서 28회 반복, Oy 차원에서 28회 반복 및 Oc 차원에서 네 번(4회) 반복을 수행하는 예시적인 외부 프로세싱 루프(1710)를 포함한다. Ic 데이터의 16개의 파티션이 16개의 열(115a-c)에 매핑되기 때문에, 최종 OF 데이터는 PE 행 방향(예를 들어, PE(i,15), i=0 내지 15)에 따른 누산에 의해 결정되고, 최종 PE 열(115c)로부터 OF 데이터 추출이 이루어진다. FL 데이터가 Oy 및 Ox 차원들에 대한 외부 루프 반복들에 의해 재사용되기 때문에, 예시적인 데이터 흐름 스케줄(1700)은 가중치가 고정되어 있다. 또한, 데이터 흐름(1700)이 상이한 OC 차원들에 걸쳐 IC 데이터를 누산하기 때문에, 데이터 흐름(1700)은 벡터-매트릭스 텐서 프로세싱 템플릿에 대응한다. 도 23은 도 17의 예시적인 데이터 흐름 스케줄(1700)을 구현하기 위해 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)를 구성하는 데 사용될 수 있는 표 1의 구성 디스크립터들의 예시적인 값들을 예시한다.
도 18은 잔여 신경망의 예시적인 계층에 대한 OF 텐서 데이터를 생성하기 위해 IF 텐서 데이터 및 FL 텐서 데이터를 프로세싱하는 제3 예시적인 데이터 흐름 스케줄(1800)에 대한 예시적인 의사 코드를 예시한다. 예시적인 데이터 흐름(1800)은 PE들(105a-i)의 어레이의 열들(115a-c)을 따라 8-엘리먼트 Ic 데이터의 두 개(2개)의 파티션 및 1-엘리먼트 Ox 데이터의 여덟 개(8개)의 파티션을 매핑하고, PE들(105a-i)의 어레이의 16개의 행(110a-c)을 따라 8-엘리먼트 Oc 데이터의 16개의 파티션을 매핑하는 예시적인 내부 프로세싱 루프(1805)를 포함한다. 따라서, 각각의 PE는 7x8 볼륨의 IF 데이터와 8x8 볼륨의 FL 포인트를 프로세싱함으로써 1x7x8 볼륨의 OF 데이터에 대해 작업하여 56개의 부분 합 OF 데이터 포인트를 생성한다. 예시적인 데이터 흐름(1800)은 또한, Ic 차원의 32회 반복의 각각의 간격 후에, 수평 방향에 따른 두 개(2개)의 인접한 PE(105a-i)의 부분 합들이 내부적으로 누산되어 최종 OF 데이터포인트를 생성하는 예시적인 외부 프로세싱 루프(1810)를 포함한다. 각각의 반복에서 새로운 IF 및 FL 데이터 포인트가 PE들(105a-i)에 가져와지고(외부 루프의 Ic), 부분 합들이 PE들(105a-i) 내에 고정되어 있기 때문에, 데이터 흐름 스케줄(1800)은 출력 활성화 고정 상태이다. 또한, 데이터 흐름(1800)이 상이한 Ox 차원들 및 상이한 OC 차원들의 IC 데이터 포인트들에 대해 누산을 수행하기 때문에, 데이터 흐름(1800)은 매트릭스-매트릭스 텐서 프로세싱 템플릿에 대응한다. 도 24는 도 18의 예시적인 데이터 흐름 스케줄(1800)을 구현하기 위해 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)를 구성하는 데 사용될 수 있는 표 1의 구성 디스크립터들의 예시적인 값들을 예시한다.
도 19는 잔여 신경망의 예시적인 계층에 대한 OF 텐서 데이터를 생성하기 위해 IF 텐서 데이터 및 FL 텐서 데이터를 프로세싱하는 제4 예시적인 데이터 흐름 스케줄(1900)에 대한 예시적인 의사 코드를 예시한다. 데이터 흐름 스케줄(1900)은 3x3 필터를 채택하는 신경망 계층에 맞게 조정된다(반면, 다른 예시적인 데이터 흐름들(1600-1800)은 1x1 필터를 채택하는 신경망 계층들에 대응한다). 예시적인 데이터 흐름(1900)은 PE들(105a-i)의 어레이의 열들(115a-c)을 따라 4-엘리먼트 Oy 데이터의 14개의 파티션을 매핑하고, PE들(105a-i)의 어레이의 행들(110a-c)을 따라 1-엘리먼트 Ox 데이터의 여덟 개(8개)의 파티션 및 16-엘리먼트 Oc 데이터의 두 개(2개)의 파티션을 매핑하는 예시적인 내부 프로세싱 루프(1905)를 포함한다. 따라서, 각각의 PE(105a-i)는 1x4x16 볼륨의 OF 데이터에 대해 동작하고, 18개의 IF 데이터 포인트(가중치 차원이 3x3이기 때문에, 1x4 볼륨의 OF 데이터를 생성하는 것은 18개의 IF 포인트에 대응하는 3x6 볼륨의 IF 데이터를 수반함) 및 16개의 FL 데이터 포인트를 소비하여, 64개의 부분 합을 생성한다. 예시적인 데이터 흐름(1900)은 또한, 아홉 개(9개)의 FL 데이터 포인트(3x3 필터에 대응) 및 64개의 Ic 데이터 포인트가 모두 주어진 PE(105a-i) 내에서 누산되었을 때, 최종 OF 포인트들이 생성되는 예시적인 외부 프로세싱 루프(1910)를 포함한다. Ic는 외부 프로세싱 루프(1910)에 존재하기 때문에, 데이터 흐름 스케줄(1900)은 출력 활성화 고정 스케줄의 예이다. 또한, 데이터 흐름(1900)이 필터 포인트들을 교대로 들여오고 각각의 계산이 스칼라(필터)에 다수의 입력 활성화 포인트들을 곱하는 것을 포함하기 때문에, 데이터 흐름(1900)은 스칼라-벡터 텐서 프로세싱 템플릿에 대응한다. 도 25는 도 19의 예시적인 데이터 흐름 스케줄(1900)을 구현하기 위해 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)를 구성하는 데 사용될 수 있는 표 1의 구성 디스크립터들의 예시적인 값들을 예시한다.
구성 가능형 프로세서 엘리먼트 어레이(100)를 구현하는 예시적인 방식이 도 1 내지 도 25에 예시되어 있지만, 도 1 내지 도 25에 예시된 엘리먼트들, 프로세스들 및/또는 디바이스들 중 하나 이상은 결합, 분할, 재-배열, 생략, 제거 및/또는 임의의 다른 방식으로 구현될 수 있다. 또한, 예시적인 PE들(105a-i), 예시적인 구성 레지스터(들)(120), 예시적인 메모리(125), 예시적인 텐서 데이터 분배 유닛(130), 예시적인 열 버퍼 스토리지(135a-c), 예시적인 출력 데이터 프로세서들(138a-c), 예시적인 버스들(140a-c), 예시적인 RF 스토리지(145a-c), 예시적인 MAC 유닛(150), 예시적인 엘리먼트-별 계산 유닛(155), 예시적인 맥스-풀링 유닛(160), 예시적인 풀러 레지스터(165), 예시적인 구성 레지스터(들)(170), 예시적인 FSM(175), 예시적인 공유형 계산 로직(605), 예시적인 승산기(610), 예시적인 가산기(615), 예시적인 비교기(620), 예시적인 멀티플렉서 제어 로직(625-660), 예시적인 레지스터(675) 및/또는 더 일반적으로, 도 1 내지 도 25의 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)는 하드웨어, 소프트웨어, 펌웨어에 및/또는 하드웨어, 소프트웨어 및/또는 펌웨어의 임의의 조합에 의해 구현될 수 있다. 따라서, 예를 들어, 예시적인 PE들(105a-i), 예시적인 구성 레지스터(들)(120), 예시적인 메모리(125), 예시적인 텐서 데이터 분배 유닛(130), 예시적인 열 버퍼 스토리지(135a-c), 예시적인 출력 데이터 프로세서들(138a-c), 예시적인 버스들(140a-c), 예시적인 RF 스토리지(145a-c), 예시적인 MAC 유닛(150), 예시적인 엘리먼트-별 계산 유닛(155), 예시적인 맥스-풀링 유닛(160), 예시적인 풀러 레지스터(165), 예시적인 구성 레지스터(들)(170), 예시적인 FSM(175), 예시적인 공유형 계산 로직(605), 예시적인 승산기(610), 예시적인 가산기(615), 예시적인 비교기(620), 예시적인 멀티플렉서 제어 로직(625-660), 예시적인 레지스터(675), 및/또는 더 일반적으로, 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100) 중 임의의 것은 하나 이상의 아날로그 또는 디지털 회로(들), 로직 회로, 프로그래밍 가능 프로세서(들), 프로그래밍 가능 제어기(들), 그래픽 프로세싱 유닛(graphics processing unit)(들)(GPU(들)), 디지털 신호 프로세서(digital signal processor)(들)(DSP(들)), 애플리케이션 특정 집적 회로(들)(ASIC(들)), 프로그래밍 가능 로직 디바이스(programmable logic device)(들)(PLD(들)), 필드 프로그래밍 가능 게이트 어레이(field programmable gate array)들(FPGA들) 및/또는 필드 프로그래밍 가능 로직 디바이스(field programmable logic device)(들)(FPLD(들))에 의해 구현될 수 있다. 순전히 소프트웨어 및/또는 펌웨어 구현을 커버하기 위해 본 특허의 장치 또는 시스템 청구항들 중 임의의 것을 읽을 때, 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100), 예시적인 PE들(105a-i), 예시적인 구성 레지스터(들)(120), 예시적인 메모리(125), 예시적인 텐서 데이터 분배 유닛(130), 예시적인 열 버퍼 스토리지(135a-c), 예시적인 출력 데이터 프로세서들(138a-c), 예시적인 버스들(140a-c), 예시적인 RF 스토리지(145a-c), 예시적인 MAC 유닛(150), 예시적인 엘리먼트-별 계산 유닛(155), 예시적인 맥스-풀링 유닛(160), 예시적인 풀러 레지스터(165), 예시적인 구성 레지스터(들)(170), 예시적인 FSM(175), 예시적인 공유형 계산 로직(605), 예시적인 승산기(610), 예시적인 가산기(615), 예시적인 비교기(620), 예시적인 멀티플렉서 제어 로직(625-660) 및/또는 예시적인 레지스터(675) 중 적어도 하나는 소프트웨어 및/또는 펌웨어를 포함하는 메모리, 디지털 버서타일 디스크(digital versatile disk)(DVD), 컴팩트 디스크(compact disk)(CD), 블루-레이 디스크 등과 같은 비-일시적 컴퓨터 판독 가능 스토리지 디바이스 또는 스토리지 디스크를 포함하는 것으로 본 명세서에서 명시적으로 정의된다. 또한, 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)는 도 1 내지 도 25에 예시된 것들에 더하여 또는 그 대신에 하나 이상의 엘리먼트, 프로세스 및/또는 디바이스를 포함할 수 있고, 및/또는 예시된 엘리먼트들, 프로세스들 및 디바이스들 중 임의의 것 또는 이들 전부 중 2개 이상을 포함할 수 있다. 본 명세서에서 사용되는 바와 같이, "통신한다(in communication)"라는 문구는 그 변형들을 포함하여 하나 이상의 중개 컴포넌트를 통한 직접 통신 및/또는 간접 통신을 포함하며, 직접적인 물리적(예를 들어, 유선) 통신 및/또는 지속적인 통신을 필요로 하지 않고, 오히려 또한 주기적 간격들, 스케줄링된 간격들, 비주기적 간격들 및/또는 일회성 이벤트들에서의 선택적 통신을 추가로 포함한다.
예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)를 구현하기 위한 예시적인 하드웨어 로직, 머신 판독 가능 명령어들, 하드웨어 구현 상태 머신들, 및/또는 이들의 임의의 조합을 나타내는 흐름도가 도 26에 도시되어 있다. 이러한 예들에서, 머신 판독 가능 명령어들은 도 27과 관련하여 이하에서 논의되는 예시적인 프로세서 플랫폼(2700)에 도시된 프로세서(2712)와 같은 컴퓨터 프로세서에 의한 실행을 위한 하나 이상의 실행 가능 프로그램 또는 실행 가능 프로그램의 일부(들)일 수 있다. 하나 이상의 프로그램 또는 그 일부(들)는 CD-ROM, 플로피 디스크, 하드 드라이브, DVD, 블루-레이 디스크™, 또는 프로세서(2712)와 연관된 메모리와 같은 비-일시적 컴퓨터 판독 가능 스토리지 매체 상에 저장된 소프트웨어로 구현될 수 있지만, 전체 프로그램 또는 프로그램들 및/또는 그 일부들은 대안적으로 프로세서(2712) 이외의 디바이스에 의해 실행될 수 있고/있거나 펌웨어 전용 하드웨어로 구체화될 수 있다. 또한, 예시적인 프로그램(들)은 도 26에 예시된 흐름도를 참조하여 설명되었지만, 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)를 구현하는 많은 다른 방법들이 대안적으로 사용될 수 있다. 예를 들어, 도 26에 예시된 흐름도를 참조하면, 블록들의 실행 순서가 변경될 수 있고/있거나, 설명된 블록들 중 일부가 변경, 제거, 결합 및/또는 다수의 블록들로 세분화될 수 있다. 추가적으로 또는 대안적으로, 블록들 중 임의의 것 또는 이들 전부는 소프트웨어 또는 펌웨어를 실행하지 않고 대응하는 동작을 수행하도록 구성되는 하나 이상의 하드웨어 회로(예를 들어, 이산 및/또는 통합 아날로그 및/또는 디지털 회로, FPGA, ASIC, 비교기, 연산 증폭기(op-amp), 로직 회로 등)에 의해 구현될 수 있다.
본 명세서에 설명된 머신 판독 가능 명령어들은 압축된 포맷, 암호화된 포맷, 단편화된 포맷, 패키지화된 포맷 등 중 하나 이상으로 저장될 수 있다. 본 명세서에 설명된 머신 판독 가능 명령어들은 머신 실행 가능 명령어들을 생성, 제조 및/또는 생산하는 데 활용될 수 있는 데이터(예를 들어, 명령어들의 일부들, 코드, 코드의 표현들 등)로서 저장될 수 있다. 예를 들어, 머신 판독 가능 명령어들은 단편화되어, 하나 이상의 스토리지 디바이스 및/또는 컴퓨팅 디바이스(예를 들어, 서버) 상에 저장될 수 있다. 머신 판독 가능 명령어들은 컴퓨팅 디바이스 및/또는 다른 머신에 의해 직접 판독 가능하게 하고/하거나 실행 가능하게 하기 위해 설치, 수정, 적응, 업데이트, 결합, 보완, 구성, 암호 해독, 압축 해제, 언팩, 분배, 재할당 등 중 하나 이상을 요구할 수 있다. 예를 들어, 머신 판독 가능 명령어들은 개별적으로 압축되고, 암호화되고, 별도의 컴퓨팅 디바이스들 상에 저장되는 다수의 부분들로 저장될 수 있으며, 여기서 부분들은, 암호 해독, 압축 해제 및 결합될 때, 본 명세서에 설명된 것과 같은 프로그램을 구현하는 실행 가능한 명령어들의 세트를 형성한다. 다른 예에서, 머신 판독 가능 명령어들은 컴퓨터에 의해 판독될 수 있는 상태로 저장될 수 있지만, 특정 컴퓨팅 디바이스 또는 다른 디바이스에서 명령어들을 실행하기 위해 라이브러리(예를 들어, 동적 링크 라이브러리), 소프트웨어 개발 키트(software development kit)(SDK), 애플리케이션 프로그래밍 인터페이스(application programming interface)(API) 등의 추가를 필요로 한다. 다른 예에서는, 머신 판독 가능 명령어들 및/또는 대응하는 프로그램(들)이 전체적으로 또는 부분적으로 실행될 수 있기 전에, 머신 판독 가능 명령어들이 구성될 필요가 있을 수 있다(예를 들어, 저장된 설정들, 데이터 입력, 기록된 네트워크 어드레스들 등). 따라서, 개시된 머신 판독 가능 명령어들 및/또는 대응하는 프로그램(들)은, 저장될 때 또는 다른 방식으로 저장(at rest) 또는 이동(in transit)될 때, 머신 판독 가능 명령어들 및/또는 프로그램(들)의 특정 포맷 또는 상태에 관계없이, 그러한 머신 판독 가능 명령어들 및/또는 프로그램(들)을 포함하도록 의도된다.
다른 예에서, 머신 판독 가능 명령어들은 컴퓨터에 의해 판독될 수 있는 상태로 저장될 수 있지만, 특정 컴퓨팅 디바이스 또는 다른 디바이스에서 명령어들을 실행하기 위해 라이브러리(예를 들어, 동적 링크 라이브러리(dynamic link library)(DLL)), 소프트웨어 개발 키트(SDK), 애플리케이션 프로그래밍 인터페이스(API) 등의 추가를 필요로 한다. 다른 예에서는, 머신 판독 가능 명령어들 및/또는 대응하는 프로그램(들)이 전체적으로 또는 전체적으로 실행될 수 있기 전에, 머신 판독 가능 명령어들이 구성될 필요가 있을 수 있다(예를 들어, 저장된 설정들, 데이터 입력, 기록된 네트워크 어드레스 등). 따라서, 개시된 머신 판독 가능 명령어들 및/또는 대응하는 프로그램(들)은, 저장될 때 또는 다른 방식으로 저장 또는 이동될 때, 머신 판독 가능 명령어들 및/또는 프로그램(들)의 특정 포맷 또는 상태에 관계없이, 그러한 머신 판독 가능 명령어들 및/또는 프로그램(들)을 포함하도록 의도된다.
본 명세서에 설명된 머신 판독 가능 명령어들은 임의의 과거, 현재 또는 미래의 명령어 언어, 스크립팅 언어, 프로그래밍 언어 등으로 표현될 수 있다. 예를 들어, 머신 판독 가능 명령어들은 다음 언어들: C, C++, Java, C#, Perl, Python, JavaScript, HTML(HyperText Markup Language), SQL(Structured Query Language), Swift 등 중 임의의 것을 사용하여 표현될 수 있다.
위에서 언급된 바와 같이, 도 26의 예시적인 프로세스는 하드 디스크 드라이브, 플래시 메모리, 판독 전용 메모리, 컴팩트 디스크, 디지털 버서타일 디스크, 캐시, 랜덤 액세스 메모리, 및/또는 임의의 지속 기간 동안(예를 들어, 확장된 시간 기간들 동안, 영구적으로, 짧은 순간들 동안, 일시적인 버퍼링 동안 및/또는 정보의 캐싱 동안) 정보가 저장되는 임의의 다른 스토리지 디바이스 또는 스토리지 디스크와 같은 비-일시적 컴퓨터 및/또는 머신 판독 가능 매체 상에 저장된 실행 가능 명령어들(예를 들어, 컴퓨터 및/또는 머신 판독 가능 명령어들)을 사용하여 구현될 수 있다. 본 명세서에서 사용되는 바와 같이, 비-일시적 컴퓨터 판독 가능 매체라는 용어는 임의의 타입의 컴퓨터 판독 가능 스토리지 디바이스 및/또는 스토리지 디스크를 포함하고 전파 신호들을 배제하고 송신 매체를 배제하도록 명시적으로 정의된다. 또한, 본 명세서에서 사용되는 바와 같이, "컴퓨터 판독 가능" 및 "머신 판독 가능"이라는 용어들은 달리 지시되지 않는 한 동등한 것으로 간주된다.
"포함하는(including)" 및 "포함하는(comprising)"(및 이들의 모든 형태들 및 시제들)은 본 명세서에서 개방형 용어들로 사용된다. 따라서, 청구항이 임의의 형태의 "포함한다(include)" 또는 "포함한다(comprise)"(예를 들어, 포함한다(comprises), 포함한다(includes), 포함하는(comprising), 포함하는(including), 갖는(having) 등)를 임의의 종류의 청구항 또는 인용 내의 전제부로서 채택할 때마다, 추가적인 엘리먼트들, 용어들 등이 대응하는 청구항 또는 인용 범위를 벗어나지 않고 존재할 수 있다는 것이 이해되어야 한다. 본 명세서에 사용된 바와 같이, "적어도"라는 문구가, 예를 들어, 청구항의 전제부에서 전환 용어로서 사용될 때, 이것은 "포함하는(comprising)" 및 "포함하는(including)"이라는 용어가 개방형인 것과 동일한 방식으로 개방형이다. 예를 들어, A, B 및/또는 C와 같은 형태로 사용될 때의 "및/또는"이라는 용어는 (1) A 단독, (2) B 단독, (3) C 단독, (4) A와 B, (5) A와 C, (6) B와 C, 및 (7) A와 B 및 C와 같은 A, B, C의 임의의 조합 또는 이들의 서브세트를 지칭한다. 구조들, 컴포넌트들, 항목들, 객체들 및/또는 사물들(things)을 설명하는 맥락에서 본 명세서에서 사용되는 바와 같이, "A 및 B 중 적어도 하나"라는 문구는 (1) 적어도 하나의 A, (2) 적어도 하나의 B, 및 (3) 적어도 하나의 A 및 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하는 것으로 의도된다. 유사하게, 구조들, 컴포넌트들, 항목들, 객체들 및/또는 사물들을 설명하는 맥락에서 본 명세서에서 사용되는 바와 같이, "A 또는 B 중 적어도 하나"라는 문구는 (1) 적어도 하나의 A, (2) 적어도 하나의 B, 및 (3) 적어도 하나의 A 및 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하는 것으로 의도된다. 프로세스들, 명령어들, 동작들, 활동들 및/또는 단계들의 수행 또는 실행을 설명하는 맥락에서 본 명세서에서 사용되는 바와 같이, "A 및 B 중 적어도 하나"라는 문구는 (1) 적어도 하나의 A, (2) 적어도 하나의 B, 및 (3) 적어도 하나의 A 및 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하는 것으로 의도된다. 유사하게, 프로세스들, 명령어들, 동작들, 활동들 및/또는 단계들의 수행 또는 실행을 설명하는 맥락에서 본 명세서에서 사용되는 바와 같이, "A 또는 B 중 적어도 하나"라는 문구는 (1) 적어도 하나의 A, (2) 적어도 하나의 B 및 (3) 적어도 하나의 A 및 적어도 하나의 B 중 임의의 것을 포함하는 구현들을 지칭하는 것으로 의도된다.
본 명세서에서 사용되는 바와 같이, 단수 참조들(예를 들어, "a", "an", "제1", "제2" 등)은 복수를 배제하지 않는다. 본 명세서에서 사용되는 "a" 또는 "an"과 같은 엔티티의 용어는 해당 엔티티 중 하나 이상을 지칭한다. "a"(또는 "an"), "하나 이상", 및 "적어도 하나"라는 용어들은 본 명세서에서 상호 교환적으로 사용된다. 또한, 개별적으로 나열되었지만, 복수의 수단들, 엘리먼트들 또는 방법 동작들은, 예를 들어, 단일 유닛 또는 프로세서에 의해 구현될 수 있다. 추가적으로, 개별적인 피처들이 상이한 예들 또는 청구항들에 포함될 수 있지만, 이들은 가능하게는 조합될 수 있고, 상이한 예들 또는 청구항들에 포함된다고 해서 피처들의 조합이 실현 가능하지 않고/않거나 유리하지 않다는 것을 의미하지는 않는다.
콘볼루션 신경망의 계층을 구현하기 위해 도 1의 예시적인 구성 가능형 프로세서 엘리먼트 어레이(100)를 동작시키도록 실행될 수 있는 예시적인 프로그램(2600)이 도 26에 도시된 흐름도에 의해 표현된다. 앞선 도면들 및 연관된 기재 설명들을 참조하면, 도 26의 예시적인 프로그램(2600)은 블록(2605)에서 실행을 시작하며, 여기서 구성 로더(122)는 구성 가능형 프로세서 엘리먼트 어레이(100)에 의해 구현되는 콘볼루션 신경망에 대응하는 입력 데이터(IF 데이터) 및 필터 데이터(FL 데이터)를 구성 가능형 프로세서 엘리먼트 어레이(100)의 메모리(125)에 로드하기 위한 명령어들(예를 들어, 컴파일러, 소프트웨어 등)을 실행한다. 블록(2610)에서, 구성 로더(122)는 위에서 설명된 하나의 가능한 텐서 프로세싱 템플릿들에 대응하는 주어진 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 제1 계층을 구현하기 위해 구성 가능형 프로세서 엘리먼트 어레이(100)를 구성하도록 구성 레지스터들(120)에 디스크립터들을 기입하기 위한 명령어들(예를 들어, 컴파일러, 소프트웨어 등)을 실행한다. 이와 같이, 블록(2610)은 위에서 설명된 구성 단계(705)의 예에 대응한다. 블록(2615)에서, 구성 가능형 프로세서 엘리먼트 어레이(100)의 PE들(105a-i)은 디스크립터 값들을 각각의 PE들(105a-i)의 대응하는 구성 레지스터들(170)에 로드한다. 이와 같이, 블록(2615)은 위에서 설명된 로드 단계(710)의 예에 대응한다. 블록(2620)에서, 구성 가능형 프로세서 엘리먼트 어레이(100)의 PE들(105a-i)은 위에서 설명된 구성된 디스크립터들에 따라 현재 신경망 계층에 대응하는 입력 데이터 및 필터 데이터에 대해 계산 동작들을 수행한다. 위에서 설명된 바와 같이, 블록(2620)에서 수행되는 계산 연산들은, 예를 들어, MAC 연산들, 엘리먼트-별 연산들, 맥스풀 연산들, 내부 부분 합 누산들, 외부 부분 합 누산들 등을 포함할 수 있다. 이와 같이, 블록(2620)은 위에서 설명된 계산 단계(715), 누산 단계(720) 및/또는 외부 부분 합 누산 단계(725)의 예에 대응한다. 블록(2625)에서, PE들(105a-i)은 현재 신경망 계층에 대해 블록(2620)에서 결정된 출력 데이터(OF 데이터)를 위에서 설명된 구성 가능형 프로세서 엘리먼트 어레이(100)의 메모리에 저장한다. 이와 같이, 블록(2625)은 위에서 설명된 리트리브 단계(730)의 예에 대응한다.
블록(2630)에서, 구성 로더(122)는 신경망의 다른 계층(예를 들어, 제2 계층)이 구현될 것인지를 결정하기 위한 명령어들(예를 들어, 컴파일러, 소프트웨어 등)을 실행한다. 다른 신경망 계층이 구현되는 경우(블록(2640)에서 "예"), 제어는 블록(2610)으로 리턴하고, 여기서 구성 로더(122)는 위에서 설명된 하나의 가능한 텐서 프로세싱 템플릿들에 대응하는 주어진 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 다음(예를 들어, 제2) 계층을 구현하기 위해 구성 가능형 프로세서 엘리먼트 어레이(100)를 구성하도록 구성 레지스터들(120)에 다른 디스크립터 세트를 기입하기 위한 명령어들(예를 들어, 컴파일러, 소프트웨어 등)을 실행한다. 위에서 설명된 바와 같이, 콘볼루션 신경망의 다음(예를 들어, 제2) 계층에 대해 블록(2610)에서 구성 로더(122)에 의해 구성된 텐서 프로세싱 템플릿 및 결과적으로 연관된 데이터 흐름 스케줄은 콘볼루션 신경망의 제1 계층에 대해 블록(2610)의 이전의 반복 동안 구성된 텐서 프로세싱 템플릿 및 결과적으로 연관된 데이터 흐름 스케줄과 동일할 수도 있고, 또는 이와 상이할 수도 있다. 그 후, 제어는 콘볼루션 신경망의 다음(예를 들어, 제2) 계층을 구현하기 위해 블록(2615) 및 후속 블록들로 진행한다.
그러나, 다른 신경망 계층들이 구현되지 않는 경우(블록(2630)에서 "아니오"), 블록(2635)에서, 구성 가능형 프로세서 엘리먼트 어레이(100)는 그것의 PE들(105a-i)로 하여금 임의의 최종 부분 합 누산들(예를 들어, 위에서 설명된 예시적인 데이터 흐름 스케줄들(1600-1900) 참조)을 수행하게 하고, 최종 출력 데이터(OF 데이터)를 구성 가능형 프로세서 엘리먼트 어레이(100)의 메모리(125)에 기입한다. 그 후, 예시적인 프로그램(2600)은 종료된다.
도 27은 도 1 내지 도 25의 구성 가능형 프로세서 엘리먼트 어레이(100)를 구현하기 위해 도 26의 명령어들을 실행하도록 구성된 예시적인 프로세서 플랫폼(2700)의 블록도이다. 프로세서 플랫폼(2700)은, 예를 들어, 서버, 개인용 컴퓨터, 워크 스테이션, 자가-학습 머신(예를 들어, 신경망), 모바일 디바이스(예를 들어, 휴대 전화, 스마트폰, iPadTM과 같은 태블릿 등), PDA(personal digital assistant), 인터넷 기기, DVD 플레이어, CD 플레이어, 디지털 비디오 레코더, 블루-레이 플레이어, 게임 콘솔, 개인용 비디오 레코더, 셋톱 박스, 헤드셋 또는 기타 웨어러블 디바이스 또는 임의의 다른 타입의 컴퓨팅 디바이스일 수 있다.
예시된 예의 프로세서 플랫폼(2700)은 프로세서(2712)를 포함한다. 예시된 예의 프로세서(2712)는 하드웨어이다. 예를 들어, 프로세서(2712)는 임의의 원하는 제품군 또는 제조업체로부터의 하나 이상의 집적 회로, 로직 회로, 마이크로프로세서, GPU, DSP 또는 제어기에 의해 구현될 수 있다. 하드웨어 프로세서(2712)는 반도체 기반(예를 들어, 실리콘 기반) 디바이스일 수 있다. 예시된 예에서, 하드웨어 프로세서(2712)는 도 1의 구성 로더(122)를 구현한다.
예시된 예의 프로세서(2712)는 로컬 메모리(2713)(예를 들어, 캐시)를 포함한다. 예시된 예의 프로세서(2712)는 링크(2718)를 통해 휘발성 메모리(2714) 및 비-휘발성 메모리(2716)를 포함하는 메인 메모리와 통신한다. 링크(2718)는 버스, 하나 이상의 점 대 점 연결, 또는 이들의 조합에 의해 구현될 수 있다. 휘발성 메모리(2714)는 동기식 동적 랜덤 액세스 메모리(Synchronous Dynamic Random Access Memory)(SDRAM), 동적 랜덤 액세스 메모리(Dynamic Random Access Memory)(DRAM), RAMBUS® 동적 랜덤 액세스 메모리(Dynamic Random Access Memory)(RDRAM®) 및/또는 임의의 다른 타입의 랜덤 액세스 메모리 디바이스에 의해 구현될 수 있다. 비-휘발성 메모리(2716)는 플래시 메모리 및/또는 임의의 다른 원하는 타입의 메모리 디바이스에 의해 구현될 수 있다. 메인 메모리(2714, 2716)에 대한 액세스는 메모리 제어기에 의해 제어된다.
예시된 예의 프로세서 플랫폼(2700)은 또한 인터페이스 회로(2720)를 포함한다. 인터페이스 회로(2720)는 이더넷 인터페이스, 범용 직렬 버스(universal serial bus)(USB), 블루투스® 인터페이스, 근거리 통신(near field communication)(NFC) 인터페이스 및/또는 PCI 익스프레스 인터페이스와 같은 임의의 타입의 인터페이스 표준에 의해 구현될 수 있다.
예시된 예에서는, 하나 이상의 입력 디바이스(2722)가 인터페이스 회로(2720)에 연결된다. 입력 디바이스(들)(2722)는 사용자가 데이터 및/또는 커맨드들을 프로세서(2712)에 입력하는 것을 허용한다. 입력 디바이스(들)는, 예를 들어, 오디오 센서, 마이크로폰, 카메라(스틸 또는 비디오), 키보드, 버튼, 마우스, 터치 스크린, 트랙-패드, 트랙볼, (아이소포인트(isopoint)와 같은) 트랙 바, 음성 인식 시스템 및/또는 임의의 다른 인간-머신 인터페이스에 의해 구현될 수 있다. 또한, 프로세서 플랫폼(2700)과 같은 많은 시스템들은 사용자가 손 또는 신체 움직임들, 얼굴 표정들 및 얼굴 인식과 같되, 이에 제한되지 않는 물리적 제스처를 사용하여 컴퓨터 시스템을 제어하고 컴퓨터에 데이터를 제공하게 할 수 있다.
프로세서 플랫폼(2700)은 링크(2718)를 통해 프로세서 플랫폼(2700)의 다른 엘리먼트들과 통신하는 구성 가능형 프로세서 엘리먼트 어레이(100)를 추가로 포함한다. 예를 들어, 구성 가능형 프로세서 엘리먼트 어레이(100)는 인터페이스 회로(2720)를 통해 입력 디바이스들(2722) 중 하나 이상으로부터 입력 IF 데이터를 획득하고, 위에서 설명된 바와 같이 입력 IF 데이터를 프로세싱하기 위해 콘볼루션 신경망의 계층들을 구현하고, 결과적인 OF 데이터를 인터페이스 회로(2720)를 통해 출력 디바이스들(2724)로 출력할 수 있다.
하나 이상의 출력 디바이스(2724)는 또한 예시된 예의 인터페이스 회로(2720)에 연결된다. 출력 디바이스들(2724)은, 예를 들어, 디스플레이 디바이스들(예를 들어, 발광 다이오드(light emitting diode)(LED), 유기 발광 다이오드(organic light emitting diode)(OLED), 액정 디스플레이(liquid crystal display)(LCD), 음극선 관 디스플레이(cathode ray tube display)(CRT), 인-플레이스 스위칭(in-place switching)(IPS) 디스플레이, 터치 스크린 등), 촉각 출력 디바이스, 프린터 및/또는 스피커(들)에 의해 구현될 수 있다. 따라서, 예시된 예의 인터페이스 회로(2720)는 통상적으로 그래픽 드라이버 카드, 그래픽 드라이버 칩 및/또는 그래픽 드라이버 프로세서를 포함한다.
예시된 예의 인터페이스 회로(2720)는 또한 네트워크(2726)를 통해 외부 머신들(예를 들어, 임의의 종류의 컴퓨팅 디바이스들)과의 데이터 교환을 용이하게 하는 송신기, 수신기, 트랜시버, 모뎀, 주거용 게이트웨이, 무선 액세스 포인트, 및/또는 네트워크 인터페이스와 같은 통신 디바이스를 포함한다. 통신은, 예를 들어, 이더넷 연결, 디지털 가입자 회선(digital subscriber line)(DSL) 연결, 전화선 연결, 동축 케이블 시스템, 위성 시스템, 라인-오브-사이트(line-of-site) 무선 시스템, 휴대 전화 시스템 등을 통해 수행될 수 있다.
예시된 예의 프로세서 플랫폼(2700)은 또한 소프트웨어 및/또는 데이터를 저장하기 위한 하나 이상의 대용량 스토리지 디바이스(2728)를 포함한다. 이러한 대용량 스토리지 디바이스들(2728)의 예들은 플로피 디스크 드라이브들, 하드 드라이브 디스크들, 컴팩트 디스크 드라이브들, 블루-레이 디스크 드라이브들, 복수 배열 독립 디스크(redundant array of independent disks)(RAID) 시스템들, 및 디지털 버서타일 디스크(DVD) 드라이브들을 포함한다. 일부 예들에서, 대용량 스토리지 디바이스(들)(2728)는 구성 가능형 프로세서 엘리먼트 어레이(100)의 메모리(125)를 구현한다. 추가적으로 또는 대안적으로, 일부 예들에서, 휘발성 메모리(2714)는 구성 가능형 프로세서 엘리먼트 어레이(100)의 메모리(125)를 구현한다.
도 26의 명령어들에 대응하는 머신 실행 가능 명령어들(2732)은 대용량 스토리지 디바이스(2728), 휘발성 메모리(2714), 비-휘발성 메모리(2716), 로컬 메모리(2713) 및/또는 CD 또는 DVD(2736)와 같은 이동식 비-일시적 컴퓨터 판독 가능 저장 매체에 저장될 수 있다.
전술한 내용으로부터, 콘볼루션 신경망을 구현하기 위한 예시적인 구성 가능형 프로세서 엘리먼트 어레이들이 개시되었다는 것이 이해될 것이다. 개시된 구성 가능형 프로세서 엘리먼트 어레이들은 주어진 신경망 계층에 대한 데이터 흐름을 벡터-벡터, 벡터-매트릭스, 매트릭스-매트릭스 또는 스칼라-벡터 매크로 명령어 텐서 프로세싱 템플릿들 중 하나에 매핑하는 것에 의해 유연한 데이터 흐름 스케줄 매핑을 지원하는 저가형 프로그래밍 가능 딥 신경망(DNN) 하드웨어 솔루션을 제공한다. 개시된 구성 가능형 프로세서 엘리먼트 어레이들은 ASIC 하드웨어 가속기의 에너지 효율성을 유지하면서 FPGA의 것과 유사한 유연성을 제공할 수 있다. 또한, 개시된 구성 가능형 프로세서 엘리먼트 어레이들은 특정 레지스터 파일 또는 메모리 사이즈들 또는 배열들로 제한되지 않으며, 따라서, 광범위한 머신 학습 가속기 설계들에 채택될 수 있다. 또한, 개시된 구성 가능형 프로세서 엘리먼트 어레이들은 데이터 재사용으로부터 에너지 효율성을 활용하는 DNN 가속기들을 개발하는 데 사용될 수 있다. 따라서, 개시된 구성 가능형 프로세서 엘리먼트 어레이들은 컴퓨터 기술의 기능에서의 하나 이상의 개선(들)에 관한 것이다.
전술한 개시내용은 개시된 구성 가능형 프로세서 엘리먼트 어레이들에 의해 콘볼루션 신경망들을 구현하기 위한 예시적인 솔루션들을 제공한다. 콘볼루션 신경망을 구현하기 위한 장치, 실행될 때, 적어도 하나의 프로세서로 하여금, 콘볼루션 신경망을 구현하기 위한 장치를 구성하게 하는 명령어들을 포함하는 비-일시적 컴퓨터 판독 가능 매체, 및 콘볼루션 신경망을 구현하기 위한 장치를 구성하는 방법과 같은 대상을 포함하는 이하의 추가적인 예들이 본 명세서에서 개시된다. 개시된 예들은 개별적으로 및/또는 하나 이상의 조합으로 구현될 수 있다.
예 1은 콘볼루션 신경망(convolutional neural network)을 구현하기 위한 장치이다. 예 1의 장치는 프로세서 엘리먼트들의 어레이 - 어레이는 행들 및 열들을 포함하고, 행들의 각각의 행들은 제1 개수의 프로세서 엘리먼트를 갖고, 열들의 각각의 열들은 제2 개수의 프로세서 엘리먼트를 가짐 - 를 포함한다. 예 1의 장치는 또한 복수의 디스크립터들(descriptor)들을 저장하기 위한 구성 레지스터들 - 디스크립터들은 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿에 대응하는 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 계층을 구현하도록 프로세서 엘리먼트들의 어레이를 구성하고, 프로세서 엘리먼트들의 프로세서 엘리먼트들은 디스크립터들에 기초하여, 콘볼루션 신경망의 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 콘볼루션 신경망의 계층과 연관된 출력 활성화 데이터를 생성하기 위해 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿을 구현하도록 구성됨 - 을 포함한다. 예 1의 장치는 콘볼루션 신경망의 계층과 연관된 입력 활성화 데이터, 필터 데이터 및 출력 활성화 데이터를 저장하기 위한 메모리를 추가로 포함한다.
예 2는 예 1의 대상에 있어서, 계층은 콘볼루션 신경망의 제1 계층이고, 복수의 디스크립터들은 제1 복수의 디스크립터들이고, 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿은 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿이고, 구성 레지스터들은 제2 복수의 디스크립터들을 저장하도록 재구성 가능하고, 제2 복수의 디스크립터들은 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿에 대응하는 제2 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 제2 계층을 구현하도록 프로세서 엘리먼트들의 어레이를 구성하고, 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿은 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿과 상이한, 장치를 포함한다.
예 3은 예 2의 대상에 있어서, 복수의 텐서 프로세싱 템플릿들은 벡터-벡터 템플릿, 벡터-매트릭스 템플릿 및 매트릭스-매트릭스 템플릿을 포함하는, 장치를 포함한다.
예 4는 예 1 내지 예 3 중 어느 하나의 예의 대상에 있어서, 프로세서 엘리먼트들의 어레이의 제1 프로세서 엘리먼트는 (i) 제1 프로세서 엘리먼트에 의해 프로세싱될 제1 입력 활성화 데이터를 저장하기 위한 입력 활성화 레지스터 파일, (ii) 제1 프로세서 엘리먼트에 의해 프로세싱될 제1 필터 데이터를 저장하기 위한 필터 레지스터 파일, (iii) 제1 입력 활성화 데이터 및 제1 필터 데이터에 기초하여 제1 프로세서 엘리먼트에 의해 생성될 제1 출력 활성화 데이터를 저장하기 위한 출력 활성화 레지스터 파일; 및 (iv) 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿을 구현하기 위해 제1 프로세서 엘리먼트의 동작을 제어하기 위한 유한 상태 머신(finite state machine)을 포함하는, 장치를 포함한다.
예 5는 예 4의 대상에 있어서, 구성 레지스터들은 제1 구성 레지스터들이고, 제1 프로세서 엘리먼트는 디스크립터들 중 적어도 일부의 디스크립터들을 저장하기 위한 제2 구성 레지스터들을 추가로 포함하고, 제2 구성 레지스터들은 유한 상태 머신을 구성하는, 장치를 포함한다.
예 6은 예 4의 대상에 있어서, 제1 프로세서 엘리먼트는 (i) 제1 입력 활성화 데이터 및 제1 필터 데이터에 대해 곱셈 및 누산(multiplication and accumulation) 연산들을 수행하기 위한 곱셈-및-누산 유닛, (ii) 제1 입력 활성화 데이터에 대해 엘리먼트-별(elementwise) 연산들을 수행하기 위한 엘리먼트-별 계산 유닛, (iii) 제1 출력 활성화 데이터를 생성하기 위해 맥스풀 연산을 수행하기 위한 맥스풀 유닛; 및 (iv) 곱셈-및-누산 유닛, 엘리먼트-별 연산 유닛 및 맥스풀 유닛의 연산을 제어하기 위해 유한 상태 머신에 의해 구성 가능한 제어 로직을 추가로 포함하는, 장치를 포함한다.
예 7은 예 1 내지 예 6 중 어느 하나의 예의 대상에 있어서, 제1 개수는 제2 개수와 동일한, 장치를 포함한다.
예 8은 예 1 내지 예 7 중 어느 하나의 예의 대상에 있어서, 복수의 디스크립터들을 구성 레지스터들에 기입하는 컴퓨터 명령어들을 실행하기 위한 프로세서를 추가로 포함하는, 장치를 포함한다.
예 9는 예 8의 대상에 있어서, 계층은 콘볼루션 신경망의 제1 계층이고, 복수의 디스크립터들은 제1 복수의 디스크립터들이고, 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿은 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿이고, 프로세서는 구성 레지스터들에 제2 복수의 디스크립터들을 기입하고, 제2 복수의 디스크립터들은 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿에 대응하는 제2 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 제2 계층을 구현하도록 프로세서 엘리먼트들의 어레이를 구성하고, 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿은 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿과 상이한, 장치를 포함한다.
예 10은 컴퓨터 판독 가능 명령어들을 포함하는 비-일시적 컴퓨터 판독 가능 매체로서, 컴퓨터 판독 가능 명령어들은, 실행될 때, 적어도 하나의 프로세서로 하여금, 적어도 (i) 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿에 대응하는 제1 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 제1 계층을 구현하도록 프로세서 엘리먼트들의 어레이를 구성하기 위해 구성 레지스터들에 제1 디스크립터 세트를 기입하게 하고 - 어레이는 행들 및 열들을 포함하고, 행들의 각각의 행들은 제1 개수의 프로세서 엘리먼트를 갖고, 열들의 각각의 열들은 제2 개수의 프로세서 엘리먼트를 갖고, 제1 디스크립터 세트는 콘볼루션 신경망의 제1 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 콘볼루션 신경망의 제1 계층과 연관된 출력 활성화 데이터를 생성하기 위해 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿을 구현하도록 프로세서 엘리먼트들의 프로세서 엘리먼트들을 구성함 -, (ii) 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿에 대응하는 제2 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 제2 계층을 구현하도록 프로세서 엘리먼트들의 어레이를 구성하기 위해 구성 레지스터들에 제2 디스크립터 세트를 기입하게 하는 - 제2 디스크립터 세트는 콘볼루션 신경망의 제2 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 콘볼루션 신경망의 제2 계층과 연관된 출력 활성화 데이터를 생성하기 위해 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿을 구현하도록 프로세서 엘리먼트들의 프로세서 엘리먼트들을 구성함 - 비-일시적 컴퓨터 판독 가능 매체이다.
예 11은 예 10의 대상에 있어서, 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿은 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿과 상이한, 비-일시적 컴퓨터 판독 가능 매체를 포함한다.
예 12는 예 11의 대상에 있어서, 복수의 텐서 프로세싱 템플릿들은 벡터-벡터 템플릿, 벡터-매트릭스 템플릿 및 매트릭스-매트릭스 템플릿을 포함하는, 비-일시적 컴퓨터 판독 가능 매체를 포함한다.
예 13은 예 10 내지 예 12 중 어느 하나의 예의 대상에 있어서, 명령어들은, 실행될 때, 적어도 하나의 프로세서로 하여금 추가로, 콘볼루션 신경망의 제3 계층을 구현하도록 프로세서 엘리먼트들의 어레이를 구성하기 위해 구성 레지스터들에 제3 디스크립터 세트를 기입하게 하고, 제3 디스크립터 세트는 엘리먼트-별 연산들 또는 맥스풀 연산들 중 적어도 하나의 연산을 수행하도록 프로세서 엘리먼트들의 프로세서 엘리먼트들을 구성하는, 비-일시적 컴퓨터 판독 가능 매체를 포함한다.
예 14는 예 10 내지 예 13의 대상에 있어서, 제1 개수는 제2 개수와 동일한, 비-일시적 컴퓨터 판독 가능 매체를 포함한다.
예 15는 콘볼루션 신경망을 구현하기 위한 방법이다. 예 15의 방법은, 적어도 하나의 프로세서에 의해 명령어를 실행함으로써, 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿에 대응하는 제1 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 제1 계층을 구현하도록 프로세서 엘리먼트들의 어레이를 구성하기 위해 구성 레지스터들에 제1 디스크립터 세트를 기입하는 단계 - 어레이는 행들 및 열들을 포함하고, 행들의 각각의 행들은 제1 개수의 프로세서 엘리먼트를 갖고, 열들의 각각의 열들은 제2 개수의 프로세서 엘리먼트를 갖고, 제1 디스크립터 세트는 콘볼루션 신경망의 제1 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 콘볼루션 신경망의 제1 계층과 연관된 출력 활성화 데이터를 생성하기 위해 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿을 구현하도록 프로세서 엘리먼트들의 프로세서 엘리먼트들을 구성함 - 를 포함한다. 예 15의 방법은 또한, 적어도 하나의 프로세서에 의해 명령어를 실행함으로써, 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿에 대응하는 제2 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 제2 계층을 구현하도록 프로세서 엘리먼트들의 어레이를 구성하기 위해 구성 레지스터들에 제2 디스크립터 세트를 기입하는 단계 - 제2 디스크립터 세트는 콘볼루션 신경망의 제2 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 콘볼루션 신경망의 제2 계층과 연관된 출력 활성화 데이터를 생성하기 위해 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿을 구현하도록 프로세서 엘리먼트들의 프로세서 엘리먼트들을 구성함 - 를 포함한다.
예 16은 예 15의 대상에 있어서, 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿은 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿과 상이한, 방법을 포함한다.
예 17은 예 16의 대상에 있어서, 복수의 텐서 프로세싱 템플릿들은 벡터-벡터 템플릿, 벡터-매트릭스 템플릿 및 매트릭스-매트릭스 템플릿을 포함하는, 방법을 포함한다.
예 18은 예 15 내지 예 17 중 어느 하나의 예의 대상에 있어서, 콘볼루션 신경망의 제3 계층을 구현하도록 프로세서 엘리먼트들의 어레이를 구성하기 위해 구성 레지스터들에 제3 디스크립터 세트를 기입하는 단계를 추가로 포함하고, 제3 디스크립터 세트는 엘리먼트-별 연산들 또는 맥스풀 연산들 중 적어도 하나의 연산을 수행하도록 프로세서 엘리먼트들의 프로세서 엘리먼트들을 구성하는, 방법을 포함한다.
예 19는 예 15 내지 예 18 중 어느 하나의 예의 대상에 있어서, 제1 개수는 제2 개수와 동일한, 방법을 포함한다.
예 20은 콘볼루션 신경망을 구현하기 위한 장치이다. 예 20의 장치는 프로세서 엘리먼트들의 어레이 - 어레이는 행들 및 열들을 포함하고, 행들의 각각의 행들은 제1 개수의 프로세서 엘리먼트를 갖고, 열들의 각각의 열들은 제2 개수의 프로세서 엘리먼트를 가짐 - 를 포함한다. 예 20의 장치는 또한 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿에 대응하는 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 계층을 구현하도록 복수의 디스크립터들에 기초하여 프로세서 엘리먼트들의 어레이를 구성하기 위한 수단 - 디스크립터들은 콘볼루션 신경망의 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 콘볼루션 신경망의 계층과 연관된 출력 활성화 데이터를 생성하기 위해 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿을 구현하도록 프로세서 엘리먼트들의 프로세서 엘리먼트들을 구성함 - 을 포함한다. 예 20의 장치는 콘볼루션 신경망의 계층과 연관된 입력 활성화 데이터, 필터 데이터 및 출력 활성화 데이터를 저장하기 위한 수단을 추가로 포함한다.
예 21은 예 20의 대상에 있어서, 계층은 콘볼루션 신경망의 제1 계층이고, 복수의 디스크립터들은 제1 복수의 디스크립터들이고, 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿은 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿이고, 구성하기 위한 수단은 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿에 대응하는 제2 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 제2 계층을 구현하도록 제2 복수의 디스크립터들에 기초하여 프로세서 엘리먼트들의 어레이를 구성하고, 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿은 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿과 상이한, 장치를 포함한다.
예 22는 예 21의 대상에 있어서, 복수의 텐서 프로세싱 템플릿들은 벡터-벡터 템플릿, 벡터-매트릭스 템플릿 및 매트릭스-매트릭스 템플릿을 포함하는, 장치를 포함한다.
예 23은 예 20 내지 예 22 중 어느 하나의 예의 대상에 있어서, 제1 개수는 제2 개수와 동일한, 장치를 포함한다.
예 24는 예 20 내지 예 23 중 어느 하나의 예의 대상에 있어서, 프로세서 엘리먼트들의 어레이를 구성하기 위한 수단에 복수의 디스크립터들을 로드하기 위한 수단을 추가로 포함하는, 장치를 포함한다.
예 25는 예 24의 대상에 있어서, 계층은 콘볼루션 신경망의 제1 계층이고, 복수의 디스크립터들은 제1 복수의 디스크립터들이고, 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿은 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿이고, 로드하기 위한 수단은 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿에 대응하는 제2 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 제2 계층을 구현하도록 프로세서 엘리먼트들의 어레이를 구성하기 위해 구성하기 위한 수단에 제2 복수의 디스크립터들을 로드하고, 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿은 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿과 상이한, 장치를 포함한다.
특정 예시적인 방법들, 장치들 및 제조물들이 본 명세서에 개시되었지만, 본 특허의 보호 범위는 이에 제한되지 않는다. 반대로, 본 특허는 본 특허의 청구 범위에 속하는 모든 방법들, 장치들 및 제조물들을 포함한다.

Claims (25)

  1. 콘볼루션 신경망(convolutional neural network)을 구현하기 위한 장치로서,
    프로세서 엘리먼트들의 어레이 - 상기 어레이는 행들 및 열들을 포함하고, 상기 행들의 각각의 행들은 제1 개수의 프로세서 엘리먼트를 갖고, 상기 열들의 각각의 열들은 제2 개수의 프로세서 엘리먼트를 가짐 -;
    복수의 디스크립터(descriptor)들을 저장하기 위한 구성 레지스터들 - 상기 디스크립터들은 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿에 대응하는 데이터 흐름 스케줄에 기초하여 상기 콘볼루션 신경망의 계층을 구현하도록 상기 프로세서 엘리먼트들의 어레이를 구성하고, 상기 프로세서 엘리먼트들의 프로세서 엘리먼트들은 상기 디스크립터들에 기초하여, 상기 콘볼루션 신경망의 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 상기 콘볼루션 신경망의 계층과 연관된 출력 활성화 데이터를 생성하기 위해 상기 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿을 구현하도록 구성됨 -; 및
    상기 콘볼루션 신경망의 계층과 연관된 상기 입력 활성화 데이터, 상기 필터 데이터 및 상기 출력 활성화 데이터를 저장하기 위한 메모리
    를 포함하는 장치.
  2. 제1항에 있어서, 상기 계층은 상기 콘볼루션 신경망의 제1 계층이고, 상기 복수의 디스크립터들은 제1 복수의 디스크립터들이고, 상기 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿은 상기 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿이고, 상기 구성 레지스터들은 제2 복수의 디스크립터들을 저장하도록 재구성 가능하고, 상기 제2 복수의 디스크립터들은 상기 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿에 대응하는 제2 데이터 흐름 스케줄에 기초하여 상기 콘볼루션 신경망의 제2 계층을 구현하도록 상기 프로세서 엘리먼트들의 어레이를 구성하고, 상기 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿은 상기 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿과 상이한 장치.
  3. 제2항에 있어서, 상기 복수의 텐서 프로세싱 템플릿들은 벡터-벡터 템플릿, 벡터-매트릭스 템플릿 및 매트릭스-매트릭스 템플릿을 포함하는 장치.
  4. 제1항에 있어서, 상기 프로세서 엘리먼트들의 어레이의 제1 프로세서 엘리먼트는,
    상기 제1 프로세서 엘리먼트에 의해 프로세싱될 제1 입력 활성화 데이터를 저장하기 위한 입력 활성화 레지스터 파일;
    상기 제1 프로세서 엘리먼트에 의해 프로세싱될 제1 필터 데이터를 저장하기 위한 필터 레지스터 파일;
    상기 제1 입력 활성화 데이터 및 상기 제1 필터 데이터에 기초하여 상기 제1 프로세서 엘리먼트에 의해 생성될 제1 출력 활성화 데이터를 저장하기 위한 출력 활성화 레지스터 파일; 및
    상기 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿을 구현하기 위해 상기 제1 프로세서 엘리먼트의 동작을 제어하기 위한 유한 상태 머신(finite state machine)
    을 포함하는 장치.
  5. 제4항에 있어서, 상기 구성 레지스터들은 제1 구성 레지스터들이고, 상기 제1 프로세서 엘리먼트는 상기 디스크립터들 중 적어도 일부의 디스크립터들을 저장하기 위한 제2 구성 레지스터들을 추가로 포함하고, 상기 제2 구성 레지스터들은 상기 유한 상태 머신을 구성하는 장치.
  6. 제4항에 있어서, 상기 제1 프로세서 엘리먼트는,
    상기 제1 입력 활성화 데이터 및 상기 제1 필터 데이터에 대해 곱셈 및 누산(multiplication and accumulation) 연산들을 수행하기 위한 곱셈-및-누산 유닛;
    상기 제1 입력 활성화 데이터에 대해 엘리먼트-별(elementwise) 연산들을 수행하기 위한 엘리먼트-별 계산 유닛;
    상기 제1 출력 활성화 데이터를 생성하기 위해 맥스풀(maxpool) 연산을 수행하기 위한 맥스풀 유닛; 및
    상기 곱셈-및-누산 유닛, 상기 엘리먼트-별 연산 유닛 및 상기 맥스풀 유닛의 연산을 제어하기 위해 상기 유한 상태 머신에 의해 구성 가능한 제어 로직
    을 추가로 포함하는 장치.
  7. 제1항에 있어서, 상기 제1 개수는 상기 제2 개수와 동일한 장치.
  8. 제1항에 있어서, 상기 복수의 디스크립터들을 상기 구성 레지스터들에 기입하는 컴퓨터 명령어들을 실행하기 위한 프로세서를 추가로 포함하는 장치.
  9. 제8항에 있어서, 상기 계층은 상기 콘볼루션 신경망의 제1 계층이고, 상기 복수의 디스크립터들은 제1 복수의 디스크립터들이고, 상기 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿은 상기 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿이고, 상기 프로세서는 상기 구성 레지스터들에 제2 복수의 디스크립터들을 기입하고, 상기 제2 복수의 디스크립터들은 상기 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿에 대응하는 제2 데이터 흐름 스케줄에 기초하여 상기 콘볼루션 신경망의 제2 계층을 구현하도록 상기 프로세서 엘리먼트들의 어레이를 구성하고, 상기 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿은 상기 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿과 상이한 장치.
  10. 컴퓨터 판독 가능 명령어들을 포함하는 비-일시적 컴퓨터 판독 가능 매체로서,
    상기 컴퓨터 판독 가능 명령어들은, 실행될 때, 적어도 하나의 프로세서로 하여금, 적어도
    복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿에 대응하는 제1 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 제1 계층을 구현하도록 프로세서 엘리먼트들의 어레이를 구성하기 위해 구성 레지스터들에 제1 디스크립터 세트를 기입하게 하고 - 상기 어레이는 행들 및 열들을 포함하고, 상기 행들의 각각의 행들은 제1 개수의 프로세서 엘리먼트를 갖고, 상기 열들의 각각의 열들은 제2 개수의 프로세서 엘리먼트를 갖고, 상기 제1 디스크립터 세트는 상기 콘볼루션 신경망의 제1 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 상기 콘볼루션 신경망의 제1 계층과 연관된 출력 활성화 데이터를 생성하기 위해 상기 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿을 구현하도록 상기 프로세서 엘리먼트들의 프로세서 엘리먼트들을 구성함 -,
    상기 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿에 대응하는 제2 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 제2 계층을 구현하도록 상기 프로세서 엘리먼트들의 어레이를 구성하기 위해 상기 구성 레지스터들에 제2 디스크립터 세트를 기입하게 하는 - 상기 제2 디스크립터 세트는 상기 콘볼루션 신경망의 제2 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 상기 콘볼루션 신경망의 제2 계층과 연관된 출력 활성화 데이터를 생성하기 위해 상기 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿을 구현하도록 상기 프로세서 엘리먼트들의 프로세서 엘리먼트들을 구성함 -
    비-일시적 컴퓨터 판독 가능 매체.
  11. 제10항에 있어서, 상기 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿은 상기 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿과 상이한, 비-일시적 컴퓨터 판독 가능 매체.
  12. 제11항에 있어서, 상기 복수의 텐서 프로세싱 템플릿들은 벡터-벡터 템플릿, 벡터-매트릭스 템플릿 및 매트릭스-매트릭스 템플릿을 포함하는, 비-일시적 컴퓨터 판독 가능 매체.
  13. 제10항에 있어서, 상기 명령어들은, 실행될 때, 상기 적어도 하나의 프로세서로 하여금 추가로, 콘볼루션 신경망의 제3 계층을 구현하도록 상기 프로세서 엘리먼트들의 어레이를 구성하기 위해 상기 구성 레지스터들에 제3 디스크립터 세트를 기입하게 하고, 상기 제3 디스크립터 세트는 엘리먼트-별 연산들 또는 맥스풀 연산들 중 적어도 하나의 연산을 수행하도록 상기 프로세서 엘리먼트들의 프로세서 엘리먼트들을 구성하는, 비-일시적 컴퓨터 판독 가능 매체.
  14. 제10항에 있어서, 상기 제1 개수는 상기 제2 개수와 동일한, 비-일시적 컴퓨터 판독 가능 매체.
  15. 콘볼루션 신경망을 구현하기 위한 방법으로서,
    적어도 하나의 프로세서에 의해 명령어를 실행함으로써, 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿에 대응하는 제1 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 제1 계층을 구현하도록 프로세서 엘리먼트들의 어레이를 구성하기 위해 구성 레지스터들에 제1 디스크립터 세트를 기입하는 단계 - 상기 어레이는 행들 및 열들을 포함하고, 상기 행들의 각각의 행들은 제1 개수의 프로세서 엘리먼트를 갖고, 상기 열들의 각각의 열들은 제2 개수의 프로세서 엘리먼트를 갖고, 상기 제1 디스크립터 세트는 상기 콘볼루션 신경망의 제1 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 상기 콘볼루션 신경망의 제1 계층과 연관된 출력 활성화 데이터를 생성하기 위해 상기 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿을 구현하도록 상기 프로세서 엘리먼트들의 프로세서 엘리먼트들을 구성함 -; 및
    적어도 하나의 프로세서에 의해 명령어를 실행함으로써, 상기 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿에 대응하는 제2 데이터 흐름 스케줄에 기초하여 콘볼루션 신경망의 제2 계층을 구현하도록 상기 프로세서 엘리먼트들의 어레이를 구성하기 위해 상기 구성 레지스터들에 제2 디스크립터 세트를 기입하는 단계 - 상기 제2 디스크립터 세트는 상기 콘볼루션 신경망의 제2 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 상기 콘볼루션 신경망의 제2 계층과 연관된 출력 활성화 데이터를 생성하기 위해 상기 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿을 구현하도록 상기 프로세서 엘리먼트들의 프로세서 엘리먼트들을 구성함 -
    를 포함하는 방법.
  16. 제15항에 있어서, 상기 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿은 상기 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿과 상이한 방법.
  17. 제16항에 있어서, 상기 복수의 텐서 프로세싱 템플릿들은 벡터-벡터 템플릿, 벡터-매트릭스 템플릿 및 매트릭스-매트릭스 템플릿을 포함하는 방법.
  18. 제15항에 있어서, 콘볼루션 신경망의 제3 계층을 구현하도록 상기 프로세서 엘리먼트들의 어레이를 구성하기 위해 상기 구성 레지스터들에 제3 디스크립터 세트를 기입하는 단계를 추가로 포함하고, 상기 제3 디스크립터 세트는 엘리먼트-별 연산들 또는 맥스풀 연산들 중 적어도 하나의 연산을 수행하도록 상기 프로세서 엘리먼트들의 프로세서 엘리먼트들을 구성하는 방법.
  19. 제15항에 있어서, 상기 제1 개수는 상기 제2 개수와 동일한 방법.
  20. 콘볼루션 신경망을 구현하기 위한 장치로서,
    프로세서 엘리먼트들의 어레이 - 상기 어레이는 행들 및 열들을 포함하고, 상기 행들의 각각의 행들은 제1 개수의 프로세서 엘리먼트를 갖고, 상기 열들의 각각의 열들은 제2 개수의 프로세서 엘리먼트를 가짐 -;
    복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿에 대응하는 데이터 흐름 스케줄에 기초하여 상기 콘볼루션 신경망의 계층을 구현하도록 복수의 디스크립터들에 기초하여 상기 프로세서 엘리먼트들의 어레이를 구성하기 위한 수단 - 상기 디스크립터들은 상기 콘볼루션 신경망의 계층과 연관된 입력 활성화 데이터 및 필터 데이터에 대해 동작하여 상기 콘볼루션 신경망의 계층과 연관된 출력 활성화 데이터를 생성하기 위해 상기 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿을 구현하도록 상기 프로세서 엘리먼트들의 프로세서 엘리먼트들을 구성함 -; 및
    상기 콘볼루션 신경망의 계층과 연관된 상기 입력 활성화 데이터, 상기 필터 데이터 및 상기 출력 활성화 데이터를 저장하기 위한 수단
    을 포함하는 장치.
  21. 제20항에 있어서, 상기 계층은 상기 콘볼루션 신경망의 제1 계층이고, 상기 복수의 디스크립터들은 제1 복수의 디스크립터들이고, 상기 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿은 상기 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿이고, 상기 구성하기 위한 수단은 상기 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿에 대응하는 제2 데이터 흐름 스케줄에 기초하여 상기 콘볼루션 신경망의 제2 계층을 구현하도록 제2 복수의 디스크립터들에 기초하여 상기 프로세서 엘리먼트들의 어레이를 구성하고, 상기 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿은 상기 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿과 상이한 장치.
  22. 제21항에 있어서, 상기 복수의 텐서 프로세싱 템플릿들은 벡터-벡터 템플릿, 벡터-매트릭스 템플릿 및 매트릭스-매트릭스 템플릿을 포함하는 장치.
  23. 제20항에 있어서, 상기 제1 개수는 상기 제2 개수와 동일한 장치.
  24. 제20항에 있어서, 상기 프로세서 엘리먼트들의 어레이를 구성하기 위한 수단에 상기 복수의 디스크립터들을 로드하기 위한 수단을 추가로 포함하는 장치.
  25. 제24항에 있어서, 상기 계층은 상기 콘볼루션 신경망의 제1 계층이고, 상기 복수의 디스크립터들은 제1 복수의 디스크립터들이고, 상기 복수의 텐서 프로세싱 템플릿들 중 하나의 텐서 프로세싱 템플릿은 상기 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿이고, 상기 로드하기 위한 수단은 상기 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿에 대응하는 제2 데이터 흐름 스케줄에 기초하여 상기 콘볼루션 신경망의 제2 계층을 구현하도록 상기 프로세서 엘리먼트들의 어레이를 구성하기 위해 상기 구성하기 위한 수단에 제2 복수의 디스크립터들을 로드하고, 상기 복수의 텐서 프로세싱 템플릿들 중 제2 텐서 프로세싱 템플릿은 상기 복수의 텐서 프로세싱 템플릿들 중 제1 텐서 프로세싱 템플릿과 상이한 장치.
KR1020200120679A 2019-12-24 2020-09-18 콘볼루션 신경망들을 구현하기 위한 구성 가능형 프로세서 엘리먼트 어레이들 KR20210082058A (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/726,709 US20200134417A1 (en) 2019-12-24 2019-12-24 Configurable processor element arrays for implementing convolutional neural networks
US16/726,709 2019-12-24

Publications (1)

Publication Number Publication Date
KR20210082058A true KR20210082058A (ko) 2021-07-02

Family

ID=70326906

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200120679A KR20210082058A (ko) 2019-12-24 2020-09-18 콘볼루션 신경망들을 구현하기 위한 구성 가능형 프로세서 엘리먼트 어레이들

Country Status (5)

Country Link
US (1) US20200134417A1 (ko)
KR (1) KR20210082058A (ko)
CN (1) CN113033765A (ko)
DE (1) DE102020131050A1 (ko)
TW (1) TW202127324A (ko)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11328037B2 (en) * 2017-07-07 2022-05-10 Intel Corporation Memory-size- and bandwidth-efficient method for feeding systolic array matrix multipliers
US11422781B1 (en) * 2020-02-04 2022-08-23 Xilinx, Inc. Generation of vector codes for tensor convolutions
US11507831B2 (en) * 2020-02-24 2022-11-22 Stmicroelectronics International N.V. Pooling unit for deep learning acceleration
US11537860B2 (en) * 2020-03-23 2022-12-27 Arm Limited Neural net work processing
CN112100118B (zh) * 2020-08-05 2021-09-10 中科驭数(北京)科技有限公司 神经网络计算方法、装置和存储介质
US20220114135A1 (en) * 2020-09-21 2022-04-14 Mostafizur Rahman Computer architecture for artificial intelligence and reconfigurable hardware
US11928472B2 (en) 2020-09-26 2024-03-12 Intel Corporation Branch prefetch mechanisms for mitigating frontend branch resteers
US20220147826A1 (en) * 2020-11-06 2022-05-12 Moffett Technologies Co., Limited Method and system for convolution with workload-balanced activation sparsity
US11971949B2 (en) * 2020-12-21 2024-04-30 Samsung Electronics Co., Ltd. Flexible-access instructions for efficient access of ML data
US11922178B2 (en) 2021-06-25 2024-03-05 Intel Corporation Methods and apparatus to load data within a machine learning accelerator
US11494627B1 (en) * 2021-07-08 2022-11-08 Hong Kong Applied Science and Technology Research Institute Company Limited Dynamic tile parallel neural network accelerator
US20220075659A1 (en) * 2021-11-18 2022-03-10 Intel Corporation Runtime configurable register files for artificial intelligence workloads
US20230177000A1 (en) * 2021-12-07 2023-06-08 Centre For Intelligent Multidimensional Data Analysis Limited Tensor processor and a method for processing tensors
CN114327676A (zh) * 2021-12-28 2022-04-12 北京航天自动控制研究所 一种面向卷积神经网络的高可靠加速器
WO2023129491A1 (en) * 2021-12-31 2023-07-06 Ascenium, Inc. Compute element processing using control word templates
US20230259758A1 (en) * 2022-02-16 2023-08-17 Moffett International Co., Limited Adaptive tensor compute kernel for sparse neural network
CN115600652B (zh) * 2022-11-29 2023-04-07 深圳市唯特视科技有限公司 卷积神经网络处理装置、高速目标探测方法以及设备
CN116702852B (zh) * 2023-08-02 2023-10-20 电子科技大学 基于多阶段事件驱动的动态重构神经网络加速电路及系统

Also Published As

Publication number Publication date
US20200134417A1 (en) 2020-04-30
DE102020131050A1 (de) 2021-06-24
CN113033765A (zh) 2021-06-25
TW202127324A (zh) 2021-07-16

Similar Documents

Publication Publication Date Title
KR20210082058A (ko) 콘볼루션 신경망들을 구현하기 위한 구성 가능형 프로세서 엘리먼트 어레이들
KR102492477B1 (ko) 행렬 곱셈기
US11804851B2 (en) Methods, systems, articles of manufacture, and apparatus to decode zero-value-compression data vectors
KR101959376B1 (ko) 멀티 코어 최적화된 순환 신경망을 위한 시스템 및 방법
US8412917B2 (en) Data exchange and communication between execution units in a parallel processor
US20210216318A1 (en) Vector Processor Architectures
CN108268283A (zh) 用于利用约简操作来支持数据并行循环的计算引擎架构
CN108268424A (zh) 用于处理具有偏斜非零分布的稀疏矩阵数据的异构硬件加速器架构
KR102572757B1 (ko) 집약성을 개선하기 위한 머신 학습 모델들의 수정
US20080250227A1 (en) General Purpose Multiprocessor Programming Apparatus And Method
GB2474901A (en) Multiply-accumulate instruction which adds or subtracts based on a predicate value
CN110073329A (zh) 访存设备、计算设备和应用于卷积神经网络运算的设备
CN111105023B (zh) 数据流重构方法及可重构数据流处理器
CN109643233A (zh) 具有带读取和读取/前进操作数编码的流引擎的数据处理设备
CN112860320A (zh) 基于risc-v指令集进行数据处理的方法、系统、设备及介质
KR20220038148A (ko) 공유 스크래치패드 메모리를 사용한 벡터 축소들
KR20200083123A (ko) 로드-저장 명령
US20240036763A1 (en) Methods, apparatus, and articles of manufacture to increase data reuse for multiply and accumulate (mac) operations
Gan et al. Data flow computing in geoscience applications
US11347828B2 (en) Methods, apparatus, articles of manufacture to perform accelerated matrix multiplication
CN116301920A (zh) 一种用于部署cnn模型至基于fpga的高性能加速器的编译系统
US11949414B2 (en) Methods, apparatus, and articles of manufacture to improve in-memory multiply and accumulate operations
KR20230082621A (ko) 얕은 파이프라인을 갖는 고도의 병렬 처리 아키텍처
CN102446086A (zh) 一种可参量化专用指令集处理器设计平台
CN112906877A (zh) 用于执行神经网络模型的存储器架构中的数据布局有意识处理

Legal Events

Date Code Title Description
A201 Request for examination