KR20200128356A - 혼합-정밀도 앤피유 타일 - Google Patents

혼합-정밀도 앤피유 타일 Download PDF

Info

Publication number
KR20200128356A
KR20200128356A KR1020200051584A KR20200051584A KR20200128356A KR 20200128356 A KR20200128356 A KR 20200128356A KR 1020200051584 A KR1020200051584 A KR 1020200051584A KR 20200051584 A KR20200051584 A KR 20200051584A KR 20200128356 A KR20200128356 A KR 20200128356A
Authority
KR
South Korea
Prior art keywords
nibble
queue
multiplier
weight
shuffler
Prior art date
Application number
KR1020200051584A
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 KR20200128356A publication Critical patent/KR20200128356A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/52Multiplying; Dividing
    • G06F7/523Multiplying only
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/08Learning methods
    • G06N3/082Learning methods modifying the architecture, e.g. adding, deleting or silencing nodes or connections

Landscapes

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

Abstract

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

Description

혼합-정밀도 앤피유 타일{MIXED-PRECISION NEURAL-PROCESSING UNIT TILE}
본원은 2019년 5월 1일자 "혼합 정밀도 신경망 처리 유닛 타일(MIXED-PRECISION NEURAL-PROCESSING UNIT TILE)"이라는 명칭으로 출원된 미국특허가출원 제62/841,606호에 대한 우선권을 주장하는 바, 그 전체적 내용은 이 명세서에 참고로 포함되어 있다.
본원은 2019년 6월 19일자 “신경망 프로세서(NEURAL PROCESSOR)"라는 명칭으로 출원된 미국특허출원 제16/446,610호(”‘610 출원“)와 관련되는 바, 그 전체적 내용은 이 명세서에 참고로 포함되어 있다.
본 발명에 따른 실시예들의 하나 이상의 국면(aspect)들은 신경망 프로세서, 더 구체적으로는 혼합 정밀도 신경망 프로세서에 관련된다.
작동에 있어서, 신경망 처리 유닛(neural processing unit; NPU), 또는 “신경망 프로세서(neural processor)"는 예를 들어 많은 수의 승산 및 가산, 활성화 함수(activation)를 가중치(weight)로 승산하고 결과치들의 합산을 수행할 수 있다. 이동하는 차량으로부터 화상이나 영상을 취하는 등의 일부 응용분야들에서는 위험을 식별하여 그 잠재성(latency)을 최소화하는 것이 중요할 수 있고, 배터리 구동 이동 장치 등의 어떤 응용분야에서는 전력 소모를 최소화시키는 것이 중요할 수 있다.
이에 따라 신경망 프로세서의 전력소모와 (위험의) 잠재성을 저감시키는 시스템과 방법에 대한 요구가 존재한다.
본 발명의 기술적 과제는 프로세서와, 처리 회로로 연산하는 방법을 제공하는 것이다.
본 발명의 한 실시예에 따르면, 제1 타일(tile)과, 제2 타일과, 메모리와, 및 버스를 포함하는 프로세서가 제공되되,
버스는: 메모리와, 제1 타일과, 및 제2 타일에 연결되고,
제1 타일은: 제1 가중치를 저장하는 제1 가중치 레지스터(register)로, 제1 가중치가 0인 제1 가중치 레지스터와; 제3 가중치를 저장하는 제2 가중치 레지스터로, 제3 가중치는 그 어느 니블(nibble)도 0이 아닌 8비트의 수인 제2 레지스터와; 제2 가중치를 저장하는 제3 가중치 레지스터로, 제2 가중치가 0인 제3 가중치 레지스터와; 제4 가중치를 저장하는 제4 가중치 레지스터로, 제4 가중치는 그 어느 니블도 0이 아닌 8비트 수인 제4 레지스터와; 활성화 함수 버퍼(activation buffer)와; 제1 셔플러(shuffler)와; 제1 가중치 레지스터에 연결된 제1 승산기(multiplier)와; 제2 가중치 레지스터에 연결된 제2 승산기와; 제3 가중치 레지스터에 연결된 제3 승산기와; 및 제4 가중치 레지스터에 연결된 제4 승산기를 포함하며,
활성화 함수 버퍼가 제1 큐(queue; 대기 행렬)와, 제2 큐와, 제3 큐와, 및 제4 큐를 포함하도록 구성되고,
제1 타일이: 제3 큐로부터 제1 니블을 제1 셔플러를 통해 제1 승산기에 공급하여 제1 승산기에서 제3 큐로부터의 제1 니블을 제3 가중치의 제1 니블로 승산하고; 제3 큐로부터 제2 니블을 제1 셔플러를 통해 제2 승산기에 공급하여 제2 승산기에서 제3 큐로부터의 제2 니블을 제3 가중치의 제2 니블로 승산하며; 제4 큐로부터 제1 니블을 제1 셔플러를 통해 제3 승산기에 공급하여 제3 승산기에서 제4 큐로부터의 제1 니블을 제4 가중치의 제1 니블로 승산하고; 제4 큐로부터 제2 니블을 제1 셔플러를 통해 제2 승산기에 공급하여 제2 승산기에서 제4 큐로부터의 제2 니블을 제4 가중치의 제2 니블로 승산하도록 구성된다.
일부 실시예들에서, 제1 큐의 제3 니블은 0이고, 제2 큐의 제3 니블은 0이며, 제3 큐의 제3 니블은 0이며, 및 제4 큐의 제3 니블은 0이고, 제1 타일은 제1 큐의 제3 니블이 제1 큐의 전단(front)에 있을 때는 제1 큐의 제3 니블, 제2 큐의 제3 니블, 제3 큐의 제3 니블, 및 제4 큐의 제3 니블 중의 어느 것과도 승산을 수행하지 않고 제2 큐, 제3 큐, 및 제 4 큐를 스킵(skip)하도록(advance) 더 구성된다.
일부 실시예들에서, 제1 큐의 제5 니블과 제1 큐의 제6 니블이 함께, 최상위(most significant) 니블과 최하위(least significant) 니블로 구성되고 최상위 니블은 1이고 최하위 니블은 짝수(even)인 8비트의 수를 저장하며; 그리고 제1 타일이 제1 큐의 제5 니블과 제1 큐의 제6 니블을 처리할 때, 최상위 니블을 0으로 대체(replace)하고; 최하위 니블을 우측으로 1 비트만큼 시프팅시켜(shift) 그 최상위 비트를 1로 설정하며; 제1 큐의 제1 니블과 제1 큐의 제6 니블이 함께 그 지수(exponent)가 1인 부동 소수점 수(floating point number)의 가수(mantissa)를 저장했음을 나타내는 플랙(flag)을 설정하도록 구성된다.
일부 실시예들에서, 제1 셔플러는 버퍼플라이 셔플러(butterfly shuffler)이다.
일부 실시예들에서, 제1 승산기와, 제2 승산기와, 제3 승산기와, 및 제4 승산기들은 제1 열(column)에 배치되고, 제1 타일이: 활성화 함수 버퍼에 연결된 제2 셔플러와; 제5 가중치 레지스터 및 제2 셔플러에 연결된 제5 승산기와; 제6 가중치 레지스터 및 제2 셔플러에 연결된 제6 승산기와; 제6 가중치 레지스터 및 제2 셔플러에 연결된 제7 승산기와; 및 제8 가중치 레지스터 및 제2 셔플러에 연결된 제8 승산기를 더 포함한다.
일부 실시예들에서, 제1 큐의 제5 니블과 제1 큐의 제6 니블이 함께, 최상의 니블과 최하위 니블로 구성되고 최상위 니블은 1이고 최하위 니블은 짝수인 8비트의 수를 저장하며; 그리고 제1 타일이 제1 큐의 제5 니블과 제1 큐의 제6 니블을 처리할 때, 최상위 니블을 0으로 대체하고; 최하위 니블을 우측으로 1 비트만큼 시프팅시켜 그 최상위 비트를 1로 설정하며; 제1 큐의 제1 니블과 제1 큐의 제6 니블이 함께 그 지수가 1인 부동 소수점 수의 가수를 저장했음을 나타내는 플랙을 설정하도록 구성된다.
일부 실시예들에서, 제1 셔플러는 버퍼플라이 셔플러이다.
일부 실시예들에서, 제1 승산기와, 제2 승산기와, 제3 승산기와, 및 제4 승산기들은 제1 열에 배치되고, 제1 타일이: 활성화 함수 버퍼에 연결된 제2 셔플러와; 제5 가중치 레지스터 및 제2 셔플러에 연결된 제5 승산기와; 제6 가중치 레지스터 및 제2 셔플러에 연결된 제6 승산기와; 제6 가중치 레지스터 및 제2 셔플러에 연결된 제7 승산기와; 및 제8 가중치 레지스터 및 제2 셔플러에 연결된 제8 승산기를 더 포함한다.
일부 실시예들에서, 제1 승산기와, 제2 승산기와, 제3 승산기와, 및 제4 승산기들은 제1 열에 배치되고, 제1 타일이: 활성화 함수 버퍼에 연결된 제2 셔플러와; 제5 가중치 레지스터 및 제2 셔플러에 연결된 제5 승산기와; 제6 가중치 레지스터 및 제2 셔플러에 연결된 제6 승산기와; 제6 가중치 레지스터 및 제2 셔플러에 연결된 제7 승산기와; 및 제8 가중치 레지스터 및 제2 셔플러에 연결된 제8 승산기를 더 포함한다.
일부 실시예들에서, 제1 셔플러는 버퍼플라이 셔플러이다.
본 발명의 한 실시예에 따르면, 처리 회로(processing circuit)로 연산하는 방법이 제공되되, 이 처리 회로는: 제1 타일과, 제2 타일과, 메모리와, 및 버스를 포함하고,
버스는: 메모리와, 제1 타일과, 및 제2 타일에 연결되고,
제1 타일은: 제1 가중치를 저장하는 제1 가중치 레지스터로, 제1 가중치가 0인 제1 가중치 레지스터와; 제3 가중치를 저장하는 제2 가중치 레지스터로, 제3 가중치는 그 어느 니블도 0이 아닌 8비트의 수인 제2 레지스터와; 제2 가중치를 저장하는 제3 가중치 레지스터로, 제2 가중치가 0인 제3 가중치 레지스터와; 제4 가중치를 저장하는 제4 가중치 레지스터로, 제4 가중치는 그 어느 니블도 0이 아닌 8비트 수인 제4 레지스터와; 활성화 함수 버퍼와; 제1 셔플러와; 제1 가중치 레지스터에 연결된 제1 승산기와; 제2 가중치 레지스터에 연결된 제2 승산기와; 제3 가중치 레지스터에 연결된 제3 승산기와; 및 제4 가중치 레지스터에 연결된 제4 승산기를 포함하며,
활성화 함수 버퍼가 제1 큐(queue; 대기 행렬)와, 제2 큐와, 제3 큐와, 및 제4 큐를 포함하도록 구성되고,
방법이: 제3 큐로부터 제1 니블을 제1 셔플러를 통해 제1 승산기에 공급하여 제1 승산기에서 제3 큐로부터의 제1 니블을 제3 가중치의 제1 니블로 승산하는 단계와; 제3 큐로부터 제2 니블을 제1 셔플러를 통해 제2 승산기에 공급하여 제2 승산기에서 제3 큐로부터의 제2 니블을 제3 가중치의 제2 니블로 승산하는 단계와; 제4 큐로부터 제1 니블을 제1 셔플러를 통해 제3 승산기에 공급하여 제3 승산기에서 제4 큐로부터의 제1 니블을 제4 가중치의 제1 니블로 승산하는 단계와; 제4 큐로부터 제2 니블을 제1 셔플러를 통해 제2 승산기에 공급하여 제2 승산기에서 제4 큐로부터의 제2 니블을 제4 가중치의 제2 니블로 승산하는 단계를 포함한다.
일부 실시예들에서, 제1 큐의 제3 니블은 0이고, 제2 큐의 제3 니블은 0이며, 제3 큐의 제3 니블은 0이며, 및 제4 큐의 제3 니블은 0이고, 방법이 제1 큐의 제3 니블이 제1 큐의 전단에 있을 때는 제1 큐의 제3 니블, 제2 큐의 제3 니블, 제3 큐의 제3 니블, 및 제4 큐의 제3 니블 중의 어느 것과도 승산을 수행하지 않고 제2 큐, 제3 큐, 및 제 4 큐를 스킵(skip)하는(advance) 단계를 더 포함한다.
일부 실시예들에서, 제1 큐의 제5 니블과 제1 큐의 제6 니블이 함께, 최상위 니블과 최하위 니블로 구성되고 최상위 니블은 1이고 최하위 니블은 짝수인 8비트의 수를 저장하며; 그리고 방법이 제1 큐의 제5 니블과 제1 큐의 제6 니블을 처리할 때, 최상위 니블을 0으로 대체하는 단계와; 최하위 니블을 우측으로 1 비트만큼 시프팅시켜 그 최상위 비트를 1로 설정하는 단계와; 제1 큐의 제1 니블과 제1 큐의 제6 니블이 함께 그 지수가 1인 부동 소수점 수의 가수를 저장했음을 나타내는 플랙을 설정하는 단계를 더 포함한다.
일부 실시예들에서, 제1 셔플러는 버퍼플라이 셔플러이다.
일부 실시예들에서, 제1 승산기와, 제2 승산기와, 제3 승산기와, 및 제4 승산기들은 제1 열에 배치되고, 제1 타일이: 활성화 함수 버퍼에 연결된 제2 셔플러와; 제5 가중치 레지스터 및 제2 셔플러에 연결된 제5 승산기와; 제6 가중치 레지스터 및 제2 셔플러에 연결된 제6 승산기와; 제6 가중치 레지스터 및 제2 셔플러에 연결된 제7 승산기와; 및 제8 가중치 레지스터 및 제2 셔플러에 연결된 제8 승산기를 더 포함한다.
일부 실시예들에서, 제1 큐의 제5 니블과 제1 큐의 제6 니블은 함께, 최상의 니블과 최하위 니블로 구성되고 최상위 니블은 1이고 최하위 니블은 짝수인 8비트의 수를 저장하며; 그리고 방법이 제1 큐의 제5 니블과 제1 큐의 제6 니블을 처리할 때, 최상위 니블을 0으로 대체하는 단계와; 최하위 니블을 우측으로 1 비트만큼 시프팅시켜 그 최상위 비트를 1로 설정하는 단계와; 제1 큐의 제1 니블과 제1 큐의 제6 니블이 함께 그 지수가 1인 부동 소수점 수의 가수를 저장했음을 나타내는 플랙을 설정하도록 단계를 더 포함한다.
일부 실시예들에서, 제1 셔플러는 버퍼플라이 셔플러이다.
일부 실시예들에서, 제1 승산기와, 제2 승산기와, 제3 승산기와, 및 제4 승산기들은 제1 열에 배치되고, 제1 타일이: 활성화 함수 버퍼에 연결된 제2 셔플러와; 제5 가중치 레지스터 및 제2 셔플러에 연결된 제5 승산기와; 제6 가중치 레지스터 및 제2 셔플러에 연결된 제6 승산기와; 제6 가중치 레지스터 및 제2 셔플러에 연결된 제7 승산기와; 및 제8 가중치 레지스터 및 제2 셔플러에 연결된 제8 승산기를 더 포함한다.
일부 실시예들에서, 제1 셔플러는 버퍼플라이 셔플러이다.
본 발명의 한 실시예에 따르면, 처리 수단(means for processing)으로 연산하는 방법이 제공되는데, 이 처리 수단은: 제1 타일과, 제2 타일과, 메모리와, 및 버스를 포함하고,
버스는: 메모리와, 제1 타일과, 및 제2 타일에 연결되고,
제1 타일은: 제1 가중치를 저장하는 제1 가중치 레지스터로, 제1 가중치가 0인 제1 가중치 레지스터와; 제3 가중치를 저장하는 제2 가중치 레지스터로, 제3 가중치는 그 어느 니블도 0이 아닌 8비트의 수인 제2 레지스터와; 제2 가중치를 저장하는 제3 가중치 레지스터로, 제2 가중치가 0인 제3 가중치 레지스터와; 제4 가중치를 저장하는 제4 가중치 레지스터로, 제4 가중치는 그 어느 니블도 0이 아닌 8비트 수인 제4 레지스터와; 활성화 함수 버퍼와; 제1 셔플러와; 제1 가중치 레지스터에 연결된 제1 승산기와; 제2 가중치 레지스터에 연결된 제2 승산기와; 제3 가중치 레지스터에 연결된 제3 승산기와; 및 제4 가중치 레지스터에 연결된 제4 승산기를 포함하며,
활성화 함수 버퍼가 제1 큐(queue; 대기 행렬)와, 제2 큐와, 제3 큐와, 및 제4 큐를 포함하도록 구성되고,
방법이: 제3 큐로부터 제1 니블을 제1 셔플러를 통해 제1 승산기에 공급하여 제1 승산기에서 제3 큐로부터의 제1 니블을 제3 가중치의 제1 니블로 승산하는 단계와; 제3 큐로부터 제2 니블을 제1 셔플러를 통해 제2 승산기에 공급하여 제2 승산기에서 제3 큐로부터의 제2 니블을 제3 가중치의 제2 니블로 승산하는 단계와; 제4 큐로부터 제1 니블을 제1 셔플러를 통해 제3 승산기에 공급하여 제3 승산기에서 제4 큐로부터의 제1 니블을 제4 가중치의 제1 니블로 승산하는 단계와; 제4 큐로부터 제2 니블을 제1 셔플러를 통해 제2 승산기에 공급하여 제2 승산기에서 제4 큐로부터의 제2 니블을 제4 가중치의 제2 니블로 승산하는 단계를 포함한다.
본 발명의 이들 및 다른 특징과 이점들은 이 명세서와, 청구항들, 및 첨부된 도면을 참조하면 이해될 것인데, 도면에서:
도 1a는 본 발명의 한 실시예에 따른 블록도;
도 1b는 본 발명의 한 실시예에 따른 그래프;
도 1c는 본 발명의 한 실시예에 따른 표;
도 2a는 본 발명의 한 실시예에 따른 블록도;
도 2b는 본 발명의 한 실시예에 따른 블록도;
도 2c는 본 발명의 한 실시예에 따른 블록도;
도 2d는 본 발명의 한 실시예에 따른 블록도;
도 2e는 본 발명의 한 실시예에 따른 블록도;
도 2f는 본 발명의 한 실시예에 따른 블록도;
도 2g는 본 발명의 한 실시예에 따른 블록도;
도 2h는 본 발명의 한 실시예에 따른 표;
도 3a는 본 발명의 한 실시예에 따른 블록도;
도 3b는 본 발명의 한 실시예에 따른 블록도;
도 3c는 본 발명의 한 실시예에 따른 블록도;
도 3d는 본 발명의 한 실시예에 따른 블록도;
도 3e는 본 발명의 한 실시예에 따른 데이터 레이아웃 도;
도 3f는 본 발명의 한 실시예에 따른 회로도;
도 3g는 본 발명의 한 실시예에 따른 데이터 흐름도;
도 3h는 본 발명의 한 실시예에 따른 아키텍처 도;
도 3i는 본 발명의 한 실시예에 따른 아키텍처 도;
도 4a는 본 발명의 한 실시예에 따른 블록도;
도 4b는 본 발명의 한 실시예에 따른 블록도;
도 4c는 본 발명의 한 실시예에 따른 블록도;
도 5a는 본 발명의 한 실시예에 따른 블록도;
도 5b는 본 발명의 한 실시예에 따른 블록도;
도 5c는 본 발명의 한 실시예에 따른 블록도;
도 5d는 본 발명의 한 실시예에 따른 데이터 레이아웃 도.
첨부된 도면들과 연계하여 이하에 제공되는 상세한 설명은 본 발명에 따라 제공되는 혼합 정밀도 신경망 처리 유닛 타일의 예시적 실시예들의 설명으로 의도된 것이며, 본 발명이 구성되거나 활용될 유일한 형태들을 대표하고자 의도한 것이 아니다. 이 설명은 예시적 실시예들에 연계한 본 발명의 특징들을 규정한다. 그러나 동일 또는 동등한 기능과 구조들이 역시 본 발명의 범위 내에 포괄될 것을 의도한 다른 실시예들에 의해서도 달성될 수 있음을 이해해야 할 것이다. 이 명세서의 어딘가에 표시된 바와 같이, 유사한 요소 번호들은 유사한 요소 또는 특징들을 나타낸다.
도 1a는 어떤 실시예들에 따른 신경망 프로세서(neural processor)의 개략(high-level) 블록도를 도시한다. 이 신경망 프로세서는 입력 특성맵(input feature map; IFM)(또는 “활성화 함수(activation)들”의 텐서(tensor))의 가중치(weight)들의 다차원 어레이(multi-dimensional array)(또는 텐서)와의 컨볼루션(convolution) 또는 텐서곱(tensor product)을 효율적으로 연산하여 출력 특성맵(OFM)을 형성하도록 구성될 수 있다. 이 신경망 프로세서는 또한 특성맵 풀링(pooling)과 활성화 함수(activation function)를 연산하도록 구성될 수 있다.
(각각 몇 개의, 예를 들어 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)는 타일(102)들 중의 하나에 연계될 수 있다. 중앙 컨트롤러(110)는 유틸리티 버스(utility bus; 112)를 통해 시스템 내의 레지스터(register)들을 제어하는 제어 워드(control word)들을 공급할 수 있다. 데이터는 AXI(Advanced Extensible Interconnect) 상호연결(interconnect)(114)을 통해 신경망 프로세서로 이송될 수 있고, 신경망 프로세서로 수행된 처리 작동의 결과들은 마찬가지로 AXI 상호연결을 통해 검색될 수 있다. MCU(micro-controller unit)(116)가 중앙 컨트롤러를 적시에(in a timely fashion) 적절히 구성하는 한편, DMA 컨트롤러(118)를 사용하여 신경망 프로세서와 외부 메모리(120) 간의 데이터 전송을 조정(coordinating) 및 실행함으로써 연산을 조정(orchestrate)하는 데 사용될 수 있다.
NPU 응용에 있어서, 희박(sparse) 데이터의 병렬 스트림(streams)들이 압축될 수 있다. 희박 데이터는 예를 들어 int8, uint8, int16, 또는 uint16의 포맷(format)일 수 있다. 이 스트림들은 한 바이트(byte)를 두 니블(nibble)로 분할함으로써 니블들의 스트림으로 취급될 수 있다. 가중치와 활성화 함수들은 이 바이트 크기의 데이터 내에 분산(sparse)되어 있다.
바이트들을 니블들로 분할하면, 가중치와 활성화 함수들은 더욱 희박해진다; 이러한 정도의 희박도(sparsity)를 가지는 데이터는 "현저히 희박(remarkably sparse)"하다고 지칭할 수 있다. 활성화 함수와 가중치들은 주로 작은 절대값들을 가진다. 이에 따라 0이 아닌 활성화 함수 및 가중치에서도 최상위 니블(most significant nibble; MSN)은 전형적으로 0이다. 희박도의 수준이 더 심해지면 이 데이터를 효율적으로 처리하는 데 NPU 아키텍처(architecture)가 활용될 수 있다.
한 예시적 실시예에서, 유입(incoming) 데이터 스트림이 압축되어 16 레인(lane)들에 걸쳐 저장된다. 데이터 값들의 분포 통계에 따르면, MSN들이 현저히 희박하여, 무부호(unsigned) 데이터가 0이거나 유부호(signed) 데이터가 모두 하나의 값을 가진다. 모든 16 MSN들이 0이 될 확률을 활성화 함수들의 다른 비율에 대해 도 1b에 도시했다. 4개의 MSN을 가지는 많은 수의 경우들에서 모든 MSN들이 0이 될 확률은 0 또는 0 근방인데, 이는 본 발명 시스템들이 입력 특성맵(IFM)의 승산 작동을 스킵(skip)할 수 있음을 의미한다. 4개의 MSN들이 0이 될 확률은 16개의 MSN들이 0이 될 확률보다 훨씬 더 높다. 도 1c는 몇 개의 다른 신경망들에서 희박도의 여러 가지 수치(metric)들의 표이다.
도 2a에 도시된 것은 경미한(trivial) 희박도의 타일의 한 실시예이다. 4 바이(by) 4 승산기(126)를 사용함으로써, IFM 레인들은 니블 폭(nibble-wide)이다. 가중치 레지스터 파일(weight register file 127)은 바이트 폭(byte-wide)일 수 있지만 저장되는 각 바이트는 두 니블들로 취급될 수 있다. 이 명세서에 사용된 "레지스터 파일(register file)"(127)은 레지스터들의 어레이이다. 도 2a의 실시예는 제2 가산기 트리(adder tree)(128)가 삭제된 점이 ‘610 출원에 개시된 타일과 다르고 IF 예견(look-ahead) 및 검색(look-aside) 옵션과 인접 레인들로부터의 가중치 차용도 마찬가지다. 결과적으로, 타일이 농후(dense)해지고 콤팩트해져, 12비트 폭(12-bit-wide)의 가산기 트리가 출력으로 존재한다. 송출될(broadcasted) 전체 IFM 열 또는 슬라이스(slice) - 16 니블폭(16-nibble-wide)의 레인 - 은 모두 0인 값들로 구성된다. 이 경우, 4중쌍(quad) IFM 캐시(cache)(139)는 단지 예견(버퍼) 뿐이다. 비트 시프터(bit shifter; 105)들은 니블의 곱들이 가산되기 전에 이들을 정렬시킨다(예를 들어 곱의 한 인수(factor)가 최상위 니블일 때 4 비트만큼 좌측으로 시프팅(shifting)시킨다).
경미한 니블 입도(granularity)의 IFM 희박도 타일은 도 2b에 도시된 바와 같이 경미한 4중쌍 희박도 타일이 되도록 개선될 수 있다. 모든 IFM 니블들이 0이 될 확률은 레인의 수가 감소함에 따라 지수적으로 증가한다. 레인들을 4중쌍(quad), 즉 4 레인들의 세트로 짝을 이룸으로써 각 4중쌍은 다른 4중쌍들과 독립적으로 작동한다. 이 구성은 단순한 가중치 희박도를 포함한다. 16개의 레인들이 네 4중쌍으로 그룹을 이뤄, 각 4중쌍은 4개의 레인들을 포함한다. 각 4중쌍 출력과 나머지 가산기 트리(128) 사이에 FIFO가 삽입되어 4중쌍 출력들을 재동기화한다(resynchronize).
FIFO가 사용되는 경우는 파이프라인 레지스터(pipeline register)들은 필요 없을 것이며, 사용되지 않는 FIFO 레지스터들은 전력을 절감하도록 클록을 받지 않는다(not clocked). 4중쌍 출력의 부분 합은 단지 10비트 폭 더하기 부호 비트(sign bit)이다. 가산기 트리 출력들은 누산기(accumulator; 130) 이전에 0 또는 4비트의 배수만큼 업시프팅된다(upshifted). 이는 최상위 및 최하위 IFM들, 가중치 니블들, 및 8 또는 16비트 데이터 조합들을 처리한다.
어떤 상황들에서, 일부 4중쌍들이 다른 4중쌍들보다 훨씬 선행하여(run far away) 효율 문제를 야기할 수 있다. 이 훨씬 선행하는 문제를 방지하기 위해, 가중치들이 오프라인(offline)으로 미리 셔플링되고(pre-shuffled), 대응 IFM 4중쌍들 역시 셔플링될 수 있다. 셔플링의 입도는 레인 기반(lane-based)이 아니라 전적으로 4중쌍 기반(quad-based)이 될 수 있다.
도 2b의 실시예는 경미한 가중치의 희박도를 포함하는데, 이는 현재 사이클의 모든 가중치 니블들이 0으로 설정될 때 4중쌍의 클록 사이클을 스킵한다. 모든 활성화 함수-가중치 니블 쌍들이 0이라면 역시 클록 사이클이 스킵된다.
도 2c에 도시된 다른 실시예에서, 도 2b의 설계는 FIFO들을 제외하도록 약간 변형된다. 어떤 경우들에는, FIFO들이 바람직하지 못 할 수 있고, 그러면 부분 합들이 각 4중쌍으로부터 출력 경로로 전송된다. 출력 경로는 몇 개의 누산기(130)들을 가져, 4중쌍들로 생성된 부분 합들에 대응하는 몇 개의 합들을 연산하는 데, 그 중의 일부는 다른 것들보다 선행한다. 예를 들어, 한 4중쌍이 다른 4중쌍들에 두 클록 사이클만큼 선행하면, 그 합은 두 클록 사이클 뒤에 도달할 가중치들에 연계된 누산기(130)에 가상될 것이다. 4중쌍 부분 합들은 단지 10비트와 부호이다. 1대1(one by one) 컨볼루션에 대해서는, 모든 것이 동일한 누산기(130)에 가산될 수 있다.
도 2d는 경미한 활성화 함수의 희박도를 구현하는 실시예를 도시하는데, 이는 4비트의 분산된 활성화 함수들의 배수(multiple)들을 이용할 수 있다. 도 2d는 8비트 희박도를 지원하는 8비트 벡터-행렬(vector-matrix) 승산기(126)를 도시한다.
도 2d는 8비트 활성화 함수를 두 분리된 연속적 4비트 희박 IFM 화소(sparse IFM pixel)들(이는 함께 “니블 화소 쌍(nibble pixel pair)"로 지칭될 수 있음)로 분할됨으로써 변형될 수 있는데, 즉 각 8비트 IFM 화소가 니블 화소 쌍으로 표현될 수 있다. 그 작동은 ‘610 출원의 8비트 IFM 희박도 경우와 동일하지만; 승산기(126)가 4비트 IFM 바이(by; 곱하기) 8비트 가중치이고, 열 누산기(130)에 두 연속적 화소들이 존재한다.
도 2e는 4비트 바이 4비트 승산기를 가지는 승산 유닛을 도시한다. 각 8비트 활성화 함수는 두 분리된 연속적인 4 비트 희박 IFM "화소(pixel)들“(니블 화소 쌍들)로 분할될 수 있다. 이어서 본 발명 시스템은 승산기(126)가 4비트 IFM x 8비트 가중치의 승산기이고, 두 연속적인 니블의 곱들이 열 누산기(130)에 가산된다는 것을 제외하고는‘610 출원의 8비트 IFM 희박도 경우처럼 진행할 수 있다. 동일한 니블 화소 쌍으로 산출된 곱들은 동일한 가산기 트리(128)에서 가산될 수 있다.
도 2f에 도시된 다른 실시예에서, 16비트 활성화 함수에 적용된 경미한 활성화 함수 희박도가 두 8비트 분산된 화소들로 분해된다. 두 니블 화소 쌍들이 한 16비트 수를 나타낸다. 16비트 활성화 함수를 두 분리된 연속적 8비트 희박 IFM 화소들로 분할함으로써, 각 니블 화소 쌍이 한 8비트 희박 IFM 화소인 경우 시스템이 16비트 IFM을 처리할 수 있다. 각 4n 비트 IFM 요소에 n개의 4비트 화소들이 존재한다. 다음, 각 니블 화소 쌍이 두 4비트 희박 IFM들로 분할된다. 본 발명 시스템은 이어서 ‘610 출원의 8비트 IFM 희박도 경우와 같이 진행하지만; 도 2f의 실시예의 승산기는 4비트 IFM 바이 8비트 가중치이다. n개의 연속적 화소들이 열 누산기(130)에 가산된다. 16비트 값들이 두 니블 화소 쌍들로 분해되고 나면, 두 결과적인 8비트 활성화 함수들이 다시 분할되어, 니블 화소 4중쌍(nibble pixel quad)으로 알려진 4개의 분리된 연속적 4비트 희박 IFM 화소들을 형성한다. 이는 16비트 IFM에 대한 것이다. 12비트 IFM에 대해서는 세 4비트 화소들이, 4n비트 IFM에 대해서는 n개의 4비트 화소들이 존재한다.
어떤 실시예들에서는, 16비트 IFM 값들을 두 8비트 값들로 분할한 다음 (재귀적으로) 두 8비트 값들을 각각 두 4비트 니블들로 분할하는 대신, 도 2g의 실시예에서와 같이 16비트 IFM 값들이 직접(비 재귀적으로) 4개의 4비트 니블들로 분할될 수 있다.
도 2g는 어떻게 (i) 16비트 활성화 함수가 16비트 IFM에 대한 네 분할된 연속적 4비트 희박 IFM "화소(pixel)들“로 분할(니블 화소 4중쌍을 형성)될 수 있는지; (ii) 활성화 함수가 12비트 IFM에 대한 세 4비트 니블들로 분할될 수 있는지; 그리고 (iii) 활성화 함수가 4n비트 IFM에 대해 (비 재귀적으로) n개의 4비트 니블들로 분할 될 수 있는지를 도시한다. 이어서 시스템은 도 2g의 실시예의 승산기(126)가 4비트 IFM x 8비트 가중치 승산기인 점을 제외하고는‘610 출원의 8비트 IFM 희박도 경우와 같이 진행된다. n개의 연속적 화소들은 열 누산기(130)에 가산되고(결과적으로 정지(stall)가 더 적어진다); 더 넓은(4비트 x 16비트) 가산기 트리(128)들이 사용될 수 있다.
도 2h의 표는 이 가산기 폭(4비트 x 16비트)에서 다양한 희박 IFM 화소들에 대해 4비트 바이 4비트 승산기(126)로 수행될 수 있는 작동들을 요약한다.
("FP4.x"가 4비트 가수(mantissa) 및 x비트 지수(exponent)를 가지는 부동 소수점(floating point) 표현을 의미할 때) FP4.x 비트 활성화 함수에 대해, IFM 송출 레인(broadcast lane)은 4비트 무부호(unsigned) 레인과 1비트 부호 레인이다. 전부는 아니지만 대부분의 가중치들은 길이가 4비트이다. 활용도를 높이기 위해 FP4.x 포맷이 사용될 수 있다. 어떤 IFM 값들은 정확도 손실 없이 표현될 수 있는데; 예를 들어 0001의 최상위 니블과 0010의 최하위 니블을 가지는 8비트 값은 000 및 1001 e-1로 표현될 수 있다. 이러한 값들은 4비트 고정 승산기로 승산될 수 있고, 그 승산기 출력은 비트의 지수 수만큼 시프트 업(shift up)될 수 있다. FP4.2+(즉 FP4.x, with x>1) 대신 FP4.1을 사용할 때는. IFM 분포에 기인하여 한 지수 송출 비트 라인을 추가하는 것이 추가된 송출 라인 비트 당 (사용되는 멀티플렉서(multiplexer)들의 수의 관점에서) 최소의 오버헤드(overhead)로 최선의 개선을 제공할 수 있다. FP4.x 표현을 사용하면 가산기 트리 폭에 2^x 비트가 추가된다.
4비트 승산을 증가시키기 위해 FP4.x 비트의 가중치들이 사용될 수 있다. 가중치들이 레지스터 파일(127)로부터 호출(fetch)되면서 유효한(eligible) 8비트 가중치들은 FP4.1+로 변환된다. 이는 IFM 송출 레인들에 대한 FP4.1과 유사하다. FP4.1에 대해 더 낮은 하드웨어 오버헤드가 존재하고 가산기 트리 폭에 2^x 비트를 추가할 것이다.
다른 실시예에서, 4비트 벡터 행렬 승산기가 8비트 IFM 희박도를 지원한다. 도 3a에서, 각 가중치 레지스터는 한 번에 한 니블씩 액세스될 수 있는 한 부호 비트 및 8비트 값을 저장할 수 있어, 이를 승산기(126)에 한 번에 한 니블씩 공급한다. 각 승산기(126)는 각 IFM 니블을 두 가중치 니블들로 (한 번에 하나씩) 승산하는 데 두 사이클이 걸린다. 승산기(126)는 (i) 가중치 니블이 최상위 니블(MSN)이면 추가적인 4비트만큼 업시프팅되고, (ii) 가중치 니블이 최하위 니블(LSN)이면 시프팅되지 않을 수 있다.
다른 실시예에서, 시스템은 도 3b와 같이 복제(duplicate) 송출 레인을 포함하는데, 이는 활용도(utilization)를 향상시킨다. 복제 송출 레인은 각 활성화 함수 송출 레인을 복사한다(replicate). 높은 활용도를 위해 레인들은 N>2일 때 2x 또는 Nx가 될 수 있다. 레인들은 클록 사이클 t, 클록 사이클 t-1, 등등에서 2 이상의 활성화 함수 선택들을 가지는 복제 유닛들을 제공하도록 하나와 다른 것들 사이에서 플립플롭(flip-flop) 작동된다. 이 실시예는 추가적인 가산기 트리(128)들을 사용할 수 있다.
가중치 희박도는 트리플 희박도(triple sparsity)의 한 부분이며 이하에 설명된다. 이는 작업 차용(work borrowing)과, 단일 및 복수 열들에 대한 희박 가중치 페어링(paring; 짝짓기), 및 저렴한(cheap)(즉 칩(chip) 공간을 거의 요구하지 않는) 열 당(per-column) 셔플러들을 포함한다. 이 명세서에 사용된 "작업 차용(work borrowing)"은 한 승산 유닛(multiplication unit; MU)이 다른 것으로부터 작업을 차용하는 것을 의미한다. IFM캐시(139)와 활성화 함수 버퍼(124) 사이에 셔플러가 사용되어 작업 차용의 기회를 증대시킬 수 있다. 셔플링된 IFM 송출 레인들은 전형적으로 MSN인 각 비0 니블이 역시 전형적으로 MSN들인 0 니블들을 가지는 인접 승산 유닛들을 가질 수 있다. 이들이 열 내에 인접할 때, 작업 공유(work-sharing) 설계가 특히 간단하다. 8비트 가중치를 호출할 때 이는 두 4비트 니블의 가중치들과 동등하다. 두 니블 가중치들 중의 하나는 동일한 IFM 가중치 사이클 내에서 용이하게 차용될 수 있다. 도 3c에 도시된 버터플라이 셔플러 등이 버터플라이 셔플러가 사용될 수 있다.
다른 실시예에서, 도 3d에 도시된 바와 같이 2 바이 2 승산 유닛 공유 방식(sharing sense)으로 작업이 한 승산기(126)에 의해 이에 인접한 다른 것으로부터 차용된다. 4비트 IFM 바이 8비트 가중치 승산을 두 4비트 IFM 바이 4비트 가중치 승산들로 수행하는 데 두 인접 승산 유닛들을 사용하면 두 인접 승산 유닛들의 사용을 가능하게 한다. 유휴하는(idle) MU는 인접 MU로부터 가중치 활성화 함수 쌍들을 차용한다. 이들이 동일한 가산기 트리(128)들을 공유하므로 동일한 열에 있는 MU들을 사용하는 것이 더 간단하다. MU 열들이 짝을 이뤘을(ganged together) 때 - 인접 열들이 쌍들을 이룰 때 - 이들이 동일한 가산기 트리(128)들을 공유하므로 동일하게 짝을 이룬 열 쌍의 MU들이 사용된다.
희박 가중치 페어링(pairing)에서, 분산된 가중치의 쌍들이 서로 짝을 이룬다. 예를 들어 도 3e에 도시된 바와 같이, 16개의 가중치 세트에서, 8개가 0이고, 5개가 4비트이며, 및 3개가 8비트라면, 이 가중치들은 짝지어질 수 있다. 활성화 함수 레인들은 다시 셔플링되어(reshuffled) 8비트의 0인 가중치들을 8비트의 0이 아닌 가중치를 짝짓는다. 가중치들은 오프라인(offline)으로 셔플링된다. 이들은 또한 전술한 버터플라이 IFM 셔플러로 셔플링될 수 있다. 그 결과는 0 및 비0(zero-and-nonzero; ZNZ) 8비트 가중치 쌍들의 쌍(320)이다. 각 ZNZ 쌍(320)은 0보유(zero-holding) MU를 가진다. 이 0보유 MU는 8비트 보유 MU로부터 니블을 차용하고, 결과적으로 8비트 승산이 한 사이클로 완료된다. 니블 차용은 예를 들어 도 3f의 회로를 사용하여 수행될 수 있다. 가중치들이 8비트로 저장되므로, 오버헤드는 MU 당 두 4비트 멀티플렉서(mux)들이다.
희박 가중치 페어링은 도 3g에 도시된 바와 같이 복수의 열들에 확장될 수 있다. 니블 가중치들을 저장하고, 레인들을 셔플링하며, 어떤 두 MU들에 니블들을 추가하는 것이 동일한 열 내의 니블들에 가능하다. 니블들의 차용은 좌측, 우측, 위, 아래로부터, 또는 어떤 경우에는 대각선으로도 가능하다. MU들이 가산기 트리(128)를 공유하면 이것(대각선)이 더욱 바람직하다. 일반적으로 다른 열의 가중치들의 희박도의 분포가 동일하지 않을 것이므로 셔플러는 열들의 각 쌍 사이에 존재할 수 있다. 단순화된 셔플러를 사용하면, 예를 들어 레인들 간에 배선(wire)을 연장함으로써 인접 레인들이 혼합될(swizzed) 수 있다(예를 들어 정적 셔플러를 사용하여 랜덤 또는 의사랜덤하게(random or pseudorandom manner) 셔플링된다). 열들이 셔플링될 수 있는 데, 이는 유휴하는 MU들을 작업하는(busy) MU들의 좌측 또는 우측에 위치시킨다. 1보다 큰 x값을 가지는 FP4.x가 사용될 수 있는데; 이는 정규 분포된 가중치들을 더 잘 표현하고, 이에 따라 이들 중에 한 유효 니블을 가지는 가중치들이 비교적 높은 비율로 존재할 수 있다.
도 3g는 열 셔플러들의 세트의 데이터 흐름도를 도시한다. 도 3h 및 3i는 두 실시예에서의 열 셔플러 아키텍처들을 각각 도시한다. 어떤 실시예에서는 열 당 비트 방식(bit-tactical per-column)의 셔플러가 포함될 수 있다.
어떤 실시예들에서는, 시스템이 농후(dense) 연산을 수행하도록 구성될 수 있다. 농후 연산의 예는 농후(즉 희박하지 않은) 8비트 가중치들, 8비트 IFM, 및 이 둘의 조합을 포함할 수 있다. 농후 8비트 가중치들이 존재할 때는, 도 4a에 도시된 바와 같이 열들을 4비트 바이 8비트 승산을 수행하도록 좌우의(horizontally) 쌍들로 짝을 지어 OFM 채널들의 전체수를 감소시킴으로써 복수 사이클의 처리를 방지(avoid)할 수 있다. 농후 8비트 IFM들이 존재할 때는, 도 4b에 도시된 바와 같이 열들을 상하의(vertically) 쌍으로 짝지어 8비트 바이 4비트 승산을 수행할 수 있다. 조합된 농후 8비트 IFM 및 가중치들은 도 4c에 도시된 바와 같이 열들을 상하의 4중쌍(quad)로 짝지어 충분히 넓은 가산기 트리(128)들을 가지는 8비트 바이 8비트 승산을 수행함으로써 처리될 수 있다.
어떤 실시예들에서는, MAC 오버헤드가, 이하에 도 5a - 5c를 참조하여 더 상세히 논의할 바와 같이, 가산기 트리(128) 및 가중치 레지스터 파일(127)들을 공유하거나, 2 바이 2 MU 리소스(resource)들을 공유함으로써 저감될 수 있다. 도 5a에서, 복제 활성화 함수 레인들 등 IFM 희박도를 이용하는 전술한 설계들의 일부는 추가적인 가산기 트리(128)들을 요구할 수 있다. 이 가산기 트리(128)들의 일부는 충분히 활용되지 못할(underutilized) 수 있는데, 이에 따라 열들은 가산기 트리(128)들을 공유하도록 짝지어질 수 있다. 예를 들어. 1 바이 2 승산기들이 네 가산기 트리(128)들을 공유하도록 짝지어질 수 있다.
도 5b의 일부 실시예들에서는, MAC 오버헤드가 가중치들을 분산된 형태(sparse form)로 저장하고 가중치 레지스터 파일(127)들을 공유함으로써 저감될 수 있다. 한 실시예에서, 열들이 가중치 레지스터들을 공유하도록 짝지어진다. 0이 아닌 8비트 가중치들이 저장되고 모든 0인 8비트 레지스터들을 표시(mark)하도록 (레지스터 당 1비트를 가지는) 가중치 비트 마스크(bit mask) 레지스터가 추가된다. 가중치의 커널 크기(kernel size)는 0이 아닌 가중치들만을 저장하고 더 적은 비0 가중치들을 가지는 열들로부터 가중치들을 사용하는 양자에 의해 효율적으로 증가된다. 이러한 한 실시예에서, 짝지어진 열 쌍들은 한 물리적 열 당 두 가상(virtual) 열들로 역할한다. 예를 들어 두 물리적 채널들 또는 한 물리적 채널이 배증(double)된 가중치 폭의 승산기들과 함께 사용될 수 있다. 다른 예는 4 바이 4 승산기들을 4 바이 8 승산기로 짝을 지어 8비트 가중치를 생성하는 것이다.
어떤 실시예들에서는, MAC 오버헤드가 도 5c에 도시된 바와 같이 2 바이 2 MU 리소스 공유를 사용하여 저감될 수 있다. 이러한 한 실시예에서, 활성화 함수 레인들은 활성화 함수들이 차용될 수 있도록 공유될 수 있는데; 승산기(126)들이 활성화 함수 및 가중치 쌍들이 상하 및 좌우 모두에서 차용될 수 있도록 공유될 수 있고; 가산기 트리(128)들 역시 공유될 수 있으며; 그리고 가중치 레지스터 파일(127)이 공유될 수 있다. 병합된(merged) 레지스터 파일이 구동 원가가 상승하여(become expensive)(즉 관련되는 멀티플렉서들의 수 때문에 칩 상에서 큰(large amount) 공간을 점유하여) 가중치 레지스터 파일(127)들이 각각 1 포트(port) 바이 18 깊이(depth)의 구성을 가지는 4개의 레지스터 파일(127)들 대신에 4 포트, 18 바이 4 깊이의 구성을 요구한다면, 가중치 레지스터 파일(127)들의 공유가 유용하다.
도 5d의 다른 실시예에서, IFM 채널들을 오프라인으로 재배열(reordering)할 때, 경미한 트리플 희박도(trivial triple sparsity)가 존재한다. 가능한 많은 IFM 가중치 사이클들에 대해 모든 열들의 동일한 슬라이스(slice) 내의 MSN들의 가중치를 0으로 가짐으로써, 경미한 트리플 희박도가 구현될 수 있다. MSN에 대한 대부분의 가중치들이 0이므로 전체 가중치 슬라이스는 이전 층(layer)의 OFM을 재배열함으로써 0이 될 수 있다. 승산기(126)는 4 바이 8비트 대신 4 바이 4비트가 될 수 있다. 어느 IFM 가중치 사이클들이 얼마나 많은 4 비트 사이클들을 가지는지 알기 위해 시퀀서(sequencer)가 필요한데; 이는 정적(static) 정보이므로 컴파일 시간(compile time)에서 연산될 수 있다.
광학적 제어를 위해, 트리플 희박도가 리소스들을 광학적으로 공유하는 데 사용될 수 있다. 실행 계획(execution plan) 실시간 실행보다 대략 두 클록 사이클만큼 선행하는 클록 사이클을 사용하여 연산된다. 모두 0값이어야 하는 원하는 가중치 열들을 정적으로 수집(collect)하기 위해 IFM 송출 유닛들이 필요하다. 이는 4비트 이하(-bit-or-less), 8비트 이하, 등등이 될 수 있다.
가중치 슬라이스 MSN은 모두 0인 것이 컴파일 시간에서 알려지지만; IFM 값들은 컴파일 시간에는 미지인데, 이는 가산기 트리(128)들이 바쁘게 하고, 타일들을 정지(stall)시키거나, 또는 핸드셰이크 신호전송(handshake signaling)을 필요로 한다. 그러나 IFM 값들은 IFM 캐시(139)로부터 호출(fetch)될 수 있다. 호출된 값들에 기반하여, 최적 리소스 연산의 대략 두 사이클만큼의 선행이 정지를 최소화하도록 사용될 수 있다. 가산기 트리(128)들도 MU가 가능한 것처럼 차용될 수 있는데, 이는 활성화 함수 및 가중치 쌍들을 포함한다. 정지 핸드셰이크 신호전송을 실시간 선행(ahead-of-real-time) 연산으로 대체함으로써 연산된 리소스들이 할당될 수 있다. 이는 어느 IFM 가중치 사이클이 0 내지 4 사이의 클록 사이클들 중 특정한 수의 클록 사이클들을 요구하는지 이해하기 위한 IFM 송출들을 요구한다.
이 명세서에서 "~의 일부(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 이하의 최대값을 가지는 하부 범위들을 포함하고자 의도한 것이다. 이 명세서에 기재된 어떤 최대 수치의 한정은 거기에 포괄되는 모든 더 작은 수치 한정들을 포함할 것을 의도한 것이고, 이 명세서에 기재된 어떤 최소 수치의 한정은 거기에 포괄되는 모든 더 큰 수치 한정들을 포함할 것을 의도한 것이다.
혼합 정밀도 신경망 처리 유닛 타일의 예시적 실시예들이 이 명세서에 설명 및 예시되었으나, 당업계에 통상의 기술을 가진 자에게는 여러 가지 변경과 변형들이 자명할 것이다. 이에 따라, 본 발명의 원리에 따라 구성되는 혼합 정밀도 신경망 처리 유닛 타일은 이 명세서에 구체적으로 기재된 것과 달리 구현될 수 있음을 이해해야 할 것이다. 본 발명은 또한 이하의 청구항들과 그 등가물들로 정의된다.

Claims (20)

  1. 제1 타일과, 제2 타일과, 메모리와, 및 버스를 포함하는 프로세서로,
    상기 버스는 상기 메모리와, 상기 제1 타일 및 상기 제2 타일에 연결되고,
    상기 제1 타일이:
    제1 가중치를 저장하는 제1 가중치 레지스터로, 상기 제1 가중치가 0인 상기 제1 가중치 레지스터와;
    제3 가중치를 저장하는 제2 가중치 레지스터로, 상기 제3 가중치가 어느 니블도 0이 아닌 8비트 수인 상기 제2 가중치 레지스터와;
    제2 가중치를 저장하는 제3 가중치 레지스터로, 상기 제2 가중치가 0인 상기 제3 가중치 레지스터와;
    제4 가중치를 저장하는 제4 가중치 레지스터로, 상기 제4 가중치가 어느 니블도 0이 아닌 8비트 수인 상기 제4 가중치 레지스터와;
    활성화 함수 버퍼와;
    제1 셔플러와;
    상기 제1 가중치 레지스터에 연결된 제1 승산기(multiplier)와;
    상기 제2 가중치 레지스터에 연결된 제2 승산기와;
    상기 제3 가중치 레지스터에 연결된 제3 승산기와; 및
    상기 제4 가중치 레지스터에 연결된 제4 승산기를 포함하고,
    상기 활성화 함수 버퍼가: 제1 큐와, 제2 큐와, 제3 큐와, 및 제4 큐를 포함하도록 구성되며,
    상기 제1 타일이:
    제1 니블을 상기 제3 큐로부터 상기 제1 셔플러를 통해 상기 제1 승산기에 공급하여 상기 제1 승산기에서 상기 제3 큐로부터의 상기 제1 니블을 상기 제3 가중치의 제1 니블로 승산하고;
    제2 니블을 상기 제3 큐로부터 상기 제1 셔플러를 통해 상기 제2 승산기에 공급하여 상기 제2 승산기에서 상기 제3 큐로부터의 상기 제2 니블을 상기 제3 가중치의 제2 니블로 승산하며;
    제1 니블을 상기 제4 큐로부터 상기 제1 셔플러를 통해 상기 제3 승산기에 공급하여 상기 제3 승산기에서 상기 제4 큐로부터의 상기 제1 니블을 상기 제4 가중치의 제1 니블로 승산하고; 그리고
    제2 니블을 상기 제4 큐로부터 상기 제1 셔플러를 통해 상기 제2 승산기에 공급하여 상기 제2 승산기에서 상기 제4 큐로부터의 상기 제2 니블을 상기 제4 가중치의 제2 니블로 승산하도록 구성되는 프로세서.
  2. 제1항에 있어서,
    상기 제1 큐의 제3 니블이 0(zero)이고, 상기 제2 큐의 제3 니블이 0이며, 상기 제3 큐의 제3 니블이 0이고, 및 상기 제4 큐의 제3 니블이 0이며, 그리고
    상기 제1 타일이
    상기 제1 큐의 상기 제3 니블이 상기 제1 큐의 선단에 있을 때,
    상기 제1 큐의 제3 니블과, 상기 제2 큐의 제3 니블과, 상기 제3 큐의 제3 니블과, 및 상기 제4 큐의 제3 니블 중의 어느 것과도 승산을 수행하지 않고,
    상기 제1 큐와, 상기 제2 큐와, 상기 제3 큐와, 및 상기 제4 큐로 진행하도록 더 구성되는 프로세서.
  3. 제2항에 있어서,
    상기 제1 큐의 제5 니블과 상기 제1 큐의 제6 니블이 함께, 최상위 니블과 최하위 니블로 구성된 8비트 수를 저장하고, 상기 최상위 니블이 1이고, 상기 최하위 니블이 짝수이며; 그리고
    상기 제1 타일이
    상기 제1 큐의 상기 제5 니블과 상기 제1 큐의 상기 제6 니블을 처리할 때:
    상기 최상위 니블을 0으로 대체하고;
    상기 최하위 니블을 우측으로 1비트만큼 시프팅시키고 그 최상위 니블을 1로 설정하며; 그리고
    상기 제1 큐의 상기 제5 니블과 상기 제1 큐의 상기 제6 니블이 함께, 그 지수가 1인 부동 소수점 수의 가수를 저장했음을 나타내는 플랙을 설정하도록 구성되는 프로세서.
  4. 제3항에 있어서,
    상기 제1 셔플러가 버터플라이 셔플러인 프로세서.
  5. 제4항에 있어서,
    상기 제1 승산기와; 상기 제2 승산기와; 상기 제3 승산기와; 및 상기 제4 승산기가 제1 열에 배치되고, 그리고
    상기 제1 타일이
    상기 활성화 함수 버퍼에 연결된 제2 셔플러와;
    제5 가중치 레지스터와 상기 제2 셔플러에 연결되는 제5 승산기와;
    제6 가중치 레지스터와 상기 제2 셔플러에 연결되는 제6 승산기와;
    제7 가중치 레지스터와 상기 제2 셔플러에 연결되는 제7 승산기와;
    제8 가중치 레지스터와 상기 제2 셔플러에 연결되는 제8 승산기를 더 포함하는 프로세서.
  6. 제1항에 있어서,
    상기 제1 큐의 제5 니블과 상기 제1 큐의 제6 니블이 함께, 최상위 니블과 최하위 니블로 구성된 8비트 수를 저장하고, 상기 최상위 니블이 1이고, 상기 최하위 니블이 짝수이며, 그리고
    상기 제1 타일이
    상기 제1 큐의 상기 제5 니블과 상기 제1 큐의 상기 제6 니블을 처리할 때:
    상기 최상위 니블을 0으로 대체하고;
    상기 최하위 니블을 우측으로 1비트만큼 시프팅시키고 그 최상위 니블을 1로 설정하며; 그리고
    상기 제1 큐의 상기 제5 니블과 상기 제1 큐의 상기 제6 니블이 함께, 그 지수가 1인 부동 소수점 수의 가수를 저장했음을 나타내는 플랙을 설정하도록 구성되는 프로세서.
  7. 제6항에 있어서,
    상기 제1 셔플러가 버터플라이 셔플러인 프로세서.
  8. 제7항에 있어서,
    상기 제1 승산기와; 상기 제2 승산기와; 상기 제3 승산기와; 및 상기 제4 승산기가 제1 열에 배치되고, 그리고
    상기 제1 타일이
    상기 활성화 함수 버퍼에 연결된 제2 셔플러와;
    제5 가중치 레지스터와 상기 제2 셔플러에 연결되는 제5 승산기와;
    제6 가중치 레지스터와 상기 제2 셔플러에 연결되는 제6 승산기와;
    제7 가중치 레지스터와 상기 제2 셔플러에 연결되는 제7 승산기와;
    제8 가중치 레지스터와 상기 제2 셔플러에 연결되는 제8 승산기를 더 포함하는 프로세서.
  9. 제1항에 있어서,
    상기 제1 승산기와; 상기 제2 승산기와; 상기 제3 승산기와; 및 상기 제4 승산기가 제1 열에 배치되고, 그리고
    상기 제1 타일이
    상기 활성화 함수 버퍼에 연결된 제2 셔플러와;
    제5 가중치 레지스터와 상기 제2 셔플러에 연결되는 제5 승산기와;
    제6 가중치 레지스터와 상기 제2 셔플러에 연결되는 제6 승산기와;
    제7 가중치 레지스터와 상기 제2 셔플러에 연결되는 제7 승산기와;
    제8 가중치 레지스터와 상기 제2 셔플러에 연결되는 제8 승산기를 더 포함하는 프로세서.
  10. 제9항에 있어서,
    상기 제1 셔플러가 버터플라이 셔플러인 프로세서.
  11. 처리 회로로 연산하는 방법으로, 상기 처리회로가:
    제1 타일과, 제2 타일과, 메모리와, 및 버스를 포함하고,
    상기 버스가 상기 메모리와, 상기 제1 타일 및 상기 제2 타일에 연결되며,
    상기 제1 타일이:
    제1 가중치를 저장하는 제1 가중치 레지스터로, 상기 제1 가중치가 0인 상기 제1 가중치 레지스터와;
    제3 가중치를 저장하는 제2 가중치 레지스터로, 상기 제3 가중치가 어느 니블도 0이 아닌 8비트 수인 상기 제2 가중치 레지스터와;
    제2 가중치를 저장하는 제3 가중치 레지스터로, 상기 제2 가중치가 0인 상기 제3 가중치 레지스터와;
    제4 가중치를 저장하는 제4 가중치 레지스터로, 상기 제4 가중치가 어느 니블도 0이 아닌 8비트 수인 상기 제4 가중치 레지스터와;
    활성화 함수 버퍼와;
    제1 셔플러와;
    상기 제1 가중치 레지스터에 연결된 제1 승산기와;
    상기 제2 가중치 레지스터에 연결된 제2 승산기와;
    상기 제3 가중치 레지스터에 연결된 제3 승산기와; 및
    상기 제4 가중치 레지스터에 연결된 제4 승산기를 포함하고,
    상기 활성화 함수 버퍼가: 제1 큐와, 제2 큐와, 제3 큐와, 및 제4 큐를 포함하도록 구성되며,
    상기 방법이:
    제1 니블을 상기 제3 큐로부터 상기 제1 셔플러를 통해 상기 제1 승산기에 공급하여 상기 제1 승산기에서 상기 제3 큐로부터의 상기 제1 니블을 상기 제3 가중치의 제1 니블로 승산하는 단계와;
    제2 니블을 상기 제3 큐로부터 상기 제1 셔플러를 통해 상기 제2 승산기에 공급하여 상기 제2 승산기에서 상기 제3 큐로부터의 상기 제2 니블을 상기 제3 가중치의 제2 니블로 승산하는 단계와;
    제1 니블을 상기 제4 큐로부터 상기 제1 셔플러를 통해 상기 제3 승산기에 공급하여 상기 제3 승산기에서 상기 제4 큐로부터의 상기 제1 니블을 상기 제4 가중치의 제1 니블로 승산하는 단계와; 및
    제2 니블을 상기 제4 큐로부터 상기 제1 셔플러를 통해 상기 제2 승산기에 공급하여 상기 제2 승산기에서 상기 제4 큐로부터의 상기 제2 니블을 상기 제4 가중치의 제2 니블로 승산하는 단계를 포함하는
    연산 방법.
  12. 제11항에 있어서,
    상기 제1 큐의 제3 니블이 0이고, 상기 제2 큐의 제3 니블이 0이며, 상기 제3 큐의 제3 니블이 0이고, 및 상기 제4 큐의 제3 니블이 0이며, 그리고
    상기 방법이
    상기 제1 큐의 상기 제3 니블이 상기 제1 큐의 선단에 있을 때,
    상기 제1 큐의 제3 니블과, 상기 제2 큐의 제3 니블과, 상기 제3 큐의 제3 니블과, 및 상기 제4 큐의 제3 니블 중의 어느 것과도 승산을 수행하지 않고,
    상기 제1 큐와, 상기 제2 큐와, 상기 제3 큐와, 및 상기 제4 큐로 진행하는 단계를 더 포함하는 연산 방법.
  13. 제12항에 있어서,
    상기 제1 큐의 제5 니블과 상기 제1 큐의 제6 니블이 함께, 최상위 니블과 최하위 니블로 구성된 8비트 수를 저장하고, 상기 최상위 니블이 1이고, 상기 최하위 니블이 짝수이며, 그리고
    상기 방법이
    상기 제1 큐의 상기 제5 니블과 상기 제1 큐의 상기 제6 니블을 처리할 때:
    상기 최상위 니블을 0으로 대체하는 단계와;
    상기 최하위 니블을 우측으로 1비트만큼 시프팅시키고 그 최상위 니블을 1로 설정하는 단계와; 및
    상기 제1 큐의 상기 제5 니블과 상기 제1 큐의 상기 제6 니블이 함께, 그 지수가 1인 부동 소수점 수의 가수를 저장했음을 나타내는 플랙을 설정하는 단계를 더 포함하는 연산 방법.
  14. 제13항에 있어서,
    상기 제1 셔플러가 버터플라이 셔플러인 연산 방법.
  15. 제14항에 있어서,
    상기 제1 승산기와; 상기 제2 승산기와; 상기 제3 승산기와; 및 상기 제4 승산기가 제1 열에 배치되고, 그리고
    상기 제1 타일이:
    상기 활성화 함수 버퍼에 연결된 제2 셔플러와;
    제5 가중치 레지스터와 상기 제2 셔플러에 연결되는 제5 승산기와;
    제6 가중치 레지스터와 상기 제2 셔플러에 연결되는 제6 승산기와;
    제7 가중치 레지스터와 상기 제2 셔플러에 연결되는 제7 승산기와;
    제8 가중치 레지스터와 상기 제2 셔플러에 연결되는 제8 승산기를 더 포함하는 연산 방법.
  16. 제11항에 있어서,
    상기 제1 큐의 제5 니블과 상기 제1 큐의 제6 니블이 함께, 최상위 니블과 최하위 니블로 구성된 8비트 수를 저장하고, 상기 최상위 니블이 1이고, 상기 최하위 니블이 짝수이며, 그리고
    상기 방법이
    상기 제1 큐의 상기 제5 니블과 상기 제1 큐의 상기 제6 니블을 처리할 때:
    상기 최상위 니블을 0으로 대체하는 단계와;
    상기 최하위 니블을 우측으로 1비트만큼 시프팅시키고 그 최상위 니블을 1로 설정하는 단계와; 및
    상기 제1 큐의 상기 제5 니블과 상기 제1 큐의 상기 제6 니블이 함께, 그 지수가 1인 부동 소수점 수의 가수를 저장했음을 나타내는 플랙을 설정하는 단계를 더 포함하는 연산 방법.
  17. 제16항에 있어서,
    상기 제1 셔플러가 버터플라이 셔플러인 연산 방법.
  18. 제17항에 있어서,
    상기 제1 승산기와; 상기 제2 승산기와; 상기 제3 승산기와; 및 상기 제4 승산기가 제1 열에 배치되고, 그리고
    상기 제1 타일이:
    상기 활성화 함수 버퍼에 연결된 제2 셔플러와;
    제5 가중치 레지스터와 상기 제2 셔플러에 연결되는 제5 승산기와;
    제6 가중치 레지스터와 상기 제2 셔플러에 연결되는 제6 승산기와;
    제7 가중치 레지스터와 상기 제2 셔플러에 연결되는 제7 승산기와;
    제8 가중치 레지스터와 상기 제2 셔플러에 연결되는 제8 승산기를 더 포함하는 연산 방법.
  19. 제18항에 있어서,
    상기 제1 셔플러가 버터플라이 셔플러인 연산 방법.
  20. 처리 수단으로 연산하는 방법으로, 상기 처리 수단이:
    제1 타일과, 제2 타일과, 메모리와, 및 버스를 포함하고,
    상기 버스가 상기 메모리와, 상기 제1 타일 및 상기 제2 타일에 연결되며,
    상기 제1 타일이:
    제1 가중치를 저장하는 제1 가중치 레지스터로, 상기 제1 가중치가 0인 상기 제1 가중치 레지스터와;
    제3 가중치를 저장하는 제2 가중치 레지스터로, 상기 제3 가중치가 어느 니블도 0이 아닌 8비트 수인 상기 제2 가중치 레지스터와;
    제2 가중치를 저장하는 제3 가중치 레지스터로, 상기 제2 가중치가 0인 상기 제3 가중치 레지스터와;
    제4 가중치를 저장하는 제4 가중치 레지스터로, 상기 제4 가중치가 어느 니블도 0이 아닌 8비트 수인 상기 제4 가중치 레지스터와;
    활성화 함수 버퍼와;
    제1 셔플러와;
    상기 제1 가중치 레지스터에 연결된 제1 승산기와;
    상기 제2 가중치 레지스터에 연결된 제2 승산기와;
    상기 제3 가중치 레지스터에 연결된 제3 승산기와; 및
    상기 제4 가중치 레지스터에 연결된 제4 승산기를 포함하고,
    상기 활성화 함수 버퍼가: 제1 큐와, 제2 큐와, 제3 큐와, 및 제4 큐를 포함하도록 구성되며,
    상기 방법이:
    제1 니블을 상기 제3 큐로부터 상기 제1 셔플러를 통해 상기 제1 승산기에 공급하여 상기 제1 승산기에서 상기 제3 큐로부터의 상기 제1 니블을 상기 제3 가중치의 제1 니블로 승산하는 단계와;
    제2 니블을 상기 제3 큐로부터 상기 제1 셔플러를 통해 상기 제2 승산기에 공급하여 상기 제2 승산기에서 상기 제3 큐로부터의 상기 제2 니블을 상기 제3 가중치의 제2 니블로 승산하는 단계와;
    제1 니블을 상기 제4 큐로부터 상기 제1 셔플러를 통해 상기 제3 승산기에 공급하여 상기 제3 승산기에서 상기 제4 큐로부터의 상기 제1 니블을 상기 제4 가중치의 제1 니블로 승산하는 단계와; 및
    제2 니블을 상기 제4 큐로부터 상기 제1 셔플러를 통해 상기 제2 승산기에 공급하여 상기 제2 승산기에서 상기 제4 큐로부터의 상기 제2 니블을 상기 제4 가중치의 제2 니블로 승산하는 단계를 포함하는
    연산 방법.
KR1020200051584A 2019-05-01 2020-04-28 혼합-정밀도 앤피유 타일 KR20200128356A (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201962841606P 2019-05-01 2019-05-01
US62/841,606 2019-05-01
US16/847,504 US20200349106A1 (en) 2019-05-01 2020-04-13 Mixed-precision neural-processing unit tile
US16/847,504 2020-04-13

Publications (1)

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

Family

ID=73016499

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200051584A KR20200128356A (ko) 2019-05-01 2020-04-28 혼합-정밀도 앤피유 타일

Country Status (2)

Country Link
US (1) US20200349106A1 (ko)
KR (1) KR20200128356A (ko)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11842169B1 (en) * 2019-09-25 2023-12-12 Amazon Technologies, Inc. Systolic multiply delayed accumulate processor architecture
US11467806B2 (en) 2019-11-27 2022-10-11 Amazon Technologies, Inc. Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range
US11816446B2 (en) 2019-11-27 2023-11-14 Amazon Technologies, Inc. Systolic array component combining multiple integer and floating-point data types
US11308027B1 (en) 2020-06-29 2022-04-19 Amazon Technologies, Inc. Multiple accumulate busses in a systolic array
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
US11880682B2 (en) 2021-06-30 2024-01-23 Amazon Technologies, Inc. Systolic array with efficient input reduction and extended array performance
US20230031841A1 (en) * 2021-08-02 2023-02-02 Qualcomm Incorporated Folding column adder architecture for digital compute in memory
CN113705794B (zh) * 2021-09-08 2023-09-01 上海交通大学 一种基于动态激活位稀疏的神经网络加速器设计方法
CN117636945B (zh) * 2024-01-26 2024-04-09 安徽大学 5bit带符号位的同或与同或累加运算电路、CIM电路

Also Published As

Publication number Publication date
US20200349106A1 (en) 2020-11-05

Similar Documents

Publication Publication Date Title
KR20200128356A (ko) 혼합-정밀도 앤피유 타일
US11775801B2 (en) Neural processor
CA3090329C (en) Neural network accelerator
US11853867B2 (en) Task activating for accelerated deep learning
US11727257B2 (en) Data structure descriptors for deep learning acceleration
US7577799B1 (en) Asynchronous, independent and multiple process shared memory system in an adaptive computing architecture
US8321492B1 (en) System, method, and computer program product for converting a reduction algorithm to a segmented reduction algorithm
WO2021036729A1 (zh) 一种矩阵运算方法、运算装置以及处理器
CN114201287B (zh) 一种基于cpu+gpu异构平台协同处理数据的方法
EP4002093A1 (en) Processor for fine-grain sparse integer and floating-point operations
CN111126588B (zh) 集成电路芯片装置及相关产品
CN111091189B (zh) 集成电路芯片装置及相关产品
Choi et al. MLogNet: A logarithmic quantization-based accelerator for depthwise separable convolution
CN109684602B (zh) 一种批处理方法和装置及计算机可读存储介质
US20220114425A1 (en) Processor with outlier accommodation
US20220147313A1 (en) Processor for fine-grain sparse integer and floating-point operations
CN112579042B (zh) 计算装置及方法、芯片、电子设备及计算机可读存储介质
CN111610955B (zh) 一种数据饱和加打包处理部件、芯片及设备
CN116502028B (zh) 基于浮点数压缩技术的大规模fft实现方法及装置
CN118012628A (zh) 一种数据处理方法、装置和存储介质
CN114186188A (zh) 一种连续运算的浮点矩阵计算加速方法及装置
CN116997888A (zh) 矩阵乘法运算的矩阵的近似
CN115081604A (zh) 暂存Winograd权值的缓存、计算装置、集成电路装置及板卡
CN106020769A (zh) 浮点除法器以及浮点除法器操作方法

Legal Events

Date Code Title Description
A201 Request for examination