KR20190074195A - 뉴럴 프로세싱 가속기 - Google Patents

뉴럴 프로세싱 가속기 Download PDF

Info

Publication number
KR20190074195A
KR20190074195A KR1020180115294A KR20180115294A KR20190074195A KR 20190074195 A KR20190074195 A KR 20190074195A KR 1020180115294 A KR1020180115294 A KR 1020180115294A KR 20180115294 A KR20180115294 A KR 20180115294A KR 20190074195 A KR20190074195 A KR 20190074195A
Authority
KR
South Korea
Prior art keywords
data
processing element
circuits
node
node link
Prior art date
Application number
KR1020180115294A
Other languages
English (en)
Other versions
KR102649482B1 (ko
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 KR20190074195A publication Critical patent/KR20190074195A/ko
Application granted granted Critical
Publication of KR102649482B1 publication Critical patent/KR102649482B1/ko

Links

Images

Classifications

    • 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
    • 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
    • G06F15/17337Direct connection machines, e.g. completely connected computers, point to point communication networks
    • G06F15/17343Direct connection machines, e.g. completely connected computers, point to point communication networks wherein the interconnection is dynamically configurable, e.g. having loosely coupled nearest neighbor architecture
    • 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
    • G06F13/1673Details of memory controller using buffers
    • 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/15Correlation function computation including computation of convolution operations
    • 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
    • G06F7/533Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even
    • G06F7/5332Reduction of the number of iteration steps or stages, e.g. using the Booth algorithm, log-sum, odd-even by skipping over strings of zeroes or ones, e.g. using the Booth Algorithm
    • 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/544Methods 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 for evaluating functions by calculation
    • G06F7/5443Sum of products
    • 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/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • 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
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • 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
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • G06F9/3897Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros with adaptable data path
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • 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
    • 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
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C7/00Arrangements for writing information into, or reading information out from, a digital store
    • G11C7/10Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
    • G11C7/1006Data managing, e.g. manipulating data before writing or reading out, data bus switches or control circuits therefor

Landscapes

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

Abstract

본 발명의 실시 예들은 계산을 위한 시스템에 관한 것이다. 스크래치 메모리는 복수의 설정 가능한 노드들을 포함하는 통신 패브릭(fabric)에 의해 복수의 설정 가능한 프로세싱 소자들에 연결된다. 스크래치(scratch) 메모리는 데이터 워드(word)들의 복수의 스트림(stream)들을 밖으로 전송한다. 각각의 데이터 워드는 노드 또는 프로세싱 소자의 설정을 설정하기 위해 이용되는 설정 워드이거나 피연산자 또는 계산 결과를 전달하는 데이터 워드이다. 각각의 프로세싱 소자는 현재 설정에 따라 연산들을 수행하고 통신 패브릭으로 결과들을 반환한다. 통신 패브릭은 결과들을 스크래치 메모리로 전달한다.

Description

뉴럴 프로세싱 가속기{NEURAL PROCESSING ACCELERATOR}
본 발명은 프로세싱 시스템에 관한 것으로, 좀 더 상세하게는, 병렬 계산 수행을 위한 설정 가능한 시스템(configurable system)에 관한 것이다.
뉴럴 네트워크(neural network) 학습 및 추론을 위한 프로세싱 시스템과 관련된 기술은 비용이 많이 발생하고, 효율적인 희소성 연산들(sparse operations)과 같이, 뉴럴 네트워크 계산에 빈번하게 사용되는 다양한 텐서 계산(tensor calculation)에 쉽게 적용될 수 있는 유연성이 부족할 수 있다.
따라서, 뉴럴 네트워크 계산을 수행하기 위한 향상된 시스템이 필요하다.
본 발명은 상술된 기술적 과제를 해결하기 위한 것으로써, 뉴럴 네트워크 계산을 수행하기 위한 시스템 및 방법을 제공할 수 있다.
본 발명의 하나의 실시 예에 따르면, 계산을 위한 시스템이 제공된다. 상기 시스템은 복수의 프로세싱 소자 회로들, 복수의 노드(node) 회로들을 포함하는 통신 패브릭(fabric) 및 스크래치 메모리를 포함하고, 상기 스크래치 메모리는 상기 통신 패브릭을 통해 상기 프로세싱 소자 회로들과 연결되고, 하나 이상의 상기 프로세싱 소자 회로들은 설정 값을 저장하도록 구성된 설정 레지스터(register)를 포함하고, 하나 이상의 상기 프로세싱 소자 회로들은 두 개의 입력들에서 두 개의 각각의 데이터 워드들을 수신하고, 상기 두 개의 데이터 워드들 각각은 제어 부분 및 데이터 부분을 가지며, 상기 두 개의 데이터 워드들 중 하나가 데이터 워드를 프로세싱 소자 설정 워드로서 식별하는 제어 부분을 가지는 경우, 상기 설정 레지스터에 상기 프로세싱 소자 설정 워드의 상기 데이터 부분을 저장하고, 상기 두 개의 데이터 워드들이 모두 프로세싱 소자 설정 워드가 아닌 경우, 상기 설정 값에 따라 상기 두 개의 데이터 워드들에 대한 연산을 수행하도록 구성된다.
하나의 실시 예에 있어서, 상기 연산을 수행하는 것은 상기 설정 값이 원소 단위 곱셈을 명시하는 경우, 상기 두 개의 데이터 워드들 중 제1 데이터 워드의 상기 데이터 부분과 상기 두 개의 데이터 워드들 중 제2 데이터 워드의 상기 데이터 부분을 곱하는 것을 포함한다.
하나의 실시 예에 있어서, 상기 연산을 수행하는 것은 상기 설정 값이 원소 단위 덧셈을 명시하는 경우, 상기 두 개의 데이터 워드들 중 제1 데이터 워드의 상기 데이터 부분과 상기 두 개의 데이터 워드들 중 제2 데이터 워드의 상기 데이터 부분을 더하는 것을 포함한다.
하나의 실시 예에 있어서, 상기 연산을 수행하는 것은 상기 설정 값이 곱셈 및 누적을 명시하는 경우, 상기 두 개의 데이터 워드들 중 제1 데이터 워드의 상기 데이터 부분과 상기 두 개의 데이터 워드들 중 제2 데이터 워드의 상기 데이터 부분을 곱하여 곱을 형성하는 것 및 상기 곱을 누적기 값으로 더하는 것을 포함한다.
하나의 실시 예에 있어서, 상기 프로세싱 소자 회로들 중 하나는 5000 이하의 게이트(gate)들을 포함한다.
하나의 실시 예에 있어서, 상기 노드 회로들 중 하나는 2000 이하의 게이트들을 포함한다.
본 발명의 하나의 실시 예에 따르면, 계산을 위한 시스템이 제공된다. 상기 시스템은 복수의 프로세싱 소자 회로들, 복수의 노드(node) 회로들을 포함하는 통신 패브릭(fabric) 및 스크래치 메모리를 포함하고, 상기 스크래치 메모리는 상기 통신 패브릭을 통해 상기 프로세싱 소자 회로들과 연결되고, 하나 이상의 상기 노드 회로들은 복수의 노드 링크 회로들을 포함하고, 상기 복수의 노드 회로들 중 제1 노드 회로의 상기 복수의 노드 링크 회로들 중 제1 노드 링크 회로는 복수의 입력들 및 하나의 출력을 가지고, 상기 제1 노드 링크 회로는 데이터 레지스터 및 설정 값을 저장하도록 구성된 설정 레지스터를 포함하고, 상기 제1 노드 링크 회로는 상기 입력들에서 복수의 각각의 데이터 워드들을 수신하도록 구성되고, 상기 데이터 워드들 각각은 제어 부분 및 데이터 부분을 가지고, 상기 데이터 워드들 중 하나가 데이터 워드를 노드 링크 설정 워드로서 식별하는 제어 부분을 가지는 경우, 상기 설정 레지스터에 상기 노드 링크 설정 워드의 상기 데이터 부분을 저장하고, 상기 데이터 워드들이 모두 노드 링크 설정 워드가 아닌 경우, 상기 설정 값에 따라 상기 입력들 중 하나로부터 상기 데이터 레지스터로 데이터 워드를 전송하고, 및/또는 상기 입력들 중 하나로부터 상기 출력으로 데이터 워드를 전송하고, 및/또는 상기 데이터 레지스터로부터 상기 출력으로 데이터 워드를 전송한다.
하나의 실시 예에 있어서, 하나 이상의 상기 노드 회로들은 실질적으로 직교하는 방향들에서 노드 회로로부터 안쪽으로 향하는 네 개의 입력들 및 실질적으로 직교하는 방향들에서 상기 노드 회로로부터 바깥쪽으로 향하는 네 개의 출력들을 가진다.
하나의 실시 예에 있어서, 하나 이상의 상기 노드 회로들 중 하나의 노드 회로는 네 개의 노드 링크 회로들을 포함하고, 상기 네 개의 노드 링크 회로들 각각은 상기 노드 회로의 상기 네 개의 입력들에 각각 연결되는 네 개의 입력들 및 상기 노드 회로의 상기 상기 네 개의 출력들 중 각각의 하나에 연결되는 하나의 출력을 가진다.
하나의 실시 예에 있어서, 상기 프로세싱 소자 회로들 중 하나는 5000 이하의 게이트들을 포함한다.
하나의 실시 예에 있어서, 상기 노드 회로들 중 하나는 2000 이하의 게이트들을 포함한다.
하나의 실시 예에 있어서, 상기 스크래치 메모리는 메모리 뱅크(bank) 및 메모리 컨트롤러를 포함하고, 상기 메모리 컨트롤러는 복수의 행 캐시(cache)들을 포함하고, 하나 이상의 상기 행 캐시들은 상기 데이터 워드들과 동일한 비트 폭을 가지고, 상기 메모리 컨트롤러는 상기 메모리 뱅크로부터 상기 행 캐시들로 데이터를 전달하고, 상기 행 캐시들로부터 상기 메모리 뱅크로 데이터를 전달하도록 구성되고, 하나 이상의 상기 행 캐시들은 데이터 워드들의 시퀀스(sequence)를 밖으로 스트림(stream)하고, 데이터 워드들의 시퀀스를 안으로 스트림하도록 구성된다.
하나의 실시 예에 있어서, 상기 행 캐시들 중 하나는 이중 버퍼이다.
하나의 실시 예에 있어서, 각각의 데이터 워드 중 상기 제어 부분은 4 비트들의 폭을 가지고, 각각의 데이터 워드 중 상기 데이터 부분은 16 비트들의 폭을 가진다.
본 발명의 하나의 실시 예에 따르면 계산 방법이 제공된다. 상기 방법은 프로세싱 모듈을 설정하는 단계를 포함하고, 상기 프로세싱 모듈은 복수의 프로세싱 소자 회로들, 각각이 복수의 입력들 및 하나의 출력을 가지는 복수의 노드 링크 회로들을 포함하는 통신 패브릭(fabric) 및 스크래치 메모리를 포함하고, 상기 설정하는 단계는 상기 스크래치 메모리가 복수의 노드 링크 설정 워드들을 전송하는 단계, 상기 복수의 노드 링크 설정 워드들 각각은 상기 복수의 노드 링크 회로들 중 하나의 노드 링크 회로로 보내지고, 상기 복수의 노드 링크 회로들 중 제1 노드 링크 회로가 상기 제1 노드 링크 회로로 보내지는 데이터 워드를 수신하는 단계, 상기 제1 노드 링크 회로는 상기 복수의 프로세싱 소자 회로들 중 제1 프로세싱 소자 회로의 하나의 입력에 연결되는 하나의 출력을 가지고, 상기 제1 노드 링크 회로가 상기 제1 노드 링크 회로의 제1 입력에서 수신된 데이터 워드들을 상기 제1 노드 링크 회로의 상기 출력으로 전달하도록 야기하기 위해, 상기 제1 노드 링크 회로가 상기 제1 노드 링크 회로의 설정을 설정하는 단계, 상기 제1 노드 링크 회로 중 상기 제1 입력에 의해 프로세싱 소자 설정 워드를 수신하는 단계, 상기 제1 노드 링크 회로의 상기 제1 입력에 의해 상기 프로세싱 소자 설정 워드를 상기 제1 프로세싱 소자 회로로 전송하는 단계 및 상기 제1 프로세싱 소자 회로가 상기 제1 프로세싱 소자 회로의 설정 레지스터(register)에 상기 프로세싱 소자 설정 워드의 데이터 부분을 저장하는 단계를 포함한다.
하나의 실시 예에 있어서, 상기 방법은 복수의 곱들을 계산하는 단계를 더 포함하고, 상기 계산하는 단계는 상기 스크래치 메모리가 제1 복수의 노드 링크 회로들을 통해 확장하는 제1 경로를 통해 피연산자들의 제1 시퀀스(sequence)를 상기 제1 프로세싱 소자 회로로 전송하는 단계, 상기 스크래치 메모리가 제2 복수의 노드 링크 회로들을 통해 확장하는 제2 경로를 통해 피연산자들의 제2 시퀀스를 상기 제1 프로세싱 소자 회로로 전송하는 단계, 상기 제1 프로세싱 소자가 쌍으로 된 곱들의 시퀀스를 계산하는 단계를 포함하고, 각각의 쌍으로 된 곱은 피연산자들의 상기 제1 시퀀스의 하나의 피연산자 및 피연산자들의 상기 제2 시퀀스의 대응하는 하나의 피연산자의 곱이다.
하나의 실시 예에 있어서, 상기 방법은 밀집성 표현(dense representation)으로부터 희소성 표현(sparse representation)으로 제1 벡터를 변환하는 단계를 더 포함하고, 상기 제1 벡터는 0 이 아닌 값을 가지는 제1 원소를 포함하고, 상기 제1 원소 바로 다음에는 0 의 값을 가지는 제2 원소가 뒤따르고, 상기 변환하는 단계는 상기 제1 원소를 제1 2-튜플(tuple)로 교체하는 단계를 포함하고, 상기 제1 2-튜플은 상기 제1 벡터의 상기 제1 원소와 동일한 제1 원소 및 1 보다 큰 제2 원소를 가진다.
하나의 실시 예에 있어서, 상기 방법은 제2 벡터의 희소성 표현을 상기 제1 벡터의 상기 희소성 표현과 정렬시키는 단계를 더 포함하고, 상기 정렬시키는 단계는 상기 제2 벡터의 상기 희소성 표현으로부터 상기 제1 벡터의 상기 제2 원소에 대응하는 2-튜플을 삭제하는 단계 및 상기 제2 벡터의 제1 2-튜플의 제2 원소의 값을 증가시키는 단계를 포함하고, 상기 제2 벡터의 상기 제1 2-튜플은 상기 삭제된 2-튜플 바로 앞에 온다.
하나의 실시 예에 있어서, 상기 방법은 상기 복수의 프로세싱 소자 회로들 중 하나의 프로세싱 소자 회로가 상기 제1 벡터의 상기 제1 2-튜플의 상기 제1 원소를 상기 제2 벡터의 상기 제1 2-튜플의 제1 원소와 곱하여 결과 2-튜플의 제1 원소를 형성하는 단계 및 상기 결과 2-튜플의 제2 원소를 상기 제1 벡터의 상기 제1 2-튜플의 상기 제2 원소와 동일하게 설정하는 단계를 더 포함한다.
하나의 실시 예에 있어서, 상기 프로세싱 소자 회로들 중 하나는 5000 이하의 게이트들을 포함하고, 상기 노드 링크 회로들 중 하나는 500 이하의 게이트들을 포함한다.
본 발명에 따른 뉴럴 프로세싱 계산을 위한 시스템은 프로세싱에 따른 전력 소비를 줄일 수 있다.
또한, 본 발명의 실시 예에 따르면 뉴럴 프로세싱 계산을 위한 시스템의 면적이 줄어들어 비용이 감소될 수 있다.
도 1은 본 발명의 하나의 실시 예에 따른 계산을 위한 시스템의 레이아웃 개략도이다.
도 2a는 본 발명의 하나의 실시 예에 따른 계산을 위한 데이터 흐름도이다.
도 2b는 본 발명의 하나의 실시 예에 따른 계산을 위한 데이터 흐름도이다.
도 2c는 본 발명의 하나의 실시 예에 따른 계산을 위한 데이터 흐름도이다.
도 2d는 본 발명의 하나의 실시 예에 따른 계산을 위한 데이터 흐름도이다.
도 2e는 본 발명의 하나의 실시 예에 따른 계산을 위한 데이터 흐름도이다.
도 2f는 본 발명의 하나의 실시 예에 따른 계산을 위한 데이터 흐름도이다.
도 2g는 본 발명의 하나의 실시 예에 따른 계산을 위한 데이터 흐름도이다.
도 2h는 본 발명의 하나의 실시 예에 따른 계산을 위한 데이터 흐름도이다.
도 2i는 본 발명의 하나의 실시 예에 따른 계산을 위한 데이터 흐름도이다.
도 3a는 본 발명의 하나의 실시 예에 따른 계산을 위한 데이터 흐름도이다.
도 3b는 본 발명의 하나의 실시 예에 따른 계산을 위한 데이터 흐름도이다.
도 3c는 본 발명의 하나의 실시 예에 따른 계산을 위한 데이터 흐름도이다.
도 3d는 본 발명의 하나의 실시 예에 따른 계산을 위한 데이터 흐름도이다.
도 3e는 본 발명의 하나의 실시 예에 따른 계산을 위한 데이터 흐름도이다.
도 4a는 본 발명의 하나의 실시 예에 따른 노드 링크의 블록도이다.
도 4b는 본 발명의 하나의 실시 예에 따른 노드 링크의 블록도이다.
도 4c는 본 발명의 하나의 실시 예에 따른 노드 링크의 블록도이다.
도 5a는 본 발명의 하나의 실시 예에 따른 계산을 위한 시스템의 부분 블록도이다.
도 5b는 본 발명의 하나의 실시 예에 따른 재설정 동작을 위한 데이터 흐름도이다.
도 6a는 본 발명의 하나의 실시 예에 따른 프로세싱 소자의 블록도이다.
도 6b는 본 발명의 하나의 실시 예에 따른 프로세싱 소자의 블록도이다.
도 7a는 본 발명의 하나의 실시 예에 따른 스크래치 메모리의 블록도이다.
도 7b는 본 발명의 하나의 실시 예에 따른 스크래치 메모리의 블록도이다.
도 7c는 본 발명의 하나의 실시 예에 따른 스크래치 메모리의 블록도이다.
도 7d는 본 발명의 하나의 실시 예에 따른 스크래치 메모리의 블록도이다.
도 7e는 본 발명의 하나의 실시 예에 따른 스크래치 메모리의 블록도이다.
첨부된 도면과 관련하여 아래에 개시된 상세한 설명은 본 발명에 따라 제공되는 뉴럴 프로세싱 가속기의 실시 예들의 설명으로서 의도되고, 본 발명이 구성되거나 활용될 수 있는 유일한 형태를 나타내는 것으로 의도되지 않는다. 설명은 도시된 실시 예들과 관련하여 본 발명의 특징들을 개시한다. 그러나, 동일한 또는 동등한 기능들 및 구조들은 발명의 사상 및 범위 내에 포함되도록 의도된 다른 실시 예들에 의해 달성될 수 있다. 본 명세서에서 나타낸 바와 같이, 동일한 요소 번호는 동일한 요소 또는 특징을 나타내는 것으로 의도된다.
도 1을 참조하면, 몇몇 실시 예에 있어서, 뉴럴 프로세싱 시스템은 스크래치(scratch) 메모리(115) 및 복수의 프로세싱 소자(PE; processing element)들(120)을 각각 포함하는 복수의 프로세싱 모듈들(110)을 포함하고, 프로세싱 소자들(120)은 서로 연결되고 통신 패브릭(fabric)(125)에 의해 스크래치 메모리에 연결된다. 동작 시, 스크래치 메모리(115)는 통신 패브릭(125)을 통해 프로세싱 소자들(120)로 피연산자(operand)를 제공하고, 프로세싱 소자들(120)은 결과들을 생성하기 위해 피연산자를 처리하고, 통신 패브릭(125)을 통해 결과들이 스크래치 메모리(115)(또는 다른 스크래치 메모리(115))로 피드백된다. 통신 패브릭(125)은, 아래에 더 상세하게 설명된 바와 같이, 복수의 상호 연결된 노드(interconnected node)들을 포함하고, 노드들 각각은 복수의 입력들 및 출력들을 가지고, 임의의 입력들로부터 임의의 출력들까지 데이터를 직접 전달하도록 프로그램될 수 있다. 이에 따라, 통신 패브릭(125)은 스크래치 메모리(115) 및 프로세싱 소자들(120) 사이 및 프로세싱 소자들(120) 중 임의의 하나와 다른 프로세싱 소자(120) 사이에 데이터 경로를 구축하도록 프로그램될 수 있다. 도 1은 비율에 따르지 않더라도, 몇몇 실시 예들은, 통신 패브릭(125)을 통해, 프로세싱 소자들(120) 사이 및 스크래치 메모리(115)와 프로세싱 소자들(120) 사이에 상대적으로 짧은 통신 경로를 제공하도록 도 1의 레이아웃(layout)을 이용한다.
도 1에 도시된 뉴럴 프로세싱 시스템은, 도 2a 내지 도 2i, 도 3a 내지 도 3e를 참조하여 아래에 더 상세하게 설명된 바와 같이, 다양한 프로세싱 작업들을 효율적으로 수행하는데 적합할 수 있다. 도 2a는 원소 단위(element-wise) 벡터 연산을 어떻게 수행되는지를 보여준다. 아래의 수학식 1과 같이 원소 단위 벡터 곱이 수행될 수 있다.
Figure pat00001
몇몇 실시 예들에 있어서, 모듈 또는 전체 뉴럴 프로세싱 시스템은 단일 클럭 도메인(clock domain)을 가지는 동기식 디지털 회로이다. 메모리 A 밖으로, 클럭 주기당 하나씩 제1 피연산자의 스트림(stream)이 제공되고, 메모리 B 밖으로, 클럭 주기당 하나씩 제2 피연산자의 스트림이 제공된다. 피연산자의 각각의 스트림은 일반적으로 다른 전달 지연을 가지고 프로세싱 소자(120)로 전달된다. 따라서, 처리되도록 스케줄된 시간 이전에 각각의 피연산자가 전송된다. 도 2a의 표기법에 있어서, 예를 들어, 첫 번째 두 개의 피연산자들은 시간(t0)에서 프로세싱 소자(120)에 의해 수신되도록 스케줄된다. 시간(t0)에서 프로세싱 소자(120)에 의해 수신되기 위해, 메모리 A 로부터의 제1 피연산자는 시간(t_dA)에 전송되고, 여기서 아래 첨자는 클럭 주기에서의 시간을 나타낸다. 예를 들어, 메모리 A 로부터의 첫 번째 피연산자는 dA 클럭 주기에 의해 시간(t0) 이전에 전송되고, 여기서 dA 는 통신 패브릭(125)이 메모리 A 로부터 프로세싱 소자(120)로 피연산자를 전달하기 위해 사용하는 시간이다. 유사하게, 시간(t0)에서 프로세싱 소자(120)에 의해 수신되기 위해, 메모리 B 로부터의 첫 번째 피연산자는 시간(t_dB)에 전송된다. 예를 들어, 메모리 B 로부터의 첫 번째 피연산자는 dB 클락 주기에 의해 시간(t0) 이전에 전송되고, 여기서 dB 는 통신 패브릭(125)이 메모리 B 로부터 프로세싱 소자(120)로 피연산자를 전달하기 위해 사용하는 시간이다. 전달 지연들(dA 및 dB)은 동일하거나 다를 수 있다. 각각의 전달 지연은 데이터가 통신 패브릭(125)을 통해 전달되는 경로 및 경로를 따라 존재하는 노드들의 설정(노드들 각각은 설정 가능한 지연을 가질 수 있음)에 따라 달라질 수 있다. 나머지 피연산자는, 도시된 바와 같이, 클럭 주기당 메모리당 하나씩 메모리 A 및 메모리 B 로부터 나중에 전송될 수 있다. 원소 단위 덧셈 또는 뺄셈과 같은 다른 원소 단위 연산들은, 아래에 더 상세하게 설명된 바와 같이, 적절한 연산을 수행하기 위해 설정된 프로세싱 소자(120)을 이용하여 동일한 방식으로 수행될 수 있다.
프로세싱 소자(120)는 데이터를 처리할 수 있고 결과(이는 4 개의 곱 또는 4개의 원소들의 4-원소(원소 단위) 곱 벡터로 고려될 수 있다)를 제3의 메모리인 메모리 C로 전송할 수 있다. 프로세싱 지연은 tp(즉, p 클럭 주기)로서 도 2a에서 식별된다.
메모리 A, 메모리 B 및 메모리 C 는 모두 하나의 스크래치 메모리(115)(즉, 하나의 프로세싱 모듈(110) 중 스크래치 메모리)의 부분일 수 있거나 메모리 A, 메모리 B 및 메모리 C 중 하나 이상이 다른 스크래치 메모리(115)의 부분일 수 있다.
도 2b는 원소 단위 매트릭스(matrix) 연산이 어떻게 수행되는지 보여준다. 아래의 수학식 2와 같이 원소 단위 매트릭스 곱이 수행될 수 있다.
Figure pat00002
제1 피연산자의 3 개의 병렬 스트림(각각은 첫 번째 피승수(multiplicand)의 하나의 행과 대응됨)은 메모리 A 로부터 제공되고 제2 피연산자의 3 개의 병렬 스트림(각각은 두 번째 피승수의 하나의 행과 대응됨)은 메모리 B 로부터 제공된다. 첫 번째 피승수의 첫 번째 행과 두 번째 피승수의 첫 번째 행의 원소 단위 곱이 제1 프로세싱 소자(120a)에 의해 한 번에 한 쌍의 원소들로 형성된다. 유사하게, 첫 번째 피승수의 두 번째 및 세 번째 행들과 두 번째 피승수의 두 번째 및 세 번째 행들의 원소 단위 곱들이 각각 제2 프로세싱 소자(120b) 및 제3 프로세싱 소자(120c)에 의해 한 번에 한 쌍의 원소들로 형성된다. 첫 번째 피승수의 하나의 행과 두 번째 피승수의 대응하는 하나의 행의 각각의 원소 단위 곱은 도 2a의 각각의 회로를 이용하여 형성된다. 이에 따라, 원소 단위 곱이 세 개의 인자에 의해 병렬화되는 방식으로 수행된다. 세 개의 벡터 연산들(곱해질 행들의 세 쌍들과 대응됨)이 병렬로 수행된다. 다른 실시 예들에 있어서, 동일한 연산이 직렬로 수행될 수 있고(메모리 A 가 단일 스트림에서 제1 피연산자의 12 개의 원소들을 한 번에 하나씩 전송하고, 메모리 B 가 단일 스트림에서 제2 피연산자의 12 개의 원소들을 한 번에 하나씩 전송함으로써), 또는 동일한 연산이 병렬화의 다른 방식으로 수행될 수 있다(예를 들어, 4 개의 프로세싱 소자들(120) 각각이 첫 번째 피승수의 각각의 열과 두 번째 피승수의 대응하는 열의 원소 단위 곱을 형성하는 것과 관련된 세 개의 곱셈을 수행함으로써 4 개의 프로세싱 소자들(120)에 의해 연산이 병렬화됨).
도 2c는 벡터 내적이 어떻게 수행되는지 보여준다. 예를 들어, 벡터 내적은 아래의 수학식 3과 같이 수행될 수 있다.
Figure pat00003
원소 단위 벡터 곱의 경우와 같이, 제1 피연산자의 스트림이 메모리 A 로부터 제공되고 제2 피연산자의 스트림이 메모리 B 로부터 제공된다. 프로세싱 소자(120)는 내적을 형성하기 위해 원소 단위 곱들을 누적하고, 결과를 제3의 메모리인 메모리 C 로 전송한다. 프로세싱 소자(120)의 누적기는 프로세싱 소자(120)가 설정 커맨드를 수신하는 경우 초기화될 수 있다(아래에 더 상세하게 설명된 바와 같이).
도 2d는 매트릭스 곱의 대각(diagonal) 원소들로 구성되는 벡터가 어떻게 형성되는지를 보여준다. 예를 들어, 아래의 수학식 4와 같이 매트릭스 곱의 대각 원소들이 형성될 수 있다.
Figure pat00004
결과 벡터의 원소들 각각은 첫 번째 입력 매트릭스(첫 번째 피승수)의 행과 두 번째 입력 매트릭스(두 번째 피승수)의 열의 내적이다. 이러한 내적들 각각은 도 2c를 참조하여 위에서 설명한 방식으로 계산된다(첫 번째 내적은 제1 프로세싱 소자(120a)에 의해 계산되고, 두 번째 내적은 제2 프로세싱 소자(120b)에 의해 계산되고, 세 번째 내적은 제3 프로세싱 소자(120c)에 의해 계산됨). 매트릭스 곱의 원소들 각각은 첫 번째 피승수의 하나의 행과 두 번째 피승수의 하나의 열의 내적이기 때문에, 전체 매트릭스 곱(도 2d에서와 같이 산출된 대각 원소들 및 비대각(off-diagonal) 원소들을 포함)은 유사한 방식으로 계산될 수 있다.
도 2e는 벡터 내적이 어떻게 수행되는지 보여준다. 예를 들어, 누적기가 없는 프로세싱 소자들(120)을 이용하여 아래의 수학식 5와 같은 벡터 내적이 형성될 수 있다.
Figure pat00005
제1 프로세싱 소자(120a)는 원소 단위 곱을 수행하고, 제2 프로세싱 소자(120b)는 누적기로서 동작한다.
도 2f는 상수 커널(kernel)로 1 차원 컨볼루션(convolution)이 어떻게 수행되는지 보여준다. 예를 들어, 1 차원 컨볼루션은 아래의 수학식 6과 같이 수행될 수 있다.
Figure pat00006
커널([1 2])의 원소들은, 예를 들어, 메모리 B 에 의해, 제1 프로세싱 소자(120a) 및 제2 프로세싱 소자(120b)로 미리 프로그램된다(또는 아래에 더 상세하게 설명된 바와 같이, 이러한 2 개의 프로세싱 소자들(120) 각각의 두 번째 입력에 연결된 설정 패브릭(configuration fabric)의 2 개의 각각의 노드들로 프로그램됨). 피연산자의 스트림(이 경우, 값들[a b c d])은 메모리 A 로부터 제공되고 제1 프로세싱 소자(120a) 및 제2 프로세싱 소자(120b) 모두로 브로드캐스트(broadcast)된다(아래에 더 상세하게 설명된 바와 같이, 통신 패브릭(125)의 적절한 사전 설정의 결과로서). 제1 프로세싱 소자(120a)는 피연산자의 스트림의 각각의 원소를 커널의 첫 번째 원소(이 예시에서, 1)와 곱하고 제2 프로세싱 소자(120b)는 피연산자의 스트림의 각각의 원소를 커널의 두 번째 원소(이 예시에서, 2)와 곱한다. 곱들의 스트림은 제3 프로세싱 소자(120c)로 전송된다. 곱들의 두 번째 스트림(제2 프로세싱 소자(120b)에 의해 생성된)은 곱들(a·1 및 b·2)이 동시에 제3 프로세싱 소자(120c)에 도착하도록 한 클럭 주기만큼 지연되어 전송된다. 통신 패브릭(125) 또는 제3 프로세싱 소자(120c)는, 아래에 더 상세하게 설명된 바와 같이, 곱(a·2)이 통신 패브릭(125) 또는 제3 프로세싱 소자(120c)에 의해 버려지도록 곱들(a·1 및 b·2)의 도달 이전의 클럭 주기 동안 재설정될 수 있다. 그렇지 않으면 이전의 클럭 주기에서 곱(a·2)이 제3 프로세싱 소자(120c)에 의해 수신되어 처리된다. 곱(d·1)이 유사한 방식으로 버려질 수 있다. 제3 프로세싱 소자(120c)는 도시된 바와 같이 곱들(버려진 곱들을 제외하고)을 쌍으로 합하고 메모리 C 로 합들을 전송한다.
도 2g는 상수 커널로 2 차원 컨볼루션이 어떻게 수행되는지 보여준다. 예를 들어, 2 차원 컨볼루션은 아래의 수학식 7과 같이 수행될 수 있다.
Figure pat00007
커널의 첫 번째 행의 원소들은, 예를 들어, 메모리 B 에 의해, 제1 프로세싱 소자(120a) 및 제2 프로세싱 소자(120b)로 미리 프로그램된다. 1 차원 컨볼루션의 경우과 같이, 피연산자의 스트림(이 경우, 값들[a b c d])은 메모리 A 로부터 제공되고 제1 프로세싱 소자(120a) 및 제2 프로세싱 소자(120b) 모두로 브로드캐스트된다(아래에 더 상세하게 설명된 바와 같이, 통신 패브릭(125)의 적절한 사전 설정의 결과로서). 제1 프로세싱 소자(120a)는 피연산자의 스트림의 각각의 원소를 커널의 첫 번째 원소(이 예시에서, 1)와 곱하고 제2 프로세싱 소자(120b)는 피연산자의 스트림의 각각의 원소를 커널의 두 번째 원소(이 예시에서, 2)와 곱한다. 곱들의 스트림은 제3 프로세싱 소자(120c)로 전송된다. 곱들의 두 번째 스트림(제2 프로세싱 소자(120b)에 의해 생성된)은 곱들(a·1 및 b·2)이 동시에 제3 프로세싱 소자(120c)에 도착하도록 한 클럭 주기만큼 지연되어 전송된다. 컨볼루션의 일부분이 아닌 곱들은 버려지고(하나 이상의 프로세싱 소자(120) 및 통신 패브릭(125)을 재설정함으로써), 제3 프로세싱 소자(120c)는 도시된 바와 같이 곱들(버려진 곱들을 제외하고)을 쌍으로 합한다. 제4 프로세싱 소자(120d), 제5 프로세싱 소자(120e) 및 제6 프로세싱 소자(120f)는 같이 유사하게 입력 매트릭스의 두 번째 행과 커널의 두 번째 행의 곱들의 합들을 형성한다. 제3 프로세싱 소자(120c) 및 제6 프로세싱 소자(120f)에 의해 생성된 합들은 제7 프로세싱 소자(120g)로 제공되고, 제7 프로세싱 소자(120g)는 도시된 바와 같이, 최종 컨볼루션을 형성한다.
도 2h는 희소성 상수 커널로 2 차원 컨볼루션이 어떻게 수행되는지 보여준다. 예를 들어, 2 차원 컨볼루션은 아래의 수학식 8과 같이 수행될 수 있다.
Figure pat00008
이 컨볼루션은 도 2g에 대응하는 컨볼루션과 다르다. 이 컨볼루션에서는, 상수 커널(도 2g의 계산에 있어서, 상수 커널은 0 이 아니고 제5 프로세싱 소자(120e)로 프로그램됨)의 두 번째 행의 두 번째 원소가 0 이고, 따라서, 제5 프로세싱 소자(120e)가 존재하면, 제5 프로세싱 소자(120e)는 오직 0 을 곱할 수 있다. 따라서, 제5 프로세싱 소자(120e)는 도 2h의 구성으로부터 제외된다. 제6 프로세싱 소자(120f)는 또한 제외된다. 도 2g의 실시 예에 있어서, 제6 프로세싱 소자(120f)는 입력 매트릭스의 두 번째 행과 커널의 두 번째 행의 곱들의 합들을 쌍으로 형성한다. 도 2h의 실시 예에 있어서, 항들의 각각의 쌍의 하나의 항은 0 이고, 이에 따라 다른 항(다른 항은 제3 프로세싱 소자(120c)에 의해 생성됨)이 대신에 이용된다.
도 2i는 상수 커널로 1 X 1 1 차원 컨볼루션이 어떻게 수행되는지 보여준다. 예를 들어, 1 X 1 1 차원 컨볼루션은 아래의 수학식 9와 같이 수행될 수 있다.
Figure pat00009
도 2f의 계산의 경우와 같이, 제1 프로세싱 소자(120a) 및 제2 프로세싱 소자(120b)는 각각의 상수 항들에 의한 곱셈들을 수행하기 위해 미리 로드되고, 제1 프로세싱 소자(120a) 및 제2 프로세싱 소자(120b) 각각은 수신하는 각각의 입력 값을 각각의 상수와 곱한다. 곱들은 제3 프로세싱 소자(120c)에 의해 쌍 단위로 합해진다.
도 3a 내지 도 3e는 숫자들 시퀀스(sequence) 내의 하나 이상의 0 을 나타내는데 이용될 수 있는 "희소성 표현(sparse representation)" 형식을 이용하여 희소성 벡터, 매트릭스 및 다른 텐서가 어떻게 효율적인 방식으로 처리될 수 있는지를 보여주는 예시이다. 몇몇 실시 예들에 있어서, 0 원소들을 생략 및 각각의 0 이 아닌 숫자를 2-튜플(tuple)로서 나타냄으로써 희소성 표현이 달성될 수 있다. 2-튜플의 첫 번째 원소는 값이고, 두 번째 원소는 주소 증가량(address increment)이다. 벡터의 일반적인 또는 "밀집성(dense)" 표현에서 다음의 원소가 0 이 아니면 주소 증가량은 1 이고, 그렇지 않으면 주소 증가량은 1 더하기 현재 원소 다음의 0 의 개수이다. 이는 표 1 의 두 예시에서 보여진다. 예를 들어, 제1 벡터는 4 개의 0 이 아닌 원소들([a, b, c, d])를 가진다. 원소들 모두 0 이 아니기 때문에, 이 벡터의 희소성 표현의 각각의 2-튜플의 첫 번째 원소는 밀집성 표현(dense representation)의 대응하는 원소의 값과 동일하고, 각각의 2-튜플의 두 번째 원소는 1 이다. 제2 벡터는 4 개의 원소를 가지고, [1, 2, 0, 4] 로서 밀집성 표현으로 쓰여진다(즉, 세 번째 원소는 0 임). 제2 벡터의 희소성 표현에 있어서, 0 은 생략되고, 이에 따라 희소성 표현은 오직 3 개의 2-튜플들을 가진다. 0 값 이전의 값에 대한 2-튜플은 이 원소 이후에 0 이 생략되었음을 나타내도록 2 의 증가량을 가진다.
밀집성(Dense) 희소성(Sparse)
[a, b, c, d] [{a, 1},{b,1},{c,1},{d,1}]
[1, 2, 0, 4] [{1, 1},{2,2},{4,1}]
도 3a는 프로세싱 소자(120)에 의해 희소성 형식이 수신된 경우, 표 1의 2 개의 벡터들이 어떻게 곱해질 수 있는지를 나타낸다. 각각의 클럭 주기에서, 프로세싱 소자(120)의 2 개의 입력들에서 수신된 2 개의 2-튜플들의 두 번째 원소들은 동일한 값을 가지고, "결과 2-튜플"(결과를 저장하는 2-튜플로서, 결과 2-튜플의 첫 번째 원소는 입력 2-튜플들의 첫 번째 원소들의 곱과 동일함)의 두 번째 원소에 대해 두 번째 원소들의 값이 이용된다. 프로세싱 소자(120)는 3 개의 연산들에서 2 개의 4-원소 벡터들(2 개 모두 희소성 표현으로 제공되고, 2 개 중 하나는 0 값을 가지는 하나의 원소를 포함함)의 원소 단위 곱을 계산할 수 있다(3 개의 2-튜플들에 의해 희소성 표현으로 나타내지는 4-원소 곱 벡터를 형성하기 위해).밀집성 표현으로부터 희소성 표현으로 변환하는 것은 스크래치 메모리(115)의 메모리 컨트롤러의 적합한 회로들에 의해 수행될 수 있다. 하나의 예시로서, 도 3b에서 희소성 표현으로 변환하는 것이 도시된다. 벡터([a, b, c, d])의 밀집성 표현은 메모리 A 로부터 제공된다. 이 벡터는 0 원소를 포함하지 않기 때문에, 이 벡터에 대해, 희소성 표현으로의 변환은 각각의 원소들을 첫 번째 원소가 벡터의 밀집성 표현의 대응하는 원소와 동일한 2-튜플로 변환하는 효과를 가지고, 두 번째 원소(주소 증가량)는 1 이다. 벡터([1, 2, 0, 4])는 메모리 B 로부터 제공된다. 이 벡터는, 0 원소가 두 번째 원소 다음에 삭제되는 신호에 대하여, 세 번째 위치에서 0 원소를 포함하기 때문에, 두 번째 2-튜플은 2 인 두 번째 원소(주소 증가량)를 가진다. 희소성 표현에 대한 변환 결과들은, 도시된 바와 같이, 다른 메모리인 메모리 C에 저장될 수 있다. 희소성 표현으로부터 밀집성 표현으로의 변환은, 도 3c에 도시된 바와 같이, 유사한 방식으로, 스크래치 메모리(115)의 메모리 컨트롤러의 적합한 회로들에 의해 수행될 수 있다. 희소성 표현, 벡터([a, b, c, d])의 {a, 1} {b, 1} {c, 1} {d, 1}은 메모리 A 로부터 제공된다. 이 벡터는 0 원소들을 포함하지 않으므로(그리고, 이에 따라 각각의 주소 증가량은 1 이므로), 밀집성 표현으로의 변환은, 이 벡터에 대하여, 원소들의 각각의 2-튜플을 밀집성 표현의 원소가 대응하는 2-튜플의 첫 번째 원소와 동일한 밀집성 표현의 원소로 변환하는 효과를 가진다. 희소성 표현, 벡터([1, 2, 0, 4])의 {1, 1,} {2, 2} {4, 1}은 메모리 B 로부터 제공된다. 이 벡터는 두 번째 2-튜플의 두 번째 원소에 있어서 2 의 주소 증가량을 가지므로, 두 번째 2-튜플은 밀집성 표현의 2 개의 원소들(2 및 0)로 확장된다. 다른 2 개의 2-튜플들 각각에 대하여 주소 증가량은 1 이고, 따라서 2-튜플의 첫 번째 원소는 벡터의 밀집성 표현의 대응하는 원소 값이 된다. 대응하는 원소 값은 [1, 2, 0, 4] 이다. 밀집성 표현으로의 변환 결과는, 도시된 바와 같이, 다른 메모리인 메모리 C 에 저장될 수 있다.
도 3d에 도시된 스트림 정렬 전처리 단계는 연산을 수행하기 전에 희소성 표현의 2 개의 벡터들의 원소들을 정렬하기 위해 이용될 수 있다. 연산이 곱셈이면(예를 들어, 원소 단위 곱셈 또는 내적), 다른 벡터가 0 값을 가지는 것에 대하여 벡터의 각각의 0 이 아닌 원소는 삭제될 수 있다. 또는, 동일하게, 2-튜플은 제거될 수 있고 이전 2-튜플 주소 증가량은 1 만큼 증가된다. 도 3d의 예시에 있어서, 스트림 정렬 단계는 첫 번째 벡터로부터 세 번째 2-튜플을 삭제하고, 이전 2-튜플의 주소 증가량을 1 만큼({b, 1} 으로부터 {b, 2}로) 증가시키는 효과를 가진다. 수행되는 연산이 덧셈이거나 뺄셈이면, 다른 벡터가 누락되지 않은 2-튜플을 가지는 것에 대하여 벡터의 각각의 누락된 2-튜플은 2-튜플의 첫 번째 원소가 0 으로 회복될 수 있다(그리고, 회복된 2-튜플 이전의 2-튜플의 주소 증가량은 1 만큼 감소될 수 있음).
도 3e는 희소성 표현의 2 개의 정렬된 스트림 벡터들에 수행되는 원소 단위 곱셈을 나타낸다. 프로세싱 소자(120)는 (i) 대응하는 결과 2-튜플의 첫 번째 원소를 형성하기 위해, 수신된 2-튜플들의 각 쌍의 첫 번째 원소들에 대하여 연산(곱셈)을 수행하고, (ii) 주소 증가량(주소 증가량은, 스트림 정렬 프로세스의 결과로서, 입력 2-튜플들 모두에 대하여 동일함)을 결과 2-튜플의 주소 증가량 원소로 복사한다.
통신 패브릭(125)은 복수의 노드들, 또는 4 개의 노드 링크(link)들을 각각 포함하는 "노드 회로들", 또는 "노드 링크 회로들"을 포함할 수 있다. 각각의 노드는 본 명세서에서 북쪽, 남쪽, 동쪽 및 서쪽으로 지칭되는 4 개의 실질적으로 직교하는 방향들로부터 4 개의 입력들 및 동일한 방향들의 4 개의 출력들을 가질 수 있다. 도 4a는 하나의 실시 예에서 노드 링크(405)를 보여준다. 노드 링크는 노드의 4 개의 입력단에 각각 연결된 4 개의 입력들 및 노드의 4 개의 출력단 중 하나에 연결된 하나의 출력을 가질 수 있다. 각각의 노드 링크는 설정 레지스터(410)를 포함하고, 설정 레지스터(410)의 내용은 어떠한 입력이 출력과 연결되는지, 노드 링크의 수신된 데이터를 지연시킬지 여부, 또는 상수로서 가장 최근에 수신된 데이터를 저장할지 여부를 제어한다. 노드 링크는 4-입력 멀티플렉서(MUX, multiplexer)(415), 데이터 레지스터(RG)(420) 및 2-입력 멀티플렉서(425)를 포함한다. 설정 레지스터의 2 개의 비트들은 4-입력 멀티플렉서(415)를 제어할 수 있고, 2 개의 비트들은 4 개의 입력들 중 어느 것이 노드 링크(405)의 출력과 연결되는지를 선택한다. 설정 레지스터의 하나의 비트는 데이터 레지스터(420)의 클럭 활성화(enable) 입력을 제어할 수 있고, 이에 따라(비활성화된 클럭으로) 상수를 저장(마지막 주기 동안 클럭 입력이 활성화되고 마지막 주기에서 저장됨)하기 위해 이용될 수 있다. 2-입력 멀티플렉서(425)(설정 레지스터(410)의 1 개의 비트에 의해 제어됨)의 설정은 노드 링크의 출력이 4-입력 멀티플렉서(415)의 출력 값인지 또는 데이터 레지스터(420)에 저장된 (상수 또는 지연된) 값인지 여부를 판별한다. 몇몇 실시 예들에 있어서, 각각의 노드 링크는 출력에 추가 레지스터를 포함한다(즉, 각각의 출력은 레지스터에 저장됨).
도 4b는 통신 패브릭(125)의 노드(430)를 보여준다. 위에서 설명된 바와 같이, 노드는 4 개의 노드 링크들(405)을 포함한다. 각각의 노드 링크(405)는 제어 회로(435)(도 4a에는 도시되지 않음)를 포함한다. 제어 회로(435)는 도 4c에 도시된다. 제어 회로(435)는 유한 상태 머신("FSM", finite state machine)(432), 설정 워드(word)가 4 개의 입력들 중 임의의 입력에서 수신되는 때를 감지하는 설정 워드 감지 회로(440)(아래에 더 상세하게 설명된 바와 같이) 및 설정 레지스터(410)를 포함하고, 설정 워드가 감지된 경우, 설정 워드 감지 회로(440)는 설정 레지스터(410)로 새로운 값을 쓴다.
노드들 및 프로세싱 소자들은, 예를 들어, 추가 노드들(430), 추가 프로세싱 소자들 또는 스크래치 메모리들(115)과 연결되는 도면의 가장자리의 확장에 따라 보여지는 연결들로 도 5a와 같은 메쉬(mesh)를 형성할 수 있다. 각각의 프로세싱 소자(120)는 도시된 바와 같이 2 개의 출력들을 가질 수 있다. 예를 들어, 프로세싱 소자(120)가 2 개의 입력 값들을 수신하고, 2 개의 출력들에서 각각 2 개의 입력 값들 중 큰 값 및 2 개의 입력 값들 중 작은 값을 출력하도록 설정된다면, 두 번째 출력은 유용할 수 있다.
동작에 있어서, 스크래치 메모리(115), 노드들(430) 및 프로세싱 소자들(120) 사이에 전송된 데이터는 데이터 워드의 형태일 수 있다. 예를 들어, 20-비트 폭 워드들 각각은 4 비트 폭 제어 부분 및 16 비트 폭 데이터 부분을 포함한다. 도 5b는 통신 패브릭(125)이 어떻게 구성될 수 있는지의 예시를 보여준다. 즉, 5b는 노드 링크(405)의 설정 레지스터(410)가 어떻게 프로그램될 수 있는지를 보여준다. 스크래치 메모리들(115) 중 하나는 노드 설정 워드들의 시퀀스(520a)를 전송한다. 표 2를 참조하여 아래에 더 상세하게 설명된 바와 같이, 시퀀스(520a) 각각은 노드 링크(405)에 의해, 예를 들어, 첫 번째 4 개의 비트들이 이진 값 0000 을 가지는 결과로서 인식될 수 있다. 시퀀스(520a)의 첫 번째 설정 커맨드(command)는 제1 노드(430a)의 노드 링크에 의해 (i) 노드 설정 커맨드로서(0000 인 첫 번째 4 개의 비트들의 결과로서) (ii) 노드 링크로 주소가 지정되는 것으로서(노드 링크에 저장된 고유한 8-비트 식별자와 동일한 다음 8 비트들의 결과로서) 인식될 수 있다. 노드 링크는 제1 노드(430a)의 출력으로 비 연산(NOP; no operation) 데이터 워드를 전송할 수 있고, 제1 노드(430a)의 다른 노드 링크들로 현재 수신된 데이터 워드가 억제될 것임을 알릴 수 있다. 제1 노드(430a)의 다른 노드 링크들 각각은 제1 노드(430a)의 각각의 출력으로 비 연산 데이터 워드를 전송한다. 노드 설정 워드들의 시퀀스(520a)의 두 번째이면서 다음 데이터 워드들(즉, 노드 설정 워드들의 감소된 시퀀스(520b))은 제1 노드(430a)에 의해 제2 노드(430b)로 전달될 수 있다. 데이터 워드의 제어 부분에 의해 노드 링크(405)에 대한 설정 데이터를 포함하는 것으로서 식별되는 데이터 워드는 "노드 링크 설정 워드"로서 지칭될 수 있고, 데이터 워드의 제어 부분에 의해 프로세싱 소자(120)에 대한 설정 데이터를 포함하는 것으로서 식별되는 데이터 워드는 "프로세싱 소자 설정 워드"로서 지칭될 수 있다.
"스트립(strip) 및 포워드(forward)" 프로그래밍이라고 지칭되는 이 방식에 있어서, 모든 노드들(430)은 프로그램될 수 있고, 각각의 노드는, 한번 프로그램되면, 현재 프로그램된 상태에 따라 추가 설정 정보 및 데이터를 전달한다. 도 5b의 예시적인 프로그래밍 데이터 경로에서 도시된 프로세싱 소자들(120) 중 하나는 유사한 방식으로 프로그램된다.
표 2를 참조하면, 위에서 언급된 바와 같이, 각각의 데이터 워드는 20 비트 폭을 가지고, 20 비트 폭 중 첫 번째 4 비트들은 제어 비트들이고, 나머지 16 비트들은 데이터 비트들이다. 이진 0000 과 동일한 제어 워드를 포함하는 임의의 데이터 워드(전적으로 0 으로 구성된 비 연산(NOP) 워드를 제외하고)는 노드 링크 설정 워드이고, 위에서 설명한 바와 같이 처리된다. 이진 0001 과 동일한 제어 워드를 포함하는 임의의 데이터 워드는 프로세싱 소자 설정 워드이고, 데이터 워드를 수신하는 프로세싱 소자(120)에 의해 유사한 방식으로 처리된다. 즉, 프로세싱 소자(120)가 이러한 데이터 워드를 수신하는 경우, 프로세싱 소자(120)는 데이터 워드의 데이터 비트들을 제어 레지스터에 저장한다. 이진 0011 과 동일한 제어 부분을 포함하는 STOP 워드는 STOP 워드를 수신하는 프로세싱 소자(120)가 누적기를 초기화하고, 프로세싱 소자(120)가 다른 프로세싱 소자 설정 워드를 수신할 때까지 데이터를 처리하는 것을 중지하도록 야기한다. STOP 워드는 프로세싱 소자(120)에서 곱셈 및 누적 연산들을 종료하는데 이용될 수 있다.
몇몇 실시 예들에 있어서, 이진 0111 보다 큰 제어 부분을 가지는 데이터 워드는 희소성 표현에서, 더하기 7인 주소 증가량인 제어 부분을 가지고, 벡터의 2-튜플을 부호화하는데 이용된다(즉, 이진 1000 의 제어 워드 값은 1 의 주소 증가량을 나타냄).
제어 데이터 메모들
데이터 0100…1111 dddd dddd dddd dddd 제어 8: 곱셈; 9: 덧셈; A: mac
비 연산(NOP) 0000 0000 0000 0000 0000
STOP 0011 0000 0000 0000 0000 스트림 종료됨(메모리 제어에 의해 발생)
노드 링크설정 워드 0000 nnnn nnnn edoo iiii nnnnnnnn: 노드 링크 ID
e=설정 활성화
d=지연 활성화
oo: 출력 (UDRL)
iiii: 입력 멀티플렉서 선택 (UDRL)
프로세싱 소자 설정 워드 0001 01dd eeaa oooo oooo(10xr xxxx llll llll
11xr xxxx hhhh hhhh)
o=연산 x+- 등. 1: 곱셈, 2: 덧셈,
3: 뺄셈, 4: mac
aa=누적
r=레지스터 로드
e=레지스터 활성화
l=낮은 8 비트들, h=높은 8 비트들
dd=데이터타입 (fp, unit, etc)
도 6a는 몇몇 실시 예들에 있어서, 프로세싱 소자(120)의 개략도이다. 각각의 레지스터 및 멀티플렉서를 포함하는 각각의 입력 회로(610)는 입력들 각각에 연결되고, (i) 입력 값을 변경되지 않은 채로 전달하고, (ii) 한 클럭 주기만큼 입력 값을 지연시키고, 또는 (iii) 복수의 다음 계산들에서 이용되는 상수 값을 저장하는데 이용될 수 있다. 곱셈기(620)는 입력 회로들(610)에 의해 공급된 값들의 곱을 형성하고, 덧셈기(630)는 값들의 쌍의 합을 형성한다. 제1 데이터 스위칭 멀티플렉서(640a)는 덧셈기(630)가 첫 번째 입력으로 곱셈기(620)의 출력을 수신하는지, 또는 입력 회로들(610) 중 첫 번째 입력 회로의 출력을 수신하는지를 판별한다. 제2 데이터 스위칭 멀티플렉서(640b)는 덧셈기(630)가 쌍으로 덧셈을 수행하는지 또는 누적기로서 동작하는지를 판별한다. 프로세싱 소자(120)는 2 개의 출력 레지스터들(650)을 더 포함한다.도 6b는 다른 실시 예에 따른 프로세싱 소자(120)의 블록도이다. 다른 유형의 프로세싱 소자들(120)은 프로세싱 모듈(110)(도 1)에 결합될 수 있거나 임의의 하나의 프로세싱 소자(120)는, 도 6a 및 도 6b의 프로세싱 소자들(120)과 같이, 여러 유형의 프로세싱 소자들의 특징들을 결합할 수 있다. 도 6b의 프로세싱 소자(120)는 새롭게 수신된 데이터가 계산에 이용되는지 또는 출력으로부터의 데이터가 계산에 이용되는지를 판별하는 제1 멀티플렉서(660), 데이터가 한 클럭 주기만큼 지연되는지를 같이 선택하는 제1 레지스터(665) 및 제2 멀티플렉서(670), 도시된 바와 같이 다양한 수학적 연산들(예를 들어, 제곱 연산, 제곱근, 역수 또는 로그 연산)을 수행할 수 있는 수학 회로(680)를 포함한다. 몇몇 실시 예들에 있어서, 다른 특별한 목적의 프로세싱 소자들이 존재할 수 있다. 예를 들어, 프로세싱 소자들은 나눗셈을 수행하도록 구성된 프로세싱 소자를 포함한다.
프로세싱 소자들(120)은 부동 소수점(FP), 부호 있는 정수(int), 부호 없는 정수(uint) 및 부울(boolean)을 포함하는 다양한 데이터 유형들에 대하여 연산을 수행하고, 데이터 유형들 사이에 캐스팅(casting) 연산을 수행하도록 더 구성될 수 있다. 이러한 연산들의 예시들은 multiply (FP16, FP16), (u/int8/16, u/int8/16), add (FP16, FP16), (u/int8/16, u/int8/16), subtract (FP16, FP16), (u/int8/16, u/int8/16), negate (FP16, FP16), (u/int8/16, u/int8/16), cast FP16 to int16/uint16/int8/uint8, cast int16/uint16/int8/uint8 to FP16, cast FP16 to boolean, cast boolean to FP16, max(FP16, FP16), min(FP16, FP16), greater (FP16, FP16) -> boolean, less, equal, greater-or-equal, less-or-equal, logical and, or, negate, xor booleans, bitwise and, or, negate, xor int8/16,uint8/16, shift left/right arith/circular, ints, uints, 및 isNaN(FP16)->boolean, isInf(FP16)를 포함한다. 이 단락에서 사용된 표기법에 있어서, 경사 "/"는 "또는"을 의미하고, 이에 따라, 예를 들어, u/int8/16은 uint8, uint16, int8 또는 int16을 의미한다.
몇몇 실시 예들에 있어서, 노드들(430) 및 프로세싱 소자(120)는 작다. 즉, 노드들(430) 및 프로세싱 소자(120)는 구성을 위해 적은 게이트(gate)들을 요구한다. 따라서, 단위 프로세싱 전력당 비용은 낮을 수 있고, 복수의 프로세싱 모듈들(110)(도 1)을 포함하는 시스템은 전체 프로세싱 전력의 상당한 양을 상대적으로 적은 비용으로 제공하기 위해 확대될 수 있다. 노드들(430) 및 프로세싱 소자(120)의 상대적으로 작은 크기 때문에, 시스템을 구성하는 비용 측면 및 작동 비용(예를 들어, 전력 소비 및 요구 공간) 측면에서 비용이 상대적으로 낮을 수 있다. 몇몇 실시 예들에 있어서, 각각의 노드 링크(405)는 500 또는 더 적은 게이트들을 포함하고, 각각의 프로세싱 소자(120)는 5000 또는 더 적은 게이트들을 포함한다.
도 7a 내지 도 7e는 메모리 컨트롤러(710) 및 메모리 뱅크(720)를 포함하는 스크래치 메모리(115)의 구조 및 구성을 나타낸다. 메모리 뱅크(720)는 2-포트 메모리일 수 있다. 예를 들어, 메모리 뱅크(720)는 정적 랜덤 액세스 메모리(SRAM; static random access memory)일 수 있다. 메모리 컨트롤러(710)는 (i) 스크래치 메모리(115)가 큰 개수(예를 들어, 10)의 포트들을 가지는 메모리 시스템으로서 동작하도록 야기하기 위해, 메모리 뱅크(720)와 복수의 행 캐시(cache)들 사이의 데이터를 복사하고, (ii) 데이터에 대하여, 밀집성 표현 및 희소성 표현 사이를 변환하는 것 및 스트림 정렬을 수행하는 것과 같이, 전처리 및 후처리 동작들을 수행할 수 있다. 각각의 행 캐시는 도 7e에 도시된 바와 같이, 이중 버퍼(buffer)로서 구현될 수 있다. 메모리 뱅크(720)는 스크래치 메모리(115)를 호스트 중앙 처리 장치(CPU, central processing unit)로 연결하는 AXI(Advanced eXtensible Interface) 브리지(bridge)를 통해 직접 메모리 접근(DMA; direct memory access)으로 접근될 수 있다. 호스트 CPU는, 작동 중에, 메모리 뱅크(720)를 프로그램할 수 있고, 메모리 컨트롤러(710)로 시작 커맨드를 발행할 수 있다. 메모리 컨트롤러(710)는 통신 패브릭(125)으로 통신 패브릭(125)의 노드들(430) 및 프로세싱 소자들(120)을 설정하는 첫 번째 및 계산들을 수행하는 두 번째 데이터를 스트리밍(streaming)하기 시작할 수 있다. 몇몇 실시 예들에 있어서, SRAM은 캐시와 쌍을 이룬다. 데이터는 SRAM으로부터의 잇따른 읽기 값들과 관련된 스트리밍 방식으로 접근된다. SRAM으로 쓰기 및 SRAM으로부터 읽기는 전력 관점에서 상대적으로 비쌀 수 있다. 따라서, 전력을 절약하기 위해, 데이터는 캐시 라인으로 복사되고 캐시 라인으로부터 스트림될 수 있다. 캐시는 정지 상태로 스케줄될 수 있다.
본 명세서에서 다양한 소자(element)들, 부품(component)들, 영역(region)들, 계층(layer)들 및/또는 섹션(section)들을 설명하기 위해 "제 1", "제 2", 제 3" 등의 용어들이 사용될 지라도, 이러한 소자들, 부품들, 영역들, 계층들 및/또는 섹션들은 이러한 용어들에 의해 제한되지 않는 것으로 이해되어야 할 것이다. 이러한 용어들은 단지 다른 소자, 부품, 영역, 계층 또는 섹션으로부터 하나의 소자, 부품, 영역, 계층 또는 섹션을 구별하기 위해 사용된다. 따라서, 본 명세서에서 개시된 제1 소자, 부품, 영역, 계층 또는 섹션은, 본 발명의 사상 및 범위로부터 벗어나지 않으면, 제2 소자, 부품, 영역, 계층 또는 섹션으로 칭해질 수 있다.
본 명세서에서 설명의 편의를 위해, "아래", "아래쪽", "밑", "위", "위쪽" 등과 같이, 상대적 공간 용어들은 도면들에 도시된 바와 같이 하나의 소자 또는 특징들의 다른 소자(들) 또는 특징(들)에 대한 관계를 설명하기 위해 이용될 수 있다. 이러한 상대적 공간 용어들은 도면들에서 묘사된 방향뿐만 아니라 사용 또는 동작에 있어서 장치의 다른 방향들을 포함하는 것으로 의도된다. 예를 들어, 도면들의 장치가 뒤집어지면, 다른 소자들 또는 특징들의 "아래" 또는 "밑" 또는 "아래쪽"으로서 설명되는 소자들은 다른 소자들 또는 특징들의 "위쪽"을 향할 수 있다. 따라서, "아래" 또는 "아래쪽"의 예시 용어들은 위 및 아래의 방향을 모두 포함할 수 있다. 장치가 다른 방향(예를 들어, 90도 또는 다른 방향들로 회전됨)일 수 있고 본 명세서에서 사용되는 상대적 공간 기술어들은 이에 따라 해석되어야 한다. 또한, 계층이 2 개의 계층들 "사이에" 있는 것으로서 지칭되는 경우, 계층은 2 개의 계층들 사이의 유일한 계층일 수 있거나 하나 이상의 사이에 오는 계층들이 또한 존재할 수 있다.
본 명세서에서 사용된 용어는 단지 특정 실시 예들을 설명하기 위한 목적이며 본 발명을 제한하는 것으로 의도되지 않는다. 본 명세서에서 사용된 바와 같이, "실직적으로", "약", 그리고 유사한 용어들은 근사의 용어로서 사용되고 정도의 용어로서 사용되지 않으며, 기술 분야의 통상의 기술자들에 의해 인식될 수 있는 측정 또는 계산된 값들에서 내재하는 편차들을 설명하기 위한 것으로 의도된다. 본 명세서에서 사용된 바와 같이, "주요 성분" 용어는 구성 또는 상품의 임의의 다른 단일 성분의 양보다 많은 양으로 구성, 폴리머(polymer) 또는 상품에 존재하는 성분을 지칭한다. 대조적으로, "일차 성분"은 구성, 폴리머, 또는 상품 중 적어도 50%를 구성하는 성분을 지칭한다. 본 명세서에서 사용된 바와 같이, "주요 부분"은, 복수의 항목들에 적용되는 경우, 항목들 중 최소 절반을 의미한다.
본 명세서에서 사용된 바와 같이, 문맥에서 명백하게 다른 것을 가리키지 않으면, 단수 형은 복수 형도 포함하는 것으로 의도된다. "포함한다" 및/또는 "포함하는" 용어들은, 본 명세서에서 사용되는 경우, 기술된 특징들, 정수들, 단계들, 동작들, 소자들, 및/또는 부품들의 존재를 명시하고, 하나 이상의 다른 특징들, 정수들, 단계들, 동작들, 소자들, 부품들, 및/또는 그것의 그룹들의 존재 또는 부가를 배제하지 않는 것으로 이해될 수 있다. 본 명세서에서 사용된 바와 같이, "및/또는" 용어는 관련된 하나 이상의 열거된 항목들의 임의의 조합들 및 모든 조합들을 포함한다. "적어도 하나"와 같은 표현들은, 요소 리스트 앞에 있는 경우, 전체의 요소 리스트를 수정하고 리스트의 개별 요소들을 수정하지 않는다. 또한, "할 수 있다"의 사용은, 본 발명의 실시 예들을 설명하는 경우, "본 발명의 하나 이상의 실시 예들"을 지칭한다. 또한, "예시적인" 용어는 예시 또는 실례를 지칭하는 것으로 의도된다. 본 명세서에서 사용된 바와 같이, "사용하다", "사용하는" 및 "사용된" 용어들은 "활용하다", "활용하는" 및 "활용된" 용어들 각각과 동의어로 간주될 수 있다.
요소 또는 계층이 다른 요소 또는 계층 "위에", 다른 요소 또는 계층에 "연결되는" 또는 다른 요소 또는 계층에 "인접하는" 것으로 지칭되는 경우, 요소 또는 계층이 다른 요소 또는 계층 직접 위, 다른 요소 또는 계층에 직접 연결되는, 다른 요소 또는 계층에 직접 인접하는 것일 수 있거나 하나 이상의 사이에 오는 요소들 또는 계층들이 존재할 수 있다. 대조적으로, 요소 또는 계층이 다른 요소 또는 계층 "직접 위", 다른 요소 또는 계층에 "직접 연결되는", 또는 다른 요소 또는 계층에 "바로 인접하는" 것으로 지칭되는 경우, 사이에 오는 요소들 또는 계층들이 존재하지 않는다.
본 명세서에서 열거된 임의의 수치 범위는 열거된 범위 내에 포함된 같은 수치의 정밀도의 모든 서브-범위들을 포함하는 것으로 의도된다. 예를 들어, "1.0부터 10.0"의 범위는 1.0의 열거된 최소 값 및 10.0의 열거된 최대 값 사이의(을 포함하는) 모든 서브범위들을 포함하는 것으로 의도된다. 즉, 예를 들어, 2.4부터 7.6과 같이, 서브범위는 1.0 이상의 최소 값 및 10.0 이하의 최대 값을 가진다. 본 명세서에서 열거된 임의의 최대 수치 제한은 여기에 포함된 모든 하위 수치 제한들을 포함하기 위한 것으로 의도되고 본 명세서에서 열거된 임의의 최소 수치 제한은 여기에 포함된 모든 상위 수치 제한들을 포함하기 위한 것으로 의도된다.
뉴럴 프로세싱 가속기의 실시 예들이 본 명세서에서 구체적으로 설명되었더라도, 다양한 수정들 및 변경들은 기술 분야의 통상의 기술자에게 자명할 것이다. 따라서, 본 발명의 원리들에 따라 구성된 뉴럴 프로세싱 가속기는 본 명세서에서 구체적으로 설명된 것과 다르게 구현될 수 있다. 본 발명은 다음의 청구항들 및 청구항들의 균등범위에서 정의된다.

Claims (20)

  1. 계산을 위한 시스템에 있어서,
    복수의 프로세싱 소자 회로들;
    복수의 노드(node) 회로들을 포함하는 통신 패브릭(fabric); 및
    스크래치 메모리를 포함하고,
    상기 스크래치 메모리는 상기 통신 패브릭을 통해 상기 프로세싱 소자 회로들과 연결되고,
    하나 이상의 상기 프로세싱 소자 회로들은 설정 값을 저장하도록 구성된 설정 레지스터(register)를 포함하고,
    하나 이상의 상기 프로세싱 소자 회로들은:
    두 개의 입력들에서 두 개의 각각의 데이터 워드들을 수신하고, 상기 두 개의 데이터 워드들 각각은 제어 부분 및 데이터 부분을 가지며:
    상기 두 개의 데이터 워드들 중 하나가 데이터 워드를 프로세싱 소자 설정 워드로서 식별하는 제어 부분을 가지는 경우, 상기 설정 레지스터에 상기 프로세싱 소자 설정 워드의 상기 데이터 부분을 저장하고;
    상기 두 개의 데이터 워드들이 모두 프로세싱 소자 설정 워드가 아닌 경우, 상기 설정 값에 따라 상기 두 개의 데이터 워드들에 대한 연산을 수행하도록 구성된 시스템.
  2. 제 1 항에 있어서,
    상기 연산을 수행하는 것은:
    상기 설정 값이 원소 단위 곱셈을 명시하는 경우, 상기 두 개의 데이터 워드들 중 제1 데이터 워드의 상기 데이터 부분과 상기 두 개의 데이터 워드들 중 제2 데이터 워드의 상기 데이터 부분을 곱하는 것을 포함하는 시스템.
  3. 제 1 항에 있어서,
    상기 연산을 수행하는 것은:
    상기 설정 값이 원소 단위 덧셈을 명시하는 경우, 상기 두 개의 데이터 워드들 중 제1 데이터 워드의 상기 데이터 부분과 상기 두 개의 데이터 워드들 중 제2 데이터 워드의 상기 데이터 부분을 더하는 것을 포함하는 시스템.
  4. 제 1 항에 있어서,
    상기 연산을 수행하는 것은:
    상기 설정 값이 곱셈 및 누적을 명시하는 경우:
    상기 두 개의 데이터 워드들 중 제1 데이터 워드의 상기 데이터 부분과 상기 두 개의 데이터 워드들 중 제2 데이터 워드의 상기 데이터 부분을 곱하여 곱을 형성하는 것, 및
    상기 곱을 누적기 값에 더하는 것을 포함하는 시스템.
  5. 제 1 항에 있어서,
    상기 프로세싱 소자 회로들 중 하나는 5000 이하의 게이트(gate)들을 포함하는 시스템.
  6. 제 1 항에 있어서,
    상기 노드 회로들 중 하나는 2000 이하의 게이트들을 포함하는 시스템.
  7. 계산을 위한 시스템에 있어서,
    복수의 프로세싱 소자 회로들;
    복수의 노드(node) 회로들을 포함하는 통신 패브릭(fabric); 및
    스크래치 메모리를 포함하고,
    상기 스크래치 메모리는 상기 통신 패브릭을 통해 상기 프로세싱 소자 회로들과 연결되고,
    하나 이상의 상기 노드 회로들은 복수의 노드 링크 회로들을 포함하고,
    상기 복수의 노드 회로들 중 제1 노드 회로의 상기 복수의 노드 링크 회로들 중 제1 노드 링크 회로는 복수의 입력들 및 하나의 출력을 가지고,
    상기 제1 노드 링크 회로는:
    데이터 레지스터; 및
    설정 값을 저장하도록 구성된 설정 레지스터를 포함하고,
    상기 제1 노드 링크 회로는 상기 입력들에서 각각이 제어 부분 및 데이터 부분을 가지는 복수의 각각의 데이터 워드들을 수신하고,
    상기 데이터 워드들 중 하나가 데이터 워드를 노드 링크 설정 워드로서 식별하는 제어 부분을 가지는 경우, 상기 설정 레지스터에 상기 노드 링크 설정 워드의 상기 데이터 부분을 저장하고,
    상기 데이터 워드들이 모두 노드 링크 설정 워드가 아닌 경우:
    상기 설정 값에 따라
    상기 입력들 중 하나로부터 상기 데이터 레지스터로 데이터 워드를 전송하고, 및/또는
    상기 입력들 중 하나로부터 상기 출력으로 데이터 워드를 전송하고, 및/또는
    상기 데이터 레지스터로부터 상기 출력으로 데이터 워드를 전송하도록 구성된 시스템.
  8. 제 7 항에 있어서,
    하나 이상의 상기 노드 회로들은:
    실질적으로 직교하는 방향들에서 노드 회로로부터 안쪽으로 향하는 네 개의 입력들 및
    실질적으로 직교하는 방향들에서 상기 노드 회로로부터 바깥쪽으로 향하는 네 개의 출력들을 가지는 시스템.
  9. 제 8 항에 있어서,
    하나 이상의 상기 노드 회로들 중 하나의 노드 회로는 네 개의 노드 링크 회로들을 포함하고, 상기 네 개의 노드 링크 회로들 각각은:
    상기 노드 회로의 상기 네 개의 입력들에 각각 연결되는 네 개의 입력들, 및
    상기 노드 회로의 상기 상기 네 개의 출력들 중 각각의 하나에 연결되는 하나의 출력을 가지는 시스템.
  10. 제 7 항에 있어서,
    상기 프로세싱 소자 회로들 중 하나는 5000 이하의 게이트들을 포함하는 시스템.
  11. 제 7 항에 있어서,
    상기 노드 회로들 중 하나는 2000 이하의 게이트들을 포함하는 시스템.
  12. 제 7 항에 있어서,
    상기 스크래치 메모리는:
    메모리 뱅크(bank); 및
    메모리 컨트롤러를 포함하고,
    상기 메모리 컨트롤러는 복수의 행 캐시(cache)들을 포함하고,
    하나 이상의 상기 행 캐시들은 상기 데이터 워드들과 동일한 비트 폭을 가지고, 상기 메모리 컨트롤러는 상기 메모리 뱅크로부터 상기 행 캐시들로 데이터를 전달하고, 상기 행 캐시들로부터 상기 메모리 뱅크로 데이터를 전달하도록 구성되고,
    하나 이상의 상기 행 캐시들은:
    데이터 워드들의 시퀀스(sequence)를 밖으로 스트림(stream)하고,
    데이터 워드들의 시퀀스를 안으로 스트림하도록 구성된 시스템.
  13. 제 12 항에 있어서,
    상기 행 캐시들 중 하나는 이중 버퍼인 시스템.
  14. 제 12 항에 있어서,
    각각의 데이터 워드 중 상기 제어 부분은 4 비트들의 폭을 가지고,
    각각의 데이터 워드 중 상기 데이터 부분은 16 비트들의 폭을 가지는 시스템.
  15. 계산 방법에 있어서,
    프로세싱 모듈을 설정하는 단계를 포함하고, 상기 프로세싱 모듈은:
    복수의 프로세싱 소자 회로들;
    각각이 복수의 입력들 및 하나의 출력을 가지는 복수의 노드 링크 회로들을 포함하는 통신 패브릭(fabric); 및
    스크래치 메모리를 포함하고,
    상기 설정하는 단계는:
    상기 스크래치 메모리가 복수의 노드 링크 설정 워드들을 전송하는 단계, 상기 복수의 노드 링크 설정 워드들 각각은 상기 복수의 노드 링크 회로들 중 하나의 노드 링크 회로로 보내지고;
    상기 복수의 노드 링크 회로들 중 제1 노드 링크 회로가 상기 제1 노드 링크 회로로 보내지는 데이터 워드를 수신하는 단계, 상기 제1 노드 링크 회로는 상기 복수의 프로세싱 소자 회로들 중 제1 프로세싱 소자 회로의 하나의 입력에 연결되는 하나의 출력을 가지고;
    상기 제1 노드 링크 회로가 상기 제1 노드 링크 회로의 제1 입력에서 수신된 데이터 워드들을 상기 제1 노드 링크 회로의 상기 출력으로 전달하도록 야기하기 위해, 상기 제1 노드 링크 회로가 상기 제1 노드 링크 회로의 설정을 설정하는 단계;
    상기 제1 노드 링크 회로 중 상기 제1 입력에 의해 프로세싱 소자 설정 워드를 수신하는 단계;
    상기 제1 노드 링크 회로의 상기 제1 입력에 의해 상기 프로세싱 소자 설정 워드를 상기 제1 프로세싱 소자 회로로 전송하는 단계; 및
    상기 제1 프로세싱 소자 회로가 상기 제1 프로세싱 소자 회로의 설정 레지스터(register)에 상기 프로세싱 소자 설정 워드의 데이터 부분을 저장하는 단계를 포함하는 방법.
  16. 제 15 항에 있어서,
    복수의 곱들을 계산하는 단계를 더 포함하고, 상기 계산하는 단계는:
    상기 스크래치 메모리가 제1 복수의 노드 링크 회로들을 통해 확장하는 제1 경로를 통해 피연산자들의 제1 시퀀스(sequence)를 상기 제1 프로세싱 소자 회로로 전송하는 단계;
    상기 스크래치 메모리가 제2 복수의 노드 링크 회로들을 통해 확장하는 제2 경로를 통해 피연산자들의 제2 시퀀스를 상기 제1 프로세싱 소자 회로로 전송하는 단계;
    상기 제1 프로세싱 소자가 쌍으로 된 곱들의 시퀀스를 계산하는 단계를 포함하고, 각각의 쌍으로 된 곱은:
    피연산자들의 상기 제1 시퀀스의 하나의 피연산자, 및
    피연산자들의 상기 제2 시퀀스의 대응하는 하나의 피연산자의 곱인 방법.
  17. 제 16 항에 있어서,
    밀집성 표현(dense representation)으로부터 희소성 표현(sparse representation)으로 제1 벡터를 변환하는 단계를 더 포함하고, 상기 제1 벡터는 0 이 아닌 값을 가지는 제1 원소를 포함하고, 상기 제1 원소 바로 다음에는 0 의 값을 가지는 제2 원소가 뒤따르고, 상기 변환하는 단계는 상기 제1 원소를 제1 2-튜플(tuple)로 교체하는 단계를 포함하고, 상기 제1 2-튜플은:
    상기 제1 벡터의 상기 제1 원소와 동일한 제1 원소, 및
    1 보다 큰 제2 원소를 가지는 방법.
  18. 제 17 항에 있어서,
    제2 벡터의 희소성 표현을 상기 제1 벡터의 상기 희소성 표현과 정렬시키는 단계를 더 포함하고, 상기 정렬시키는 단계는:
    상기 제2 벡터의 상기 희소성 표현으로부터 상기 제1 벡터의 상기 제2 원소에 대응하는 2-튜플을 삭제하는 단계, 및
    상기 제2 벡터의 제1 2-튜플의 제2 원소의 값을 증가시키는 단계를 포함하고, 상기 제2 벡터의 상기 제1 2-튜플은 상기 삭제된 2-튜플 바로 앞에 오는 방법.
  19. 제 18 항에 있어서,
    상기 복수의 프로세싱 소자 회로들 중 하나의 프로세싱 소자 회로가 상기 제1 벡터의 상기 제1 2-튜플의 상기 제1 원소를 상기 제2 벡터의 상기 제1 2-튜플의 제1 원소와 곱하여 결과 2-튜플의 제1 원소를 형성하는 단계; 및
    상기 결과 2-튜플의 제2 원소를 상기 제1 벡터의 상기 제1 2-튜플의 상기 제2 원소와 동일하게 설정하는 단계를 더 포함하는 방법.
  20. 제 15 항에 있어서,
    상기 프로세싱 소자 회로들 중 하나는 5000 이하의 게이트들을 포함하고,
    상기 노드 링크 회로들 중 하나는 500 이하의 게이트들을 포함하는 방법.
KR1020180115294A 2017-12-19 2018-09-27 뉴럴 프로세싱 가속기 KR102649482B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201762607882P 2017-12-19 2017-12-19
US62/607,882 2017-12-19
US15/916,189 US11360930B2 (en) 2017-12-19 2018-03-08 Neural processing accelerator
US15/916,189 2018-03-08

Publications (2)

Publication Number Publication Date
KR20190074195A true KR20190074195A (ko) 2019-06-27
KR102649482B1 KR102649482B1 (ko) 2024-03-20

Family

ID=66814458

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180115294A KR102649482B1 (ko) 2017-12-19 2018-09-27 뉴럴 프로세싱 가속기

Country Status (5)

Country Link
US (3) US11360930B2 (ko)
JP (1) JP7268996B2 (ko)
KR (1) KR102649482B1 (ko)
CN (1) CN110059820A (ko)
TW (1) TWI795435B (ko)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3607503B1 (en) * 2017-04-17 2022-03-09 Cerebras Systems Inc. Task activating for accelerated deep learning
US11017295B1 (en) 2017-05-01 2021-05-25 Perceive Corporation Device storing ternary weight parameters for machine-trained network
US11049013B1 (en) 2018-04-20 2021-06-29 Perceive Corporation Encoding of weight values stored on neural network inference circuit
US11341397B1 (en) 2018-04-20 2022-05-24 Perceive Corporation Computation of neural network node
US11568227B1 (en) 2018-04-20 2023-01-31 Perceive Corporation Neural network inference circuit read controller with multiple operational modes
US11783167B1 (en) 2018-04-20 2023-10-10 Perceive Corporation Data transfer for non-dot product computations on neural network inference circuit
US11222257B1 (en) 2018-04-20 2022-01-11 Perceive Corporation Non-dot product computations on neural network inference circuit
US11481612B1 (en) 2018-04-20 2022-10-25 Perceive Corporation Storage of input values across multiple cores of neural network inference circuit
US11210586B1 (en) 2018-04-20 2021-12-28 Perceive Corporation Weight value decoder of neural network inference circuit
US10740434B1 (en) 2018-04-20 2020-08-11 Perceive Corporation Reduced dot product computation circuit
US11347297B1 (en) 2019-01-23 2022-05-31 Perceive Corporation Neural network inference circuit employing dynamic memory sleep
US11663454B2 (en) * 2019-03-29 2023-05-30 Aspiring Sky Co. Limited Digital integrated circuit with embedded memory for neural network inferring
US11514136B2 (en) * 2019-05-17 2022-11-29 Aspiring Sky Co. Limited Circuit for neural network convolutional calculation of variable feature and kernel sizes
US11625585B1 (en) 2019-05-21 2023-04-11 Perceive Corporation Compiler for optimizing filter sparsity for neural network implementation configuration
WO2021030653A1 (en) 2019-08-14 2021-02-18 Google Llc Dual-mode operation of application specific integrated circuits
US20210306006A1 (en) 2019-09-23 2021-09-30 SK Hynix Inc. Processing-in-memory (pim) devices
KR20220015680A (ko) * 2020-07-31 2022-02-08 삼성전자주식회사 딥러닝 연산 수행 방법 및 장치
US11599139B1 (en) * 2021-09-03 2023-03-07 Xepic Corporation Limited Dynamic adjustment of root clock frequency in logic system design during verification

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130137700A (ko) * 2011-04-01 2013-12-17 인텔 코오퍼레이션 벡터 친숙형 명령어 형식 및 그의 실행

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2129882A1 (en) * 1993-08-12 1995-02-13 Soheil Shams Dynamically reconfigurable interprocessor communication network for simd multiprocessors and apparatus implementing same
JP2001188767A (ja) * 1999-12-28 2001-07-10 Fuji Xerox Co Ltd ニューラルネットワーク演算装置及びニューラルネットワークの演算方法
WO2001067273A2 (en) 2000-03-08 2001-09-13 Sun Microsystems, Inc. Vliw computer processing architecture with on-chip dynamic ram
US6836767B2 (en) * 2001-10-03 2004-12-28 International Business Machines Corporation Pipelined hardware implementation of a neural network circuit
US7415594B2 (en) * 2002-06-26 2008-08-19 Coherent Logix, Incorporated Processing system with interspersed stall propagating processors and communication elements
US7593016B2 (en) * 2004-04-08 2009-09-22 Teranex Systems, Inc Method and apparatus for high density storage and handling of bit-plane data
JP4547198B2 (ja) * 2004-06-30 2010-09-22 富士通株式会社 演算装置、演算装置の制御方法、プログラム及びコンピュータ読取り可能記録媒体
JP4743581B2 (ja) * 2004-09-17 2011-08-10 富士ゼロックス株式会社 データ処理システムおよびその制御方法
US9237095B2 (en) * 2012-02-17 2016-01-12 Netronome Systems, Inc. Island-based network flow processor integrated circuit
US9160617B2 (en) 2012-09-28 2015-10-13 International Business Machines Corporation Faulty core recovery mechanisms for a three-dimensional network on a processor array
US8990616B2 (en) 2012-09-28 2015-03-24 International Business Machines Corporation Final faulty core recovery mechanisms for a two-dimensional network on a processor array
JP6290855B2 (ja) * 2013-03-01 2018-03-07 アクシオンリサーチ株式会社 データ処理装置およびその制御方法
JP2015088058A (ja) * 2013-10-31 2015-05-07 キヤノン株式会社 情報処理装置およびその制御方法
US10417525B2 (en) 2014-09-22 2019-09-17 Samsung Electronics Co., Ltd. Object recognition with reduced neural network weight precision
EP3035249B1 (en) 2014-12-19 2019-11-27 Intel Corporation Method and apparatus for distributed and cooperative computation in artificial neural networks
EP3035204B1 (en) 2014-12-19 2018-08-15 Intel Corporation Storage device and method for performing convolution operations
EP3035203A1 (en) 2014-12-19 2016-06-22 Intel Corporation Fine-grain storage interface and method for low power accelerators
US10192162B2 (en) 2015-05-21 2019-01-29 Google Llc Vector computation unit in a neural network processor
US9747546B2 (en) 2015-05-21 2017-08-29 Google Inc. Neural network processor
US10353860B2 (en) * 2015-10-08 2019-07-16 Via Alliance Semiconductor Co., Ltd. Neural network unit with neural processing units dynamically configurable to process multiple data sizes
US10372947B2 (en) * 2016-12-02 2019-08-06 Microsoft Technology Licensing, Llc Parsing, processing, and/or securing stream buffers

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130137700A (ko) * 2011-04-01 2013-12-17 인텔 코오퍼레이션 벡터 친숙형 명령어 형식 및 그의 실행

Also Published As

Publication number Publication date
JP2019109892A (ja) 2019-07-04
US11645224B2 (en) 2023-05-09
US20220292049A1 (en) 2022-09-15
JP7268996B2 (ja) 2023-05-08
TW201928701A (zh) 2019-07-16
CN110059820A (zh) 2019-07-26
US20190187983A1 (en) 2019-06-20
US20230244632A1 (en) 2023-08-03
US11360930B2 (en) 2022-06-14
US11995027B2 (en) 2024-05-28
KR102649482B1 (ko) 2024-03-20
TWI795435B (zh) 2023-03-11

Similar Documents

Publication Publication Date Title
KR20190074195A (ko) 뉴럴 프로세싱 가속기
Kung Systolic algorithms for the CMU WARP processor
CN110688158B (zh) 计算装置以及神经网络的处理系统
TWI749249B (zh) 芯片裝置、芯片、智能設備以及神經網絡的運算方法
KR102316670B1 (ko) 연산 가속기
Komuro et al. A dynamically reconfigurable SIMD processor for a vision chip
Zhuo et al. Scalable and modular algorithms for floating-point matrix multiplication on reconfigurable computing systems
US10768894B2 (en) Processor, information processing apparatus and operation method for processor
JP2018055677A (ja) 外積累算演算のためのプロセッサおよび方法
CN108733348B (zh) 融合向量乘法器和使用其进行运算的方法
KR20190107091A (ko) 계산 장치 및 방법
US4524428A (en) Modular input-programmable logic circuits for use in a modular array processor
Kang et al. A novel convolutional neural network accelerator that enables fully-pipelined execution of layers
Strader et al. A canonical bit-sequential multiplier
Waris et al. AxSA: On the design of high-performance and power-efficient approximate systolic arrays for matrix multiplication
WO2023124371A1 (zh) 数据处理装置、方法、芯片、计算机设备及存储介质
WO2020093669A1 (en) Convolution block array for implementing neural network application and method using the same, and convolution block circuit
KR100722428B1 (ko) 리소스 공유 및 파이프 라이닝 구성을 갖는 재구성가능배열구조
Kumar et al. Analysis of low power, area and high speed multipliers for DSP applications
Cain et al. Convolution processing unit featuring adaptive precision using dynamic reconfiguration
Singh et al. An Overlap-and-Add Based Time Domain Acceleration of CNNs on FPGA-CPU Systems
US8150949B2 (en) Computing apparatus
Chen et al. A high-efficiency reconfigurable digital signal processor for multimedia computing
Gupta et al. Efficient FPGA Implementations of Convolutional Neural Network
CN114218521A (zh) 一种异构众核架构上基于膨胀取数的卷积运算方法

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right