KR102120396B1 - 심층 신경망용 가속기 - Google Patents

심층 신경망용 가속기 Download PDF

Info

Publication number
KR102120396B1
KR102120396B1 KR1020187037389A KR20187037389A KR102120396B1 KR 102120396 B1 KR102120396 B1 KR 102120396B1 KR 1020187037389 A KR1020187037389 A KR 1020187037389A KR 20187037389 A KR20187037389 A KR 20187037389A KR 102120396 B1 KR102120396 B1 KR 102120396B1
Authority
KR
South Korea
Prior art keywords
bit
neuron
bit serial
serial
neurons
Prior art date
Application number
KR1020187037389A
Other languages
English (en)
Other versions
KR20190010642A (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 더 가버닝 카운슬 오브 더 유니버시티 오브 토론토
Priority to KR1020207015810A priority Critical patent/KR102459854B1/ko
Publication of KR20190010642A publication Critical patent/KR20190010642A/ko
Application granted granted Critical
Publication of KR102120396B1 publication Critical patent/KR102120396B1/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
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/049Temporal neural networks, e.g. delay elements, oscillating neurons or pulsed inputs
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

신경망에서의 비트 직렬 계산을 위한 시스템이 설명된다. 시스템은 집적 회로 상에 구현될 수도 있고, 각각의 비트 직렬 타일이 입력 뉴런 및 시냅스를 수신하고, 출력 뉴런을 전달하는 비트 직렬 계산을 수행하기 위한 하나 이상의 비트 직렬 타일을 포함할 수도 있다. 또한, 뉴런 및 디스패처 및 리듀서를 저장하기 위한 활성화 메모리가 포함된다. 디스패처는 메모리로부터 뉴런 및 시냅스를 판독하고 뉴런 또는 시냅스 중 어느 하나를 비트 직렬로 하나 이상의 비트 직렬 타일에 전달한다. 뉴런 또는 시냅스 중 다른 하나는 하나 이상의 비트 직렬 타일에 비트 병렬로 전달되거나, 또는, 또 다른 실시형태에 따라, 하나 이상의 비트 직렬 타일에 비트 직렬로 또한 전달될 수도 있다. 리듀서는 하나 이상의 타일로부터 출력 뉴런을 수신하고, 출력 뉴런을 활성화 메모리로 전달한다.

Description

심층 신경망용 가속기
본 명세서는 일반적으로 신경망(neural network)에 관한 것으로, 더욱 상세하게는, 사용되는 수치적 표현의 길이에 비례하여 확장 가능한 실행 시간을 갖는 심층 신경망(deep neural network: DNN)용 가속기에 관한 것이다.
심층 신경망(DNN)은 객체 및 음성 인식과 같은 많은 인식 작업에서 최첨단 기술이다. DNN은, 그래픽 프로세싱 유닛(Graphic Processing Unit: GPU)의 사용과 함께 공통적으로 활용되는 높은 계산적 요구 및 병렬성(parallelism)을 각각 나타내는 레이어의 피드포워드 배열(feed-forward arrangement)을 포함한다. DNN의 높은 계산적 요구 및 더 높은 에너지 효율성에 대한 필요성은 특수 목적 아키텍처의 개발 및 제안의 동기를 부여하였다. 그러나, 전력은 DNN 설계에서 여전히 제한 요인이 되고 있다.
따라서, 종래 기술에서 향상에 대한 필요성이 남아 있다.
발명의 양태에 따르면, 비트 직렬 신경망 가속기(bit-serial neural network accelerator)가 제공된다.
본 발명의 실시형태에 따르면, 신경망에서의 비트 직렬 계산을 위한 시스템이 제공되는데, 그 시스템은: 신경망에서 비트 직렬 계산을 수행하기 위한 하나 이상의 비트 직렬 타일로서, 각각의 비트 직렬 타일은 입력 뉴런(neuron) 및 시냅스(synapse)를 수신하고, 출력 뉴런을 생성하는, 하나 이상의 비트 직렬 타일; 뉴런을 저장하기 위한 그리고 디스패처(dispatcher) 및 리듀서(reducer)를 통해 하나 이상의 비트 직렬 타일과 통신하는 활성화 메모리를 포함하고, 디스패처는 활성화 메모리로부터 뉴런을 판독하고 그 뉴런을 제1 인터페이스를 통해 하나 이상의 비트 직렬 타일로 전달하고, 디스패처는 메모리로부터 시냅스를 판독하고 그 시냅스를 제2 인터페이스를 통해 하나 이상의 비트 직렬 타일로 전달하고, 리듀서는 하나 이상의 비트 직렬 타일로부터 출력 뉴런을 수신하고, 그 출력 뉴런을 제3 인터페이스를 통해 활성화 메모리로 전달하고; 제1 인터페이스 및 제2 인터페이스 중 하나는 뉴런 또는 시냅스를 하나 이상의 비트 직렬 타일로 비트 직렬로(bit-serially) 전달하고, 제1 인터페이스 및 제2 인터페이스 중 나머지 하나는 뉴런 또는 시냅스를 하나 이상의 비트 직렬 타일로 비트 병렬로(bit-parallelly) 전달한다.
본 발명의 또 다른 실시형태에 따르면, 신경망에서의 비트 직렬 계산을 위한 시스템이 제공되는데, 그 시스템은: 신경망에서 비트 직렬 계산을 수행하기 위한 하나 이상의 비트 직렬 타일로서, 각각의 비트 직렬 타일은 입력 뉴런 및 시냅스를 수신하고 출력 뉴런을 전달하는, 하나 이상의 비트 직렬 타일; 뉴런을 저장하기 위한 그리고 디스패처 및 리듀서를 통해 하나 이상의 비트 직렬 타일과 통신하는 활성화 메모리를 포함하고, 디스패처는 활성화 메모리로부터 뉴런을 판독하고 그 뉴런을 제1 인터페이스를 통해 하나 이상의 비트 직렬 타일로 전달하고, 디스패처는 메모리로부터 시냅스를 판독하고 그 시냅스를 제2 인터페이스를 통해 하나 이상의 비트 직렬 타일로 전달하고, 리듀서는 하나 이상의 비트 직렬 타일로부터 출력 뉴런을 수신하고, 그 출력 뉴런을 제3 인터페이스를 통해 활성화 메모리로 전달하고; 제1 인터페이스 및 제2 인터페이스는, 뉴런 및 시냅스를 하나 이상의 비트 직렬 타일로 비트 직렬로 전달한다.
본 발명의 또 다른 실시형태에 따르면, 각각의 비트 직렬 타일은, 시냅스 버퍼, 디스패처로부터의 입력 뉴런을 유지하는 입력 뉴런 버퍼 및 리듀서로의 통신을 펜딩하는 출력 뉴런을 유지하는 뉴런 출력 버퍼를 더 포함할 수도 있다.
본 발명의 또 다른 실시형태에 따르면, 비트 직렬 신경망 가속기를 포함하는 집적 회로가 제공되는데, 집적 회로는: 신경망에서 비트 직렬 계산을 수행하기 위한 하나 이상의 비트 직렬 타일로서, 각각의 비트 직렬 타일은 입력 뉴런 및 시냅스를 수신하고, 출력 뉴런을 생성하는, 하나 이상의 비트 직렬 타일; 뉴런을 저장하기 위한 그리고 디스패처 및 리듀서를 통해 하나 이상의 비트 직렬 타일과 통신하는 활성화 메모리를 포함하고, 디스패처는 활성화 메모리로부터 뉴런을 판독하고 그 뉴런을 제1 인터페이스를 통해 하나 이상의 비트 직렬 타일로 전달하고, 디스패처는 메모리로부터 시냅스를 판독하고 그 시냅스를 제2 인터페이스를 통해 하나 이상의 비트 직렬 타일로 전달하고, 리듀서는 하나 이상의 비트 직렬 타일로부터 출력 뉴런을 수신하고, 그 출력 뉴런을 제3 인터페이스를 통해 활성화 메모리로 전달하고, 제1 인터페이스 및 제2 인터페이스 중 하나는 뉴런 또는 시냅스를 하나 이상의 비트 직렬 타일로 비트 직렬로 전달하고, 제1 인터페이스 및 제2 인터페이스 중 나머지 하나는 뉴런 또는 시냅스를 하나 이상의 비트 직렬 타일로 비트 병렬로 전달한다.
본 발명의 또 다른 실시형태에 따르면, 비트 직렬 신경망 가속기를 포함하는 집적 회로가 제공되는데, 그 집적 회로는: 신경망에서 비트 직렬 계산을 수행하기 위한 하나 이상의 비트 직렬 타일로서, 각각의 비트 직렬 타일은 입력 뉴런 및 시냅스를 수신하고 출력 뉴런을 전달하는, 하나 이상의 비트 직렬 타일; 뉴런을 저장하기 위한 그리고 디스패처 및 리듀서를 통해 하나 이상의 비트 직렬 타일과 통신하는 활성화 메모리를 포함하고, 디스패처는 활성화 메모리로부터 뉴런을 판독하고 그 뉴런을 제1 인터페이스를 통해 하나 이상의 비트 직렬 타일로 전달하고, 디스패처는 메모리로부터 시냅스를 판독하고 그 시냅스를 제2 인터페이스를 통해 하나 이상의 비트 직렬 타일로 전달하고, 리듀서는 하나 이상의 비트 직렬 타일로부터 출력 뉴런을 수신하고, 그 출력 뉴런을 제3 인터페이스를 통해 활성화 메모리로 전달하고; 제1 인터페이스 및 제2 인터페이스는, 뉴런 및 시냅스를 하나 이상의 비트 직렬 타일로 비트 직렬로 전달한다.
본 출원에 따른 다른 양태 및 특징부는, 첨부하는 도면과 연계한 본 발명의 실시형태의 다음의 설명의 검토시 기술 분야의 숙련된 자에게 명백해질 것이다.
이제, 단지 예시로서 본 발명의 실시형태 및 이들이 어떻게 실시될 수도 있는지를 나타내는 첨부 도면에 대한 참조가 이루어질 것인데, 첨부의 도면에서:
도 1은 종래 기술의 비트 병렬 DNN 타일을 도시한 도면;
도 2는 본 발명의 일 실시형태에 따른 신경망 프로세싱 유닛(neural processing unit)을 도시한 도면;
도 3은 일 실시형태에 따른 비트 직렬 내적 유닛(serial inner product unit: SIP)을 도시한 도면;
도 4는 일 실시형태에 따른 비트 직렬 타일과 신경 메모리(neural memory: NM) 사이의 데이터 이동의 데이터 흐름도;
도 5는 일 실시형태에 따른 디스패처를 도시한 도면;
도 6은 일 실시형태에 따른 뉴런 메모리 매핑의 데이터 흐름도;
도 7은 본 발명의 일 실시형태의 실험적 속도 향상(speedup) 결과의 막대 그래프;
도 8은 본 발명의 일 실시형태의 실험적 에너지 효율성 결과의 막대 그래프;
도 9는 본 발명의 일 실시형태의 성능 대 정확도 실험 결과의 라인 그래프;
도 10은 본 발명의 일 실시형태의 성능 실험 결과의 막대 그래프;
도 11은 본 발명의 일 실시형태의 성능 실험 결과의 막대 그래프;
도 12는 본 발명의 일 실시형태에 따른 신경망 프로세싱 유닛 또는 타일을 도시한 도면;
도 13은 본 발명의 일 실시형태에 따른 비트 직렬 내적 유닛(SIP)을 도시한 도면;
도 14A는 DaDN을 나타내는 종래 기술의 비트 병렬 프로세싱 엔진이고, 도 14B 및 도 14C는 2 사이클에 걸친 컨볼루션 레이어(convolutional layer)의 프로세싱을 도시한 도면;
도 15A 내지 도 15D는 본 발명의 일 실시형태에 따른 컨볼루션 레이어를 프로세싱하는 신경망 프로세싱 유닛을 도시하는데, 도 15A는 엔진의 구조를 도시하고, 도 15B 내지 도 15D는 신경망 프로세싱 유닛이 컨볼루션 레이어를 프로세싱하는 방법을 도시한 도면;
도 16a 내지 도 16e는 본 발명의 일 실시형태에 따른 완전히 연결된 레이어(fully-connected layer)를 프로세싱하는 신경망 프로세싱 유닛을 도시한 도면;
도 17은 본 발명의 일 실시형태에 따른 신경망 프로세싱 유닛에 의해 프로세싱되는 완전히 연결된 레이어 및 컨볼루션 레이어에 대한 레이어별 정밀도 결과(per layer precision result)를 나타내는 표;
도 18은 본 발명의 일 실시형태에 따른 신경망 프로세싱 유닛에 의해 프로세싱되는 완전히 연결된 레이어 및 컨볼루션 레이어에 대한 실행 시간 및 에너지 효율성 향상을 나타내는 표;
도 19는, 본 발명의 일 실시형태에 따른, 사이클당 2 활성화 비트를 프로세싱하는 신경망 프로세싱 유닛의 완전히 연결된 레이어 및 컨볼루션 레이어에 대한 상대적인 성능을 나타내는 표;
도 20은 본 발명의 일 실시형태에 따른 8 비트의 베이스라인 정밀도(baseline precision)를 각각 갖는 네 개의 뉴런의 그룹의 동시적 프로세싱을 도시한 도면;
도 21은 본 발명의 일 실시형태에 따른 신경망 프로세싱 유닛을 도시한 도면;
도 22는 본 발명의 일 실시형태에 따른 비트 직렬 내적 유닛(SIP)을 도시한 도면;
도 23은 일 실시형태에 따른 신경망 프로세싱 유닛의 완전히 연결된 레이어 및 시냅스/가중치에 대한 레이어별 정밀도 결과를 나타내는 표;
도 24는, 본 발명의 일 실시형태에 따른, 사이클당 2 및 4 활성화 비트를 프로세싱하는 신경망 프로세싱 유닛에 대한 실행 시간 성능 및 에너지 효율성을 나타내는 표;
도 25는 네트워크당 입력 뉴런당 1 비트(one bit) 카운트의 누적 라인 그래프;
도 26은 본 발명의 일 실시형태에 따른 비트 직렬 내적 유닛(SIP)을 도시한 도면;
도 27은 본 발명의 일 실시형태의 제로 비트 스킵 성능 실험 결과의 막대 그래프; 및
도 28A는 두 사이클에 걸친 예시적인 2b × 2b 레이어를 프로세싱하는 종래의 비트 병렬 프로세싱 엔진을 도시하고, 도 28B 내지 도 28F는 본 발명의 일 실시형태가 완전히 연결된 레이어를 프로세싱할 방법을 도시한 도면.
같은 참조 번호는 도면에서 같은 또는 대응하는 요소를 나타냈다.
도 1은, Chen 등의 [Y. Chen, T. Luo, S. Liu, S. Zhang, L. He, J. Wang, L. Li, T. Chen, Z. Xu, N. Sun, and O. Temam, "DaDianNao: A machine-learning supercomputer", in Microarchitecture (MICRO), 2014 47th Annual IEEE/ACM International Symposium on, pp. 609-622, Dec 2014]에 의해 제안되는 것과 같은 종래 기술의 비트 병렬 심층 신경망(DNN) 시스템을 나타내는 비트 병렬 타일(100)이다. 각각의 종래 기술의 비트 병렬 칩은 16개의 이러한 타일(100)을 포함한다. 각각의 타일은, 시냅스 서브레인당 하나씩의, 사이클당 256개의 시냅스를 제공하는 시냅스 버퍼(synapse buffer: SB)(110)를 갖는다. 타일은 또한, 뉴런 레인(neuron lane)(140)당 하나씩 사이클당 16개의 뉴런을 제공하는 입력 뉴런 버퍼(input neuron buffer)(NBin)(120), 및 사이클당 16개의 출력 뉴런을 수용할 수 있는 뉴런 출력 버퍼(neuron output buffer)(NBout)(130)를 갖는다. 계산 로직은, 신경 기능 유닛(Neural Functional Unit: NFU) 또는 유닛으로 칭해진다. 사이클마다, 각각의 NFU는 부분 출력 뉴런의 브릭(brick) oB(q, w, f)를 생성한다. 브릭은, 바람직하게는 제3 차원을 따라 인접한 16개의 요소의 콜렉션(collection), 예를 들면, o(q, w, f), …o(q, w, f + 15)로서 정의되는데, 바람직하게는, 이 경우, f는 16에 의해 나누어질 수도 있다. NFU는, 하나의 입력 뉴런 브릭 nB(x, y, i) 및 16개의 필터: sB f (k, l, i) 내지 sB f + 15 (k, l, i)의 각각으로부터 하나씩의 16개의 시냅스 브릭을 프로세싱하는 것에 의해 그렇게 한다. 이 목적을 위해, NFU는 16개의 뉴런 레인(140) 및 16개의 필터 레인(150)을 구비하는데, 각각은 총 256개의 시냅스 레인에 대해 16개의 시냅스 레인(160)을 갖는다.
각각의 뉴런 레인(140)은 16개의 필터 레인(150)의 각각으로부터 하나씩의 16개의 시냅스 서브레인(160)에 연결된다. 시냅스 레인(160)은 자신의 시냅스에 입력 뉴런을 곱하고 필터(150)의 모든 시냅스 레인(160)으로부터의 16개의 곱은 부분 합계로 환산된다. 전체에서, 필터 레인(150) 각각은, 유닛당 총 16개의 출력 뉴런에 대해, 사이클마다 부분 합계를 생성한다. 하나의 출력 뉴런의 생성에 관련되는 로직을 내적 유닛(inner product unit: IP)(170)으로 지칭한다. 일단 전체 윈도우가 프로세싱되면, 16개의 결과적으로 나타나는 합계가 비선형 활성화 함수 f를 통해 공급되어 16개의 출력 뉴런을 생성한다. 사이클당 곱셈 및 환산은, 시냅스 서브레인(160)당 하나씩의 256개의 곱셈기 및 출력 뉴런당 하나씩의 열여섯 개의 17-입력 가산기 트리(17-input adder tree)로서 구현된다(NBout(130)으로부터의 부분 합계를 더한 16개의 곱).
비트 병렬 시스템의 목적은, 온칩 컴퓨팅 활용을 최대화하면서, 오프 칩 대역폭을 최소화하는 것으로 명시된다. 오프 칩으로부터 시냅스를 페치하는(fetch) 것을 방지하기 위해, SB(110)는, 최상의 클래스의 네트워크를 위해 프로세싱되고 있는 레이어(들)에 대한 모든 시냅스를 저장하는 것을 허용하는 NFU당 하나씩의 2MB 청크에 분산되는 32MB eDRAM이다. 전반적으로, 비트 병렬 노드는, 유닛당 16개씩의, 최대 256개의 필터를 병렬로 프로세싱할 수 있다. 초기 입력 및 최종 출력을 제외한 모든 레이어간(inter-layer) 뉴런 출력은, 공유된 4MB 중앙 eDRAM, 또는 뉴런 메모리(Neuron Memory: NM)에 저장된다. 오프 칩 액세스는, 단지, 입력 이미지를 판독하기 위해, 레이어당 한 번 시냅스에 대해, 그리고 최종 출력을 기록하기 위해 필요로 된다.
프로세싱은 외부 메모리로부터 제1 레이어의 필터 시냅스, 및 입력 이미지를 판독하는 것에 의해 시작된다. 시냅스는 SB를 통해 분포되며 입력은 NM 안으로 저장된다. 각각의 사이클에서, 입력 뉴런 브릭 nB(x, y, i)가 모든 유닛으로 브로드캐스팅된다. 레이어의 출력 뉴런은 NBout(130)을 통해 NM에 저장되고, 그 다음, 다음 레이어를 프로세싱할 때 NBin(120)를 통해 피드백된다. 외부 메모리로부터 시냅스의 다음 세트를 로딩하는 것은, 필요에 따라, 현재 레이어의 프로세싱과 중첩될 수 있다.
비트 직렬 프로세싱
한 실시형태에 따르면, 도 2에 도시되는 바와 같은 비트 직렬 타일(200)은, 뉴런의 발화(firing)를 저장하기 위해 활성화 메모리를 사용할 수도 있다. 사용되는 바와 같은 용어 "활성화 메모리" 및 "뉴런 메모리"는, 기술 분야 및 문헌에서 상호 교환 가능하며, 동일하게 제한 없이 본원에서 적용되어야 한다는 것이 알려져 있다. 활성화 메모리는, 비트 직렬 가속기의 소망되는 구현에 따라 전용될 수도 있거나, 공유될 수도 있거나, 분산될 수도 있거나, 또는 이들의 조합일 수도 있다. 따라서, 하나의 실시형태에서, 비트 직렬 타일(200)은 동일한 NM 판독 및 기록 인터커넥트 구조를 사용할 수도 있고 사용된 정밀도에 관계 없이 뉴런을 NM의 16 비트 컨테이너에 저장할 수도 있다. 비트 직렬 가속기는, 현존하는 비트 병렬 인터페이스(bit-parallel interface)를 사용하여 NM으로부터 뉴런을 판독하는 디스패처 유닛을 도입할 수도 있고, 동시에 그 뉴런을 NFU에 비트 직렬로 공급할 수도 있다. 각각의 비트 직렬 타일은 또한, 출력 뉴런을 NM에 저장하기 위해 리듀서 유닛을 사용한다.
한 실시형태에 따르면, 비트 직렬 DNN 가속기가 뉴런에 대해 비트 직렬 계산을 사용할 수도 있기 때문에, 그것은 비트 병렬 DNN보다 더 많은 뉴런을 병렬로 프로세싱할 수도 있고 그 결과 그것은 최대 정밀도가 사용되는 경우 필적하는 성능을 유지할 수도 있다. 예를 들면, 최악의 경우, 비트 직렬 DNN 가속기는 16 비트 뉴런을 수반하는 곱을 계산하기 위해 16 사이클을 사용할 수도 있다. 16 뉴런 브릭을 병렬로 프로세싱할 수도 있는 비트 병렬 타일에 비교하기 위해, 비트 직렬 타일은 16개의 브릭, 또는 256개의 뉴런을 병렬로 프로세싱할 수도 있다. 컨볼루션 레이어의 병렬성은 뉴런을 병렬로 프로세싱하기 위한 다수의 옵션을 제공한다.
한 실시형태에 따르면, 도 2에서 도시되는 바와 같은 비트 직렬 타일(200)은, 각각의 윈도우로부터의 뉴런 브릭을 사용하여 16개의 윈도우를 병렬로 프로세싱하는 능력을 가지며, 그 결과, 16 × 16 출력 뉴런을 병렬로 계산하기 위해 16개의 필터의 각각으로부터의 동일한 16개의 시냅스가 사용될 수 있다. 예를 들면, 2의 보폭을 갖는 레이어의 경우, 비트 직렬 타일은, 사이클당 뉴런당 단일의 비트씩, 16개의 뉴런 브릭 nB(x, y, i), nB(x + 2, y, i) 내지 nB(x + 30, y, i)을 병렬로 프로세싱할 수도 있다. 이 경우, 비트 직렬 타일이 필터 fi 내지 fi + 15를 프로세싱한다는 것을 가정하면, p 사이클 이후에, 그것은 다음의 부분 출력 뉴런을 생성할 것이다: oB(x/2, y/2, fi) 내지 oB(x/2 + 15, y, fi), 또는 16개의 x 차원 상에서 인접한 출력 뉴런 브릭의 팰릿(pallet). 비트 병렬 타일(100)이 16 사이클에 걸쳐 16개의 뉴런 브릭을 프로세싱할 수도 있는 반면, 비트 직렬 타일(200)은 그들을 동시적으로 그러나 p 사이클에 걸쳐 비트 직렬로 프로세싱할 수도 있는데, 여기서 p는 비트 단위의 뉴런의 길이 또는 정밀도이다. p가 16보다 더 작으면 비트 직렬 타일(200)은 16/p만큼 비트 병렬 타일(100)보다 성능이 우수할 수도 있고, p가 16인 경우, 비트 직렬 타일은 비트 병렬 타일 성능과 이상적으로 매치할 수도 있다.
타일 편제(Tile Organization)
도 2에서 도시되는 바와 같은 실시형태에 따르면, 비트 직렬 타일(200)은 다음과 같이 편제될 수도 있다: 타일의 NBin(220)은 16개의 윈도우 레인(240)에서 논리적으로 편제될 수도 있는데, 여기서, 각각은 총 256개의 뉴런 레인에 대해 16 비트 직렬 뉴런 레인(280)의 그룹을 포함할 수도 있다. 각각의 윈도우 레인(240)은 16개의 입력 뉴런 어레이 윈도우 중 하나를 프로세싱할 수도 있다. 일 실시형태에 따르면, SB(210)는 비트 병렬 타일(100)과 동일할 수도 있고, 16개의 필터 레인(250)에서 논리적으로 편제될 수도 있는데, 여기서, 각각은 16개의 시냅스 레인(260)을 포함할 수도 있다. SB(210) 및 NBin(220)은 16 × 16 직렬 내적(SIP) 서브유닛(270)의 어레이와 통신할 수도 있거나 또는 그 어레이에 연결될 수도 있는데, 여기서 각각의 SIP(270)는 하나의 출력 뉴런을 생성할 수도 있다. 행 f 및 열 w에서의 SIP(f, w)(270)는 필터 레인 f 및 뉴런 윈도우 w를 프로세싱할 수도 있다. SB 필터 레인 f는, 인터커넥트, 예를 들면 버스를 통해, 행 f를 따르는 모든 SIP(270)와 통신할 수도 있거나 또는 그 모든 SIP(270)에 연결될 수도 있는 반면, NBin 윈도우 레인 w는, 인터커넥트, 예를 들면, 버스를 통해, 열 w를 따르는 SIP와 통신할 수도 있거나 또는 그 SIP에 연결될 수도 있다. 각각의 SIP(270)는, 시냅스 레지스터(synapse register: SR) 상으로 래치될 수도 있는 시냅스 브릭 및 16 뉴런 비트를 입력으로서 수용할 수도 있다. SR은 완전히 연결된 레이어를 지원할 수도 있다. 도 2(및 다른 후속하는 도면)이 비트 직렬 타일을 하드웨어로서 설명하지만, 비트 직렬 타일은, GPU(그래픽 프로세싱 유닛)와 같은 프로세서 상에서 소프트웨어로 에뮬레이팅될 수도 있고 비슷한 성능 향상을 생성할 수도 있다.
한 실시형태에 따르면, SIP(270)가 도 3에서 도시된다. 각각의 SIP(270)는 총 256개의 17-입력 가산기 트리를 위한 17-입력 가산기 트리(310)를 포함할 수도 있고, 반면 비트 병렬 IP는 단지 16개(IP당 하나)만을 사용할 수도 있다. 그것은 비트 직렬 타일(200)에 대해 면적을 상당히 증가시킬 것처럼 보일 수도 있지만, 그러나, 각각의 비트 병렬 IP(170)는 256개의 2 입력 16 비트 곱셈기를 필요로 하고, 반면 비트 직렬 IP(270)는, 아무 것도 필요로 하지 않아서, 면적 증가를 어느 정도 상쇄한다.
한 실시형태에 따르면, 비트 직렬 타일(200)에서의 프로세싱은 p 사이클의 위상(phase) 각각에서 진행할 수도 있는데, 여기서, p는 비트 단위의 뉴런의 정밀도이다. 위상의 제1 사이클에서, SB(210)는, 필터당 하나의 브릭씩, 16 비트 시냅스의 16개 브릭을 제공할 수도 있다. 각각의 SIP(270)는 자신의 대응하는 시냅스 브릭을 자신의 SR에서 래치한다. 사이클마다, NBin(220)은 256개의 뉴런 비트를 제공할 수도 있고, 각각의 뉴런 비트는, 동일한 열을 따르는 SIP(270)당 하나씩의, 16개의 시냅스와 비트 단위로 AND 연산될 수도 있다. 각각의 AND 연산은 16 비트 항을 생성할 수도 있다. 따라서, 각각의 SIP(270)는 하나의 필터(250) 및 하나의 윈도우(240)에 대응하는 16개의 항을 계산할 수도 있다. SIP(270)는, 전용 16 입력 가산기 트리(310)를 사용하여 자신의 16개의 항을 부분 출력 뉴런으로 합산할 수도 있다. 위상의 나머지 p-1 사이클에 대해, 각각의 SIP(270)는, 비트 직렬 곱셈을 구현하는 다른 16개의 항을 누산하면서, 자신의 부분 출력 뉴런을 1 비트만큼 시프트할 수도 있다. p 사이클 이후, 256개의 16 비트 부분 출력 뉴런과 동일한 출력 뉴런 팰릿이 완전히 생성될 수도 있다.
내적 유닛
설명된 구현예에서, 비트 직렬 유닛(200)은 다수의 사이클에 걸쳐 256개의 출력 뉴런을 동시적으로 그리고 비트 직렬로 생성할 수도 있다. 각각의 출력 뉴런 계산은 내적이다. 비트 병렬 시스템(100)이 16개의 입력 뉴런 및 16개의 시냅스의 이러한 내적을 한 번에 계산하지만, 비트 직렬 시스템(200)은 상이하게 그렇게 할 수도 있다. 비트 직렬 시스템(200)에서, 각각의 출력 뉴런에 대해 그리고 각각의 사이클에서, 16개의 시냅스와 함께 16개의 입력 뉴런의 각각으로부터의 1 비트가 결합될 수도 있다.
뉴런을 비트 직렬로 곱하는 것은 간단한데, 여기서, 뉴런은 직렬로 공급되고 시냅스는 병렬로 공급된다. 구체적으로, 길이 p 비트의 입력 뉴런 n이 주어진다면, n의 2진 표현은 다음과 같다
Figure 112018129367203-pct00001
nb는 n의 b 번째 비트이다. 시냅스 s가 주어지면, 곱셈 s × n은 다음과 같이 재작성될 수 있다
Figure 112018129367203-pct00002
이것은 회로 구현으로 이어지는데, 여기서 nb × s는 AND이고, 2b와의 곱셈은 시프트이고, 합산은 p 사이클에 걸쳐 누산기를 사용하여 수행된다.
이것을 비트 병렬 시스템에 단순하게 적용하기 위해, 병렬 곱셈기의 각각을 직렬 곱셈기로 변환하는 것이 가능할 수도 있다. 그러나, 이 설계는, 덧셈의 교환 속성을 사용하는 것에 의해 단순화될 수도 있다. 공식적으로, 상기 식의 내적의 항은 다음과 같이 재편제될 수도 있는데, 여기서 nb는 n의 b 번째 비트이고 Ni = 16은 벡터의 사이즈이다.
Figure 112018129367203-pct00003
논리의 관점에서, 이것은, 가산기 트리를 사용하여 곱셈
Figure 112018129367203-pct00004
에 대한 환산을 먼저 수행할 수도 있고, 그 다음 결과적으로 나타나는 합계에 대해 시프트 및 누산을 수행할 수도 있다는 것을 나타낸다. 이것은, 시프트된 누산기를, 가산기 트리의 16개 입력의 각각으로부터 출력 상의 단지 하나로 이동시키는 것에 의해 직렬 내적 유닛을 단순화한다. 도 3은 결과적으로 나타나는 직렬 내적 회로(SIP)(270)를 도시한다. 부호가 있는 2의 보수 뉴런을 지원하기 위해, SIP(270)는, MSB가 1인 경우의 부분 합계로부터, 직렬 입력 뉴런으로부터의 MSB에 대응하는 시냅스를 감산할 수도 있다. 이것은, 가산기 트리(310) 이전의 각각의 시냅스에 대해 부정 블록(negation block)(320)을 사용하여 행해진다. Ni보다 더 큰 내적을 지원하기 위해, 데이터는 NBout(230)로부터 다시 판독되고 누산기(330)를 초기화하기 위해 사용될 수도 있다. 각각의 SIP(270)는 또한, 최대 풀링 레이어(max pooling layer)를 지원하는 비교기(max)(340)를 포함할 수도 있다.
디스패처
비트 병렬 시스템의 뉴런 메모리(400)는 브릭, 즉 16개의 16 비트 뉴런, 또는 사이클당 256 비트를 모든 타일(200)에 브로드캐스팅할 수도 있고, 각각의 타일(200)은 상이한 필터를 통해 동일한 브릭을 프로세싱할 수도 있다. 비트 직렬 시스템은 또한 사이클당 256 비트를 모든 타일(200)에 브로드캐스팅할 수도 있지만, 그러나, 여기서, 각각의 비트는 상이한 뉴런에 대응할 수도 있다. 일 실시형태에 따르면, 비트 직렬 시스템은, 비트 병렬 시스템에서와 같이 중앙 뉴런 메모리(NM)(400)에서 동일한 뉴런 저장 컨테이너 포맷을 유지하여, 각각의 뉴런을 16 비트 세분화에서 정렬할 수도 있다. 디스패처 유닛(500)은 도 4에서 도시되는 바와 같이 NM(400)으로부터 뉴런을 판독하고 그들을 제1 인터페이스를 통해 비트 직렬 타일에 비트 직렬로 공급하는 과제를 맡을 수도 있다.
NM(400)으로부터 필요한 뉴런을 판독하는 것은, 단위 보폭(unit stride)을 사용하여 레이어를 먼저 고려하는 것에 의해 가장 잘 이해될 수도 있다. 이 경우에, 각각의 사이클에서, 비트 직렬 유닛은, x 차원 브릭을 따라 인접하는 16개의 브릭: nB(x, y, i)), nB(x + 1, y, i) 내지 nB(x + 15, y, i)으로부터 비트를 공급받을 수도 있다. 이들 16개의 뉴런 슬라이스가 병렬로 판독될 수도 있다면, 디스패처(500)는 다음 p 사이클에 걸쳐 그들을 비트 직렬로 공급할 수도 있다. 16개의 브릭을 병렬로 판독하는 것을 가능하게 하기 위해, 비트 직렬 시스템은 그들을 NM(400)의 연속적인 위치 상에 매핑할 수도 있다. 많은 경우, 이것은, 16개의 브릭이 동일한 NM 행 상으로 저장되는 것으로 나타날 수도 있다. 이 경우, 디스패처(500)는 그들 모두를 단일 사이클에서 판독할 수도 있다(2MB NM이 여러 개의 서브어레이를 포함하면, 256개의 뉴런을 병렬로 판독하는 것이 가능하다).
입력 뉴런 어레이 y 차원뿐만 아니라, 보폭에 따라, 16개의 브릭은 두 개의 NM 행에 걸쳐 확산될 수도 있다(이것은 데이터 캐쉬로부터 오정렬된 블록을 판독하는 것과 유사하다). 이 경우, 디스패처(500)는, 자신이 비트 직렬 타일(200)에 공급할 수 있기 이전에, 두 사이클 동안 최대 두 개의 행으로부터 적절한 브릭을 판독하여 결합해야 할 수도 있다. p가 적어도 2인 한, 16개 브릭의 다음 세트는, p 사이클이 경과할 때까지, 필요로 되지 않을 수도 있다. 따라서, 전체 프로세스가 파이프라인식으로 될 수도 있고 따라서 비트 직렬 시스템은 거의 모든 시간을 사용 중인 상태로 유지될 수 있다.
한 실시형태에 따르면, 도 6은 두 개의 윈도우 및 2의 보폭을 갖는 예를 도시한다. 보폭 S가 1보다 더 큰 경우, 16개의 브릭은 R = min[S + 1, 16] 행에 걸쳐 확산될 수도 있다. 따라서, 디스패처(500)는 256개의 뉴런의 다음 세트를 타일에 공급하기 이전에 R 사이클에 걸쳐 R 행을 판독할 수도 있다. R이 p보다 더 작은 한, 유닛을 항상 사용 중인 상태로 유지할 충분한 시간이 있을 수도 있다. R이 p보다 더 크면, R-p 사이클 동안 유닛이 정지할 수도 있다. 보폭을 고려하여 브릭을 NM(400)에 매핑하는 것에 의해, 디스패처(500)가 판독할 수도 있는 행의 수를 감소시키는 것이 가능할 수도 있다.
상기에서 설명되는 바와 같이, 레이어 보폭 S가 주어지면, 디스패처는, 사이클당 하나씩 16개의 브릭을 수집하기 위해, 최대 max[S + 1, 16] 행을 판독할 수도 있다. 이들 16개의 브릭이 주어지면, 그 다음, 디스패처(500)는, 사이클당 총 256 비트에 대해서, 그들이 포함하는 256개의 뉴런의 각각으로부터의 1 비트를, p 사이클에 걸쳐, 비트 직렬 타일(200)로 전송할 수도 있다. 도 5에서 도시되는 실시형태에 따르면, 디스패처(500)는 두 부분으로 구성될 수도 있다: 셔플러(shuffler)(510) 및 트랜스포저(transposer)(520). 셔플러(510)는 NM으로부터 16개의 브릭을 판독할 수도 있고 트랜스포저(520)는 그들을 타일(200)로 비트 직렬로 전달할 수도 있다. 디스패처(500)는 p 사이클마다 16개의 브릭의 새로운 세트를 전달할 수도 있다.
도 5에서 도시되는 바와 같은 일 실시형태에 따르면, 셔플러(510)는 비트 직렬 유닛을 p 사이클에 걸쳐 사용 중인 상태로 유지하기 위해 16개의 브릭을 수집할 수도 있다. 16개 브릭의 다음 그룹의 수집은, 현재 그룹의 프로세싱과 중첩될 수도 있다. 따라서, 셔플러(510)는 p 사이클마다 16개 브릭 그룹을 수집할 수도 있다. 각각의 사이클에서, 셔플러(510)는 NM(400)으로부터 256개의 뉴런의 행을 판독할 수도 있다. 브릭이 NM(400)에 연속적으로 저장될 수도 있기 때문에, 모든 행은 16개의 브릭을 포함할 수도 있다. 그러나, 이들 브릭의 모두는 주어진 시간에 필요로 되지 않을 수도 있다. 적절한 브릭이 입력 행에 나타날 때 그것을 선택하기 위해서는 출력 브릭당 16 대 1 멀티플렉서가 충분할 수도 있다. 따라서, 셔플러(510)는 16개의 16 대 1의 256 비트(16개의 뉴런 16 비트 컨테이너의 하나의 브릭) 멀티플렉서를 포함할 수도 있다. 입력 뉴런은, 입력 브릭당 하나씩, 16개의 그룹에 편제되는 256개의 16 비트 레지스터 상에 수집될 수도 있다. 일단 셔플러(510)가 16개의 브릭 모두를 수집하면, 셔플러(510)는 그들을 트랜스포저(520)의 입력 레지스터로 전송할 수도 있다.
도 5에서 도시되는 실시형태에 따르면, 트랜스포저(520)는, 셔플러에 의해 메모리로부터 판독되는 뉴런을 직렬 비트 스트림으로 변환할 수도 있다. 일단 셔플러(510)가 16개의 브릭 모두를 수집하면, 셔플러(510)는 그들을 256개의 16 비트 레지스터에 비트 병렬로 기록할 수도 있다. 각각의 레지스터는, 16 비트의 비트 병렬 기록 포트, 및 단일 비트의 비트 직렬 판독 포트를 제공한다. 다음 p 사이클에 걸쳐, 트랜스포저(520)는, 사이클당 총 256 비트에 대해 뉴런당 1 비트를 출력한다. 이들은, 비트 병렬 시스템과 마찬가지로, 인터커넥트를 사용하여 모든 NFU로 브로드캐스팅된다.
리듀서
한 실시형태에 따르면, 비트 직렬 시스템의 NFU는 16 비트 고정 소수점 포맷으로 출력 뉴런을 생성할 수도 있다. 리듀서 유닛(600)은 두 가지 목적을 서비스할 수도 있다: 1) 출력 레이어에 의해 사용되는 정밀도로 변환하는 것, 및 2) 출력 뉴런 브릭을 제3 인터페이스를 통해 NM에 기록하는 것. 일 실시형태에 따르면, 출력 뉴런을 제3 인터페이스(이것은 제1 인터페이스와 동일한 인터페이스일 수도 있음)를 통해 NM에 다시 기록하는 것은, 비트 병렬 시스템에서와 동일한 인터페이스 또는 인터커넥트를 사용할 수도 있다. 차이점은, 비트 직렬 시스템이 비트 병렬 시스템보다 성능이 우수하기 때문에, 더 높은 출력 뉴런 대역폭 요구를 나타낼 수도 있다는 점이다. 다행스럽게도, 출력 뉴런을 계산하는 것이 전체 입력 뉴런 윈도우를 프로세싱하는 것을 수반하기 때문에, 현존하는 인터커넥트에서 이 요구를 충족시킬 충분한 시간이 존재한다. 예를 들면, 비트 병렬 시스템이 단일의 출력 뉴런 브릭, 또는 16개의 출력 뉴런을 동시적으로 생성할 수도 있지만(예를 들면, oB(x, y, fi)), 비트 직렬 시스템은 x 차원을 따라 인접한 16개의 브릭(예를 들면, oB(x, y, fi) 내지 oB(x + 15, y, fi))을 포함하는 256개의 출력 뉴런의 팰릿을 생성할 수도 있다. 이 팰릿은, 다음 레이어를 프로세싱할 때 디스패처에 의해 예상될 수도 있는 바와 같은 NM 주소 공간에 연속적으로 저장될 수도 있다. 비트 직렬 타일은 베이스라인에서와 같이 한 번에 단일의 브릭을 전송할 수도 있고 16개 모두를 기록하기 위해 다수의 사이클을 필요로 할 수도 있다. 타일이 사이클당 단일의 브릭을 기록할 수도 있기 때문에, 그리고 브릭이 NM 행에 걸칠 수 없을 수도 있기 때문에, 오정렬된 브릭 기록을 지원하는 것은 필요로 되지 않을 수도 있다.
비트 직렬 시스템이 비트 병렬 시스템보다 성능이 우수할 수도 있는 경우, 그 계산 처리량은 16/p만큼 증가된다. 레이어가 상대적으로 작으면, 원칙적으로, 모든 출력 뉴런을 소모하기 위한 여분의 사이클을 필요로 하는 것이 가능하다. 그러나, 베이스라인 출력 뉴런에서 조차도, 출력 뉴런을 생성하는 것이 전체 입력 뉴런 윈도우를 프로세싱하는 것을 수반할 수도 있기 때문에, 출력 뉴런은 계산되기 위해서는 통상적으로 수백 사이클을 필요로 할 수도 있다. 따라서, 출력 브릭을 기록할 충분한 시간이 존재할 수도 있다.
한 실시형태에 따르면, 뉴런은 비트 인터리빙 양식(bit-interleaved fashion)으로 NM에 저장될 수도 있다. 하나의 액세스에서 256개 전체 뉴런을 판독하고 그 다음 그들을 비트 직렬 형태로 변환하는 대신, 256 비트의 뉴런은 비트 병렬 인터페이스를 사용하여 판독될 수도 있는데, 여기서 이들은 256개의 뉴런의 비트 0이다. 다음 사이클에서, 모두 256개의 뉴런의 비트 1을 판독할 수도 있고, 그 다음, 다음 비트로 계속 진행한다. 이 경우, 리듀서는 적절한 변환을 행할 것이다.
완전히 연결된 레이어에 대한 실행
비트 병렬 시스템은, 완전히 연결된(fully connected: FC) 레이어를, 필터 치수가 입력 뉴런 어레이의 것과 매치하는 컨볼루션 레이어로서 계산할 수도 있다. 이 경우, 비트 병렬 시스템의 성능과 매치할 상이한 데이터 액세스 및 실행 스케줄을 갖는 단지 하나의 윈도우만이 존재할 수도 있다. 컨볼루션 레이어를 프로세싱할 때, 시냅스는 p 사이클마다 단지 한 번만 제2 인터페이스를 통해 판독될 수도 있다. FC 레이어를 프로세싱하기 위해, 비트 직렬 유닛은 단일의 SB 판독 포트 및 버스를 통해 사이클당 하나의 SIP 열씩 라운드 로빈 양식(round-robin fashion)으로 시냅스를 로딩하여, 모든 SIP를 프로세싱 중인 뉴런 상태로 유지할 수도 있다. 예를 들면, 도 3을 참조하면, 유닛이 256개의 시냅스를 사이클 0에서 SIP(0,0)...SIP(0,15)로 로딩할 수 있고, 그 다음, 다음 256개의 시냅스를 사이클 1에서 SIP(1,0)...SIP(1,15)로 로딩할 수 있고, 계속 이런 식일 수 있다. 시냅스의 로딩은, 시냅스의 로딩과 동기화하도록 뉴런 스트림을 엇갈리게 하는 것에 의해, 뉴런을 프로세싱하는 것과 중첩될 수도 있다.
이러한 동작 모드(라운드 로빈 시냅스 로딩 및 스태거형(staggered) 뉴런 스트림)는 제어에 대한 수정을 필요로 할 수도 있다. 표 1(바로 아래)은, 처음 17 사이클을 프로세싱하는 동안 시냅스 로딩과 계산이 어떻게 중첩되는지를 예시하는 예를 나타낸다.
Figure 112018129367203-pct00005
이 접근법은, 시냅스 대역폭이 병목이 되는 경우의 공통적인 전략인, 배취화(batching)가 사용될 때 FC 레이어에 대한 성능을 향상시킬 수도 있다. 배취화는 한 번에 다수의 이미지에 걸쳐 각각의 레이어를 계산하고, 그 결과 시냅스는 상이한 이미지로부터의 뉴런에 대해 재사용될 수도 있다. 이 경우, SIP에 로딩되는 각각의 시냅스는 p × b 사이클 동안 사용될 수도 있는데, 여기서 b는 배취 사이즈이다.
단일의 이미지를 프로세싱할 때 비트 병렬 시스템에 비해 성능 향상이 있을 수도 있거나 또는 그렇지 않을 수도 있지만, 비트 직렬 FC 레이어에서 더 짧은 정밀도를 사용하는 것은, 매 16 사이클 중 16 - p 사이클 동안 각각의 SIP 열에 대한 계산을 방지하는 것에 의해 에너지를 감소시킬 수도 있다. 대안적으로, p 개의 SIP 컬럼만이 그 경우에 사용될 수 있고, 다른 SIP는 토글링하지 않는 것에 의해 전력을 절약할 것이거나 또는 전력 게이트화(power gating)로 완전히 턴 오프될 수 있다. 실험 결과는 뉴런 스트림을 엇갈리게 하는 것으로부터 작은 오버헤드를 나타냈는데, 이것은 평균해서 레이어 런타임의 0.16%였다. FC 레이어를 가속화하는 것에 의해 성능을 추가로 향상시키는 것에 대한 잠재성은, 그들이 오버헤드 실행 시간의 작은 부분만을 고려하기 때문에, 아주 작을 가능성이 있다. 또한, DNN에서의 현재의 추세는, FC 레이어의 수를 감소시키거나 또는 제거하기 위한 것이다.
풀링 레이어
풀링 레이어에 대해, 뉴런은 NM으로부터 비트 병렬로 송신되고, SIP의 가산기 트리를 우회한다. 디스패처는 256 비트/사이클에서 직렬 데이터를 브로드캐스팅하도록 설계되고, 반면 풀링 레이어는, 뉴런이 타일 전역에 분산될 때 4096 비트/사이클을 판독한다. 최대 풀링은 SIP의 비교기를 사용하여 지원된다. 평균 풀링은, SIP에 뉴런을 축적하고 활성화 유닛을 사용하여 결과를 스케일링하는 것에 의해, 지원된다. 로컬 응답 정규화 레이어는, 디스패처의 제한된 대역폭에 기인하여 내적 유닛을 사용하고, 베이스라인 성능과 매치하는 동안 직렬화되지 않을 수도 있다.
레이어별 정밀도의 전달
이 실시형태는, 레이어별 정밀도가 사전 계산되어, 각각의 레이어의 치수, 패딩 및 보폭과 같은 네트워크의 다른 메타데이터와 함께 제공될 수도 있다는 것을 가정한다. 런타임시 정확도 대 성능 절충(tradeoff)을 가능하게 하기 위해, 레이어별 정밀도의 몇몇 완전한 프로파일이 DNN에 의해 제공될 수도 있다. 이 메타데이터 정보는 비트 직렬 컨트롤러에 의해 판독될 수도 있고, 유닛, 디스패처 및 리듀서의 동작을 제어하기 위해 사용될 수도 있다.
런타임시 뉴런 그룹별 정밀도의 결정
다른 실시형태에 따르면, 정밀도 p는 동시적으로 프로세싱되는 256개의 뉴런의 각각의 그룹에 대해 동적으로 조정된다. 이 결정은, 프로세싱을 위해 뉴런을 유닛으로 전달하기 이전에, 트랜스포저에 의해 수행된다. 유닛 ni(여기서 i = 0 ... 255)로 전송될 256개의 뉴런의 각각에 대해, 트랜스포저는 1인 비트가 나타내는 최고 비트 위치인 ni H를 결정하기 위해 1인 리딩 비트(leading bit) 검출기를 사용한다. 마찬가지로, 트랜스포저는, 1인 비트가 나타나는 가장 낮은 비트 위치인 ni L을 결정하기 위해 1인 트레일링 비트(trailing bit) 검출기를 사용한다. 뉴런의 이 세트에 대한 정밀도 p는 다음과 같이 효과적으로 설정된다: maxi = 0...255 {ni H} - mini = 0...255{ni L}. 이들 뉴런을 프로세싱하기 위해, 트랜스포저는, 여분의 4 배선(wire)의 세트를 통해 비트와 함께 그들의 오프셋을 또한 전송한다. 추가적인 배선은 뉴런 그룹의 프로세싱의 종료를 나타낸다. 따라서, 정밀도를 명시적으로 계산하는 것은 불필요하다. 실무자에 의해 널리 이해되고 있는 다양한 리딩 또는 트레일링 비트 1 검출기 회로가 존재한다.
비트 평행 타일에 대한 비교
컨볼루션 레이어는 고도로 평행하기 때문에, 더 많은 타일을 추가하는 것에 의해 병렬성을 활용하는 것에 의해 비트 병렬 시스템의 성능을 향상시키는 것이 제안되었다. 후속 예에서 나타나는 바와 같이, 비트 직렬 시스템은 타일 면적을 최대 24%까지 증가시킬 수도 있다. 이상적인 성능 스케일링을 가정하면, 비교를 위해, 이 여분의 면적을 사용하여 비트 병렬 시스템에서 추가적인 24% 더 많은 타일을 도입할 수도 있다. 실제로, 모든 뉴런 레인을 사용 중인 상태로 유지하는 것은 불가능할 수도 있기 때문에, 이상적인 스케일링은 가능하지 않을 수도 있다. 예를 들면, 비트 병렬 칩은, 한 레이어에 256개의 필터(16개의 타일의 각각에 16개의 필터)의 배수가 존재하는 한의 경우에만, 완전히 활용될 수 있다. 결과적으로, 레이어에 따라, 유닛이 충분히 활용되지 못하는 경우가 존재하고 더 많은 유닛을 갖는 것은 이러한 경우를 더욱 일반적으로 만들 것이다.
비트 병렬 성능이 비트 직렬과 동일한 면적 오버헤드를 가지고 24%만큼 스케일링될 수도 있다는 최상의 가능한 가정을 취하는 경우에도, 그 예는, 비트 직렬이 여전히 이 대안예보다 성능이 우수할 수도 있고 따라서 더 나은 면적 대 성능 스케일링을 제공할 수도 있다는 것을 나타낸다. 또한, 비트 직렬 접근법은, 비트 병렬 설계에서는 불가능할 수도 있는 정적인 또는 런타임의 성능 대 정확도 절충을 가능하게 할 수도 있다.
분해 가능한 프로세싱 유닛에 대한 비교
감소된 정밀도로부터 성능을 획득하는 일반적인 현재의 접근법은, 분해 가능한 곱셈기 및 가산기를 사용하는 것이다. 예를 들면, 16 비트 가산기는 최소한의 오버헤드를 가지고 두 개의 8 비트 가산기로 쉽게 구성될 수도 있다. 이 접근법은, 범용 프로세서의 멀티미디어 명령어 세트 확장에서 일반적으로 사용된다. 이것이 각각의 연산의 레이턴시를 증가시키지 않기 때문에, 그것은 계산 처리량을 증가시키기 위해 사용될 수도 있다.
신경망의 특성을 고려하는 경우, 분해 가능한 유닛은, 그들을 불리하게 하는 세 개의 제약을 갖는다: 1) 분해 가능한 유닛은 통상적으로 2의 거듭제곱의 정밀도로 제한되는데, 그들이 가변적인 감소된 정밀도의 잠재적인 이익 모두를 산출할 수 없다는 것을 의미한다. 예를 들면, 9 비트만을 필요로 하는 레이어는 16 비트(24)를 사용할 것이다, 2) 분해 가능한 유닛은 입력 둘 다가 동일한 폭인 것을 필요로 한다. 신경망의 경우, 이들은 가중치 및 뉴런이며, 가중치는 8보다 더 많은 비트를 통상적으로 필요로 하고, 결과적으로, 많은 레이어가 향상을 경험할 수 없을 수도 있다, 3) 마지막으로, 베이스라인 곱셈기 및 가산기 트리가 분해 가능하면, 데이터 및 가중치의 가장 큰 정밀도가 각각의 레이어에 대해 선택되어야 할 수도 있다. 그 예는, 비트 직렬이, 이상적인 분해 가능 유닛 기반의 비트 병렬 설계보다 성능이 우수할 수도 있다는 것을 보여준다.
실시예
이 부문은 레이어별 정밀도 프로파일 탐색 전략 및 실험 방법론을 설명한다. 수치적 표현 요건 분석을 위해, 최상의 레이어별 정밀도 프로파일은, Judd 등의 [P. Judd, J. Albericio, T. Hetherington, T. Aamodt, N. E. Jerger, R. Urtasun, and A. Moshovos, "Reduced-Precision Strategies for Bounded Memory in Deep Neural Nets, arXiv:1511.05236v4 [cs.LG]", arXiv.org, 2015]의 방법론을 통해 발견된다. 각각의 컨볼루션 레이어의 정밀도를 감소시키는 것이, 5000 개의 이미지에 걸친 네트워크의 전체 1 위 예측 정확도에 어떻게 영향을 끼치는지를 측정하기 위해, 즉 네트워크가 입력을 얼마나 자주 정확하게 분류하는지를 측정하기 위해, Caffe(카페)가 사용되었다. 네트워크 정의 및 사전 트레이닝된 시냅스 가중치는 Caffe Model Zoo(카페 모델 주)로부터 취해진다.
Judd 등이 고정 소수점 수를 I≥0 정수 및 F≥0 소수 비트(fractional bit)를 갖는 것으로 간주하였지만, 이 예는, 이진 소수점에 대한 MSB 비트 위치 M, 및 비트의 수 N으로서 숫자를 파라미터화하는 것에 의해 최하위 비트 중 일부를 드랍한다. 이것은, M, 레이어당 N∈[0, 16] 및 다수의 레이어를 갖는 지수 검색 공간 문제이다. 휴리스틱 검색 공간 프루닝 접근법(heuristic search space pruning approach)은 다음의 것이었다: 1) 한 번에 하나의 레이어씩, M을 1 비트만큼 반복적으로 감소시키면서 기울기 하강을 사용하여 최상의 레이어별 M 프로파일을 찾는 것; 및 2) 고정된 M 프로파일이 주어지면, 기울기 하강을 다시 사용하여, N 프로파일의 공간을 탐색하는 것. 단계 둘 다에서, 양호한 시작 포인트를 결정하기 위해 레이어별 분석이 사용된다.
(바로 아래의) 표 2는, 베이스라인(100%)에서와 동일한 정확도를 유지하기 위해 그리고 그것을 베이스라인(99%)의 1% 이내에서 감소시키기 위해 필요한 컨볼루션 레이어별 뉴런 정밀도 프로파일을 열거한다. Cnv: 베이스라인 시스템에서 컨볼루션 레이어에 의해 취해지는 실행 시간의 분율. Ideal: 비트 직렬 DNN에서의 잠재적인 속도 향상.
Figure 112018129367203-pct00006
성능, 면적 및 에너지에 대해, 비트 병렬 및 비트 직렬 시스템 둘 다는, 일관성을 위해 동일한 방법론을 사용하여 모델링되었다. 사용자 정의의 사이클이 정확한 시뮬레이터(custom cycle-accurate simulator)가 실행 시간을 모델링한다. 계산은 Chen 등에 의해 설명되는 바와 같이 스케줄링되었다. 전력 및 면적은, Synopsis Design Compiler(시놉시스 디자인 컴파일러) 및 TSMC 65nm 라이브러리를 통해 합성된 Verilog 구현예로부터 추출되었다. NBin 및 NBout SRAM 버퍼는 CACTI를 사용하여 모델링되었다. eDRAM 면적과 에너지는 Destiny(데스티니)를 사용하여 모델링되었다. 단일 및 배취(다수의 이미지에 대해 각각의 레이어가 동시적으로 계산되었음) 실행 둘 다가 수행된다. 배취 사이즈는, 방지하지 않으면 성능과 에너지를 심각하게 불리하게 할 뉴런 오프 칩을 누출하는 것을 방지하도록 선택된다. 측정은 전체 네트워크 실행을 통해 이루어진다.
성능 측정
도 7은 표 2의 정밀도 프로파일에 대한 비트 병렬에 대한 비트 직렬 성능을 보고한다. 배취 프로세싱이 비트 병렬 또는 비트 직렬 어느 것의 성능에도 영향을 미치지 않기 때문에, 보고된 결과는 둘 다에 적용 가능하다. 정확도가 전혀 손실되지 않은 100% 프로파일의 경우, 평균적으로 비트 직렬은 비트 병렬에 비해 2.24배의 속도 향상을 산출한다. 각각의 레이어에서 3 비트의 정밀도만을 요구하는 최상의 경우 LeNet에서, 속도 향상은 5.33배이고, 반면, NiN 및 VGG19는, 주로 그들의 높은 정밀도 요건에 기인하여, 각각 1.8배 및 1.35배의 최소 속도 향상을 나타낸다. 일반적으로, 성능 향상은 정밀도에서의 감소에 따르며, 표 2에서의 이상적인 속도 향상과 일치한다. 그 차이는, 최악의 경우 7%(NiN)인 뉴런 레인 과소 활용에 기인한다. 평균적으로, 비트 직렬은 이상적인 것의 2% 이내에 있는 속도 향상을 달성한다.
면적 오버헤드
전체 칩에 걸쳐, 비트 직렬은, 비트 병렬보다 22% 더 많은 면적을 필요로 하는 데, 그 중 1%는 디스패처에 대한 것이다. NBout 엔트리, 리듀서, 및 SIP에서의 16배 증가를 고려하여, 각각의 타일을 단독으로 고려하면, 비트 직렬은 면적을 24%만큼 증가시킨다. 비트 직렬에서의 타일당 256개의 SIP가, 256개의 곱셈기 및 16개의 가산기 트리의 비트 병렬 조합과 비교하여, 139%만큼 면적을 증가시키지만, SB는 타일당 훨씬 더 낮은 그리고 전반적인 칩 면적 오버헤드로 나타나는 타일 면적을 지배한다.
에너지 효율성 측정
도 8은 단일 모드 및 배취 모드 하에서 비트 직렬 및 비트 병렬의 에너지 효율성을 비교한다. 베이스를 기준으로 한 새로운 시스템에 대한 에너지 효율성, 또는 단순히 효율성은, 전체 네트워크 실행을 완료하기 위해 베이스에 의해 필요로 되는 에너지를 신규의 에너지로 나눈 비율 Ebase/Enew로서 정의된다. 모든 경우에 걸친 직접적인 비교를 용이하게 하기 위해, 도 8에서 보고되는 모든 효율성 측정에서, 단일 모드에서의 비트 병렬의 에너지를 분자로 사용한다.
단일 모드에 초점을 맞추면, 100% 프로파일에 대한 모든 네트워크에 걸친 비트 직렬을 통한 평균 효율성 향상은 3배이며, 최상의 경우 6배(LeNet)에서 최악의 경우 1.92배(VGG19)까지의 범위에 이른다. 2차 오버헤드를 무시하면, 효율성은 주로 레이어 당 정밀도 길이에서의 감소에 의존하는데, 그 이유는, 에너지 절약이 더 적은 뉴런 비트를 프로세싱하는 것으로부터 주로 유도되기 때문이다. 이차적으로, 에너지 절약은, 비트 직렬에서 오로지 p 사이클마다 발생하는 SB 액세스의 수를 감소시키는 것으로부터 유래한다. 비트 직렬에서의 다수의 윈도우에 걸친 시냅스의 재사용에 의해 동기 부여되어, 비트 직렬과 유사한 다수의 윈도우의 프로세싱을 인터리빙하는 비트 병렬에 대한 향상된 프로세싱 스케줄을 평가하였다. "BASE WT" 막대는 이 윈도우 타일화 접근법의 에너지 효율성을 보고하는데, 원래 제안된 스케줄보다는 더 효율적이지만, 그러나 비트 직렬보다는 여전히 덜 효율적이라는 것을 입증한다.
배취화는, 시냅스가 다수의 이미지에 걸쳐 재사용되고 따라서 SB 판독이 덜 빈번하기 때문에, 비트 병렬 및 비트 직렬 둘 다에 대한 에너지 효율성을 향상시킨다. 그러나, 비트 직렬에서 더 적은 뉴런 비트를 프로세싱하는 것으로부터의 이점은 시냅스 재사용으로부터의 것을 훨씬 능가한다. 배취 모드에서 비트 직렬에 대한 평균 에너지 효율성은 3.19배이고, 반면 비트 병렬은, 자신의 단일 모드에 비해 1.4배의 효율성을 갖는 비트 직렬보다 여전히 덜 효율적이다. 비트 병렬에서의 윈도우 타일화는 효율성을 2.03배 향상시킨다. 윈도우 타일화가 NM의 사이즈에 의해 제한을 받지 않기 때문에, 비트 병렬에서의 배취화와 비교하여, 그것은 더 큰 에너지 절약을 허용한다.
정확도 대 성능
몇몇 실시형태에서, 비트 직렬 DNN은 또한, 정적인 및 즉석의(on-the-fly) 에너지, 성능, 및 정확도 절충을 가능하게 할 수도 있다. 예를 들면, 정밀도를 감소시키는 것에 의해, 애플리케이션은 향상된 성능 및 에너지 효율성을 대가로 정확도를 감소시킬 것을 선택할 수도 있다. 이 성능은, 예를 들면, 다음에 대해 유용할 것이다: 1) 사용자 또는 오퍼레이팅 시스템이 더 길어진 시간을 대가로 약간 감소된 정확도를 선택할 수도 있는 배터리로 작동되는 디바이스에 대해, 또는 2) 애플리케이션이 덜 정확하지만 그러나 적시의 응답을 선택할 수도 있는 엄격한 시간 제약 하에서.
이 예는, 정밀도가 전체 네트워크 정확도에 영향을 미치기 시작하는 포인트로부터 정밀도를 감소시키는 것에 의해 성능을 향상시키기 위해 근사 컴퓨팅 접근법을 고려한다. 직렬 계산 및 레이어별 뉴런 정밀도를 사용하는 것에 의해 비트 직렬은 정확도와 성능 절충을 미세 조정하는 능력을 가능하게 한다. 성능이 배취화 모드가 사용되는지 또는 단일 모드가 사용되는지의 여부에 의존하지 않기 때문에, 나머지 섹션에서의 결과는 어느 하나의 프로세싱 모드에 적용 가능하다.
도 9는 네트워크 정확도와 속도 향상 사이의 절충을 도시한다. 그래프는, 비트 병렬에 걸친 정규화보다 성능 대 정확도 절충을 더욱 명확하게 나타내기 위해, 도 7의 100% 구성에 대한 성능을 나타낸다. 그래프 내의 각각의 포인트는 정확도 대 성능의 파레토 프론티어(Pareto frontier) 상의 정밀도 프로파일에 대응한다. 정확도가 90% 아래에서 급격하게 떨어지기 때문에, 베이스라인에 대한 90% 위의 프로파일로 주의는 제한된다. 모든 경우에, 감소된 정확도와 함께 추가적인 성능 향상이 가능하며, 네트워크는 정확도 대 성능 곡선에서 심한 굴곡부를 나타내는데, 이를 지나면 그들은 급격한 성능 저하를 겪게 된다. 하기의 이 섹션의 나머지는, 최대 1%의 정확도 손실이 수용 가능한 경우 가능한 성능 향상에 중점을 둔다.
도 10은, 표 2로부터의 99% 정밀도 프로파일의, 비트 병렬에 대한 속도 향상을 도시한다. 최대 1%의 상대 예측 오차를 허용하는 것에 의해, 평균 속도 향상은 2.48배, 11%의 속도 향상 증분으로 증가한다. 개개의 네트워크에 대한 속도 향상은, VGG19의 경우 1.56배로부터 LeNet의 경우 7.23배까지의 범위에 이르며 일반적으로 정밀도 길이에서의 감소를 따른다. 정확도 제약이 완화되면 각각의 레이어에서 훨씬 더 작은 정밀도를 사용할 수도 있으므로, NiN이 최대 이익을 얻는다. 도 8과 비교하면, 99% 정밀도 프로파일에 대한 효율성이 도시된다. 평균적으로, 효율성은 3.24배로 증가한다.
LeNet에 대한 99% 프로파일에서, 비트 직렬은 디스패처 정지(stall)의 유일한 인스턴스를 조우한다. 이 경우, 제1 레이어의 정밀도는 2 비트이고, 따라서 버퍼는 2 사이클에서 소모된다. NM 내의 윈도우 데이터의 몇몇 세트의 경우, 디스패처는 그 데이터를 판독하는 데 2개보다 더 많은 사이클을 필요로 하여, 디스패처로 하여금 정지되게 한다. 그러나, 이 상황은 일반적이지는 않으며, 전체 런타임의 2% 동안만 정지를 야기한다. 모든 다른 경우에, 비트 직렬은 직렬 데이터를 연속적으로 디스패치할 수 있다.
분해 가능한 계산 유닛
이것은, 상기에서 설명되는 바와 같이, 비트 직렬을, 비트 병렬의 이상적인 분해 가능한 분산에 비교하는데, 최대 16의 2개의 표현 길이의 모든 전력을 지원한다. 이 비교를 위해 NFU 활용은 비트 병렬의 모든 정밀도에 대해 동일하다는 것이 가정되는데, 예를 들면, 16 비트에서 256 곱셈을 수행하는 레이어는 8 비트에서 512 곱셈을 수행한다. 실제로, 비트 병렬에 의해 부과되는 정렬 제약에 기인하여 몇몇 레이어에 대해 활용도가 악화될 것이다.
도 11은 비트 직렬 및 이상적인 비트 병렬에 의해 달성되는 속도 향상을 비교한다. 정확도 손실이 없이, 비트 병렬은, 평균적으로, 비트 직렬에 대한 1.99배와 대비하여, 1.13배 속도 향상을 달성하고, 한편 최대 1%의 정확도 손실이 허용되는 경우, 비트 병렬 평균 속도 향상은, 비트 직렬에 대한 2.18배와 대비하여, 1.27배이다. 비트 병렬은 또한, 각각의 레이어의 정밀도가 2의 거듭제곱이고 뉴런 및 시냅스 둘 다에 대해 동일한 프로파일로 제한된다. 비트 병렬의 사이즈 제약은, 이상적인 가정 하에서 조차도, 비트 직렬에 비해, 자신의 성능 이익을 심각하게 제한한다.
완전히 연결된 레이어의 대안적인 프로세싱
다른 실시형태에서, 면적을 추가로 희생하여, 컨볼루션 레이어뿐만 아니라 완전히 연결된 레이어를 프로세싱하는 동안 성능 및 에너지 효율성을 향상시키는 것이 가능하다.
이 실시형태에서, 타일(1200)의 각각의 SIP(270a)는 이제, 도 12에서 도시되는 바와 같은 16개의 16 비트 서브레지스터의 벡터인 추가적인 직렬 가중치 레지스터(Serial Weight Register) SWR(1210)을 사용하여 증대된다. SIP(270a)가 가중치 레지스터(Weight Register) WR(1220)로 지칭되는 현존하는 레지스터를 유지하기 때문에, 컨볼루션 레이어의 프로세싱은 이전과 같이 진행된다. SWR(1210)은, 동시적으로 프로세싱된 시냅스 및 뉴런의 그룹당 max(Ps,Pa) 사이클에서 완전히 연결된 레이어의 프로세싱을 가능하게 하는데, 여기서 Ps 및 Pa는 각각 시냅스 및 활성화의 정밀도이다. 따라서, 16 비트의 비트 병렬 엔진에 비교한 성능 향상은 16/max(Ps, Pa)이다. 원래의 설계에서, 동일한 행을 따르는 SIP(270)는 모두 동일한 256개의 배선을 공유하여, 모든 16개의 WR에 대한 16개의 16 비트 가중치의 동일한 세트의 병렬 로딩을 허용한다. 이 실시형태에서, 256개 배선의 각각은 16 × 16 SWR 서브레지스터 중 하나에 연결된다. 따라서, 사이클마다, 16 × 16 = 256 SWR 서브레지스터의 각각에 상이한 비트가 로딩될 수 있다. Ps 사이클 동안, Ps 비트의 상이한 시냅스가 256개의 SWR 서브레지스터에 로딩될 수 있다. 그 다음, 이들 256개의 시냅스 값은 대응하는 WR 서브레지스터로 병렬로 로딩될 수 있고, 그 다음, 이전과 같이 대응하는 뉴런과 함께 비트 직렬로 프로세싱될 수 있다. 따라서, 이 실시형태는 3 단계 파이프 라인을 사용하는데, 여기서는, 먼저, 가중치가 SWR(1210)에 비트 직렬로 로딩되고, 그 다음, WR(1220)에 병렬로 로딩되고, 그 다음, 뉴런과 비트 직렬로 곱해진다.
도 1은 이 실시형태에 대한 예시적인 SIP(270a)를 도시한다. 각각의 SIP(270a)는 활성화마다 1 비트씩, 16개의 활성화 비트를 16개의 가중치로 곱하여 출력 활성화를 생성한다. 각각의 SIP(270a)는 두 개의 레지스터, SWR(1210) 및 WR(1220)을 구비하는데, 각각은 16개의 16 비트 서브레지스터를 포함한다. 각각의 SWR 서브레지스터(1212)는, 완전히 연결된 레이어에 대한 가중치를 비트 직렬로 판독하기 위해 사용되는 가중치 버스 배선 중 하나에 대한 단일의 비트 연결(1213)을 갖는 시프트 레지스터이다. 각각의 WR 서브레지스터(2222)는 가중치 버스 또는 대응하는 SWR 서브레지스터(1212) 중 어느 하나로부터 병렬로 로딩되어, 컨볼루션 레이어 또는 완전히 연결된 레이어를 각각 프로세싱할 수 있다. 각각의 SIP(270a)는, WR(1220)의 가중치를, 유입하는 활성화 비트(1320)로 곱하는 256개의 2 입력 AND 게이트(1310), 및 부분 곱을 합산하는 16 × 16 비트 가산기 트리(1330)를 포함한다. 시프터(1350)를 더한 최종 가산기(1340)는 가산기 트리 결과를 출력 레지스터(output register: OR)에 누산한다.
각각의 SIP(270a)에서, 가산기 트리(1330)의 제1 입력에 있는 멀티플렉서(1327)는, 단일 행의 SIP를 따라 출력 활성화 계산을 슬라이싱하는 것을 지원하는 캐스케이드 모드를 구현한다. 부호가 있는 2의 보수 뉴런을 지원하기 위해, SIP(270a)는, MSB가 1인 경우, 부분 합계로부터 최상위 비트(most significant bit: MSB)에 대응하는 가중치를 감산할 수 있다. 이것은, 가산기 트리 이전의 각각의 가중치에 대해 부정 블록(1325)을 사용하여 행해진다. 각각의 SIP(270a)는 또한 최대 풀링 레이어를 지원하는 비교기(max)(1360)를 포함한다.
다음의 예는, 다음의 두 개의 의도적인 사소한 경우를 실시형태가 어떻게 프로세싱할지를 나타내는 것에 의해 실시형태가 동작하는 방식을 하이 레벨에서 예시한다: 1) 두 개의 출력 활성화를 생성하는 단일 입력 활성화를 갖는 완전히 연결된 레이어, 및 2) 두 개의 입력 활성화 및 두 개의 출력 활성화를 생성하는 하나의 단일 가중치 필터를 갖는 컨볼루션 레이어. 레이어별 계산은 다음과 같다:
완전히 연결됨: 컨볼루션:
f1 = w1 × a c1 = w × a1
f2 = w2 × a c2 = w × a2
여기서 f1, f2, c1 및 c2는 출력 활성화이고, w1, w2, 및 w는 가중치이고, a1, a2 및 a는 입력 활성화이다. 명확화를 위해, 모든 값은 2 비트의 정밀도로 표현되는 것으로 가정된다.
종래의 비트 병렬 프로세싱
도 14A 내지 도 14C는 두 개의 사이클에 걸쳐 컨볼루션 레이어를 프로세싱하는 비트 병렬 엔진을 도시한다. 도 14A는 DaDN을 나타내는 종래 기술의 비트 병렬 프로세싱 엔진을 도시한다. 사이클마다, 엔진은 두 개의 2-비트 입력, 즉 i(가중치) 및 v(활성화)의 곱을 계산할 수 있고, 그것을 누산하거나 또는 출력 레지스터(OR)에 저장할 수 있다. 도 14B 및 도 14C는, 이 유닛이 두 사이클에 걸쳐 예시적인 CVL을 어떻게 계산할 수 있는지를 도시한다. 도 14B에서, 사이클 1 동안, 유닛은 v 입력 비트를 따라 a0의 0 및 1(도면 상에서 각각 a1/0 및 a1/1로 표시됨)을, 그리고 i 입력 비트를 따라, w의 0 및 1을 수용하고 출력 c1의 비트 둘 다를 생성한다. 마찬가지로, 사이클 2(도 14C) 동안, 유닛은 a2 및 w를 프로세싱하여 c2를 생성한다. 전체적으로, 두 사이클에 걸쳐, 엔진은 두 개의 2b × 2b 곱을 생성하였다. 예시적인 FCL을 프로세싱하는 것도 또한 두 사이클을 필요로 한다. 제1 사이클에서, w1은 f1을 생성하고 제2 사이클에서 w2는 f2를 생성한다.
비트 직렬 프로세싱
도 15A 내지 도 15D는, 본 발명의 엔진의 실시형태가 예시적인 컨볼루션 레이어를 어떻게 프로세싱할지를 도시한다. 이 실시형태는, 완전한 컨볼루션 레이어에 대한 DaDN에 비해 성능을 향상시키는 것으로 도시된다. 도 15A는 두 개의 서브유닛을 포함하는 엔진의 구조를 도시한다. 두 개의 서브유닛은, 각각, 입력 v0 및 v1을 통해 사이클당 활성화의 각각의 1 비트를 수용하고, 이전처럼, 공통의 2-비트 가중치 입력(i1, i0)이 존재한다. 전체적으로, 입력 비트의 수는, 비트 병렬 엔진에서와 동일한 4이다. 각각의 서브유닛은 세 개의 2-비트 레지스터를 포함한다: 시프트 레지스터 AR, 병렬 로드 레지스터 BR, 및 병렬로드 출력 레지스터 OR. 각각의 사이클에서, 각각의 서브유닛은, 각각의 서브유닛이 자신의 OR에 기록 또는 누산할 수 있는 BR과의 자신의 단일의 비트 vi 입력의 곱을 계산할 수 있다. 서브유닛이 사이클당 단일의 활성화 비트를 프로세싱하기 때문에, 비트 병렬 곱셈기는 존재하지 않는다. 대신, 두 개의 AND 게이트, 시프트 및 가산 기능 유닛, 및 OR이 시프트 및 가산 곱셈기/누산기를 형성한다. 각각의 AR은, i 개의 배선 중 하나로부터 사이클당 단일 비트를 로딩할 수 있고, BR은 AR로부터 또는 i 개의 배선으로부터 병렬 로딩될 수 있다.
도 15B 내지 도 15D는, 본 발명의 실시형태가 컨볼루션 레이어를 어떻게 프로세싱하는지를 도시한다. 도면은 레지스터 내용만을 나타내면서 유닛 세부 사항을 추상화한다. 도 15B에서 도시하는 바와 같이, 사이클 1 동안, w 시냅스가 i1 및 i0 입력을 통해 서브유닛 둘 다의 BR에 병렬로 로딩된다. 사이클 2 동안, a1의 그리고 a2의 비트 0이, 각각, v0 및 v1 입력을 통해 제1 및 제2 서브유닛으로 전송된다. 서브유닛은 a1/0 × w 및 a2/0 × w를 동시적으로 계산하고 이들 결과를 그들의 OR에 누산한다. 마지막으로, 사이클 3에서, a1 및 a2의 비트 1이 각각 v0 및 v1 상에서 나타난다. 서브유닛은, 각각, a1/1 × w 및 a2/1 × w를 계산하여 최종 출력 활성화 c1 및 c2를 그들의 OR에 누산한다.
전체적으로, 레이어를 프로세싱하는 데 3 사이클이 필요하였다. 그러나, 제3 사이클의 끝에서, 다른 w가 BR에 로딩되어(i 입력은 아이들 상태임) 출력의 새로운 세트가 사이클 4 동안 계산을 시작하는 것을 허용할 수 있었다. 즉, 새로운 가중치를 로딩하는 것은, 최초를 제외한 모든 것에 대해, 현재 출력 활성화의 프로세싱 동안 숨겨질 수 있다. 정상 상태에서, 입력 활성화가 2 비트로 표현되는 경우, 이 엔진은 두 개의 사이클마다 두 개의 2b × 2b 항을 생성할 것이고 따라서 비트 병렬 엔진의 대역폭과 매칭할 것이다.
활성화(a1 및 a2)가 단지 1 비트로 표현될 수도 있다면, 이 엔진은, 비트 병렬 엔진의 대역폭의 두 배인, 사이클당 두 개의 출력 활성화를 생성할 것이다. 후자는 실행 시간을 감소시키기 위해 감소된 정밀도를 활용할 수 없다. 일반적으로, 비트 병렬 하드웨어가 단지 PL a 비트만이 충분했지만 PBASE 비트를 사용하여 활성화를 나타낸 경우, 이 실시형태는 PBASE/PL a만큼 비트 병렬 엔진보다 성능이 우수할 것이다.
도 16a 내지 도 16e는, 본 발명의 유닛의 실시형태가 예시적인 완전히 연결된 레이어를 어떻게 프로세싱할지를 도시한다. 도 16a가 도시하는 바와 같이, 사이클 1에서, w1의 그리고 w2의 비트 1이 각각 라인 i1 및 i0 상에서 나타난다. 좌측 서브유닛의 AR은 i1에 연결되고, 한편 우측 서브유닛의 AR은 i0에 연결된다. AR은 대응하는 비트를 빈 위치(예에서 0 비트로 도시됨)로 부호 확장하는 그들의 최하위 비트로 시프트한다. 사이클 2 동안, 도 16b가 도시하는 바와 같이, w1 및 w2의 비트 0이 각각의 i 라인 상에서 나타나고 각각의 AR은 그들을 시프트시킨다. 사이클의 끝에서, 좌측 서브유닛의 AR은 전체 2-비트 w1을 포함하고 우측 서브유닛의 AR은 전체 2-비트 w2를 포함한다. 사이클 3에서, 도 16c는, 각각의 서브유닛이 AR의 내용을 자신의 BR로 복사하는 것을 도시한다. 다음 사이클로부터, 곱을 계산하는 것은, 이제, CVL에 대해 수행되었던 것과 마찬가지로 진행할 수 있다. 그러나, 이 경우, 각각의 BR은 상이한 가중치를 포함하는 반면, 이전 섹션에서 CVL을 프로세싱할 때에는, 모든 BR은 동일한 w 값을 유지한다. 각각의 서브유닛이 상이한 i 개의 배선에 연결시켜 커플링되는 AR의 시프트 성능은, TRT가 두 사이클에 걸쳐 상이한 가중치를 비트 직렬로 로딩하는 것을 허용하였다. 도 16d 및 도 16e는 사이클 4 및 5를 각각 도시한다. 사이클 4 동안, a1의 비트 0은 v 입력 둘 다 상에서 나타나고 각각의 서브유닛의 BR과 곱해진다. 사이클 5에서, a1의 비트 1은 v 입력 둘 다 상에서 나타나고 서브유닛은 f1과 f2의 계산을 완료한다. 일단 올바른 입력이 BR에 나타나면, 두 개의 2b × 2b 곱을 생성하기 위해서는 두 개의 사이클을 필요로 한다.
본 예에서는 추가적인 입력도 출력도 도시되지 않았지만, BR에 저장된 현재 가중치를 프로세싱하는 동안 AR로의 w 입력의 새로운 세트의 로딩을 중첩시키는 것이 가능했을 것이다. 즉, AR로의 로딩, BR로의 복사, 및 활성화와의 BR의 비트 직렬 곱셈이 3 단계 파이프라인인데, 여기서, 각각의 단계는 다수의 사이클을 필요로 할 수 있다. 일반적으로 활성화 및 가중치 둘 다가 2-비트를 사용하여 표시된다는 것을 가정하면, 이 엔진은 정상 상태에서의 비트 병렬 엔진의 성능과 매치할 것이다. 입력 i와 v의 세트 둘 다가 더 적은 비트(이 예에서 1)을 사용하여 표현될 수 있는 경우, 엔진은 이전 섹션의 비트 병렬 엔진의 대역폭의 두 배인, 사이클당 두 개의 항을 생성할 것이다.
일반적으로, PBASE가 비트 병렬 엔진의 정밀도이고, 그리고 PL a 및 PL w가 레이어 L에 대한 활성화 및 가중치를 위해 각각 사용될 수 있는 정밀도이면, 실시형태에 따른 엔진은, 이상적으로는, 컨볼루션 레이어의 경우 PBASE/PL a만큼, 그리고 완전히 연결된 레이어의 경우 PBASE/max(PL a, PL w)만큼, 등가의 비트 병렬 엔진보다 성능이 우수할 수 있다.
상기의 예는 가장 단순한 엔진 구성을 사용하였다. 통상적인 레이어가 방대한 병렬성을 나타내기 때문에, 엔진은, 컨볼루션 레이어의 경우 가중치 재사용을 그리고 완전히 연결된 레이어의 경우 활성화 재사용을 활용하면서, 더욱 많은 서브유닛을 가지고 구성될 수도 있다.
한 번의 활성화 비트
면적 및 전력 효율성을 향상시키기 위해, 한 번에 프로세싱되는 활성화 비트의 수는 설계시에 조정될 수 있다. 이러한 구성의 주요 이점은, 동일한 처리량을 달성하는 데 더 적은 SIP가 필요로 된다는 점이다 -- 예를 들면, 한 번에 두 개의 활성 비트를 프로세싱하는 것은 SIP 열의 수를 16으로부터 8로 감소시키고 그리고 그들의 총 수를 절반으로 감소시킨다. 비록 버스 배선의 총 수가 비슷하지만, 그들이 커버해야 하는 거리는 상당히 감소된다. 마찬가지로, 가산기의 총 수는 비슷하지만, 그들은 서로 더 가깝게 클러스터링된다. 이들 구성의 단점은, 그들이 사이클당 프로세싱하는 비트의 수의 배수가 되도록 그들이 활성화 정밀도를 강제하기 때문에, 그들은 성능 잠재성의 일부를 포기한다는 것이다. 설계자는, 그들의 면적, 에너지 효율성 및 성능 목표를 가장 잘 충족하는 구성을 선택할 수 있다. 이들 구성에서, 가중치는 여러 가지 활성화 비트로 동시에 곱해지고, 곱셈 결과는, 그들이 그들의 대응하는 가산기 트리에 삽입되기 이전에 부분적으로 시프트된다.
가중치를 정각에 로딩하기 위해, SWR 서브레지스터(1212)는, 여러 개의 비트를 병렬로 로딩할 수 있고, 사이클마다 그 수의 위치를 시프트할 수도 있도록 수정되어야 한다. (2의 보수 지원을 위한) 부정 블록(1325)은 최상위 곱셈 결과(most significant product result)에 대해서만 동작할 것이다.
평가
도 17은 컨볼루션 및 완전히 연결된 레이어에 대한 다양한 이미지 분류 심층 학습 네트워크에 대한 허용 가능한 레이어별 정밀도의 세트를 보고한다. 그 표는 정확도("100% 정확도")를 유지하면서 사용될 수 있는 감소된 정밀도의 세트 및 정확도에서 1%의 상대적인 감소가 허용 가능한 경우 사용될 수 있는 추가 감소된 정밀도를 보고한다. 열 "이상적인 가속(Ideal Speedup)"은, 동등하게 구성되는 비트 병렬의 종래의 엔진과 비교하여 가능한 성능 향상을 보고한다.
도 18은, 완전히 연결된 레이어 및 컨볼루션 레이어에 대한 그리고 "100%" 및 "99%" 상대적 정확도 정밀도 구성에 대한 DaDianNao에 대비한 본 실시형태의 실행 시간 성능("Perf" 열) 및 상대적 에너지 효율성(Energy Efficiency)("Eff" 열)을 보고한다. 도 19는 사이클당 두 개의 활성화 비트를 프로세싱하는 실시형태의 상대적 성능을 보고한다. 측정치의 두 개의 세트가 보고된다: 1) DaDianNao와의 대비, 2) 도 18의 비트 직렬 구성과의 대비. 결과의 이 세트는 "100%" 정밀도 구성을 사용한다.
런타임시의 뉴런 그룹별 정밀도 결정
앞서 설명한 가속기는, 성능 및 에너지 효율성을 향상시키기 위해 심층 학습 신경망의 가변 정밀도 요건을 활용하였다. 앞서 설명한 설계에서, 하드웨어는, 각각의 레이어를 프로세싱하기 이전에, 그 레이어에 의해 요구하는 정밀도가 소프트웨어에 의해 전달될 것이라는 것을 예상하였다. 따라서, 이들 레이어별 정밀도는, 각각의 레이어에 대해 또는 심지어 더 작은 세분성에서도 가능할 수도 있는 정밀도에서의 임의의 추가적인 감소를 반영하도록 런타임시 조정되지 않았다. 그러나, 기저의 계산 유닛은, 레이어보다 훨씬 미세한 세분성의 정밀도를 활용할 수 있다. 설명된 구현예에서, 각각의 칩은 16개의 타일을 포함하였고, 각각은 16개의 필터 및 필터당 16개의 가중치(시냅스)를 프로세싱하였다. 256개의 활성화의 세트가, 사이클당 1비트씩, 모든 타일에 브로드캐스팅되었다. 각각의 레이어에 대해, 활성화의 정밀도, 즉 최상위 비트 및 최하위 비트(각각, MSB 및 LSB)의 위치인 nH 및 nL이 레이어마다 조정되었다. 그러나, 정밀도는 더 작은 세분성에서 쉽게 적응될 수 있을 것이다. 예를 들면, 정밀도는, 동시적으로 프로세싱되는 256개의 활성화의 그룹마다, 또는 설명된 구현예에서 동일한 열의 SIP로 브로드캐스팅되는 16개의 활성화 그룹마다 조정될 수 있을 것이다. 또 다른 실시형태에 따르면, 최상위 비트 및 최하위 비트 둘 다 대신, 이들 중 어느 하나에 대한 정밀도를 조정하는 것이 가능하다. 이것은, 비록 둘 다에 대해 정밀도를 조정하는 것만큼은 아니지만, 성능 및 에너지 효율성에서 약간의 향상을 여전히 제공할 것이다.
다른 실시형태에 따르면, 정밀도 p는, 동시적으로 프로세싱되는 256개의 뉴런의 각각의 그룹마다 동적으로 조정된다. 이 결정은, 프로세싱을 위해 뉴런을 유닛으로 전달하기 이전에, 트랜스포저에 의해 수행된다. 유닛 ni(여기서, i = 0 ... 255)로 전송될 256개의 뉴런의 각각에 대해, 그리고 각각의 비트 nibj(j = 0 ... 16)에 대해 그리고 모든 뉴런이 양의 값(positive)이라고 가정하면, 트랜스포저는 동일한 위치에서 모든 비트의 논리적 OR를 먼저 계산하고: ORj = n0bj + ... + n255bj, 그 다음, 1인 리딩 비트 검출기를 ORj(j = 0 ... 16)에 적용하여 1인 비트가 나타나는 최고 비트 위치 nH를 결정한다. 마찬가지로, 트랜스포저는 1인 비트가 나타나는 최저 비트 위치 nL을 결정하기 위해 1인 트레일링 비트 검출기를 사용한다. 이들 뉴런을 프로세싱하기 위해, 트랜스포저는, 여분의 4 배선의 세트를 통해 비트와 함께 그들의 오프셋을 또한 전송한다. 추가적인 배선은 뉴런 그룹의 프로세싱의 종료를 나타낸다. nH 비트 위치에서 프로세싱이 시작된다는 것을 가정하면, 카운터는 브로드캐스팅되고 있는 현재 비트 위치를 계속 추적하고, 유닛이 nL에 도달하면 비교기가 그룹 신호의 끝을 설정한다.
nH 및 nL의 검출은, 뉴런의 각각의 서브그룹, 예컨대 16개의 뉴런의 그룹에 대해 개별적으로 행해진다. 도 20은, 8 비트의 베이스라인 정밀도를 각각 갖는 4개의 뉴런의 그룹이 동시적으로 프로세싱되는 그러한 실시형태를 도시한다. 도 20은, 다이아몬드로서 표시되는 캐스케이드식 OR 게이트의 세트, 및 오프셋 인코더를 더한 nH 검출 블록을 사용하여 ORj를 계산하는 네트워크를 도시한다. nL 검출은, ORj 입력의 우선 순위를 반대로 하여 nH 블록과 동일한 블록을 사용한다. 도면은, 뉴런 값의 세트에 대해 nH 및 nL을 검출하는 예를 도시한다. 입력 뉴런이 8 비트를 사용하기 때문에, 두 개의 오프셋은 3 비트를 각각 사용하여 인코딩된다. 뉴런의 이 그룹을 프로세싱하기 위해, 디스패처는 nH를 시작 오프셋으로서 전송할 것이다. 유닛은 후속하는 사이클마다 이 오프셋을 감소시킬 것이다. 디스패처는, 현재 오프셋이 nL과 동일하게 되는 경우, 이 그룹에 대한 프로세싱의 마지막 사이클을 시그널링할 것이다. 프로세싱이 nH 비트 위치에서 시작된다는 것을 가정하면, 카운터는 브로드캐스팅되고 있는 현재 비트 위치를 계속 추적하고, nL에 도달하는 경우, 비교기가 그룹 신호의 끝을 설정한다. 일단 뉴런의 그룹이 프로세싱되면, 대응하는 뉴런 레인은, 뉴런 값의 다음 그룹으로 진행하기 이전에, 모든 다른 뉴런 레인이 종료하기를 대기하도록 만들어질 수 있다. 대안적으로, 디스패처 및 시냅스 버퍼는, 추가적인 면적 및 메모리 대역폭을 대가로, 뉴런 그룹별 액세스를 지원하도록 수정될 수 있다.
정밀도의 동적 검출은, 전력 게이트화가 사용되는 경우 프로세싱 시간을 감소시키고 완전히 연결된 레이어에 대한 에너지 효율성 및 컨볼루션 레이어에 대한 에너지 효율성을 향상시킬 수 있는 가중치에도 또한 적용될 수 있다.
평가 성능
DaDianNao에 비교되는 이 실시형태의 실행 시간 성능은, AlexNet, NiN, GoogLeNet, VGG_2, VGGS, VGG19, 및 평균에 대해, 각각, 2.8배, 2.4배, 2.6배, 3.2배, 3.3배, 1.7배, 및 2.6배이다.
시냅스 및 뉴런의 비트 직렬 프로세싱
다른 실시형태는, 뉴런을 비트 직렬로 프로세싱할 뿐만 아니라 시냅스를 또한 프로세싱하는 것에 의해, 성능을 향상시킨다. 이 실시형태에서의 성능은, 컨볼루션 레이어에 대해서는 256/(Ps × Pa)만큼, 그리고 완전히 연결된 레이어에 대해서는 16/Ps만큼 향상되는데, 여기서 Ps 및 Pa는, 각각, 시냅스 및 뉴런의 정밀도이다.
한 실시형태에 따르면, 도 21은 128 × 16 그리드로 편제되는 2K 직렬 내적 유닛(SIP)(270b)을 포함하는 타일(2100)을 도시한다. 이 타일(2100)은, 16개의 뉴런과 8개의 필터, 및 필터당 16개의 시냅스를 동시적으로 프로세싱하는 것을, 적어도 비트 병렬 타일만큼 잘 항상 수행하도록 설계된다. 사이클마다, 각각의 SIP(270b)는 16개의 1 비트 입력 활성화를 16개의 1 비트 가중치와 곱하고, 이들 곱을 부분 출력 활성화로 환산한다. 동일한 행을 따르는 SIP(270b)는 공통 16 비트 가중치 버스(weight bus)를 공유하고, 동일한 열을 따르는 SIP(270b)은 공통의 16 비트 활성화 버스(2180)를 공유한다. 각각의 SIP(270b)는 16 비트 가중치 레지스터 WR(2122)을 갖는다. SIP 어레이는, 2K 비트 가중치 버스 및 256 비트 활성화 입력 버스에 의해 공급받는다. 타일(2100)은 출력 및 입력 활성화(뉴런)를 각각 저장하는 ABout(2130) 및 ABin(2120)을 구비한다. 타일(2100)은 활성화 및 가중치 둘 다를 비트 직렬로 프로세싱한다.
프로세싱 컨볼루션 레이어는, 오프 칩 메모리(2110)로부터 병렬로 2K 가중치 비트를 판독하여, SIP 행마다 모든 WR(2122)에 16 비트를 로딩하는 것에 의해 시작된다. 로딩된 가중치는, Pa L 사이클에 걸쳐 SIP 열마다 16개의 대응하는 활성화 비트에 의해 비트 직렬로 곱해질 것인데, 여기서 Pa L은 이 레이어 L에 대한 활성화 정밀도이다. 그 다음, Pa L 사이클 이후에, 제2 비트의 가중치가 WR(2122) 안으로 로딩될 것이고, 제1 Pa L 사이클에서와 같이 SIP 행마다 16개의 대응하는 활성화 비트의 동일한 세트로 곱해질 것이다. 전체적으로, 비트 직렬 곱셈은 Pa L × Pw L 사이클이 걸릴 것인데, 여기서 Pw L은 이 레이어 L에 대한 가중치 정밀도이다. 비트 병렬 엔진은 256개의 사이클에 걸쳐 128개의 필터 및 16개의 활성화의 16개의 세트를 프로세싱할 것이지만, 이 실시형태는 Pa L × Pw L 사이클에 걸쳐 그들을 동시적으로 그러나 비트 직렬로 프로세싱한다. Pa L 및/또는 Pw L이 16보다 작으면, 이 실시형태는 비트 병렬 엔진보다 256/(Pa L × Pw L)만큼 성능이 우수할 것이다. 그렇지 않으면, 이 실시형태는 비트 병렬 엔진의 성능과 매치할 수도 있다.
완전히 연결된 레이어를 프로세싱하는 것은, 가중치의 세트의 LSB(least significant bit: 최하위 비트)를 제1 SIP 열의 WR 레지스터(2122) 안으로 로딩하는 것에 의해 그리고 로딩된 가중치를, 대응하는 활성화의 LSB로 곱하는 것에 의해 시작된다. 제2 사이클에서, SIP의 제1 열이 자신의 WR(2122)의 LSB를 활성화의 제2 비트로 곱하는 것으로 여전히 사용 중인 동안, 가중치의 새로운 세트의 LSB는 제2 SIP 열의 WR(2122) 안으로 로딩될 수 있다. 각각의 가중치 비트는, 입력 활성화의 비트 0 내지 비트 15로 곱하는 16 사이클 동안 재사용된다. 따라서, 가중치의 새로운 세트를 다른 15 개의 열로 로딩하는 동안, 본 실시형태가 SIP(270b)의 임의의 단일 열을 사용 중인 상태로 유지하기에 충분한 시간이 존재한다. 예를 들면, 도 21에서 도시되는 바와 같이, 엔진은 2K 가중치의 단일 비트를 SIP(0,0)으로 로딩할 수 있다. 그 다음, 사이클 0의 SIP(0,127)는, 다음 2K 가중치의 단일의 비트를 사이클 1의 SIP(1,0)...SIP(1,127)로 로딩하고, 계속 그렇게 진행한다. 처음 15 사이클 이후, 모든 SIP가 완전히 활용된다. 이 설계가 128개의 필터 및 16개의 활성화의 16개의 세트를 프로세싱하는 데 PwL × 16 사이클이 걸릴 것이고, 한편 등가의 비트 병렬 설계는 그들을 256개의 사이클에서 프로세싱한다. 따라서, Pw L이 16보다 더 작으면, 이 설계는 비트 병렬 설계보다 16/Pw L만큼 성능이 더 우수할 것이고, 그렇지 않으면, 그것은 그것의 성능과 매치할 수도 있다.
도 22는 이 실시형태에 대한 수정된 비트 직렬 내적 유닛(SIP)(270b)을 도시한다. 클록 사이클마다, 각각의 SIP(270b)는 16개의 단일 비트 활성화를 16개의 단일 비트 가중치로 곱하여 부분 출력 활성화를 생성한다. 내부적으로, 각각의 SIP는, 16개의 1 비트 가중치 레지스터(WR)(2122), WR의 가중치를 유입하는 입력 활성화 비트와 곱하기 위한 16개의 2 입력 AND 게이트, 및 이들 부분 곱을 합산하는 16 입력 1 비트 가산기 트리를 구비한다.
Accu. 1은 Pa L 사이클에 걸쳐 가산기 트리의 출력을 누산하고 시프트한다. Pa L 사이클마다, Accu. 2는 Accu. 1의 출력을 시프트하고 그것을 OR에 누산한다. Pa L × Pw L 사이클 이후, 출력 레지스터(Output Register: OR)는 활성화 및 가중치 세트의 내적을 포함한다. 각각의 SIP에서, Accu. 1 이후의 멀티플렉서는 캐스케이딩을 구현한다. 부호가 있는 2의 보수 활성화를 지원하기 위해, 부정 블록(2225)이 사용되어, MSB가 1인 경우의 부분 합계로부터, 가중치의 최상위 비트(MSB)에 대응하는 입력 활성화의 합계를 감산한다. 각각의 SIP(270b)는 또한, 최대 풀링 레이어를 지원하는 비교기(max)(2260)를 포함한다. i_nbout 입력은, 2K보다 더 적은 출력을 가진 완전히 연결된 레이어의 캐스케이드 모드를 지원한다.
이 다음의 부문은, 2-비트 활성화 및 가중치를 가정하여 컨볼루션 및 완전히 연결된 레이어를 이 실시형태가 어떻게 프로세싱할 수도 있는지를 설명한다. 도 28A는, 두 개의 입력 활성화를, 사이클마다 단일의 2-비트 출력 활성화를 생성하는 두 개의 가중치로 곱하는 종래의 비트 병렬 프로세싱 엔진을 도시한다. 엔진은, 사이클당 두 개의 2b × 2b 곱셈의 처리량씩, 사이클당 두 개의 새로운 2 비트 가중치 및/또는 활성화를 프로세싱할 수 있다.
본 발명의 일 실시형태에 따르면, 도 28B는 4 × 4 어레이로 편제되는 네 개의 서브유닛을 포함하는 엔진을 도시한다. 각각의 서브유닛은, 사이클당 2 비트의 가중치 및 2 비트의 입력 활성화를 수용한다. 동일한 열을 따르는 서브유닛은 활성화 입력을 공유하고, 한편, 동일한 행을 따르는 서브유닛은 그들의 가중치 입력을 공유한다. 전체적으로, 이 엔진은, 비트 병렬 엔진의 입력 대역폭과 동일한 4 활성화 및 4 가중치 비트를 허용한다. 각각의 서브유닛은 두 개의 1 비트 가중치 레지스터(WR), 하나의 2 비트 출력 레지스터(OR)를 구비하며, 자신이 OR로 누산할 수 있는 두 개의 1b × 1b 곱을 수행할 수 있다.
도 28B 내지 도 28F는, 완전히 연결된 레이어를 이 실시형태가 어떻게 프로세싱하는지를 도시한다. 도 28B이 도시하는 바와 같이, 사이클 1에서, 좌측 열 서브유닛은, 활성화 a0 및 a1의 최하위 비트(LSB) a0/0 및 a1/0, 및 필터 0 및 1로부터의 네 개의 가중치의 LSB인 w0 0/0, w0 1/0, w1 0/0, 및 w1 1/0을 수신한다. 이들 두 개의 서브유닛의 각각은, 두 개의 1b × 1b 곱을 계산하고 그들의 합을 자신의 OR에 저장한다. 사이클 2에서, 도 28C가 도시하는 바와 같이, 좌측 열 서브유닛은 이제 동일한 가중치 비트를, 활성화 a0과 a1의 최상위 비트(MSB) a0/1과 a1/1로 각각 곱하고 이들을 그들의 OR에 누산한다. 병렬로, 두 개의 우측 열 서브유닛은, 입력 활성화 a0 및 a1의 LSB인 a0/0 및 a1/0을 로딩하고, 그들을, 필터 2 및 3으로부터의 가중치의 LSB인 w2 0/0, w2 1/0, w3 0/0, 및 w3 1/0으로 곱한다. 사이클 3에서, 좌측 열 서브유닛은, 이제, LSB a0/0 및 a1/0을 로딩하고, 그들을, 필터 0 및 1로부터의 네 개의 가중치의 MSB인 w0 0/1, w0 1/1, w1 0/1 및 w1 1/1로 곱한다. 병렬로, 우측 서브유닛은, 그들의 WR 유지 가중치 w2 0/0, w2 1/0, w3 0/0 및 w3 1/0을 재사용하고, 그들을, 활성화 a0 및 a1의 최상위 비트인 a0/1 및 a1/1로 곱한다(도 28D). 도 28E이 예시하는 바와 같이, 사이클 4에서, 좌측 열 서브유닛은, 그들의 WR 유지 가중치와 활성화 a0 및 a1의 MSB인 a0/1 및 a1/1을 곱하고, 출력 활성화 o0 및 o1의 계산을 종료한다. 동시적으로, 우측 열 서브유닛은, 필터 2 및 3으로부터의 가중치의 MSB인 w2 0/1, w2 1/1, w3 0/1 및 w3 1/1을 로딩하고, 그들을 a0/0 및 a1/0과 곱한다. 사이클 5에서, 도 28F가 도시하는 바와 같이, 우측 서브유닛은, WR 유지 가중치와 두 개의 활성화의 MSB인 a0/1 및 a1/1의 곱셈을 완료한다. 이 사이클의 끝까지, 출력 활성화 o2 및 o3도 역시 준비된다.
전체적으로, 32개의 1b × 1b 곱(사이클 2 내지 5에서 각각 4, 8, 8, 8, 4개의 곱)을 프로세싱하는 데 4 + 1 사이클이 필요하였다. 다섯 번째 사이클의 끝에서, 좌측 열 서브유닛은 유휴 상태이고, 따라서 가중치의 다른 세트가 WR 안으로 로딩되어, 출력의 새로운 세트가 계산을 시작하는 것을 허용한다. 정상 상태에서, 입력 활성화 및 가중치가 2-비트로 표현되는 경우, 이 엔진은 사이클마다 8개의 1b × 1b 항을 생성할 것이고, 따라서 병렬 엔진의 2개의 2b × 2b 처리량과 매치한다.
가중치가 단지 1 비트만을 사용하여 표현될 수도 있다면, 이 실시형태는 비트 병렬 엔진의 대역폭의 두 배인, 사이클당 두 개의 출력 활성화를 생성하고 있을 수도 있다. 일반적으로, 실제로 Pw 비트만이 필요한 가중치를 표현하기 위해 비트 병렬 하드웨어가 Pbase 비트를 사용하고 있다면, 완전히 연결된 레이어의 경우, 엔진은 Pbase/Pw만큼 비트 병렬 엔진보다 성능이 우수할 것이다. 완전히 연결된 레이어에서 가중치 재사용이 없기 때문에, 가중치의 상이한 세트를 Cn 열의 각각으로 로딩하기 위해서는 Cn 사이클이 필요로 된다. 따라서, Cn 비트 미만을 사용하는 활성화를 갖는 것은, 성능을 향상시키지 않을 것이지만, 그러나 에너지 효율성을 향상시킬 수 있을 것이다.
이 실시형태는 컨볼루션 레이어를 완전히 연결된 레이어와 거의 유사하게 프로세싱하지만, 그러나 가중치 및 활성화 둘 다에 대한 정밀도에서의 감소를 활용하기 위해, 상이한 윈도우에 걸쳐 가중치 재사용을 활용한다. 구체적으로, 컨볼루션 레이어에서, 동일한 행에 걸친 서브유닛은, 그들이 단일의 사이클에서 자신의 WR로 병렬로 로딩하는 동일한 가중치 비트를 공유한다. 이들 가중치 비트는 Pa 사이클에 걸쳐 대응하는 활성화 비트로 곱해진다. 가중치 비트의 다른 세트는 Pa 사이클마다 로딩될 필요가 있는데, 여기서 Pa는 입력 활성화 정밀도이다. 여기서, 이 실시형태는, 각각의 서브유닛 열이 활성화의 상이한 세트를 프로세싱하게 하는 것에 의해, 다수의 윈도우에 걸쳐 가중치 재사용을 활용한다. 입력 활성화 및 가중치 둘 다를 표현하기 위해 비트 병렬 엔진이 Pbase 비트를 사용한다는 것을 가정하면, 이 실시형태는 P2 base/(Pw × Pa)만큼 비트 병렬 엔진보다 성능이 우수할 수도 있는데, 여기서 Pw 및 Pa는, 각각, 가중치 및 활성화 정밀도이다.
캐스케이드 모드
전술한 실시형태가 완전히 활용되기 위해서는, 완전히 연결된 레이어가 적어도 2K 개의 출력 뉴런을 가져야 한다. 연구되는 네트워크 중 일부는, 1K 개만큼 적은 출력 활성화를 갖는 레이어를 구비한다. 과소 활용을 방지하기 위해, 각각의 행을 따르는 SIP(270b)는 데이지 체인(daisy-chain)으로 캐스케이딩되는데, 여기서 하나의 것의 출력은 멀티플렉서를 통해 다음 것의 입력으로 공급될 수 있다. 이렇게 하면, 출력 활성화의 계산은 동일한 행을 따르는 SIP에 걸쳐 슬라이스될 수 있다. 이 경우, 각각의 SIP는, 입력 활성화의 일부만을 프로세싱하고, 그 결과, 동일한 행 상의 SIP를 따르는 몇몇 부분 출력 활성화로 나타난다. 다음 번 NP(NP는 사용되는 슬라이스의 수임) 사이클에 걸쳐, NP 개의 부분 출력은 최종 출력 활성화로 환산될 수 있다. 사용자는 최대 16개의 슬라이스의 임의의 수를 선택할 수 있고, 그 결과, 심지어, 단지 256개의 출력의 완전히 연결된 레이어에서도, 엔진은 완전히 활용될 수 있다. 이 캐스케이드 모드는 다른 심층 학습 네트워크에서, 예컨대, 최소의 완전히 연결된 레이어가 600개 또는 더 적은 출력을 가질 수 있는 NeuralTalk [Andrej Karpathy and Fei-Fei Li, "Deep Visual-Semantic Alignments for Generating Image Descriptions", CoRR abs/1412.2306 (2014). http://arxiv.org/abs/1412.2306]에서 유용할 수 있다. 이러한 캐스케이드 모드는 또한, 다른 전술한 실시형태와 함께 사용될 수도 있다.
사이클당 하나보다 많은 비트의 프로세싱
사이클당 하나보다 많은 비트 활성화를 프로세싱하는 것에 의해 SIP의 수 및 각각의 면적 오버헤드를 감소시키기 위해 실행 시간 성능 이점 중 일부를 절충하는 것이 가능하다. 이 방법을 사용하면, 실시형태는, 등가적으로 구성된 비트 병렬 엔진의 처리량과 매치하기 위해 더 적은 SIP(270b)를 요구할 것이다.
평가 성능
도 23은 완전히 연결된 레이어에 대한 그리고 시냅스/가중치에 대한 유효한 레이어별 정밀도의 세트를 보고한다. 활성화에 대한 정밀도는 도 17에 보고되는 바와 같다. 도 24는, 등가적으로 구성된 DaDianNao에 대비한 그리고 다음의 두 개의 구성에 대한 실행 시간 성능을 보고한다: 1) 제1 구성은 사이클마다 두 개의 활성화 비트("2-비트")를 프로세싱하고, 그리고 2) 제2 구성은 사이클마다 네 개의 활성화 비트("4-비트")를 프로세싱한다. 두 구성은 각각 8개 및 4개의 SIP 열을 필요로 한다. 활성화가 이제 각각 2 또는 4의 배수가 되도록 강제되기 때문에, 이들 구성은 성능 잠재력의 일부를 포기한다. 예를 들면, 4-비트 구성의 경우, Pa L을 8 비트로부터 5 비트로 감소시키는 것은 어떠한 성능 이점도 생성하지 않지만, 반면, 비트 직렬 구성의 경우, 그것은 성능을 1.6배만큼 향상시킬 것이다.
제로 비트의 스킵
지금까지 설명된 실시형태는 다수의 리딩 및 트레일링 비트가 0으로 취급되도록 활성화 정밀도를 트리밍한다. 그러나, 프로세싱될 0인 몇몇 비트가 여전히 존재할 것이다. 다른 실시형태는 이들을 제거하고 제로인 뉴런 비트를 스킵하는 것에 의해 성능을 향상시킨다. 비트 직렬 타일에서 그리고 각각의 사이클에서, 각각의 뉴런 비트는 여러 개의 시냅스와 AND 연산된다. 뉴런 비트가 0인 경우, 결과도 또한 0이며, 최종 출력 뉴런에 어떠한 기여도 하지 않는다. 출력 뉴런 값에 기여하는 것은 1인 뉴런 비트뿐이다. 따라서, 비트 직렬 타일은, 1인 뉴런 비트만을 프로세싱하도록 확장될 수 있다.
도 25는, 네트워크당 입력 뉴런에 대한 1 비트의 카운트의 누적 분포를 도시한다. 모든 네트워크에 대해, 입력 뉴런의 적어도 90%가 최대 5 개의 1인 비트를 가지며, 사실상 모든 입력 뉴런은 최대 8개의 1인 비트를 갖는다. 따라서, 제로 비트를 스킵할 수 있는 비트 직렬 타일은, 대부분의 시간(90%)에 최대 5 비트를 그리고 사실상 모든 시간에 최대 8 비트를 프로세싱할 필요가 있다.
1인 비트만을 프로세싱하기 위해, 디스패처는 그들만을 전달하도록 수정된다. 시냅스를 적절하게 곱하기 위해서는 각각의 비트의 상대적 위치가 알려질 필요가 있기 때문에, 하나의 실시형태에서, 디스패처는 비트 오프셋을 전달한다. 예를 들면, 입력 뉴런이 값 0b11001을 가지면, 디스패처는 1인 비트의 위치에 대응하는 오프셋 (0, 3, 4)를 전달한다. 베이스라인이 16 비트 숫자를 사용하기 때문에, 오프셋은 4 비트 길이일 필요가 있다. 결과적으로, 각각의 뉴런 배선은 4개의 배선으로 대체된다. 1인 비트의 공간적 분포를 활용하는 것에 의해, 다른 더 낮은 배선 카운트 대안예가 가능할 수도 있다. 예를 들면, 절대 오프셋 대신, 디스패처는 델타를 전달할 수도 있는데, 이 경우, 이전 예의 숫자는 (0, 2, 1)로서 전달될 것이다. 이 예의 경우, 절대 오프셋의 사용이 가정된다. 다른 실시형태에서, 디스패처는 이전과 같이 그러나 더 빠른 레이트에서 뉴런을 전달할 수 있고, 오프셋 표현으로의 변환은 각각의 프로세싱 타일에서 로컬하게 행해질 수 있다.
원래의 예에서, 모든 뉴런 레인은, 모든 라인에 걸쳐 동일한 오프셋에서 비트를 전송하는 잠금 단계(lock step)에서 동작한다. 제로 비트 스킵을 허용하기 위해, 뉴런 레인은, 그들이 상이한 오프셋에서 비트를 전달할 수 있도록, 디커플링될 필요가 있다. 디스패처가 오프셋을 전송하게 하는 것은, 이것을 간단히 가능하게 만든다. 그러나, 일단 뉴런이 완전히 프로세싱되면, 뉴런 레인은 다음 입력 뉴런을 프로세싱할 필요가 있다. 결과적으로 디스패처는 그것을 NM으로부터 페치할 필요가 있을 것이다. 최악의 경우, 모든 256개의 뉴런 레인은 완전히 독립적으로 작동할 것이고 각각 상이한 브릭에 속하는 뉴런을 필요로 할 것이다. 이것은 디스패처에서 256 브릭 입력 버퍼를 유지하는 것을 필요로 할 것이다. 더 나쁜 것은, 그것이 NM으로부터 최대 256개의 독립적인 브릭 판독을 행하는 것을 필요로 할 것이다. 대역폭 요건이 제거되는 비트의 분율에 의해 요구되는 것보다 더 많이 증가하지는 않을 것이지만, 디스패처는 이들 요청 중에서 중재해야 할 것이다. 마지막으로, 각각의 SIP는 상이한 뉴런 오프셋에서 동작하고 있을 것이고, 그러므로, 역시 상이한 오프셋에서 시냅스를 페치할 필요가 있을 것이다. 이것은 SB가 모든 SIP에 걸쳐 분할되는 것을 필요로 하고, 그 결과, 각각의 SIP는 그 자신의 SB 슬라이스를 갖는다.
제로 비트 스킵을 지원하는 데 필요한 독립적인 브릭 요청의 수는, 뉴런 레인을 그룹화하는 것 및 그룹 내의 모든 뉴런 레인이 그들의 현재의 뉴런의 프로세싱을 완료한 이후에만 그들이 입력 뉴런의 다음 세트로 진행해야 한다는 것을 규정하는 것에 의해, 감소될 수 있다. 다수의 설계 옵션이 존재한다. 스펙트럼의 한쪽 끝에는, 모든 뉴런 레인이 독립적으로 동작하는 설계가 있다. 이것은, 디스패처에서 최대 256개의 상이한 뉴런 브릭을 페치해야 한다는 그리고 SIP당 별개의 SB 슬라이스를 제공해야 한다는 잠재적으로 바람직하지 않은 요건을 갖는다. 스펙트럼의 다른 끝에는, 모든 뉴런 레인이 단일의 그룹을 형성하는 설계가 있다. 이 설계에서, 각각의 뉴런 레인은 상이한 뉴런 비트 오프셋에서 작동하지만, 그러나 모든 뉴런 레인은, 모든 현재 뉴런이 프로세싱된 경우에만 뉴런의 다음 세트로 진행하도록 허용된다. 즉, 이 경우, 모든 뉴런 레인은, 1인 비트의 가장 높은 카운트를 가진 뉴런을 프로세싱하고 있는 뉴런 레인을 대기한다. 이 설계의 잠재적인 추가 이점은, SB가 분할되는 것을 전혀 필요로 하지 않는다는 것이다. 비트 직렬 타일은, 가산기 트리 입력에서 시프터만이 도입되고, 가산기가 시프트된 입력을 핸들링하도록 적절하게 확장되는 상태에서, 그대로 유지된다. 상이한 정도의 요건을 갖는 다수의 다른 선택지가 존재한다. 예를 들면, 동일한 행을 따르는 SIP가 그룹을 형성해야 한다는 것을 규정할 수 있고, 이 경우, SB는, SIP 행당 하나씩, 16개의 슬라이스로 분할될 필요가 있고, 디스패처는 상이한 위치로부터 최대 16개의 입력 블록을 유지할 필요가 있다. 그것은 두 개의 행마다, 네 개의 행마다, 또는 여덟 개의 행마다 마찬가지로 그룹화될 수 있을 것이다. 대안적으로, 그것은, 다수의 SB 슬라이스 및 디스패처로부터의 다수의 브릭 페칭을 요구하면서, 열을 따라 그룹화할 수 있을 것이다.
모든 뉴런 레인이 잠금 단계에서 진행되는 경우, 각각의 SB 열은 한 번 판독되고 모든 뉴런 레인에 의해 재사용된다. 그러나, 뉴런 레인이 더 작은 그룹에서 독립적으로 진행되는 경우, 그들은 서로의 앞에서 이어질 것이고 동일한 SB 열을 독립적으로 그리고 어쩌면 상이한 시간에 판독할 것이다. SB 전방에 버퍼의 세트를 추가하는 것에 의해, 이 요청을 더 적은 에너지로 서비스하는 것이 가능하다. 이 실시형태에서, 각각의 SB 열은 버퍼 슬롯으로 판독되고, 모든 뉴런 레인이 그것을 판독할 때까지 그곳에 유지된다. 버퍼의 수는, 뉴런 레인 그룹이 서로의 앞에서 얼마나 멀리 이어질 수 있는지를 좌우한다.
하나의 실시형태에서, 비트 직렬 엔진의 AND 게이트는, 가중치가 2의 거듭제곱을 나타내는 유입하는 오프셋으로 효과적으로 곱해질 수 있도록, 시프터로 대체된다. 이러한 설계는 면적 및 전력의 관점에서 비용이 많이 든다는 것이 인식된다. 그 이유는, 각각의 가산기 트리에 급전하는 16개의 뉴런 오프셋을 프로세싱할 때, 최악의 경우 오프셋 중 하나는 0이고 다른 하나는 15인 것이 가능하기 때문이다. 결과적으로, 시프터는 16 비트 입력 시냅스를 가져와서 그들을 32-비트 가중치로 변환할 필요가 있다. 게다가, 가산기 트리는 더 이상 16 비트 가산기 트리가 아니라 오히려 32-비트 가산기 트리이다. 성능 잠재력의 일부를 포기하는 것에 의해, "2-단계 시프팅(2-stage-shifting)" 접근법을 사용하여 면적 및 에너지 오버헤드를 감소시키는 것이 가능하다. 구체적으로, 다른 실시형태에서, 입력 뉴런은 비트의 그룹에서, 예를 들면, 4 비트의 4개의 그룹으로서 프로세싱된다. 예를 들면, 오프셋 (5) 및 (0)을 갖는 두 개의 뉴런이 주어지면, 베이스라인 설계는 하나의 사이클에서 둘 다를 동시적으로 프로세싱할 것이다. 수정된 설계는, 먼저, 0 내지 3의 거듭제곱만을 그 다음 다른 사이클에서 거듭제곱 4 내지 8을 프로세싱할 것이다. 따라서, 이 예에서, 수정된 설계는 두 개의 뉴런을 하나의 사이클에서가 아닌 두 개의 사이클에서 프로세싱할 것이다. 이 설계는, 임의의 시프트 연산이 두 개의 단계에서 두 개의 작은 시프트로서 수행될 수 있다는 관찰 결과를 이용한다:
Figure 112018129367203-pct00007
. 따라서, T 개의 가중치를 상이한 오프셋 KO, ..., KT만큼 시프트하여 가산하기 위해, 오프셋을 공통 항 C를 갖는 합, 예를 들면, Ki = K' + C로 분해할 수 있다. 따라서, 내적 프로세싱은 2 단계 프로세싱을 사용하여 재배열될 수 있는데, 여기서 제1 단계는 가중치별 고유의 오프셋 K'를 사용하고, 제2 단계는 모든 가중치에 걸쳐 공통인 오프셋 C를 사용한다. 이 배열은, 도 26이 도시하는 바와 같이 가산기 트리 이후에 하나의 공통 시프터를 공유하는 것에 의해 가중치 시프터의 그리고 가산기 트리의 폭을 감소시키기 위해 사용될 수 있다. 설계 파라미터 L은, 설계가 단일의 사이클에서 2L 미만만큼 차이가 나는 오프셋을 프로세싱할 수 있도록, 가중치 시프터를 제어하는 비트의 수를 정의한다. 이것은 가중치 시프터의 사이즈를 감소시키고, 16 + 2L - 1 비트의 항만을 지원하는 가산기 트리의 사이즈를 감소시킨다.
도 26는 이 실시형태에 대한 직렬 내적 유닛(2600)을 도시한다. 도시되는 시프터는 최대 16 비트 위치를 시프트한다. shift_B 신호는 2-단계 시프팅을 구현하기 위해 사용될 수 있다. 완료(Done) 신호는, 다른 레인이 종료하기를 한 레인이 기다리고 있는 경우에 시냅스 값을 누산하는 것을 방지하기 위해 사용될 수 있다.
도 27은, 제로 비트 스킵에서 그리고 상이한 뉴런 레인 그룹화에서 가능한 성능을 도시한다. 구체적으로, 다음의 구성이 도시된다: COL: SIP가 열마다 동기화되는 경우에 제로 비트를 스킵하는 성능; ROW: SIP가 행마다 잠기는 경우 제로 비트를 스킵하는 성능; 및 PAL: SIP가 팰릿마다 잠기는 경우, 즉 모든 SIP가 동기화되는 경우 제로 비트를 스킵하는 성능.
열별 설계(per column design)가 가능한 최고 성능을 달성하고, 행 설계 및 최종적으로 팰릿 설계가 후속된다. 팰릿 설계는 모든 SIP 유닛을 동기화하고 따라서 가장 큰 제약을 갖는다. 그러나, 디스패처로서 구현하는 것이 가장 간단하며 SB는 있는 그대로 유지된다. 행 설계는 SB가 행을 따라 16개의 슬라이스로 분할되는 것을 필요로 하고 디스패처는 16개의 독립적인 브릭을 추적할 필요가 있다.
향상된 인코딩
SIP가 임의의 입력 항을 무효화할 수 있기 때문에, Booth(부스) 인코딩을 사용하여 부호가 있는 오프셋을 허용하는 것에 의해 1의 런을 포함하는 활성화 값에 대해 프로세싱되는 오프셋을 감소시키는 것이 가능하다. 이 향상된 오프셋 생성기는, 인접한 오프셋 A...B의 런을 형태 A + 1, -B의 쌍으로 감소시킨다. 런 내의 단일의 오프셋 또는 갭은, 각각, 양 또는 음의 오프셋에 의해 표현된다. 예를 들면, 오프셋 (4,3,1,0)으로 일반적으로 인코딩될 11011의 활성화 값은, 대신, (5,-3,+2,-0)으로 또는 오프셋 (5,-2,-0)으로 더욱 경제적으로 표현될 수 있다. 이것은 Radix-4 Booth 인코딩과 동일하다. 이 인코딩은, 베이스라인 인코딩과 비교하여, 절대 더 많은 오프셋을 생성하지 않을 것이다. 그러나, 2-단계 시프팅 때문에, 이 인코딩이 필요로 되는 사이클의 수를 증가시킬 것이라는 것이 가능하다. 이것은, 2-단계 시프트 동안 함께 프로세싱되고 있는 비트 그룹 사이의 오프셋 분포가 변하는 경우에 발생한다.
설명되는 제로 비트 스킵 설계 외에, 도 13은 또한, 1인 비트의 수를 감소시키기 위해 뉴런 값이 변경되는 옵션에 따른 두 개의 확장을 도시한다. Ra 확장에서, 형태 2n-1(여기서 n은 사용되는 정밀도임)을 갖는 뉴런 값은 2n으로 변환되고, 한편 Rb 확장에서, 상기의 변환은 2의 모든 거듭제곱에 대해 행해진다, 즉, 형태 2k-1의 임의의 수는 2k로 변환된다. 결과는, 기술 둘 다가 추가적인 성능 향상을 제공할 수 있다는 것을 보여준다. 정확도에 대한 영향의 어떠한 분석도 이루어지지 않았다. 다른 인코딩에서, 레이어마다의 또는 뉴런의 그룹마다의 임계치가, 프로세싱될 최대 2의 거듭제곱의 최대 수를 결정한다. 예를 들면, 임계치가 3이고 뉴런이 (4,3,0,-1)로 인코딩되면, (4,3,0)만이 프로세싱될 것이다.
기술 분야의 숙련된 자에 의해 인식되는 바와 같이, 동작에서 상기 언급된 컴포넌트는, 예를 들면, 가속기를 기능 유닛으로서 제어할 수도 있는 프로그래머블 유한 상태 머신 또는 프로그래머블 프로세서일 수도 있는 컨트롤러에 의해 제어될 수도 있다. 일 실시형태에 따르면, 프로그래머블 유한 상태 머신은 몇 개의 제어 및 데이터 레지스터 및 잠재적으로 프로그램 및 데이터 메모리를 구비할 수도 있고, 신경망 시스템 내의 본원에서 설명되는 다른 컴포넌트로 다양한 제어 신호를 출력한다.
한 실시형태에 따르면, 본 발명의 실시형태를, 완전한 레이어 대신 한 레이어의 일부에 적응시키는 것도 또한 가능할 수도 있다. 레이어별 계산에 대한 이러한 대안적인 접근법은, 예를 들면, H 및 W 차원의 입력 매트릭스를 다수의 파티션에서 분할할 수도 있다. 그 다음, 필터는 그들 파티션 중 하나 이상의 파티션에 대해 적용되어 부분 출력을 생성할 수도 있다. 이들 부분 출력은 전체적으로 프로세싱될 수도 있거나 또는 더 분할될 수도 있다. 부분 출력은 네트워크의 끝까지 프로세싱될 수도 있거나(완전히 연결된 레이어가 없다고 가정함) 또는 몇몇 포인트에서 중단되고 더 많은 파티션을 계속 프로세싱하기 위해 분할 포인트로 진행한다.
본 발명은 본 발명의 취지 또는 본질적인 특성으로부터 벗어나지 않으면서 다른 특정한 형태로 구체화될 수도 있다. 본 발명의 소정의 적용예 및 변형예는 기술 분야의 숙련된 자에게 자명할 것이다. 따라서, 현재 논의된 실시형태는 예시적인 것이며 제한적이지 않은 것으로 간주되며, 본 발명의 범위는 전술한 설명보다는 첨부된 청구범위에 의해 나타내어지며, 따라서, 청구범위의 등가범위의 의미 및 범위 내에 들어오는 모든 변경예는 청구범위 내에 포괄되도록 의도된다.

