KR20200128360A - 뎁스 와이즈 컨벌루션 혼합-정밀도 앤피유 타일 - Google Patents

뎁스 와이즈 컨벌루션 혼합-정밀도 앤피유 타일 Download PDF

Info

Publication number
KR20200128360A
KR20200128360A KR1020200052369A KR20200052369A KR20200128360A KR 20200128360 A KR20200128360 A KR 20200128360A KR 1020200052369 A KR1020200052369 A KR 1020200052369A KR 20200052369 A KR20200052369 A KR 20200052369A KR 20200128360 A KR20200128360 A KR 20200128360A
Authority
KR
South Korea
Prior art keywords
activation function
ifm
tile
lanes
convolution
Prior art date
Application number
KR1020200052369A
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 KR20200128360A publication Critical patent/KR20200128360A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • 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
    • 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/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/048Activation functions
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

프로세서 및 프로세스 회로를 이용하여 연산 방법이 제공된다.

Description

뎁스 와이즈 컨벌루션 혼합-정밀도 앤피유 타일{MIXED-PRECISION NEURAL-PROCESSING UNIT TILE WITH DEPTH-WISE CONVOLUTION}
관련 출원들과의 상호참조
본원은 2019년 5월 1일자 "심도별 컨볼루션을 수행하는 혼합 정밀도 NPU 타일(MIXED-PRECISION NPU TILE WITH DEPTH-WISE CONVOLUTION)"이라는 명칭으로 출원된 미국특허가출원 제62/841,590호에 대한 우선권을 주장하는 바, 그 전체적 내용은 이 명세서에 참고로 포함되어 있다.
본원은 2019년 6월 19일자 "신경망 프로세서(NEURAL PROCESSOR)"라는 명칭으로 출원된 미국특허출원 제16/446,610호("'610 출원")와 관련되는 바, 그 전체적 내용은 이 명세서에 참고로 포함되어 있다.
기술분야
본 발명에 따른 실시예들의 하나 이상의 국면(aspect)들은 신경망 프로세서, 더 구체적으로는 심도별 컨볼루션(depth-wise convolution)을 수행하는 혼합 정밀도 신경망 프로세서에 관련된다.
신경망 처리 유닛(neural processing unit (NPU) 또는 "신경망 프로세서; neural processor)"에 수행되는 흔한 작동은 활성화 함수(activation)(또는 입력 특성맵(input feature map; IFM)의 텐서(tensor)를 컨볼루션 커널(convolution kernel)과 컨볼루션(곱)하는 것이다. 미국특허출원 제 16/446'610호에 기재된 신경망 프로세서는 심도 우선 순서(depth-major order)로 저장된 활성화 함수 데이터 텐서들에 직접 컨볼루션을 수행할 수 있다. 그러나 심층 신경망 모델(deep neural network model)들은 전술한 NPU들이 지원하지 않는 "심도별로 분리 가능한(depth-wise separable)" 컨볼루션이라 지칭되는 어떤 종류의 컨볼루션을 수행할 수 있다. 또한 심층 신경망 모델들은 흔히, 화상 데이터가 전술한 NPU가 지원하지 않는 평면별(planar-wise) 순서로 종래와 같이(traditionally) 저장될 때, 예를 들어 RGB 화상 등의 화상 데이터에 직접 컨볼루션을 수행할 수 있다. 뿐만 아니라, 종종 0 또는 비0 값을 가지는 활성화 함수 및/또는 가중치(weight)들을 이용하여 NPU 마이크로 아키텍처를 최적화함으로써 연산 정밀도와 스루풋(throughput)을 유지하면서 전술한 NPU의 전력 소모와 실리콘 면적을 저감시킬 수 있다.
이에 따라, 심도별 컨볼루션을 수행하고, 평면별 순서로 저장된 화상 데이터에 직접 컨볼루션을 수행하며, 활성화 함수 및/또는 가중치들이 종종 0값 또는 비0값을 가질 때 효율적으로 컨볼루션을 수행하기에 적합한 신경망 프로세서에 대한 요구가 존재한다.
본 발명의 기술적 과제는 프로세서와, 처리 회로로 연산하는 방법을 제공하는 것이다.
본 발명의 일부 실시예들에 따르면, 제1 타일(tile)과, 제2 타일과, 메모리와, 및 버스를 포함하는 프로세서로,
버스가: 메모리와, 제1 타일과, 및 제2 타일에 연결되고,
제1 타일이 제1 가중치 레지스터(register)와, 제2 가중치 레지스터와, 활성화 함수 캐시(cache)와, 셔플러(shuffler)와, 활성화 함수 버퍼(buffer)와, 제1 승산기(multiplier)와, 및 제2 승산기를 포함하며,
활성화 함수 버퍼가: 제1 승산기에 연결된 제1 대기 행렬(queue)과, 제2 승산기에 연결된 제2 대기 행렬을 포함하도록 구성되고,
활성화 함수 캐시가 복수의 독립적인 레인(lane)들을 포함하고, 각 독립적 레인은 랜덤하게(randomly) 액세스 가능(accessible)하며,
제1 타일이: 각각 복수의 칼라 요소(color component)들을 가지는 복수의 화소(pixel)들을 포함하는 화상을 나타내는 활성화 함수들의 텐서를 수신하는데, 텐서가 각각 화상의 한 칼라 요소를 나타내는 복수의 2차원 어레이(array)들을 포함하고;
2차원 어레이들의 하나와 커널의 컨볼루션을 수행하도록 구성되는
프로세서가 제공된다.
일부 실시예들에서, 셔플러는 활성화 함수 캐시의 출력에 연결된다.
일부 실시예들에서, 제1 타일은 복수의 열(column)들과 복수의 레인들로 배열된, 제1 승산기와 제2 승산기를 포함하는 복수의 승산기들을 포함하는데, 레인들은 4의 그룹(group)들로 배열되고, 레인들의 각 그룹은 승산기들의 출력을 합산하는(summing) 가산기 트리(adder tree)를 포함한다.
일부 실시예들에서, 제1 타일은 각 레인들의 그룹에 대해 가산기 트리의 출력들을 누적 연산(accumulating)하는 누산기(accumulator)를 더 포함한다.
일부 실시예들에서, 제1 타일은 네 레인들의 그룹들의 집합(set)에 대해:
적어도 하나의 최상위 니블(most significant nibble)을 포함하는 곱(product)들을 두 최하위 니블(least significant nibble)들을 포함하는 곱들로부터 편이(offset)되도록 시프팅(shifting)시키는 복수의 비트 시프터(bit shifter)들과, 비트 시프터들의 출력들을 누적 합산하는 복수의 누산기들을 더 포함한다.
일부 실시예들에서, 셔플러는 4 레인의 입도(granularity)를 가진다.
일부 실시예들에서, 셔플러는 1 레인의 입도를 가진다.
일부 실시예들에서, 셔플러는 활성화 함수 캐시의 입력에 연결된다.
일부 실시예들에서, 제1 타일은 복수의 열들과 복수의 레인들로 배열된, 제1 승산기와 제2 승산기를 포함하는 복수의 승산기들을 포함하는데, 레인들은 4의 그룹들로 배열되고, 레인들의 각 그룹은 승산기들의 출력을 합산하는 가산기 트리를 포함한다.
일부 실시예들에서, 제1 타일은 각 레인들의 그룹에 대해 가산기 트리의 출력들을 누적 합산하는 누산기를 더 포함한다.
일부 실시예들에서, 제1 타일은 네 레인들의 그룹들의 집합에 대해:
적어도 하나의 최상위 니블을 포함하는 곱들을 두 최하위 니블들을 포함하는 곱들로부터 편이 되도록 시프팅시키는 복수의 비트 시프터들과, 비트 시프터들의 출력들을 누적 연산하는 복수의 누산기들을 더 포함한다.
일부 실시예들에서, 셔플러는 4 레인의 입도를 가진다.
일부 실시예들에서, 셔플러는 1 레인의 입도를 가진다.
본 발명의 일부 실시예들에 따르면 처리 회로(processing circuit)로 연산하는 방법이 제공되는데, 이 처리 회로는 제1 타일과, 제2 타일과, 메모리와, 및 버스를 포함하며,
버스가: 메모리와, 제1 타일과, 및 제2 타일에 연결되고,
제1 타일이 제1 가중치 레지스터와, 제2 가중치 레지스터와, 활성화 함수 캐시와, 셔플러와, 활성화 함수 버퍼와, 제1 승산기와, 및 제2 승산기를 포함하며,
활성화 함수 버퍼가: 제1 승산기에 연결된 제1 대기 행렬(queue)과, 제2 승산기에 연결된 제2 대기 행렬을 포함하도록 구성되고,
활성화 함수 캐시가 복수의 독립적인 레인들을 포함하고, 각 독립적 레인은 랜덤하게 액세스 가능하며,
방법이: 각각 복수의 칼라 요소들을 가지는 복수의 화소들을 포함하는 화상을 나타내는 활성화 함수들의 텐서를 수신하는 단계로, 텐서가 각각 화상의 한 칼라 요소를 나타내는 복수의 2차원 어레이들을 포함하는 단계와; 2차원 어레이들의 하나와 커널의 컨볼루션을 수행하는 단계를 포함한다.
일부 실시예들에서, 셔플러는 활성화 함수 캐시의 출력에 연결된다.
일부 실시예들에서, 제1 타일은 복수의 열들과 복수의 레인들로 배열된, 제1 승산기와 제2 승산기를 포함하는 복수의 승산기들을 포함하는데, 레인들은 4의 그룹들로 배열되고, 레인들의 각 그룹은 승산기들의 출력을 합산하는 가산기 트리를 포함한다.
일부 실시예들에서, 제1 타일은 각 레인들의 그룹에 대해 가산기 트리의 출력들을 누적 연산하는 누산기를 더 포함한다.
일부 실시예들에서, 제1 타일은 네 레인들의 그룹들의 집합에 대해:
적어도 하나의 최상위 니블을 포함하는 곱들을 두 최하위 니블들을 포함하는 곱들로부터 편이 되도록 시프팅시키는 복수의 비트 시프터들과, 비트 시프터들의 출력들을 누적 연산하는 복수의 누산기들을 더 포함한다.
일부 실시예들에서, 셔플러는 4 레인의 입도를 가진다.
본 발명의 일부 실시예들에 따르면 처리 수단(means for processing)으로 연산하는 방법이 제공되는데, 이 처리 수단은 제1 타일과, 제2 타일과, 메모리와, 및 버스를 포함하며,
버스가: 메모리와, 제1 타일과, 및 제2 타일에 연결되고,
제1 타일이 제1 가중치 레지스터와, 제2 가중치 레지스터와, 활성화 함수 캐시와, 셔플러와, 활성화 함수 버퍼와, 제1 승산기와, 및 제2 승산기를 포함하며,
활성화 함수 버퍼가: 제1 승산기에 연결된 제1 대기 행렬(queue)과, 제2 승산기에 연결된 제2 대기 행렬을 포함하도록 구성되고,
활성화 함수 캐시가 복수의 독립적인 레인들을 포함하고, 각 독립적인 레인은 랜덤하게 액세스 가능하며,
방법이: 각각 복수의 칼라 요소들 가지는 복수의 화소들을 포함하는 화상을 나타내는 활성화 함수들의 텐서를 수신하는 단계로, 텐서가 각각 화상의 한 칼라 요소를 나타내는 복수의 2차원 어레이들을 포함하는 단계와; 2차원 어레이들의 하나와 커널의 컨볼루션을 수행하는 단계를 포함한다.
본 발명은 이들 및 다른 특징과 이점들은 명세서와, 청구항들과, 및 첨부된 도면들로 명확해질 것인데, 도면에서:
도 1a는 본 발명의 한 실시예와 '610 출원에 따른 신경망 프로세서 유닛의 블록도.
도 1b는 도 1a는 본 발명의 한 실시예와 '610 출원에 따른 승산 리듀스 타일(multiply-reduce tile)의 블록도.
도 1c는 '610 출원에 기재된 바와 같은 0 활성화 함수 스킵(skipping)의 예의 한 단계를 보이는 도면.
도 1d는 '610 출원에 기재된 바와 같은 0 활성화 함수 스킵의 예의 한 단계를 보이는 도면.
도 1e는 '610 출원에 기재된 바와 같은 0 활성화 함수 스킵의 예의 한 단계를 보이는 도면.
도 1f는 '610 출원에 기재된 바와 같은 0 활성화 함수 스킵의 예의 한 단계를 보이는 도면.
도 1g는 '610 출원에 기재된 바와 같은 0 활성화 함수 스킵을 촉진하는 가산기 트리 쌍들을 보이는 도면.
도 1h는 '610 출원에 기재된 바와 같은 0 활성화 함수 스킵을 촉진하는 IFM 버퍼를 구비하는 예견 로직의 블록도.
도 1i는 '610 출원에 기재된 바와 같은 0 활성화 함수 스킵을 촉진하는 IFM 버퍼를 구비하는 예견 및 검색 로직의 블록도.
도 1j는 '610 출원에 기재된 바와 같은 IFM을 구비하는 누산 및 반환 유닛(accumulate-and-return unit) 로직의 블록도.
도 2a는 5행 바이 12열의 평면 크기와 16채널의 심도를 가지는 3D IFM 텐서를 보이는 도면.
도 2ba 및 2bb는 심도 우선 데이터 순서를 사용하여 메모리에 저장된, 5행 바이 12열의 평면 크기와 16채널의 심도를 가지는 3D IFM 텐서를 보이는 도면.
도 2c는 5행 바이 12열의 평면 크기와 32채널의 심도를 가지는 3D IFM 텐서를 보이는 도면.
도 2da 및 2db는 심도 우선 데이터 순서를 사용하여 메모리에 저장된, 5행 바이 12열의 평면 크기와 32채널의 심도를 가지는 3D IFM 텐서를 보이는 도면.
도 2e는 5행 바이 12열의 평면 크기와 3채널의 심도를 가지는 3D IFM 텐서에 적용된 심도별 분리 가능한 컨볼루션을 보이는 도면.
도 2fa, 2fb, 2fc, 및 2fd는 3D IFM 텐서에 심도별 분리 가능한 컨볼루션 연산을 위해 수정된 승산 리듀스 타일의 블록도.
도 2ga 및 2gb는 3x3x16 심도별 분리 가능한 컨볼루션 연산의 예의 한 단계를 보이는 도면.
도 2ha 및 2hb는 3x3x16 심도별 분리 가능한 컨볼루션 연산의 예의 한 단계를 보이는 도면.
도 2ia 및 2ib는 3x3x16 심도별 분리 가능한 컨볼루션 연산의 예의 한 단계를 보이는 도면.
도 2ja 및 2jb는 3x3x16 심도별 분리 가능한 컨볼루션 연산의 예의 한 단계를 보이는 도면.
도 2k는 심도별 분리 가능한 컨볼루션 연산에 의해 사용되는 배럴 시프트 유닛(배럴 시프트 유닛)들의 마이크로아키텍처를 보이는 도면.
도 2l은 심도별 분리 가능한 컨볼루션 연산에 의해 사용되도록 수정된 누산 및 반환 유닛의 마이크로아키텍처를 보이는 도면.
도 2m은 몇 개의 평면 위치들에서 심도별 분리 가능한 컨볼루션을 연산하는 데 사용되는 활성화 함수 값의 예로, 이러한 각 평면 위치의 컨볼루션 창은 활성화 함수 값에 중첩된다.
도 2n은 몇 개의 평면 위치들에서 심도별 분리 가능한 컨볼루션을 연산하는 데 사용되는 활성화 함수 값의 예로, 이러한 각 평면 위치의 컨볼루션 창은 활성화 함수 값에 중첩된다.
도 3a는 1의 배치 크기를 가지는 ARGB IFM 텐서의 조성을 보이는 도면.
도 3b는 ARGB IFM 텐서 값들이 SRAM에 저장되는 순서를 보이는 도면.
도 3ca 및 3cb는 ARGB 컨볼루션을 수행하는 승산 리듀스 타일을 보이는 도면.
도 3da 및 3db는 ARGB 컨볼루션을 수행하는 승산 리듀스 타일을 보이는 도면.
도 3ea 및 3eb는 ARGB 컨볼루션을 수행하는 승산 리듀스 타일을 보이는 도면.
도 3fa 및 3fb는 ARGB 컨볼루션을 수행하는 승산 리듀스 타일을 보이는 도면.
도 3ga 및 3gb는 ARGB 컨볼루션을 수행하는 승산 리듀스 타일을 보이는 도면.
도 3ha 및 3hb는 ARGB 컨볼루션을 수행하는 승산 리듀스 타일을 보이는 도면.
도 3ia 및 3ib는 ARGB 컨볼루션을 수행하는 승산 리듀스 타일을 보이는 도면.
도 3ja 및 3jb는 ARGB 컨볼루션을 수행하는 승산 리듀스 타일을 보이는 도면.
도 3k는 ARGB 컨볼루션을 위해 사용되는 어레이 인터리브(arrayed interleaved) 배럴 시프트 유닛의 블록도.
도 3la 및 3lb는 ARGB 컨볼루션의 대체적인 실시예의 예의 한 단계를 보이는 도면.
도 3ma 및 3mb는 ARGB 컨볼루션의 대체적인 실시예의 예의 한 단계를 보이는 도면.
도 3na 및 3nb는 ARGB 컨볼루션의 대체적인 실시예의 예의 한 단계를 보이는 도면.
도 3oa 및 3ob는 ARGB 컨볼루션의 대체적인 실시예의 예의 한 단계를 보이는 도면.
도 3pa 및 3pb는 ARGB 컨볼루션의 대체적인 실시예의 예의 한 단계를 보이는 도면.
도 3qa 및 3qb는 ARGB 컨볼루션의 대체적인 실시예의 예의 한 단계를 보이는 도면.
도 3r은 ARGB 컨볼루션의 대체적인 실시예를 위해 사용되는 어레이 인터리브 배럴 시프트 유닛의 블록도.
도 3sa 및 3sb는 IFM 캐시로부터의 알파값들이 승산 리듀스 어레이에 도달하지 않는 경우의 ARGB 컨볼루션 실시예를 보이는 도면.
도 3t는 IFM 캐시로부터의 알파값들이 승산 리듀스 어레이에 도달하지 않는 경우의 ARGB 컨볼루션에 사용되는 ARGB-to-RGB 배럴 시프트 유닛의 마이크로아키텍처를 보이는 도면.
도 3ua 및 3ub는 IFM 캐시로부터의 알파값들이 승산 리듀스 어레이에 도달하지 않는 경우의 ARGB 컨볼루션에 사용되는 ARGB-투-RGB 배럴 시프트 유닛의 마이크로 아키텍처를 보이는 도면.
도 3va, 3vb, 3vc, 및 3vd는 IFM 캐시로부터의 알파값들이 승산 리듀스 어레이에 도달하지 않는 경우의 ARGB 컨볼루션에 사용되는 ARGB-투-RGB 배럴 시프트 유닛의 마이크로 아키텍처를 보이는 도면.
도 3w는 3D IFM 텐서 형상의 RGB 화상을 보이는 도면.
도 3x는 RGB IFM 텐서 값들이 SRAM에 저장될 수 있는 순서를 보이는 도면.
도 3ya 및 3yb는 RGB 컨볼루션의 한 예를 보이는 도면.
도 3za 및 3zb는 RGB 컨볼루션의 한 예를 보이는 도면.
도 3zc 및 3zd는 RGB 컨볼루션의 한 예를 보이는 도면.
도 3ze 및 3zf는 RGB 컨볼루션의 한 예를 보이는 도면.
도 4aa, 4ab, 4ac, 및 4ad는 8비트-바이-8비트로부터 4비트-바이-4비트 또는 4비트-바이-8비트로 축소된 승산기 유닛(126)들의 비트폭을 가지는 승산 리듀스 타일의 한 실시예를 보이는 도면.
도 4ba 및 4bb는 8비트-바이-8비트 폭을 가지는 승산기 유닛의 기준(baseline) 마이크로 아키텍처를 보이는 도면.
도 4c는 승산기가 8-바이-8의 비트폭을 가질 때, 출력 결과의 부호를 연산하여 무부호 곱을 부호가 있는 2의 보수 포맷으로 변환하는 승산기 유닛 모듈의 마이크로아키텍처를 보이는 도면.
도 4da, 4db, 및 4dc은 8비트 가중치와 4비트 활성화 함수들을 가지는 승산기 유닛의 실시예를 보이는 도면.
도 4e는 승산기가 8-바이-4의 비트폭을 가질 때, 출력 결과의 부호를 연산하여 무부호 곱을 부호가 있는 2의 보수 포맷으로 변환하는 승산기 유닛 모듈의 마이크로 아키텍처를 보이는 도면.
도 4fa 및 4fb는 4비트 가중치와 4비트 활성화 함수들로 작동하는 승산기 유닛의 실시예를 보이는 도면.
도 4g는 승산기가 4-바이-4의 비트폭을 가질 때, 출력 결과의 부호를 연산하여 무부호 곱을 부호가 있는 2의 보수 포맷으로 변환하는 승산기 유닛 모듈의 마이크로 아키텍처를 보이는 도면.
도 4h는 8-바이-4 비트 승산기를 사용하면서, 8비트 활성화 함수 및 8비트 가중치들을 사용하는 승산 리듀스 타일 작동의 한 예를 보이는 도면.
도 4i는 8-바이-4 비트 승산기를 사용하면서, 8비트 활성화 함수 및 8비트 가중치들을 사용하는 승산 리듀스 타일 작동의 한 예를 보이는 도면.
도 4j는 8-바이-4 비트 승산기를 사용하면서, 8비트 활성화 함수 및 8비트 가중치들을 사용하는 승산 리듀스 타일 작동의 한 예를 보이는 도면.
도 4k는 8-바이-4 비트 승산기를 사용하면서, 8비트 활성화 함수 및 8비트 가중치들을 사용하는 승산 리듀스 타일 작동의 한 예를 보이는 도면.
도 5aa, 5ab, 5ac, 및 5ad는 연산 스루풋을 향상시키기 위해 각 활성화 함수 4중쌍 내에서 활성화 함수 레인 셔플링을 사용하는 승산 리듀스 타일의 한 실시예를 보이는 도면.
도 5b는 승산 리듀스 타일의 기준 실시예에 추가되는 16레인의 IFM 셔플러 유닛을 보이는 도면.
도 5c는 버터플라이 셔플러를 구축하는 기본적 구성 블록을 보이는 블록도.
도 5d는 4채널 버터플라이 셔플러의 블록도.
도 5e는 8채널 버터플라이 셔플러의 블록도.
도 5fa 및 5fb는 16채널 버터플라이 셔플러의 블록도.
도 5g는 버터플라이 셔플러의 제어 신호들을 구성하는 의사 랜덤 생성기를 보이는 블록도.
도 6a, 6b, 6c, 6d는 각 가중치 레지스터가 두 승산기들에 공유될 때, 승산 리듀스 타일 실시예를 보이는 블록도.
도 7a는 IFM 텐서를 지그재그 형태로 횡단하는 2x2 평면 크기의 컨볼루션 창의 한 단계를 보이는 도면.
도 7b는 IFM 텐서를 지그재그 형태로 횡단하는 2x2 평면 크기의 컨볼루션 창의 한 단계를 보이는 도면.
도 7c는 IFM 텐서를 지그재그 형태로 횡단하는 2x2 평면 크기의 컨볼루션 창의 한 단계를 보이는 도면.
도 7d는 IFM 텐서를 지그재그 형태로 횡단하는 2x2 평면 크기의 컨볼루션 창의 한 단계를 보이는 도면.
도 7e는 IFM 텐서를 지그재그 형태로 횡단하는 2x2 평면 크기의 컨볼루션 창의 한 단계를 보이는 도면.
도 7f는 IFM 텐서를 지그재그 형태로 횡단하는 2x2 평면 크기의 컨볼루션 창의 한 단계를 보이는 도면.
도 7g는 IFM 텐서를 지그재그 형태로 횡단하는 2x2 평면 크기의 컨볼루션 창의 한 단계를 보이는 도면.
도 7h는 IFM 텐서를 지그재그 형태로 횡단하는 2x2 평면 크기의 컨볼루션 창의 한 단계를 보이는 도면.
도 8a는 연산된 컨볼루션 결과들을 보이는 도면.
도 8b는 연산된 컨볼루션 결과들을 보이는 도면.
도 8c는 연산된 컨볼루션 결과들을 보이는 도면.
도 8d는 연산된 컨볼루션 결과들을 보이는 도면.
도 8e는 연산된 컨볼루션 결과들을 보이는 도면.
도 8f는 연산된 컨볼루션 결과들을 보이는 도면.
도 8g는 연산된 컨볼루션 결과들을 보이는 도면.
도 8h는 연산된 컨볼루션 결과들을 보이는 도면.
도 9a는 도 6에 도시된 실시예를 사용하는 승산 리듀스 타일들로 연산될 수 있는 컨볼루션 창 쌍의 평면 위치들을 보이는 도면.
도 9b는 도 6에 도시된 실시예를 사용하는 승산 리듀스 타일들로 연산될 수 있는 컨볼루션 창 쌍의 평면 위치들을 보이는 도면.
도 9c는 도 6에 도시된 실시예를 사용하는 승산 리듀스 타일들로 연산될 수 있는 컨볼루션 창 쌍의 평면 위치들을 보이는 도면.
도 9d는 도 6에 도시된 실시예를 사용하는 승산 리듀스 타일들로 연산될 수 있는 컨볼루션 창 쌍의 평면 위치들을 보이는 도면.
도 10a는 연산된 컨볼루션 결과들을 보이는 도면.
도 10b는 연산된 컨볼루션 결과들을 보이는 도면.
도 10c는 연산된 컨볼루션 결과들을 보이는 도면.
도 10d는 연산된 컨볼루션 결과들을 보이는 도면.
도 11a는 2x1 컨볼루션 창 쌍을 보이는 도면.
도 11b는 2x1 컨볼루션 창 쌍을 보이는 도면.
도 11c는 2x1 컨볼루션 창 쌍을 보이는 도면.
도 11d는 2x1 컨볼루션 창 쌍을 보이는 도면.
도 11e는 2x1 컨볼루션 창 쌍을 보이는 도면.
도 11f는 2x1 컨볼루션 창 쌍을 보이는 도면.
도 11g는 2x1 컨볼루션 창 쌍을 보이는 도면.
도 11h는 2x1 컨볼루션 창 쌍을 보이는 도면.
도 12a는 연산된 컨볼루션 결과들을 보이는 도면.
도 12b는 연산된 컨볼루션 결과들을 보이는 도면.
도 12c는 연산된 컨볼루션 결과들을 보이는 도면.
도 12d는 연산된 컨볼루션 결과들을 보이는 도면.
도 12e는 연산된 컨볼루션 결과들을 보이는 도면.
도 12f는 연산된 컨볼루션 결과들을 보이는 도면.
도 12g는 연산된 컨볼루션 결과들을 보이는 도면.
도 12h는 연산된 컨볼루션 결과들을 보이는 도면.
도 13a는 1x2 컨볼루션 창 쌍을 보이는 도면.
도 13b는 1x2 컨볼루션 창 쌍을 보이는 도면.
도 13c는 1x2 컨볼루션 창 쌍을 보이는 도면.
도 13d는 1x2 컨볼루션 창 쌍을 보이는 도면.
도 13e는 1x2 컨볼루션 창 쌍을 보이는 도면.
도 13f는 1x2 컨볼루션 창 쌍을 보이는 도면.
도 14a는 연산된 컨볼루션 결과들을 보이는 도면.
도 14b는 연산된 컨볼루션 결과들을 보이는 도면.
도 14c는 연산된 컨볼루션 결과들을 보이는 도면.
도 14d는 연산된 컨볼루션 결과들을 보이는 도면.
도 14e는 연산된 컨볼루션 결과들을 보이는 도면.
도 14f는 연산된 컨볼루션 결과들을 보이는 도면.
도 15aa. 15ab, 15ac, 및 15ad는 단일한 가산기 트리로 대체된 가산기 트리 쌍들과 단일한 누산 및 반환 유닛으로 대체된 누산 및 반환 유닛의 쌍들을 가지는 승산 리듀스 타일을 보이는 블록도.
도 15ba. 15bb, 15bc, 및 15bd는 4중쌍으로 짝지어진 활성화 함수 레인들로 0 활성화 함수를 스킵하는 대체적인 경량 실시예를 사용하는 승산 리듀스 타일을 보이는 블록도로, 각 4중쌍은 전용의 4중쌍 가산기 트리를 가지고, 각 4중쌍 가산기 트리는 그 출력을 4중쌍 FIFO로 버퍼링하며, 열 가산기 트리가 그 열의 모든 4중쌍 FIFO들의 출력들을 합산한다.
도 15ca. 15cb, 15cc, 및 15cd는 평면 for 루프 펼침(unroll)을 도 2f로부터의 대체적인 0 활성화 함수 스킵 기구와 조합하는 승산 리듀스 타일의 블록도.
상세한 설명에서, 몇 개의 부분들로 구성되는 도면은 그 부분을 식별하는 첨자를 생략하고 단축된 도면 명으로 지칭될 수 있다. 예를 들어, 도 2ga 및 도 2gb들로 구성되는 도면은 도 2로 지칭될 수 있다.
첨부된 도면들과 연계하여 이하에 제공되는 상세한 설명은 본 발명에 따라 제공되는 심도별 컨볼루션이 가능한 혼합 정밀도 NPU 타일의 예시적 실시예들의 설명으로 의도된 것이며, 본 발명이 구성되거나 활용될 유일한 형태들을 대표하고자 의도한 것이 아니다. 이 설명은 예시적 실시예들에 연계한 본 발명의 특징들을 규정한다. 그러나 동일 또는 동등한 기능과 구조들이 역시 본 발명의 범위 내에 포괄될 것을 의도한 다른 실시예들에 의해서도 달성될 수 있음을 이해해야 할 것이다. 이 명세서의 어딘가에 표시된 바와 같이, 유사한 요소 번호들은 유사한 요소 또는 특징들을 나타낸다.
도 1a는 어떤 실시예들에 따른 신경망 프로세서(neural processor; 100)의 개략(high-level) 블록도를 도시한다. 이 신경망 프로세서(100)는 입력 특성맵(input feature map; IFM)(또는 "활성화 함수(activation)들"의 텐서(tensor))의 가중치(weight)들의 다차원 어레이(multi-dimensional array)(또는 텐서)와의 컨볼루션(convolution) 또는 텐서곱(tensor product)을 효율적으로 연산하여 출력 특성맵(OFM)을 형성하도록 구성될 수 있다. 이 신경망 프로세서는 또한 특성맵 풀링(pooling)과 활성화 함수(activation function)를 연산하도록 구성될 수 있다.
'610 출원에서 상세히 설명한 바와 같이, (각각 몇 개의, 예를 들어 4개의 SRAM 뱅크(bank)들을 포함하는) 복수의 SRAM뱅크 집합(109)들이, SRAM 뱅크 집합(109)들에 저장된 입력 활성화 함수 맵들을 후속 연산을 위해 타일(tile)들로 가져오는 입력 특성맵(IFM) 배송 패브릭(delivery fabric)(104)을 통해 승산 및 리듀스(Multiply-and-Reduce) 타일(tile)(102)("MR 타일(MR tile)")들에 연결될 수 있다. 각 타일(102)은 승산기 유닛(multiplier units; MU)(103)들의 어레이를 포함할 수 있다. 타일(102)들은 또한 연산된 결과들을 저장을 위해 타일(102)들로부터 SRAM 뱅크 집합(109)들로 전송하는 출력 특성맵(OFM) 배송 패브릭(106)을 통해 SRAM 뱅크 집합(109)들에도 연결된다.
IFM 배송 패브릭(104)은 분할된(segmented) 버스가 될 수 있는데, 결과적으로 각 SRAM 뱅크 집합(109)은 MR 타일(102)들 중의 하나에 연계될 수 있다. 중앙 컨트롤러(105)는 유틸리티 버스(utility bus; 112)를 통해 시스템 내의 레지스터(register)들을 제어하는 제어 워드(control word)들을 공급할 수 있다. 데이터는 AXI(Advanced Extensible Interconnect) 상호연결(interconnect)(114)을 통해 신경망 프로세서의 SRAM(109)으로 이송될 수 있고, 신경망 프로세서로 수행된 처리 작동의 결과들은 마찬가지로 AXI 상호연결을 통해 SRAM(109)으로부터 검색될 수 있다. MCU(micro-controller unit)(116)가 중앙 컨트롤러(105)를 적시에(in a timely fashion) 적절히 구성하는 한편, DMA 컨트롤러(118)를 사용하여 신경망 프로세서(100)와 외부 메모리(120) 간의 데이터 전송을 조정(coordinating) 및 실행함으로써 연산을 조정(orchestrate)하는 데 사용될 수 있다. 상세들에 대해서는 '610 출원을 참조하라.
도 1b는 '610 출원에 기재된 바와 같은 승산 및 리듀스 타일(multiply-and-reduce tile; 102)을 도시한다. 본 발명은 MR 타일(102)의 확장과 최적화에 집중할 것이다. '610 출원에 따르면, 각 MR 타일(102)은 승산기 유닛(multiplier unit; 126)들의 8x16 어레이를 포함한다. 승산 리듀스 유닛들의 어레이는 8개의 승산 리듀스 열(multiply-reduce column; 133)들로 조직된다. 8개의 모든 승산 리듀스 열들은 16 IFM 채널로 구성된 동일한 IFM 데이터를 수신한다. 수신된 이 활성화 함수들을 사용하여 각 승산 리듀스 열은 한 OFM 채널을 연산한다. 특히, 각 승산 리듀스 열은 16개의 유입(incoming) 활성화 함수들의 16개의 해당 가중치들과의 도트곱(dot product)을 연산하는데, 각 MU(126)는 국부적으로 저장되어 층 연산(layer computation)이 시작되기 전에 사전 로딩된(pre-loaded)된 가중치와의 승산을 수행한다. 가산기 트리(adder tree; 128a 또는 128b)가 MR 열(133) 내의 MU(126)에 의해 연산된 16개의 곱들을 가산한다. 이어서, MR 열(133) 내의 누산 및 반환(accumulate-and-return; ARU) 유닛(167)이 리듀스 패브릭(reduction fabric; 111)을 사용하는 타일들 간의 추가적 합산(summation) 및/또는 큰 가중치 커널(kernel) 크기를 지원하기 위한 누적 연산(accumulation)을 수행할 수 있다. 각 MR 열(133) 내의 ARU(167)는 또한 전형적으로 합에 활성화 함수를 적용하여 결과적인 활성화 함수를 OFM 배송 패브릭(106)을 통해 SRAM(109)으로 복귀시킨다. 그 상세는 '610 출원을 참조하기 바란다.
MR 타일(102) 내부에서는, 콤팩트한(compact) 활성화 함수 캐시(cache), 즉 "IFM 캐시"(139)가 IFM 배송 패브릭(104)을 통해 SRAM(109)에서 이송된 활성화 함수들을 저장한다. 직접 컨볼루션에서 가중치 커널이 IFM 층 데이터 상을 "넘어감(sliding)"에 따라, IFM 텐서 내의 요소는 OFM 텐서 내의 인접 위치들에서 컨볼루션을 수회 연산할 필요가 있을 수 있다. 이에 따라, 각 MR 타일에 국부적으로 캐싱(caching)된 활성화 함수들이 SRAM으로부터 동일한 IFM 요소를 반복적으로 호출(fetch)할 필요 없이 연산을 진행할 수 있게 해줄 수 있다. 이는 NPU 연산의 스루풋을 저하시키지 않고 SRAM(109)의 독출 수와, IFM 배송 패브릭 밴드 폭과, 및 관련 전력과 실리콘 면적을 축소시키는 데 도움이 된다.
IFM 캐시(139)로부터의 활성화 함수들은 활성화 함수 송출 유닛(activation broadcast unit; ABU)(141)을 통과하는데, 이는 유부호(signed) 활성화 함수들을 부호 및 크기 수치 포맷(sign-and-magnitude numeric format)으로 변환한다. 이어서, 부호 및 크기 수치 포맷의 활성화 함수들이 16개의 활성화 함수 레인(lane)(137)들에 걸쳐 모든 MR 열(133)들에 동시에 송출된다. 부호 및 크기 수치 포맷을 사용하면 SRAM에 저장된 활성화 함수 및 또는 가중치들이 유부호, 무부호, 8비트, 16비트, 또는 8xN 비트(N은 자연수)로 저장된 경우, 활성화 함수와 가중치들의 곱을 연산할 수 있게 된다. 특히 활성화 함수들이 예를 들어 int8 등의 유부호 포맷으로 인코딩되었다면, ABU가 유부호 활성화 함수들을 부호 및 크기 수치 포맷으로 변환하는데, 여기서 부호는 1비트 신호이고 크기는 uint8이다. 활성화 함수들이 예를 들어 uint8 등의 무부호 포맷으로 인코딩된 경우, ABU는 수치 포맷 변환을 바이패스(bypass)한다. 활성화 함수들이 16비트 무부호, 즉 uint16이라면, ABU는 uint16 활성화 함수들을 uint8 MSN와 uint8 LSB 바이트들로 분할하여 이 두 바이트들을 하나씩 MR 어레이로 송출한다. 마찬가지로, 16비트 유부호 활성화 함수들, 즉 int16을 처리할 때, ABU는 int16를 uint16으로 변환하고, 결과적인 unit16을 uint8 MSN와 uint8 LSB 바이트들로 분할하여 입력 int16에 연계된 부호와 함께 이 두 바이트들을 하나씩 MR 어레이로 송출한다. 24 또는 32 등 더 긴 비트폭을 가지는 활성화 함수들도 유부호 수cl를 무부호로 변환하고 무부호 결과를 바이트들의 시퀀스(sequence)로 분할함으로써 유사한 방식으로 처리된다.
승산기 유닛(126)들은 커널 가중치들을 가중치 레지스터 파일(127) 내에 국부적으로 저장한다. 도 1c 참조. 활성화 함수와 마찬가지로, 가중치들 역시 유부로, 무부호, 8비트, 16비트, 및 8xN비트의 가중치들을 지원하도록 부호 및 크기 수치 포맷으로 저장된다. ABU의 수치 포맷 변환가 유사하게 가중치 압축해제 유닛(weight decompression unit; WDU)은 SRAM으로부터 가중치 레지스터 파일(127)로 가중치들을 로딩하면서 유부호 및 복수 바이트의 가중치들을 하나 이상의 부호 및 크기 수치 포맷 값으로 변환한다. 이 명세서에 사용된 "가중치 레지스터 파일(weight register file)"은 각 레지스터가 한 가중치를 저장하도록 구성된 가중치 레지스터들의 어레이이다.
IFM데이터가 예를 들어 50% 이상의 많은 0들을 포함하는 경우가 흔하다. '610 출원에 기재된 바와 같이, MR 타일들은 0값을 가지는 IFM 데이터들을 이용하여 활성화 함수가 0일 때 가중치에 의한 활성화 함수의 승산을 스킵(수행에 시간을 소모하지 않음)함으로써 연산 스루풋을 2x배로 향상시킬 수 있다. 활성화 함수 송출 유닛(141)은 도 1c 내지 1f에 도시된 바와 같이 이러한 0 활성화 함수 스킵(zero-activation skipping)을 촉진한다. 특히, 도 1c는 연산이 시작되기 직전의 SRAM 데이터(109)를 도시한다. 더 구체적으로, SRAM 데이터(109)가 IFM 캐시(139)에 막 도달하여, ABU(141)을 통과하고 활성화 함수 레인(127)들에 걸쳐 8개의 MR 열(133)들로 송출된다. ABU(141)가 IBM 버퍼(124)와 형식 변환기(type converter; 135)를 포함하는 것에 주목을 요한다. 형식 변환기(135)가 전술한 수치 포맷 변환을 수행하는 동안, IFM 버퍼(124)는 IFM 캐시(139)에서 호출된 (레인 당) 둘 이상의 활성화 함수들을 버퍼링한다(buffers). 명확성을 위해, 도 1c 내지 1f는 16개의 레인들 중 4개의 활성화 함수 레인들만을 보이는 것에 주의하기 바란다.
도 1d는 IFM 버퍼(124)에 도달한 첫 두 IFM 벡터(110)(IFM 슬라이스(slice))들을 보이는데, 명확성을 위해 IFM 캐시(139)와 형식 변환기(135)는 생략되었다. 이 클록 사이클(clock cycle)에서, 레인 0, 1, 2, 및 3들은 각각 값 0xa0, 0xa1, 0xa2, 및 0xa3을 가진다. 이 예에서, IFM 버퍼 전단(front)의 어느 활성화 함수 값도 0이 아니므로, 네 모든 0이 아닌 활성화 함수 0xa0, 0xa1, 0xa2, 및 0xa3들이 활성화 함수 레인(137)들을 통해 MR 열(O0 내지 O7)들로 송출된다. 활성화 함수 값(0xa0 내지 0xa3)들이 송출되면, 각 승산기 유닛(103)은 특정 승산기 유닛이 수신하는 활성화 함수에 연계된 가중치(wrow,col,seq)를 선택한다. 간략화를 위해 IFM이 4 채널을 가진다고 가정하면 OFM은 8 채널을 가지고 NPU는 단지 한 MR 타일을 가지며, MR 타일(102) 내에서 행 "row", 열 "col"에 위치한 승산기 유닛은 활성화 함수 송출 레인 "row"을 수신하여 MR 열 "col"에 대한 부분곱을 연산하는데, 이들은 각각 OFM 채널(Ocol)을 형성한다(contribute to). 가중치 레지스터 지수(index) "seq"는 가중치 커널 내에서의 그 가중치의 시퀀스 순서에 해당한다. 예를 들어, 3x3 가중치 커널은 9개의 가중치들을 가지는데, 각 가중치는 각각의 활성화 함수에 대응하며, 승산기 유닛(103)에 도달하는 활성화 함수의 순서로 seq ∈ {a, b ... h}라고 분류할 수 있다(label).
0xa0 ... 0ax3 활성화 함수들이 송출되고 wrow,col,a 가중치들이 MR 유닛들에 선택되면, 각 MR 유닛(103)의 승산기(126)들은 활성화 함수 actow,a의 wrow,col,a와의 곱: prow,col = wrow,col,a * actrow,a을 연산하도록 진행된다. 이어서, 가산기 트리(128A 및/또는 12B)들이 col = [0..3]: Scol = S prow,col에 대한 값 prow,col,a들을 합산하도록 진행된다. 필요할 때, 각 ARU(167)의 누산기(130A 및/또는 130B)들이 시간에 걸쳐(over time) Scol을 누산하도록 작동된다. 마지막으로, 본 발명에 필수적은 아니지만, 리듀스 패브릭(111)이 '610 출원에 상세히 기재된 바와 같이 누산기(130A(B) 또는 가산기들을 더 합산하여 단일한 MR 타일 내에 맞추기는 너무 큰 가중치 커널들에 대해 도트곱을 연산함으로써 종국적으로 복수의 NPU MR 타일들에 분산시킨다.
도 1d의 예에 이어, 각 열(133) "col"의 가산기 트리(128A)는 원하는 도트곱을 연산하여, 이를 col = [0..3]에 대해 누산기(130A: SA,col = 0xa0*w0,col,a + 0xa1*w1,col,a + 0xa2*w2,col,a + 0xa3*w3,col,a)에 저장한다. IFM 슬라이스 "a"에 관련되는 연산이 이제 완료되고, 각 열의 연산된 도트곱이 활성화 함수 모듈(151)(명확성을 위해 도 1c 내지 1f에는 생략됨)로 전달된다.
도 1e는 IFM 버퍼(124)의 전단에 도달되는 다음 IFM 슬라이스{0xb0, 0, 0xb2, 0xb3}와 연산하는 다음 클록을 도시하는데, 다음 IFM 슬라이스{0xb0, 0, 0xb2, 0xb3}들이 IFM 버퍼(124)로 호출되는 동안, 세 0이 아닌 활성화 함수 0xb0, 0xb2 및 0xb3들이 각각 레인(137) 번호 0, 1, 및 2를 통해 송출된다. IFM 슬라이스{0xb0, 0, 0xb2, 0xb3}의 요소 1이 0이므로, 활성화 함수 레인 1은 IFM 슬라이스{0xb0, 0, 0xb2, 0xb3}로부터 요소 0xc1을 순서외(out-of-order) 방식으로 송출하는 데 사용된다. 여기서, 각 열(133)의 가산기 트리(128A)는 IFM 슬라이스 "b"에 대한 원하는 도트곱을 연산하여, 이를 col = [0..3]에 대해 누산기(130A: SA,col = 0xb0*w0,col,b + 0xb2*w2,col,b + 0xb3*w3,col,b)에 저장한다. IFM 슬라이스 "b"가 관련되는 연산이 이제 완료되어, 각 열의 연산된 도트곱은 활성화 함수 모듈(151)로 전달된다.
이와 동시에, 각 열(133)의 가산기 트리(128B)는 IFM 슬라이스 "c"에 대한 원하는 도트곱의 일부를 연산하여 이를 col = [0..3]에 대해 누산기(130B: SB,col = 0xc1*w1,col,c for col = [0..3])에 저장한다. IFM 슬라이스 "c"에 관련되는 연산은 아직 종료되지 않아 연산된 부분 도트곱은 누산기(130B)에 유지된다(stay).
도 1f는 연산의 다음 클록 사이클을 도시하는데, 여기서 IFM 슬라이스 "c"의 연산이 완료되고, IFM 슬라이스 "d"가 IFM 버퍼(124)에 도달하고 IFM 슬라이스 "d"의 연산이 이뤄져 역시 완료됨으로써, 활성화 함수의 분산(sparse) 덕분에(thanks to) 단일한 클록 사이클 당 두 도트곱들을 연산한다. 더 구체적으로, 각 열에서 활성화 함수 0xc1이 레인 1, 가산기 트리(128B), 및 누산기(130B)를 사용하여 이미 처리되어 미완성된 도트곱을 생성하였으므로 IFM 슬라이스 "d"로부터의 활성화 함수 0xd1은 막 처리된(just-processed) 활성화 함수 0xc1에 의해 남겨져 이제 사용 가능한(now-available) IFM 버퍼 전단의 슬롯(slot; 169)을 사용할 수 있다. 또한 IFM 슬라이스 "c" {0xc0, 0xc1, 0, 0xc3}의 제2 요소가 0이므로, IFM 슬라이스 "d" {0, 0xd1, 0xd2, 0}의 요소 0xd2가 레인 2에 순서외 방식으로 송출될 수 있다.
활성화 함수(0xc0, 0xd1, 0xd2 및 0xc3)들이 각각 레인 0, 1, 2, 및 3으로 송출되면, 각 열(133)의 가산기 트리(128b)들이 IFM 슬라이스 "c"의 도트곱의 나머지 부분(0xc0*w0,col,c + 0xc3*w3,col,c)을 연산하고, 이를 누산기(130B)로 전달하여 도트 연산: SB,col = SB,col + (0xc0*w0,col,c + 0xc3*w3,col,c)을 완료한다. IFM 슬라이스 "c"에 관련된 연산이 완료되어 각 열의 연산된 도트곱이 활성화 함수 모듈(151)로 전달된다.
이와 동시에, 각 열(133)의 가산기 트리(128)이 IFM 슬라이스 "d"에 대한 도트곱을 연산하여 이를 누산기(130A: SA,col = 0xd1*w1,col,d + 0xd2*w2,col,d)로 전달한다. IFM 슬라이스 "d"에 관련된 연산이 완료되어 각 열의 연산된 도트곱이 활성화 함수 모듈(151)로 전달된다.
도 1c 내지 1f는 '610 발명(disclosure '610)에 기재된 바와 같이 0값의 활성화 함수들을 스킵하여 2x배의 연산 스루풋을 달성할 수 있는 도트곱 연산의 기본 원리들을 도시한다. 도 1c 내지 1f에 도시된 것보다 활성화 함수가 0값을 가질 확률이 높을수록 더 큰 스루풋 가속이 이뤄질 수 있다. 예를 들어, 활성화 함수가 0값을 가질 확률이 1/N(N = 4)이라면, 열(133)은 4개의 가산기 트리들과 각각 클록 당 4개의 분산된(sparse) 도트곱을 연산하는 4개의 누산기들을 가져 4배까지의(일반적으로 N배까지의) 스루풋을 달성한다. 특히 명확성을 위해 도 1c 내지 1f가 파이프라이닝(pipelining)과 타이밍(timing)을 무시하는 점에 주의하라. 본 발명에 설명된 변경의 기준(baseline)으로 기능하는 NPU 작동의 더 깊은 상세는 '610 출원을 참조하라.
도 1g는 ABU(141)가 승산기 유닛(103)으로 연산된 각 부분곱의 행선(destination)을 제어하는 MR 열(133)을 도시한다. 더 구체적으로, 활성화 함수 레인들을 따라 ABU(141)는 각 활성화 함수 레인 당, 이에 따른 멀티플렉서(132A, 132B)를 사용하여 해당 행의 곱들을 가산기 트리(128A) 또는 가산기 트리(128B)로 유도하는 sel_adder_tree[row] 신호를 송출한다. 가산기 트리(128A)가 곱들을 수신할 때, 가산기 트리(128B)의 대응 입력은 0을 수신하여 가산기 트리(132b)의 도트곱 연산의 교정을 보장하며 - 역도 마찬가지다.
도 1h 및 1i는 '610 발명에 기재된 바와 같은 ABU(141) 내의 IFM 버퍼(124)를 도시하는데, IFM 캐시(124)로부터의 값들이 좌측으로부터 도달하여, 0값인 요소들을 제거하도록 재정렬되는 동안 점차 우측(Col0)으로 전파(propagate)되어 MR 어레이(122)로 송출된다. 명확성을 위해 16개 대신 단지 4개의 채널(레인)들만이 도시되었다. 도 1h는 Col0 슬롯, 즉 IFM 버퍼(124)의 전단에 0이 있는 - 또는 이미 소비되어 "빈(empty)" 비0값을 보유하는 슬롯(169)이 멀티플렉서(163)를 사용해 동일한 채널의 Col1 또는 Col1 슬롯으로부터의 (0이 아닌) 값으로 대체될 수 있는 실시예를 도시한다. 열 Col1, Col2 등으로부터 비0값들을 순서외 방식으로 당겨오는(forwarding) 것은 예견(look-ahead)으로 지칭된다. 도 1h는 3의 예견 거리를 도시하는데, 즉 값이 Col0, Col1, 또는 Col3의 3개의 열중 어느 것으로부터 호출(retrieve)될 수 있다.
도 1i는 Col0 슬롯, 즉 IFM 버퍼(124)의 전단의 0 또는 "빈" 슬롯(169)이 멀티플렉서(163)을 사용하여 동일한 (채널의) Col1 또는 Col2 슬롯들뿐 아니라 인접 채널들로부터의 값으로 교체될 수 있는, 예를 들어 CH[i]는 채널 CH[i-1] 및/또는 CH[i+1]로부터 값을 수신할 수 있는 실시예를 도시한다. 인접 행들로부터 순서로 방식으로 비0값들을 당겨오는 것은 검색(look-aside)으로 지칭된다. 예를 들어, 한 채널로부터 "m" 채널 이격된 다른 채널로 값을 전송할 수 있는 것이 거리 m의 검색이다. 검색 및 예견 거리들은 조합될 수 있고 회로 복잡성 대 성능을 균형을 유지(trade off)하도록 선택될 수 있다. 예를 들어, 도 1i의 예는 2의 예견 거리와 1의 검색 거리를 가진다. 도 1c 내지 1f는 검색이 아닌 예견 작동만을 사용하는 것에 주의 바란다. 검색 거리가 사용될 때, 즉 검색 거리가 1 이상일 때, 승산기 유닛(103)들은 승산을 수행하는 데 필요한 가중치를 그 가중치 레지스터 파일 내에 가지지 않을 수 있다. 이는 IFM 버퍼(1F) 내의 검색으로 당겨옴으로써 활성화 함수가 그 활성화 함수의 원래의 레인이 아닌 레인 상으로 송출될 때 발생될 수 있다. 이 경우 승산 유닛(103)은 동일한 열의 활성화 함수의 원래의 열의 승산기 유닛(103)의 가중치 레지스터 파일(127)로부터 정확한(correct) 가중치를 얻어야 한다. 1의 검색 거리에 대해서, 이는 승산기 유닛들이 수직으로 인접한 다른 승산기 유닛으로부터 가중치를 얻는 것과 동등하여, 가중치 레지스터 파일은 그 자체의 승산기 유닛에 대해 하나, 한 레인 위의 승산기 유닛을 위해 하나, 한 레인 아래의 승산기 유닛을 위해 하나의 세 가중치들을 동시에 호출할 수 있다.
도 1j는 '610 출원에 기재된 누산 및 반환 유닛(ARU)(167)을 도시한다. ARU(167)은 가산기 트리(128A, 128B) 당 하나씩 두 누산 및 활성화(accumulation-and-activation; AA) 채널(168)들과, 반환 모듈(return module; 152)을 포함한다. 가산기 트리(128A)의 출력이 AA(168)의 누산 모듈(150)에 도달하면, 가산기 트리의 출력은 선택적으로 유부호(signed) 업시프터(up-shifter;175)로 스케일링(scale; 크기 조정)되고, 선택적으로 가산기(181)를 사용하여 누산기(130A)의 내용(contents)에 가산된다. '610 출원에 기재된 바와 같이, 전체 가중치 커널을 컨볼루션 연산(convolve)하려면 몇 개의 클록 사이클에 걸친 가산기 트리 출력의 누산이 필요할 수 있다. 예를 들어, 3x3이 평면의 폭 및 높이고 16이 조정채널의 수일 때 가중치 커널 크기가 3x3x16x8이라면, 단일한 MR 타일은 타일 내의 가 16x8 승산기 유닛들에 3x3=9 가중치들을 저장함으로써 연계된 컨볼루션을 수행할 수 있다. 이어서, 한 3x3x16 활성화 함수 텐서들에 대응하는 9개의 IFM 슬라이스들이 예를 들어 9 클록들에 걸쳐 MR 타일에 공급되어 9개의 도트곱을 연산할 수 있다. 컨볼루션을 완료하려면 이 9개의 도트곱들을 누산기(130A 및/또는 130B)에서 가산할 필요가 있는데, 이는 9개의 IFM 슬라이스들이 MR 타일에 공급됨과 동시에 이뤄진다.
멀티플렉서(183)는 첫 9개의 도트곱들이 연산되었을 때 필요한 것과는 달리, 누산기가 가산기 트리(128A 또는 128B) 출력과 (누산을) 개시하도록 허용한다. 활성화 함수와 가중치들이 모두 8비트일 때, 즉 int8과 uint8의 어떤 조합일 때 유부호 업시프터(175)는 멀티플렉서(177)를 사용하여 바이패스(bypass)된다. 16 이상의 비트폭을 가지는 활성화 함수와 가중치들은 ABU(141)를 사용하여 후속 승산을 위해 일련의 바이트들로 분할된다. 예를 들어 16비트 값에 대한 최상위 바이트(most-significant (byte); MSB) 및 최하위 바이트(least-significant (byte); LSB)들이다. 16비트의 활성화 함수와 16비트의 가중치의 곱에는 4 클록 사이클이 필요한데, 활성화 함수 LSB가 클록 사이클 1 및 2 동안 송출되는 한편, 활성화 함수 MSB는 클록 사이클 3 및 4 동안 송출될 수 있다. 가중치 LSB들은 클록 사이클 1 및 3 동안 승산을 위해 선택되는 한편, 가중치 MSB들은 클록 사이클 2 및 4 동안 선택될 수 있다. 이에 따라 승산 시퀀스는 클록 사이클 1 동안 활성화 함수 LSB가 가중치 LSB로 승산되어, 각 MR 열(133)의 가산기 트리(128A/B)로 가산되고, 해당 누산기(130A/B)에 위치되도록 함으로써 개시될 것이다. 다음, 클록 사이클 2 동안 활성화 함수 LSB가 가중치 MSB로 승산되어 가산기 트리(128/B)로 가산되고, 유부호 업시프터(175)를 사용하여 8비트만큼 시프트업(shift-up)되어, 가산기(181)를 사용하여 누산기(130A/B)에 가산된다. 클록 사이클 3 동안, 활성화 함수 MSB가 가중치 LSB로 승산되어 가산기(128A/B)로 가산되고, 유부호 업시프터(175)를 사용하여 8비트만큼 시프트업 되고 가산기(181)를 사용하여 누산기(130A/B)에 다시 가산된다. 마지막으로, 사이클 4에서 활성화 함수 MSB를 가중치 MSB로 승산하여, 가산기 트리(128A/B)가 곱들을 가산하고, 유부호 업시프터(175)가 합을 16비트만큼 시프트업하고, 가산기(181)가 결과를 누산기(130A/B)에 가상함으로써 도트곱 연산이 완료된다. 그 상세는 '610 출원을 참조하기 바란다.
가중치 커널이 단일한 MR 타일에 맞을 만큼 충분히 작으면, 이 시점에서의 누산기(130A/B)의 값은 최종 결과가 될 수 있다. 이 경우, 최종 결과는 멀티플렉서(174)를 통해 활성화 함수 모듈(151)로 전달된다. 그러나 큰 가중치 커널들로부터의 큰 가중치들은 '610 출원에 기재된 바와 같이 복수의 MR 타일들에 분배되어야 한다. 달리 말해, 이제 도트곱 연산이 단지 한 MR 타일이 아니라 몇 개의 MR 타일들에 걸쳐 이뤄져야 한다. 이 경우 각 MR 타일이 최종 도트곱의 일부를 연산하고 이 부분 도트곱 결과들이 모든 MR 타일들에 걸친(span) 리듀스 패브릭(reduction fabric; 111)을 사용하여 더 리듀스(reduce)(합산)되어야 한다. 0 스킵(zero skipping) 방법이 작동되어 부분 도트곱 결과들이 누산기(130A, 130B)에서 연산되므로, 연산 스루풋은 IFM 슬라이스들 내의 0들의 양과 위치에 따라 요동한다. 더 구체적으로, 각 클록 사이클에서 양 누산기(130A 및 130B)는 그 연산을 완료하여 클록 당 두 결과를 산출하거나 - 누산기(130A 또는 130B) 중의 단지 하나만 연산을 완료하여 클록 당 한 결과를 산출할 수 있다. ARU(167) 내의 FIFO(179)가 누산기(130A, 130B)로 연산된 부분 도트곱들을 수집하여, 이들을 IFM 슬라이스들 내의 원래의 순서로 재배치하고 부분적 결과들의 스트림(stream)을 리듀스 패브릭(111)으로 밀어낸다(forward). 다른 MR 타일들이 IFM 텐서의 다른 부분들을 동시에 수신하여 처리함에 따라 IFM 희박도(sparsity)의 요동에 기인하는 연산 스루풋과 지연은 약간만 변동될 수 있으므로, FIFO(179)는 이들 도트곱들이 리듀스 패브릭(111)에 의해 정확힌 가산될 수 있도록 다른 MR 타일들에 의해 생성된 부분 도트곱들을 재정렬(re-align)한다.
가중치 커널 크기가 단일한 MR 타일에 맞추기에 지나치게 크면, 리듀스 패브릭(111)은 다른 MR 타일들에 의해 생성된 부분 도트곱들을 가산하는 가산기 트리(128A/128B)에 대한 추가적 상위 레벨(extra upper level)로 작용하고 완료된 합을 멀티플렉서(174)를 통해 ARU(167)에 다시 밀어 보내(forward back) 활성화 함수를 적용시킨다.
완전히 리듀스된, 즉 가산기 트리(128A/B)를 사용하여 합산되고 누산기(130A/B)를 사용하여 누적 연산(accumulate)되며 리듀스 패브릭(111)을 사용하여 더 합산된 도트곱들은 멀티플렉서(174)를 통해 활성화 함수 모듈(151)에 도달한다. ARU(167)의 활성화 함수 모듈(151)은 활성화 함수를 적용한다. 더 구체적으로, 멀티플렉서(174)로부터의 선형(linear) 데이터는 비트 시프터 모듈(187)들의 스케일(scale)들을 사용하여 대략의(coarse) 2의 누승(power-of-2) 인자로 크기 조정(scaled up or down)되고, 이어서 1x배 내지 2x배 범위의 미세한(fine) 스케일링 인자(scaling factor)로 승산(189)되며, 바이어스 항(bias term; 195)이 추가(193)되고, 그리고 활성화 함수(197)가 적용된다. 활성화 함수는 예를 들어 ReLU 또는 S자형(sigmoidal) 방식일 수 있다. 가중치 커널이 NPU(100) 내에서 사용 가능한 모든 MR 타일(102)들에 맞추기에 너무 클 때는, 도트곱 연산이'610 발명에 기재된 바와 같이 부분 결과들을 SRAM에 저장하면서 IFM 텐서를 2회 이상 처리함으로써 수행되어야 한다. 이런 경우들에서, 멀티플렉서(199)는 미세 스케일링(189)과, 바이어스(193)와, 및 활성화 함수(197)를 바이패스 하여 부분적 선형 결과들을 SRAM에 스트리밍(streaming)하여 일시 저장될 수 있게 해준다.
마지막으로, 활성화 함수가 적용된 최종 결과 또는 부분적 선형 결과들이 반환 유닛(152)으로 스트리밍 된다. 반환 유닛(152)의 FIFO(198)는 ARU 채널(168A, 168B)들로 연산된 결과들을 수집하여, 이들을 수행된 컨볼루션들의 순서에 맞게 배열하고, 선택적인 제자리(in-place) 풀링(pooling)을 적용하여, 최종 또는 부분적 선형 결과들을 OFM 배송 패브릭(106)에 밀어 보낸다. 8개의 MR 열(133)들이 병렬로 작동되어 OFM 벡터(슬라이스)들의 스트림을 산출하는데, 이에 따라 각 OFM 슬라이스는 8개의 요소들을 가진다. 희박한 활성화 함수 처리가 각 MR 타일(102)들이 결과들을 약간 다른 스루풋과 지연으로 연산하는 것으로 귀결되므로, FIFO(198)들이 여러 MR 타일(102)들로부터 SRAM(109)들로 OFM 배송 패브릭(106)을 통해 OFM 슬라이스들을 스트리밍하기 위해 MR 타일들 간에 OFM 출력들을 재정렬할 책임을 진다. 그 상세는'610 출원을 참조 바란다.
본 발명은 달리 규정되지 않는 한, '610 발명에 기재된 바와 같이 NPU 아키텍처의 나머지는 변경하지 않고 단일한 MR 타일(102)의 확장과 효율 개선에 집중한다. '610 발명에 상세히 기재된 NPU(100)은 SRAM(109)들에 저장된 데이터들에 심도 우선 순서(depth-major order)로 작동한다. 도 2a는 예를 들어 5행 바이(by) 12열의 평면 크기를 가지고 16개의 심도 채널(202)들을 포함하는 배치(처리) 크기(batch size) 1의 IFM 텐서에 해당하는 3D 텐서(200)를 도시한다. 3D 텐서(200)는 개별 요소(201)들로 구성된다. 행-바이-열-바이-(심도)채널 표기를 사용하면 이 텐서의 크기는 5x12x16으로 표기할 수 있다.
도 2b에 도시된 바와 같이, "심도 우선(depth-major)" 순서는 텐서(200)의 요소(201) (col, row, ch) 및 (col, row, ch+1)들이 각각 SRAM 어드레스 z(204) 및 z+1(205)에 저장되는 것을 의미한다. 달리 말해, 심도 차원(depth dimension; 202)을 따른 요소(201)들이 SRAM(109)에 서로 이웃하게 인접하여 저장된다. 더 구체적으로, AIFM이 SRAM(109)에 저장된 5x12x16 IFM 텐서(200)의 시작 어드레스이고 Icol,row,ch이 도 2a의 좌표(col, row, ch)의 요소(201)에 대응한다면, 동일한 평면((ol, row) 위치상의 16개의 요소(201), 예를 들어 I0,0,0 .. I0,0,15들은 각각 AIFM 내지 AIFM+15의 인접한 SRAM 어드레스들에 저장된다.
도 2c는 5x12x32의 크기를 가지는 3D 텐서(200)를 도시한다. 도 2b와 유사하게, SRAM(109)은 32개의 심도 채널(202)들에 값들을 인접 방식으로 저장한다. 더 구체적으로 도 2d에 도시된 바와 같이, AIFM이 SRAM(109)에 저장된 5x12x32 IFM 텐서(200)의 시작 어드레스이고 Icol,row,ch이 도 2c의 좌표(col, row, ch)의 요소(201)에 대응한다면, 동일한 평면(col, row) 위치상의 32개의 요소(201), 예를 들어 I0,0,0 .. I0,0,31들은 각각 AIFM 내지 AIFM+31의 인접한 SRAM 어드레스들에 저장되고, I0,1,0..31, I0,2,0..31, ... I0,0xb,0..31 , I1,0,0..31 등등으로 이어진다.
본 발명은 '610 발명에 기재된 기준 아키텍처에 비교하여 MR 타일(102)의 업그레이드(upgrade)와 확장들의 수에 집중하고 있다. 후술할 확장들 중의 하나는 심도별 분리 가능한(depth-wise-separable) 2D 컨볼루션에 집중하고 있다. 심도별 컨볼루션으로도 알려진 심도별 분리 가능한 컨볼루션은 심도 채널(C)의 출력 값들이 동일한 입력 심도 채널(C)을 사용하여 연산되는 일반적 직접 컨볼루션의 특수한 경우이다. 도 3e 참조. 달리 말해, 정보가 동일한 채널 내에 머물러 채널들을 교차하지 않아, 3D IFM 텐서를 컨볼루션 연산(convolve)하는 경우 그 3D 텐서의 각 심도 채널 상에 2D 컨볼루션을 별도로 수행하는 것과 그 연산이 동등해진다. 더 구체적으로 도 2e에 도시된 바와 같이, 각 심도 채널(202)이 - 다른 모든 심도 채널들과 독립적으로 - (그 채널에 연계된) 가중치(207)들의 평면 3x3 패치(patch)와 2D 컨볼루션 연산되어 출력(OFM) 텐서(209)를 구성하는 출력 요소(208)들을 생성한다.
MR 타일(102)의 기준 아키텍처는'610 발명에 기재된 바와 같이 IFM 슬라이스(들)를 입력으로 수신한다. 전술한 바와 같이, IFM 슬라이스는 모두 동일한 평면 좌표(row, col), 예를 들어 Irow,col,0..15에 속하는 16 심도 채널들에 대한 값들을 포함하는 활성화 함수 벡터이다. 그러면 MR 타일(102)은 심도 차원들을 따라 리듀스되어, Irow,col,0..15의 16요소들을 도트곱 연산의 결과로 단일한 값 Srow,col으로 "압착(collapsing)"시킨다. 그러나 심도별 분리 가능한 컨볼루션은 심도 차원을 리듀스하지 않는데, 즉 심도 차원에 걸쳐 부분곱들을 가산하지 않는다. 이에 따라, 심도 차원을 따라 리듀스(합산)를 수행하는 열별(column-wise) 가산기 트리(128A/B)들은 '610 발명의 기준 아키텍처로 표현된 바와 같이 심도별 컨볼루션을 지원할 수 없다.
도 2f는 3D IFM 텐서들에 2D 심도별 분리 가능한(depth-wise-separable) 컨볼루션을 연산하도록 수정된 MR 타일(102)을 도시한다. 기준 MR 타일(102) 아키텍처와 비교할 때, 16개의 활성화 함수 레인들은 4개의 4중쌍(quad), 즉 각각 4 채널들을 포함하는 그룹들로 짝지어진다는 것이 주목 바란다. 중요하기로, IFM 입력 데이터 순서가 도 2g 내지 2j에서 상세히 후술할 바와 같이 심도 우선(depth-major)에서 평면 우선(planar-major)으로 변경된다. 이에 따라, 도트곱과 관련 리듀스(reduction)(부분곱들의 합산)가 이제 평면 차원들을 따라, 즉 IFM 텐서의 행 및/또는 열을 따라 연산된다. 각 3중쌍은 시간에 걸쳐 4개의 심도 채널들에 반복 연산(iterate)하면서, 한 번에 단지 한 심도 채널로부터의 값들을 처리한다. 큰 가산기 트리(128A/128B)들이 하부 트리(sub-tree)(213, 214)들로 분할되어, '610 발명의 기준 아키텍처의 한 쌍에 대조적으로, ARU 내에 4쌍의 누산기들을 각각 가지는 ARU(210)들로 그 출력들을 전송하게 되는 것에 주목 바란다. 또한 IFM 캐시(139)의 전방에 배럴 시프트 유닛(barrel shift unit; 211)들이 한 4중쌍 당 한 배럴 시프트 유닛씩 추가되는 것에도 주목 바란다. IFM 캐시(139) 역시 후술하는 바와 같이 수정되었다. 마지막으로, ARU 출력들과 OFM 배송 패브릭(106) 사이에 열 셔플러 유닛(column shuffler unit; 218)이 추가되는 것에도 주목 바란다. 열 셔플러(218)의 역할은, 각 MR 열이 다른 평면 위치에서 심도별 컨볼루션을 연산할 수 있으므로 MR 열들의 출력을 적절한 OFM 슬라이스들로 재정렬하는 것이다.
도시된 아키텍처를 명심해야 하는 것은 '610 발명과 거의 동일한 것을 의도하는데, 즉 기준 MR 타일(102)이 일반적인 직접 컨볼루션으로부터 심도별 분리 가능한 컨볼루션의 연산 및 그 역산으로 쉽게 재구성되도록 하는 것이다.
도 2g 내지 2j는 3x3x16 심도별 분리 가능한 컨볼루션 연산(operation)의 단계별(step-by-step) 예를 도시한다. 도 2g는 IFM 배송 패브릭(104)을 통해 SRAM(109)으로부터 도달하는 IFM 텐서(200)의 슬라이스(Ia,0..15, Ib,0..15, ... Ii,0..15)들을 도시한다. 평면 3x3 2D 패치(216)들이 화소(pixel; a, b, ... I)들 상에 위치하는 것으로 도시되었지만, 이 위치에서의 컨볼루션 연산이 완료되고 나면 패치(216)들은 '610 출원에 상세히 기재된 바와 같이 예를 들어 지그재그 방식으로 다음 평면 위치로 넘어갈(slide over) 것이다.
16개의 심도 채널들이 네 집합(set)들로 분할되고, 각 집합이 4중쌍(215)에 대응하는 것이 주목 바란다. 더 구체적으로, 심도 채널 0, 1, 2, 및 3은 활성화 함수 레인 act0, act1, act2 및 act3들을 포함하는 제1 4중쌍(215)에 대응한다. 심도 채널 4, 5, 6, 및 7은 활성화 함수 레인 act4, act5, act6 및 act7들을 포함하는 제2 4중쌍(215)에 대응한다. 심도 채널 8, 9, 10, 및 11은 활성화 함수 레인 act8, act9, act10 및 act11들을 포함하는 제3 4중쌍(215)에 대응한다. 심도 채널 12, 13, 14, 및 15는 활성화 함수 레인 act12, act13, act14 및 act15들을 포함하는 마지막(제4) 4중쌍(215)에 대응한다.
현재 컨볼루션 위치에 평면 패치(216)를 포함하는 IFM 슬라이스들(Ia,0..15, Ib,0..15, ... Ii,0..15)이 '610 출원과 동일하게 심도 우선 순서로 도달하면, 배럴 시프트 유닛(211)들은 IFM 캐시(139)와 협조 작업하여, 도 2f에 대응하는 마이크로 아키텍처에 맞도록 재구성된 '610 출원으로부터의 MR 타일(102)을 사용하여 심도별 컨볼루션의 수행에 필요한 대로 심도 우선 순서에서 평면 우선 순서로 재정렬한다.
모든 4중쌍들이 거의 유사한 방식으로 연산되므로 명확성의 목적으로, 도 2g는 제1 4중쌍(215)의 연산 상세만을 도시하고 제2, 제3, 및 제4 4중쌍은 생략한다. 도시된 바와 같이, 평면 위치 "a"에 해당하는 IFM 슬라이스(Ia,0..3)가 MR 타일(102)에 도달하고, 채널 순서의 변화 없이 배럴 시프트(211) 유닛 0을 통과하여 벡터 {Ia,0, Ia,1 Ia,2 Ia,3}로 IFM 캐시(139) 레인의 4중쌍에 저장된다. 그러나 평면 위치 "b"에 해당하는 다음 IFM슬라이스 4중쌍(Id,0..3)은 배럴 시프트 유닛(211) 유닛 0을 통과하며 회전되어 {Id,3, Id,0 Id,1 Id,2}의 순서로 IFM(캐시)에 저장된다. 다음 IFM 슬라이스 4중쌍(Ig,0..3, Ib,0..3, Ie,0..3, Ih,0..3, Ic,0..3, If,0..3, 및 Ii,0..3)들은 적절한 경우 채널 순서가 변경되어, 각각 {Ig,2, Ig,3 Ig,0 Ig,1}, {Ib,0, Ib,1 Ib,2 Ib,3}, {Ie,3, Ie,0 Ie,1 Ie,2}, {Ih,2, Ih,3 Ih,0 Ih,1}, {Ic,0, Ic,1 Ic,2 Ic,3}, {If,3, If,0 If,1 If,2} 및 {Ii,2, Ii,2 Ii,0 Ii,1}로 IFM 캐시(139)에 저장된다. 배럴 시프트 거리는 평면 패치(216) 내의 제1 IFM 슬라이스에 대한 0에서 시작하여, 현재 평면 위치에서 패치(216) 내의 모든 IFM 슬라이스들이 SRAM(109)로부터 로딩될(loaded) 때까지 다음 IFM 슬라이스마다 1씩 증가한다.
IFM 슬라이스의 심도 채널들이 재정렬되면, 4중쌍별 도트곱 연산을 위해 IFM 값(201)들이 MR 어레이(122)로 송출되면서 하나 이상의 재정렬 단계가 이뤄진다. 더 구체적으로, IFM 캐시(139)가 활성화 함수 레인(act0, act1, act2 및 act3)들에 대응하는 열 벡터 {Ia,0, Id,0, Ig,0, 0}들을 호출(fetch)하고, 이어서 제2 열 벡터 {Ib,0, Ie,0, Ih,0, 0}와 제3 열 벡터 {Ic,0, If,0, Ii,0, 0}를 호출한다. Note that thanks to the 배럴 시프트 유닛 0 덕분에, 원래 동일한 레인 0에 속했던 값(Ia,0, Id0, 및 Ig,0)들이 레인 0, 1, 및 2들에 걸쳐 분산되는 것에 주목 바란다. IFM 캐시(139) 내에서 별도의 레인들에 걸쳐 분산되고 나면, IFM 캐시(139)는 이 모든 트리 값들을 동시에, 즉 동일한 클록 사이클 내에 호출하고, 이어서 (도시 안 된 ABU를 통해) 연산을 위해 MR 어레이(122)로 송출할 수 있다.
제2 및 제3 열 벡터 {b0, e0, h0, 0} 및 {c0, f0, i0, 0}들이 제1 열 벡터 {a0, d0, g0, 0}와 거의 유사한 변환을 거치고 나면, 이전에 평면 패치였던 9개의 값 {Ia,0, Ib,0, ... Ii,0}들이 이제 MR0,0..7 4중쌍에 도트곱 연산에 적합한 평면 우선 순서로 도달한다. 도시된 도트곱 연산은 희박도 연산 덕분에 세 클록 사이클 이하가 걸릴 수 있다. 더 구체적으로, 심도별 컨볼루션 연산에서의 활성화 함수 희박도(sparsity)는 네 4중쌍들이 서로 독립적으로 연산(operate)된다는 점을 제외하면 도 1b 및 1c 내지 1f에 도시된 일반적 컨볼루션의 기준 경우에서 연산되는 방식과 유사하게 연산될 수 있다. 도 2f에서, 각 4중쌍은 ARU 내의 대응 누산기 쌍들과 함께 그 자체의 가산기 트리(213, 214)들의 쌍을 가진다. 이러한 방법으로, 관련 4중쌍과 연계된 4개의 레인들 상에서 ABU가 서로 독립적으로 예견(look-ahead) 및/또는 검색(look-aside)을 수행할 수 있다. 네 4중쌍들이 각각 그 자체의 스루풋을 가지고 서로 독립적으로 연산되면, ARU 내의 재정렬 유닛(reorder unit; 220)은 다른 4중쌍들로 연산된 도트곱 결과들을 원하는 출력 순서, 즉 활성화 함수 희박도 지원이 불가능한 상태에서 도트곱이 연산되었을 순서에 해당하는 순서로 재정렬하는 역할을 한다.
도 2를 더 참조하면, 평면 패치 {Ia,0, Ib,0, ... Ii,0}가 전치(transpose)되면, 배럴 시프터(211) 유닛 0및 IFM 캐시(139)는 평면 패치 {Ia,1, Ib,1, ... Ii,1}, {Ia,1, Ib,1, ... Ii,1} 및 {Ia,1, Ib,1, ... Ii,1}들의 전치를 계속한다. 이에 따라, MR0,0..7 4중쌍이 패치 {Ia,0, Ib,0, ... Ii,0}에 대한 도트곱을 연산을 완료하고 패치 {Ia,1, Ib,1, ... Ii,1}, {Ia,1, Ib,1, ... Ii,1} 및 {Ia,1, Ib,1, ... Ii,1}들에 대한 도트곱 연산을 계속하여 현재 평면 위치에서의 심도별 컨볼루션의 연산을 완료한다. 그 다음, 패치(216)들이 다음 평면 위치로 넘어갈(slide to) 수 있다. 모든 원하는 평면 위치들에서 심도별 컨볼루션이 연산되고 나면 층(layer) 연산이 완료된다.
활성화 함수 레인 4중쌍 act4 ... act7, act8 ... act11 및 act12 ... act15들이 이에 따라 IFM 슬라이스 채널 4...7, 8...11 및 12...15들을 처리하고, 그 외에는 활성화 함수 레인 4중쌍 act0 ... act3과 거의 동일하게 연산하는 점에 주목 바란다. 도 2g 내지 2j는 활성화 함수 레인 act4 내지 act15에 대한 도시는 생략하였다.
또한, 배럴 시프트 유닛(211)을 IFM 캐시(139)의 전방 대신 IFM 캐시(139)의 우측 후방에 위치시켜야 심도 채널 순서의 변경 없이 IFM 슬라이스들을 IFM 캐시(139) 내에 저장할 수 있게 되어 '610 출원에 기재된 지그재그 횡단(traversal)이 SRAM(109)에 대한 리듀스 액세스의 변화 없이 연산할 수 있게 되어 바람직함에도 유의 바란다. 이에 따라 IFM 캐시(139) 후방에 배치된 배럴 시프트 유닛(211)들은 IFM 값(201)들이 IFM 캐시(139)를 이탈할 때 심도 채널 순서에 필요한 변경을 적용할 수 있다. 그러나 이 경우, IFM 캐시(139)는 동일한 레인으로부터 동일한 클록에 (예를 들어 4개 등) 몇 개의 값을 호출하도록 수정될 필요가 있다.
이에 따라 도 2h, 2i 및 2j는 각각 심도 우선 순서 - 즉 IFM 슬라이스가 심도 채널로 색인되는(indexed by) 열 벡터 - 로부터 평면 우선 순서, 즉 평면 위치로 색인되어 각 4중쌍(215)에 도달하는 열 벡터로 전치되는 행 벡터 {Ia,0..3, Id,0..3, Ig,0..3}, {Ib,0..3, Ie,0..3, Ih,0..3} 및 {Ic,0..3, If,0..3, Ii,0..3}들의 단계별 과정들을 도시한다.
도 2k는 배럴 시프트 유닛(211)들의 마이크로 아키텍처를 도시하는데, 제어 입력 Sel[1:0]들이 시프트 양(비트 수)을 규정한다. 예를 들어, Sel[1:0]을 {0,0}으로 설정하면 Out[3:0]이 In[3:0]과 동일하게 하고, Sel[1:0]을 set to {0,1}로 설정하면 Out[3:0]이 {In2, In1, In0, In3}이 되게 하며, Sel[1:0]을 {1,0}으로 설정하면 Out[3:0]이 {In1, In0, In3, In2}, 그리고 Sel[1:0]을 {1,1}로 설정하면 Out[3:0]이 {In0, In3, In2, In1}이 되게 할 것이다.
도 2l은 도 1j에 도시한 기준 ARU(167)에 비교하여 수정된 ARU(210)를 도시한다. 전술한 바와 같이, 활성화 함수 레인들의 각 4중쌍(215)은 이제 그 자체의 누산기 쌍을 가진다는 것에 주목 바란다. 더 구체적으로, 각 MR 열 "c"와 4중쌍 "q" 내에서 Accumc,q,A 및 Accumc,q,B (150)들이 각각 활성화 함수 레인 4중쌍 0 내지 3에 대한 4중쌍 승산 리듀스(MR) 유닛(212)(MRq,c) 내의 가산기 트리(Sc,q,A 및 Sc,q,B)들의 출력을 수신한다. 그 자체의 누산기 쌍을 가지는 각 4중쌍 MR 유닛은 각 4중쌍(215)이 서로 거의 독립적으로 연산, 즉 필요에 따라 각 열의 네 4중쌍 MR 유닛(212)들이 연산한 도트곱들을 ARU 재정렬 버퍼(220)들로 다시 원래의 순서, 즉 희박도 지원이 없었다면 이뤄졌을 순서로 재조립(re-assembling)하면서 0인 활성화 함수들을 스킵한다.
열당 네 4중쌍 MR 유닛들이 존재 - 이에 따라 열당 네 누산기 쌍들이 존재 - 하므로 각 MR 열들의 최대 스루풋이 4배가 됨에 주목 바란다. 그러나 도 2g에 도시된 바와 같이, 16개의 심도 채널들 상에서 3x3 심도별 컨볼루션을 연산하려면 (기피 채널당 3 클록 사이클) * (4중쌍 내의 4개의 심도 채널들에 한 번씩 반복) = 12 클록 사이클이 소요된다. 이에 따라 도 2g의 이 특정한 예에서, 각 MR 열의 실제 스루풋은 (IFM 슬라이스의 16개의 심도 채널들) / (3x3 컨볼루션 당 12 클록 사이클) = 4/3, 즉 3 클록 사이클마다 4개의 연산된 최종 결과들이다. 스루풋은 심도별 컨볼루션의 커널 크기에 좌우된다는 것에 주목 바란다. 예를 들어, 2x2 심도별 컨볼루션은 (심도 채널당 2 클록 사이클) * (4중쌍 내의 4개의 심도 채널당 한 번씩 반복) = 8클록 사이클로의 속도로 연산될 수 있어, 스루풋은 평균적으로 클록 사이클 당 (IFM 슬라이스의 16 심도 채널들) / (2x2 컨볼루션 당 8클록 사이클) = 2 출력 값에 달한다. 또한 2x1 심도별 컨볼루션은 평균적으로 클록 사이클 당 4 최종 결과들의 스루풋에 달할 것이다. 더욱이, 희박도 연산에 대한 지원이 MR 열들의 스루풋을 추가적인 2x배로 더 증가시킬 것이다.
활성화 함수를 클록 사이클 당 평균 몇 번씩 적용하기 위해, ARU(210)는 복수의 활성화 함수 유닛(151)들을 가진다. 2x2 심도별 컨볼루션을 지연 없이 지원하기 위해 각 ARU(210) 당 활성화 함수들의 수를 예를 들어 4로 선택할 수 있는 반면, 2x1 심도별 컨볼루션은 8개의 활성화 함수 유닛(151)들이 사용가능하지 않은 한 감속될(throttled down) 필요가 있다. 실리콘 면적을 경제적으로 사용하면서 통신과 연산의 보틀넥(bottleneck)을 피하기 위해, MR 열 스루풋은 IFM 캐시(139)를 함께 고려한 OFM 배송 패브릭(106)과, SRAM(109)뿐 아니라 IFM배송 패브릭(104)의 스루풋에 대응하여 맞춰야 한다.
반환 유닛(152)은 하나 이상의 활성화 함수 유닛(151)로부터의 최종 출력들을 수집하여 결과적인 OFM슬라이스(벡터)들을 SRAM(109)에 저장되도록 OFM 배송 패브릭(104) 상에 전달한다. 리듀스 패브릭(111)을 사용할 필요가 없으므로 심도별 컨볼루션이 이뤄지는 동안 누산기 유닛(150)들의 ColAdderStage 출력들은 분리된 것으로 도시되어있다. 더 구체적으로, 심도별 컨볼루션 동안의 리듀스(가산기 트리들을 사용한 가산과 함께 누적 연산)는 16항 이상을 가지는 도트곱의 부분곱들을 가산하기 위해 복수의 MR 타일들로부터의 결과의 합산을 흔히 요구하는 일반적 직접 컨볼루션의 기준 경우와 대조적으로, 각 MR 타일 내에서 이뤄진다.
도 2f 내지 2l에 도시된 바와 같이, 심도별 컨볼루션을 위한 하드웨어 구성이 SRAM 독출들을 감소시키는 기능을 하고 MU 가중치 레지스터 파일(127)의 크기에 종속되는 IFM 캐시(139)의 크기에 따라, 임의의 평면 커널 크기를 지원할 수 있다. 예를 들어, 10x8 심도별 컨볼루션은 10*8=80개의 IFM 슬라이스들로 연산될 수 있는데, 도 2g 내지 2j에 도시된 바와 같이 이 80개의 IFM 슬라이스들을 4의 집합들로 논리적 분할하고 이 집합들의 각각에 전치(transpose)를 적용한다. 도 2g 내지 2j에 도시된 컨볼루션의 경우와 달리, 이 경우 전치 연산이 (4중쌍 당 4개의 심도 채널들) 바이(by) *각 전치 당 4개의 IFM 슬라이스들) = 4 바이 4(3-by-4) 행렬(matrix) 상에서 효율적으로 연산될 것이므로 전치의 과정에서 0값들을 삽입할 필요가 없다.
'610 출원의 기준 구현예를 따라, 딥러닝(deep learning) 신경망 모델들이 IFM 심도 채널당 8개 미만의 필터를 적용할 수 있어, 특히 IFM 심도 채널당 단지 한 필터만을 포함하는 반면, MR 타일들은 길이 8의 OFM 슬라이스(벡터)들을 생성한다. 이런 경우들에서, MR 열(133)은 다른 평면 위치들에서 동일한 - 종종 단지 한 - OFM 채널의 값을 병렬로 연산할 수 있다. 도 2m은 그 한 예를 도시하는데, 심도 채널(202)로부터의 평면 요소 e0은 전치된 벡터의 일부로서 MR 열들로 송출되며, 8개의 MR 열들을 각각은 중첩되고, 이에 따라 송출된 요소 e0을 수신하는 위치에 그 자체의 평면 컨볼루션 패치(216)를 가져 그 위치에서의 컨볼루션을 연산한다. 예를 들어, 3x3 평면 패치 내로부터의 요소는 동시에 3x3=9 컨볼루션 패치들에 속할 수 있고, 이에 따라 심도별 컨볼루션을 동시에 9 위치들까지 진행할 수 있게 된다. 그러나 도 2n에 도시된 바와 같이, 도 2m에 도시된 것처럼 동시 컨볼루션 패치 위치들을 가지도록 구성된 MR 열들에 활성화 함수(f0)가 송출되면, 결국 MR 열 패치(216)들의 6개만이 요소(f0)의 위치에 중첩하게 되어 요소(f0)에 중첩되지 않는 MR 열들이 유휴(idle)되도록 야기한다.
일반적으로, 입력 특성맵은 이 명세서에 기재되지 않은 최적 시퀀스로 횡단(traverse)되어 MR 열들이 활성을 유지하는 순서, 즉 MR 패치들이 송출되는 활성화 요소들과 덜 중첩되어 MR 열이 유휴하지 않는 최적 순서로 전치된 IFM 4중쌍 슬라이스들을 송출할 수 있다. 다른 평면 위치들의 도트곱들을 병렬로 연산하는 MR 열들 역시 OFM 슬라이스들을 OFM 배송 패브릭(106)을 통해 저장을 위해 SRAM(109)으로 전송하기 전에 MR 열 출력들을 OFM슬라이스들에 사용된 심도 우선 순서로 재정렬하는 열 셔플러 유닛(column shuffler unit; 218)을 필요로 할 수 있다. 예를 들어, 행 "r" 및 열 "c"의 위치에서 연산된 심도별 컨볼루션으로부터의 OFM 슬라이스는 {Or,c,d, Or,c,d+1, Or,c,d+2, Or,c,d+3, Or,c,d+4, Or,c,d+5, Or,c,d+6, Or,c,d+7} 형태의 벡터가 되어야 하는데, 여기서 지수 d는 심도별 컨볼루션의 심도 채널에 해당한다. 더 구체적으로, 심도별 컨볼루션은 각 심도 채널에 대해 독립적으로 연산되므로, 심도별 컨볼루션의 출력 심도 채널은 심도별 컨볼루션의 입력 심도 채널과 동일한데, 여기서는 그냥 "심도별 컨볼루션의 채널(depth-wise convolution's channel)"로 지칭된다. '610 출원의 기준 아키텍처 설명을 참조하면, 지수 d는 8의 배수, 즉 0, 8, 16 등이 될 수 있다. 마지막으로, 열 셔플러 유닛(218)은 올투올(all-to-all) 스위치로 논리적 기능하여 경제적으로 구현, 예를 들어 8개의 입력 소스(source)들을 8개의 행선들로 연결하는 버스로 구현될 수 있다.
약간 상세히 전술한 바와 같이, '610 출원에 기재된 기준 NPU 아키텍처는 심도별 컨볼루션을 효율적인 방식으로 연산할 수 없다. 기준 NPU 아키텍처가 비효율적으로 작동하는 다른 종류의 컨볼루션은 ARGB 컨볼루션인데, 여기서 입력 데이터는 카메라로 캡처된 화상 또는 칼라 비트맵 또는 압축 JPEG 파일로부터 로딩된 화상 등의 칼라 화상이다. 칼라 화상은 전형적으로 세 칼라 채널들 - 예를 들어 RGB 또는 YUV - 및 때로 추가적인 "알파(alpha)" 채널을 가진다. 알파 채널은 컴퓨터 그래픽에서는 흔히 사용되지만, 카메라로 캡처되거나 JPEG 압축 파일로부터 로딩된 칼라 화상과 함께 사용될 때는 알파 채널이 존재하지 않거나(absent) 사용되지 않을 수 있다. 상세히 후술할 이유로, RGB 인코딩에 비해 입력 칼라 화상이 예를 들어 0으로 설정하는 등 알파 채널을 사용하지 않는 ARGB 인코딩을 가질 때 NPU 아키텍처가 더 간단해진다. 퍼스널 컴퓨터나 모바일 앱 프로세서(mobile application processor)를 포함하는 컴퓨터 시스템이 카메라 또는 메모리 또는 파일로부터의 칼라 화상을 4번째 바이트마다 0값을 삽입하여 NPU로 전송함으로써 칼라 화상의 인코딩을 RGB로부터 ARGB로 즉시 용이하게 변환할 수 있다. 이에 따라 '610 출원에 기재된 NPU 아키텍처의 변경을 최소로 유지하면서 NPU가 ARGB 데이터를 처리할 수 있게 하는 것이 유용할 것이다.
도 3a는 1의 배치 크기(batch size)를 가지는 딥러닝 신경망 모델의 실시간 추론(inference)에 흔히 사용되는 ARGB IFM 텐서(200)들의 구성(composition)을 도시한다. 이 IFM 텐서(200)들은 3개의 차원들과, 1과 동일하여 후속적으로 무시되는 제4 차원, 즉 배치크기를 가진다. 더 구체적으로, 딥러닝 신경망 모델을 훈련시키는 동안 전형적으로 1보다 큰, 예를 들어 128의 배치 크기를 가져 훈련을 가속시킴으로써 모델 훈련 수렴을 향상시키는데, 딥러닝 신경망 모델의 실시간 추론은 전형적으로, 사용자 카메라, 자율주행 차(self-driving car), 로봇, 사물인터넷(internet-of-things) 앱, 또는 모델 훈련이 아니라 모델 추론을 주 기능으로 수행하는 다른 기기에 의해 막 캡처된(just-captured) 화상에 해당하는 1의 배치 크기를 사용한다.
도 3a에 도시된 바와 같이, 3D 텐서(200)는 5행 및 12열의 평면 차원들을 가지고 칼라 화상을 포함하는(comprising) 알파 및 세 칼라 채널들에 대응하는 네 심도 채널들을 포함한다(contain). 화상의 행 "r" 및 열 "c'에서 각 평면 위치는 네 요소 벡터 {Ar,c, Rr,c, Gr,c, Br,c}들을 포함한다. 도 3b는 이에 따른 ARGM IFM 텐서(200) 값(202)들을 SRAM(109)에 저장하는 순서를 도시한다. 네 요소 벡터 {Ar,c, Rr,c, Gr,c, Br,c}들이 평면 지수, 예를 들어 열 지수 다음에 행 지수로 차례로, 즉 다음 SRAM 어드레스에 저장되는 것에 주목 바란다. 더 구체적으로, SRAM 입력-출력(input-out) 데이터 비트폭을 16바이트의 IFM 슬라이스 길이에 맞도록 설정하면, 이러한 16바이트 폭의 SRAM(109)의 각 입력값(entry)이 이에 따라 그 평면 위치에 따라 연속되는, 예를 들어 평면 위치 (0, 0), (0,1), (0, 2) 및 (0, 2)인 네 ARGB 화소들을 보유한다(hold). 일반적인 직접 컨볼루션을 연산할 때 NPU가 효율적으로 처리되어야 하는 SRAM(109) 내의 저장 순서는 이 종류이다.
도 3c 내지 3j는 ARGM 컨볼루션을 수행하는 MR 타일(122)을 단계별로 도시한다. 도 3c의 하드우어 블록도는 도 2g의 심도별 컨볼루션의 그것과 유사하다는 점에 주목하기 바라는데, 배럴 시프터(211)가 IFM 캐시(139) 입력으로부터 IFM 캐시(139) 출력으로 이동하여 배열된(arrayed) 인터리브(interleaved) 배럴 시프트 유닛(300)에 조합된다. 열 셔플러는 바이패스되므로 명확성을 위해 생략되었다. 그 외에 ARGB 컨볼루션은 활성화 함수 레인(215)들의 4중쌍과, 4중쌍 MR 유닛(MR0,0 ... MR4,7)들과, 및 MR 유닛 당 한 쌍의 4중쌍 크기의 가산기 트리들과 ARU(210) 내의 한 쌍의 연계된 누산기들을 이용하여 심도별 컨볼루션과 유사한 방식으로 연산된다.
더 구체적으로 도 3c에서, ARGB 3D 텐서(201)를 포함하는 IFM 슬라이스(110)들이 SRAM(109)로부터 IFM 배송 패브릭(104)을 통해 IFM 캐시(139)에 도달한다. 각 IFM 슬라이스(201)는 네 ARGB 화소들을 반송(carry)한다. 예를 들어, 도 3c 내지 3j의 예는 입력 화상을 평면 방식으로 스캔(scanning)하여 내측 지수 루프(index loop)로 좌에서 우로의 수평 방향으로, 외측 지수 루프로 위에서 밑으로의 수직 방향으로 이동(sliding)하는 3x3 컨볼루션 창(convolution window), 즉 IFM 텐서(201)를 도시한다. 스캔이 시작되면, 컨볼루션 창들은 IFM 텐서(201)의 좌상 모서리에 위치하는데, 이에 따라 NPU(100)는 IFM 슬라이스(110)들을 IFM 텐서(201)의 좌상 모서리로부터 호출(fetch)함으로써 IFM텐서 컨볼루션을 시작한다. 특히 IFM 캐시(139)에 맨 먼저(very first) 도달하는 제1 IFM 슬라이스(110)는 평면 위치 (0, 0), (0, 1), (0, 2) 및 (0, 3)들에 ARGB 화소들을 포함하는데, 여기서 평면 좌표를 지시하는 데 (row, column) 표기를 사용한다. 이 네 화소들의 각각은 IFM 캐시(139) 레인 0..3, 4..7, 8..11 및 12..15들에 각각 도달하는데, 각각 4중쌍 0, 1, 2, 및 3에 대응한다. 제2 IFM 슬라이스(110)는 평면 위치 (0, 4), (0, 5), (0, 6) 및 (0, 7)들에 ARGB 화소들을 가져온다. 제3 IFM 슬라이스(110)는 평면 위치 (1, 0), (1, 1), (1, 2) 및 (1, 3)들에 ARGB 화소들을 가져온다. 이 과정은 도 3c에 도시된 바와 같이 ARGB 화소들의 3 바이 8 패치가 호출될 때까지 계속된다.
도 3d는 ARGB 층 컨볼루션 연산이 시작될 준비가 된, IFM 캐시(139)에 저장된 ARGB 화소들의 3 바이 8 패치를 도시한다. 도 3e에서, 네 컨볼루션 패치(322)들이 연속적인 평면 위치들에 위치하는 것에 주목 바란다. 각 컨볼루션 패치(302)는 행 바이 열 바이 심도 채널 표기를 사용하여 3x3x4의 크기를 가진다. 네 컨볼루션 패치(302)들의 각각에는 그 활성화 함수 레인 4중쌍이 할당된다. 예를 들어, IFM 캐시(139)와 배열된 인터리브 배럴 시프트 유닛(300)이 함께 작동되어 좌단의 컨볼루션 패치(302)와 컨볼루션 연산된(convolved) ARGB 화소들을 활성화 함수 레인 4중쌍 0, 즉 활성화 함수 레인 0, 1, 2, 및 3으로 유도한다(direct). 더 구체적으로 이 예에서, 알파 채널 A가 활성화 함수 레인 0에 할당되고, R, G, 및 B 채널들이 각각 활성화 함수 레인 1, 2, 및 3에 할당된다. 마찬가지로, 좌측에서 두 번째 컨볼루션 패치(302)와 컨볼루션 연산된 ARGB 화소들이 활성화 함수 4중쌍 1, 즉 활성화 함수 레인 4, 5, 6, 및 7을 통해 스트리밍된다. 이에 따라, 좌측에서 세 번째 및 네 번째 컨볼루션 패치(302)들과 컨볼루션 연산되는 ARGB 화소들은 활성화 함수 레인 4중쌍 2 및 3, 즉 각각 레인 8 내지 11과 12 내지 15를 통해 스트리밍된다.
도 3e에서, 위치 (0, 0) 내지 (2, 2)들의 9개의 ARGB 화소들은 승산 리듀스(212) 유닛(MR1, 0...7)들로 컨볼루션 연산되도록 포괄적으로 활성화 함수 레인 0 내지 3을 통해 순차적으로 도달하고, 위치 (0, 1) 내지 (2, 3)들의 9개의 ARGB 화소들은 승산 리듀스(212) 유닛(MR0, 0...7)들로 컨볼루션 연산되도록 포괄적으로 활성화 함수 레인 4 내지 7을 통해 순차적으로 도달하며, 위치 (0, 2) 내지 (2, 4)들의 9개의 ARGB 화소들은 승산 리듀스(212) 유닛(MR2, 0...7)들로 컨볼루션 연산되도록 포괄적으로 활성화 함수 레인 8 내지 11을 통해 순차적으로 도달하고, 그리고 위치 (0, 3) 내지 (2, 5)들의 9개의 ARGB 화소들은 승산 리듀스(212) 유닛(MR3, 0...7)들로 컨볼루션 연산되도록 포괄적으로 활성화 함수 레인 12 내지 15를 통해 순차적으로 도달한다. '610 출원에 기재된 바와 같이, 컨볼루션 가중치 커널은 층 컨볼루션이 시작되기 전에 승산 리듀스 유닛들의 가중치 레지스터 파일들에 사전 로딩(pre-loaded)되어야 한다. 열 c=0..7일 때 MR0..3, c에 로딩되는 ARGB 컨볼루션 커널의 경우는, MR0..3, c가 동일한 컨볼루션을 수행하므로, 즉 동일한 가중치 커널을 가지므로 다른 평면 위치들에서 동일한 값을 가질 수 있다.
네 컨볼루션이 병렬로 진행되므로, MR 유닛들과 연계된 ARU 모듈들은 9클록 사이클 당 적어도 네 OFM 슬라이스들을 산출한다는 것에 주목 바란다. 네 OFM 슬라이스들은 네 위치(302)들에 적용된 컨볼루션들에 대응한다. ARGB 컨볼루션의 RGB 값들은 전형적으로, 딥러닝 모델의 ARGB를 따르는 층들에서의 활성화 함수들과 달리 0값을 별로 가지지 않는다. 그러나 알파 채널의 모든 값들은 0으로 설정될 수 있고, 또 그래야 한다. 이에 따라, 활성화 함수 희박도에 대한 NPU의 지원이 ARGB 컨볼루션을 약 4/3의 비율로 가속시킬 수 있다. '610 출원에서 언급한 바와 같이, 0값의 활성화함수들을 가장 효율적으로 스킵함으로써 연산을 가속시키기 위해, ARGB 값들을 반송하는 활성화 함수 레인들은 의사 랜덤하게(pseudo-randomly) 셔플링되어 0값의 활성화 함수들, 이 경우 0값의 알파 채널들을 모든 활성화 함수 레인들에 분산(spread out)시켜야 함에 유의해야 한다. MR 유닛들에 사전 로딩된 컨볼루션 커널 가중치 역시 대응 활성화 함수들이 셔플링된 순서에 맞춰 셔플링되어야 함에 유의해야 하는데, 그러면 활성화 함수들이 MR 어레이(122)에 도달하면서 셔플링된다고 하더라도 정확히 가중치로 승산될 수 있다.
도 3f는 어레이 인터리브 배럴 시프트 유닛(300)의 작동을 보인다. 도 3e에서, 위치 (0, 0) 내지 (0, 3)에 ARGB 화소들을 포함하는 맨 먼저의 제1 IFM 슬라이스(110)는 배럴 시프트의 적용을 요하지 않는 방식으로 IFM 캐시(139) 레인들에 도달한다는 점에 유의하기 바란다. 달리 말해, 위치 (0,0)로부터의 ARGB 화소는 활성화 함수 레인 0 내지 3들에 도달하여 송출(broadcast) 레인 0 내지 3들에 연결된 승산 리듀스 유닛(MR0, 0...7)들로 소비될 준비가 된다. 그러나 위치 (0, 0)로부터의 ARGB 화소에 이어 MR0, 0...7에서 연산되도록 도달하는 ARG 화소는 위치 (0, 1)로부터 유래한다. IFM 캐시(139)는 위치 (0, 1)로부터의 ARGB 화소의 네 값들을 캐시 레인 4 내지 7에 저장한다. 어레이 인터리브 배럴 시프트 유닛(300)은 이 네 값들을 헤인 4 내지 7들로부터 레인 0 내지 3들로 이동시킴으로써, 승산 리듀스 유닛(MR0, 0...7)들이 위치 (0, 0)로부터의 ARGB 화소를 수신한 다음 위치 (0, 1)로부터의 ARGB 화소를 수신 및 처리할 수 있게 된다. 마찬가지로, 어레이 배럴 시프트 유닛(300)이 활성화 함수 레인 4중쌍 간에 필요에 따라 화소를 이동시켜, 이 ARGB 화소가 컨볼루션 동안 소비될 활성화 함수 4중쌍에 확실히 도달하도록 보장한다. 더 구체적으로, 배럴 시프트 유닛(300)은 IFM캐시(139) 레인 0..3들로부터의 ARGB 화소(0, 0)를 활성화 함수 송출(137) 레인 12..15들로, IFM캐시(139) 레인 4..7들로부터의 ARGB 화소(0, 1)를 활성화 함수 송출(137) 레인 0..3들로, IFM캐시(139) 레인 8..11들로부터의 ARGB 화소(0, 2)를 활성화 함수 송출(137) 레인 4..7들로, 그리고 IFM캐시(139) 레인 12..15들로부터의 ARGB 화소(0, 1)를 활성화 함수 송출(137) 레인 8..11들로 동시에 이동시킨다. 이 고정은 IFM 캐시(139)가 ARGB 화소들의 사본을 연산을 위해 배럴 시프트 유닛(300)을 통해 활성화 함수 송출 레인들과 MR 4중쌍에 전송을 계속하는 동안 필요한 만큼 반복된다.
도 3e에 도시된 위치들에서 네 컨볼루션이 병렬로 진행되므로, IFM 배송 패브릭(104)은 네 현재의 컨볼루션이 완료되어 네 컨볼루션 패치(302)들이 다음 위치로 넘겨질 때 컨볼루션에 필요할 ARGB 화소들을 포함하는 IFM 슬라이스(110)들을 가져온다. 더 구체적으로, 도 3g에서 패치(302)들은 위치 (0, 0) ... (2, 2), (0, 1) ... (2, 2), (0, 2) ... (2, 4) 및 (0, 3) ... (2, 5)들로부터 한 행 아래의 위치 (1, 0) ... (3, 2), (1, 1) ... (3, 2), (1, 2) ... (3, 4) 및 (1, 3) ... (3, 5)들로 이동하였다. 위치 (3, 0) 내지 (3, 5)의 ARGB 화소는 이제 새 위치들에서의 컨볼루션들의 연산이 필요하다. 이에 따라 IFM 배송 패브릭(104)는 이 화소들을 SRAM(109)로부터 IFM 캐시(139)로 가져온다. IFM 배송 패브릭(104)와, SRAM(109)와, 및 캐시(139)는 한 IFM 슬라이스의 입도(granularity)로 작동하므로, NPU는 도 3f에 도시된 바와 같이 위치 (3, 0) 내지 (3, 7)의 ARGB 화소들을 포함하는 두 전체 IFM 슬라이스들을 호출한다.
이제 IFM 캐시(139)에 저장된 위치 (3, 0) 내지 (3, 7)의 ARGB 화소들과 도 3g에 도시된 이전 네 위치(302)들에서의 컨볼루션이 완료되면, MR 타일(102)은 이제 도 3g에 도시된 위치들에서 컨볼루션의 연산을 시작한다. 도 3e 및 3f와 유사하게, IFM 캐시(139)는 ARGB 화소들의 사본을 배열된 배럴 시프터(300)를 통해 MR 4중쌍 유닛들에 전송함으로써, 각 MR 4중쌍이 그 MR 4중쌍에 연계된 컨볼루션 패치(302)로부터 ARGB 화소들을 수신하게 된다. 또한, 컨볼루션 패치(302)들이 또 다른 다음 위치로 넘겨질 것을 예상하고, IFM 배설 패브릭(104)은 빠진(missing) ARGB 화소 값들, 즉 다음 위치에서의 네 컨볼루션의 연산에 필요하지만 아직 IFM 캐시(139)에 저장되지 않은 화소 값들을 포함하는 IFM 슬라이스(110)들을 가져온다.
도 3h 내지 3j는 네 컨볼루션 패치들의 집합으로 ARGB 화상, 즉 IFM 텐서(201)를 지그재그 방식으로 넘김을 계속하여, ARGB 화소들을 반송하는 IFM 슬라이스들이 네 컨볼루션 창이 다음 위치로 넘겨질 것을 예상하여 IFM 캐시에 계속 도달함에 따라 ARGB 데이터에 3x3x4x8 컨볼루션을 더 수행하는 과정을 도시한다. ARGB 컨볼루션이 진행되면서, '610 출원에 기재된 원리에 따라 OFM 배속 패브릭은 연산된 결과, 즉 OFM 슬라이스들을 저장을 위해 SRAM(109)으로 이동시킨다.
도 3c 내지 3j의 ARGB 컨볼루션 예들은 평면 크기 3 바이 3의 컨볼루션 가중치 커널을 사용한다. 더 큰 평면 크기의 커널도 '610 출원에 기재된 바와 같은 복수 사이클링(multi-cycling)을 포함한 여러 가지 방법들을 사용하여 사용될 수 있는데, 위 방법은 가중치 커널들을 복수의 MR 타일들에 걸쳐 분할하고, 이어서 이 MR 타일들로부터의 도트곱들을 리듀스 패브릭(111)을 사용하여 조합, 즉 가산하거나 및/또는 큰 크기의 가중치 커널들을 더 작은 크기 - MU 가중치 레지스터 파일들에 맞는 크기 - 의 커널들로 분할하고 부분적 결과들을 사용하여 ARGB 컨볼루션을 연산한다.
도 3k는 어레이 인터리브 배럴 시프트 유닛(300)의 블록도를 도시한다. 유닛(300)은 배럴 시프트 유닛(211)들의 어레이(array)로 구성되는데, 어레이 크기는 역시 네 4중쌍을 가지는 MR 어레이(122)에 대응하여 4이다. 유닛(300)의 입력 Sel[1:0]들은 시프트 양을 나타내는데, 예를 들어 1은 각 입력 4중쌍에 한 4중쌍만큼 배럴 시프트, 2는 두 4중쌍만큼의 시프트, 3은 세 4중쌍만큼의 시프트, 그리고 0은 입력 4중쌍을 시프트 없이 그대로 통과시키는 것을 나타낸다.
도 3l 내지 3q는 ARGB 컨볼루션을 위한 대체적인 실시예를 도시한다. 도 3c 내지 3j에 도시된 실시예와 달리, 도 3l 내지 3q의 대체적 실시예는 '610 출원에서와 같이 MR 열(133) 당 단일한 쌍의 가산기 트리(128Q, 128B)들을 재사용하고, 4중쌍 활성화 함수 레인들이나 4중쌍 가산기 트리(213, 214)들을 사용하지 않는다. 도 3l에서, 평면 패치 크기 3x3의 ARGB 컨볼루션이 ARGB 화소들을 세 IFM 슬라이스들로 호출함으로써 시작된다. 첫 세 IFM 슬라이스(110)들은 각각 평면 위치 (0, 0) 내지 (0, 3), (1, 0) 내지 (1, 3) 및 (2, 0) 내지 (2, 3)들에 12개의 ARGB 화소들을 포함한다. 도 3m에서, IFM 캐시(139)에 저장된 이 첫 세 IFM 슬라이스(100)들로, 이 12개의 ARGB 화소들 중 9개의 사본(321)들 - 3x3 컨볼루션 패치의 평면 위치에 해당하는 것들의 사본들을 - IFM캐시(139)로부터 어레이 인터리브 배럴 시프트 유닛(301)을 통해 16개의 활성화 함수 레인들에 도시된 순서로 전달한다. 각 ARGB 화소가 4개의 값들을 포함하므로 (9개의 ARGB 화소들) * (ARGB 화소 당 4개의 값들) = 36개의 활성화 함수 값들이 컨볼루션 패치의 단일한 평면 위치마다(당; per) 처리되어야 한다. 16개의 활성화 함수 레인들을 통한 36개의 활성화 함수 값(321)의 MR 어레이(122)로의 공급은 (36/16) = 3클록 사이클이 소요되는데, (3 클록 사이클) * (16개의 활성화 함수 레인들) - (36개의 활성화 함수 값들) = 12개의 사용되지 않는 활성화 함수 슬롯(slot)들이 0으로 채워진다. 컨볼루션 패치의 현재 평면 위치에서의 컨볼루션 연산은 세 도트곱을 연산하는 MR 어레이(122)에 의해 완료(conclude)되는데, 여기서 16개의 활성화 함수들 당 한 도트곱이고, 이 세 도트곱의 결과들을 ARU(167) 누산기(130A/130B)에서 누적 연산하고, ARU(167)가 활성화함수를 적용하여 결과적인 OFM 슬라이스를 OFM 배송 패브릭(106)을 통해 SRAM(109)로 반환한다. '610 출원에 기재된 원리를 따라, NPU는 동일한 ARGB 데이터를 복수의 MR 타일들에 병렬로 공급하여 다른 컨볼루션 가중치 커널을 적용함으로써 OFM 채널들의 수를 예를 들어 단일한 OFM 슬라이스에 포함된 8개의 값들 이상으로(beyond) 증가시킬 수 있다. 그 상세는 '610 출원을 참조 바란다.
다시 도 3m을 참조하면, MR 어레이(122)가 패치(302)에 해당하는 평면 위치에서의 컨볼루션을 연산하는 동안, 평면 위치 (3, 0) 내지 (3, 3)들에서의 4개의 추가적(more) ARGB 화소들을 반송하는 다른 IFM 슬라이스(110)가 IFM 캐시(139)에 도달한다. 이어서 도 3n에서, 컨볼루션 패치(302)가 한 행 밑의 다음 평면 위치로 넘겨진다. 도 3m과 마찬가지로, 컨볼루션 패치(302)의 새로운 평면 위치에 대응하는 9개의 ARGB 화소(321)들이 3 클록 사이클에 걸쳐 IFM 캐시(139)로부터 배럴 시프트 유닛(301)을 통해 활성화 함수 송출 레인(137)들로 MR 어레이(122)에 도달하는데, 이는 3x3x4x8 컨볼루션, 즉 3x3 평면 크기 바이 ARGB 화소 당 4개의 값, OFM 슬라이스가 생성된 8개의 값들을 포함하는 컨볼루션 연산으로 진행된다. 이와 동시에 다음 세 IFM 슬라이스(110)들이 12개의 추가적 ARGB 화소들을 반송하는 SRAM으로부터 컨볼루션 패치(302)가 곧 이동할 위치들에 도달한다.
이어서 도 3o에서, 평면 패치가 한 열 우측의 다음 위치로 넘겨진다. 이에 따라 IFM 캐시(139) 및 배럴 시프트 유닛(301)이 평면 패치의 새 위치에 해당하는 ARGB 화소 값들을 연산을 위해 MR 어레이(122)에 제공한다. 마지막으로, 도 3p 및 3q는 평면 패치가 ARGB 화상, 즉 IFM 텐서(201)를 지그재그 방식으로 계속 통과시킴(traversing)에 따른 다음 두 평면 위치들에서의 ARGB 컨볼루션을 도시한다.
도 3l 내지 3q의 어레이 인터리브 배럴 시프트 유닛(301)은 도 3c 내지 3j의 어레이 인터리브 배럴 시프트 유닛(300)과 다르다는 것에 유의해야 한다. 도 3r에서, 유닛(301)은 배럴 시프트 유닛(211)들의 어레이를 포함하는데, 각각 도 3k와 유사하게 활성화 함수의 4중쌍(네 값들)에 대응하여 ARGB 화소를 연산한다. 그러나 배럴 시프트 유닛(211)들을 구동하는 제어 선택 신호 Sel[1:0,3:0]들은 이제, 임의의 IFM 캐시(139) 레인 4중쌍으로부터의 ARGB 화소를 예를 들어 도 3m에 도시된 것 등 임의의 다른 활성화 함수 레인 4중쌍으로 이동시킬 수 있게 하도록 분리된다.
도 3l 내지 3q에 도시된 바와 같이 0이 덧대지고(padded) 알파값들이 0으로 설정된 ARGB 화소 값들은 많은 0값들을 포함한다. '610 출원에 기재된 바와 같은 활성화 함수 희박도 지원이 0값인 활성화 함수를 스킵하여 연산 스루풋을 가속할 수 있다. 예를 들어 NPU 실리콘 면적을 축소시키기 위해 활성화 함수 희박도 지원이 불가능한 경우, IFM 캐시(139)로부터 RGB 값들만을 호출하는 것이 유용할 수 있다. 도 3s는 IFM캐시(139)로부터의 알파값들이 MR 어레이(122)에 도달하지 않는 ARGB 컨볼루션 실시예를 도시한다. 더 구체적으로, 어레이(arrayed) ARGB-투(to)-RGB 배럴 시프트 유닛(312)은 IFM 캐시(139)로부터 몇 개의 어드레스들에서 IFM 슬라이스들을 독출(read)하여, 독출된(retrieved) ARGB 데이터를 재정렬하여 알파 채널을 버리며(drop), RGB 값들을 컨볼루션 패치(302)의 평면 위치에 따라 연계시키고(concatenate), (9개의 컨볼루션 화소들) * (RGB 화소 당 3개의 값들) = 27개의 활성화 함수 값들을 두 16 길이(16-long)의 IFM 슬라이스(321)로 짝지으며 두 IFM 슬라이스(321) 중의 하나의 4개의 사용하지 않는 값들을 0들로 덧댄다(pad). 그 외에는, 컨볼루션 과정이 도 3l 내지 3q에 도시된 예와 유사하게 진행되어, SRAM(109)로부터 IFM 캐시(139)에 도달하는 동안 컨볼루션 패치(302)가 ARGB 화상을 지그재그 순서로 횡단하는데, 이는 ARGB 화소들을 배럴 시프트 유닛(301)을 통해 MR 어레이(122)에 정확한 순서로 공급한다.
도 3t 내지 3v는 도 3s에 사용된 ARGB-투-RGB배럴 시프트 유닛(312)의 마이크로 아키텍처를 도시한다. 도 3t의 유닛(310)은 IFM 캐시(139)로부터 호출한 IFM 슬라이스에서(out of) ARGB 화소를 선택한다. 유닛(311)은 IFM 캐시(139)로부터 두 IFM 슬라이스들을 수신하여 알파 채널의 값을 버리고(drop), 나머지 두 RGB 값들을 함께 6요소 길이(6-element-long)의 벡터로 연계시키며, 이 6요소 벡터를 배럴 시프터를 통해 전달하고(pass), 배럴 시프터 출력을 크롭(crop)하여 첫 네 값들만을 출력시킨다. 예를 들어, 유닛(311)은 화소 AARAGABA 및 ABRBGBBB들을 RAGABARB로, RAGABARB로, GABARBGB로, 또는 BARBGBBB로 변환할 수 있다. 마지막으로, 도 3v에 도시된 유닛(312)는 IFM 캐시(139)의 몇 개의 어드레스 쌍들로부터 IFM 슬라이스들을 수신하여 ARGB 데이터를 RGBR 또는 RGBG 또는 BRGB 데이터 순서의 4중쌍으로 변환하여, 이런 값 4중쌍의 넷을 MR 어레이(122)로 처리되기에 적합한 16요소 IFM 슬라이스로 연계시킨다.
전술한 ARGB 컨볼루션 실시예들은 16 바이트의 크기를 가지는 IFM 슬라이스를 이용하여 각 화소가 4 바이트로 구성된 네 ARGB 화소들을 간편하게 피팅(fitting)시킨다. 이는 '610 출원으로부터의 16바이트별 IFM 배송 버스와, IFM 캐시(139)와, 및 MR 어레이(122)를 대략 변화 없이 필요한 평면 위치에서 ARGB 화상으로부터 ARGB 화소들을 호출한다. 그러나 기존의 하드웨어 아키텍처를 재사용하는 편의성은 각 RGB 화소와 함께 사용되지 않는 알파값을 저장하는 상충(tradeoff)을 가진다. SRAM 크기가 비싸지고 SRAM 사용이 감소되어야 하는 경우, ARGB 화상이 아니라 RGB 화상을 컨볼루션 연산할 수 있는 NPU 실시예를 살피기로 하자.
도 3w는 세 칼라, 즉 각각 활성화 함수 값(201)들로 구성된 심도 채널(202)들을 포함하는 3D IFM 텐서(200) 형태의 RGB 화상을 도시한다. 도 3x에서, SRAM(109)는 심도 우선 순서로, 즉 동일한 화소로부터의 RGB 값들을 연속적인 SRAM 어드레스들에 저장할 수 있다. SRAM(109)은 '610 출원에 기재된 연산의 수행을 계속할 수 있도록 '610 출원에서와 같이 16바이트 폭이다. 16인 SRAM바이트 폰이 3의 바이트 폭인 RGB 화소로 균일하게 나뉘지 않으므로, SRAM에서 호출된 각 IFM 슬라이스는 하나 또는 두 RGB 화소가 부분적으로 수반되는 복수의 RGB 화소들을 포함한다. 예를 들어, 도 3x의 RGB 화상(204)의 최상단 IFM 슬라이스, 즉 행은 평면 위치 (0, 0) 내지 (0, 4)의 5개의 전체 RGB 화소들과, 위치 (0, 5)의 RGB 화소에 속하는 R 채널을 포함한다.
도 3y에서, IFM 슬라이스(110)는 - SRAM(109)에 저장된 - RGB 화상(201)로부터 도 3z에 도시된 바와 같은 초기 평면 위치에 위치한 컨볼루션 패치(302)에 해당하는 IFM 캐시(139)에 도달한다. 컨볼루션은 IFM 캐시(139)가 IFM 슬라이스들의 사본을 전송함으로써 시작되어, 크로스바(cross-bar; 314)에 의해 재정렬되고, - 컨볼루션 패치(302)의 현재 평면 위치에서 컨볼루션 연산에 필요한 9개의 RGB 화소를 포함하는 - 두 IFM 슬라이스(321)들로 연산을 위해 MR 어레이(122)로 전송된다. 도 3aa 및 3ab에서, 컨볼루션은 컨볼루션 패치(302)가 IFM 텐서(201), 즉 RGB 화상의 횡단을 지속함에 따라 계속되어, IFM 슬라이스(110)들은 컨볼루션 패치(302)가 다음 위치로 넘겨질 것을 예측하여 IFM 캐시(139)에 도달하고 - 필요에 따라 크로스바(314)로 재정렬되어 - RGB 화소들의 MR 어레이(122)로의 전송을 계속한다.
16인 IFM 슬라이스 바이트 폭이 3인 RGB의 바이트 폭으로 균등하게 나뉠 수 없으므로, 컨볼루션 패치(302)의 다양한 평면 크기를 지원하기 위해 크로스바(314)가 활성화 함수 레인 값들을 거의 임의적인 방식으로 재정렬할 필요가 있다. 8비트 16-입력-바이-16-출력의 올투올(all-to-all) 크로스바를 각 MR(102)에 추가하는 것은 실현 불가능할 정도로 고가(prohibitively expensive)이다. 이에 따라, ARGB 컨볼루션을 사용하는 NPU 실시예들은 RGB 컨볼루션을 사용하는 실시예에 대해 어떤 이점들을 가진다.
심도별 및 ARGB 컨볼루션을 '610 출원의 기준 NPU에 대한 확장으로 살핀 다음, 연산 스루풋을 유지하면서 NPU(100)의 실리콘 면적의 축소에 집중하는 다른 세트(set)의 확장들을 고려해보자. 더 구체적으로, 도 4a는 승산기 유닛(126)의 비트폭이 8비트 바이 8비트로부터 4비트 바이 4비트 또는 4비트 바이 8비트로 축소됨으로써 MR 타일(102)이 8비트, 16비트, 또는 더 긴 비트폭 대신, int4 및 uint4 등의 4비트 가중치 및/또는 활성화 함수를 연산할 수 있는 도 2f로부터의 MR 타일의 한 실시예를 도시한다. 중요하기로, 수정된 타일(102)은 활성화 함수 값들의 희박도에 추가하여 가중치 희박도와 함께 "크기(magnitude)" 희박도 역시 이용함으로써 그 스루풋을 가속할 수 있다. 가중치 희박도를 가중치들이 0값을 가지는 커널로 지칭하기로 하자. 크기 희박도를 가중치 및/또는 활성화 함수 값들이 종종 작은 크기, 즉 절대값을 가지는 커널로 지칭하기로 하자. 특히 16 미만의 크기를 가지는 가중치 및/또는 활성화 함수들, 즉 4비트 무부호(unsigned) 정수에 맞아 4비트 승산기로 처리할 수 있는 것에 관심이 있다. 훈련된 딥러닝 모델의 활성화 함수 및 가중치들이 종종 작은 크기를 가져 - 더 작은 면적과 전력을 가지는 - 4비트 승산기로 연산 스루풋에 약간 또는 거의 저하 없이 8비트 값들을 처리할 수 있게 하는 것이 잘 알려져 있다. 4비트 승산기를 사용한 8비트 값의 연산을 "혼합 정밀도(mixed precision)" 연산으로 지칭하기로 하자. '610 출원에 관련된 다른 실시예가 일반적인 직접 컨볼루션 경우의 혼합 정밀도 연산을 상세히 설명한다. 본 발명은 혼합 정밀도 개념을 심도별 및 ARGB 컨볼루션에 적용한다.
도 4a에서, 바이트 폭의 가중치 레지스터 파일(127)들이 최상위 니블(most-significant nibble; MSN)(400)과 최하위 니블(least-significant nibble; LSN)(401)로 분할되었음에 주의 바란다. 더 구체적으로, 기준 '610 발명의 가중치 레지스터(127)는 크기 및 부호(magnitude-and-sign) 포맷으로 가중치들을 보유하는데, 크기가 8비트 폭, 즉 uint8이고 부호가 한 추가적 비트를 차지한다. 이에 따라 가 uint8 가중치 크기가 두 uint4 값들로 논리적으로 분할되는 예외를 제외하면, 도 4a의 가중치 레지스터 파일들의 용량(capacity)과 비트폭은 변하지 않는다.
도 4b는 '610 출원에 기재된 승산기 유닛(103)의 기준 마이크로 아키텍처를 도시하는데, 승산기(126)는 8 바이 8 비트폭, 즉 uint8 가중치 크기 mult_in_a[7:0]을 uint8 활성화 함수 크기로 승산하여 곱의 크기로 uint16 결과 multi_out_abs[15:0]을 얻는다. 가중치와 활성화 함수 양자는 부호 및 크기 포맷으로 승산기(126)에 도달한다. 더 구체적으로, 가중치 레지스터 파일(127)은 18개의 가중치 {sw0,w_abs0[7:0]} 내지 {sw17,w_abs17[7:0]}들을 저장한다. 1의 거리를 가지는 검색(look-aside) 작동을 지원하기 위해 승산기(126)는 - 멀티플렉서(414)를 통해 - 세 소스들로부터 그 가중치를 수신할 수 있는데: 버스 {swt_self, wt _abs_self[7:0]}를 통해 동일한 승산기 유닛(103)의 승산기(126)와 함께 위치하는 가중치 레지스터 파일(127)과, 버스 {swt_up1_in, wt_abs_up1_in[7:0]}를 통해 한 레인 위의 승산기 유닛(103) 내에 위치하는 가중치 레지스터 파일과, 및 버스 {swt_dn1_in, wt_abs_dn1_in[7:0]}를 통해 한 레인 아래의 승산기 유닛(103) 내에 위치하는 가중치 레지스터 파일을 수신할 수 있다.
승산기(126)가 가중치 및 활성화 함수 크기 쌍들의 곱을 연산하면, 유닛(419)은 가중치의 부호 s_in_a를 활성화 함수의 부호 s_in_b의 배타적 논리합(exclusive-or; 427)을 취함으로써 곱의 부호를 연산하고, uint16 결과 크기를 유부호(signed) 2의 보수(complement) int16 수 mult_out[15:0]로 변환한다. 도 4c의 유닛(425, 426) 참조. 레지스터(417)는 입력들을 승산기(126)로 래치(latch)한다. 논리 셀(415, 416)은 가중치의 크기가 0과 같은지 점검하여 신호 wt_zero를 생성한다. 각 활성화 함수 레인에서, ABU(141)는 활성화 함수 {sact, act_abs[7:0]}와, 활성화 함수의 크기가 0인지 나타내는 신호 act_zero와, 및 유닛(414)를 통해 레지스터(417)로의 클록을 게이팅함(gate)으로써 승산기(126)가 유휴한다고 추정될 때 승산을 중지시키는 en_mult를 송출한다. 논리 유닛(416)은 가중치 또는 활성화 함수가 0과 같은지를 점검하여 mult_by_zero를 생성함으로써 다음(upcoming) 승산이 0에 의한 승산임을 표시한다. 0에 의한 승산의 경우, 논리 유닛(424)은 신호 mult_in_ce를 사용하여 레지스터(417)로의 클록을 게이팅하여 승산기(126)로의 입력들을 동결(freezing)시킴으로써, 입력 레지스터(417) 및 무부호-투(to)-유부호 결과 변환 유닛(422)이 동적 전력을 소모하지 않도록 한다. 이와 동시에, 레지스터(418)가 논리 유닛(420)이 승산기 유닛의 출력 mult_result[15:0]에 유부호 결과의 0 설정(zero out)을 야기할 수 있는 mult_by_zero를 한 클록만큼 래치하는데, MR 타일(102)이 활성화 함수 레인 4중쌍으로 짝지어진 경우 이 출력은 이어서 가산기 트리(128A, 128B 또는 213, 214)에 연결된다.
멀티플렉서(411, 412, 413)는 가중치 레지스터 파일(127)의 세 독출 포트(read port)들을 포함한다. 각 독출 퍼트, 즉 멀티플렉서(411, 412, 413)들은 그 5비트 독출 어드레스 sel_wt_self[4:0], sel_wt_dn1[4:0] 및 sel_wt_up1[4:0]을 각각 ABU 유닛(141)로부터 수신한다. 더 구체적으로, 멀티플렉서(411)는 현재 가중치 사이클에 예견(look-ahead)이 이뤄지지 않았을 때 가중치 레지스터 파일(127)로부터 가중치를 호출한다. 달리 말해, 유입 활성화 함수 {sact, act_abs[7:0]}에 연계된 가중치가 - 한 레인 위의 MU(103) 또는 한 레인 아래의 MU(103)가 아니라 - 그 활성화 함수와 동일한 레인에 있을 때, 국부적 가중치 레지스터 파일(127)에서 승산기 유닛(126)으로 가중치를 호출하는 것은 멀티플렉서(411)이다. 활성화 함수 {sact, act_abs[7:0]}가 예를 들러 도 11의 멀티플렉서(163)를 사용하여 한 레인 위로 시프팅되었을 때, 그 활성화 함수에 연계된 가중치는 한 레인 아래의 MU(130)에 위치한 가중치 레지스터 파일(127)에 저장되어 있다. 이에 따라, 한 레인 아래의 MU(130)의 멀티플렉서(413)가 승산이 이뤄질 MU(130)에 도달하는 활성화 함수에 연계된 가중치를 호출하여 이 가중치를 버스 {swt_up1_out, wt_abs_up1_out[7:0]}을 통해 승산이 이뤄질 MU(130)로 올려 보낸다. 마찬가지로, ABU(141)가 활성화 함수 {sact, act_abs[7:0]}을 한 레인 아래로 시프팅시켰을 E, rm 활성화 함수에 연계된 가중치는 한 레인 위의 MU(130)에 위치한 가중치 레지스터 파일(127)에 저장되어 있다. 한 레인 위의 MU(130)의 멀티플렉서(412)가 승산이 이뤄질 MU(130)에 도달하는 활성화 함수에 연계된 가중치를 호출하여 이 가중치를 버스 {swt_dn1_out, wt_abs_dn1_out[7:0]}을 통해 승산이 이뤄질 MU(130)로 내려 보낸다.
연산이 시작되기 전에, 가중치 압축해제 유닛(weight decompression unit; WDM)(138)이 수직 버스 {swt_in[C], wt_abs_ld_in[7:0][C]}를 통해 가중치들을 가중치 레지스터 파일(127)에 로딩시키는데, 여기서 C는 MR 열 지수 0..7이다. 한 가중치를 지수 L 0..15를 가지는 레인 내의 8개의 승산기 유닛들의 각각에 로딩시키기 위해, WDM은 디멀티플렉서(410)가 지수 wt_ld_idx[4:0]에서 가중치 레지스터의 클록 입력을 언게이팅(un-gate)하는데, wt_ld_idx는 0 내지 17의 범위이다.
도 4d는 8비트 가중치와 4비트 활성화 함수를 가지는 승산기 유닛(13)의 한 실시예를 보인다. 도 4d는 도 4b와 유사하지만, 레인 송출 버스 {sact, act_abs[3:0], is_msn} 내의 활성화 함수 크기 act_abs 비트폭이 8비트 폭이 아니라 4비트 폭, 즉 uint4이고, 도 4d의 MU(103)는 두 클록 사이클을 사용하여 연산을 종료할 수 있다. 더 구체적으로, 제1 클록 사이클 동안 ABU(141)는 활성화 함수의 최하위 니블(LSN)을 전송하고, 이를 MU(103)이 8비트 가중치로 승산하고 예를 들어 int16 등의 유부호 값으로 변환하여 곱을 가산기 트리로 전송하며, 이어서 트리는 그 결과를 ARU 누산기에 저장(또는 가산)할 수 있다. 제2 클록 사이클 동안 ABU(141)는 활성화 함수의 최상위 니블(MSN)을 전송하고, 이를 도 4d의 MU(103)이 이전 클록 사이클에서와 같은 8비트 가중치로 승산하고, 그 활성화 함수 니블이 최상위임을 나타내도록 무부호 결과를 위로 4비트만큼 시프팅시키며, 무부호 곱을 예를 들어 int16 등의 유부호 값으로 변환하여 곱을 가산기 트리로 전송하며, 이어서 트리는 그 결과를 ARU 누산기에 가산할 수 있다. 이제 ARU 누산기는 8비트 활성화 함수 값과 8비트 가중치 값의 도트곱에 해당하는 정확한 결과를 포함한다.
ABU(141)는 송출되는 4비트 활성화 함수 크기 act_abs[3:0]가 8비트 활성화 함수 크기의 최상위 또는 최하위 니블인지를 나타내는 추가적 신호 is_msn를 송출한다. is-msn은 활성화 함수 부호 s_in_b 및 크기 mult_in_b[4:0]와 함께 레지스터(417)로 기입(register)되고 무부호-투-유부로 결과 변환 유닛(421)에 도달하여 ABU가 활성화 함수의 MSN을 송출했을 때 4비트 업시프트를 가능하게 한다는 것에 주목 바란다. 더 구체적으로 도 4e에서, 신호 msn은 멀티플렉서(428)가 uint12 곱을 4비트만큼 업시프트 하도록 유발한다.
마지막으로 도 4f는 MU(103)가 4비트 활성화 함수 뿐 아니라 4비트 가중치도 연산할 수 있는 실시예를 도시한다. 가중치 레지스터 파일(127)은 여전히 18개의 8비트 가중치들을 가중치의 1비트 부호와 함께 저장함에 주의 바란다. 그러나 각 저장된 가중치는 이제 MSN과 LSN 니블들, 예를 들어 {sw0, w_abs0[7:4]} 및 {sw0, w_abs0[3:0]}으로 논리적 분할되었다. 멀티플렉서(411, 412, 413)들은 어느 가중치를 호출할 것인가를 나타내도록 ABU(141)로 생성된 추가적 어드레스 선택 비트 is_msn과, uint4 가중치 니블 크기와 가중치의 부호를 포함하는 5비트 버스들: {swt_self, wt_abs_self[3:0]}, {swt_dn1, wt _abs_dn1[3:0]} 및 {swt_up1, wt_abs_up1[3:0]}들을 각각 포함한다. 각 is_msn 신호는 각각 {swt_self, wt_abs_self[3:0], is_msn}, {swt_dn1, wt_abs_dn1 [3:0], is_msn} 및 {swt_up1, wt_abs_up1 [3:0], is_msn} 버스들을 형성하는 대응 버스와 연계된다. 멀티플렉서(414)와 입력 레지스터(417)를 통해 이 버스들이 승산기(126)에 도달하는데, 승산기는 mult_in_a[3:0] 및 mult_in_b[3:0]에 4비트 바이 4비트 승산을 연산하여 8비트 무부호, 즉 uint8 곱 mult_out_abs[7:0]을 얻는다. 유닛(422)이 이 8비트 무부호 곱을 0, 4, 또는 8비트만큼 업시프트 시키고 업시프팅된 값을 유부호 결과 mult_out[15:0], 예를 들어 int16으로 변환한다. 유닛(420)은 유부호 결과를 0으로 설정(zero out)하고 가산기 트리들에 mult_result[15:0]를 출력한다.
MU(103)가 4비트 활성화 함수를 4비트 가중치로 승산하는 데는 한 클록 사이클이 소요된다. 8비트 활성화 함수를 4비트 가중치로 승산하는 것은 두 클록 사이클이 소요되는데, 예를 들어 ABU(141)는 활성화 함수의 LSN을 제1 클록 사이클에 송출하고, 이어서 제2 클록 사이클에 활성화 함수의 MSN을 송출한다. 유닛(422)은 제2 클록(사이클)에서의 곱을 4비트만큼 업시프트시키는 한편, 승산기(126)는 양 활성화 함수 니블들을 동일한 가중치로 승산한다. ARU 누산기는 - 가산기 트리를 통해 - 이 두 클록 사이클로부터 곱들을 가산하여 정확한 연산 결과를 얻는다. 4비트 활성화 함수를 8비트 가중치로 승산하는 것 역시 두 클록 사이클이 소요된다. 이 경우, ABU(141)가 두 클록 사이클 동안 활성화 함수를 변경 없이 유지하는 반면, 멀티플렉서(411, 412, 413)들은 예를 들어 제1 클록 사이클 동안 가중치의 LSN을 승산을 위해 호출하고 제2 클록 사이클 동안 가중치의 MSN을 승산을 위해 호출한다. 승산기(126)가 두 클록 사이클의 각각에서 4비트 값들의 곱을 연산함에 따라, 유닛(422)은 제2 곱을 4비트만큼 업시프트하고, 업시프트된 곱을 int16 포맷으로 변환한다. 유닛(422)은 제1 클록 사이클에서 연산된 곱을 업시프팅 없이 int16 유부호 포맷으로 변환한다.
8비트 활성화 함수를 8비트 가중치로 승산하는 데는 4 클록 사이클이 소요된다. ABU(141)는 제1 및 제2 클록 사이클 동안에 활성화 함수의 LSN을 송출하고 제3 및 제4 클록 사이클 동안 활성화 함수의 MSN을 송출한다. 이에 따라, 멀티플렉서(411, 412, 413)들은 제1 및 제3 사이클 동안 가중치의 LSN을 호출하고 제2 및 제4 클록 사이클 동안 가중치의 MSN을 호출한다. 승산기(126)가 네 클록 사이클의 각각에서 8비트 무부호 곱을 연산하면, 유닛(422)은 제1, 제2, 제3, 및 제4 클록 사이클에서 8비트 곱을 각각 0, 4, 4, 8비트만큼 업시프트시키고, 각 업시프트된 결과를 유부호 int16 2의 보수 값으로 변환한다. 가중치 니블 또는 활성화 함수 니블 - 또는 양자 - 가 이 클록 사이클에서 0과 같은 값으로 승산된다고 추정되면 유닛(42)은 유부호 결과 mult_out[15:0]을 0으로 설정한다(zero out). 유닛(420)은 그 결과 mult_out[15:0]을 누산기와 함께 작동하여 이 네 클록 사이클에 걸쳐 mult_out[15:0]을 합산하는 가산기 트리에 - MR 열 내의 다른 MU(103)들에 연관된 도트곱 연산의 일부로서 출력한다.
도 4g는 유닛(420)의 마이크로 아키텍처를 도시한다. 논리 모듈(logic module; 429)이 하나는 가중치로부터 다른 하나는 활성화 함수로부터의 두 1비트 msn 신호를 가산하여 무부호 결과를 업시프팅 시킬 비트의 양을 결정한다. msna 및 msnb 모두 0이면, 즉 가중치 LSN이 활성화 함수 LSN으로 승산되면 업시프트의 양은 0이다. msna 및 msnb 모두 활성(active)이면, 즉 가중치 MSB가 활성화 함수 MSB로 승산되면 업시프트의 양은 8비트이다. 다른 경우, 즉 가중치 MSB가 활성화 함수 LSB로 승산되거나 또는 가중치 LSB가 활성화 함수 MSB로 승산되면 업시프트의 양은 4비트이다.
도 4h 내지 4k는 8 바이 8비트 승산기가 아니라 8 바이 4비트 승산기를 사용하여, 8비트 활성화 함수와 8비트 가중치를 연산하는 MR 타일(102)을 도시한다. 도 1c 내지 1f에 도시된 '610 출원의 기준 구현예와 유사하게, 8비트 IFM 슬라이스(110)들이 SRAM(109)로부터 (복수의 병렬 대기행렬(queue)로 작동하는) 활성화 함수 버퍼 또는 "IFM 버퍼(IFM buffer)"에 도달한다. 그러나 도 4i에서, IFM 버퍼(124)는 니블 입도(granularity)를 가진다. 예를 들어, 도 4h의 제1(최우단) IFM 슬라이스는 데이터 {0x02, 0xc4, 0x08, 0x1e}를 포함한다. 도 4i에서 이 IFM 슬라이스는 이에 따라 {0x2, 0x4, 0x8, 0xe} 및 {0x0, 0xc, 0x0, 0x1}의 그 LSN 및 MSN 부분으로 분할된다. LSN IFM 슬라이스는 IFM 버퍼(124)의 전단(front; 최우단) 슬롯으로 호출되는 반면, MSN IFM 슬라이스는 IFM 버퍼(124)의 제2(중앙) 슬롯으로 호출된다. 또한 제2 IFM 슬라이스 {0x0d, 0x00, 0x00, 0x09}의 MSN 부분 {0xd, 0x0, 0x0, 0x9}은 IFM버퍼(124)의 제3(최좌단) 슬롯으로 호출된다. 이에 따라 모든 활성화 함수 레인(137)들은 '610 출원의 기준에서의 8비트와 대조적으로 4의 비트폭을 가진다.
도 4i는 IFM 버퍼(124)의 전단 슬롯으로부터 MR 어레이(122)로 송출되는 MSN IFM 슬라이스 {0x02, 0xc4, 0x08, 0x1e}를 도시한다. 4 바이 8비트 승산기(126)가 활성화 함수 및 가중치의 곱을 연산하면, 가산기 트리(128)들은 이 곱들을 0 내지 7 범위의 OFM 열 지수에 대해 열별(column-wise)의 도트곱 SA,c = 0x2*w0,c,0 + 0x4*w1,c,0 + 0x8*w2,c,0 + 0xe*w3,c,0들로 합산한다.
도 4j에서, MSN IFM 슬라이스 {0x02, 0xc4, 0x08, 0x1e}가 IFM 버퍼(124)에서 제거되면, 니블 IFM 슬라이스 {0x0, 0xc, 0x0, 0x1} 및 {0xd, 0x0, 0x0, 0x9}들이 각각 IFM 버퍼(124)의 한 슬롯 우측으로 전진한다. 이제 LSN IFM 슬라이스 {0xd, 0x0, 0x0, 0x9}가 전단 슬롯을 점유하고, MSN IFM 슬라이스 {0xd, 0x0, 0x0, 0x9}가 제2 슬롯을 점유하며 IFM LSN 슬라이스 {0x0, 0x0, 0x0, 0x0}는 IFM 버퍼(124)의 마지막 슬롯으로 이동한다. 이 시점에서 ABU는 0이 아닌 활성화 함수 니블들을 순서외로 전진시키는 데 예견(look-ahead)과 검색(look-aside)를 사용한다. 더 구체적으로, 위쪽 활성화 함수 레인의 제2 슬롯으로부터의 니블 0xd가 활성화 함수 레인 0으로 송출된다. 또한 활성화 함수 레인 3의 전단 슬롯으로부터의 니블 0x1이 활성화 함수 레인 2로 송출된다. 마지막으로, 활성화 함수 레인 3의 IFM 버퍼(124)의 제2 슬롯으로부터의 니블 0x9가 활성화 함수 레인 3으로 송출된다. 결과적으로 MR 어레이(122)는 이제 두 IFM 니블 슬라이스들, 즉 IFM 니블 슬라이스 {0x0, 0xc, 0x0, 0x1} 및 IFM 니블 슬라이스 {0xd, 0x0, 0x0, 0x9}에 대한 도트곱들을 동시에 연산한다. 가산기 트리(128A) 및 누산기(130A)들은 LSN 및 MSN IFM 슬라이스 {0x02, 0xc4, 0x08, 0x1e} {0x0, 0xc, 0x0, 0x1}들에 연계된 도트곱들을 최종 도트곱 SA,c = 0x02*w0,c,0 + 0xc4*w1,c,0 + 0x08*w2,c,0 + 0x1e*w3,c,0으로 조합한다. 이와 동시에, 가산기 트리(128B) 및 누산기(128B)들은 MSN IFM 슬라이스 {0xd, 0x0, 0x0, 0x9}에 대한 도트곱을 연산한다. IFM 버퍼(124)에 저장된 대응 LSN IFM 슬라이스가 모두 0인 값을 가지므로 이 모든 MSN IFM 슬라이스가 폐기될 수 있다는 것에 유의하기 바란다. 이에 따라, 누산기(130B)의 도트곱 결과들은 이제 역시 최종으로 SB,c = 0xd*w0,c,1 + 0x9*w3,c,1과 같아 MR 타일(102)이 두 OFM 슬라이스들을 한 클록 사이클에서 연산하였다.
도 4k는 컨볼루션 연산의 다음 단계를 도시하는데, IFM버퍼(124)가 세 다음 IFM 니블들로 채워지고, 레인 0 슬롯 2와 레인 2 슬롯 1의 니블들이 MR 어레이(122)로 순서외로 송출되며, 가산기 트리(128A) 및 누산기(130A)들이 8비트 IFM 슬라이스 {0x00, 0x0e, 0x20, 0x01}에 연계된 도트곱의 연산을 완료하고, 가산기 트리(128B) 및 누산기(130B)들이 8비트 IFM 슬라이스 0x1e, 0x3b, 0x0f, 0x00}의 도트곱을 연산하였다. 이 과정은 '610 출원에 기재된 바와 같이 각 위치에서의 컨볼루션이 완료될 때까지 계속된다.
8비트 IFM 슬라이스 들을 사용하고 이 8비트 IFM 슬라이스들을 4비트의 쌍들로, 즉 니블 폭으로 분할하는 대신, SRAM(109)( 및 IFM 캐시(139))는 4비트 활성화 함수를, 예를 들어 uint4 또는 int4 포맷으로 포함할 수 있다. 이에 따라, 도 4h에 도시된 NPU(100)은 4비트 활성화 함수들을 연산할 수 있다.
도 4h 내지 4k에 도시된 NPU 연산 역시 8비트 가중치 바이 8비트 또는 4비트 활성화 함수를 승산하는 데, 8비트 가중치 레지스터를 니블 폭 가중치의 쌍들로 분할하고 각 니블 폭의 활성화 함수를 연계된 8비트 가중치로 승산하는 데 두 클록 사이클을 소요함으로써 4 바이 4비트 승산기(126)를 사용할 수 있다. 도 4h 내지 4k에 도시된 NPU 연산 역시 4비트 가중치를 4비트(또는 8비트) 활성화 함수로 승산하는 데, 8비트 가중치 레지스터를 니블 폭 가중치의 쌍들로 분할하고 각 니블 폭의 활성화 함수를 연계된 니블 폭의 가중치로 승산하는 데 한 클록 사이클을 소요함으로써 4 바이 4비트 승산기(126)를 사용할 수 있다.
0값의 니블 활성화 함수들을 스킵하는 것과 별도로, NPU 역시 0값의 니블 가중치들을 포함하는 0값의 가중치들을 스킵할 수 있다. 예를 들어, 송출되는 활성화 함수에 연계된 니블 가중치들이 16개의 모든 레인들 - 또는 4중쌍들이 서로 독립적으로 작동할 때 각 4중쌍의 4개의 모든 레인들 - 이 0인 경우가 발생되면, 0값의 니블에 의한 승산이 모든 레인들에서 스킵될 수 있다. 훈련된 딥러닝 모델의 가중치들은 작은 값들을 가지는 경향이 있으므로, - 특히 독립 4중쌍들의 - 모든 레인들에서의 모든 현재의 최상위 니블들이 0이 될 가능성이 상당히 높을 수 있다.
0의 활성화 함수 스킵에 의한 MR 타일 연산 스루풋의 증가는 또한 이 0값들이 IFM 슬라이스 내에 분포되는 방식에도 좌우된다. 예를 들어, 심도 채널 0 내지 7의 모든 값들이 0과 같은 반면, 심도 채널 8 내지 15는 비0값만을 포함하는 IFM 슬라이스를 가정해보자. 도 1i에 도시된 바와 같이 2의 예견 거리와 1의 검색 거리를 가지는 2 슬롯 심도의 IFM 버퍼(124)는 비0값들을 0값의 심도 채널들에 분산시킬 수 없을 것이다. 이에 따라 IFM 텐서(200)가 50% 희박도임에도 불구하고 연산 스루풋은 증가되지 않을 것이다. 예견 및 검색 거리의 증가는 스루풋을 증가시키는 데 도움이 될 수 있지만, 이는 IFM 버퍼(124)가 더 많은 슬롯들과 각 슬롯 사용에 더 많은 셀(161)들을 가지고 멀티플렉서(163)들이 더 많은 입력들을 가질 것을 요구한다. 또한 검색 거리의 증가는 가중치 레지스터 파일(127)이 추가적인 독출 포트들, 즉 유닛(411, 412, 423)들과 유사한 추가적인 멀티플렉서들과 각 MU(103)으로부터 몇 개의 행 위 및/또는 아래의 승산기 유닛(103)들과의 연결을 요구할 수 있다. 논리와 연결의 이 상당한 증가는 연산 스루풋의 결과적인 증가에 비례하지 않는 실리콘 면적과 전력의 상당한 증가를 초래할 수 있다.
도 5a는 연산 스루풋을 증가시키는 더 나은 방법을 보인다. 도 4a와 비교하여, 도 5a는 IFM 배송 패브릭(104)과 배럴 시프트 유닛(211)들 사이에 각 레인 당 하나의 4 레인 셔플러 유닛(shuffler unit)(500)을 추가한다. 마찬가지로, '610 출원에 기재되고 도 1b에 도시된 일반적 직접 컨볼루션 경우에 비해, 도 5a는 IFM 배송 패브릭(104)과 IFM 캐시(139) 사이에 위치한 16레인 IFM 셔플러 유닛(503)을 추가한다.
셔플링 유닛(500, 503)들의 목적은 각 유입 IFM 슬라이스 내의 값들의 순서를 의사 랜덤 방식으로 치환하는 것이다. 예를 들어, IFM 슬라이스 내의 값 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}들은 의사 랜덤하게 셔플링(치환)되어 {9, 7, 3, 15, 0, 6, 7, 10, 1, 2, 5, 12, 4, 13, 14, 8}이 될 수 있다. 이 재정렬은 비0값들을 모든 IFM 활성화 함수 레인들에 걸쳐 더 균일하게, 즉 16개의 활성화 함수 레인들의 각각에 동일일한 확률로 존재하도록 작용한다. 0 및 비0값들이 IFM 슬라이스 내에 - 또한 한 IFM 슬라이스와 다음 간에 - 균일하게 분산되고 나면, 0 활성화 함수 스킵 로직은 검색 거리를 1로 - 심지어 0으로 설정하여 실리콘 면적을 감소시키면서 연산 스루풋을 증가시킬 수 있다.
가중치 레지스터 파일들 내의 가중치들은 - 가중치 레지스터 파일에 로딩하기 전에 오프라인으로 - 활성화 함수들과 동일한 순서로 치환되어야 한다. 달리 말해, 셔플러(500, 503)는 IFM슬라이스(110) 내의 활성화 함수 A를 레인 X로부터 레인 Y로 이동시키는데, - 셔플링이 없다면 레인 X의 승산기 유닛들에 사전 로딘 되었을 - 활성화 함수 A에 연계된(승산될) 가중치는 이제 레인 Y의 승산기 유닛들에 사전 로딩되어야 한다.
모듈(503)과 같이 많은 수의 입력을 가지는 셔플링 유닛은 올투올(all-to-all) 스위치로 구현한다면 실현이 불가능할 정도로(prohibitively) 큰 면적을 가질 수 있다. 도 5c 내지 5g는 버터플라이 셔플러(butterfly shuffler)를 사용하는 모듈(500, 503)의 더 경제적인 실시예를 도시한다. 도 5c는 버터플라이 셔플러를 구성하는 기본적인 구축 블록(510)을 보인다. 도 5d는 입력값 {d0, d1, d2, d3}들을 출력 {o0, o1, o2, o3}으로 치환하는 4채널 버터플라이 셔플러를 보인다. 신호(X0..1,0..1)들이 적용될 치환을 선택하는 것에 주목 바란다. 도 5e 및 5f는 각각 8 및 16 채널을 가지는 버터플라이 셔플러를 더 도시한다. 2N개의 채널을 가지는 버터플라이 셔플러가 가능한 치환의 수는 2^(N*2N-1)이다. 마지막으로, 도 5g는 입력 벡터(d)의 값을 치환하여 결과적 벡터(o)를 출력하는 제어 신호(X)를 구동하는 의사 랜덤 생성기(pseudo-random generator; 504)를 도시한다.
NPU(100)의 가능한 한 스루풋을 최대로 유지하면서 실리콘 면적을 축소시키는 것이 바람직할 때, 관심을 가질만한 몇 가지 실시예를 더 고려해보자. 전술한 바와 같이 NPU 실리콘 면적 - 더 구체적으로 MR 타일(102)들이 점유하는 면적 - 을 축소시키는 한 방법은 승산기(126)의 비트폭을 8비트 바이 8비트로부터 8비트 바이 4비트 또는 4비트 바이 4비트로 축소시키는 것이다. MR 타일(102)들의 면적을 축소시키는 다른 방법은 가중치 레지스터 파일(127)을 공유(sharing)하는 것일 것이다. 더 구체적으로, 도 6은 각 가중치 레지스터 파일(605)이 승산기 유닛(606) 내의 두 승산기(603, 604)들로 공유된다. ABU(141)는 이제 - 캐시(129)로부터 - 두 평면 위치들로부터의 데이터를 동시에 MR 어레이(122)로 송출한다. 달리 말해, 평면 위치로부터 16개의 데이터 채널들을 가져오던 IFM 슬라이스가 각각 평면 위치로부터 8개의 데이터 채널들을 가져오는 두 IFM 절반 길이(half-length) 슬라이스들로 대체된다. IFM 캐시 크기를 축소시키기 위해 두 평면 위치들은 서로 인접될 수 있다. 8개의 MR 열(133)들이 4개의 MR 열 쌍들(602)로 재편성되었는데, 각 열 쌍은 두 세트의 가산기 트리(128A, 128B 및 128C, 128D)와 함께 두 ARU를 가지는 것에 주목 바란다. MR 열 쌍(602)은 양 화소들 - 즉 약 평면 위치들 - 에서 동일한 심도 채널을 취해 작동하여, 이 두 활성화 함수들을 공유된 가중치 레지스터 파일(605)로부터 호출된 동일한 가중치로 승산한다. 달리 말해 MR 열(602)들은 두 평면 위치들에서 병렬로 동시에 컨볼루션을 연산한다. 이에 따라, 각 MR 열(602) 좌측의 가산기 트리 쌍 및 연계된 ARU, 예를 들어 S0,A, S0,B 및 ARU0이 제1 평면 위치에서 OFM을 연산하는 한편, 각 MR 열(602) 우측의 가산기 트리 쌍 및 연계된 ARU, 예를 들어 S1,A, S1,B 및 ARU1이 제2 평면 위치에서 OFM을 연산한다. ARU들이 각 평면 위치에서 하나씩 두 절반 길이 OFM들을 연산하면, 재정렬 모듈(607)이 각 평면 위치로부터의 정반 길이 OFM들을 다시 각 평면 위치의 전체 길이 OFM 슬라이스들로 병합하고, 결과적인 전체 길이 OFM 슬라이스들을 OFM 배송 패브릭(106)을 통해 저장을 위해 SRAM으로 전송한다. ARU는 IFM 캐시(139)로부터 두 평면 위치에서의 전체 길이 IFM 슬라이스들을 호출하여, 이 전체 길이 IFM 슬라이스들을 두 절반 길이 IF 슬라이스들로 분할하고, 결과적인 절반 길이 IFM 슬라이스들을 활성화 함수 레인별(activation-lane-wise)로 삽입(interleave)하여 필요에 따라 모든 심도 채널들로부터 데이터가 송출되도록 절반 길이 IFM 슬라이스들에 사이클을 반복한다.
도 7a 에지 7h는 IFM 텐서(200)를 지그재그 방식으로 횡단하는 평면 크기 2x2의 컨볼루션 창(700)을 도시한다. 더 구체적으로, 컨볼루션 창은 도 a에 도시된 바와 같이 좌측에서 시작하여 IFM 텐서(200)를 각각 도 7b, 7c, 7d, 및 7e와 도 7f, 7g, 및 7h에 도시된 다른 반복으로 도시된 바와 같이 한 행 위, 한 열 우측, 한 행 아래, 다시 한 열 우측으로 이동하는 반복 패턴으로 IFM 텐서(200)를 횡단한다. 이러한 지그재그 횡단은 '610 출원에 기재된 기준 직접 컨볼루션에 사용될 수 있다. 더 구체적으로, 지그재그 횡단은 요구되는 IFM 캐시(139)의 크기를 최소로 유지하면서 각 수평 통과마다 OFM 데이터의 몇 행씩을 연산할 수 있게 해준다. 마찬가지로, 지그재그 횡단은 요구되는 IFM 캐시(139)의 크기를 최소로 유지하면서 각 수직 통과마다 OFM 데이터의 몇 열씩을 연산할 수 있게 해준다.
도 8a 내지 8h는 도 7a 내지 7h의 컨볼루션 창(700)이 IFM 텐서(200)를 지그재그 방식으로 횡단함에 따른, OFM 텐서(209)의 연산된 컨볼루션 결과의 순서와 평면 위치를 보인다. 컨볼루션 결과는 도 8a의 위치(703)에서 먼저 연산 및 저장되고, 후속적인 결과들은 각각 도 8b, 8c, 8d, 및 8e와 도 8f, 8g, 및 8h에 도시된 다른 반복으로 도시된 바와 같이 한 행 위, 한 열 우측, 한 행 아래, 다시 한 열 우측 위치의 반복 패턴으로 저장된다.
도 9a 내지 9d는 도 6에 도시된 실시예를 사용하는 MR 타일(102)들러 연산될 수 있는 컨볼루션 창의 평면 위치들을 도시한다. 도 6에 도시된 실시예는 두 평면 위치들에서 동시에 컨볼루션을 연산하는데, 일부 실시예들에서 IFM 캐시 크기를 줄이도록 평면 위치들은 서로 인접한다. 더 구체적으로, 두 평면 위치들은 도 9a 내지 9d에 도시된 바와 같이 2행 바이 1열의 평면 크기를 가질 수 있다. 2x1 컨볼루션 창 쌍(700, 705)이 IFM 텐서(200)를 좌에서 우(left-to-right)의 방식으로 횡단함으로써 도 7a 내지 7h의 단일한 컨볼루션 창을 가용할 때의 지그재그 횡단과 마찬가지로, 한 수평 통과마다 OFM 데이터의 두 행을 연산할 수 있다. 이 종류의 평면 횡단 패턴은 IFM 캐시(139)의 크기를 줄이기 위해 사용될 수 있다.
도 10a 내지 10d는 도 9a 내지 9d의 2x1 컨볼루션 창 쌍(700, 705)이 IFM 텐서(200)을 좌에서 우의 방식으로 횡단함에 따른, OFM 텐서(209)의 연산된 컨볼루션 결과들의 순서와 평면 위치를 보인다. 컨볼루션 결과의 첫 2x1 쌍이 도 10a의 위치(703)에 연산 및 저장되고, 도 10b, 10b, 19c, 및 10d에 도시된 바와 같이 후속 결과들이 한 열 우측의 위치들에 저장된다.
도 11a 내지 11h는 컨볼루션 창 쌍들이 IFM 텐서(700)를 횡단하는 다른 방법을 도시한다, 이 예에서, 2x1 컨볼루션 창 쌍(700, 705)은 IFM 텐서(200)를 지그재그 방식으로 횡단함으로써 각 수평 통과마다 4열의 OFM 데이터를 연산할 수 있다. 더 구체적으로, 컨볼루션 창은 도 11a에 도시된 바와 같이 좌측에서 시작하여, 각각 도 11b, 11c, 11d, 및 11e와 도 11f, 11g, 및 11h에 도시된 다른 반복으로 도시된 바와 같이 두 행 위, 한 열 우측, 두 행 아래, 다시 한 열 우측 위치의 반복 패턴으로 IFM 텐서(200)를 횡단한다.
도 12a 내지 12h는 도 11a 내지 11h의 2x1 컨볼루션 창 쌍(700, 705)이 IFM 텐서(200)를 지그재그 방식으로 횡단함에 따른, OFM 텐서(209)의 연산된 컨볼루션 결과들의 순서와 평면 위치를 보인다. 컨볼루션 결과의 첫 2x1쌍이 도 12a의 위치(703)들에 저장되고, 후속 결과들은 각각 도 12b, 12c, 12d, 및 12e와 도 12f, 12g, 및 12h에 도시된 다른 반복으로 도시된 바와 같이 두 행 위, 한 열 우측, 두 행 아래, 다시 한 열 우측 위치의 반복 패턴으로 저장된다.
도 13a 내지 13f는 컨볼루션 창 쌍들이 IFM 텐서(700)를 횡단하는 또 다른 방식을 도시한다. 이 예에서, 1x2 컨볼루션 창 쌍(700, 705)은 IFM 텐서(200)를 지그재그 방식으로 횡단함으로써 각 수평 통과마다 2열의 OFM 데이터를 연산할 수 있다. 더 구체적으로, 컨볼루션 창은 도 13a에 도시된 바와 같이 좌측에서 시작하여, 각각 도 13b, 13c, 13d, 및 13e와 그리고 도 13f에서 시작되는 다른 반복으로 도시된 바와 같이 한 행 위, 두 열 우측, 한 행 아래, 다시 두 열 우측 이동의 반복 패턴으로 IFM 텐서(200)를 횡단한다.
도 14a 내지 14h는 도 13a 내지 13h의 1x2 컨볼루션 창 쌍(700, 705)이 IFM 텐서(200)를 지그재그 방식으로 횡단함에 따른, OFM 텐서(209)의 연산된 컨볼루션 결과들의 순서와 평면 위치를 보인다. 첫 1x2 컨볼루션 창 쌍(700, 705)은 도 14a의 위치(703)들에서 연산 및 저장되고, 후속적인 결과들은 각각 도 14b, 14c, 14d, 및 14e와 그리고 도 14f에서 시작되는 다른 반복으로 도시된 바와 같이 두 행 위, 한 열 우측, 두 행 아래, 다시 한 열 우측 이동의 반복 패턴으로 저장된다.
실리콘 영역을 축소하는 대신, 가중치 레지스터 파일(127)들이 물리적 배치상 서로 멀리 위치하지 않으므로 MR 타일(102)이 도 6에 도시된 바와 같이 재구성되어 가중치 커널 저장(용량)을 배증시킬 수 있음에 주목 바란다. 이는 작동하는 큰 가중치 커널들이 가중치 레지스터 파일(127)에 맞추기에 너무 큰 경우 특히 유용하다.
층 컨볼루션 연산을 논리적으로 설명할 수 있는 한 방법은 층 컨볼루션을 중첩 for 루프(nested for-loop)들의 집합(set)으로 표현하고, 각 for 루프가 평면 좌표와 가중치 커널 지수를 포함하는 지수에 대해 사이클링(cycling)시키는 것이다. 두 평면 위치들에서 동시에 컨볼루션을 수행하는 것은 하드웨어에서 컨볼루션 for 루프를 평면 방식으로 "펼치는(unrolling)" 것과 등가이다. 컨볼루션을 평면 방식으로 펼치는 것은 SRAM 액세스의 증가와 IFM 캐시(139) 크기의 확대를 초래할 수 있다. 이에 따라 특정한 NPU 실시예를 선택할 때는 결과적인 SRAM 액세스 빈도와 IFM 캐시(139) 크기를 인자로 고려해야 한다. 또한 컨볼루션 for 루프를 평면 방식으로 펼치는 것은 0값 활성화 함수를 스킵하는 효율을 저하시킬 수 있다는 점에 주의 바란다. 더 구체적으로, ABU가 MR 어레이(122)로 송출되는 actj,A 및 actj,B를 스킵하기 위해서는 활성화 함수 actj,A 및 actj,B가 모두 0이어야 한다.
NPU 실리콘 면적, 특히 MR 타일(102) 면적을 축소시키는 다른 방법은 도 15a에 도시된 바와 같이 가산기 트리(128A, 128B)의 쌍들을 단일한 가산기 트리(128)들로 대체하고 ARU(167)들을 단일한 ARU들로 대체하는 방법을 포함할 수 있다.
도 1c 내지 1f에 도시된 0 활성화 함수 스킵 기구와 간섭하는 가산기 트리(128B)들을 제거(remove)하면 도 1i의 검색(look0aside) 멀티플렉서(161)들이 불필요하게 될 수 있다(obviate). 이 상황에서, 0 활성화 함수 스킵 기구는 도 15b에 도시된 것으로 대체될 수 있는데, 여기서는 활성화 함수 레인들이 도 2f와 유사하게 넷의 집합(215), 즉 4중쌍으로 짝지어진다. 각 MR 열(1610)의 각 4중쌍(215)의 승산기 유닛(103들은 곱들을 "4중쌍 가산기(quad adder tree)" Sq,c로 출력하는데, q는 4중쌍 번호 0, 1, 2, 및 3이고 c는 0 내지 7 범위의 MR 열 번호이다. 달리 말해, 각 4중쌍 가산기 트리(1600)가 "4중쌍 도트곱(quad dot product)들"을 연산하는데, 각 4중쌍 도트곱은 가산기 트리의 4중쌍의 승산기 유닛(103)의 출력에 대응하는 네 항(term)들을 가진다. 각 MR 열(1600)의 다른 가산기 트리(Sc)가, 각 4중쌍 도트곱들이 "4중쌍 FIFO(quad FIFO)"(FIFOq,c)를 통과하고 나면 네 도트곱들을 합산한다. 도 15b의 0 활성화 함수 스킵 기구는 4중쌍 당(per quad) 방식으로 작동할 수 있는데, 이 4중쌍에 연계된 네 모든 레인들의 IFM버퍼(24) 내의 활성화 함수들이 0값을 가지면 활성화 함수 레인 4중쌍은 승산을 스킵할 수 있다. 예들 들어, 도 4j는 모두 0(니블) 값들을 가지는 IFM 버퍼(124) 슬롯의 제3 슬롯(최좌단)을 보인다. 도 15b의 활성화 함수 레인 4중쌍은 그렇지 않았더라면 이러한 모두 0인 IFM 값 4중쌍을 커널 가중치들과 승산하였을 클록 사이클을 스킵함으로써 활성화 함수 레인의 스루풋을 향상시킬 수 있다.
승산 사이클을 스킵하는 활성화 함수 4중쌍(215)은 그 4중쌍이 다른 활성화 함수 4중쌍에 비해 선행, 즉 순서외가 되도록 야기할 수 있다. 이에 따라, 활성화 함스 4중쌍 레인의 도트곱들을 일시 저장했다가 이 결과적 도트곱들을 열 가산기(128)들에 공급하기 전에 출력 도트곱의 순서를 복원하기 위한 FIFO(FIFOq,c)가 필요할 수 있다. 열 가산기(128)들은 모든 가산기 트리(128)들이 입력으로 모두 0을 수신했을 때 가산을 스킵할 수 있다.
집합(215)의 모든 활성화 함수 레인들이 0값을 가질 확률은 각 집합(215) 내의 레인들의 수의 함수로서 지수적으로 저하된다. 이에 따라, 집합(215) 당 활성화 함수 레인(137)의 수를 감소, 예를 들어 넷에서 둘로, 감소시키면 레인 집합(215)가 승산을 스킵할 확률이 증가됨으로써 연산 스루풋을 잠재적으로 증가시킬 수 있다.
마지막으로, 도 15b의 0 활성화 함수 스킵 기구는 도 5a의 평면 패치를 펼치는 마이크로 아키텍처와 조합되어 도 15c에 보인 실시예로 결과될 수 있는데, 여기서 MR 열 쌍(1720)들은 각각 가산기 트리들의 두 쌍이 아니라 두 가산기 트리(1702, 1712)를 가지고, 선택적으로 4중쌍 가산기 트리(1700, 1710)의 두 세트와, 4중쌍 가산기 트리 FIFO(1701, 1711)의 두 세트와, 두 쌍의 ARU들이 아니라 두 ARU(167)을 가진다.
이 명세서에서 "~의 일부(a portion of)"는 사물의 전부 또는 전부 미만을 의미한다. 이에 따라 예를 들어 "어레이의 일부(a portion of an array)"는 어레이의 전부 또는 전부 미만을 의미한다. 이 명세서에 사용된 용어 "또는(or)"은 예를 들어 "A 또는 B"가 "A" 또는 "B" 또는 " A 및 B" 중의 어느 것을 의미하도록 "및/또는(and/or)"로 해석되어야 한다. 이 명세서에서 "제1(first)", "제2(second)", "제3(third)" 등의 용어들이 여러 요소, 구성요소, 영역, 층 및/또는 부분들을 기술하는 데 사용되었지만, 이 요소, 구성요소, 영역, 층 및/또는 부분들은 이 용어들에 제한되어서는 안 된다는 것을 이해해야 할 것이다. 이 용어는 단지 하나의 요소, 구성요소, 영역, 층 및/또는 부분을 다른 요소, 구성요소, 영역, 층 또는 부분과 구별하기 위해 사용된 것이다. 이에 따라 제1 요소, 구성요소, 영역, 층 또는 부분은 본 발명 개념의 요체와 범위를 벗어나지 않고 제2 요소, 구성요소, 영역, 층 또는 부분으로 지칭될 수 있을 것이다.
이 명세서에 사용된 용어들은 단지 특정한 실시예들을 설명하기 위한 목적이며 본 발명 개념을 한정하려 의도한 것이 아니다. 이 명세서에 사용된 "거의(substantially)," "약(about)" 및 유사한 용어들은 근사치(approximation)의 용어로 사용된 것이지 정도(degree)의 용어로 사용된 것이 아니며, 당업계에 통상의 기술을 가진 자라면 인식할 수 있을 측정 또는 연산 값들에 내재한 편차를 나타낼(account for) 것을 의도한 것이다.
이 명세서에 사용된 단수형 "a" 및 "an"은 문맥이 명시적으로 달리 가리키지 않는 한, 복수형 역시 포함할 것을 의도한 것이다. 이 명세서에 사용될 때 "구비하다(comprises)" 및/또는 "구비하는(comprising)"은 기재된 특징, 숫자, 단계, 작동, 요소 및/또는 구성요소들의 존재를 규정하지만 하나 이상의 다른 특징, 숫자, 단계, 작동, 요소, 구성요소들 및/또는 고 조합의 존재나 추가를 배제하지 않는다는 것도 이해해야 할 것이다. 이 명세서에 사용된 "및/또는(and/or)"라는 용어는 하나 이상의 열거된 항목들의 모든(any and all) 조합들을 포함한다. 요소들의 목록에 선행할 때, "적어도 하나의(at least one of)"라는 표현은 요소들의 전체 목록을 변경하지만 목록의 개별 요소들은 변경하지 않는다. 또한 본 발명 개념을 기술할 때 "~수 있다(may)"의 사용은 "본 발명의 하나 이상의 실시예들(one or more embodiments of the present disclosure)"을 지칭한다. 또한 "예시적(exemplary)"이라는 용어는 예(example) 또는 실례(illustration)를 지칭하려 의도한 것이다. 이 명세서에서 "사용하다(use)," "사용하는(using),"및 "사용한(used)"이라는 용어들은 각각 "활용하다(utilize)," "활용하는(utilizing)," 및 "활용한(utilized)"라는 용어들과 동의어로 간주된다.
한 요소 또는 층이 다른 요소 또는 층에 대해 "위(on)", "연결된다(connected to)", "접속된다(coupled to)", 또는 "인접된다(adjacent to)"라고 지칭될 때는 다른 요소 또는 층에 바로 위, 연결, 접속, 또는 인접하거나, 또는 하나 이상의 중간(intervening) 요소 또는 층들이 존재할 수 있다. 이에 반해, 한 요소 또는 층이 다른 요소 또는 층에 대해 "바로 위(directly on)", "직접 연결된다(directly connected to)", "직접 접속된다(directly coupled to)", 또는 "바로 인접된다(immediately adjacent to)"라고 지칭될 때는 중간 요소 또는 층들이 존재하지 않는다.
이 명세서에 기재된 어떤 수치 범위는 기재된 범위 내에 포괄되는(subsumed) 동일한 수치적 정밀도의 모든 하부 범위(sub-range)들을 포함하고자 의도한 것이다. 예를 들어, "1.0 내지 10.0"의 범위는 예를 들어 2.4 내지 7.6 등 기재된 1.0의 최소값과 10.0의 최대값(을 포함하여) 사이의 모든 하부 범위들, 즉 1.0 이상의 최소값과 10.0 이하의 최대값을 가지는 하부 범위들을 포함하고자 의도한 것이다. 이 명세서에 기재된 어떤 최대 수치의 한정은 거기에 포괄되는 모든 더 작은 수치 한정들을 포함할 것을 의도한 것이고, 이 명세서에 기재된 어떤 최소 수치의 한정은 거기에 포괄되는 모든 더 큰 수치 한정들을 포함할 것을 의도한 것이다.
심도별 컨볼루션을 수행하는 혼합 정밀도 NPU 타일의 예시적 실시예들이 이 명세서에 설명 및 예시되었으나, 당업계에 통상의 기술을 가진 자에게는 여러 가지 변경과 변형들이 자명할 것이다. 이에 따라, 본 발명의 원리에 따라 구성되는 심도별 컨볼루션을 수행하는 혼합 정밀도 NPU 타일은 이 명세서에 구체적으로 기재된 것과 달리 구현될 수 있음을 이해해야 할 것이다. 본 발명은 또한 이하의 청구항들과 그 등가물들로 정의된다.

Claims (20)

  1. 제1 타일과, 제2 타일과, 메모리와, 및 버스를 포함하는 프로세서로,
    상기 버스는, 상기 메모리와, 상기 제1 타일과, 및 상기 제2 타일에 연결되고,
    상기 제1 타일은 제1 가중치 레지스터와, 제2 가중치 레지스터와, 활성화 함수 캐시와, 셔플러와, 활성화 함수 버퍼와, 제1 승산기와, 및 제2 승산기를 포함하고,
    상기 활성화 함수 버퍼는, 상기 제1 승산기에 연결된 제1 대기 행렬과, 및 상기 제2 승산기에 연결된 제2 대기 행렬을 포함하도록 구성되고,
    상기 활성화 함수 캐시는 복수의 독립적인 레인들을 포함하고, 상기 각 독립적인 레인은 랜덤하게 액세스 가능하며,
    상기 제1 타일은, 각각 복수의 칼라 요소들을 가지는 복수의 화소들을 포함하는 화상을 나타내는 활성화 함수들의 텐서를 수신하되, 상기 텐서는 각각 상기 화상의 상기 한 칼라 요소를 나타내는 복수의 2차원 어레이들을 포함하고,
    상기 제1 타일은, 상기 2차원 어레이들의 하나와 커널의 컨볼루션을 수행하도록 구성되는 프로세서.
  2. 제1항에 있어서,
    상기 셔플러는 상기 활성화 함수 캐시의 출력에 연결되는 프로세서.
  3. 제2항에 있어서,
    상기 제1 타일은 복수의 열들과 복수의 레인들로 배열된, 제1 승산기와 제2 승산기를 포함하는 복수의 승산기들을 포함하되, 상기 레인들은 4의 그룹들로 배열되고, 상기 레인들의 상기 각 그룹은 상기 승산기들의 출력을 합산하는 가산기 트리를 포함하는 프로세서.
  4. 제3항에 있어서,
    상기 제1 타일은 상기 각 레인들의 그룹에 대해 상기 가산기 트리의 출력들을 누적 합산하는 누산기를 더 포함하는 프로세서.
  5. 제3항에 있어서,
    상기 제1 타일은 상기 4 레인들의 그룹들의 집합에 대해,
    적어도 하나의 최상위 니블을 포함하는 곱들을 두 최하위 니블들을 포함하는 곱들로부터 편이되도록 시프팅시키는 복수의 비트 시프터들과,
    상기 비트 시프터들의 출력들을 누적 합산하는 복수의 누산기들을 더 포함하는 프로세서.
  6. 제2항에 있어서,
    상기 셔플러는 4 레인의 입도를 가지는 프로세서.
  7. 제2항에 있어서,
    상기 셔플러는 1 레인의 입도를 가지는 프로세서.
  8. 제1항에 있어서,
    상기 셔플러는 상기 활성화 함수 캐시의 입력에 연결되는 프로세서.
  9. 제8항에 있어서,
    상기 제1 타일은 복수의 열들과 복수의 레인들로 배열된, 상기 제1 승산기와 상기 제2 승산기를 포함하는 복수의 승산기들을 포함하되, 상기 레인들은 4의 그룹들로 배열되고, 상기 레인들의 각 그룹은 상기 승산기들의 출력을 합산하는 가산기 트리를 포함하는 프로세서.
  10. 제9항에 있어서,
    상기 제1 타일은 상기 각 레인들의 그룹에 대해 상기 가산기 트리의 출력들을 누적 합산하는 누산기를 더 포함하는 프로세서.
  11. 제9항에 있어서,
    상기 제1 타일은 상기 4 레인들의 그룹들의 집합에 대해,
    적어도 하나의 최상위 니블을 포함하는 곱들을 두 최하위 니블들을 포함하는 곱들로부터 편이되도록 시프팅시키는 복수의 비트 시프터들과, 및
    상기 비트 시프터들의 출력들을 누적 합산하는 복수의 누산기들을 더 포함하는 프로세서.
  12. 제9항에 있어서,
    상기 셔플러는 4레인의 입도를 가지는 프로세서.
  13. 제9항에 있어서,
    상기 셔플러는 1레인의 입도를 가지는 프로세서.
  14. 처리 회로로 연산하는 방법으로,
    상기 처리 회로는 제1 타일과, 제2 타일과, 메모리와, 및 버스를 포함하며,
    상기 버스는, 상기 메모리와, 상기 제1 타일과, 및 상기 제2 타일에 연결되고,
    상기 제1 타일은 제1 가중치 레지스터와, 제2 가중치 레지스터와, 활성화 함수 캐시와, 셔플러와, 활성화 함수 버퍼와, 제1 승산기와, 및 제2 승산기를 포함하며,
    상기 활성화 함수 버퍼는, 상기 제1 승산기에 연결된 제1 대기 행렬과, 상기 제2 승산기에 연결된 제2 대기 행렬을 포함하도록 구성되고,
    상기 활성화 함수 캐시는 복수의 독립적인 레인들을 포함하고, 상기 각 독립적인 레인은 랜덤하게 액세스 가능하되,
    상기 방법은, 각각 복수의 칼라 요소들을 가지는 복수의 화소들을 포함하는 화상을 나타내는 활성화 함수들의 텐서를 수신하는 단계로, 상기 텐서가 각각 화상의 상기 한 칼라 요소를 나타내는 복수의 2차원 어레이들을 포함하는 단계와,
    상기 2차원 어레이들의 하나와 커널의 컨볼루션을 수행하는 단계를 포함하는 연산 방법.
  15. 제14항에 있어서,
    상기 셔플러는 상기 활성화 함수 캐시의 출력에 연결되는 연산 방법.
  16. 제15항에 있어서,
    상기 제1 타일은 복수의 열들과 복수의 레인들로 배열된, 상기 제1 승산기와 상기 제2 승산기를 포함하는 복수의 승산기들을 포함하되, 상기 레인들이 4의 그룹들로 배열되고, 상기 레인들의 각 그룹이 승산기들의 출력을 합산하는 가산기 트리를 포함하는 연산 방법.
  17. 제16항에 있어서,
    상기 제1 타일은 상기 각 레인들의 그룹에 대해 상기 가산기 트리의 출력들을 누적 합산하는 누산기를 더 포함하는 연산 방법.
  18. 제16항에 있어서,
    상기 제1 타일은 상기 네 레인들의 그룹들의 집합에 대해,
    적어도 하나의 최상위 니블을 포함하는 곱들을 두 최하위 니블들을 포함하는 곱들로부터 편이 되도록 시프팅시키는 복수의 비트 시프터들과, 및 상기 비트 시프터들의 출력들을 누적 합산하는 복수의 누산기들을 더 포함하는 연산 방법.
  19. 제15항에 있어서,
    상기 셔플러는 4 레인의 입도를 가지는 연산 방법.
  20. 처리 수단으로 연산하는 방법으로,
    상기 처리 수단은 제1 타일과, 제2 타일과, 메모리와, 및 버스를 포함하며,
    상기 버스는, 상기 메모리와, 상기 제1 타일과, 및 상기 제2 타일에 연결되고,
    상기 제1 타일은 제1 가중치 레지스터와, 제2 가중치 레지스터와, 활성화 함수 캐시와, 셔플러와, 활성화 함수 버퍼와, 제1 승산기와, 및 제2 승산기를 포함하며,
    상기 활성화 함수 버퍼는, 상기 제1 승산기에 연결된 제1 대기 행렬과, 상기 제2 승산기에 연결된 제2 대기 행렬을 포함하도록 구성되고,
    상기 활성화 함수 캐시는 복수의 독립적인 레인들을 포함하고, 상기 각 독립적 레인은 랜덤하게 액세스 가능하며,
    상기 방법은, 각각 복수의 칼라 요소들을 가지는 복수의 화소들을 포함하는 화상을 나타내는 활성화 함수들의 텐서를 수신하는 단계로, 상기 텐서가 각각 화상의 상기 한 칼라 요소를 나타내는 복수의 2차원 어레이들을 포함하는 단계와,
    상기 2차원 어레이들의 하나와 커널의 컨볼루션을 수행하는 단계를 포함하는 연산 방법.
KR1020200052369A 2019-05-01 2020-04-29 뎁스 와이즈 컨벌루션 혼합-정밀도 앤피유 타일 KR20200128360A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201962841590P 2019-05-01 2019-05-01
US62/841,590 2019-05-01
US16/840,172 US11880760B2 (en) 2019-05-01 2020-04-03 Mixed-precision NPU tile with depth-wise convolution
US16/840,172 2020-04-03

Publications (1)

Publication Number Publication Date
KR20200128360A true KR20200128360A (ko) 2020-11-12

Family

ID=73016558

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200052369A KR20200128360A (ko) 2019-05-01 2020-04-29 뎁스 와이즈 컨벌루션 혼합-정밀도 앤피유 타일

Country Status (2)

Country Link
US (1) US11880760B2 (ko)
KR (1) KR20200128360A (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220143792A (ko) * 2020-05-08 2022-10-25 한국전자통신연구원 콘볼루션 신경망 양자화 추론 장치 및 방법
WO2023085442A1 (ko) * 2021-11-09 2023-05-19 한국전자기술연구원 고정확도 딥러닝 연산 장치

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20210110243A1 (en) * 2019-10-10 2021-04-15 Hewlett Packard Enterprise Development Lp Deep learning accelerator system interface
US11687764B2 (en) * 2020-04-17 2023-06-27 Samsung Electronics Co., Ltd. System and method for increasing utilization of dot-product based neural network accelerator
US20210389948A1 (en) * 2020-06-10 2021-12-16 Arm Limited Mixed-element-size instruction
KR102474053B1 (ko) * 2020-06-22 2022-12-06 주식회사 퓨리오사에이아이 뉴럴네트워크 프로세서
US11861328B2 (en) 2020-11-11 2024-01-02 Samsung Electronics Co., Ltd. Processor for fine-grain sparse integer and floating-point operations
US11861327B2 (en) 2020-11-11 2024-01-02 Samsung Electronics Co., Ltd. Processor for fine-grain sparse integer and floating-point operations
US11157037B1 (en) 2020-11-13 2021-10-26 Marvell Asia Pte, Ltd. Method and device for clock generation and synchronization for time interleaved networks
US11750166B2 (en) 2021-01-13 2023-09-05 Marvell Asia Pte. Ltd. Method and device for high bandwidth receiver for high baud-rate communications
US11309904B1 (en) 2021-02-24 2022-04-19 Marvell Asia Pte Ltd. Method and device for synchronization of large-scale systems with multiple time interleaving sub-systems
US11204889B1 (en) * 2021-03-29 2021-12-21 SambaNova Systems, Inc. Tensor partitioning and partition access order
US11366783B1 (en) 2021-03-29 2022-06-21 SambaNova Systems, Inc. Multi-headed multi-buffer for buffering data for processing
US20220405559A1 (en) * 2021-06-17 2022-12-22 Samsung Electronics Co., Ltd. Mixed-precision neural network accelerator tile with lattice fusion
US11709611B2 (en) 2021-10-26 2023-07-25 SambaNova Systems, Inc. Determining and using memory unit partitioning solutions for reconfigurable dataflow computing systems
CN114463592B (zh) * 2022-04-01 2022-07-22 深圳鲲云信息科技有限公司 一种应用于depthwise卷积的量化计算方法和装置

Family Cites Families (57)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5285403A (en) 1989-12-29 1994-02-08 U.S. Philips Corporation Arithmetic processing module to be associated with a microprocessor central processing unit
US6061749A (en) 1997-04-30 2000-05-09 Canon Kabushiki Kaisha Transformation of a first dataword received from a FIFO into an input register and subsequent dataword from the FIFO into a normalized output dataword
KR102276339B1 (ko) 2014-12-09 2021-07-12 삼성전자주식회사 Cnn의 근사화를 위한 학습 장치 및 방법
US9418458B2 (en) 2015-01-05 2016-08-16 Superfish Ltd. Graph image representation from convolutional neural networks
US10049322B2 (en) 2015-05-21 2018-08-14 Google Llc Prefetching weights for use in a neural network processor
US9805303B2 (en) 2015-05-21 2017-10-31 Google Inc. Rotating data for neural network computations
US10438117B1 (en) 2015-05-21 2019-10-08 Google Llc Computing convolutions using a neural network processor
US9747546B2 (en) 2015-05-21 2017-08-29 Google Inc. Neural network processor
US11244225B2 (en) 2015-07-10 2022-02-08 Samsung Electronics Co., Ltd. Neural network processor configurable using macro instructions
US10664751B2 (en) 2016-12-01 2020-05-26 Via Alliance Semiconductor Co., Ltd. Processor with memory array operable as either cache memory or neural network unit memory
US10552370B2 (en) 2015-10-08 2020-02-04 Via Alliance Semiconductor Co., Ltd. Neural network unit with output buffer feedback for performing recurrent neural network computations
EP3705994B1 (en) 2015-10-28 2023-10-04 Google LLC Processing computational graphs
US9904874B2 (en) 2015-11-05 2018-02-27 Microsoft Technology Licensing, Llc Hardware-efficient deep convolutional neural networks
NL2016285B1 (en) 2016-02-19 2017-09-20 Scyfer B V Device and method for generating a group equivariant convolutional neural network.
FR3050846B1 (fr) 2016-04-27 2019-05-03 Commissariat A L'energie Atomique Et Aux Energies Alternatives Dispositif et procede de distribution de donnees de convolution d'un reseau de neurones convolutionnel
US11055063B2 (en) 2016-05-02 2021-07-06 Marvell Asia Pte, Ltd. Systems and methods for deep learning processor
JP6890615B2 (ja) 2016-05-26 2021-06-18 タータン エーアイ リミテッド ディープニューラルネットワークについての加速器
KR20180012439A (ko) 2016-07-27 2018-02-06 삼성전자주식회사 회선 신경망에서 가속기 및 이의 동작 방법
US10997496B2 (en) 2016-08-11 2021-05-04 Nvidia Corporation Sparse convolutional neural network accelerator
US10621486B2 (en) 2016-08-12 2020-04-14 Beijing Deephi Intelligent Technology Co., Ltd. Method for optimizing an artificial neural network (ANN)
US10802992B2 (en) 2016-08-12 2020-10-13 Xilinx Technology Beijing Limited Combining CPU and special accelerator for implementing an artificial neural network
CN106650922B (zh) 2016-09-29 2019-05-03 清华大学 硬件神经网络转换方法、计算装置、软硬件协作系统
AU2017338783B2 (en) 2016-10-04 2022-02-10 Magic Leap, Inc. Efficient data layouts for convolutional neural networks
US9940534B1 (en) 2016-10-10 2018-04-10 Gyrfalcon Technology, Inc. Digital integrated circuit for extracting features out of an input image based on cellular neural networks
US9959498B1 (en) 2016-10-27 2018-05-01 Google Llc Neural network instruction set architecture
US11003985B2 (en) 2016-11-07 2021-05-11 Electronics And Telecommunications Research Institute Convolutional neural network system and operation method thereof
US10733505B2 (en) 2016-11-10 2020-08-04 Google Llc Performing kernel striding in hardware
KR20180073118A (ko) 2016-12-22 2018-07-02 삼성전자주식회사 컨볼루션 신경망 처리 방법 및 장치
US11048997B2 (en) 2016-12-27 2021-06-29 Texas Instruments Incorporated Reduced complexity convolution for convolutional neural networks
CN106844294B (zh) 2016-12-29 2019-05-03 华为机器有限公司 卷积运算芯片和通信设备
US10521488B1 (en) * 2016-12-30 2019-12-31 X Development Llc Dynamic partitioning
US11562115B2 (en) 2017-01-04 2023-01-24 Stmicroelectronics S.R.L. Configurable accelerator framework including a stream switch having a plurality of unidirectional stream links
US10096134B2 (en) 2017-02-01 2018-10-09 Nvidia Corporation Data compaction and memory bandwidth reduction for sparse neural networks
JP6794854B2 (ja) 2017-02-02 2020-12-02 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US20180253636A1 (en) 2017-03-06 2018-09-06 Samsung Electronics Co., Ltd. Neural network apparatus, neural network processor, and method of operating neural network processor
US10067509B1 (en) 2017-03-10 2018-09-04 TuSimple System and method for occluding contour detection
US10387298B2 (en) 2017-04-04 2019-08-20 Hailo Technologies Ltd Artificial neural network incorporating emphasis and focus techniques
US10410098B2 (en) 2017-04-24 2019-09-10 Intel Corporation Compute optimizations for neural networks
US10409614B2 (en) 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10706147B1 (en) * 2017-05-19 2020-07-07 Amazon Technologies, Inc. Mitigating side-channel attacks via shared cache
US10990648B2 (en) 2017-08-07 2021-04-27 Intel Corporation System and method for an optimized winograd convolution accelerator
US10600147B2 (en) 2017-08-22 2020-03-24 Intel Corporation Efficient memory layout for enabling smart data compression in machine learning environments
US10699160B2 (en) 2017-08-23 2020-06-30 Samsung Electronics Co., Ltd. Neural network method and apparatus
US11803377B2 (en) 2017-09-08 2023-10-31 Oracle International Corporation Efficient direct convolution using SIMD instructions
US10423861B2 (en) 2017-10-16 2019-09-24 Illumina, Inc. Deep learning-based techniques for training deep convolutional neural networks
KR102452953B1 (ko) 2017-10-30 2022-10-11 삼성전자주식회사 뉴럴 네트워크의 컨볼루션 연산을 수행하는 방법 및 장치
US11610099B2 (en) 2017-11-06 2023-03-21 Imagination Technologies Limited Neural network architecture using single plane filters
KR20190051697A (ko) 2017-11-07 2019-05-15 삼성전자주식회사 뉴럴 네트워크의 디컨벌루션 연산을 수행하는 장치 및 방법
EP3506084B1 (en) 2017-12-28 2020-09-23 IMEC vzw System and method for tunable precision of dot-product engine
US10459876B2 (en) 2018-01-31 2019-10-29 Amazon Technologies, Inc. Performing concurrent operations in a processing element
US11531727B1 (en) 2018-04-20 2022-12-20 Perceive Corporation Computation of neural network node with large input values
CN112106078A (zh) 2018-05-08 2020-12-18 多伦多大学管理委员会 神经网络处理元件
CN108615036B (zh) 2018-05-09 2021-10-01 中国科学技术大学 一种基于卷积注意力网络的自然场景文本识别方法
US20190392287A1 (en) 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
US20200210517A1 (en) 2018-12-27 2020-07-02 Intel Corporation Systems and methods to accelerate multiplication of sparse matrices
CN110110707A (zh) 2019-05-24 2019-08-09 苏州闪驰数控系统集成有限公司 人工智能cnn、lstm神经网络动态识别系统
US20210011732A1 (en) 2019-07-09 2021-01-14 MemryX Inc. Matrix Data Reuse Techniques in Processing Systems

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220143792A (ko) * 2020-05-08 2022-10-25 한국전자통신연구원 콘볼루션 신경망 양자화 추론 장치 및 방법
WO2023085442A1 (ko) * 2021-11-09 2023-05-19 한국전자기술연구원 고정확도 딥러닝 연산 장치

Also Published As

Publication number Publication date
US11880760B2 (en) 2024-01-23
US20200349420A1 (en) 2020-11-05

Similar Documents

Publication Publication Date Title
KR20200128360A (ko) 뎁스 와이즈 컨벌루션 혼합-정밀도 앤피유 타일
US11620491B2 (en) Neural processor
US11003985B2 (en) Convolutional neural network system and operation method thereof
US10997496B2 (en) Sparse convolutional neural network accelerator
EP3726733A1 (en) Hardware channel-parallel data compression/decompression
US9436655B2 (en) Architecture for vector memory array transposition using a block transposition accelerator
KR100246878B1 (ko) 역이산 코사인변환 프로세서, 이산 코사인 변환계수의 매트릭스를 역변환하기 위한 방법 및 그 장치
US6757019B1 (en) Low-power parallel processor and imager having peripheral control circuitry
JPH0799659A (ja) 非消耗的動き予測法
US6963341B1 (en) Fast and flexible scan conversion and matrix transpose in a SIMD processor
EP1016970A2 (en) A memory architecture for parallel data access along any given dimension of an n-dimensional rectangular data array
KR100874949B1 (ko) 단일 명령 다중 자료 프로세서 및 그것을 위한 메모리어레이 구조
CN112395092A (zh) 数据处理方法及人工智能处理器
US20080285872A1 (en) Information processing device and method
AU2002259268C1 (en) Apparatus and method for encoding and computing a discrete cosine transform using a butterfly processor
US7099390B2 (en) Prediction apparatus, encoding apparatus, inverse prediction apparatus, decoding apparatus, and computing apparatus
JP2003111084A (ja) ビデオ符号化時の動き予測の実行方法、ビデオ符号化システム、及び、ビデオ符号化装置
CN101778280B (zh) 一种基于avs运动补偿亮度插值运算的电路及方法
EP1992162B1 (en) Memory organizational scheme and controller architecture for image and video processing
US7676096B2 (en) Modular, low cost, memory efficient, input resolution independent, frame-synchronous, video compression system using multi stage wavelet analysis and temporal signature analysis with a highly optimized hardware implementation
US5978508A (en) Two-dimensional inverse discrete cosine transformation circuit for MPEG2 video decoder
de Cea-Dominguez et al. Real-time 16K video coding on a GPU with complexity scalable BPC-PaCo
US7733396B2 (en) Process and system for processing signals arranged in a bayer pattern
US8285774B2 (en) Operation method and apparatus for performing overlap filter and core transform
Liguori A MAC-less Neural Inference Processor Supporting Compressed, Variable Precision Weights

Legal Events

Date Code Title Description
A201 Request for examination