KR102572705B1 - 스케일러블 뉴럴 네트워크 프로세싱 엔진 - Google Patents

스케일러블 뉴럴 네트워크 프로세싱 엔진 Download PDF

Info

Publication number
KR102572705B1
KR102572705B1 KR1020207033125A KR20207033125A KR102572705B1 KR 102572705 B1 KR102572705 B1 KR 102572705B1 KR 1020207033125 A KR1020207033125 A KR 1020207033125A KR 20207033125 A KR20207033125 A KR 20207033125A KR 102572705 B1 KR102572705 B1 KR 102572705B1
Authority
KR
South Korea
Prior art keywords
neural
data
task
kernel
processor circuit
Prior art date
Application number
KR1020207033125A
Other languages
English (en)
Other versions
KR20200143479A (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 KR1020237028820A priority Critical patent/KR20230129575A/ko
Publication of KR20200143479A publication Critical patent/KR20200143479A/ko
Application granted granted Critical
Publication of KR102572705B1 publication Critical patent/KR102572705B1/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/04Architecture, e.g. interconnection topology
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3296Power saving characterised by the action undertaken by lowering the supply or operating voltage
    • 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/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/28Handling requests for interconnection or transfer for access to input/output bus using burst mode transfer, e.g. direct memory access DMA, cycle steal
    • 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/08Learning methods
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/28DMA
    • 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)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Biophysics (AREA)
  • Biomedical Technology (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Artificial Intelligence (AREA)
  • Neurology (AREA)
  • Image Processing (AREA)
  • Image Analysis (AREA)

Abstract

실시예들은 하나 이상의 뉴럴 네트워크들을 인스턴스화하기 위한 스케일러블 아키텍처를 갖는 뉴럴 프로세서 회로에 관한 것이다. 뉴럴 프로세서 회로는 뉴럴 프로세서 회로 외부의 메모리에 커플링된 데이터 버퍼, 및 복수의 뉴럴 엔진 회로들을 포함한다. 뉴럴 네트워크들을 인스턴스화하는 태스크들을 실행하기 위해, 각각의 뉴럴 엔진 회로는 입력 데이터 및 커널 계수들을 사용하여 출력 데이터를 생성한다. 뉴럴 프로세서 회로는 태스크들의 구성 데이터에 따라 선택적으로 활성화 또는 비활성화되는 다수의 뉴럴 엔진 회로들을 포함할 수 있다. 게다가, 전자 디바이스는 태스크들을 실행하기 위해 선택적으로 활성화 또는 비활성화되는 다수의 뉴럴 프로세서 회로들을 포함할 수 있다.

Description

스케일러블 뉴럴 네트워크 프로세싱 엔진
본 개시내용은 뉴럴 네트워크(neural network)를 구현하기 위한 회로에 관한 것으로, 더 구체적으로, 뉴럴 네트워크 태스크들의 스케일러블(scalable) 프로세싱에 관한 것이다.
인공 뉴럴 네트워크(ANN)는 입력 데이터를 프로세싱하기 위해, 연결된 노드들의 집합을 사용하는 컴퓨팅 시스템 또는 모델이다. ANN은 전형적으로, 상이한 계층들이 이들의 입력에 대해 상이한 타입의 변환을 수행하는 계층들로 구성된다. ANN의 확장들 또는 변형들, 이를테면, 콘볼루션 뉴럴 네트워크(convolution neural network; CNN), 심층 뉴럴 네트워크(deep neural network; DNN)들, 순환 뉴럴 네트워크(recurrent neural network; RNN)들, 및 심층 신뢰 네트워크(deep belief network; DBN)들이 많은 주의를 받게 되었다. 이러한 컴퓨팅 시스템들 또는 모델들은 종종, 승산 및 누산을 포함하는 광범위한 컴퓨팅 동작들을 수반한다. 예컨대, CNN은, 승산 및 누산 동작들로 분해될 수 있는, 입력 데이터와 커널 데이터 사이의 콘볼루션을 주로 사용하는 기계 학습 기법의 하나의 종류이다.
수행될 입력 데이터 및 동작들의 타입들에 따라, 이들 기계 학습 시스템들 또는 모델들은 상이하게 구성될 수 있다. 그러한 다양한 구성은, 예컨대, 사전-프로세싱 동작들, 입력 데이터 내의 채널들의 수, 사용될 커널 데이터, 콘볼루션 결과에 적용될 비-선형 함수, 및 다양한 사후 프로세스 동작들의 적용을 포함할 것이다. 다양한 구성의 기계 학습 시스템들 또는 모델들을 인스턴스화 및 실행하기 위해 중앙 프로세싱 유닛(CPU) 및 이의 메인 메모리를 사용하는 것은 비교적 용이한데, 이는 그러한 시스템들 또는 모델들이 코드에 대한 단순한 업데이트들로 인스턴스화될 수 있기 때문이다. 그러나, 이들 기계 학습 시스템들 또는 모델들의 다양한 동작들에 대해 단지 CPU에만 의존하는 것은 중앙 프로세싱 유닛(CPU)의 상당한 대역폭을 소비할 뿐만 아니라 전체 전력 소비를 증가시킬 것이다.
실시예들은 하나 이상의 뉴럴 네트워크들을 인스턴스화하기 위한 스케일러블 아키텍처를 갖는 뉴럴 프로세서 회로에 관한 것이다. 뉴럴 프로세서 회로는, 뉴럴 네트워크를 인스턴스화 또는 구현하기 위해 뉴럴 프로세서 회로를 프로그래밍하는 구성 데이터에 따라, 입력 데이터의 병렬 프로세싱을 지원하도록 선택적으로 활성화 또는 비활성화되는 다수의 엔진 회로들을 포함할 수 있다. 뉴럴 프로세서 회로는 복수의 뉴럴 엔진 회로들, 데이터 버퍼, 및 커널 추출 회로를 포함한다. 뉴럴 엔진 회로들은 선택적으로 활성화되고, 뉴럴 엔진 회로들 각각은 출력 데이터를 생성하기 위해 입력 데이터 및 커널 계수들에 대해 콘볼루션 동작들을 수행하도록 구성된다. 데이터 버퍼는 복수의 뉴럴 엔진 회로들과 뉴럴 프로세서 회로 외부의 메모리 사이에 있다. 데이터 버퍼는 뉴럴 엔진 회로들로 전송하기 위한 메모리로부터의 입력 데이터 및 뉴럴 엔진 회로들로부터 수신된 출력 데이터를 저장한다. 커널 추출 회로는 뉴럴 프로세서 회로 외부의 메모리로부터 커널 데이터를 수신하고, 커널 데이터로부터 추출된 대응하는 커널 계수를 활성화를 위해 선택된 뉴럴 엔진 회로들로 전송한다.
일부 실시예들에서, 뉴럴 태스크 관리자 회로는, 태스크를 위해 뉴럴 엔진 회로들 중 하나 이상을 활성화 또는 비활성화시키기 위해, 뉴럴 엔진 회로들에 구성 데이터를 제공하도록 구성된다.
일부 실시예들에서, 데이터 버퍼는, 뉴럴 태스크 관리자 회로로부터 구성 데이터를 수신하는 것에 응답하여, 입력 데이터 및 출력 데이터를 저장하기 위한 메모리 공간을 할당한다.
일부 실시예에서, 커널 추출 회로는, 뉴럴 태스크 관리자로부터 구성 데이터를 수신하는 것에 응답하여, 커널 데이터를 저장하기 위한 메모리 공간을 할당한다.
일부 실시예들에서, 뉴럴 태스크 관리자 회로는 태스크를 위해 뉴럴 프로세서 회로를 활성화 또는 비활성화시키기 위해 구성 데이터를 뉴럴 프로세서 회로에 제공하도록 구성된다.
전자 디바이스는 선택적으로 활성화 또는 비활성화되는 다수의 뉴럴 프로세서 회로들을 포함할 수 있다.
일부 실시예들에서, 뉴럴 프로세서 회로의 복수의 뉴럴 엔진 회로들은 선택적으로 활성화된다. 뉴럴 엔진 회로들 각각은 출력 데이터를 생성하기 위해 입력 데이터 및 커널 계수들에 대해 콘볼루션 동작들을 수행하도록 구성된다. 뉴럴 엔진 회로들로 전송하기 위한 입력 데이터 및 뉴럴 엔진 회로들로부터 수신된 출력 데이터는 뉴럴 엔진 회로의 데이터 버퍼에 저장된다. 커널 데이터로부터 추출된 대응하는 커널 계수는 활성화를 위해 선택된 뉴럴 엔진 회로들로 전송된다.
도 1은 일 실시예에 따른 전자 디바이스의 고레벨 도면이다.
도 2는 일 실시예에 따른 전자 디바이스 내의 컴포넌트들을 도시한 블록도이다.
도 3은 일 실시예에 따른 뉴럴 프로세서 회로를 예시하는 블록도이다.
도 4는 일 실시예에 따른, 뉴럴 프로세서 회로에서의 뉴럴 엔진의 블록도이다.
도 5는 일 실시예에 따른, 뉴럴 프로세서 회로에서 입력 데이터를 프로세싱하기 위한 루프들을 예시하는 개념도이다.
도 6은 일 실시예에 따른, 입력 데이터를 슬라이스들, 타일들, 및 작업 유닛들로 세그먼트화하는 것을 도시한 개념도이다.
도 7은 일 실시예에 따른, 뉴럴 프로세서 회로의 컴포넌트들에서의 래스터라이저(rasterizer)들의 프로그래밍을 예시하는 도면이다.
도 8은 일 실시예에 따른, 뉴럴 프로세서 회로에서 입력 데이터를 프로세싱하는 방법을 예시하는 흐름도이다.
도 9는 일 실시예에 따른, 태스크들의 태스크 리스트에 의해 표현되는 뉴럴 네트워크를 예시하는 개략적인 블록도이다.
도 10은 일 실시예에 따른 뉴럴 태스크 관리자를 예시하는 블록도이다.
도 11은 일 실시예에 따른, 태스크 큐를 사용한 태스크 디스크립터(descriptor)들의 검색을 예시하는 도면이다.
도 12는 일 실시예에 따른 태스크 디스크립터를 예시하는 도면이다.
도 13은 일 실시예에 따른, 뉴럴 태스크 관리자의 페치 큐 및 구성 큐를 예시하는 블록도이다.
도 14는 일 실시예에 따른, 뉴럴 프로세서 회로에서 태스크들을 관리하는 방법을 예시하는 흐름도이다.
도 15는 일 실시예에 따른 전자 디바이스 내의 다수의 뉴럴 프로세서 회로들을 예시하는 블록도이다.
도 16은 일 실시예에 따른 뉴럴 엔진의 커널 추출 회로를 예시하는 블록도이다.
도 17은 일 실시예에 따른, 스케일러블 뉴럴 프로세서 회로를 이용하여 입력 데이터를 프로세싱하는 방법을 예시하는 흐름도이다.
도면들은 오로지 예시의 목적을 위해 다양한 비제한적 실시예들을 도시하고 발명을 실시하기 위한 구체적인 내용은 오로지 예시의 목적을 위해 다양한 비제한적 실시예들을 설명한다.
이제, 실시예들이 상세하게 참조될 것이며, 그 실시예들의 예들이 첨부 도면들에 예시된다. 하기의 상세한 설명에서, 많은 구체적인 상세사항들이 다양하게 설명된 실시예들의 완전한 이해를 제공하기 위해 기재된다. 그러나, 기술되는 실시예들은 이러한 특정 세부사항들 없이 실시될 수 있다. 다른 예들에서, 잘 알려진 방법들, 절차들, 컴포넌트들, 회로들, 및 네트워크들은 실시예들의 태양들을 불필요하게 모호하게 하지 않기 위해 상세히 설명되지 않았다.
본 개시내용의 실시예들은 뉴럴 네트워크들을 인스턴스화하기 위해 선택적으로 활성화될 수 있는 복수의 뉴럴 엔진들을 포함하는 스케일러블 뉴럴 프로세서 회로에 관한 것이다. 프로세싱 사이클에 대해, (예컨대, 시스템 메모리 및 제1 및 제2 뉴럴 엔진 회로들에 커플링된) 뉴럴 프로세서 회로의 데이터 버퍼는 활성인 뉴럴 엔진 회로들 각각에 입력 데이터를 제공한다. 활성 뉴럴 엔진 회로들 각각은 상이한 출력 데이터를 생성하기 위해 입력 데이터에 상이한 커널 계수들을 적용할 수 있다. 커널 데이터를 저장하는 커널 메모리들 및 데이터 버퍼의 사이즈가 또한 변경될 수 있다.
예시적인 전자 디바이스
전자 디바이스들, 그러한 디바이스들에 대한 사용자 인터페이스들, 및 그러한 디바이스들을 사용하기 위한 연관된 프로세스들의 실시예들이 설명된다. 일부 실시예들에서, 디바이스는 PDA(personal digital assistant) 및/또는 음악 재생기 기능들과 같은 다른 기능들을 또한 포함하는 휴대용 통신 디바이스, 예컨대 모바일 전화기이다. 휴대용 다기능 디바이스들의 예시적인 실시예들은 미국 캘리포니아주 쿠퍼티노 소재의 Apple Inc.로부터의 iPhone®, iPod Touch®, Apple Watch®, 및 iPad® 디바이스들을 제한 없이 포함한다. 웨어러블, 랩톱 또는 태블릿 컴퓨터와 같은 다른 휴대용 전자 디바이스들이 선택적으로 사용된다. 일부 실시예들에서, 디바이스는 휴대용 통신 디바이스가 아니라, 휴대용 용도를 위해 설계되지 않은 데스크톱 컴퓨터 또는 다른 컴퓨팅 디바이스이다. 일부 실시예들에서, 개시되는 전자 디바이스는 터치 감응형 표면(예컨대, 터치 스크린 디스플레이 및/또는 터치패드)을 포함할 수 있다. 도 1과 관련하여 아래에서 기술되는 예시적인 전자 디바이스(예컨대, 디바이스(100))는 사용자 입력을 수신하기 위한 터치 감응형 표면을 포함할 수 있다. 전자 디바이스는 또한 물리적 키보드, 마우스 및/또는 조이스틱과 같은 하나 이상의 다른 물리적 사용자 인터페이스 디바이스들을 포함할 수 있다.
도 1은 일 실시예에 따른 전자 디바이스(100)의 고레벨 도면이다. 디바이스(100)는 "홈" 또는 메뉴 버튼(104)과 같은 하나 이상의 물리적 버튼들을 포함할 수 있다. 메뉴 버튼(104)은, 예를 들어, 디바이스(100) 상에서 실행되는 애플리케이션들의 세트 내의 임의의 애플리케이션으로 내비게이팅하는 데 사용된다. 일부 실시예들에서, 메뉴 버튼(104)은 메뉴 버튼(104) 상의 지문을 식별하는 지문 센서를 포함한다. 지문 센서는 메뉴 버튼(104) 상의 손가락이 디바이스(100)를 잠금해제하기 위해 저장된 지문과 매칭하는 지문을 갖는지의 여부를 판정하는 데 사용될 수 있다. 대안으로, 일부 실시예들에서, 메뉴 버튼(104)은 터치 스크린 상에 디스플레이된 그래픽 사용자 인터페이스(GUI)에서 소프트 키로서 구현된다.
일부 실시예들에서, 디바이스(100)는 터치 스크린(150), 메뉴 버튼(104), 디바이스로의 전력을 공급/차단하고 디바이스를 잠그기 위한 푸시 버튼(106), 볼륨 조절 버튼들(108), 가입자 식별 모듈(Subscriber Identity Module, SIM) 카드 슬롯(110), 헤드셋 잭(112), 및 도킹/충전 외부 포트(124)를 포함한다. 푸시 버튼(106)은, 버튼을 누르고 미리 정의된 시간 간격 동안 버튼을 누른 상태로 유지함으로써 디바이스 상에서 전원을 턴 온/오프시키고; 버튼을 누르고 미리 정의된 시간 간격이 경과하기 전에 버튼을 누름해제함으로써 디바이스를 잠그고/잠그거나; 디바이스를 잠금해제하거나 잠금해제 프로세스를 개시하는 데 사용될 수 있다. 대안적인 실시예에서, 디바이스(100)는 또한 마이크로폰(113)을 통해 일부 기능들의 활성화 또는 비활성화를 위한 구두 입력을 수용한다. 디바이스(100)는, 메모리(이는 하나 이상의 컴퓨터 판독가능 저장 매체들을 포함할 수 있음), 메모리 제어기, 하나 이상의 중앙 프로세싱 유닛(CPU)들, 주변기기 인터페이스, RF 회로부, 오디오 회로부, 스피커(111), 마이크로폰(113), 입출력(I/O) 서브시스템, 및 다른 입력 또는 제어 디바이스들을 포함하지만 이들로 제한되지 않는 다양한 컴포넌트들을 포함한다. 디바이스(100)는 하나 이상의 이미지 센서들(164), 하나 이상의 근접 센서들(166), 및 하나 이상의 가속도계들(168)을 포함할 수 있다. 디바이스(100)는 도 1에 도시되지 않은 컴포넌트들을 포함할 수 있다.
디바이스(100)는 전자 디바이스의 일례일 뿐이고, 디바이스(100)는 위에 열거된 것보다 더 많거나 더 적은 컴포넌트들을 가질 수 있으며, 이들 중 일부는 일 컴포넌트로 조합되거나 상이한 구성 또는 배열을 가질 수 있다. 위에 열거된 디바이스(100)의 다양한 컴포넌트들은, 하나 이상의 신호 프로세싱 및/또는 ASIC(application specific integrated circuit)들을 비롯한, 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합으로 구체화된다.
도 2는 일 실시예에 따른 디바이스(100) 내의 컴포넌트들을 도시한 블록도이다. 디바이스(100)는 이미지 프로세싱을 포함하는 다양한 동작들을 수행할 수 있다. 이러한 목적 및 다른 목적들을 위해, 디바이스(100)는, 다른 컴포넌트들 중에서도, 이미지 센서(202), SOC(system-on-a chip) 컴포넌트(204), 시스템 메모리(230), 영구적 저장소(예컨대, 플래시 메모리)(228), 모션(배향) 센서(234), 및 디스플레이(216)를 포함할 수 있다. 도 2에 도시된 바와 같은 컴포넌트들은 단지 예시적인 것이다. 예를 들어, 디바이스(100)는 도 2에 도시되지 않은 다른 컴포넌트들(예컨대, 스피커 또는 마이크로폰)을 포함할 수 있다. 또한, 일부 컴포넌트들(예컨대, 모션 센서(234))은 디바이스(100)로부터 생략될 수 있다.
이미지 센서(202)는 이미지 데이터를 캡처하기 위한 컴포넌트이고, 예컨대, CMOS(complementary metal-oxide-semiconductor) 능동 픽셀 센서, 카메라, 비디오 카메라, 또는 다른 디바이스들로서 구체화될 수 있다. 이미지 센서(202)는 추가 프로세싱을 위해 SOC 컴포넌트(204)로 전송되는 미처리 이미지 데이터를 생성한다. 일부 실시예들에서, SOC 컴포넌트(204)에 의해 프로세싱된 이미지 데이터는 디스플레이(216) 상에 디스플레이되거나, 시스템 메모리(230) 및 영구적 저장소(228)에 저장되거나, 네트워크 접속을 통해 원격 컴퓨팅 디바이스로 전송된다. 이미지 센서(202)에 의해 생성된 미처리 이미지 데이터는 베이어(Bayer) 컬러 커널 어레이(CFA) 패턴(이하, "베이어 패턴"으로도 지칭됨)으로 있을 수 있다.
모션 센서(234)는 디바이스(100)의 모션을 감지하기 위한 컴포넌트 또는 컴포넌트들의 세트이다. 모션 센서(234)는 디바이스(100)의 배향 및/또는 가속도를 나타내는 센서 신호들을 생성할 수 있다. 센서 신호들은 디바이스(100)를 턴온시키는 것 또는 디스플레이(216) 상에 디스플레이된 이미지들을 회전시키는 것과 같은 다양한 동작들을 위해 SOC 컴포넌트(204)로 전송된다.
디스플레이(216)는 SOC 컴포넌트(204)에 의해 생성된 바와 같은 이미지들을 디스플레이하기 위한 컴포넌트이다. 디스플레이(216)는, 예를 들어, 액정 디스플레이(LCD) 디바이스 또는 유기 발광 다이오드(OLED) 디바이스를 포함할 수 있다. SOC 컴포넌트(204)로부터 수신된 데이터에 기초하여, 디스플레이(216)는 메뉴들, 선택된 동작 파라미터들, 이미지 센서(202)에 의해 캡처되고 SOC 컴포넌트(204)에 의해 프로세싱된 이미지들, 및/또는 디바이스(100)의 사용자 인터페이스로부터 수신된 다른 정보(도시되지 않음)와 같은 다양한 이미지들을 디스플레이할 수 있다.
시스템 메모리(230)는 SOC 컴포넌트(204)에 의한 실행을 위한 명령어들을 저장하기 위한 그리고 SOC 컴포넌트(204)에 의해 프로세싱되는 데이터를 저장하기 위한 컴포넌트이다. 시스템 메모리(230)는, 예를 들어, 동적 랜덤 액세스 메모리(dynamic random access memory, DRAM), 동기식 DRAM(synchronous DRAM, SDRAM), 이중 데이터 레이트(double data rate)(DDR, DDR2, DDR3 등), 램버스 DRAM(RAMBUS DRAM, RDRAM), 정적 RAM(static RAM, SRAM), 또는 이들의 조합을 포함하는 임의의 타입의 메모리로서 구체화될 수 있다. 일부 실시예들에서, 시스템 메모리(230)는 픽셀 데이터 또는 다른 이미지 데이터 또는 통계치를 다양한 포맷들로 저장할 수 있다.
영구적 저장소(228)는 데이터를 비휘발성 방식으로 저장하기 위한 컴포넌트이다.
영구적 저장소(228)는 전력이 이용가능하지 않을 때에도 데이터를 유지한다. 영구적 저장소(228)는 판독 전용 메모리(ROM), 플래시 메모리 또는 다른 비휘발성 랜덤 액세스 메모리 디바이스들로서 구체화될 수 있다.
SOC 컴포넌트(204)는 하나 이상의 집적 회로(IC) 칩으로서 구체화되고, 다양한 데이터 프로세싱 프로세스들을 수행한다. SOC 컴포넌트(204)는, 다른 서브컴포넌트들 중에서도, 이미지 신호 프로세서(image signal processor, ISP)(206), 중앙 프로세서 유닛(CPU)(208), 네트워크 인터페이스(210), 센서 인터페이스(212), 디스플레이 제어기(214), 뉴럴 프로세서 회로(218), 그래픽 프로세서(graphics processor, GPU)(220), 메모리 제어기(222), 비디오 인코더(224), 저장소 제어기(226), 및 이러한 서브컴포넌트들을 접속시키는 버스(232)를 포함할 수 있다. SOC 컴포넌트(204)는 도 2에 도시된 것들보다 더 많거나 더 적은 서브컴포넌트들을 포함할 수 있다.
ISP(206)는 이미지 프로세싱 파이프라인의 다양한 스테이지들을 수행하는 하드웨어이다. 일부 실시예들에서, ISP(206)는 이미지 센서(202)로부터 미처리 이미지 데이터를 수신할 수 있고, 미처리 이미지 데이터를, 디바이스(100)의 컴포넌트들 또는 SOC 컴포넌트(204)의 다른 서브컴포넌트들에 의해 사용가능한 형태로 프로세싱할 수 있다. ISP(206)는 이미지 변환 동작들, 수평 및 수직 스케일링, 컬러 공간 변환 및/또는 이미지 안정화 변환들과 같은 다양한 이미지 조작 동작들을 수행할 수 있는데, 이는 도 3을 참조하여 아래에서 상세히 기술되는 바와 같다.
CPU(208)는 임의의 적합한 명령어 세트 아키텍처(instruction set architecture, ISA)를 사용하여 구체화될 수 있고, 그 명령어 세트 아키텍처 내에 정의된 명령어들을 실행시키도록 구성될 수 있다. CPU(208)는 다양한 명령어 세트 아키텍처들 중 임의의 것, 예컨대 x86, PowerPC, SPARC, RISC, ARM 또는 MIPS ISA들, 또는 임의의 다른 적합한 ISA를 사용하는 범용 또는 임베디드 프로세서들일 수 있다. 도 2에 단일 CPU가 도시되어 있지만, SOC 컴포넌트(204)는 다수의 CPU들을 포함할 수 있다. 다중프로세서 시스템들에서, CPU들 각각은 보편적으로는 동일한 ISA를 구현할 수 있지만 반드시 그러한 것은 아니다.
그래픽 프로세싱 유닛(GPU)(220)은 그래픽 데이터를 수행하기 위한 그래픽 프로세싱 회로부이다. 예를 들어, GPU(220)는 프레임 버퍼(예컨대, 전체 프레임에 대한 픽셀 데이터를 포함하는 것) 내에 디스플레이될 객체들을 렌더링할 수 있다. GPU(220)는 그래픽 동작의 일부 또는 전부, 또는 소정 그래픽 동작들의 하드웨어 가속을 수행하도록 그래픽 소프트웨어를 실행시킬 수 있는 하나 이상의 그래픽 프로세서들을 포함할 수 있다.
뉴럴 프로세서 회로(218)는 승산, 가산, 및 누산을 포함하는 연산들에 기초하여 다양한 기계 학습 동작들을 수행하는 회로이다. 이러한 연산들은, 예컨대, 입력 데이터와 커널 데이터의 콘볼루션을 수행하도록 배열될 수 있다. 뉴럴 프로세서 회로(218)는 CPU(208)로부터 뉴럴 네트워크 동작들과 연관된 자원-집약적 동작들을 완화시키면서 고속 및 전력-효율적인 방식으로 이들 동작들을 수행하는 구성가능 회로이다. 뉴럴 프로세서 회로(218)는 센서 인터페이스(212), 이미지 신호 프로세서(206), 시스템 메모리(230), 또는 다른 소스들, 이를테면 네트워크 인터페이스(210) 또는 GPU(220)로부터 입력 데이터를 수신할 수 있다. 뉴럴 프로세서 회로(218)의 출력은, 다양한 동작들을 위해, 디바이스(100)의 다양한 컴포넌트들, 이를테면, 이미지 신호 프로세서(206), 시스템 메모리(230), 또는 CPU(208)에 제공될 수 있다. 뉴럴 프로세서 회로(218)의 구조 및 동작은 도 3을 참조하여 아래에서 상세히 설명된다.
네트워크 인터페이스(210)는 하나 이상의 네트워크들(예컨대, 캐리어 또는 에이전트 디바이스들)을 통해 데이터가 디바이스들(100)과 다른 디바이스들 사이에서 교환될 수 있게 하는 서브컴포넌트이다. 예를 들어, 비디오 또는 다른 이미지 데이터는 네트워크 인터페이스(210)를 통해 다른 디바이스들로부터 수신될 수 있고, (예컨대, 도 3에서 아래에서 논의되는 바와 같은, 이미지 신호 프로세서(206)에 대한 백엔드 인터페이스를 통한) 후속 프로세싱 및 디스플레이를 위해 시스템 메모리(230)에 저장될 수 있다. 네트워크들은 근거리 통신망(Local Area Network, LAN)들(예컨대, 이더넷(Ethernet) 또는 기업 네트워크(corporate network)) 및 광역 통신망(WAN)들을 포함할 수 있지만, 이들로 제한되지 않는다. 네트워크 인터페이스(210)를 통해 수신된 이미지 데이터는 ISP(206)에 의해 이미지 프로세싱 프로세스들을 겪을 수 있다.
센서 인터페이스(212)는 모션 센서(234)와 인터페이싱하기 위한 회로부이다. 센서 인터페이스(212)는 모션 센서(234)로부터 센서 정보를 수신하고, 센서 정보를 프로세싱하여 디바이스(100)의 배향 또는 이동을 판정한다.
디스플레이 제어기(214)는 디스플레이(216) 상에 디스플레이될 이미지 데이터를 전송하기 위한 회로부이다. 디스플레이 제어기(214)는 ISP(206), CPU(208), 그래픽 프로세서 또는 시스템 메모리(230)로부터 이미지 데이터를 수신하고, 이미지 데이터를 디스플레이(216) 상에 디스플레이하기에 적합한 포맷으로 프로세싱한다.
메모리 제어기(222)는 시스템 메모리(230)와 통신하기 위한 회로부이다. 메모리 제어기(222)는 ISP(206), CPU(208), GPU(220) 또는 SOC 컴포넌트(204)의 다른 서브컴포넌트들에 의한 프로세싱을 위해 시스템 메모리(230)로부터 데이터를 판독할 수 있다. 메모리 제어기(222)는, 또한, SOC 컴포넌트(204)의 다양한 서브컴포넌트들로부터 수신된 데이터를 시스템 메모리(230)에 기록할 수 있다.
비디오 인코더(224)는, 영구적 저장소(128)에 저장하기에 적합한 포맷으로 비디오 데이터를 인코딩하기 위한, 또는 네트워크를 통한 다른 디바이스로의 송신을 위해 데이터를 네트워크 인터페이스(210)에 전달하기 위한 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합이다.
일부 실시예들에서, SOC 컴포넌트(204)의 하나 이상의 서브컴포넌트들 또는 이러한 서브컴포넌트들의 일부 기능은 ISP(206), CPU(208) 또는 GPU(220) 상에서 실행되는 소프트웨어 컴포넌트들에 의해 수행될 수 있다. 그러한 소프트웨어 컴포넌트들은 시스템 메모리(230), 영구적 저장소(228), 또는 네트워크 인터페이스(210)를 통해 디바이스(100)와 통신하는 다른 디바이스에 저장될 수 있다.
이미지 데이터 또는 비디오 데이터는 SOC 컴포넌트(204) 내의 다양한 데이터 경로들을 통해 흐를 수 있다. 일례에서, 미처리 이미지 데이터는 이미지 센서(202)로부터 생성되어 ISP(206)에 의해 프로세싱될 수 있고, 이어서, 버스(232) 및 메모리 제어기(222)를 통해 시스템 메모리(230)로 전송될 수 있다. 이미지 데이터가 시스템 메모리(230)에 저장된 후에, 그것은 인코딩을 위해서는 비디오 인코더(224)에 의해 또는 디스플레이를 위해서는 디스플레이(116)에 의해, 버스(232)를 통해 액세스될 수 있다.
예시적인 뉴럴 프로세서 회로
뉴럴 프로세서 회로(218)는 적어도 커널 데이터(340)에 기초하여 입력 데이터에 대해 뉴럴 네트워크 동작들을 수행하는 구성가능 회로이다. 이러한 목적을 위해, 뉴럴 프로세서 회로(218)는, 다른 컴포넌트들 중에서도, 뉴럴 태스크 관리자(310), 복수의 뉴럴 엔진들(314A 내지 314N)(이하에서 "뉴럴 엔진(314)" 으로 일괄적으로 지칭되고, 또한 "뉴럴 엔진(314)"으로 개별적으로 지칭됨), 커널 다이렉트 메모리 액세스(DMA)(324), 데이터 버퍼(318), 및 버퍼 DMA(320)를 포함할 수 있다. 뉴럴 프로세서 회로(218)는 도 3에 예시되지 않은 다른 컴포넌트들을 포함할 수 있다.
뉴럴 엔진들(314) 각각은 뉴럴 네트워크 동작들에 대한 컴퓨팅 동작들을 병렬로 수행한다. 동작의 부하에 따라, 뉴럴 엔진들(314)의 전체 세트가 동작될 수 있거나, 또는 나머지 뉴럴 엔진들(314)이 전력을 보존하기 위해 전력 절약 모드로 배치되면서, 뉴럴 엔진들(314)의 서브세트만이 동작될 수 있다. 뉴럴 엔진들(314) 각각은, 도 4를 참조하여 아래에서 상세히 설명되는 바와 같이, 하나 이상의 커널들을 저장하기 위한 컴포넌트, 승산-누산 동작들을 수행하기 위한 컴포넌트, 및 출력 데이터(328)를 생성하기 위한 사후-프로세싱을 위한 컴포넌트를 포함한다. 뉴럴 네트워크 동작의 일 예는 콘볼루션 동작이다.
뉴럴 태스크 관리자(310)는 뉴럴 프로세서 회로(218)의 전체 동작을 관리한다. 뉴럴 태스크 관리자(310)는 CPU(208)에 의해 실행되는 컴파일러로부터 태스크 리스트를 수신하고, 이의 태스크 큐들에 태스크들을 저장하고, 수행할 태스크를 선택하고, 선택된 태스크를 수행하기 위해 명령어들을 뉴럴 프로세서 회로(218)의 다른 컴포넌트들에 전송할 수 있다. 뉴럴 태스크 관리자(310)는 또한, CPU(208)로부터 명령어들을 수신하는 것과 같은 이벤트들의 검출 시에 태스크들의 스위칭을 수행할 수 있다. 하나 이상의 실시예들에서, 도 5 내지 도 7을 참조하여 아래에서 상세히 설명되는 바와 같이, 뉴럴 태스크 관리자(310)는, 컴포넌트들 각각이 입력 데이터 및 커널 데이터의 적절한 부분들을 추적, 검색, 또는 프로세싱할 수 있게 하기 위해, 뉴럴 프로세서 회로(218)의 컴포넌트들에 래스터라이저 정보를 전송한다. 뉴럴 태스크 관리자(310)가 뉴럴 프로세서 회로(218)의 일부로서 도 3에 예시되어 있지만, 뉴럴 태스크 관리자(310)는 뉴럴 프로세서 회로(218) 외부의 컴포넌트일 수 있다.
커널 DMA(324)는 소스(예컨대, 시스템 메모리(230))로부터 커널 데이터를 페칭(fetch)하고, 커널 데이터(326A 내지 326N)를 뉴럴 엔진들(314) 각각에 전송하는 판독 회로이다. 커널 데이터는 커널 엘리먼트들이 추출될 수 있는 정보를 나타낸다. 일 실시예에서, 커널 데이터는 뉴럴 엔진들(314) 각각에서 압축해제되는 압축된 포맷일 수 있다. 뉴럴 엔진들(314) 각각에 제공되는 커널 데이터가 일부 경우들에서 동일할 수 있지만, 뉴럴 엔진들(314) 각각에 제공되는 커널 데이터는 대부분의 경우들에서 상이하다.
데이터 버퍼(318)는 뉴럴 네트워크 동작들과 연관된 데이터를 저장하기 위한 임시 저장소이다. 일 실시예에서, 데이터 버퍼(318)는 모든 뉴럴 엔진들(314)에 의해 액세스될 수 있는 메모리로서 구현된다. 데이터 버퍼(318)는 대응하는 뉴럴 엔진들(314A 내지 314N)에 피드(feed)하기 위한 입력 데이터(322A 내지 322N) 뿐만 아니라, 뉴럴 엔진들(314) 내로 피드백하거나 또는 타겟 회로(예컨대, 시스템 메모리(230))에 전송하기 위한 뉴럴 엔진들(314A 내지 314N) 각각으로부터의 출력을 저장할 수 있다. 데이터 버퍼(318) 및 뉴럴 프로세서 회로(218)의 다른 컴포넌트들의 동작들은, 데이터 버퍼(318)에 저장된 입력 데이터 및 중간 데이터가 뉴럴 엔진들(314)에서의 다수의 동작들에 걸쳐 재사용되도록 조정되어, 시스템 메모리(230)로의 그리고 그로부터의 데이터 전송을 감소시킨다. 데이터 버퍼(318)는 모든 입력 채널들의 입력 데이터가 모든 뉴럴 엔진들(314)에 피드되는 브로드캐스트 모드로 또는 입력 채널들의 서브세트의 입력 데이터가 각각의 뉴럴 엔진(314)에 피드되는 유니캐스트 모드로 동작될 수 있다.
데이터 버퍼(318)에 저장된 입력 데이터(322)는 특히, 이미지 데이터, 기울기 방향성 히스토그램(HOG) 데이터, 오디오 데이터, 메타 데이터, 뉴럴 엔진(314)의 이전 사이클의 출력 데이터(328), 및 SOC 컴포넌트(204)의 다른 컴포넌트들로부터 수신된 다른 프로세싱된 데이터의 일부일 수 있다.
버퍼 DMA(320)는 데이터 버퍼(318)에 저장하기 위한 소스(예컨대, 시스템 메모리(230))로부터의 입력 데이터의 일부(예컨대, 타일)를 수신하는 판독 회로, 및 데이터 버퍼(318)로부터 타겟(예컨대, 시스템 메모리)으로 데이터를 포워딩하는 기록 회로를 포함한다.
예시적인 뉴럴 엔진 아키텍처
도 4는 일 실시예에 따른 뉴럴 엔진(314)의 블록도이다. 뉴럴 엔진(314)은 뉴럴 네트워크 동작들, 이를테면, 콘볼루션, 공간 풀링, 및 로컬 응답 정규화를 용이하게 하기 위해 다양한 동작들을 수행한다. 뉴럴 엔진(314)은 입력 데이터(322)를 수신하고, 저장된 커널 데이터에 기초하여 입력 데이터(322)에 대해 승산-누산 동작들(예컨대, 콘볼루션 동작들)을 수행하고, 승산-누산 동작들의 결과에 대해 추가적인 사후-프로세싱 동작들을 수행하고, 출력 데이터(328)를 생성한다. 뉴럴 엔진(314)의 입력 데이터(322) 및/또는 출력 데이터(328)는 단일 채널 또는 다수의 채널들로 이루어질 수 있다.
뉴럴 엔진(314)은, 다른 컴포넌트들 중에서도, 입력 버퍼 회로(402), 연산 코어(416), 뉴럴 엔진(NE) 제어부(418), 커널 추출 회로(432), 누산기(414), 및 출력 회로(424)를 포함할 수 있다. 뉴럴 엔진(314)은 도 4에 예시되지 않은 추가적인 컴포넌트들을 포함할 수 있다.
입력 버퍼 회로(402)는, 입력 데이터(322)가 데이터 버퍼(318)로부터 수신될 때 입력 데이터(322)의 일부를 저장하고, 프로세싱을 위해 현재 태스크 또는 프로세스 루프를 위한 입력 데이터의 적절한 부분(408)을 연산 코어(416)로 전송하는 회로이다. 입력 버퍼 회로(402)는 연산 코어(416)로 전송되는 입력 데이터의 부분(408)을 변경하기 위해 입력 버퍼 회로(402)의 판독 위치들을 시프트하는 시프터(410)를 포함한다. 시프팅을 통해 연산 코어(416)에 제공되는 입력 데이터의 부분들을 변경함으로써, 뉴럴 엔진(314)은 더 적은 수의 판독 동작들에 기초하여 입력 데이터의 상이한 부분들에 대해 승산-누산을 수행할 수 있다. 하나 이상의 실시예들에서, 입력 데이터(322)는 상이한 콘볼루션 그룹들 및/또는 입력 채널들의 데이터를 포함한다.
커널 추출 회로(432)는, 커널 DMA(324)로부터 커널 데이터(326)를 수신하고, 커널 계수들(422)을 추출하는 회로이다. 일 실시예에서, 커널 추출 회로(432)는 룩업 테이블(LUT)을 참조하고, 압축된 커널 데이터(326)로부터 커널을 재구성하기 위해 마스크를 사용한다. 마스크는 제로(zero)로 패딩될 재구성된 커널 내의 위치들 및 숫자들로 채워질 나머지 위치들을 나타낸다. 재구성된 커널의 커널 계수들(422)은 연산 코어(416)의 승산-가산(MAD) 회로들에서의 레지스터를 채우기 위해 연산 코어(416)로 전송된다. 다른 실시예들에서, 커널 추출 회로(432)는 비압축 포맷으로 커널 데이터를 수신하고, 커널 계수들은 LUT를 참조하거나 또는 마스크를 사용하지 않으면서 결정된다.
연산 코어(416)는 연산 동작들을 수행하는 프로그램가능 회로이다. 이러한 목적을 위해, 연산 코어(416)는 MAD 회로들(MAD0 내지 MADN) 및 사후-프로세서(428)를 포함할 수 있다. MAD 회로들(MAD0 내지 MADN) 각각은 입력 데이터의 부분(408)에서의 입력 값, 및 커널 계수들(422)에서의 대응하는 커널 계수를 저장할 수 있다. 입력 값과 대응하는 커널 계수는 프로세싱된 값(412)을 생성하기 위해, 각각의 MAD 회로들에서 승산된다.
누산기(414)는 MAD 회로들로부터 프로세싱된 값들(412)을 수신 및 저장하는 메모리 회로이다. 누산기(414)에 저장된 프로세싱된 값들은 MAD 회로들에서의 추가적인 승산 및 가산 동작들을 위한 피드백 정보(419)로서 다시 전송될 수 있거나, 또는 사후-프로세싱을 위해 사후-프로세서(428)로 전송될 수 있다. 누산기(414)는 MAD 회로들과 조합하여, 승산-누산기(MAC)(404)를 형성한다. 하나 이상의 실시예들에서, 누산기(414)는 서브유닛들을 가질 수 있으며, 여기서, 각각의 서브유닛은 뉴럴 엔진(314)의 상이한 컴포넌트들로 데이터를 전송한다. 예컨대, 프로세싱 사이클 동안, 누산기(414)의 제1 서브유닛에 저장된 데이터는 MAC 회로로 전송되는 한편, 누산기(414)의 제2 서브유닛에 저장된 데이터는 사후-프로세서(428)로 전송된다.
사후-프로세서(428)는 누산기(414)로부터 수신된 값들(412)의 추가적인 프로세싱을 수행하는 회로이다. 사후-프로세서(428)는, 비선형 함수들(예컨대, 정류 선형 유닛(Rectified Linear Unit; ReLU))을 적용하는 것, 정규화된 교차-상관(NCC), 8-비트 데이터에 대해 뉴럴 동작들을 수행한 결과들을 16-비트 데이터로 병합하는 것, 및 로컬 응답 정규화(LRN)를 포함하는(그러나 이에 제한되지는 않음) 동작들을 수행할 수 있다. 그러한 동작들의 결과는 사후-프로세서(428)로부터 프로세싱된 값들(417)로서 출력 회로(424)로 출력된다.
NE 제어부(418)는 뉴럴 프로세서 회로(218)의 동작 모드들 및 파라미터들에 기초하여 뉴럴 엔진(314)의 다른 컴포넌트들의 동작들을 제어한다. 상이한 동작 모드들(예컨대, 그룹 콘볼루션 모드 또는 비-그룹 콘볼루션 모드) 또는 파라미터들(예컨대, 입력 채널들의 수 및 출력 채널들의 수)에 따라, 뉴럴 엔진(314)은 상이한 시퀀스들로 상이한 입력 데이터에 대해 동작하고, 누산기(414)로부터의 상이한 값들을 MAC 회로들로 리턴하고, 사후-프로세서(428)에서 상이한 타입의 사후-프로세싱 동작들을 수행할 수 있다. 원하는 방식으로 동작하도록 뉴럴 엔진(314)의 컴포넌트들을 구성하기 위해, NE 제어부(418)는 제어 신호를 뉴럴 엔진의 컴포넌트들로 전송한다. NE 제어부(418)는 또한, 도 5 내지 도 7을 참조하여 아래에서 상세히 설명되는 바와 같이, 뉴럴 엔진(314)에서 프로세싱되는 현재 태스크 또는 프로세스 루프를 추적하는 래스터라이저(430)를 포함할 수 있다.
출력 회로(424)는 사후-프로세서(428)로부터 프로세싱된 값들(417)을 수신하고, 데이터 버퍼(318)와 인터페이스하여 데이터 버퍼(318)에 프로세싱된 값들(417)을 저장한다. 이러한 목적을 위해, 출력 회로(424)는 프로세싱된 값들(417)이 사후-프로세서(428)에서 프로세싱되는 시퀀스 또는 포맷과 상이한 시퀀스 또는 포맷으로 출력 데이터(328)로서 출력을 전송할 수 있다.
뉴럴 엔진(314) 내의 컴포넌트들은 NE 제어부(418) 및 뉴럴 태스크 관리자(310)에 의해 구성 기간 동안 구성될 수 있다. 이러한 목적을 위해, 뉴럴 태스크 관리자(310)는 구성 기간 동안 구성 정보를 뉴럴 엔진(314)에 전송한다. 구성가능 파라미터들 및 모드들은, 입력 데이터 엘리먼트들과 커널 엘리먼트들 사이의 맵핑, 입력 채널들의 수, 출력 채널들의 수, 출력 스트라이드(stride)들의 수행, 및 사후-프로세서(428)에서의 사후-프로세싱 동작들의 인에이블링/선택을 포함할 수 있다(그러나 이에 제한되지는 않음).
뉴럴 프로세서 회로에서의 프로세싱을 위한 데이터의 세그먼트화 동작
입력 데이터는 전형적으로, 다수의 뉴럴 엔진들(314)에서의 병렬 프로세싱을 위해 더 작은 데이터 조각들로 분할된다. 종종, 뉴럴 네트워크와 연관된 태스크에 대한 출력을 생성하기 위해, 동작들의 다수의 사이클들이 수행된다. CPU(208)에 의해 실행되는 컴파일러는 뉴럴 네트워크의 계층 구조 및 노드들을 분석하고, 뉴럴 프로세서 회로(218)의 하드웨어 제약들에 기초하여, 입력 데이터가 어떻게 세그먼트화되어야 하는지를 결정한다. 컴파일러의 기능들 중 하나는 입력 데이터가 뉴럴 엔진들(314)에서의 프로세싱을 위한 더 작은 데이터 유닛들로 어떻게 분할되어야 하는지, 그리고 태스크들에 대한 결과를 생성하기 위해 프로세싱이 루프들로 어떻게 반복되어야 하는지를 결정하는 것이다.
도 5는 일 실시예에 따른, 뉴럴 프로세서 회로(218)에서 입력 데이터를 프로세싱하기 위한 루프들을 예시하는 개념도이다. 최외측 루프는, 다수의 콘볼루션 그룹을 수반하는 그룹 콘볼루션이 사용되는 경우, 콘볼루션 그룹에 대한 프로세싱을 나타낸다. 그룹 콘볼루션들은, 각각의 그룹에서의 입력 채널들의 입력 데이터가 각각의 그룹의 출력 채널들의 출력 데이터를 생성하기 위해서만 사용되고 다른 그룹들의 출력 채널들에 대한 출력 데이터를 생성하기 위해서는 사용되지 않는 콘볼루션들이다. 따라서, 그룹 콘볼루션의 각각의 그룹은 별개의 콘볼루션 동작으로서 처리될 수 있다.
각각의 콘볼루션 그룹에 대한 루프는 입력 데이터의 슬라이스에 대한 프로세싱 루프이다. 도 6에 도시된 바와 같이, 콘볼루션 동작을 위한 전체 입력 데이터는 중첩 방식으로 슬라이스들의 다수의 스트립들로 세그먼트화된다. 중첩 부분들(602, 604, 606)은 대응하는 커널에 대한 공간 서포트(spatial support)를 제공하기 위해 2개의 인접한 슬라이스들에서 오버페칭(overfetch)되는 입력 데이터의 부분들이다. 제2 최외측 루프는 입력 데이터에서의 각각의 슬라이스에 대해 콘볼루션 동작을 수행한다. 슬라이스를 위한 루프 내에는 슬라이스의 타일을 위한 프로세싱 루프가 있다. 도 6에 도시된 바와 같이, 각각의 슬라이스는 복수의 타일들로 세그먼트화된다. 중첩 부분들(608, 610, 612, 614)은 대응하는 커널에 대한 공간 서포트를 제공하기 위해 2개의 인접한 타일들에서 오버페칭되는 슬라이스 4에서의 입력 데이터의 부분들이다. 최우측 타일은 전형적으로, 슬라이스의 다른 타일들보다 더 작은 폭을 가질 것이다. 일 실시예에서, 각각의 타일에 대한 입력 데이터는 판독 사이클에서 데이터 버퍼(318) 상에 로딩되고, 타일을 위한 프로세싱 루프들에서의 동작들을 위해 재사용된다. 타일을 위한 프로세싱 루프는 작업 유닛을 위한 프로세싱 루프이다. 도 6에 도시된 바와 같이, 각각의 타일은 다수의 작업 유닛들로 세그먼트화된다. 작업 유닛은, 연산 코어(416)의 단일 사이클 동안, 뉴럴 엔진(314)의 누산기(414) 내에 피팅되는 출력 값들을 생성하는 사이즈를 갖는 입력 데이터의 일부이다. 각각의 작업 유닛의 형상이 도 6에서 수평 스트립으로서 도시되어 있지만, 작업 유닛의 형상은 타일의 형상 및 사이즈에 따라 상이할 수 있다. 작업 유닛은 또한, 대응하는 커널에 대한 서포트를 제공하기 위해 오버페칭된 데이터를 나타내는 중첩 부분들을 갖는다. 특히, 슬라이스의 마지막 타일에 대한 작업 유닛들은 타일이 높은 경우 수직 스트립의 형상을 가질 수 있다. 하나 이상의 실시예들에서, 각각의 작업 유닛의 사이즈는 256 바이트이다. 그러한 실시예들에서, 예컨대, 작업 유닛들은 16 × 16, 32 × 8, 64 × 4, 128 × 2, 또는 256 × 1 치수 중 하나로 형상화된다.
각각의 작업 유닛에 대해, 출력 채널 그룹(OCG)을 위해 내부 프로세싱 루프가 제공될 수 있다. 연산 코어(416)의 단일 사이클에 의해 주어진 작업 유닛에 대해 생성된 출력 채널들의 수는 OCG로 지칭된다. 동작 모드들에 따라, 각각의 뉴럴 엔진(314)은 이의 입력 버퍼 회로(402) 내로의 입력 데이터의 단일 로드를 위해 상이한 수의 출력 채널들(예컨대, 8개의 채널들, 32개의 채널들)의 출력 데이터를 프로세싱할 수 있다.
각각의 출력 채널 그룹에 대해, 내부 프로세싱 루프가 입력 채널(Cin)을 위해 제공될 수 있다. 입력 스트라이드가 특정 입력 데이터를 스킵하도록 구현되는 경우, 서브-입력 채널들(Sub-Cin)을 위한 루프들이 입력 채널(Cin)을 위한 프로세싱 루프 내에 제공될 수 있다.
각각의 입력 채널 또는 각각의 서브-입력 채널에 대해, 각각의 수평 공간 서포트 내의 수직 서포트 및 커널에 대한 수평 공간 서포트를 프로세싱하기 위해 내부 루프들이 제공된다. 공간 서포트는 커널과의 콘볼루션을 위한 입력 데이터를 지칭하고, 입력 데이터의 에지들에서 콘볼루션을 수행하기 위한 오버페칭된 입력 데이터를 포함한다.
오버페치는, 커널과의 콘볼루션을 위해 입력 데이터의 적절한 치수가 제공될 수 있도록, 현재 슬라이스, 타일, 또는 작업 유닛에서 부가적인 입력 데이터를 페칭하는 것을 지칭한다. 하나 이상의 실시예들에서, 오버페치는 입력 데이터의 부가적인 행들(도 6에서 중첩 부분들(602, 604, 606)로서 도시됨)을 획득하기 위해 슬라이스들 사이에서 수직으로 수행되고, 입력 데이터의 부가적인 열들(도 6에서 중첩 부분들(608, 610, 612, 614)로서 도시됨)을 획득하기 위해 타일들 사이에서 수평으로 수행되고, 입력 데이터의 부가적인 행들을 획득하기 위해 타일 내의 작업 유닛들 사이에서 수직으로 수행된다.
커널에 대한 각각의 공간 서포트에 대해, 각각의 출력 채널(Cout)에 대한 출력 데이터를 생성하기 위해, 출력 채널(OC)을 위한 내부 프로세싱 루프가 제공된다. 출력 스트라이드가 공간 업샘플링을 구현하는 경우들에서, 각각의 서브-출력 채널을 프로세싱하기 위한 부가적인 내부 루프가 제공된다. 출력 채널(OC) 또는 서브-출력 채널에 대한 출력 데이터를 생성하기 위해, 출력 스트라이드가 구현되는 경우, 출력 채널(OC) 또는 서브-출력 채널을 위한 루프 내에서 MAC 동작들 및 커널 계수들의 로딩이 수행된다.
도 5의 네스팅된 루프 구조는 단지 예시적인 것일 뿐이다. 루프들은 다양한 인자들에 따라 생략, 부가, 또는 상이하게 구조화될 수 있다. 예컨대, 단일 콘볼루션 그룹만이 사용되는 경우, 최외측 루프가 제거될 수 있다. 게다가, 수평 공간 서포트 및 수직 공간 서포트를 위한 루프 구조는 반전될 수 있다.
하나 이상의 실시예들에서, 도 5 및 도 6을 참조하여 위에서 설명된 바와 같이, 입력 공간을 더 작은 유닛들로 분할하고, 이들 더 작은 유닛들을 프로세싱하는 것과 연관된 동작들은 뉴럴 프로세서 회로(218)의 다양한 컴포넌트들에서의 래스터라이저들(714, 718, 720, 722)에 의해 수행된다. 래스터라이저는, 입력/출력 데이터의 세그먼트(예컨대, 그룹, 작업 유닛, 입력 채널, 출력 채널)를 추적하고, 입력 데이터의 세그먼트의 적절한 핸들링을 위해 뉴럴 프로세서 회로의 컴포넌트들에 명령하는 뉴럴 프로세서 회로(218)의 다양한 컴포넌트들에서의 회로이다. 예컨대, 버퍼 DMA(320)에서의 래스터라이저(720)는 시스템 메모리(230)로부터 수신되는 타일들 및 슬라이스들을 추적하는 한편, 데이터 버퍼(318)에서의 래스터라이저(718)는 뉴럴 엔진들(314)에 의한 프로세싱을 위해 순차적으로 작업 유닛들을 브로드캐스트한다. 커널 DMA(322)에서의 래스터라이저(722)는 어떤 커널들이 수신되어 뉴럴 엔진들(314)로 분배되어야 하는지를 결정하는 한편, 뉴럴 엔진들(314)에서의 래스터라이저들(714)은, 입력 데이터의 정확한 부분들(408)을 MAC(404)에 포워딩하고 완성된 출력 데이터(328)를 데이터 버퍼(318)에 전송하도록, 입력 버퍼 회로들(402)에서의 시프터들(410)을 동작시킨다.
도 7은 일 실시예에 따른, 뉴럴 프로세서 회로(218)의 컴포넌트들(314, 318, 320, 322)에서의 래스터라이저들(714, 718, 720, 722)의 프로그래밍을 예시하는 도면이다. 이들의 기능들을 수행하기 위해, 래스터라이저들(714, 718, 720, 722) 각각은, 입력 데이터 및/또는 커널 데이터가 어떻게 세그먼트화되어야 하는지 그리고 뉴럴 프로세서 회로(218)의 각각의 컴포넌트에 의해 어떻게 핸들링되어야 하는지를 나타내는 태스크 정보(710)(예컨대, 구성 데이터)를 수신한다. 태스크 정보는 현재 계층의 세부사항들(예컨대, 입력 및 출력 데이터의 치수, 연관된 커널의 치수, 입력 데이터의 경계들에서의 패딩의 타입들)에 관한 정보를 포함한다. 래스터라이저들(714, 718, 720, 722)은 또한, 이들의 동작들에 대한 제약들(예컨대, 임계치 초과의 타일 폭을 허용할지 또는 허용하지 않을지)을 수신할 수 있다.
뉴럴 프로세서 회로(218)의 상이한 컴포넌트들에 래스터라이저들을 제공함으로써, 뉴럴 프로세서 회로(218)의 컴포넌트들 사이에서 송신되는 데이터에서의 오버헤드가 감소될 수 있다. 단일 중앙 래스터라이저가 뉴럴 프로세서 회로(218)의 상이한 컴포넌트들을 제어하기 위해 제공되는 경우, 컴포넌트들 사이에서 송신되는 커널 데이터, 입력 데이터, 및 출력 데이터는, 이들 데이터에서, 태스크의 루프들 내의 연관된 포지션, 이를테면, 콘볼루션 그룹, 타일, 슬라이스, 작업 유닛, 입력 채널, 및 출력 채널을 식별할 필요가 있을 수 있다. 분배된 래스터라이저들을 사용함으로써, 뉴럴 프로세서 회로(218)의 컴포넌트들 사이에서 커널 데이터, 입력 데이터, 및 출력 데이터를 송신하기 위해 별개의 메타데이터가 필요하지 않게 된다.
뉴럴 엔진 아키텍처에서의 예시적인 프로세스
도 8은 일 실시예에 따른, 뉴럴 프로세서 회로(218)에서 입력 데이터를 프로세스하는 방법을 예시하는 흐름도이다. 방법은 상이한 및/또는 부가적인 단계들을 포함할 수 있거나, 또는 단계들은 상이한 순서들로 이루어질 수 있다.
뉴럴 태스크 관리자(310)가 래스터라이저들(714, 718, 720, 722)을 프로그래밍한 후에, 래스터라이저(720)가 버퍼 DMA(320)로 하여금 시스템 메모리(230)로부터 입력 데이터의 타일을 수신하게 하도록 버퍼 DMA(320)에게 명령함으로써(804), 버퍼 DMA(320)를 동작시키는 프로세스가 개시된다. 버퍼 DMA(320)에 의해 수신된 타일은 데이터 버퍼(318)에 저장된다(806).
이어서, 데이터 버퍼(318)에서의 래스터라이저(718)는 데이터 버퍼(318)에게 작업 유닛을 하나 이상의 뉴럴 엔진들(314)에 전송하도록 명령한다(808). 이어서, 작업 유닛은 하나 이상의 뉴럴 엔진들(314)의 입력 버퍼 회로(402)에 저장된다.
하나 이상의 실시예들에서, 입력 버퍼 회로(402)는 승산-누산 동작을 수행하기 위해 MAC(404)로 전송될 작업 유닛의 일부분을 선택한다(816). 이어서, MAC(404)는 대응하는 커널을 사용하여 작업 유닛의 선택된 부분에 대해 승산-누산 동작들을 수행한다(820). 이어서, 전체 작업 유닛이 하나 이상의 뉴럴 엔진(314)에서 프로세싱되었는지 결정된다(824). 그렇지 않은 경우, 작업 유닛의 선택된 부분은 시프터(410)에 의해 시프트되고(828), 승산-누산 동작들의 다른 라운드를 수행하도록 리턴된다(820).
전체 작업 유닛이 프로세스되었다고 결정되는 경우(824), 이어서, 프로세스는 타일에서의 모든 작업 유닛들이 프로세싱되었는지 결정하기 위해 진행한다(832). 그렇지 않은 경우, 이어서, 프로세스는 데이터 버퍼(318)가 다음 작업 유닛을 하나 이상의 뉴럴 엔진(314)에 전송하게 함으로써(808) 다음 작업 유닛으로 진행하고(836), 후속 프로세스들을 반복한다.
타일에서의 모든 작업 유닛들이 뉴럴 엔진들(314)에 의해 프로세싱되었다고 결정되는 경우(832), 프로세스는 입력 데이터에 대한 모든 타일들이 프로세스되었는지 여부를 결정하기 위해 진행한다(840). 그렇지 않은 경우, 프로세스는, 래스터라이저(720)가 버퍼 DMA(320)에게 시스템 메모리(230)로부터 다음 타일을 수신하도록 명령하게 함으로써(804) 다음 타일로 진행하고(844), 후속 프로세스들을 반복한다.
입력 데이터의 모든 타일들이 프로세싱되었다고 결정되는 경우(840), 이어서, 프로세스는 현재 입력 데이터에 대해 종료된다. 이어서, 프로세스는 다음 입력 데이터를 프로세싱하거나 또는 다음 태스크로 진행하기 위해 반복될 수 있다.
도 8을 참조하여 위에서 설명 바와 같은 프로세스의 실시예들은 단지 예시적인 것일 뿐이다. 도 5를 참조하여 위에서 설명된 바와 같이, 추가적인 루프들이 실시될 수 있다. 더욱이, 프로세스의 시퀀스는 수정 또는 생략될 수 있다.
뉴럴 네트워크는 뉴럴 프로세서 회로(218)에 의해 실행되는 일련의 태스크들로서 인스턴스화 또는 구현되는 네트워크 계층들 또는 서브-계층들을 포함할 수 있다. 도 9는 일 실시예에 따른, 태스크들의 리스트(904)에 의해 표현되는 뉴럴 네트워크(900)를 예시하는 개략적인 블록도이다. 뉴럴 네트워크(900)는, 콘볼루션 계층들(C1, C2, C3(서브-계층들(C300, C310, C311, C320, 및 C321)을 포함함), C5, 및 C6)을 포함하는 네트워크 계층들(또는 서브-계층들), 및 풀링 계층들(P2 및 P4)을 포함한다. 뉴럴 네트워크(900)는 뉴럴 프로세서 회로(218)에 의해 인스턴스화될 수 있는 뉴럴 네트워크 아키텍처의 예이다. 즉, 뉴럴 네트워크(900)는 뉴럴 프로세서 회로(218)에 의해 실행가능하게 되도록 태스크 리스트(904)로 변환된다. 상이한 타입의 네트워크 계층들 또는 네트워크 계층들의 순서들을 갖는 다른 타입의 뉴럴 네트워크 아키텍처들이 또한, 뉴럴 프로세서 회로(218)에 의해 인스턴스화될 수 있다.
뉴럴 네트워크(900)는, 이를테면 CPU(208)에 의해, 태스크 리스트(904)로 변환된다. 태스크 리스트(904)는, 태스크 C1, 태스크 C2+P2, 태스크 C300+P4, 태스크 C310, 태스크 C311+P4, 태스크 C320, 태스크 C321+P4, 태스크 C5a, 태스크 C5b, 및 태스크 C6를 포함하는 태스크들의 시퀀스를 정의하는 선형 링크-리스트를 포함한다. 각각의 태스크는 태스크를 실행하기 위해 뉴럴 프로세서 회로(218)의 구성을 정의하는 태스크 디스크립터와 연관된다. 각각의 태스크는 뉴럴 네트워크(900)의 단일 네트워크 계층, 뉴럴 네트워크(900)의 네트워크 계층의 일부, 또는 뉴럴 네트워크(900)의 다수의 네트워크 계층들과 대응할 수 있다. 예컨대, 태스크 C1은 단일 네트워크 계층 C1에 대응하고, 태스크 C2+ P2는 다수의 네트워크 계층들 C2 및 P2에 대응하고, 태스크들 C5a 및 C5b는 각각 네트워크 계층 C5의 일부와 대응한다. 뉴럴 프로세서 회로(218)는 뉴럴 태스크 관리자(310)의 제어 하에서 태스크 리스트(904)의 태스크들을 실행함으로써 뉴럴 네트워크(900)을 인스턴스화한다.
도 10은 일 실시예에 따른 뉴럴 태스크 관리자(310)를 예시하는 블록도이다. 뉴럴 태스크 관리자(310)는 뉴럴 프로세서 회로(218)에 의한 하나 이상의 뉴럴 네트워크들(900)에 대한 태스크들의 실행을 관리한다. 뉴럴 태스크 관리자(310)는, 다른 컴포넌트들 중에서도, 태스크 아비터(1002), 태스크 큐들(1004A 내지 1004N)(이하에서 "태스크 큐들(1004)"로 일괄적으로 지칭되고, 또한 "태스크 큐(1004)"로 개별적으로 지칭됨), 태스크 관리자 다이렉트 메모리 액세스(DMA)(1006), 페치 큐(1008), 및 구성 큐(1010)를 포함할 수 있다. 뉴럴 태스크 관리자(310)는 도 10에 예시되지 않은 다른 컴포넌트들을 포함할 수 있다.
태스크 아비터(1002)는 뉴럴 프로세서 회로(218)에 의한 실행을 위해 태스크 큐들(1004)로부터 태스크들을 선택하는 회로 또는 회로와 펌웨어의 조합이다. 태스크 아비터(1002)는 태스크 큐들(1004)로부터 태스크들을 디큐잉(dequeue)하고, 태스크들을 구성 큐(1010)에 배치한다. 태스크가 구성 큐에 있는 동안, 이는 실행을 위해 커밋되고, 뉴럴 프로세서 회로는, 태스크가 뉴럴 프로세서 회로(218)의 다른 컴포넌트들에 의해 실행되기 전에, 입력 데이터 및 커널 데이터에 대한 프리페치(prefetch)를 수행한다. 예컨대, 태스크 아비터(1002)는 다수의 태스크 큐들(1004) 사이에서 고정-우선순위 중재를 수행할 수 있고, 태스크 관리자 DMA(1006)에 의한 시스템 메모리(230)로부터의 태스크 디스크립터(1012)의 검색에 대해 가장 높은 우선순위를 갖는 태스크를 태스크 큐들(1004)로부터 선택할 수 있다.
뉴럴 태스크 관리자(310)는 하나 이상의 태스크 큐들(1004)을 포함할 수 있다. 각각의 태스크 큐(1004)는 CPU(208) 및 태스크 아비터(1002)에 커플링된다. 각각의 태스크 큐(1004)는, 뉴럴 프로세서 회로(218)에 의해 실행될 때, 뉴럴 네트워크(900)를 인스턴스화하는 태스크들의 태스크 리스트(904)에 대한 레퍼런스를 CPU(208)로부터 수신한다. 각각의 태스크 큐(1004)에 저장된 레퍼런스는 시스템 메모리(230)에서의 태스크 디스크립터들(1012)의 태스크 리스트(904)를 포인팅하는 한 세트의 포인터들 및 카운터들을 포함할 수 있다. 각각의 태스크 큐(1004)는 태스크 큐들(1004)의 상대적 우선순위를 정의하는 우선순위 파라미터와 추가로 연관될 수 있다. 태스크의 태스크 디스크립터(1012)는 태스크를 실행하기 위한 뉴럴 프로세서 회로(218)의 구성을 특정한다.
태스크 관리자 DMA(1006)는 태스크 아비터(1002), 시스템 메모리(230), 및 페치 큐(1008)에 커플링된다. 태스크 관리자 DMA(1006)는 페치 큐(1008)에 저장하기 위해 소스(예컨대, 시스템 메모리(230))로부터 태스크들의 태스크 디스크립터들(1012)을 수신하는 판독 회로를 포함한다. 예컨대, 태스크 아비터(1002)는 태스크 큐들(1004)의 우선순위들에 따라 태스크 큐(1004)를 선택하고, 선택된 태스크 큐(1004)에 의해 참조되는 태스크 리스트(904)를 사용하여, 태스크의 태스크 디스크립터(1012)를 선택하도록 태스크 관리자 DMA(1006)를 제어한다.
페치 큐(1008)는 실행을 위한 커밋을 위해 보류중인 태스크의 태스크 디스크립터(1012)를 저장하는 단일 엔트리 큐이다. 페치 큐(1008)는 태스크 관리자 DMA(1006)에 커플링되어, 시스템 메모리(230)로부터 태스크 디스크립터(1012)를 수신하고, 태스크 디스크립터(1012)를 구성 큐(1010)에 제공하거나, 또는 태스크 디스크립터(1012)로부터 추출된 구성 데이터(1014)를 구성 큐(1010)에 제공한다.
구성 큐(1010)는 실행을 위해 커밋된 다수의 태스크들의 구성 데이터(1014)를 홀딩한다. 태스크가 구성 큐(1010)에 있을 때, 커널 DMA(324)는 뉴럴 엔진들(314)의 커널 추출 회로(432)에 저장하기 위해 시스템 메모리(230)로부터 커널 데이터를 페칭할 수 있으며, 버퍼 DMA(320)는 데이터 버퍼(318)에 저장하기 위해 시스템 메모리(230)로부터 입력 데이터를 페칭할 수 있다. 태스크를 실행하기 위해, 커널 추출 회로(432)는 뉴럴 엔진(314)의 MAC(404)에 프리페칭된 커널 데이터를 제공하고, 데이터 버퍼(318)는 뉴럴 엔진(314)의 MAC(404)에 프리페칭된 입력 데이터를 제공한다. 일부 실시예들에서, 구성 큐(1010)는 커밋된 태스크 디스크립터들(1012)로부터 추출된 구성 데이터(1014)를 홀딩하는 다수의 큐들을 포함할 수 있다. 도 13과 관련하여 더 상세히 논의되는 바와 같이, 구성 큐(1010)는 구성 데이터(1014)에 따라 뉴럴 프로세서 회로(218)를 구성하기 위해, 뉴럴 프로세서 회로(218)의 다른 컴포넌트들에 추가로 커플링된다.
도 11은 일 실시예에 따른, 태스크 큐(1004)를 사용한 태스크 디스크립터들(1012)의 검색을 예시하는 도면이다. 태스크 큐(1004)는 시스템 메모리(230)에 저장된 태스크 디스크립터들(1012A 내지 1012N)에 포인터들의 세트와 같은 레퍼런스를 포함한다. 이를 위해, 태스크 큐(1004)는 헤드 파라미터(1102), 네트워크 식별자(ID)(1104), 베이스 어드레스 인덱스(1106), 테일 파라미터(1108), 카운트 파라미터(1110), 및 우선순위 파라미터(1112)를 저장하는 메모리를 포함할 수 있다. 헤드 파라미터(1102)는 태스크 큐(1004)의 헤드에서의 태스크 디스크립터(1012A)를 저장하는 시스템 메모리(230)의 위치에 대한 포인터이다. 네트워크 ID(1104)는 태스크 큐(1004)의 헤드에서 태스크 디스크립터(1012)의 뉴럴 네트워크(900)를 식별하고, 베이스 어드레스 인덱스(1106)는 태스크 큐(1004)의 헤드에서의 태스크 디스크립터(1012A)의 네트워크 ID(1104)로 태깅된 베이스-어드레스 테이블(1114)에 대한 인덱스이다. 카운트 파라미터(1110)는 태스크 큐(1004)에서의 태스크 디스크립터들(1012)의 수를 정의한다. 우선순위 파라미터(1112)는, 다수의 태스크 큐들(1004) 사이에서 선택하기 위해 태스크 아비터(1002)에 의해 사용되는, 태스크 큐(1004)의 우선순위를 정의한다.
특정 태스크 큐(1004)가 (예컨대, 우선순위 파라미터(1112)에 따라) 선택될 때, 태스크 아비터(1002)는 헤드 파라미터(1102), 네트워크 ID(1104), 베이스 어드레스 인덱스(1106), 및 베이스 어드레스 테이블(1114)을 참조하여, 시스템 메모리(230)로부터 태스크 디스크립터(1012)를 검색하고, 태스크 디스크립터(1012)를 페치 큐(1008) 내에 배치하여 실행을 위한 태스크의 커밋먼트(commitment)를 개시한다. 각각의 구성 기간에서, 태스크 아비터(1002)는, 이를테면, 다음 태스크 디스크립터(1012B)를 검색하는 등에 의해, 태스크 큐(1004)의 태스크 리스트(904)에 의해 정의된 태스크들의 순서에 따라, 태스크 디스크립터(1012)를 페치 큐(1008)에 계속해서 배치할 수 있다.
도 12는 일 실시예에 따른 태스크 디스크립터(1012)를 예시하는 도면이다. 태스크 아비터(1002)는 시스템 메모리(230)로부터 페치 큐(1008)에 태스크 디스크립터(1012)를 배치하며, 이는 이어서 구성 큐(1010)로 전송된다. 구성 큐(1010)에서의 가장 높은 우선순위(예컨대, 선입(first in)) 태스크 디스크립터(1012)는 구성 기간 동안 실행을 위해 뉴럴 프로세서 회로(218)를 구성하는 데 사용된다. 태스크 디스크립터(1012)는 태스크 디스크립터 헤더(1202) 및 어드레스 데이터(1204A 내지 1204N)(이하에서 "어드레스 데이터(1204)"로 지칭됨)를 포함하는 구성 데이터(1014)를 포함한다. 태스크 디스크립터 헤더(1202)는 태스크 선택 및 태스크 스위칭에 관련된 동작들을 포함하는, 뉴럴 태스크 관리자(310)의 다양한 동작들을 구성하는 구성 데이터(1014)를 포함한다. 예컨대, 태스크 디스크립터 헤더(1202)는, 뉴럴 태스크 관리자(310) 및 뉴럴 프로세싱 회로(218)의 다른 컴포넌트들을 프로그래밍하는 구성 데이터(1014)를 추출하기 위해, 태스크 아비터(1002)에 의해 파싱될 수 있다. 태스크 디스크립터 헤더(1202)는 태스크를 식별하는 태스크 식별자(ID)(1206), 태스크에 의해 인스턴스화된 뉴럴 네트워크(900)를 식별하는 뉴럴 네트워크 식별자(ID)(1208), 태스크의 실행 후에 (예컨대, 상이한 태스크 큐(1004)의 태스크를 실행하기 위해) 뉴럴 태스크 관리자(310)가 태스크 스위치를 개시해야 하는지 여부를 정의하는 태스크 스위치 파라미터(1210), 태스크에 대한 입력 데이터가 시스템 메모리(230)로부터 검색되어야 하는지 또는 데이터 버퍼(318)로부터 검색되어야 하는지를 정의하는 입력 표면 파라미터(1212), 태스크의 출력 데이터가 시스템 메모리(230)에 저장되어야 하는지 또는 데이터 버퍼(318)에 저장되어야 하는지를 정의하는 출력 표면 파라미터(1214), 뉴럴 프로세서 회로(218)의 프로그래밍을 용이하게 하기 위한 다양한(예컨대, 베이스 어드레스) 포인터들(1216), 및 이벤트, 예외, 또는 디버그 로깅을 제어하는 하나 이상의 디버그/예외 파라미터들(1218)을 포함할 수 있다.
어드레스 데이터(1204A 내지 1204N)("어드레스 데이터(1204)"로 일괄적으로 또는 개별적으로 지칭됨)의 각각의 인스턴스는 뉴럴 프로세서 회로(218)의 컴포넌트들을 프로그래밍하는 데 사용되는 어드레스 및 데이터 페이로드 쌍을 정의한다. 데이터 페이로드는 태스크를 실행하는 데 사용되는 입력 데이터 및 커널 데이터를 포함할 수 있다. 예컨대, 어드레스 데이터(1204)의 각각의 인스턴스는 데이터 페이로드를 정의하는 레지스터 데이터, 레지스터 데이터를 수신하기 위한 뉴럴 프로세싱 회로(218)의 목적지 메모리 위치를 정의하는 레지스터 어드레스, 및 레지스터 데이터와 함께 기록될 다수의 연속 메모리 위치들(예컨대, 레지스터들)을 정의하는 레지스터 카운트를 포함한다. 일부 실시예들에서, 레지스터 어드레스는 각각의 메모리 위치의 전체 어드레스를 정의하기 위해, 헤더(1202)에 저장된 베이스 어드레스와 조합된다. 태스크 디스크립터(1116)가 컴파일 시간에 생성되는 경우, 이어서, 실제 실행 시간 어드레스들은 알려져 있지 않을 수 있다. 베이스 어드레스 테이블(1114)은 동적으로 할당된 어드레스들을 갖는 모든 태스크 디스크립터들을 복제 또는 업데이트하는 것을 피하는 데 사용된다.
도 13은 일 실시예에 따른, 페치 큐(1008) 및 구성 큐(1010)를 예시하는 블록도이다. 구성 큐(1010)는 페치 큐(1008)에 커플링되고, 페치 큐(1008)는 태스크 관리자 DMA(1006)를 통해 시스템 메모리(230)에 커플링된다. 구성 큐(1010)는 하나 이상의 뉴럴 엔진들(314)의 래스터라이저(714), 데이터 버퍼(318)의 래스터라이저(718), 버퍼 DMA(320)의 래스터라이저(720), 및 커널 DMA(322)의 래스터라이저(722)에 추가로 커플링된다. 페치 큐(1008)는, 보류중이고 실행을 위해 커밋되지 않은 태스크에 대한 태스크 디스크립터(1012)(예컨대, 태스크 디스크립터 헤더(1202) 및 어드레스 데이터(1204A 내지 1204N)를 포함함)를 저장한다. 페치 큐(1008)는 시스템 메모리(230)로부터 구성 큐(1010) 내로 다음 태스크 디스크립터(1012)를 판독하는 것의 레이턴시를 감소시킨다. 페치 큐(1008)는 태스크 아비터(1002)에 의해 결정되는 바와 같은 가장 높은 우선순위 태스크 디스크립터(1012)를 저장한다. 태스크 아비터(1002)는, 더 높은 우선순위 태스크 디스크립터(1012)가 (예컨대, 더 높은 우선순위 태스크 큐(1004)로부터) 인큐잉(enqueue)된 경우, 페치 큐(1008)에 저장된 태스크 디스크립터(1012)를 교체할 수 있다. 페치 큐(1008)에서의 태스크 디스크립터(1012)는 입력 데이터 또는 커널 프리페치를 개시하지 않고, 태스크 큐 우선순위들, 포인터들, 또는 카운터들에 영향을 미치지 않는다. 따라서, 페치 큐(1008)에서의 태스크 디스크립터(1012)는, 페치 큐(1008) 내에 더 높은 우선순위 태스크 디스크립터(1012)를 기록함으로써, 더 높은 우선순위 태스크 디스크립터(1012)에 의해 쉽게 교체될 수 있다. 구성 큐(1010)에 저장된 태스크 디스크립터(1012)가 뉴럴 프로세서 회로(218)에 의해 실행될 때, 페치 큐(1008)에 저장된 태스크 디스크립터(1012)는 구성 큐(1010)로 전송되고, 후속 태스크의 다른 태스크 디스크립터(1012)가 페치 큐(1008)에 저장될 수 있다.
구성 큐(1010)는 뉴럴 프로세서 회로(218)에 의한 실행을 위해 커밋된 태스크들의 태스크 디스크립터들(1012)을 저장한다. 일부 실시예들에서, 구성 큐(1010)는, 태스크 디스크립터(1012)로부터 추출된 구성 데이터(1014)(구성 데이터(1014A 내지 1014E)를 포함함)의 일부를 각각 저장하는 다수의 별개의 큐들(1310)을 포함한다. 게다가, 큐들(1310)은 구성 데이터(1014)로 컴포넌트를 프로그래밍하기 위해 뉴럴 프로세서 회로(218)의 각각의 컴포넌트에 각각 커플링된다. 구성 큐(1010)의 동작을 통해, 뉴럴 태스크 관리자(310)는 도 7 및 도 8에서 위에서 논의된 기능을 수행하도록 래스터라이저들(714, 718, 720, 722)을 프로그래밍한다. 예컨대, MAC(404)에 입력 데이터의 정확한 부분들(408)을 포워딩하고 완성된 출력 데이터(328)를 데이터 버퍼(318)에 전송하도록, 입력 버퍼 회로들(402)에서의 시프터들(410)의 동작들을 제어하는 구성 데이터(1014A)를 제공하기 위해, 뉴럴 엔진들(314)의 래스터라이저들(714)에 큐(1310A)가 커플링된다. 뉴럴 엔진들(314)에 의한 프로세싱을 위해 데이터 버퍼(318)에 의해 입력 데이터(예컨대, 작업 유닛들)를 브로드캐스트하는 것을 제어하는 구성 데이터(1014B)를 제공하기 위해, 데이터 버퍼(318)의 래스터라이저(718)에 큐(1310B)가 커플링된다. 큐(1310C)는, 시스템 메모리(230)로부터 입력 데이터(예컨대, 타일)를 검색하고, 데이터 버퍼(318)에 입력 데이터를 저장하도록, 버퍼 DMA(320)를 제어하는 구성 데이터(1014C)를 제공하기 위해, 버퍼 DMA(320)의 래스터라이저(720)에 커플링된 판독 큐이다. 큐(1310D)는, 시스템 메모리(230)에 출력 데이터를 저장하도록 버퍼 DMA(320)를 제어하는 구성 데이터(1014D)를 제공하기 위해, 버퍼 DMA(320)의 래스터라이저(720)에 커플링된 기록 큐이다. 어떤 커널들이 검색되고 뉴럴 엔진들(314)에 분배되어야 하는지를 제어하는 구성 데이터(1014E)를 제공하기 위해, 커널 DMA(322)의 래스터라이저(722)에 큐(1310E)가 커플링된다. 일부 실시예들에서, 구성 큐(1010)에 저장된 태스크 디스크립터(1012) 또는 구성 데이터(1014)는 교체될 수 없고, 선입 선출(FIFO) 순서로 실행될 것이다.
뉴럴 태스크 관리자 아키텍처에서의 예시적인 프로세스
도 14는 일 실시예에 따른, 뉴럴 프로세서 회로(218)에서 태스크들을 관리하는 방법을 예시하는 흐름도이다. 방법은 상이한 및/또는 부가적인 단계들을 포함할 수 있거나, 또는 단계들은 상이한 순서들로 이루어질 수 있다.
CPU(208)는, 뉴럴 프로세서 회로(218)에 의해 실행될 때, 뉴럴 네트워크(900)를 인스턴스화하는 태스크들의 태스크 디스크립터들(1012)의 태스크 리스트(904)를 생성한다(1402). 예컨대, CPU(208)는 이미지 센서(202), 시스템 메모리(230), 영구적 저장소(228), 네트워크 인터페이스(210), 또는 일부 다른 컴포넌트들로부터 기계 학습 동작을 위한 입력 데이터를 수신할 수 있다. 기계 학습 동작은 추론 동작 또는 훈련 동작을 포함할 수 있다. 뉴럴 네트워크(900)는 네트워크 계층들을 포함하는 뉴럴 네트워크 아키텍처 및 커널 데이터를 포함할 수 있다. 입력 데이터는 기계 학습 동작을 수행하기 위해 뉴럴 네트워크(900)에 적용된다. 뉴럴 네트워크(900)의 네트워크 계층들 및 커널 데이터는 기계 학습 훈련 프로세스에서 컴퓨팅될 수 있다. CPU(208)는, 본원에서 태스크 리스트(904)로 지칭되는 태스크 디스크립터들(1012)의 링크된 리스트로 뉴럴 네트워크 디스크립션(900)을 터닝하기 위해 컴파일 동작(오프라인 또는 온-더-플라이)을 수행한다. 각각의 태스크는 태스크 디스크립터(1012)에 의해 정의되고, 뉴럴 프로세서 회로(218)에 의해 실행될 때, 단일 네트워크 계층, 다수의 네트워크 계층들, 또는 네트워크 계층의 일부를 인스턴스화한다. 태스크의 각각의 태스크 디스크립터(1012)는, 뉴럴 프로세스 회로(218) 어드레스 및 데이터 페이로드 쌍들을 정의하는 어드레스 데이터(1204) 및 태스크 디스크립터 헤더(1202)와 같은 구성 데이터(1014)를 포함한다. 데이터 페이로드는 뉴럴 네트워크(900)의 커널 데이터 및 입력 데이터를 포함할 수 있다. 구성 데이터(1014)는 태스크를 실행하기 위해 래스터라이저들(714, 718, 720, 및 722)의 동작을 구성하는 명령어들을 더 포함한다.
CPU(208)는 시스템 메모리(230)에 태스크 디스크립터들(1012)의 태스크 리스트(904)를 저장한다(1404). 일부 실시예들에서, CPU(208), 또는 전자 디바이스(100) 외부의 다른 CPU는 태스크 디스크립터들(1012)을 생성하고, 영구적 저장소(228) 또는 일부 다른 비-휘발성 메모리에 태스크 디스크립터들(1012)을 저장한다. 태스크 디스크립터들(1012)은 뉴럴 프로세서 회로(218)에 의한 사용을 위해 시스템 메모리(230)에서의 커널 데이터 및 입력 데이터와 함께 로딩된다. CPU(208)는 버스(232) 및 메모리 제어기(222)를 통해 시스템 메모리(230)에 커플링될 수 있다.
태스크 리스트(904)는 시스템 메모리(230)에서의 태스크 디스크립터들(1012)의 위치들을 참조하는 포인터들의 세트를 포함할 수 있다. 게다가, CPU(208)는 메모리 어드레스들 또는 네트워크 ID와 같은 태스크 디스크립터들(1102)의 파라미터들을 업데이트할 수 있다. 예컨대, 태스크 리스트(904)는, 다수의 태스크 디스크립터들(1012)이 저장되는 시스템 메모리(230)의 시작 레지스터 어드레스 및 종료 레지스터 어드레스들을 각각 정의하는 헤드 파라미터(1102) 및 테일 파라미터(1108)를 포함할 수 있다. 일부 실시예들에서, 태스크 리스트(904)에서의 레지스터 어드레스들에 대한 레퍼런스들은 부분 어드레스들일 수 있고, 베이스 어드레스 테이블(1114)이 시스템 메모리(230)에 대한 전체 레퍼런스 어드레스들을 정의하는 데 사용된다. 일부 실시예들에서, CPU(208)는 필요에 따라 절대 어드레스들을 패치할 수 있다. CPU(208)는 이의 베이스 어드레스 레지스터들을 세팅함으로써 뉴럴 프로세서 회로(218)를 추가로 구성할 수 있다.
뉴럴 태스크 관리자(310)의 태스크 아비터(1002)는 뉴럴 프로세서 회로(218)에 의한 실행을 위해 태스크 리스트(904)를 인큐잉한다(1406). 예컨대, 뉴럴 태스크 관리자(310)는 다수의 태스크 큐들(1004A 내지 1004N)을 포함한다. 태스크 큐들(1004)은 각각, 태스크 리스트(904)에 대한 레퍼런스를 저장할 수 있다. 게다가, 태스크 큐들(1004)은 태스크 큐들(1004)에 의해 참조되는 태스크 리스트들(904)의 우선순위 파라미터들(1112)에 따라 실행을 위해 우선순위화된다.
일부 실시예들에서, CPU(208)는 태스크를 실행하기 위해 뉴럴 프로세서 회로(218)의 일반적인 구성을 수행한다. CPU(208)는, 뉴럴 프로세서 회로(218)가 이미 실행되고 있지 않은 경우, 뉴럴 프로세서 회로(218)를 추가로 시작할 수 있다.
태스크 아비터(1002)는 실행을 위해 가장 높은 우선순위를 갖는 태스크 큐를 선택한다(1408). 예컨대, 각각의 프로그래밍 기간에서, 태스크 아비터(1002)는 태스크 큐들(1004)의 우선순위 파라미터들, 또는 태스크 큐들(1004)의 태스크 리스트들(904)의 비교에 기초하여, 태스크 큐(1004)를 선택하고, 가장 높은 우선순위 태스크 큐(1004)로부터의 태스크 리스트(904)로부터 태스크들을 실행한다.
뉴럴 프로세서 회로(218)는 선택된 태스크 큐로부터 태스크를 실행한다(1410). 예컨대, 뉴럴 프로세서 회로(218)는 태스크를 실행하기 위해 도 8의 방법을 수행한다. 뉴럴 태스크 관리자(310)의 구성 큐(1010)는, 도 7에 도시된 바와 같이, 태스크를 실행하도록 뉴럴 프로세서 회로(218)를 프로그래밍하기 위해, 뉴럴 프로세서 회로(218)의 래스터라이저들(714, 718, 720, 722)에 구성 데이터(1014)(또는 태스크 정보(710))를 제공할 수 있다. 게다가, 태스크의 실행은, 태스크가 구성 큐(1010)에 있는 동안의, 프리페칭된 커널 데이터 및 입력 데이터의 프로세싱을 포함할 수 있다. 각각의 태스크의 실행은, 도 5 및 도 6에 도시된 바와 같이, 입력 데이터를 핸들링하기 위한 다수의 프로세싱 루프들을 포함할 수 있다. 태스크 아비터(1002)는 태스크의 실행 후에 구성 큐(1010)로부터 태스크를 디큐잉할 수 있다.
일부 실시예들에서, 태스크를 실행하기 위해, 태스크 아비터(1002)는, 태스크 리스트(904)의 태스크의 태스크 디스크립터(1012)를 검색하고, 태스크 디스크립터(1012)를 페치 큐(1008)에 저장하도록, 태스크 관리자 DMA(1006)를 제어한다. 이전에 커밋된 태스크의 실행 후에, 태스크 아비터(1002)는, 구성 큐(1010)로부터 태스크의 구성 데이터 또는 태스크 디스크립터를 제거함으로써, 실행된 태스크를 디큐잉할 수 있다. 이어서, 현재 태스크의 태스크 디스크립터(1012) 또는 추출된 구성 데이터(1014)는 페치 큐(1008)로부터 구성 큐(1010)에 배치된다. 태스크가 구성 큐(1010)에 있을 때, 뉴럴 프로세서 회로(218)는 시스템 메모리(230)로부터 커널 추출 회로(432)로의 커널 데이터에 대한 커널 DMA(324)에 의한 프리페치 동작, 및 시스템 메모리(230)로부터 데이터 버퍼(318)로의 입력 데이터에 대한 버퍼 DMA(320)에 의한 프리페치 동작을 개시할 수 있다.
상이한 태스크 큐가 더 높은 우선순위를 갖는 경우, 더 높은 우선순위를 갖는 태스크 큐로의 태스크 스위치가 가능한 경우 수행될 수 있다. (예컨대, 다른 기계 학습 동작으로의) 태스크 스위치를 수행하기 위해, 태스크 아비터(1002)는 페치 큐(1008)에서의 태스크를 상이한 태스크 큐(1004)에서 참조되는 다른 태스크 디스크립터로 교체한다. 태스크 아비터(1002)는, 페치 큐(1008) 내에 교체된 태스크를 저장하는 것에 의한, 태스크 스위치의 완료 후에, 태스크 리스트(904)에 의해 정의되는 인터럽트된 기계 학습 동작을 재개할 수 있다.
일부 실시예들에서, CPU(208)는 태스크 큐를 선택하기 위해 태스크 리스트(904)의 우선순위 파라미터(1110)를 결정한다(1408). 우선순위 파라미터(1110)는 뉴럴 프로세서 회로(218)에 의해 실행되는 다른 기계 학습 동작들의 다른 태스크들에 대한 기계 학습 동작의 태스크들의 우선순위를 정의한다. CPU(208)는 다수의 기계 학습 동작들의 실행을 용이하게 할 수 있다. 기계 학습 동작들은, 이를테면, 상이한 입력 데이터 또는 상이한 뉴럴 네트워크 아키텍처들 및 커널 데이터를 사용함으로써, 상이할 수 있다. CPU(208)는, 프로그램에 의해 또는 사용자 입력에 기초하여, 태스크 리스트(904)의 우선순위 파라미터를 결정할 수 있다. 가장 높은 우선순위를 갖는 태스크 큐(1004)에 의해 참조되는 태스크 디스크립터(1012)가 실행을 위해 선택될 수 있다. 태스크 큐의 우선순위는 CPU(208)에 의해 결정되거나, 또는 이전에 실행된 태스크 디스크립터로부터의 정보에 의해 동적으로 결정된다.
태스크 아비터(1002)는 태스크 리스트(904)의 모든 태스크들이 실행되었는지 여부를 결정한다(1412). 태스크 리스트(904)의 태스크가 실행되지 않은 경우, 프로세스는 단계(1410)로 리턴되고, 여기서, 태스크 아비터(1002)가 태스크 리스트(904)의 실행되지 않은 태스크를 실행한다.
태스크 리스트(904)의 각각의 태스크가 실행된 경우, 태스크 아비터(1002)는 태스크 큐(1004)로부터 태스크 리스트(904)를 제거한다(1414). 다른 예에서, 태스크의 태스크 디스크립터(1012)에 대한 레퍼런스는 태스크의 실행 후에 태스크 큐(1004)로부터 제거될 수 있다. 프로세스가 종료될 수 있다. 다른 예에서, 프로세스는 1402로 리턴될 수 있으며, 여기서, CPU(208)는 다른 기계 학습 동작들에 대한 태스크들의 태스크 디스크립터들을 계속 생성할 수 있다. 이러한 점에서, 프로세스는 특정된 태스크 우선순위들에 따라 뉴럴 프로세서 회로(218)에 의한 기계 학습 동작들의 실행을 위해 태스크 큐들 내에 태스크들을 배치하도록 반복될 수 있다.
스케일러블 뉴럴 엔진들
전자 디바이스(100) 및 뉴럴 프로세서 회로(218)의 다양한 컴포넌트들은 기계 학습 동작들의 병렬 처리를 용이하게 하도록 스케일링 가능할 수 있다. 태스크들에 대한 구성 데이터는 하드웨어 컴포넌트들의 선택적인 사용을 정의할 수 있다.
뉴럴 프로세서 회로(218)의 뉴럴 엔진들(314)은 특정 태스크들을 위해 선택적으로 활성화 또는 비활성화될 수 있다. 도 3을 참조하면, 예컨대, 뉴럴 프로세서 회로(218)는 뉴럴 엔진들(314A 내지 314N)을 포함한다. 일부 예들에서, 뉴럴 프로세서 회로(218)는 2개, 8개, 또는 16개의 뉴럴 엔진들(314)을 포함할 수 있다. 뉴럴 엔진들(314) 각각은 데이터 버퍼(318)에 커플링된다. 일부 실시예들에서, 데이터 버퍼(318)는 프로세싱 사이클에서 각각의 활성화된 뉴럴 엔진들(314)에 동일한 입력 데이터를 브로드캐스트한다. 프로세싱 사이클에서, 뉴럴 엔진들 각각은 상이한 출력 값들을 생성하기 위해 입력 데이터에 상이한 또는 동일한 커널 계수들을 적용한다. 예컨대, 프로세싱 사이클에서의 상이한 뉴럴 엔진들(314)로부터의 출력 데이터는 상이한 채널들과 연관된 출력 데이터를 포함할 수 있다. 뉴럴 프로세서 회로(218)의 하나 이상의 뉴럴 엔진들(314)은 프로세싱 사이클 동안 비활성화될 수 있다. 비활성화는 뉴럴 엔진(314)이 턴 오프되게 하거나 또는 전력 절약 모드(예컨대, 활성화될 때보다 더 적은 전력을 사용함)로 배치되게 할 수 있다.
일부 실시예들에서, 데이터 버퍼(318)는 입력 데이터의 타일을 저장하고, 프로세싱 사이클에서 타일의 작업 유닛, 또는 타일의 작업 유닛의 일부를 뉴럴 엔진들(314)에 제공한다. 뉴럴 엔진들(314)은 타일의 작업 유닛에 대한 상이한 동작들이 다수의 뉴럴 엔진들(314)에 의해 병렬로 프로세싱될 수 있도록 상이한 커널 계수들을 적용할 수 있다. 따라서, 뉴럴 프로세서 회로(218)에 의해 입력 데이터를 프로세싱하는 데 사용되는 프로세싱 사이클들의 수는 뉴럴 프로세서 회로(218) 내의 부가적인 뉴럴 엔진들(314)을 사용함으로써 감소될 수 있다. 다른 예에서, 전력 소비를 감소시키기 위해, 태스크를 프로세싱하는 데 사용되지 않는 경우, 뉴럴 엔진(314)은 비활성화될 수 있다.
스케일러블 뉴럴 프로세서 회로들
전자 디바이스는 상이한 수의 뉴럴 프로세서 회로들(218)을 포함할 수 있으며, 각각의 뉴럴 프로세서 회로(218)는 특정 태스크들을 위해 선택적으로 활성화 또는 비활성화된다. 도 15는 일 실시예에 따른, 전자 디바이스(1500) 내의 다수의 뉴럴 프로세서 회로들(218)을 예시하는 블록도이다. 전자 디바이스(1500)는 버스(232), CPU(208), 시스템 메모리(230)를 포함하고, 도 2와 관련하여 위에서 논의된 바와 같이, 전자 디바이스(100)의 다른 컴포넌트들을 더 포함할 수 있다. 전자 디바이스(1500)는 시스템 메모리(230) 및 뉴럴 프로세서 회로들(218A 내지 218N)에 커플링된 뉴럴 상호연결 회로(1502)를 더 포함한다.
뉴럴 상호연결 회로(1502)는 뉴럴 상호연결 버퍼 다이렉트 메모리 액세스(DMA)(1504) 및 뉴럴 상호연결 데이터 버퍼(1506)를 포함한다. 뉴럴 상호연결 버퍼 DMA(1504)는 시스템 메모리(230)로부터 태스크들에 대한 구성 데이터를 검색하고, 구성 데이터를 뉴럴 상호연결 데이터 버퍼(1506)에 저장한다. 뉴럴 상호연결 데이터 버퍼(1506)는 뉴럴 프로세서 회로들(218A 내지 218N) 각각의 데이터 버퍼들(318) 및 버퍼 DMA들(320)에 커플링된다. 뉴럴 상호연결 데이터 버퍼(1506)는 태스크들을 프로세싱하기 위해 선택적으로 활성화되는 뉴럴 프로세서 회로들(218A 내지 218N) 중 하나 이상과 같은 뉴럴 프로세서 회로들(218A 내지 218N)에 구성 데이터를 분배한다.
일부 실시예들에서, 뉴럴 상호연결 데이터 버퍼(1506)는 입력 데이터의 슬라이스 또는 작업 그룹을 저장하고, 슬라이스의 상이한 타일들을 뉴럴 프로세서 회로들(218A 내지 218N) 중 하나 이상에 제공한다. 상이한 뉴럴 프로세서 회로들(218)의 데이터 버퍼들(318)은 상이한 타일을 저장할 수 있다. 뉴럴 프로세서 회로(218)의 각각의 데이터 버퍼(318)는 프로세싱 사이클에서 데이터 버퍼(318)에 저장된 타일의 작업 유닛 또는 작업 유닛의 일부를 뉴럴 프로세서 회로들(218)의 뉴럴 엔진들(314) 각각에 제공할 수 있다. 뉴럴 프로세서 회로들(314)은, 상이한 타일들에 대한 상이한 동작들이 다수의 뉴럴 프로세서 회로들(218)에 의해 병렬로 프로세싱될 수 있도록, 상이한 입력 데이터 또는 상이한 커널 계수들을 사용할 수 있다. 일부 실시예들에서, 다수의 뉴럴 프로세서 회로들(218)은 뉴럴 네트워크의 상이한 태스크들을 병렬로 프로세싱하는 데 사용될 수 있다. 일부 실시예들에서, 상이한 뉴럴 프로세서 회로들(218)은 상이한 뉴럴 네트워크들에 대한 태스크들을 병렬로 프로세싱할 수 있다.
전자 디바이스(1500)에 의해 입력 데이터를 프로세싱하는 데 사용되는 프로세싱 사이클들의 수는 부가적인 뉴럴 프로세서 회로들(218)을 사용함으로써 감소될 수 있다. 전자 디바이스의 모든 뉴럴 프로세서 회로들(218)보다 더 적은 뉴럴 프로세서 회로들(218)이 태스크 프로세싱에 커밋되는 경우, 하나 이상의 뉴럴 프로세서 회로들(218)은, 하나 이상의 다른 뉴럴 프로세서 회로들(218)이 입력 데이터를 프로세싱하는 동안, 전력 절약 모드로 동작할 수 있거나 또는 턴 오프될 수 있다.
일부 실시예들에서, 다수의 뉴럴 프로세서 회로들(218)은 각각 시스템 메모리(230)에 커플링될 수 있다. 예컨대, 각각의 뉴럴 프로세서 회로(218)의 데이터 버퍼들(318)은 시스템 메모리(230)로부터 직접적으로 구성 데이터, 입력 데이터, 및 커널 데이터를 검색할 수 있다. 여기서, 뉴럴 상호연결 회로(1502)는 전자 디바이스로부터 생략될 수 있다.
일부 실시예들에서, 데이터 해저드(hazard)들을 피하도록, 다수의 뉴럴 프로세서 회로들(218)을 지원하기 위해 배리어들이 사용될 수 있다. 데이터 해저드들은, 뉴럴 프로세서 회로(218)가 데이터 또는 커널 계수들을 소비하기 위해 시도할 때, 입력 데이터 또는 커널 계수들이 뉴럴 상호연결 데이터 버퍼(1506) 또는 시스템 메모리(230)에 도달하지 않은 경우 발생한다. 데이터 해저드들의 예는, (1) 시스템 메모리(230)로부터 뉴럴 상호연결 데이터 버퍼(1506)로의 커널 프리페치 후에 뉴럴 프로세서 회로(218)가 커널 계수들을 소비하는 것, (2) 시스템 메모리(230)로부터 뉴럴 상호연결 데이터 버퍼(1506)로의 입력 데이터 로딩 후에 뉴럴 프로세서 회로(218)가 입력 데이터를 소비하는 것, (3) 뉴럴 프로세서 회로(218)가 출력 데이터를 생성한 후에 상이한 뉴럴 프로세서 회로가 입력 데이터로서 출력 데이터를 소비하는 것, (4) 뉴럴 프로세서 회로(218)가 출력 데이터를 생성한 후에 동일한 뉴럴 프로세서 회로(218)가 커널 계수들로서 출력 데이터를 소비하는 것, 또는 (5) 뉴럴 엔진(314)이 데이터 출력 데이터를 생성한 후에 뉴럴 프로세서 회로(218)가 출력 데이터를 소비하는 것을 포함할 수 있다.
일부 실시예들에서, 프리페칭은 시스템 메모리(230)로부터 뉴럴 상호연결 데이터 버퍼(1506)로의 커널 데이터 또는 커널 계수들에 대해 수행된다. 뉴럴 상호연결 버퍼 DMA(1504)는, 뉴럴 프로세서 회로(218)가 주어진 커널을 소비하기 전에, 주어진 커널의 계수들의 전송을 완료할 필요가 있다. 뉴럴 프로세서 회로(218)가 뉴럴 상호연결 버퍼 DMA(1504)에 의한 데이터 전송보다 더 빠른 경우, 데이터 해저드를 피하기 위해, CPU(220)는 제공된 태스크 ID에 도달한 직후에 뉴럴 프로세서 회로(218)의 실행을 중단시키는 뉴럴 태스크 관리자(310) 내부의 브레이크포인트(breakpoint) 레지스터를 미리 구성할 수 있다. 브레이크포인트 레지스터는 이 태스크 ID 비트 필드 및 인에이블 비트를 포함한다. 뉴럴 상호연결 버퍼 DMA(1504)가 구성가능한 양의 커널 계수들을 완료할 때, 뉴럴 상호연결 버퍼 DMA(1504)는 CPU(220)에 인터럽트를 전송하고, 이어서, CPU(220)는 가장 최근에 전송된 커널 계수들의 태스크 ID에 브레이크포인트 레지스터를 업데이트한다. 뉴럴 상호연결 버퍼 DMA(1504)에 의한 데이터 전송이 뉴럴 프로세서 회로(218)로부터의 커널 판독보다 선행하는 경우, 모든 것이 정상 상태이고 뉴럴 프로세서 회로(218)는 계속 실행된다. 뉴럴 프로세서 회로(218)가 뉴럴 상호연결 버퍼 DMA(1504)에 의한 데이터 전송보다 더 빠른 경우, 뉴럴 프로세서 회로(218)는 브레이크포인트에 도달할 것이고, 뉴럴 상호연결 버퍼 DMA(1504)가 완료되고 CPU(220)가 뉴럴 프로세서 회로(218)의 뉴럴 엔진(314)을 재활성화시킬 때까지 정지할 것이다.
(4) 뉴럴 프로세서 회로(218)가 출력 데이터를 생성한 후에 동일한 뉴럴 프로세서 회로(218)가 커널 계수들로서 출력 데이터를 소비하는 경우, 컴파일러는 소비 태스크의 태스크 디스크립터에 부수적인(depending) 태스크 ID를 제공한다. 이어서, 뉴럴 프로세서 회로(218)는, 부수적인 태스크 ID를 갖는 태스크가 모든 DMA 기록들을 포함하는 실행을 종료하기 전에, 현재 태스크가 실행되지 않을 것을 보장함으로써, 하드웨어에서 해저드를 피한다.
일부 실시예들에서, 뉴럴 프로세서 회로(218) 또는 전자 디바이스(100)의 다른 컴포넌트(예컨대, CPU(220), ISP(206) 등)는 메모리 스케일 및 회전(memory scale and rotate; MSR) 회로를 포함할 수 있다. MSR 회로는 입력 이미지로부터 가변 사이즈의 입력 패치들을 크롭핑(crop)하고, 뉴럴 프로세서 회로(218)의 입력 데이터로서의 입력 이미지 전에, 입력 이미지를 상이한 해상도로 스케일링한다. 예컨대, 뉴럴 프로세서 회로(218)는 상이한 사이즈들의 잠재적인 객체들의 경계 박스들을 제공함으로써 객체 검출을 수행하는 뉴럴 네트워크를 인스턴스화할 수 있다. 이어서, MSR 회로는 이러한 객체들을 크롭핑하고, 이를 동일한 사이즈로 스케일링하고, 그에 따라, 객체 분류를 수행하는 다른 소비 뉴럴 네트워크가 이러한 객체들을 분류할 수 있다.
일부 실시예들에서, 뉴럴 프로세서 회로(218)는 CPU(208), GPU(220), 이미지 신호 프로세서(206), 또는 전자 디바이스(100)의 다른 컴포넌트에 위치될 수 있다. 다른 컴포넌트 내의 뉴럴 프로세서 회로(218)는 뉴럴 프로세서 회로(218)에 대해 본 명세서에서 논의되는 바와 같이 동작할 수 있다. 예컨대, 뉴럴 프로세서 회로(218)는 입력 데이터의 슬라이스의 상이한 타일들을 프로세싱하거나, 또는 그렇지 않으면 입력 데이터를 병렬로 프로세싱하기 위해, CPU(208), GPU(220), 또는 이미지 신호 프로세서(206) 내의 뉴럴 프로세서 회로로 동작할 수 있다.
일부 실시예들에서, 다수의 뉴럴 프로세서 회로들(218)은 별개의 뉴럴 네트워크들을 실행할 수 있거나, 또는 네트워크를 공간적으로(폭 또는 높이), 채널-방식으로, 그리고/또는 별개의 브랜치들로 슬라이싱하여 이들 슬라이스들이 뉴럴 프로세서 회로들(218)에 걸쳐 스케줄링될 수 있도록 하기 위해 컴파일러를 사용함으로써 단일 뉴럴 네트워크의 실행을 가속화할 수 있다.
스케일러블 데이터 버퍼 및 커널 추출 회로
각각의 뉴럴 프로세서 회로(218)의 데이터 버퍼(318)의 사이즈는 태스크를 위해 활성화되는 활성화된 뉴럴 엔진들(314)의 수에 따라 스케일링 가능할 수 있다. 예컨대, 데이터 버퍼(318)의 메모리 공간의 일부는 태스크를 수행하기 위해 활성화되는 각각의 뉴럴 엔진(314)에 대한 입력 데이터 및 커널 데이터를 저장하기 위해 할당될 수 있다. 게다가, 데이터 버퍼(318)의 총 사이즈는 뉴럴 프로세서 회로(218) 내의 뉴럴 엔진들(314)의 수, 및 각각의 뉴럴 엔진(314)의 MAC 회로(404)의 사이즈에 대응할 수 있다. 일부 실시예들에서, 데이터 버퍼(318)는 각각의 프로세싱 사이클 동안 뉴럴 엔진들(314) 각각으로 브로드캐스트되는 작업 유닛들을 포함하는 타일에 대한 입력 데이터, 각각의 프로세싱 사이클에서 작업 유닛들에 적용될 커널 데이터, 및 각각의 프로세싱 사이클에 대한 임의의 다른 구성 데이터(예컨대, 래스터라이저들에 대한 명령어들)를 저장하도록 충분히 사이즈가 설정된다. 데이터 버퍼(318)는 또한, 입력 데이터 및 커널 데이터로부터 뉴럴 엔진들(314)의 MAC 회로들(404)에 의해 생성되는 출력 데이터를 저장하도록 충분히 사이즈가 설정될 수 있다. 출력 데이터는 데이터 버퍼(318)에서 이전 프로세싱 사이클에 대한 입력 데이터를 대체할 수 있거나, 또는 데이터 버퍼(318)의 상이한 위치에 저장될 수 있다. 그런 의미에서, 데이터 버퍼(318)의 사이즈 또는 데이터 버퍼(318)로의 데이터의 할당은 뉴럴 프로세서 회로(218)에서의 뉴럴 엔진(314) 사용의 스케일러빌리티(scalability)를 제공하도록 변화될 수 있다.
각각의 뉴럴 엔진(314)의 커널 추출 회로(432)의 사이즈는 입력 데이터에 대한 상이한 타입의 뉴럴 동작들을 지원하도록 스케일링 가능할 수 있다. 게다가, 뉴럴 엔진(314)의 커널 추출 회로(432)는 뉴럴 엔진(314)에 의해 선택적으로 활성화 또는 비활성화될 수 있다. 도 16은 일 실시예에 따른 뉴럴 엔진(314)의 커널 추출 회로(432)를 예시하는 블록도이다. 커널 추출 회로(432)는 뉴럴 프로세서 회로(218)의 컴포넌트이고, 커널 메모리(1604) 및 커널 압축해제 회로(1606)를 포함한다. 커널 메모리(1604)는 뉴럴 프로세서 회로(218)의 커널 DMA(324)로부터 커널 데이터(326)를 수신하고, 커널 데이터(326)를 저장한다. 커널 압축해제 회로(1606)는 커널 데이터(326)를 사용하여 커널 계수들(422)을 생성하고, 커널 계수들(422)을 뉴럴 프로세서 회로(218)의 MAC 회로(404)에 제공한다. 커널 압축해제 회로(1606)는 압축 포맷의 커널 데이터(326)를 커널 계수들(422)로 변환한다. 커널 메모리(1604)의 사이즈 또는 커널 메모리(1604)로의 데이터의 할당은 스케일링 가능한 커널 사이즈들을 지원하기 위해 변화될 수 있다.
일부 실시예들에서, 뉴럴 엔진(314)의 MAC(404) 내의 MAD 회로들의 수가 또한, 커널 사이즈를 지원하도록 스케일링될 수 있다. 예컨대, 뉴럴 엔진(314)에서 활성화 또는 위치된 MAD 회로들의 수는 프로세싱 사이클에서 MAD 회로들(MAD0 내지 MADN)에 제공되는 커널 계수들(422) 각각의 프로세싱을 용이하게 하기 위해 커널 계수들(422)의 수에 대응할 수 있다.
일부 실시예들에서, 각각의 뉴럴 엔진(314)은 X개의 MAD 회로들을 포함한다. 따라서, 뉴럴 프로세서 회로(218) 내의 N개의 뉴럴 엔진들(314)은 각각의 프로세싱 사이클에서 최대 N * X개의 동작들을 제공한다. 게다가, 전자 디바이스 내의 M개의 뉴럴 프로세서 회로들(218)은 각각의 프로세싱 사이클에서 최대 N * M * X개의 동작들을 제공한다. 예에서, 전자 디바이스는 8개의 뉴럴 엔진들(314)(N = 8)을 각각 갖는 단일 뉴럴 프로세서 회로(218)(M = 1)를 포함하고, 각각의 뉴럴 엔진(314)은 256개의 MAD 회로들(X = 256)을 포함하여, 각각의 프로세싱 사이클에서 최대 2,048개의 동작들이 제공될 수 있다. 다른 예에서, 전자 디바이스는 16개의 뉴럴 엔진들(314)(N = 16)을 각각 갖는 2개의 뉴럴 프로세서 회로(218)(M = 2)를 포함하고, 각각의 뉴럴 엔진(314)은 256개의 MAD 회로들(X = 256)을 포함하여, 각각의 프로세싱 사이클에서 최대 8,192개의 동작들이 제공될 수 있다.
전자 디바이스(100/1500) 및 뉴럴 프로세싱 회로(218)의 컴포넌트들이 스케일링 가능한 것에 부가하여, 이들 컴포넌트들을 연결하는 다양한 패브릭들, 버스들, 및/또는 인터페이스들이 또한, 컴포넌트들 사이의 데이터 전송을 용이하게 하기 위해 사이즈가 스케일링 가능할 수 있다.
뉴럴 프로세서 아키텍처에서의 예시적인 스케일러블 프로세스
도 17은 일 실시예에 따른, 스케일러블 뉴럴 프로세서 회로를 이용하여 입력 데이터를 프로세싱하는 방법을 예시하는 흐름도이다. 방법은 상이한 및/또는 부가적인 단계들을 포함할 수 있거나, 또는 단계들은 상이한 순서들로 이루어질 수 있다.
CPU(208)는 전자 디바이스의 컴퓨팅 리소스들에 따라 태스크들의 구성 데이터를 생성한다(1702). 구성 데이터는 태스크에 대한 뉴럴 프로세서 회로들(218) 및 뉴럴 엔진들(318)과 같은 컴포넌트들의 활성화 및 비활성화를 정의할 수 있다. 구성 데이터는 또한, 활성화된 뉴럴 프로세서 회로들의 데이터 버퍼들(318)의 메모리 공간 내로의 입력 데이터의 할당, 및 활성화된 뉴럴 엔진들(314)의 커널 메모리들(1604)의 메모리 공간 내로의 커널 데이터의 할당을 정의할 수 있다.
각각의 태스크에 대한 구성 데이터는 태스크 디스크립터(1012)에 의해 정의될 수 있다. CPU(208)는, 입력 데이터 및 뉴럴 네트워크(900)의 네트워크 계층들 및 이용가능한 컴퓨팅 리소스들에 기초하여, 태스크들의 태스크 디스크립터들(1012)을 생성하기 위해 컴파일 동작을 수행한다. 구성 데이터는 입력 데이터 및 커널 데이터에 대한 뉴럴 프로세서 회로(218) 어드레스 및 데이터 페이로드 쌍들을 정의하는 어드레스 데이터(1204)를 포함할 수 있다. 일부 실시예들에서, CPU(208)는 병렬로 구현되는 다수의 뉴럴 네트워크들에 대한 태스크들의 구성 데이터를 생성한다. 각각의 뉴럴 네트워크에 대한 태스크들은 별개의 컴파일 동작으로 생성될 수 있다.
위에서 논의된 바와 같이, 구성 데이터는 뉴럴 프로세서 회로(들)(218) 및 전자 디바이스의 리소스들에 기초하여 생성될 수 있다. 예컨대, CPU(208)는, 뉴럴 프로세서 회로들(218)의 수, 뉴럴 프로세서 회로들(218) 내의 뉴럴 엔진들(314)의 수, 뉴럴 프로세서 회로들의 데이터 버퍼들(318)의 사이즈, 뉴럴 엔진들(314) 내의 MAD 회로들의 수, 및 뉴럴 엔진들(314) 내의 커널 추출 회로들(432)의 사이즈를 포함하는, 전자 디바이스의 컴퓨팅 리소스들에 따라, 뉴럴 네트워크의 네트워크 계층들의 프로세싱을 태스크들로 최적화할 수 있다. 구성 데이터는, 커널 데이터 및 입력 데이터가 각각의 활성화된 뉴럴 프로세서 회로(218)의 데이터 버퍼(318)에 어떻게 제공되는지를 제어하기 위해, 래스터라이저들의 거동을 정의할 수 있다. 각각의 뉴럴 프로세서 회로(218)에 대해, 구성 데이터는, 커널 데이터로부터 추출된 커널 계수들 및 입력 데이터의 부분들이 뉴럴 프로세서 회로(218)의 각각의 활성화된 뉴럴 엔진(314)에 어떻게 제공되는지를 정의할 수 있다. 뉴럴 프로세서 회로(218) 또는 뉴럴 엔진(314)이 태스크를 위해 사용되지 않는 경우, 구성 데이터는 사용되지 않는 컴포넌트의 비활성화를 특정할 수 있다.
시스템 메모리(230)는 태스크들의 구성 데이터를 저장한다(1704). 예컨대, CPU(208)는 태스크들의 구성 데이터를 시스템 메모리(230)에 제공한다. 게다가, CPU(208)는 뉴럴 태스크 관리자(310)의 태스크 큐들(1004)에 태스크 리스트들을 인큐잉할 수 있다.
일부 실시예들에서, 시스템 메모리(230)는 입력 데이터의 다수의 타일들을 저장한다. 예컨대, 시스템 메모리(230)는 콘볼루션 그룹에 대한 입력 데이터를 저장할 수 있으며, 각각의 콘볼루션 그룹은 다수의 슬라이스들을 포함하고, 각각의 슬라이스는 다수의 타일들을 포함한다. 일부 실시예들에서, 시스템 메모리(230)는 상이한 콘볼루션 그룹들 또는 상이한 뉴럴 네트워크들에 속하는 다수의 타일들을 저장한다.
뉴럴 프로세서 회로(218)의 버퍼 DMA(320)는 시스템 메모리(230)로부터 뉴럴 프로세서 회로(218)의 데이터 버퍼(318)로 입력 데이터를 검색하고(1706), 뉴럴 프로세서 회로(218)의 커널 DMA(324)는 시스템 메모리(230)로부터 버퍼 추출 회로(432)로 커널 데이터를 검색한다(1706). 예컨대, 태스크에 대한 구성 데이터가 뉴럴 프로세서 회로(218)의 뉴럴 태스크 관리자(310)의 구성 큐(1010)에 배치될 때, 버퍼 DMA(320) 및 커널 DMA(324)는 입력 데이터 및 커널 데이터에 대한 프리페치를 각각 수행한다. 프리페치는, 입력 데이터 및 커널 데이터에 대한 프로세싱 사이클 전에, 입력 데이터가 데이터 버퍼(318)에 저장되게 하고, 커널 데이터가 각각의 뉴럴 엔진(314)의 커널 추출 회로(432)에 저장되게 한다. 데이터 버퍼(318) 또는 커널 추출 회로(432)(예컨대, 커널 메모리(1604))의 사이즈는 뉴럴 프로세서 회로(218) 내의 뉴럴 엔진들(314)의 활용을 지원하도록 선택될 수 있으며, 이용가능한 메모리 공간의 서브세트가 구성 데이터 및 뉴럴 엔진들(314)의 활성화 및 비활성화에 따라 할당될 수 있다.
일부 실시예들에서, 다수의 활성화된 뉴럴 프로세서 회로들(218)은 단계(1706)를 병렬로 수행한다. 각각의 뉴럴 프로세서 회로(218)의 버퍼 DMA(320)는, 구성 데이터에 따라, 시스템 메모리(230)에 저장된 입력 데이터의 다수의 타일들 중 하나를 검색할 수 있다. 게다가, 각각의 뉴럴 프로세서 회로(218)의 커널 DMA(324)는 뉴럴 프로세서 회로(218)의 버퍼 DMA(320)에 의해 검색되는 입력 데이터와 함께 프로세싱될 커널 데이터를 검색한다.
일부 실시예들에서, 하나 이상의 뉴럴 프로세서 회로들(218)은 프로세싱 사이클에서 사용되지 않을 때 비활성화될 수 있다. 비활성화는 뉴럴 프로세서 회로(218)를 전력 절약 모드로 배치하는 것, 또는 뉴럴 프로세서 회로(218)를 파워 오프시키는 것을 포함할 수 있다. 여기서, 비활성화된 뉴럴 프로세서 회로(218)는 시스템 메모리(230)로부터 입력 데이터 또는 커널 데이터를 검색하지 않는다.
뉴럴 프로세서 회로(218)의 데이터 버퍼(318)는 데이터 버퍼(318)에 저장된 입력 데이터의 일부를 뉴럴 프로세서 회로(218)의 뉴럴 엔진들(314)의 MAC 회로들(404)에 제공하며, 뉴럴 프로세서 회로(218)의 커널 추출 회로(432)는 커널 데이터로부터 생성된 커널 계수들을 뉴럴 프로세서 회로(218)의 뉴럴 엔진들(314)의 MAC 회로들(404)에 제공한다(1708). 입력 데이터 및 커널 데이터를 수신하는 뉴럴 엔진들(314)은 활성화된 뉴럴 엔진들(314)일 수 있다. 뉴럴 프로세서 회로(218)의 하나 이상의 뉴럴 엔진들(314)은, 프로세싱 사이클에서 사용되지 않을 때, 이를테면, 전력 절약 모드로 배치되거나 또는 파워 오프되는 것에 의해, 비활성화될 수 있다.
뉴럴 프로세서 회로(218)의 활성화된 뉴럴 엔진들(314) 각각에 제공되는 입력 데이터의 부분은 뉴럴 프로세서 회로(218)의 데이터 버퍼(318)에 저장된 입력 데이터의 타일의 작업 유닛을 포함할 수 있다. 일부 실시예들에서, 뉴럴 프로세서 회로(218)의 활성화된 뉴럴 엔진들(314)은 동일한(예컨대, 작업 유닛 또는 작업 유닛의 일부) 입력 데이터를 수신하고, 프로세싱 사이클에서 입력 데이터에 상이한 커널 계수들을 적용한다. 다수의 뉴럴 프로세서 회로들(218)은 뉴럴 프로세서 회로들(218)이 프로세싱 사이클에서 상이한 입력 데이터를 프로세싱하도록 단계(1708)를 병렬로 수행할 수 있다. 동일한 프로세싱 사이클에서, 뉴럴 프로세서 회로(218)의 다수의 뉴럴 엔진들(314)은 동일한 입력 데이터에 상이한 커널 계수들을 적용하는 것으로 태스킹될 수 있다. 여기서, 다수의 뉴럴 엔진들(314)은 프로세싱 사이클에서 출력 데이터의 상이한 채널들을 생성하도록 병렬로 동작할 수 있다. 후속 프로세싱 사이클에서, 뉴럴 엔진들(314)에 제공되는 입력 데이터가 상이할 수 있거나, 또는 뉴럴 엔진들(314)에 의해 사용되는 커널 데이터가 상이할 수 있거나, 또는 둘 모두일 수 있다.
뉴럴 프로세서 회로(218)의 뉴럴 엔진들(314)은 입력 데이터 및 커널 계수들의 부분을 사용하여 출력 데이터를 생성한다(1710). 예컨대, 각각의 뉴럴 프로세싱 회로(218)는, 프로세싱 사이클에서 활성화된 뉴럴 엔진들(314)의 MAC 회로들(404)에 제공되는 입력 데이터 및 커널 데이터에 기초하여, 프로세싱 사이클에서 상이한 출력 데이터를 생성할 수 있다.
일부 실시예들에서, 뉴럴 엔진들(314)은, 도 5 내지 도 8에 도시된 바와 같이, 입력 데이터를 프로세싱하기 위한 루프들을 구현하기 위해 다수의 프로세싱 사이클들을 수행한다. 예컨대, 뉴럴 프로세서 회로(218)의 뉴럴 엔진(314)은 상이한 프로세싱 사이클들에서 입력 데이터의 타일의 상이한 작업 유닛들을 프로세싱할 수 있다. 다른 예에서, 상이한 뉴럴 프로세서 회로들(218)은 프로세싱 사이클에서 입력 데이터의 공통 슬라이스의 상이한 타일들을 프로세싱할 수 있다. 다른 예에서, 상이한 뉴럴 프로세서 회로들(218)은 프로세싱 사이클에서 상이한 입력 데이터의 상이한 타일들과 같은 상이한 뉴럴 네트워크들을 프로세싱할 수 있다.
뉴럴 프로세서 회로(218)의 뉴럴 엔진들(314)은 출력 데이터를 뉴럴 프로세서 회로(218)의 데이터 버퍼(318)에 저장한다(1712). 하나 이상의 프로세싱 사이클을 수행한 후에, 뉴럴 프로세서 회로(218)의 각각의 뉴럴 엔진(314)으로부터의 출력 데이터는 뉴럴 프로세서 회로(218)의 데이터 버퍼(318)에 저장된다.
뉴럴 태스크 관리자(310)는 뉴럴 프로세서 회로(218)의 데이터 버퍼(318)에 저장된 출력 데이터가 뉴럴 프로세서 회로(218)에 의해 실행되는 후속 태스크에 대한 입력 데이터인지를 뉴럴 프로세서 회로(218)에 대해 결정한다(1714). 결정은 태스크에 대한 구성 데이터, 이를테면, 태스크의 태스크 디스크립터(1012)의 출력 표면 파라미터(1214)에 기초할 수 있다.
데이터 버퍼(318)에 저장된 출력 데이터가 후속 태스크에 대한 입력 데이터인 경우, 방법은 1408로 리턴하며, 여기서, 입력 데이터 및 대응하는 커널 계수들은 뉴럴 프로세서 회로(218)의 뉴럴 엔진들(314)의 MAC 회로들(404)에 제공된다. 후속 태스크에서, 상이한 컴포넌트들, 이를테면 뉴럴 프로세서 회로들(218) 또는 뉴럴 엔진들(314)은 후속 구성 데이터에 따라 선택적으로 활성화 또는 비활성화될 수 있다.
데이터 버퍼(318)에 저장된 출력 데이터가 후속 태스크에 대한 입력 데이터가 아닌 경우, 뉴럴 프로세서 회로(218)의 버퍼 DMA(320)는 데이터 버퍼(318)로부터의 출력 데이터를 시스템 메모리(230)에 저장한다. 방법이 종료될 수 있다.
일부 실시예들에서, 뉴럴 프로세서 회로(218)는, 후속 프로세싱 사이클에서 뉴럴 프로세서 회로(218)에 의해 프로세싱될 시스템 메모리(230)로부터의 후속 입력 데이터에 대한 출력 데이터를 생성하는 프리페치 동작을 프로세싱 사이클에서 수행할 수 있다.
일부 실시예에서, 제1 뉴럴 프로세서 회로(218)로부터의 출력 데이터는 제2 뉴럴 프로세서 회로(218)를 위한 입력 데이터로서 사용된다. 예컨대, 제1 뉴럴 프로세서 회로(218)로부터의 출력 데이터는 시스템 메모리(230)에 저장될 수 있고, 시스템 메모리(230)는 출력 데이터를 입력 데이터로서 제2 뉴럴 프로세서 회로(218)에 제공할 수 있다.
단계들(1706 내지 1716)은, 이를테면 전자 디바이스에 의해 실행되는 기계 학습 동작들의 속도를 개선하기 위해 병렬로 전자 디바이스의 다수의 뉴럴 프로세서 회로들(218)에 의해 수행될 수 있다. 각각의 뉴럴 프로세서 회로(218)로부터의 출력 데이터는 뉴럴 상호연결 데이터 버퍼(1506) 또는 시스템 메모리(230)에 의해 수집될 수 있다. 태스크들의 구성 데이터에 따라, 출력 데이터는 후속 프로세싱 사이클에 대한 입력 데이터로서 하나 이상의 뉴럴 프로세서 회로들(218)에 제공될 수 있다.
특정 실시예들 및 애플리케이션들이 예시 및 설명되었지만, 본 발명은 본원에서 개시되는 정확한 구성 및 컴포넌트로 제한되지 않으며, 당업자에게 자명하게 될 다양한 수정들, 변경들, 및 변화들이, 본 개시내용의 사상 및 범주로부터 벗어나지 않으면서, 본원에서 개시되는 방법 및 장치의 배열, 동작, 및 세부사항들에서 이루어질 수 있다는 것이 이해되어야 한다.

Claims (20)

  1. 뉴럴 프로세서 회로(neural processor circuit)로서,
    선택적으로 활성화되는 복수의 뉴럴 엔진 회로들 - 상기 뉴럴 엔진 회로들 각각은 출력 데이터를 생성하기 위해 입력 데이터 및 커널 계수들에 대해 콘볼루션 동작(convolution operation)들을 수행하도록 구성되고, 상기 뉴럴 엔진 회로들 중 적어도 둘 각각은 복수의 승산-가산(multiply-add, MAD) 회로들 및 상기 MAD 회로들로부터 프로세싱된 값들에 비선형 함수를 적용하도록 구성된 사후-프로세서를 포함함 -;
    상기 복수의 뉴럴 엔진 회로들 사이에서 공유된 데이터 버퍼 - 상기 데이터 버퍼는 상기 뉴럴 프로세서 회로 외부의 메모리와 통신하고, 상기 데이터 버퍼는 상기 뉴럴 엔진 회로들로 전송하기 위한 상기 메모리로부터의 상기 입력 데이터 및 상기 뉴럴 엔진 회로들의 상이한 사후-프로세서들로부터 수신된 상기 출력 데이터를 저장하도록 구성됨 -; 및
    상기 뉴럴 프로세서 회로 외부의 상기 메모리로부터 커널 데이터를 수신하도록 구성된 커널 추출 회로 - 상기 커널 추출 회로는 상기 커널 데이터로부터 추출된 대응하는 커널 계수를 활성화를 위해 선택된 뉴럴 엔진 회로들로 전송하도록 구성됨 -
    를 포함하는, 뉴럴 프로세서 회로.
  2. 제1항에 있어서, 태스크를 위해 상기 뉴럴 엔진 회로들 중 하나 이상을 활성화 또는 비활성화시키기 위해, 상기 뉴럴 엔진 회로들에 구성 데이터를 제공하도록 구성된 뉴럴 태스크 관리자 회로를 더 포함하는, 뉴럴 프로세서 회로.
  3. 제2항에 있어서, 상기 데이터 버퍼는, 상기 뉴럴 태스크 관리자 회로로부터 상기 구성 데이터를 수신하는 것에 응답하여, 상기 입력 데이터 및 상기 출력 데이터를 저장하기 위한 메모리 공간을 할당하도록 추가로 구성되는, 뉴럴 프로세서 회로.
  4. 제3항에 있어서, 상기 뉴럴 프로세서 회로는 상기 메모리 및 상기 데이터 버퍼에 커플링된 버퍼 다이렉트 메모리 액세스(DMA)를 포함하며,
    상기 버퍼 DMA는 상기 메모리로부터 상기 입력 데이터를 검색하고, 상기 구성 데이터에 따라 상기 데이터 버퍼의 상기 메모리 공간에 상기 입력 데이터를 제공하도록 구성되는, 뉴럴 프로세서 회로.
  5. 제2항에 있어서, 상기 커널 추출 회로는, 상기 뉴럴 태스크 관리자로부터 상기 구성 데이터를 수신하는 것에 응답하여, 상기 커널 데이터를 저장하기 위한 메모리 공간을 할당하도록 추가로 구성되는, 뉴럴 프로세서 회로.
  6. 제2항에 있어서, 시스템 메모리에 커플링된 프로세서를 더 포함하며,
    상기 프로세서는 하나 이상의 뉴럴 네트워크들을 인스턴스화하는 태스크들을 정의하는 상기 구성 데이터를 생성하도록 구성되는, 뉴럴 프로세서 회로.
  7. 제2항에 있어서, 상기 복수의 뉴럴 엔진 회로들 각각은, 비활성화될 때, 전력 절약 모드로 동작하는, 뉴럴 프로세서 회로.
  8. 제1항에 있어서, 태스크 리스트에 기초하여 테스크 큐(queue)에 태스크들을 저장하도록 구성된 뉴럴 태스크 관리자 회로를 더 포함하는, 뉴럴 프로세서 회로.
  9. 제8항에 있어서, 상기 뉴럴 프로세서 회로는, 비활성화될 때, 전력 절약 모드로 동작하는, 뉴럴 프로세서 회로.
  10. 입력 데이터를 프로세싱하기 위한 방법으로서,
    뉴럴 프로세서 회로의 복수의 뉴럴 엔진 회로들을 선택적으로 활성화시키는 단계 - 상기 뉴럴 엔진 회로들 각각은 출력 데이터를 생성하기 위해 입력 데이터 및 커널 계수들에 대해 콘볼루션 동작들을 수행하도록 구성되고, 상기 뉴럴 엔진 회로들 중 적어도 둘 각각은 복수의 MAD 회로들 및 상기 MAD 회로들로부터 프로세싱된 값들에 비선형 함수를 적용하도록 구성된 사후-프로세서를 포함함 -;
    상기 뉴럴 엔진 회로들로 전송하기 위한 상기 입력 데이터 및 상기 뉴럴 엔진 회로들의 상이한 사후-프로세서들로부터 수신된 상기 출력 데이터를 상기 뉴럴 엔진 회로의 데이터 버퍼에 저장하는 단계 - 상기 데이터 버퍼는 상기 복수의 뉴럴 엔진 회로들 사이에서 공유되고, 상기 데이터 버퍼는 상기 뉴럴 프로세서 회로 외부의 메모리와 통신함 -; 및
    커널 데이터로부터 추출된 대응하는 커널 계수를 활성화를 위해 선택된 뉴럴 엔진 회로들로 전송하는 단계
    를 포함하는, 방법.
  11. 제10항에 있어서, 태스크를 위해 상기 뉴럴 엔진 회로들 중 하나 이상을 활성화 또는 비활성화시키기 위해, 상기 뉴럴 엔진 회로들에 구성 데이터를 제공하는 단계를 더 포함하는, 방법.
  12. 제11항에 있어서, 상기 구성 데이터에 응답하여, 상기 입력 데이터 및 상기 출력 데이터를 저장하기 위해 상기 데이터 버퍼의 메모리 공간을 할당하는 단계를 더 포함하는, 방법.
  13. 제12항에 있어서, 메모리로부터 상기 입력 데이터를 검색하고, 상기 구성 데이터에 따라 상기 데이터 버퍼의 상기 메모리 공간에 상기 입력 데이터를 제공하는 단계를 더 포함하는, 방법.
  14. 제11항에 있어서,
    뉴럴 태스크 관리자로부터의 상기 구성 데이터에 응답하여, 상기 커널 데이터를 저장하기 위해 커널 추출 회로의 메모리 공간을 할당하는 단계; 및
    상기 커널 추출 회로에 상기 커널 데이터를 저장하는 단계를 더 포함하는, 방법.
  15. 제11항에 있어서, 하나 이상의 뉴럴 네트워크들을 인스턴스화하는 태스크들을 정의하는 상기 구성 데이터를 생성하는 단계를 더 포함하는, 방법.
  16. 제11항에 있어서, 상기 복수의 뉴럴 엔진 회로들 각각은, 비활성화될 때, 전력 절약 모드로 동작하는, 방법.
  17. 제10항에 있어서, 태스크를 위해 상기 뉴럴 프로세서 회로를 활성화 또는 비활성화시키기 위해, 상기 뉴럴 프로세서 회로에 구성 데이터를 제공하는 단계를 더 포함하는, 방법.
  18. 제17항에 있어서, 상기 뉴럴 프로세서 회로는, 비활성화될 때, 전력 절약 모드로 동작하는, 방법.
  19. 뉴럴 프로세서 회로를 포함하는 집적 회로(IC) 시스템으로서,
    상기 뉴럴 프로세서 회로는,
    선택적으로 활성화되는 복수의 뉴럴 엔진 회로들 - 상기 뉴럴 엔진 회로들 각각은 출력 데이터를 생성하기 위해 입력 데이터 및 커널 계수들에 대해 콘볼루션 동작들을 수행하도록 구성되고, 상기 뉴럴 엔진 회로들 중 적어도 둘 각각은 복수의 MAD 회로들 및 상기 MAD 회로들로부터 프로세싱된 값들에 비선형 함수를 적용하도록 구성된 사후-프로세서를 포함함 -;
    상기 복수의 뉴럴 엔진 회로들 사이에서 공유되는 데이터 버퍼 - 상기 데이터 버퍼는 상기 뉴럴 프로세서 회로 외부의 메모리와 통신하고, 상기 데이터 버퍼는 상기 뉴럴 엔진 회로들로 전송하기 위한 상기 메모리로부터의 상기 입력 데이터 및 상기 뉴럴 엔진 회로들의 상이한 사후-프로세서들로부터 수신된 상기 출력 데이터를 저장하도록 구성됨 -; 및
    상기 뉴럴 프로세서 회로 외부의 상기 메모리로부터 커널 데이터를 수신하도록 구성된 커널 추출 회로 - 상기 커널 추출 회로는 상기 커널 데이터로부터 추출된 대응하는 커널 계수를 활성화를 위해 선택된 뉴럴 엔진 회로들로 전송하도록 구성됨 -
    를 포함하는, 집적 회로(IC) 시스템.
  20. 제19항에 있어서, 상기 뉴럴 프로세서 회로는, 태스크를 위해 상기 뉴럴 엔진 회로들 중 하나 이상을 활성화 또는 비활성화시키기 위해, 상기 뉴럴 엔진 회로들에 구성 데이터를 제공하도록 구성된 뉴럴 태스크 관리자 회로를 더 포함하는, 집적 회로(IC) 시스템.
KR1020207033125A 2018-05-04 2019-04-04 스케일러블 뉴럴 네트워크 프로세싱 엔진 KR102572705B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020237028820A KR20230129575A (ko) 2018-05-04 2019-04-04 스케일러블 뉴럴 네트워크 프로세싱 엔진

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/971,882 US11537838B2 (en) 2018-05-04 2018-05-04 Scalable neural network processing engine
US15/971,882 2018-05-04
PCT/US2019/025894 WO2019212689A1 (en) 2018-05-04 2019-04-04 Scalable neural network processing engine

Related Child Applications (1)

Application Number Title Priority Date Filing Date
KR1020237028820A Division KR20230129575A (ko) 2018-05-04 2019-04-04 스케일러블 뉴럴 네트워크 프로세싱 엔진

Publications (2)

Publication Number Publication Date
KR20200143479A KR20200143479A (ko) 2020-12-23
KR102572705B1 true KR102572705B1 (ko) 2023-08-31

Family

ID=66248700

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020237028820A KR20230129575A (ko) 2018-05-04 2019-04-04 스케일러블 뉴럴 네트워크 프로세싱 엔진
KR1020207033125A KR102572705B1 (ko) 2018-05-04 2019-04-04 스케일러블 뉴럴 네트워크 프로세싱 엔진

Family Applications Before (1)

Application Number Title Priority Date Filing Date
KR1020237028820A KR20230129575A (ko) 2018-05-04 2019-04-04 스케일러블 뉴럴 네트워크 프로세싱 엔진

Country Status (4)

Country Link
US (2) US11537838B2 (ko)
KR (2) KR20230129575A (ko)
CN (1) CN112055862B (ko)
WO (1) WO2019212689A1 (ko)

Families Citing this family (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11537838B2 (en) 2018-05-04 2022-12-27 Apple Inc. Scalable neural network processing engine
US11360809B2 (en) * 2018-06-29 2022-06-14 Intel Corporation Multithreaded processor core with hardware-assisted task scheduling
US10613977B1 (en) * 2018-09-27 2020-04-07 Amazon Technologies, Inc. Target port with distributed transactions
US10831693B1 (en) * 2018-09-27 2020-11-10 Amazon Technologies, Inc. Multicast master
US11861484B2 (en) * 2018-09-28 2024-01-02 Qualcomm Incorporated Neural processing unit (NPU) direct memory access (NDMA) hardware pre-processing and post-processing
US11295205B2 (en) * 2018-09-28 2022-04-05 Qualcomm Incorporated Neural processing unit (NPU) direct memory access (NDMA) memory bandwidth optimization
US10747516B1 (en) * 2019-03-21 2020-08-18 Xilinx, Inc. Applications for hardware accelerators in computing systems
US11461622B2 (en) * 2019-06-28 2022-10-04 Amazon Technologies, Inc. Dynamic code loading for multiple executions on a sequential processor
US11513799B2 (en) * 2019-11-04 2022-11-29 Apple Inc. Chained buffers in neural network processor
US11741350B2 (en) 2019-11-27 2023-08-29 Amazon Technologies, Inc. Efficient utilization of processing element array
KR20210093127A (ko) * 2020-01-17 2021-07-27 에스케이하이닉스 주식회사 Aim 장치
US12014202B2 (en) 2020-02-13 2024-06-18 Samsung Electronics Co., Ltd. Method and apparatus with accelerator
US11599780B2 (en) 2020-03-02 2023-03-07 Apple Inc. Asynchronous task execution for neural processor circuit
CN111008982A (zh) * 2020-03-10 2020-04-14 光子算数(北京)科技有限责任公司 基于光子神经网络芯片的数据处理方法及相关装置或设备
US20220036158A1 (en) * 2020-07-29 2022-02-03 Apple Inc. Task skew management for neural processor circuit
US11972348B2 (en) * 2020-10-30 2024-04-30 Apple Inc. Texture unit circuit in neural network processor
US11475240B2 (en) * 2021-03-19 2022-10-18 Apple Inc. Configurable keypoint descriptor generation
US20230079975A1 (en) * 2021-09-10 2023-03-16 Arm Limited Power management for system-on-chip

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170103316A1 (en) * 2015-05-21 2017-04-13 Google Inc. Computing convolutions using a neural network processor
CN107886166A (zh) * 2016-09-29 2018-04-06 北京中科寒武纪科技有限公司 一种执行人工神经网络运算的装置和方法

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0480867A (ja) 1990-07-23 1992-03-13 Mitsubishi Electric Corp 演算回路
JPH04127364A (ja) 1990-09-19 1992-04-28 Nec Corp 積和算器
US6836767B2 (en) * 2001-10-03 2004-12-28 International Business Machines Corporation Pipelined hardware implementation of a neural network circuit
WO2009077073A1 (en) * 2007-11-28 2009-06-25 Honda Research Institute Europe Gmbh Artificial cognitive system with amari-type dynamics of a neural field
US8386690B2 (en) * 2009-11-13 2013-02-26 International Business Machines Corporation On-chip networks for flexible three-dimensional chip integration
US9336144B2 (en) * 2013-07-25 2016-05-10 Globalfoundries Inc. Three-dimensional processing system having multiple caches that can be partitioned, conjoined, and managed according to more than one set of rules and/or configurations
US9978014B2 (en) 2013-12-18 2018-05-22 Intel Corporation Reconfigurable processing unit
US9507565B1 (en) 2014-02-14 2016-11-29 Altera Corporation Programmable device implementing fixed and floating point functionality in a mixed architecture
US9898071B2 (en) * 2014-11-20 2018-02-20 Apple Inc. Processor including multiple dissimilar processor cores
US9958932B2 (en) * 2014-11-20 2018-05-01 Apple Inc. Processor including multiple dissimilar processor cores that implement different portions of instruction set architecture
US10373050B2 (en) 2015-05-08 2019-08-06 Qualcomm Incorporated Fixed point neural network based on floating point neural network quantization
US10049322B2 (en) * 2015-05-21 2018-08-14 Google Llc Prefetching weights for use in a neural network processor
US10192162B2 (en) * 2015-05-21 2019-01-29 Google Llc Vector computation unit in a neural network processor
US11423311B2 (en) 2015-06-04 2022-08-23 Samsung Electronics Co., Ltd. Automatic tuning of artificial neural networks
KR102325602B1 (ko) * 2015-07-06 2021-11-12 삼성전자주식회사 데이터를 병렬적으로 처리하는 장치 및 방법
US11244225B2 (en) * 2015-07-10 2022-02-08 Samsung Electronics Co., Ltd. Neural network processor configurable using macro instructions
US20190073582A1 (en) 2015-09-23 2019-03-07 Yi Yang Apparatus and method for local quantization for convolutional neural networks (cnns)
JP6700712B2 (ja) * 2015-10-21 2020-05-27 キヤノン株式会社 畳み込み演算装置
FR3045892B1 (fr) 2015-12-21 2018-06-22 Commissariat A L'energie Atomique Et Aux Energies Alternatives Circuit neuronal optimise, architecture et procede pour l'execution des reseaux de neurones.
US10157309B2 (en) 2016-01-14 2018-12-18 Nvidia Corporation Online detection and classification of dynamic gestures with recurrent convolutional neural networks
US9858636B1 (en) * 2016-06-30 2018-01-02 Apple Inc. Configurable convolution engine
US10242311B2 (en) * 2016-08-11 2019-03-26 Vivante Corporation Zero coefficient skipping convolution neural network engine
US9940534B1 (en) * 2016-10-10 2018-04-10 Gyrfalcon Technology, Inc. Digital integrated circuit for extracting features out of an input image based on cellular neural networks
US10565492B2 (en) 2016-12-31 2020-02-18 Via Alliance Semiconductor Co., Ltd. Neural network unit with segmentable array width rotator
CN107633298B (zh) * 2017-03-10 2021-02-05 南京风兴科技有限公司 一种基于模型压缩的递归神经网络加速器的硬件架构
US10311002B2 (en) * 2017-05-15 2019-06-04 International Business Machines Corporation Selectable peripheral logic in programmable apparatus
US10445402B1 (en) * 2017-09-29 2019-10-15 Ambarella, Inc. Fast and energy-efficient region of interest pooling for object detection with convolutional neural network
US11537838B2 (en) 2018-05-04 2022-12-27 Apple Inc. Scalable neural network processing engine

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170103316A1 (en) * 2015-05-21 2017-04-13 Google Inc. Computing convolutions using a neural network processor
CN107886166A (zh) * 2016-09-29 2018-04-06 北京中科寒武纪科技有限公司 一种执行人工神经网络运算的装置和方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Michael Gautschi 등, "Near-Threshold RISC-V Core With DSP Extensions for Scalable IoT Endpoint Devices"*
Yu-Hsin Chen 등. "Eyeriss: An Energy-Efficient Reconfigurable Accelerator for Deep Convolutional Neural Networks"*

Also Published As

Publication number Publication date
US11989640B2 (en) 2024-05-21
US20230099652A1 (en) 2023-03-30
KR20200143479A (ko) 2020-12-23
WO2019212689A1 (en) 2019-11-07
CN112055862B (zh) 2024-05-07
US11537838B2 (en) 2022-12-27
KR20230129575A (ko) 2023-09-08
CN112055862A (zh) 2020-12-08
US20190340491A1 (en) 2019-11-07

Similar Documents

Publication Publication Date Title
KR102572705B1 (ko) 스케일러블 뉴럴 네트워크 프로세싱 엔진
KR102607234B1 (ko) 뉴럴 네트워크 프로세서에서 태스크들을 할당하기 위한 시스템들 및 방법들
US11640316B2 (en) Compiling and scheduling transactions in neural network processor
US11740932B2 (en) Systems and methods for task switching in neural network processor
CN112074847A (zh) 拆分用于在神经网络处理器中处理的输入数据
US11934941B2 (en) Asynchronous task execution for neural processor circuit
KR20220089712A (ko) 뉴럴 프로세서 회로에서의 보안 모드 스위칭
US20230394276A1 (en) Subtask storage for streaming convolutions in neural network processor
US20220036158A1 (en) Task skew management for neural processor circuit
KR20230136154A (ko) 뉴럴 프로세서 회로에 대한 분기 동작
US20240095541A1 (en) Compiling of tasks for streaming operations at neural processor
US20240220764A1 (en) Efficient zero padding in convolution at neural processor
US20230368008A1 (en) Memory-efficient streaming convolutions in neural network processor
US20240232571A1 (en) Palettization of Kernel Vector in Neural Network Processor
WO2024147977A1 (en) Efficient zero padding in convolution at neural processor
CN116830119A (zh) 神经引擎电路的多运算模式

Legal Events

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