Claims (46)

  1. 신경망(neural network)에서의 비트 직렬 계산(bit-serial computation)을 위한 시스템으로서,
    신경망에서 비트 직렬 계산을 수행하기 위한 하나 이상의 비트 직렬 타일로서, 각각의 비트 직렬 타일은 입력 뉴런(neuron) 및 시냅스(synapse)를 수신하고, 출력 뉴런을 생성하는, 상기 하나 이상의 비트 직렬 타일;
    뉴런을 저장하기 위한 그리고 디스패처(dispatcher) 및 리듀서(reducer)를 통해 하나 이상의 비트 직렬 타일과 통신하는 활성화 메모리를 포함하되,
    상기 디스패처는 상기 활성화 메모리로부터 뉴런을 판독하고 상기 뉴런을 제1 인터페이스를 통해 상기 하나 이상의 비트 직렬 타일로 전달하고,
    상기 디스패처는 메모리로부터 시냅스를 판독하고 상기 시냅스를 제2 인터페이스를 통해 상기 하나 이상의 비트 직렬 타일로 전달하고,
    상기 리듀서는 상기 하나 이상의 비트 직렬 타일로부터 상기 출력 뉴런을 수신하고, 상기 출력 뉴런을 제3 인터페이스를 통해 상기 활성화 메모리로 전달하고;
    상기 제1 인터페이스 및 상기 제2 인터페이스 중 하나는 상기 뉴런 또는 상기 시냅스를 상기 하나 이상의 비트 직렬 타일로 비트 직렬로(bit-serially) 전달하고, 상기 제1 인터페이스 및 상기 제2 인터페이스 중 나머지 하나는 상기 뉴런 또는 상기 시냅스를 상기 하나 이상의 비트 직렬 타일로 비트 병렬로(bit-parallelly) 전달하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  2. 제1항에 있어서, 상기 디스패처는, 하나 이상의 뉴런의 블록에서 1인 비트(one-bits)를 식별하는 하나 이상의 오프셋을 전송하는 것에 의해, 상기 블록의 제로 비트(zero-bit)를 스킵하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  3. 제1항에 있어서, 상기 디스패처는 하나 이상의 브릭(brick)에서 상기 뉴런을 수집하기 위한 셔플러(shuffler) 및 상기 브릭을 직렬 비트 스트림으로 변환하기 위한 트랜스포저(transposer)를 포함하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  4. 제3항에 있어서, 상기 디스패처는 상기 하나 이상의 브릭을 하나 이상의 그룹으로 수집하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  5. 제1항에 있어서, 상기 비트 직렬 타일 각각은 시냅스 버퍼, 상기 디스패처로부터의 입력 뉴런을 유지하는 입력 뉴런 버퍼 및 상기 리듀서로의 통신을 펜딩하는 출력 뉴런을 유지하는 뉴런 출력 버퍼를 더 포함하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  6. 제1항에 있어서, 상기 리듀서는 저장 이전에 상기 출력 뉴런을 완전 정밀도 값으로부터 감소된 정밀도 값으로 변환하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  7. 제1항에 있어서, 상기 활성화 메모리는 상기 하나 이상의 비트 직렬 타일에 대한 전용 메모리인, 신경망에서의 비트 직렬 계산을 위한 시스템.
  8. 제1항에 있어서, 상기 리듀서는 요구되는 정밀도에 따라 상기 출력 뉴런을 하나 이상의 브릭으로 변환하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  9. 제1항에 있어서, 상기 디스패처는, 입력 뉴런의 정밀도를, 상기 입력 뉴런의 최상위 비트 값(most significant bit value) 또는 최하위 비트 값(least significant bit value)에 기초하여 감소시키는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  10. 제9항에 있어서, 상기 디스패처는 상기 입력 뉴런의 상기 정밀도를, 상기 입력 뉴런의 상기 최상위 비트 값 및 상기 최하위 비트 값에 기초하여 감소시키는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  11. 제1항에 있어서, 상기 하나 이상의 비트 직렬 타일에 의한 상기 비트 직렬 계산을 위한 프로세싱 시간은, 상기 뉴런으로부터 프로세싱되는 비트의 수에 비례하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  12. 제1항에 있어서, 상기 하나 이상의 비트 직렬 타일은 시냅스를 비트 병렬로 프로세싱하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  13. 제1항에 있어서, 상기 하나 이상의 비트 직렬 타일은 가중치 레지스터를 포함하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  14. 제13항에 있어서, 상기 하나 이상의 비트 직렬 타일은 직렬 가중치 레지스터를 더 포함하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  15. 제14항에 있어서, 상기 하나 이상의 비트 직렬 타일에 의한 상기 비트 직렬 계산을 위한 프로세싱 시간은, 상기 뉴런 및 시냅스로부터 프로세싱되는 비트의 수의 곱에 비례하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  16. 제1항에 있어서, 상기 하나 이상의 비트 직렬 타일은 두 개 이상의 윈도우를 병렬로 프로세싱하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  17. 제16항에 있어서, 상기 두 개 이상의 윈도우 각각은 윈도우 레인(window lane)과 관련되고, 각각의 윈도우 레인은 하나 이상의 비트 직렬 뉴런 레인(bit-serial neuron lane)을 포함하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  18. 제5항에 있어서, 상기 시냅스 버퍼는 하나 이상의 필터 레인을 포함하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  19. 제18항에 있어서, 상기 하나 이상의 필터 레인 각각은 하나 이상의 시냅스 레인을 포함하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  20. 제19항에 있어서, 상기 시냅스 버퍼 및 상기 입력 뉴런 버퍼는, 하나 이상의 직렬 내적 서브유닛(serial inner product subunit)의 2차원 어레이와 통신하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  21. 제20항에 있어서, 상기 하나 이상의 직렬 내적 서브유닛의 각각은 하나의 출력 뉴런을 생성하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  22. 제21항에 있어서, 상기 시냅스 버퍼의 상기 필터 레인은, 인터커넥트(interconnect)를 통해 대응하는 직렬 내적 서브유닛과 통신하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  23. 제22항에 있어서, 상기 입력 뉴런 버퍼의 윈도우 레인은 인터커넥트를 통해 상기 대응하는 직렬 내적 서브유닛과 통신하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  24. 제21항에 있어서, 하나 이상의 시냅스 그룹을 상기 직렬 내적 서브유닛으로 제공하기 위한 시냅스 레지스터를 더 포함하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  25. 제21항에 있어서, 각각의 직렬 내적 서브유닛은 다수의 입력 가산기 트리(input adder tree input adder tree)를 포함하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  26. 제25항에 있어서, 각각의 직렬 내적 서브유닛은 하나 이상의 부정 블록(negation block)을 더 포함하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  27. 제25항에 있어서, 각각의 직렬 내적 서브유닛은 비교기를 더 포함하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  28. 제3항에 있어서, 상기 셔플러는 하나 이상의 멀티플렉서를 포함하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  29. 제1항에 있어서, 상기 시스템의 동작을 제어하기 위한 컨트롤러를 더 포함하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  30. 제1항에 있어서, 제2 직렬 내적 서브유닛의 출력을 입력으로서 선택적으로 사용하는 제1 직렬 내적 서브유닛을 더 포함하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  31. 제30항에 있어서, 상기 제1 직렬 내적 서브유닛은 신경망에서의 레이어의 하나 이상의 차원에 기초하여 출력을 선택적으로 사용하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  32. 제2항에 있어서, 상기 디스패처는 비트의 서브그룹 내의 상기 하나 이상의 뉴런을 프로세싱하여 상기 뉴런에서의 상기 1인 비트를 식별하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  33. 제2항에 있어서, 상기 하나 이상의 뉴런은, 1인 비트의 상기 오프셋을 전달하기 이전에, 2의 양의 거듭제곱(positive power) 및 음의 거듭제곱(negative power)을 사용하여 인코딩되는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  34. 제2항에 있어서, 상기 하나 이상의 뉴런 중 적어도 둘 이상은 동시적으로 프로세싱되고 서브그룹으로 그룹화되는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  35. 제34항에 있어서, 상기 서브그룹 중 적어도 하나는, 다른 동시에 프로세싱되는 서브그룹이 진행하기를 대기하지 않고도, 뉴런 값의 새로운 세트를 프로세싱하도록 독립적으로 진행할 수 있는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  36. 제2항에 있어서, 하나 이상의 뉴런의 블록에서 상기 1인 비트를 식별하는 상기 하나 이상의 오프셋에서 식별되는 적어도 하나의 최하위 비트는 드랍되고 연속 내적 서브유닛에 의해 프로세싱되지 않는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  37. 제2항에 있어서, 상기 하나 이상의 비트 직렬 타일은 상기 하나 이상의 뉴런을 1인 비트 오프셋으로 인코딩하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  38. 제1항에 있어서, 상기 뉴런 또는 시냅스는 감소된 정밀도에서 메모리에 저장되는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  39. 제38항에 있어서, 상기 뉴런 또는 시냅스는 블록 단위로 저장되되, 각각의 블록은 시작 메모리 어드레스를 가지며, 상기 시작 메모리 어드레스는 메모리 내의 다른 곳의 어레이에서 명시되는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  40. 제1항에 있어서, 상기 제2 인터페이스는 비트 병렬 인터페이스(bit-parallel interface)인, 신경망에서의 비트 직렬 계산을 위한 시스템.
  41. 제1항에 있어서, 하나 이상의 직렬 내적 서브유닛을 더 포함하되, 각각의 직렬 내적 서브유닛은 뉴런 또는 시냅스 블록 및 뉴런 또는 시냅스 상기 블록에서 1인 비트를 식별하는 하나 이상의 오프셋을 프로세싱하고, 상기 블록에서 적어도 하나의 제로 비트를 스킵하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  42. 신경망에서의 비트 직렬 계산을 위한 시스템으로서,
    신경망에서 비트 직렬 계산을 수행하기 위한 하나 이상의 비트 직렬 타일로서, 각각의 비트 직렬 타일은 입력 뉴런 및 시냅스를 수신하고, 출력 뉴런을 전달하는, 상기 하나 이상의 비트 직렬 타일;
    뉴런을 저장하기 위한 그리고 디스패처 및 리듀서를 통해 하나 이상의 비트 직렬 타일과 통신하는 활성화 메모리를 포함하고,
    상기 디스패처는 상기 활성화 메모리로부터 뉴런을 판독하고 상기 뉴런을 제1 인터페이스를 통해 상기 하나 이상의 비트 직렬 타일로 전달하고,
    상기 디스패처는 메모리로부터 시냅스를 판독하고 상기 시냅스를 제2 인터페이스를 통해 상기 하나 이상의 비트 직렬 타일로 전달하고,
    상기 리듀서는 상기 하나 이상의 비트 직렬 타일로부터 상기 출력 뉴런을 수신하고, 상기 출력 뉴런을 제3 인터페이스를 통해 상기 활성화 메모리로 전달하고;
    상기 제1 인터페이스 및 상기 제2 인터페이스는 상기 뉴런 및 상기 시냅스를 상기 하나 이상의 비트 직렬 타일로 비트 직렬로 전달하는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  43. 제42항에 있어서, 상기 디스패처는, 입력 뉴런의 정밀도를, 상기 입력 뉴런의 최상위 비트 값 또는 최하위 비트 값에 기초하여 감소시키는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  44. 제42항에 있어서, 상기 디스패처는, 상기 입력 뉴런의 정밀도를, 상기 입력 뉴런의 최상위 비트 값 및 최하위 비트 값에 기초하여 감소시키는, 신경망에서의 비트 직렬 계산을 위한 시스템.
  45. 비트 직렬 신경망 가속기(bit-serial neural network accelerator)를 포함하는 집적 회로로서,
    신경망에서 비트 직렬 계산을 수행하기 위한 하나 이상의 비트 직렬 타일로서, 각각의 비트 직렬 타일은 입력 뉴런 및 시냅스를 수신하고, 출력 뉴런을 생성하는, 상기 하나 이상의 비트 직렬 타일;
    뉴런을 저장하기 위한 그리고 디스패처 및 리듀서를 통해 하나 이상의 비트 직렬 타일과 통신하는 활성화 메모리를 포함하되,
    상기 디스패처는 상기 활성화 메모리로부터 뉴런을 판독하고 상기 뉴런을 제1 인터페이스를 통해 상기 하나 이상의 비트 직렬 타일로 전달하고,
    상기 디스패처는 메모리로부터 시냅스를 판독하고 상기 시냅스를 제2 인터페이스를 통해 상기 하나 이상의 비트 직렬 타일로 전달하고,
    상기 리듀서는 상기 하나 이상의 비트 직렬 타일로부터 상기 출력 뉴런을 수신하고, 상기 출력 뉴런을 제3 인터페이스를 통해 상기 활성화 메모리로 전달하고;
    상기 제1 인터페이스 및 상기 제2 인터페이스 중 하나는 상기 뉴런 또는 상기 시냅스를 상기 하나 이상의 비트 직렬 타일로 비트 직렬로 전달하고, 상기 제1 인터페이스 및 상기 제2 인터페이스 중 나머지 하나는 상기 뉴런 또는 상기 시냅스를 상기 하나 이상의 비트 직렬 타일로 비트 병렬로 전달하는, 비트 직렬 신경망 가속기를 포함하는 집적 회로.
  46. 비트 직렬 신경망 가속기를 포함하는 집적 회로로서,
    신경망에서 비트 직렬 계산을 수행하기 위한 하나 이상의 비트 직렬 타일로서, 각각의 비트 직렬 타일은 입력 뉴런 및 시냅스를 수신하고, 출력 뉴런을 전달하는, 상기 하나 이상의 비트 직렬 타일;
    뉴런을 저장하기 위한 그리고 디스패처 및 리듀서를 통해 하나 이상의 비트 직렬 타일과 통신하는 활성화 메모리를 포함하되,
    상기 디스패처는 상기 활성화 메모리로부터 뉴런을 판독하고 상기 뉴런을 제1 인터페이스를 통해 상기 하나 이상의 비트 직렬 타일로 전달하고,
    상기 디스패처는 메모리로부터 시냅스를 판독하고 상기 시냅스를 제2 인터페이스를 통해 상기 하나 이상의 비트 직렬 타일로 전달하고,
    상기 리듀서는 상기 하나 이상의 비트 직렬 타일로부터 상기 출력 뉴런을 수신하고, 상기 출력 뉴런을 제3 인터페이스를 통해 상기 활성화 메모리로 전달하고;
    상기 제1 인터페이스 및 상기 제2 인터페이스는 상기 뉴런 및 상기 시냅스를 상기 하나 이상의 비트 직렬 타일로 비트 직렬로 전달하는, 비트 직렬 신경망 가속기를 포함하는 집적 회로.
KR1020187037389A 2016-05-26 2017-05-26 심층 신경망용 가속기 KR102120396B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020207015810A KR102459854B1 (ko) 2016-05-26 2017-05-26 심층 신경망용 가속기

Applications Claiming Priority (15)

Application Number Priority Date Filing Date Title
US201662341814P 2016-05-26 2016-05-26
US62/341,814 2016-05-26
US201662381202P 2016-08-30 2016-08-30
US62/381,202 2016-08-30
US201662395027P 2016-09-15 2016-09-15
US62/395,027 2016-09-15
US201662416782P 2016-11-03 2016-11-03
US62/416,782 2016-11-03
US201762448454P 2017-01-20 2017-01-20
US62/448,454 2017-01-20
US201762454268P 2017-02-03 2017-02-03
US62/454,268 2017-02-03
US201762490659P 2017-04-27 2017-04-27
US62/490,659 2017-04-27
PCT/CA2017/050638 WO2017201627A1 (en) 2016-05-26 2017-05-26 Accelerator for deep neural networks

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020207015810A Division KR102459854B1 (ko) 2016-05-26 2017-05-26 심층 신경망용 가속기

Publications (2)

Publication Number Publication Date
KR20190010642A KR20190010642A (ko) 2019-01-30
KR102120396B1 true KR102120396B1 (ko) 2020-06-08

Family

ID=60412016

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020207015810A KR102459854B1 (ko) 2016-05-26 2017-05-26 심층 신경망용 가속기
KR1020187037389A KR102120396B1 (ko) 2016-05-26 2017-05-26 심층 신경망용 가속기

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020207015810A KR102459854B1 (ko) 2016-05-26 2017-05-26 심층 신경망용 가속기

Country Status (7)

Country Link
US (3) US10387771B2 (ko)
EP (1) EP3465550B1 (ko)
JP (2) JP6890615B2 (ko)
KR (2) KR102459854B1 (ko)
CN (1) CN109416754B (ko)
CA (1) CA2990709C (ko)
WO (1) WO2017201627A1 (ko)

Families Citing this family (60)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9875104B2 (en) 2016-02-03 2018-01-23 Google Llc Accessing data in multi-dimensional tensors
US10949736B2 (en) * 2016-11-03 2021-03-16 Intel Corporation Flexible neural network accelerator and methods therefor
CN106557332A (zh) * 2016-11-30 2017-04-05 上海寒武纪信息科技有限公司 一种指令生成过程的复用方法及装置
US20180232627A1 (en) * 2017-02-16 2018-08-16 Intel IP Corporation Variable word length neural network accelerator circuit
CN109359736A (zh) * 2017-04-06 2019-02-19 上海寒武纪信息科技有限公司 网络处理器和网络运算方法
KR102258414B1 (ko) * 2017-04-19 2021-05-28 상하이 캠브리콘 인포메이션 테크놀로지 컴퍼니 리미티드 처리 장치 및 처리 방법
US10019668B1 (en) * 2017-05-19 2018-07-10 Google Llc Scheduling neural network processing
GB2568776B (en) * 2017-08-11 2020-10-28 Google Llc Neural network accelerator with parameters resident on chip
EP3605402B1 (en) * 2017-08-31 2022-08-31 Cambricon (Xi'an) Semiconductor Co., Ltd. Chip device and related product
WO2019114842A1 (zh) 2017-12-14 2019-06-20 北京中科寒武纪科技有限公司 一种集成电路芯片装置
CN109961137B (zh) * 2017-12-14 2020-10-09 中科寒武纪科技股份有限公司 集成电路芯片装置及相关产品
US10872291B2 (en) * 2017-12-22 2020-12-22 Alibaba Group Holding Limited On-chip communication system for neural network processors
CN109978131B (zh) * 2017-12-28 2020-05-22 中科寒武纪科技股份有限公司 集成电路芯片装置、方法及相关产品
CN108256644B (zh) * 2018-01-05 2021-06-22 上海兆芯集成电路有限公司 微处理器电路以及执行神经网络运算的方法
KR102463532B1 (ko) * 2018-01-16 2022-11-08 한국전자통신연구원 신경망 컴퓨팅 장치 및 그것의 동작 방법
US11630997B2 (en) * 2018-01-23 2023-04-18 Samsung Electronics Co., Ltd. Method and apparatus with bit-serial data processing of a neural network
GB201801639D0 (en) * 2018-02-01 2018-03-21 Ruff Brendan Patrick Low precision efficient multiplication free convolutional filter bank device
SG11202007532TA (en) * 2018-02-16 2020-09-29 Governing Council Univ Toronto Neural network accelerator
US11256841B1 (en) * 2018-03-06 2022-02-22 Ansys Lumerical Ip, Llc Method and system to implement a composite, multi-domain model for electro-optical modeling and simulation
US10621489B2 (en) * 2018-03-30 2020-04-14 International Business Machines Corporation Massively parallel neural inference computing elements
KR102162749B1 (ko) * 2018-04-03 2020-10-07 주식회사 퓨리오사에이아이 뉴럴 네트워크 프로세서
US10698730B2 (en) 2018-04-03 2020-06-30 FuriosaAI Co. Neural network processor
WO2019194466A1 (ko) * 2018-04-03 2019-10-10 주식회사 퓨리오사에이아이 뉴럴 네트워크 프로세서
US10657442B2 (en) * 2018-04-19 2020-05-19 International Business Machines Corporation Deep learning accelerator architecture with chunking GEMM
US10522226B2 (en) * 2018-05-01 2019-12-31 Silicon Storage Technology, Inc. Method and apparatus for high voltage generation for analog neural memory in deep learning artificial neural network
JP7490572B2 (ja) * 2018-05-08 2024-05-27 三星電子株式会社 ニューラル・ネットワーク処理要素
US20190378013A1 (en) * 2018-06-06 2019-12-12 Kneron Inc. Self-tuning model compression methodology for reconfiguring deep neural network and electronic device
US11275713B2 (en) * 2018-06-09 2022-03-15 International Business Machines Corporation Bit-serial linear algebra processor
US20190392287A1 (en) 2018-06-22 2019-12-26 Samsung Electronics Co., Ltd. Neural processor
KR102650660B1 (ko) 2018-09-03 2024-03-25 삼성전자주식회사 뉴로모픽 장치 및 뉴로모픽 장치에서 멀티-비트 뉴로모픽 연산을 처리하는 방법
WO2020072619A1 (en) * 2018-10-02 2020-04-09 The Regents Of The University Of Michigan Addressing bottlenecks for deep neural network execution of a graphics processor unit
US11354888B2 (en) 2018-11-16 2022-06-07 GM Global Technology Operations LLC Method and apparatus for a neural network
KR102451519B1 (ko) * 2018-11-20 2022-10-07 삼성전자주식회사 룩업 테이블 기반의 비트-시리얼 처리 요소를 포함하는 심층 신경망 가속기
US10657617B1 (en) 2018-11-26 2020-05-19 GM Global Technology Operations LLC Method and apparatus for memory access management for data processing
KR102562320B1 (ko) 2018-12-24 2023-08-01 삼성전자주식회사 비트 연산 기반의 뉴럴 네트워크 처리 방법 및 장치
CN109711542B (zh) * 2018-12-29 2020-08-18 西安交通大学 一种支持动态精度的dnn加速器及其实现方法
US11551093B2 (en) * 2019-01-22 2023-01-10 Adobe Inc. Resource-aware training for neural networks
WO2020172494A1 (en) 2019-02-22 2020-08-27 Neureality Ltd. Directed and interconnected grid dataflow architecture
US11211944B2 (en) 2019-04-17 2021-12-28 Samsung Electronics Co., Ltd. Mixed-precision compression with random access
US11671111B2 (en) 2019-04-17 2023-06-06 Samsung Electronics Co., Ltd. Hardware channel-parallel data compression/decompression
US11880760B2 (en) 2019-05-01 2024-01-23 Samsung Electronics Co., Ltd. Mixed-precision NPU tile with depth-wise convolution
US10853066B1 (en) * 2019-05-07 2020-12-01 Memryx Incorporated Memory processing units and methods of computing DOT products including zero bit skipping
US10998037B2 (en) 2019-05-07 2021-05-04 Memryx Incorporated Memory processing units and methods of computing dot products
US11488650B2 (en) 2020-04-06 2022-11-01 Memryx Incorporated Memory processing unit architecture
US11507349B2 (en) * 2019-06-26 2022-11-22 Microsoft Technology Licensing, Llc Neural processing element with single instruction multiple data (SIMD) compute lanes
US11604972B2 (en) 2019-06-28 2023-03-14 Microsoft Technology Licensing, Llc Increased precision neural processing element
KR102435447B1 (ko) * 2019-07-23 2022-08-25 포항공과대학교 산학협력단 뉴럴 네트워크 시스템 및 이의 동작 방법
WO2021100900A1 (ko) * 2019-11-20 2021-05-27 전자부품연구원 적응형 딥러닝 가속 장치 및 방법
CN112990449B (zh) * 2019-12-12 2022-10-25 上海交通大学 一种面向神经网络的可变计算精度的simt系统
US11809798B2 (en) * 2019-12-13 2023-11-07 Intel Corporation Implementing large multipliers in tensor arrays
US11907719B2 (en) * 2019-12-13 2024-02-20 Intel Corporation FPGA specialist processing block for machine learning
US11314483B2 (en) * 2020-01-08 2022-04-26 International Business Machines Corporation Bit-serial computation with dynamic frequency modulation for error resiliency in neural network
US11281554B2 (en) 2020-03-17 2022-03-22 Samsung Electronics Co., Ltd. System and method for in-memory computation
US12001929B2 (en) * 2020-04-01 2024-06-04 Samsung Electronics Co., Ltd. Mixed-precision neural processing unit (NPU) using spatial fusion with load balancing
US11514326B2 (en) 2020-06-18 2022-11-29 International Business Machines Corporation Drift regularization to counteract variation in drift coefficients for analog accelerators
KR102474054B1 (ko) * 2020-06-22 2022-12-06 주식회사 퓨리오사에이아이 뉴럴네트워크 프로세서
KR102474053B1 (ko) * 2020-06-22 2022-12-06 주식회사 퓨리오사에이아이 뉴럴네트워크 프로세서
WO2022027172A1 (zh) * 2020-08-03 2022-02-10 深圳市大疆创新科技有限公司 数据处理装置、方法和系统以及神经网络加速器
CN114004347A (zh) 2021-08-30 2022-02-01 平头哥(上海)半导体技术有限公司 用于加速图神经网络属性访问的硬件加速器、系统和方法
CN114254740B (zh) * 2022-01-18 2022-09-30 长沙金维信息技术有限公司 卷积神经网络加速计算方法、计算系统、芯片及接收机

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100142987A1 (en) 2008-12-08 2010-06-10 Oki Data Corporation Fixing device and image forming apparatus
US20150170020A1 (en) 2013-12-13 2015-06-18 Amazon Technologies, Inc. Reducing dynamic range of low-rank decomposition matrices
US20160071005A1 (en) 2014-09-05 2016-03-10 Qualcomm Incorporated Event-driven temporal convolution for asynchronous pulse-modulated sampled signals

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3260357B2 (ja) * 1990-01-24 2002-02-25 株式会社日立製作所 情報処理装置
EP0486684A1 (en) * 1990-05-22 1992-05-27 International Business Machines Corporation Virtual neurocomputer architectures for neural networks
JP2785155B2 (ja) * 1990-09-10 1998-08-13 富士通株式会社 ニューロコンピュータの非同期制御方式
JPH0652132A (ja) * 1992-07-28 1994-02-25 Mitsubishi Electric Corp 並列演算半導体集積回路装置およびそれを用いたシステム
JPH07210533A (ja) * 1994-01-19 1995-08-11 Nippon Telegr & Teleph Corp <Ntt> ニューラルネットワーク回路及びこれを用いた演算方法
US5630024A (en) * 1994-01-19 1997-05-13 Nippon Telegraph And Telephone Corporation Method and apparatus for processing using neural network with reduced calculation amount
US5751913A (en) * 1996-07-29 1998-05-12 Industrial Technology Research Institute Reconfigurable neural network and difference-square neuron
US6199057B1 (en) * 1996-10-23 2001-03-06 California Institute Of Technology Bit-serial neuroprocessor architecture
RU2131145C1 (ru) * 1998-06-16 1999-05-27 Закрытое акционерное общество Научно-технический центр "Модуль" Нейропроцессор, устройство для вычисления функций насыщения, вычислительное устройство и сумматор
GB2471067B (en) * 2009-06-12 2011-11-30 Graeme Roy Smith Shared resource multi-thread array processor
US9449257B2 (en) * 2012-12-04 2016-09-20 Institute Of Semiconductors, Chinese Academy Of Sciences Dynamically reconstructable multistage parallel single instruction multiple data array processing system
US9646611B2 (en) * 2014-11-06 2017-05-09 Microsoft Technology Licensing, Llc Context-based actions
CN105488563A (zh) * 2015-12-16 2016-04-13 重庆大学 面向深度学习的稀疏自适应神经网络、算法及实现装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100142987A1 (en) 2008-12-08 2010-06-10 Oki Data Corporation Fixing device and image forming apparatus
US20150170020A1 (en) 2013-12-13 2015-06-18 Amazon Technologies, Inc. Reducing dynamic range of low-rank decomposition matrices
US20160071005A1 (en) 2014-09-05 2016-03-10 Qualcomm Incorporated Event-driven temporal convolution for asynchronous pulse-modulated sampled signals

Also Published As

Publication number Publication date
JP7166389B2 (ja) 2022-11-07
CN109416754B (zh) 2020-06-23
EP3465550B1 (en) 2023-09-27
US11610100B2 (en) 2023-03-21
KR20200067915A (ko) 2020-06-12
CN109416754A (zh) 2019-03-01
JP2019522271A (ja) 2019-08-08
JP6890615B2 (ja) 2021-06-18
EP3465550A4 (en) 2020-01-22
US20230186065A1 (en) 2023-06-15
CA2990709C (en) 2018-09-04
US20200125931A1 (en) 2020-04-23
CA2990709A1 (en) 2017-11-30
US10387771B2 (en) 2019-08-20
US20170357891A1 (en) 2017-12-14
EP3465550A1 (en) 2019-04-10
JP2021144727A (ja) 2021-09-24
WO2017201627A1 (en) 2017-11-30
KR102459854B1 (ko) 2022-10-27
KR20190010642A (ko) 2019-01-30

Similar Documents

Publication Publication Date Title
KR102120396B1 (ko) 심층 신경망용 가속기
CN111291859B (zh) 通用矩阵-矩阵乘法数据流加速器半导体电路
Ma et al. Optimizing the convolution operation to accelerate deep neural networks on FPGA
Judd et al. Stripes: Bit-serial deep neural network computing
US11106606B2 (en) Exploiting input data sparsity in neural network compute units
Ma et al. Performance modeling for CNN inference accelerators on FPGA
Moini et al. A resource-limited hardware accelerator for convolutional neural networks in embedded vision applications
JP2021515300A (ja) ニューラル・ネットワーク・アクセラレータ
Jaiswal et al. FPGA-based high-performance and scalable block LU decomposition architecture
CN108171317A (zh) 一种基于soc的数据复用卷积神经网络加速器
JP2019522850A (ja) ディープニューラルネットワーク用のアクセラレータ
US11544548B2 (en) Processing element and neural processing device including same
CN110415157A (zh) 一种矩阵乘法的计算方法及装置
Chen et al. An efficient accelerator for multiple convolutions from the sparsity perspective
Tao et al. Lw-gcn: A lightweight fpga-based graph convolutional network accelerator
US20220300794A1 (en) Processing element, neural processing device including same, and method for calculating thereof
Sridharan et al. X-former: In-memory acceleration of transformers
CN114265673A (zh) 利用共享控制的计算阵列的空间分片
JP6888073B2 (ja) チップ装置および関連製品
JP6888074B2 (ja) チップ装置および関連製品
Que Reconfigurable acceleration of recurrent neural networks
US20230334304A1 (en) Neural processing device
Fang et al. Accelerating BPTT-Based SNN Training with Sparsity-Aware and Pipelined Architecture
CN113362878A (zh) 用于存储器内计算的方法和用于计算的系统
CN118260070A (zh) 一种加速异构处理器池化运算的方法和系统

Legal Events

Date Code Title Description
A201 Request for examination
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
A107 Divisional application of patent
GRNT Written decision to grant