KR102232722B1 - 프로그램 가능한 2차원 이미지 프로세서상의 컨볼루션 신경망 - Google Patents

프로그램 가능한 2차원 이미지 프로세서상의 컨볼루션 신경망 Download PDF

Info

Publication number
KR102232722B1
KR102232722B1 KR1020197000838A KR20197000838A KR102232722B1 KR 102232722 B1 KR102232722 B1 KR 102232722B1 KR 1020197000838 A KR1020197000838 A KR 1020197000838A KR 20197000838 A KR20197000838 A KR 20197000838A KR 102232722 B1 KR102232722 B1 KR 102232722B1
Authority
KR
South Korea
Prior art keywords
processor
processing element
dimensional
stencil
convolution
Prior art date
Application number
KR1020197000838A
Other languages
English (en)
Other versions
KR20190022627A (ko
Inventor
오페르 샤참
데이비드 패터슨
윌리엄 알. 마크
알버트 마익스너
다니엘 페데릭 핀첼스타인
제이슨 루퍼트 레드그레이브
Original Assignee
구글 엘엘씨
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 구글 엘엘씨 filed Critical 구글 엘엘씨
Publication of KR20190022627A publication Critical patent/KR20190022627A/ko
Application granted granted Critical
Publication of KR102232722B1 publication Critical patent/KR102232722B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • G06N3/0454
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/0464Convolutional networks [CNN, ConvNet]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • G06K9/46
    • G06K9/56
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/04Architecture, e.g. interconnection topology
    • G06N3/045Combinations of networks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T5/00Image enhancement or restoration
    • G06T5/20Image enhancement or restoration by the use of local operators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/20Image preprocessing
    • G06V10/36Applying a local operator, i.e. means to operate on image points situated in the vicinity of a given point; Non-linear local filtering operations, e.g. median filtering
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/40Extraction of image or video features
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2200/00Indexing scheme for image data processing or generation, in general
    • G06T2200/28Indexing scheme for image data processing or generation, in general involving image processing hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20084Artificial neural networks [ANN]

Landscapes

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

Abstract

실행 레인들의 어레이 및 2차원 시프트 레지스터를 갖는 이미지 프로세서 상에 컨벌루션 신경망 계층을 실행하는 단계를 포함하는 방법이 개시된다. 컨볼루션 신경망의 실행은 이미지 데이터의 3차원 블록의 이미지 데이터의 평면을 2차원 시프트 레지스터에 로딩하는 단계를 포함한다. 컨볼루션 신경망의 실행은 또한 계수 값들의 어레이를 이용하여 상기 이미지 데이터 평면의 2차원 컨볼루션을 수행하는 단계를 포함하여 순차적으로: 부분 적들의 어레이를 생성하도록 상기 실행 레인들내에서 각각의 픽셀 및 계수 값들을 동시에 승산하는 단계와; 상기 이미지 데이터 내의 상이한 스텐실들에 대한 상기 2차원 레지스터 내에 유지되는 부분 적들의 각각의 누적으로 상기 실행 레인들 내에서 상기 부분 적들을 동시에 합산하는 단계와; 그리고 상기 2차원 시프트 레지스터 어레이 내의 컨텐츠를 시프트하여 상기 실행 레인들 내의 상기 2차원 컨볼루션에 대한 값들의 정렬을 수행하는 단계를 수행한다.

Description

프로그램 가능한 2차원 이미지 프로세서상의 컨볼루션 신경망
본 발명은 일반적으로 이미지 프로세싱에 관한 것으로서, 더 상세하게는 2차원 이미지 프로세서상의 컨볼루션 신경망에 관한 것이다.
이미지 프로세싱은 일반적으로 어레이로 조직된 픽셀 값의 처리를 수반한다. 여기서, 공간적으로 조직화된 2차원 어레이는 이미지의 2차원 특성(nature)을 포착한다(추가 차원들은 시간(예컨대, 2차원 이미지의 시퀀스) 및 데이터 유형(예컨대, 컬러)을 포함할 수 있다). 일반적인 시나리오에서, 배열된(arrayed) 픽셀 값들은 모션 이미지를 캡처하기 위해 정지 이미지 또는 프레임 시퀀스를 생성하는 카메라에 의해 제공된다. 전통적인 이미지 프로세서들은 일반적으로 두 가지 극단적인 측면에 있다.
첫 번째 극단은 범용 프로세서 또는 범용 유사 프로세서(예컨대, 벡터 명령 강화를 갖는 범용 프로세서)상에서 실행되는 소프트웨어 프로그램으로서 이미지 프로세싱 태스크를 수행한다. 첫 번째 극단은 일반적으로 매우 다양한 애플리케이션 소프트웨어 개발 플랫폼을 제공하지만, 관련된 오버 헤드(예컨대, 명령 인출 및 디코드, 온-칩 및 오프-칩 데이터의 프로세싱, 추론적 실행)와 결합된 보다 세분화된(finer grained) 데이터 구조의 사용으로 인해 궁극적으로 프로그램 코드의 실행 동안에 단위 데이터 당 더 많은 양의 에너지 소모를 유발한다.
두 번째의 반대 극단은 훨씬 더 큰 데이터 블록에 고정 기능 하드와이어드 회로를 적용한다. 맞춤 설계된 회로들에 직접적으로 적용된 더 큰(더 세분화된과 반대의) 데이터 블록의 사용은 단위 데이터당 전력 소비를 크게 감소시킨다. 그러나, 맞춤 설계된 고정 기능 회로들의 사용은 일반적으로 프로세서가 수행할 수 있는 태스트 세트의 제한을 유발한다. 이와 같이 두 번째 극단은 매우 다양한 프로그래밍 환경(첫 번째 극단과 관련된)이 부족하다.
매우 다양한 애플리케이션 소프트웨어 개발 기회와 단위 데이터 당 개선된 전력 효율을 모두 제공하는 기술 플랫폼은 바람직하지만 아직 해결되지 않은 채로 남아 있다.
실행 레인들의 어레이 및 2차원 시프트 레지스터를 갖는 이미지 프로세서상에 컨벌루션 신경망 계층을 실행하는 단계를 포함하는 방법이 개시된다. 상기 2차원 시프트 레지스터는 실행 레인들을 위한 국부적인 개별 레지스터 공간을 제공한다. 상기 컨볼루션 신경망을 실행하는 단계는 이미지 데이터의 3차원 블록의 이미지 데이터 평면을 2차원 시프트 레지스터에 로딩하는 단계를 포함한다. 상기 컨볼루션 신경망을 실행하는 단계는 또한 계수 값들의 어레이로 상기 이미지 데이터 평면의 2차원 컨볼루션을 수행하는 단계를 포함하여 순차적으로: 부분 적들의 어레이를 생성하도록 상기 실행 레인들내에서 각각의 픽셀 및 계수 값들을 동시에 승산하는 단계와; 상기 이미지 데이터 내의 상이한 스텐실들에 대한 상기 2차원 레지스터 내에 유지되는 부분 적들의 각각의 누적으로 상기 실행 레인들 내에서 상기 부분 적들을 동시에 합산하는 단계와; 그리고 상기 2차원 시프트 레지스터 어레이 내의 컨텐츠를 시프트하여 상기 실행 레인들 내의 상기 2차원 컨볼루션에 대한 값들의 정렬을 수행하는 단계를 수행한다.
또한, 실행 레인들의 어레이 및 2 차원 시프트 레지스터를 갖는 이미지 프로세서 상에 컨볼루션 신경망 계층을 실행하는 수단을 갖는 장치가 개시된다. 상기 2차원 시프트 레지스터는 실행 레인들을 위한 국부적인 개별 레지스터 공간을 제공한다. 상기 컨벌루션 신경망을 실행하는 수단은 이미지 데이터의 3차원 블록의 이미지 데이터 평면을 2차원 시프트 레지스터로 로딩하는 수단을 포함한다. 상기 컨벌루션 신경망을 실행하는 수단은 또한 계수 값들의 어레이로 상기 이미지 데이터 평면의 2차원 컨볼루션을 수행하는 수단을 포함하여 순차적으로: 부분 적들의 어레이를 생성하도록 상기 실행 레인들내에서 각각의 픽셀 및 계수 값들을 동시에 승산하는 단계와; 상기 이미지 데이터 내의 상이한 스텐실들에 대한 상기 2차원 레지스터 내에 유지되는 부분 적들의 각각의 누적으로 상기 실행 레인들 내에서 상기 부분 적들을 동시에 합산하는 단계와; 그리고 상기 2차원 시프트 레지스터 어레이 내의 컨텐츠를 시프트하여 상기 실행 레인들 내의 상기 2차원 컨볼루션에 대한 값들의 정렬을 수행하는 단계를 수행한다.
다음의 설명 및 첨부 도면들은 다양한 실시예를 기술하기 위해 사용된다. 도면에서:
도 1은 이미지 프로세서 하드웨어 아키텍처의 실시예를 도시한다.
도 2a 내지 도 2e는 라인 그룹으로의 이미지 데이터 파싱, 시트로의 라인 그룹의 파싱 및 중첩 스텐실로 시트상에서 수행되는 동작을 도시한다.
도 3a는 스텐실 프로세서의 실시예를 도시한다.
도 3b는 명령 포맷의 실시예를 도시한다.
도 4는 스텐실 프로세서 내의 데이터 계산 유닛의 실시예를 도시한다.
도 5a 내지 도 5k는 중첩 스텐실로 한 쌍의 이웃하는 출력 픽셀 값을 결정하기 위해 2차원 시프트 어레이 및 실행 레인 어레이의 사용 예를 도시한다.
도 6은 통합된 실행 레인 어레이 및 2차원 시프트 어레이에 대한 단위 셀의 실시예를 도시한다.
도 7은 3D 컨볼루션을 도시한다.
도 8은 CNN 계층을 도시한다.
도 9a는 이미지 평면들을 갖는 3차원 컨볼루션을 계수 평면으로 도시한다.
도 9b는 대응하는 계수 세트로 2개의 3×3 스텐실 상당의 이미지 데이터의 2D 컨볼루션을 도시한다.
도 10a 내지 도 10j는 이미지 평면들과 계수들의 평면들을 갖는 계수 세트들을 갖는 CNN 계층의 실행을 도시한다.
도 11a 내지 도 11j는 2차원 시프트 레지스터를 갖는 이미지 프로세서로 2개의 3×3 스텐실에 대한 2차원 컨벌루션을 도시한다.
도 12는 제1 이미지 처리기 CNN 계층 구성을 도시한다.
도 13은 제2 이미지 처리기 CNN 계층 구성을 도시한다.
도 14는 제3 이미지 처리기 CNN 계층 구성을 도시한다.
도 15는 이미지 프로세서상의 다수의 CNN 계층의 멀티플렉싱에 관한 것이다.
도 16은 이미지 프로세서상에서 CNN 계층을 수행하는 방법을 도시한다.
도 17은 컴퓨팅 시스템을 도시한다.
a. 이미지 프로세서 하드웨어 아키텍처 및 동작
도 1은 하드웨어로 구현된 이미지 프로세서를 위한 아키텍처(100)의 실시예를 도시한다. 이미지 프로세서는, 예를 들어, 시뮬레이션된 환경 내의 가상 프로세서 용으로 작성된 프로그램 코드를 하드웨어 프로세서에 의해 실제로 실행되는 프로그램 코드로 변환하는 컴파일러에 의해 타켓팅될 수 있다. 도 1에서 관찰된 바와 같이, 아키텍처(100)는 온칩 스위치 네트워크, 온칩 링 네트워크 또는 다른 종류의 네트워크를 포함하는 네트워크(예컨대, 네트워크 온 칩(NOC))를 통해 복수의 스텐실 처리 유닛(102_1~102_N)(이하 "스텐실 프로세서들", "스텐실 프로세서 유닛들" 등) 및 대응하는 시트 생성기(sheet generator) 유닛들(103_1 내지 103_N)(이하 "시트 생성기들", "시트 생성기 유닛들"등)에 상호 접속된 복수의 라인 버퍼 유닛들(101_1 내지 101_M)(이하 "라인 버퍼들", "라인 버퍼 유닛들" 등)을 포함한다. 일 실시예에서, 임의의 라인 버퍼 유닛은 네트워크(104)를 통해 임의의 시트 생성기 및 대응하는 스텐실 프로세서에 연결될 수 있다.
일 실시예에서, 프로그램 코드는 소프트웨어 개발자에 의해 사전에 정의된 이미지 프로세싱 동작들을 수행하기 위해 대응하는 스텐실 프로세서(102) 상에 컴파일되고 로딩된다(프로그램 코드가 예를 들어 설계 및 구현에 따라 스텐실 프로세서의 관련 시트 생성기(103)상에 로딩될 수도 있다). 적어도 일부의 경우들에서, 이미지 프로세싱 파이프 라인은, 제1 파이프 라인 스테이지에 대한 제1 커널 프로그램을 제1 스텐실 프로세서(102_1)로 로딩하고, 제2 파이프 라인 스테이지에 대한 제2 커널 프로그램을 제2 스텐실 프로세서(102_2)로 로딩함으로써 구현될 수 있으며, 여기서 제1 커널은 파이프 라인의 제1 스테이지의 기능들을 수행하고, 제2 커널은 파이프 라인의 제2 스테이지의 기능들을 수행하며, 추가적인 제어 흐름 방법들은 파이프 라인의 한 스테이지에서 파이프 라인의 다음 스테이지로 출력 이미지 데이터를 전달(pass)하기 위해 설치된다.
다른 구성들에서, 이미지 프로세서는 동일한 커널 프로그램 코드를 동작시키는 2개 이상의 스텐실 프로세서(102_1, 102_2)를 갖는 병렬 머신으로서 구현될 수 있다. 예를 들어, 이미지 데이터의 고밀도 및 고 데이터 레이트 스트림은 각각 동일한 기능을 수행하는 다수의 스텐실 프로세서를 통해 프레임들을 확산시킴으로써 처리될 수 있다.
다른 구성들에서, 근본적으로 커널들의 임의의 방향성 비순환 그래프(DAG : directed acyclic graph)는 각각의 스텐실 프로세서를 그들 자신의 각각의 프로그램 코드 커널로 구성하고, 상기 DAG 설계에서 한 커널의 출력 이미지들을 다음 커널의 입력으로 보내도록 하드웨어에 적절한 제어 흐름 훅들(hooks)을 구성함으로써 하드웨어 프로세서상에 로딩될 수 있다.
일반적인 흐름으로서, 이미지 데이터의 프레임들은 매크로 I/O 유닛(105)에 의해 수신되고 프레임 단위로 하나 이상의 라인 버퍼 유닛(101)으로 전달된다. 특정 라인 버퍼 유닛은 이미지 데이터의 프레임을 "라인 그룹"이라 불리는 이미지 데이터의 더 작은 영역(smaller region)으로 파싱한 다음, 라인 그룹을 네트워크(104)를 통해 특정 시트 생성기로 전달한다. 완전한 또는 "전체(full)" 단일 라인 그룹은, 예를 들어, 프레임의 다수의 연속적인 완전한 행 또는 열의 데이터로 구성될 수 있다(간결함을 위해, 본 명세서는 주로 연속적인 행들을 나타낼 것이다). 시트 생성기는 이미지 데이터의 라인 그룹을 "시트(sheet)"라고 하는 이미지 데이터의 더 작은 영역으로 파싱하여 해당 시트를 대응하는 스텐실 프로세서에 제시한다.
이미지 프로세싱 파이프 라인 또는 단일 입력을 갖는 DAG 흐름의 경우, 일반적으로 입력 프레임들은 이미지 데이터를 라인 그룹들로 파싱하는 동일한 라인 버퍼 유닛(101_1)으로 보내지고, 라인 그룹들은 대응하는 스텐실 프로세서(102_1)가 파이프 라인/DAG에서 제1 커널의 코드를 실행하고 있는 시트 생성기(103_1)로 보내 진다. 처리하는 라인 그룹에 대한 스텐실 처리기(102_1)의 동작이 완료되면, 시트 생성기(103_1)는 출력 라인 그룹들을 "다운스트림" 라인 버퍼 유닛(101_2)로 전송한다(일부 사용 예들에서, 출력 라인 그룹은 이전에 입력 라인 그룹들을 전송한 동일한 라인 버퍼 유닛(101_1))로 되돌려 전송될 수 있다).
그런 다음 그들 자신의 각각의 다른 시트 생성기 및 스텐실 프로세서(예를 들어, 시트 생성기(103_2) 및 스텐실 프로세서(102_2))상에서 실행중인 파이프 라인/DAG에서 다음 스테이지/동작을 나타내는 하나 이상의 "소비자" 커널은 다운스트림 라인 버퍼 유닛(101_2)로부터 제1 스텐실 포로세서(102_1)에 의해 생성된 이미지 데이터를 수신한다. 이와 같은 방법으로, 제1 스텐실 프로세서에서 동작하는 "생산자" 커널은 제2 스텐실 프로세서에서 동작하는 "소비자" 커널로 포워딩되는 그의 출력 데이터를 가지는데, 여기서 소비자 커널은 생산자 커널이 전체 파이프 라인 또는 DAG의 설계와 일치된 후 다음 태스트 세트를 수행한다.
스텐실 프로세서(102)는 이미지 데이터의 다수의 중첩 스텐실상에서 동시에 동작하도록 설계된다. 스텐실 프로세서의 다수의 중첩 스텐실 및 내부 하드웨어 처리 용량은 시트의 크기를 효과적으로 결정한다. 여기서, 스텐실 프로세서(102) 내에서, 실행 레인들의 어레이는 조화롭게 동작하여 다수의 중첩 스텐실에 의해 커버되는 이미지 데이터 표면 영역을 동시에 처리한다.
후술하는 바와 같이, 다양한 실시예에서, 이미지 데이터의 시트들은 스텐실 프로세서 유닛들(102) 내의 2차원 레지스터 어레이 구조에 로딩된다. 시트들 및 2차원 레지스터 어레이 구조의 사용은, 예를 들어 실행 레인 어레이에 의해 그 직후에 데이터에 대해 직접 수행되는 처리 태스크들을 갖는 단일 로드 연산으로서 대량의 데이터를 레지스터 공간으로 이동시킴으로써 전력 소비 개선을 효과적으로 제공한다고 여겨진다. 부가적으로, 실행 레인 어레이 및 대응하는 레지스터 어레이의 사용은 쉽게 프로그래밍/구성할 수 있는 상이한 스텐실 크기를 제공한다.
도 2a 내지 도 2e는 라인 버퍼 유닛(101)의 파싱 활동(activity), 시트 생성기 유닛(103)의 더 세분화된(finer grained)의 파싱 활동뿐만 아니라 시트 생성기 유닛(102)에 결합된 스텐실 프로세서(102)의 스텐실 처리 활동의 높은 수준의 실시예를 도시한다.
도 2a는 이미지 데이터(201)의 입력 프레임의 실시예를 도시한다. 도 2a는 또한 스텐실 프로세서가 동작하도록 설계된 3개의 중첩 스텐실(202)(각 스텐실은 3×3 픽셀 치수를 갖음)의 윤곽을 도시한다. 각 스텐실이 각각 출력 이미지 데이터를 생성하는 출력 픽셀은 검정색으로 강조 표시된다. 간략화를 위해, 3개의 중첩 스텐실(202)은 수직 방향으로만 중첩된 것으로 묘사된다. 실제로 스텐실 프로세서는 수직 및 수평 방향 모두에서 중첩 스텐실들을 갖도록 설계될 수 있음을 인식하는 것이 적절하다.
스텐실 프로세서 내의 수직 중첩 스텐실(202) 때문에, 도 2a에 도시된 바와 같이, 단일 스텐실 프로세서가 동작할 수 있는 프레임 내에는 넓은 범위(wide band)의 이미지 데이터가 존재한다. 아래에서 보다 상세히 설명되는 바와 같이, 일 실시예에서, 스텐실 프로세서들은 이미지 데이터를 가로질러 좌측에서 우측 방식으로 그들의 중첩 스텐실 내의 데이터를 처리한다(그리고 나서 다음 라인들의 세트에 대해 위에서 아래 순서로 반복한다). 따라서, 스텐실 프로세서들이 동작하면서 앞으로 진행함에 따라, 검정색 출력 픽셀 블록들의 수는 수평 방향으로 오른쪽으로 증가할 것이다. 전술한 바와 같이, 라인 버퍼 유닛(101)은 스텐실 프로세서가 장래의 확장된 수의 사이클 동안 동작하는데 충분한 입력 프레임(incoming frame)으로부터 입력 이미지 데이터의 라인 그룹을 파싱하는 역할을 한다. 라인 그룹의 예시적인 묘사는 음영 영역(203)으로 도시되어 있다. 일 실시예에서, 라인 버퍼 유닛(101)은 시트 생성기로 또는 시트 생성기로부터 라인 그룹을 송신/수신하기 위한 다양한 역동성을 이해할 수 있다. 예를 들어, "전체 그룹(full group)"으로 지칭되는 하나의 모드에 따르면, 이미지 데이터의 완전한 전체 폭의 라인들은 라인 버퍼 유닛과 시트 생성기 사이에서 전달된다. "가상 높이(virtually tall)"라고 지칭되는 두 번째 모드에 따르면, 라인 그룹은 처음에는 전체 폭 행들의 서브 세트와 함께 전달된다. 그런 다음 나머지 행들은 순차적으로 더 작은(전체 폭보다 작은) 조각들(pieces)로 전달된다.
라인 버퍼 유닛에 의해 정의되고 시트 생성기 유닛으로 전달된 입력 이미지 데이터의 라인 그룹(203)에 의해, 시트 생성기 유닛은 라인 그룹을 스텐실 프로세서의 하드웨어 제한들에 보다 정확하게 부합되는 보다 미세한 시트들로 파싱한다. 보다 상세하게는, 이하에 더욱 상세히 설명하는 바와 같이, 일 실시예에서, 각 스텐실 프로세서는 2차원 시프트 레지스터 어레이로 구성된다. 2차원 시프트 레지스터 어레이는 기본적으로 이미지 데이터를 실행 레인들의 어레이 "아래(beneath)"로 시프트시키며, 여기서 시프팅 패턴은 각 실행 레인이 자신의 각각의 스텐실 내의 데이터에 대해 동작하게 한다(즉, 각 실행 레인이 자체 스텐실 정보를 처리하여 해당 스텐실에 대한 출력을 생성한다). 일 실시예에서, 시트들은 2차원 시프트 레지스터 어레이를 "채우(fill)"거나 2차원 시프트 레지스터 어레이에 로딩되는 입력 이미지 데이터의 표면 영역들이다.
아래에서 더 상세히 설명되는 바와 같이, 다양한 실시예에서, 실제로 임의의 사이클에서 시프트될 수 있는 2차원 레지스터 데이터의 다중 계층이 존재한다. 편의상, 본 설명의 대부분은 시프트될 수 있는 2 차원 레지스터 데이터의 하나 이상의 그러한 계층을 갖는 구조들을 지칭하기 위해 단순히 "2차원 시프트 레지스터"등의 용어를 사용할 것이다.
따라서, 도 2b에서 관찰되는 바와 같이, 시트 생성기는 라인 그룹(203)으로부터 초기 시트(204)를 파싱하여 이를 스텐실 프로세서로 제공한다(여기서, 데이터의 시트는 일반적으로 참조 번호(204)로 식별되는 5×5의 음영 영역에 해당한다). 도 2c 및 도 2d에 도시된 바와 같이, 스텐실 프로세서는 시트에 대해 좌측에서 우측 방식으로 중첩 스텐실(202)을 효과적으로 이동시킴으로써 입력 이미지 데이터 시트상에서 동작한다. 도 2d에 도시된 바와 같이, 시트 내의 데이터로부터 출력값이 계산될 수 있는 픽셀의 수(암화된 3×3 어레이 내의 9개)는 소진(exhausted)된다(다른 픽셀 위치들은 시트내에서 정보로부터 결정된 출력값을 가질 수 없다). 단순화를 위해 이미지의 경계 영역들은 무시되었다.
도 2e에서 볼 수 있는 바와 같이, 시트 발생기는 스텐실 프로세서가 동작을 계속하도록 다음 시트(205)를 제공한다. 스텐실들이 다음 시트상에서 동작하기 시작할 때 스텐실의 초기 위치는(도 2d에서 이전에 도시된 바와 같이) 첫 번째 시트상의 소진 지점에서 우측으로의 다음 단계 진행(progression)이다. 새로운 시트(205)로, 스텐실들은 스텐실 프로세서가 첫 번째 시트의 처리와 동일한 방식으로 새로운 시트상에서 동작함에 따라 오른쪽으로 계속 이동할 것이다.
출력 픽셀 위치를 둘러싸는 스텐실들의 경계 영역들 때문에 제1 시트(204)의 데이터와 제2 시트(205)의 데이터 사이에 약간의 중첩이 있음에 유의한다. 상기 중첩은 충텁 데이터를 두 번 재전송하는 시트 생성기에 의해 간단히 처리될 수 있다. 다른 구현예에서, 스텐실 프로세서로 다음 시트를 공급하기 위해, 시트 생성기는 새로운 데이터만을 스텐실 프로세서로 전송하도록 진행하고, 스텐실 프로세서는 이전 시트로부터 중첩 데이터를 재사용할 수 있다.
b. 스텐실 프로세서 설계 및 운영
도 3a는 스텐실 프로세서 유닛 아키텍처(300)의 실시예를 도시한다. 도 3a에서 관찰되는 바와 같이, 스텐실 프로세서는 데이터 계산 유닛(301), 스칼라 프로세서(302) 및 관련 메모리(303), 및 I/O 유닛(304)을 포함한다. 데이터 계산 유닛(301)은 실행 레인 어레이(305), 2차원 시프트 어레이 구조(306) 및 어레이의 특정 행들 또는 열들과 관련된 각각의 개별 랜덤 액세스 메모리들(307)을 포함한다.
I/O 유닛(304)은 시트 생성기로부터 수신된 데이터의 "입력" 시트들을 데이터 계산 유닛(301)으로 로딩하고, 스텐실 프로세서로부터 데이터의 "출력" 시트들을 시트 생성기에 저장하는 역할을 한다. 일 실시예에서, 시트 데이터를 데이터 계산 유닛(301)에 로딩하는 것은, 수신된 시트를 이미지 데이터의 행/열로 파싱하는 것 및 이미지 데이터의 행/열을 2차원 시프트 레지스터 구조(306) 또는 (아래에서 보다 상세히 기술된) 실행 레인 어레이의 행/열의 각각의 랜덤 액세스 메모리(307)로 로딩하는 것을 수반한다. 만약 시트가 메모리들(307)에 처음 로딩되면, 실행 레인 어레이(305) 내의 개별 실행 레인들은 적절할 때 랜덤 억세스 메모리들(307)로부터 시트 데이터를 2차원 시프트 레지스터 구조(306)에 로딩할 수 있다(예컨대, 시트 데이터에 대한 연산 바로 전의 로드 명령으로서). (시트 발생기로부터 또는 메모리들(307)로부터 직접적으로) 레지스터 구조(306)로 데이터 시트의 로딩이 완료되면, 실행 레인 어레이(305)의 실행 레인들은 데이터에 대해 동작하여, 최종적으로 직접 되돌려 보내는 시트로서 최종 데이터를 시트 생성기로 또는 랜덤 억세스 메모리들(307)에 "라이트 백(write back)한다. 만약 실행 레인들이 랜덤 억세스 메모리들(307)에 다시 기록(라이트 백)되면, I/O 유닛(304)은 랜덤 억세스 메모리들(307)로부터 데이터를 인출(fetch)하여 출력 시트를 형성하고, 형성된 출력 시트는 시트 생성기로 전달된다.
스칼라 프로세서(302)는 스칼라 메모리(303)로부터 스텐실 프로세서의 프로그램 코드의 명령들을 판독하여 해당 명령들을 실행 레인 어레이(305)의 실행 레인들로 발행하는 프로그램 컨트롤러(309)를 포함한다. 일 실시예에서, 단일 동일 명령은 데이터 계산 유닛(301)으로부터 단일 명령 다중 데이터(SIMD : single instruction multiple data))형 동작(behavior)을 수행하도록 어레이(305) 내의 모든 실행 레인들로 브로드캐스트된다. 일 실시예에서, 스칼라 메모리(303)로부터 판독되고 실행 레인 어레이(305)의 실행 레인들로 발행되는 명령들의 명령 포맷은 명령 당 하나 이상의 오피코드를 포함하는 VLIW(very-long-instruction-word) 타입 포맷을 포함한다. 추가 실시예에서, VLIW 포맷은 각 실행 레인의 ALU에 의해 수행되는 수학적 기능을 지시하는 ALU 오피코드(아래에 개시된 바와같이, 일 실시예에서, 하나 이상의 종래의 ALU 연산을 지정할 수 있는) 및 메모리 오피코드(특정 실행 레인 또는 실행 레인 세트에 대해 메모리 연산을 지시하는)를 포함한다.
용어 "실행 레인"은 명령(예컨대, 명령을 실행할 수 있는 논리 회로)을 실행할 수 있는 하나 이상의 실행 유닛의 세트를 지칭한다. 실행 레인은, 다양한 실시예에서, 그러나 단지 실행 유닛 이상의 프로세서-유사 기능을 더 많이 포함할 수 있다. 예를 들어, 하나 이상의 실행 유닛 외에도, 실행 레인은 수신된 명령을 디코딩하는 논리 회로, 또는 더 많은 다중 명령 다중 데이터(MIMD) 형 설계의 경우 명령을 인출(fetch) 및 디코드하는 논리 회로를 또한 포함할 수 있다. MIMD형 접근법과 관련하여, 비록 중앙 집중식 프로그램 제어 접근법이 본 명세서에 대부분 기술되었지만, 보다 분산된 접근법이 (예를 들어, 프로그램 코드 및 어레이(305)의 각 실행 레인 내의 프로그램 제어기를 포함하는) 다양한 대안적인 실시예들에서 구현될 수 있다.
실행 레인 어레이(305), 프로그램 제어기(309) 및 2차원 시프트 레지스터 구조(306)의 조합은 광범위한 프로그램 가능 기능들을 위한 폭넓게 적응/구성 가능한 하드웨어 플랫폼을 제공한다. 예를 들어, 애플리케이션 소프트웨어 개발자는 개별 실행 레인이 매우 다양한 기능을 수행 할 수 있고 임의의 출력 어레이 위치에 근접한 입력 이미지 데이터에 용이하게 액세스할 수 수 있다는 점에서 주어진 치수(예컨대, 스텐실 크기)뿐만 아니라 넓은 범위의 상이한 기능적 성능(capability)을 갖는 커널들을 프로그래밍 할 수 있다.
실행 레인 어레이(305)에 의해 동작되는 이미지 데이터에 대한 데이터 저장소로서 동작하는 것 이외에, 랜덤 액세스 메모리(307)는 또한 하나 이상의 룩-업 테이블을 유지할 수 있다. 다양한 실시예에서, 하나 이상의 스칼라 룩-업 테이블이 또한 스칼라 메모리(303) 내에 인스턴스화될 수 있다.
스칼라 룩-업은 동일한 룩-업 테이블로부터의 동일 데이터 값을 동일한 인덱스로부터 실행 레인 어레이(305) 내의 각 실행 레인으로 전달하는 것을 포함한다. 다양한 실시예에서, 전술한 VLIW 명령 포맷은 또한 스칼라 프로세서에 의해 수행된 룩-업 연산을 스칼라 룩-업 테이블로 향하게 하는 스칼라 오피코드를 포함하도록 확장된다. 오피코드와 함께 사용하도록 지정된 인덱스는 즉치 오퍼랜드(immediate operand)이거나 몇몇 다른 데이터 저장 위치로부터 인출될 수 있다. 그럼에도 불구하고, 일 실시예에서, 스칼라 메모리 내의 스칼라 룩-업 테이블로부터의 룩업은 본질적으로 동일한 클럭 사이클 동안 실행 레인 어레이(305) 내의 모든 실행 레인으로 동일한 데이터 값을 브로드캐스트하는 것을 포함한다. 룩-업 테이블의 사용 및 동작에 관한 추가 세부 사항은 아래에 제공된다.
도 3b는 전술한 VLIW 명령 워드 실시예(들)을 요약한 것이다. 도 3b에서 관찰되는 바와 같이, VLIW 명령 워드 포맷은 3개의 개별 명령 즉, 1) 스칼라 프로세서에 의해 실행되는 스칼라 명령(351), 2) 실행 레인 어레이 내의 각각의 ALU에 의해 SIMD 방식으로 브로드캐스트되고 실행되는 ALU 명령(352) 및 3) 부분적인 SIMD 방식으로 브로드캐스트되고 실행되는 메모리 명령(353)(예컨대, 실행 레인 어레이의 동일한 행을 따르는 실행 레인들이 동일한 랜덤 액세스 메모리를 공유하는 경우, 상이한 행들 각각으로부터 하나의 실행 레인이 실제로 명령을 실행한다(메모리 명령(353)의 포맷은 각 행으로부터 어느 실행 레인이 명령을 실행하는지를 식별하는 오퍼랜드를 포함할 수 있음)에 대한 필드들을 포함한다.
하나 이상의 즉치 오퍼랜드에 대한 필드(354)가 또한 포함된다. 명령들(351, 352, 353) 중 어떤 것이 명령 포멧에서 식별될 수 있는 어떤 즉치 오퍼랜드 정보를 사용한다. 명령들(351, 352, 353) 각각은 또한 그 자신의 각각의 입력 오퍼랜드 및 결과 정보(resultant information)(예를 들어, ALU 연산들을 위한 로컬 레지스터들 과 메모리 액세스 명령들을 위한 로컬 레지스터 및 메모리 어드레스)를 포함한다. 일 실시예에서, 스칼라 명령(351)은 실행 레인 어레이 내의 실행 레인들이 다른 두 명령(352, 353) 중 하나를 실행하기 전에 스칼라 프로세서에 의해 실행된다. 즉, VLIW 워드의 실행은 스칼라 명령(351)이 실행되는 제1 사이클을 포함하고, 다른 명령들(352, 353)에 대한 제2 사이클이 실행될 수 있다(다양한 실시예들에서 명령들(352 및 353)은 병렬로 실행될 수 있음).
일 실시예에서, 스칼라 프로세서(302)에 의해 실행되는 스칼라 명령들은 데이터 계산 유닛(301)의 메모리들 또는 2D 시프트 레지스터(306)로부터 시트들을 로드/저장하기 위해 시트 생성기(103)로 발행된 명령들을 포함한다. 여기서, 시트 생성기의 동작은 라인 버퍼 유닛(101)의 동작 또는 시트 생성기(103)가 스칼라 프로세서(302)에 의해 발행된 임의의 명령을 완료하는데 걸리는 사이클 수의 사전 실행 시간(pre-runtime) 이해를 방해하는 다른 변수들에 의존할 수 있다. 이와 같이, 일 실시예에서, 스칼라 명령(351)이 시트 생성기(103)로 명령을 발행하거나명령을 발행하게 하는 임의의 VLIW 워드는 또한 다른 두 명령 필드(352, 353)에 무 연산(NOOP:no-operation) 명령을 포함한다. 그 다음, 프로그램 코드는 시트 생성기가 데이터 계산 유닛으로/로부터 로드/저장을 완료할 때까지 명령 필드(352, 353)에 대한 NOOP 명령 루프를 입력한다. 여기서, 시트 생성기로 명령을 발행할 때, 스칼라 프로세서는 명령 완료시에 시트 생성기가 리셋하는 인터락(interlock) 레지스터의 비트를 설정할 수 있다. NOOP 루프 동안 스칼라 프로세서는 인터록 레지스터의 비트를 모니터링한다. 스칼라 프로세서가 상기 시트 생성기가 명령을 완료했음을 감지하면 정상(normal) 실행이 다시 시작된다.
도 4는 데이터 계산 유닛(401)의 실시예를 도시한다. 도 4에서 관찰되는 바와 같이, 데이터 계산 유닛(401)은 2차원 시프트 레지스터 어레이 구조(406)의 "위(above)"에 논리적으로 위치되는 실행 레인 어레이(405)를 포함한다. 상술한 바와 같이, 다양한 실시예들에서, 시트 생성기에 의해 제공된 이미지 데이터의 시트는 2차원 시프트 레지스터(406)로 로딩된다. 그런 다음, 실행 레인들은 레지스터 구조(406)로부터의 시트 데이터에 대해 연산한다.
실행 레인 어레이(405) 및 시프트 레지스터 구조(406)는 서로에 대해 상대적인 위치에 고정된다. 그러나, 시프트 레지스터 어레이(406) 내의 데이터는 전략적으로 조정된 방식으로 시프트되어, 실행 레인 어레이의 각 실행 레인이 데이터 내의 상이한 스텐실을 처리하게 한다. 이와같이, 각 실행 레인은 생성되는 출력 시트내의 상이한 픽셀에 대한 출력 이미지 값을 결정한다. 도 4의 아키텍처로부터, 실행 레인 어레이(405)가 수평으로 인접한 실행 레인들뿐만 아니라 수평으로 인접한 실행 레인들을 포함하므로 중첩 스텐실은 수직으로 배열될 뿐만 아니라 수평으로 배열되는 것이 분명해야 한다.
데이터 계산 유닛(401)의 일부 주목할만한 구조적 특징들은 실행 레인 어레이(405)보다 넓은 치수들을 갖는 시프트 레지스터 구조(406)를 포함한다. 즉, 실행 레인 어레이(405) 외부에 레지스터들(409)의 "할로(halo)"가 있다. 상기 할로(409)은 실행 레인 어레이의 양측에 존재하는 것으로 도시되어 있지만, 구현에 따라, 할로는 실행 레인 어레이(405)의 보다 적은(1개) 또는 그 이상(3 또는 4개)의 측면상에 존재할 수 있다. 할로(405)는 데이터가 실행 레인들(405)의 "아래"로 시프팅되고 있을 때 실행 레인 어레이(405)의 경계들 바깥으로 유출(spill)되는 데이터에 대해 "스필-오버(spill-over)" 공간을 제공하는 역할을 한다. 간단한 경우로서, 실행 레인 어레이(405)의 우측 에지를 중심으로 하는 5×5 스텐실은 스텐실의 가장 왼쪽 픽셀들이 처리될 때 우측으로 4개의 할로 레지스터 위치를 필요로 할 것이다. 도면의 용이함을 위해, 도 4는, 명목상의 실시예에서, 양측(우측, 하측)에 있는 레지스터가 수평 및 수직 연결을 모두 가질 때 수평 시프트 연결들만을 갖는 할로의 우측 레지스터들과 수직 시프트 연결들만을 갖는 할로의 하측 레지스터들을 도시한다.
추가의 스필-오버 공간(room)은 어레이의 각 행 및/또는 각 열 또는 그 일부들에 결합(couple)되는 랜덤 액세스 메모리(407)들에 의해 제공된다(예를 들어, 랜덤 액세스 메모리는 4개의 실행 레인 행 및 2개의 실행 레인 열에 걸쳐 있는 실행 레인 어레이의 "영역(region)"에 할당될 수 있다. 간략화를 위해, 나머지 애플리케이션은 주로 행 및/또는 열 기반 할당 방식(schemes)을 참조할 것이다. 여기서, 실행 레인의 커널 동작들이 2차원 시프트 레지스터 어레이(406)(일부 이미지 처리 루틴에 필요할 수 있는) 외부의 픽셀 값들을 처리하도록 요구하는 경우, 이미지 데이터의 평면은 예를 들어 할로 영역(409)으로부터 랜덤 억세스 메모리(407)로 더 스필-오버할 수 있다. 예를 들어, 하드웨어가 실행 레인 어레이의 우측 에지에 있는 실행 레인 우측에 4개의 저장 요소만 있는 할로 영역을 포함하는 6×6 스텐실을 생각해 보자. 이 경우, 데이터는 스텐실을 완전히 처리하기 위해 할로 영역(409)의 우측 에지에서 오른쪽으로 더 멀리 시프트되어야 한다. 할로 영역(409) 외부로 시프트된 데이터는 랜덤 액세스 메모리(407)로 스필-오버될 것이다. 랜덤 액세스 메모리들(407) 및 도 3의 스텐실 프로세서의 다른 애플리케이션들이 아래에 더 제공된다.
도 5a 내지 도 5k는 이미지 데이터가 상술한 바와 같이 실행 레인 어레이 "아래"의 2차원 시프트 레지스터 어레이 내에서 시프트되는 방식의 실제 예를 나타낸다. 도 5a에서 관찰되는 바와 같이, 2차원 시프트 어레이의 데이터 컨텐츠는 제1 어레이(507)에 도시되고, 실행 레인 어레이는 프레임(505)으로 도시된다. 또한, 실행 레인 어레이 내의 2개의 이웃 실행 레인(510)이 간략하게 도시되어 있다. 이러한 단순 묘사(510)에서, 각 실행 레인은 시프트 레지스터로부터 데이터를 수용하거나, ALU 출력으로부터 데이터를 수용하거나(예컨대, 사이클들을 통해 누산기로서 동작하는) 또는 출력 데이터를 출력 목적지에 기록할 수 있는 레지스터(R1)를 포함한다.
각 실행 레인은, 로컬 레지스터(R2)에서, 2차원 시프트 어레이의 그 "아래" 컨텐츠를 또한 이용할 수 있다. 따라서, R1은 실행 레인의 물리 레지스터이고, R2는 2차원 시프트 레지스터 어레이의 물리 레지스터이다. 실행 레인은 R1 및/또는 R2가 제공하는 오퍼랜드들에서 동작할 수 있는 ALU를 포함한다. 아래에서 더 상세히 설명되는 바와 같이, 일 실시예에서, 시프트 레지스터는 실제로 어레이 위치 당 다수의("깊이"의) 저장/레지스터 요소들로 구현되지만, 시프팅 활동은 저장 요소들의 하나의 평면으로 제한된다(예를 들어, 저장 요소들의 하나의 평면만 사이클 당 시프트될 수 있음). 도 5a 내지 도 5k는 각각의 실행 레인으로부터 결과(X)를 저장하는데 사용되는 이들 디퍼(deeper) 레지스터 위치들 중 하나를 나타낸다. 설명의 용이함을 위해, 디퍼 결과 레지스터는 그의 상대 레지스터(R2) 아래에 있지 않고 나란히 그려진다.
도 5a 내지 도 5k는 중심 위치가 실행 레인 어레이(505) 내에 도시된 한 쌍의 실행 레인 위치(511)와 정렬되는 2개의 스텐실의 계산에 중점을 두고 있다. 예시의 용이함을 위해, 한 쌍의 실행 레인(510)은 사실상 다음의 예에 따라 그들이 수직 이웃일 때 수평 이웃으로서 도시된다.
도 5a에서 처음에 관찰된 바와 같이, 실행 레인(511)은 중앙 스텐실 위치에 중심이 맞춰진다. 도 5b는 두 실행 레인(511)에 의해 실행되는 오브젝트 코드를 도시한다. 도 5b에서 관찰되는 바와 같이, 두 실행 레인(511)의 프로그램 코드는 시프트 레지스터 어레이(507) 내의 데이터가 한 위치 아래로 시프트되고 한 위치 우측으로 시프트되게 한다. 이는 두 실행 레인(511)을 그들 각각의 스텐실의 상부 좌측 모서리로 정렬시킨다. 그런 다음 프로그램 코드는 그들 각각의 위치들에 있는(R2에 있는) 데이터가 R1으로 로딩되게 한다.
도 5c에서 관찰된 바와 같이, 프로그램 코드는 다음으로 실행 레인 쌍(511)이 시프트 레지스터 어레이(507) 내의 데이터를 좌측으로 1 유닛 시프트시켜 각 실행 레인의 각각의 위치의 우측에 있는 값이 각각의 실행 레인 위치로 시프트되게 한다. 그런 다음 R1의 값(이전 값)은 실행 레인 위치(R2에 있는)로 시프트된 새로운 값으로 가산된다. 그 결과는 R1에 기록된다. 도 5d에서 관찰된 바와 같이, 도 5c에 대해 전술한 것과 동일한 프로세스가 반복되어 상기 결과(R1)가 상부(upper) 실행 레인의 A+B+C 값을 포함하고 하부(lower) 실행 레인의 F+G+H 값을 포함하도록 한다. 이 시점에서 두 실행 레인(511)은 그들의 각각의 스텐실의 상부 행을 처리한다. 실행 레인 어레이(505)의 좌측에 있는 할로 영역(좌측에 하나가 있는 경우)에 스필-오버를 기록하거나 할로 영역이 실행 레인 어레이(505)의 좌측에 존재하지 않으면 랜덤 액세스 메모리에 스필-오버를 기록한다.
도 5e에서 관찰된 바와 같이, 프로그램 코드는 다음으로 시프트 레지스터 어레이 내의 데이터를 1 유닛 위로 시프트시켜 두 실행 레인(511)이 각각의 스텐실의 중간 행의 우측 에지와 정렬되게 한다. 두 실행 레인(511)의 레지스터(R1)는 현재 스텐실의 상측(top) 행과 중간 행의 최우측(rightmost) 값의 합산을 포함한다. 도 5f 및 5g는 두 실행 레인의 스텐실의 중간 행을 가로질러 왼쪽으로 움직이는 계속된 진행(continued progress)을 보여준다. 누적 가산은 도 5g의 처리의 끝에서 두 실행 레인(511)이 각각의 스텐실의 상측 행과 중간 행의 값들의 합산을 포함하도록 계속된다.
도 5h는 각각의 실행 레인을 대응하는 스텐실의 최하위 행과 정렬시키는 다른 시프트를 도시한다. 도 5i 및 도 5j는 두 실행 레인의 스텐실들의 과정을 통해 프로세싱을 완료하기 위한 계속된 시프팅을 나타낸다. 도 5k는 각 실행 레인을 데이터 어레이내의 정확한 위치에 정렬시키고 그에 대한 결과를 기록하기 위한 추가 시프팅을 도시한다.
도 5a 내지도 5k의 예에서, 시프트 동작들을 위한 오브젝트 코드는 (X, Y) 좌표들로 표현된 상기 시프트의 방향 및 크기를 식별하는 명령 포맷을 포함할 수 있다. 예를 들어, 한 위치(location) 씩 시프트 업하기 위한 오브젝트 코드는 SHIFT 0, +1과 같은 오브젝트 코드로 표현될 수 있다. 다른 예로서, 한 위치씩 우측으로의 시프트는 SHIFT +1, 0과 같은 오브젝트 코드로 표현될 수 있다. 다양한 실시예에서, 보다 큰 크기의 시프트들이 오브젝트 코드(예컨대, SHIFT 0, + 2)로 지정될 수도 있다. 여기서, 2D 시프트 레지스터 하드웨어가 사이클 당 한 위치씩의 시프트만을 지원하는 경우, 명령은 머신에 의해 다수의 사이클 실행을 요구하도록 해석될 수 있거나 2D 시프트 레지스터 하드웨어가 사이클 당 한 위치 이상씩의 시프트들을 지원하도록 설계될 수 있다. 후술하는 실시예는 이하에서 더 상세히 설명된다.
도 6a는 어레이 실행 레인 및 시프트 레지스터 구조에 대한 단위 셀의 다른, 보다 상세한 도면을 도시한다(할로 영역내의 레지스터들은 대응하는 실행 레인을 포함하지 않음). 상기 실행 레인 어레이의 각 위치와 관련된 실행 레인 및 레지스터 공간은, 일 실시예에서, 실행 레인 어레이의 각각의 노드에서 도 6a에서 관찰된 회로를 인스턴스화함으로써 구현된다. 도 6a에 도시된 바와 같이, 단위 셀은 4개의 레지스터(R2 내지 R5)로 구성된 레지스터 파일(602)에 연결된 실행 레인(601)을 포함한다. 임의의 사이클 동안, 실행 레인(601)은 임의의 레지스터(R1 내지 R5)로부터 판독하거나 임의의 레지스터(R1 내지 R5)에 기록할 수 있다. 두개의 입력 오퍼랜드가 필요한 명령들의 경우, 실행 레인은 R1 내지 R5중 하나로부터 두 오퍼랜드를 검색할 수 있다.
일 실시예에서, 2차원 시프트 레지스터 구조는 단일 사이클 동안, 레지스터들(R2 내지 R4) 중 어느 하나(단지)의 컨텐츠가 출력 멀티플렉서(603)를 통해 이웃 레지스터 파일 중 하나로 시프트 "아웃(out)"되도록 허용하고, 그 이웃들이 입력 멀티플렉서들(604)를 통해 이웃들간의 시프트가 동일한 방향(예컨대, 모든 실행 레인들이 좌측으로 시프트되고, 모든 실행 레인들이 우측으로 시프트되는 등)에 있는경우 레지스터들(R2 내지 R4) 중 하나(단지) 중 어느 하나의 컨텐츠를 대응하는 것으로부터 시프트 "인(in)"된 컨텐츠로 대체함으로써 구현된다. 동일한 레지스터가 그의 컨텐츠를 시프트 아웃하고 동일한 사이클에서 시프트 인되는 컨텐츠로 대체되는 것이 일반적이더라도, 멀티플렉서 배열(603, 604)은 동일한 사이클 동안 동일한 레지스터 파일 내에 상이한 시프트 소스 및 시프트 타겟 레지스터들을 허용한다.
도 6a에 도시된 바와 같이, 시프트 시퀀스 동안 실행 레인은 그의 레지스터 파일(602)로부터의 컨텐츠를 좌측, 우측, 상측 및 하측 이웃들 각각으로 시프트시킬 것이다. 동일한 시프트 시퀀스와 공조하여, 실행 레인은 그의 좌측, 우측, 상측 및 하측 이웃들 중 특정 하나로부터의 컨텐츠를 그의 레지스터 파일로 또한 시프트시킬 것이다. 다시, 시프트 아웃 타겟 및 시프트 인 소스는 모든 실행 레인에 대해 동일 시프트 방향과 일치해야 한다(예컨대, 시프트 아웃이 우측 이웃에 대한 것이면, 시프트 인은 좌측 이웃으로부터 있어야 함).
일 실시예에서, 단지 하나의 레지스터의 컨텐츠가 사이클 당 실행 레인 당 시프트되도록 허용되더라도, 다른 실시예들은 하나 이상의 레지스터의 컨텐츠가 시프트 인/아웃되도록 허용할 수 있다. 예를 들어, 도 6a에서 관찰된 멀티플렉서 회로(603, 604)의 제2 인스턴스가 도 6a의 설계에 통합되는 경우, 동일한 사이클 동안 2개의 레지스터의 컨텐츠가 시프트 아웃/인될 수 있다. 물론, 단지 하나의 레지스터의 컨텐츠가 사이클 당 시프프되도록 허용된 실시예에서, 수학 연산들 간의 시프트들에 대해 더 많은 클럭 사이클들을 사용(consuming)함으로써 다수의 레지스터들로부터의 시프트가 수학 연산들간에 일어날 수 있다(예를 들어, 두 레지스터의 컨텐츠는 수학 연산간에 두개의 시프트 연산을 사용하여 수학 연산 사이에서 시프트될 수 있음).
실행 레인의 레지스터 파일들의 모든 컨텐츠보다 적은 컨텐츠가 시프트 시퀀스 동안 시프트 아웃되면, 각 실행 레인의 시프트 아웃되지 않은 레지스터들의 컨텐츠는 그대로 유지된다(시프트하지 않음). 이와 같이, 시프트-인 컨텐츠로 대체되지 않는 비-시프트된 컨텐츠는 시프팅 사이클 전체에서 실행 레인에 국부적으로 유지된다. 각 실행 레인에서 관찰되는 메모리 유닛("M")은 실행 레인 어레이 내의 실행 레인의 행 및/또는 열과 관련된 랜덤 액세스 메모리 공간으로부터/로 데이터를 로드/저장하는데 사용된다. 여기서, M 유닛은 실행 레인의 자체 레지스터 공간으로부터/로 로드/저장할 수 없는 데이터를 로드/저장하는데 종종 사용된다는 점에서 표준 M 유닛의 역할을 한다. 다양한 실시예에서, M 유닛의 주요 동작은 로컬 레지스터로부터의 데이터를 메모리에 기록하고, 메모리로부터 데이터를 판독하여 이를 로컬 레지스터에 기록하는 것이다.
하드웨어 실행 레인(601)의 ALU 유닛에 의해 지원되는 ISA 오피코드들과 관련하여, 다양한 실시예에서, 하드웨어 ALU에 의해 지원되는 수학적 오피코드는 가상 실행 레인(예컨대, ADD, SUB, MOV, MUL, MAD, ABS, DIV, SHL, SHR, MIN/MAX, SEL, AND, OR, XOR, NOT)에 의해 지원되는 수학적 오피코드들과 통합되어 있다(예컨대, 실질적으로 동일함). 위에서 설명한 바와 같이, 메모리 액세스 명령들은 실행 레인(601)에 의해 실행되어, 그들의 관련 랜덤 액세스 메모리로부터/로 데이터를 인출/저장한다. 또한 하드웨어 실행 레인(601)은 2차원 시프트 레지스터 구조 내의 데이터를 시프트하기 위한 시프트 동작 명령(우측, 좌측, 상측, 하측)을 지원한다. 전술한 바와 같이, 프로그램 제어 명령들은 주로 스텐실 프로세서의 스칼라 프로세서에 의해 실행된다.
c. 이미지 프로세서상의 컨볼루션 신경망(CNN) 구현
도 7은 3차원(3D) 컨볼루션의 그래픽 표현을 도시한다. 당해 기술 분야에서 공지된 바와 같이, 3D 컨볼루션은 예를 들어 이미지 프로세싱 애플리케이션, 머신 비젼 애플리케이션, 객체 인식 애플리케이션 및/또는 기계 학습 애플리케이션을 위한 컨볼루션 신경망(CNN)를 구현하는데 사용될 수 있다. 도 7에서 관찰된 바와 같이, 3차원 컨볼루션은 이미지 데이터(701)의 3차원 블록 및 계수들(702)의 3차원 블록(702)을 "컨벌루션(convolves)"한다. 여기서, 계수들(702)의 3차원 블록(702)은 결과 표면 영역(703)을 생성하기 위해 이미지 데이터(701) 내의 동일 크기의 블록들에 대해 컨볼루션된다.
실제로, 이미지 데이터(701) 및 계수 데이터(702)는 정보의 3차원 행렬로서 구현된다. 즉, 이미지 데이터(701)는 픽셀 데이터의 3차원 행렬로 구현될 수 있고, 계수 데이터(702)는 계수 값들의 3차원 행렬로 구현될 수 있다. 3D 컨볼루션을 수행하기 위해, (더 작은 부분(smaller portion)(705)와 같은) 계수들과 동일한 치수를 갖는 이미지 데이터(701)의 더 작은 3차원 부분의 화소들이 계수들(702)의 3차원 행렬내의 동일 위치의 계수들과 각각 승산되는 3차원 내적(dot product)이 계산된다.
그런 다음 개별 곱셈들 각각으로부터의 부분 적을을 더해져 상기 내적의 결과에 대응하는 단일 값(스칼라)이 생성된다. 스칼라 결과는 컨볼루션된 이미지 데이터(701) 내의 더 작은 영역의 위치에 대응하는 위치에서 최종 어레이(703)에 위치된다. 예를 들어, 계수들(702)를 갖는 더 작은 부분(705)의 컨볼루션은 결과 표면(703) 내의 위치(704)에 위치한 스칼라를 생성한다. 유사하게, 계수들(702)를 갖는 더 작은 부분(707)(도면의 용이함을 위해 상측 표면만이 가시적인)의 컨볼루션은 결과 영역(703) 내의 위치(706)에 위치되는 스칼라 값을 생성한다.
이와 같이, 상이한 스칼라 값은 계수들(702)에 의해 곱해지는 이미지 데이터의 각각의 상이한 더 작은 부분에 대해 생성될 것이고, 상이한 스칼라들 각각은 결과 표면 영역(703) 내의 각각의 위치를 갖는다. 3D 컨볼루션 구현의 다양한 실시예에 대한 세부 사항은 이하에서 더 상세하게 설명된다.
CNN 계층은 전형적으로 이미지 데이터의 블록 당 다수의 3D 컨볼루션을 포함한다. 특히, CNN 계층은 전형적으로 이미지 데이터의 단일 블록과 컨벌루션된 다수의 계수 블록을 포함한다. 도 8은 그러한 CNN 계층의 예를 도시한다. 여기서, 동일한 이미지 데이터 블록(801)은 N개의 결과 표면 영역(803_1 내지 803_N)을 생성하기 위해 다수의 계수 블록(802_1 내지 802_N)과 컨벌루션된다. 따라서, 전체 결과(803)는 N개의 결과 평면을 갖는 3차원 블록(803)으로 보여질 수 있다. 다양한 프로세싱 애플리케이션에서, 3차원 결과 블록(803)은 다음의 CNN 계산을 위한 입력 이미지 블록으로서 사용된다. 도 8의 프로세싱은 단일 CNN 계층의 프로세싱에 대응한다. 완전한 CNN은 이러한 다수의 CNN 계층의 실행으로부터 계산될 수 있다.
도 9a 및 도 9b는 3D 컨볼루션의 실시예를 도시한다. 도 9a를 참조하면, 이미지 데이터(901)의 블록(도 8의 이미지 데이터(801)의 블록에 대응함)은 이미지 데이터의 다수의 평면으로 구성되어 있는 것으로 보여질 수 있다. 즉, 이미지 데이터 블록(901)은 z축을 따라 제1 깊이 위치에 제1 평면(901_1), z축을 따라 제2 깊이 위치에 제2 평면(901_2),...,및 z축을 따라 M 번째 깊이 위치에 M 번째 평면(901_M)으로 구성된 것으로 보여질 수 있다. 실제로, z축을 따르는 각 레벨 또는 깊이는 이미지 데이터의 상이한 "채널"에 대응할 수 있다. 예를 들어, M=3이면, 제1 평면 레벨(901_1)은 적색(R) 데이터에 대응하고, 제2 평면 레벨(901_2)은 녹색(G) 데이터에 대응하며, 제3 평면 레벨(901_3)은 청색(B) 데이터에 대응할 수 있다.
마찬가지로, (도 8의 계수들의 제1 블록(802_1)에 대응하는) 계수 블록(902_1)은 M "깊이"의 z축 위치들을 따라 계수 데이터가 M개의 평면들로 구성되는 것으로 보여질 수 있다. 3D 컨볼루션은 M개의 2차원(2D) 컨벌루션의 합산으로 계산된다. 여기서, 동일한 깊이 레벨에 상주하는 이미지 데이터 및 계수는 2D 심벌 연산에서 컨벌루션되어 해당 깊이 레벨에 대한 중간 결과 평면을 생성한다.
예를 들어, 이미지 데이터 평면(901_1)과 계수 평면(902_1_1)의 제1 2D 컨볼루션을 수행하여 제1 중간 결과 평면(P1_1)을 생성하고, 이미지 데이터 평면(901_2)과 계수 평면(902_1_2)의 제2 2D 컨볼루션을 수행하여 제2 중간 결과 평면(P1_2)을 생성하고,..., 및 이미지 데이터 평면(901_M)과 계수 평면(902_1_M)의 M번째 2D 컨볼루션을 수행하여 M번째 중간 결과 평면(P1_M)을 생성한다. 그런 다음 중간 평면들(P1_1 내지 P1_M)이 정렬된 방식으로(중간 평면 어레이들의 동일한 위치에 있는 스칼라 값들이 가산됨) 가산되어(910) 최종 어레이(903_1)가 생성된다. 상기 결과 어레이(903_1)는 도 8의 결과 어레이(803_1)에 대응한다.
도 9b는 이미지 및 계수 데이터의 각 z축 깊이 레벨에서 수행될 수 있는 2D 컨벌루션의 예시적인 실시예를 도시한다. 도 9b는 동일 평면 내의 이미지 데이터의더 작은 부분에 대응하는 데이터(A 내지 L)의 12개의 인접 픽셀을 도시한다. 이미지 데이터와 동일한 평면 레벨에 존재하는 계수의 평면(a1 내지 a9)이 도시되어 있다. 계수 데이터가 스텐실 위치(950)와 정렬될 때 수행되는 연산(940)은 평면 레벨에 대한 중간 평면에서 단일 스칼라 결과(S_P1)를 생성한다. 대조적으로, 계수 데이터가 스텐실 위치(951)와 정렬될 때 수행되는 연산(941)은 평면 레벨에 대한 중간 평면에서 단일 스칼라 결과(S_P2)를 생성한다.
연산들(940 및 941) 각각은 대규모 곱셈-가산 연산(9개의 곱셈과 8개의 가산이 수행됨)으로서 특정될 수 있음에 유의한다. 스텐실 위치(950, 951)가 서로 인접하기 때문에, 스칼라 결과(S_P1 및 S_P2)는 결과 중간 평면 내에 서로 인접하여 위치할 것이다. 여기서 스텐실 위치는 이미지 데이터의 전체 평면의 표면 영역을 "슬라이드"하고 각각의 고유한 스텐실 위치에 의해 정의되는 대응하는 "곱셈-가산" 연산들은 중간 평면에서 고유한 결과 값을 생성한다. 중간 평면 내의 서로에 대한 결과 값들의 위치는 이들을 생성한 스텐실의 상대 위치에 의해 정의된다.
다시 도 9a를 참조하면, M개의 중간 평면(P1_1 내지 P1_M)은 910에 대해 합산되어 결과 평면(903_1)을 생성한다. 도 9a의 계산들은 모든 계수 세트가 계산될 때까지 상이한 계수 세트로 매회 N 회 반복된다. 즉, 도 8과 도 9a 및 도 9b로부터 얻을 수 있는 바와 같이, 도 9a 및 도 9b의 연산들은 각각의 계수 세트(802_1 내지 802_N)에 대해 N 회 수행되어 결과 평면들(803_1 내지 803_N)을 생성한다.
도 10a 내지 10j는 본 명세서의 이전 섹션들에서 전술한 구조적 특징을 갖는 이미지 프로세서상의 CNN 계층의 계산에 관한 것이다. 여기서 독자(reader)는 도 10a 내지 도 10j뿐만 아니라 도 4를 참조한다. 전술한 섹션들에서 설명된 바와 같이, 스텐실 프로세서는 2차원 실행 레인 어레이(405) 및 대응하는 2차원 시프트 레지스터 어레이(406)를 가질 수 있다. 다음의 논의로부터 명백해지는 바와 같이, 10a 내지 10j의 방법론은 스텐실 프로세서의 2차원 프로세싱 특성을 이용함과 동시에 이미지 데이터가 스텐실 프로세서로 출입하는 횟수를 최소화하는 것을 목표로 한다.
도 10a는 이미지 데이터(1001_1)의 제1 평면의 하나 이상의 시트가 스텐실 프로세서의 로컬 메모리(407)에 로드되는 초기 설정 단계(phase)를 도시한다. 예시적인 용이함을 위해, 도 10a는 이미지 평면의 모든 시트가 스텐실 프로세서의 RAM으로 로드되지만, 동작시에, 시트 생성기가 전체 이미지 평면(1001_1)을 수신하여, 이미지 평면을 시트들로 파싱하고, 시트들을 적절하게 스텐실 프로세서의 RAM(407)으로 공급(feed)하는 보다 단편적인 접근이 시도될 수 있다(예컨대, 다음 시트는 이전 시트에서 처리가 완료될 때 또는 완료되기 전에 RAM으로 로드됨). 또한, 계수들(1002_1 내지 1002_N)의 모든 세트가 아닌 경우 적어도 계수들의 제1 세트(1002_1)가 스텐실 프로세서 RAM(407)으로 로딩된다. 여기서, 비교의 포인트로서, 도 10의 이미지 데이터 평면(1001_1)은 도 9의 이미지 데이터 평면(901_1)에 대응하고, 도 10의 계수 세트(1002_1)는 도 9의 계수 세트(902_1)에 대응한다. 추가 비교 포인트로서, 도 10의 계수 세트(1002_1 내지 1002_N)는 도 8의 계수 세트(802_1 내지 802_N)에 대응한다.
이미지 데이터(1001_1)의 제1 평면 및 계수들(1002_1)의 제1 세트가 스텐실 프로세서 RAM(407)에 로딩됨에 따라, 시스템은 도 9b와 관련하여 전술한 바와 같이 2D 컨벌루션을 수행하도록 준비된다. 도 10b는 이미지 데이터(1001_1)가 계수 데이터(1002_1_1)(도 9a의 계수 데이터(902_1_1)에 대응함)와 컨볼루션되는 컨볼루션을 도시한다. 2D 컨볼루션은 스텐실 프로세서 RAM으로부터 이미지 데이터의 하나 이상의 시트를 이미지 프로세서의 2차원 레지스터 구조로 로딩하는 것을 포함한다. 그런 다음 2D 컨볼루션 자체가 실행되어 중간 평면(P1_1)이 생성된다. 2D 컨볼루션이 실제로 수행될 수 있는 방법에 대한 보다 철저한 논의가 도 11a 내지 도 11f와 관련하여 아래에서 더 제공된다.
제1 이미지 평면(1001_1)이 계수들의 제1 평면(1002_1)과 컨벌루션된 상태에서, 머신은 다음 연산 시퀀스를 시작할 준비가 된다. 여기서, 도 9a에 도시된 일련의 연산들이 순서대로 수행되면, 스텐실 프로세서 RAM 밖으로의 이미지 평면(901_1)의 스위칭 및 스텐실 프로세서 RAM으로의 이미지 평면(901_2)의 스위칭이 필요할 수 있다. 계속해서, 도 8 및 도 9a를 참조하면, 이미지 평면(901_1)은 임의의/모든 계수 세트(802_2 내지 802_N)로 수행되는 2D 컨볼루션들을 위해 스텐실 프로세서 RAM으로 다시 스위칭될 필요가 있음에 유의한다. 따라서, 잠재적으로, 이미지 평면(901_1)은 스텐실 프로세서 RAM의 안팎으로(in and out) N회 스위칭될 수 있다. 스텐실 프로세서의 안팎으로 이미지 데이터의 동일한 평면의 전후 스위칭을 제거하기 위해, 도 9a에 의해 제안된 엄격한 프로세싱 순서를 따르기 보다는, 그 대신 일단 이미지 데이터의 평면이 스텐실 프로세서 RAM으로 로딩되면 CNN 계층의 모든 계수 세트를 처리하는데 사용될 때까지 그대로 남아 있다.
따라서, 도 10c에 도시된 바와 같이, 프로세스의 다음 시퀀스는 동일한 이미지 평면(1001_1)을 다음 계수 세트의 제1 평면과 컨벌루션하는 것이다. 이와 같이,도 10c는 이미지 평면(1001_1) 및 계수 평면(1002_2_1)(제2 계수 세트 내의 제1 평면)으로 수행되는 2D 컨벌루션을 도시한다. 그 결과는 제2 계수들의 세트(P2_1)에 대한 제1 중간 평면이다. 프로세싱 시퀀스는 계수들 각각의 제1 평면과 상기 동일한, 초기의 이미지 평면(1001_1)을 계속 컨볼루션한다. 도 10d는 초기 이미지 평면(1001_1)을 포함하는 최종 2D 컨볼루션 시퀀스를 나타낸다. 여기서, 2D 컨볼루션은 N번째 계수 세트(PN_1)에 대한 제1 중간 결과 평면을 생성하는 N번째 계수 세트(1002_N)의 상측 평면(1002_N_1)으로 수행된다.
도 10d의 연산이 완료된 후에, 초기 이미지 평면(1001_1)은 소진되어 스텐실 프로세서 RAM 외부로 스위칭될 수 있다(또는 예를 들어 심지어 폐기된다). 이와 같이, 도 9a를 간단히 참조하면, 다음 레벨의 이미지 데이터(901_2)가 이제 스텐실 프로세서 RAM으로 스위칭될 수 있다. 도 10e는 스텐실 프로세서 RAM 밖으로 스위칭된 이전의 이미지 데이터 평면(1001_1)(스텐실 프로세서 RAM에 더 이상 존재하지 않음을 나타내기 위해 빗금 선으로 그려진 윤곽선)과 상기 스텐실 프로세서 RAM으로 스위칭된 다음 이미지 평면(1001_2)(스텐실 프로세서 RAM내에 현재 상주함을 나타내기 위해 실선으로 그려진 윤곽선)을 갖는 새로운 시스템 상태를 도시한다.
도 10f는 제1 계수 세트(1002_1)의 제2 레벨의 계수들(1002_1_2)을 갖는 새로운 제2 이미지 평면(1001_2)의 2D 컨벌루션을 도시한다. 컨볼루션의 결과는 제1 계수 세트(1002_1)에 대한 제2 중간 평면(P1_2)이다. 도 10g는 제2 계수 세트(1002_2)에 대한 제2 중간 결과 계층(P2_2)를 생성하는 계수 세트(1002_2)의 제2 레벨의 계수들(1002_2_2)을 갖는 이미지 평면(1001_2)의 다음 컨볼루션을 도시한다. 도 10h는 N번째 계수 세트(1002_2)에 대한 제2 중간 결과 계층(PN_2)을 생성하는 계수 세트(1002_N)의 제2 레벨의 계수들(1002_N_2)를 갖는 이미지 평면(1001_2)에 대한 최종 컨볼루션을 도시한다.
제2 이미지 평면(1001_2)이 소진된 후, 제3 이미지 평면이 로딩되어 제1 및 제2 이미지 평면에 대해 전술한 바와 같이 처리된다. 그런 다음 각 이미지 평면은 연속적으로 유사하게 처리된다. 도 10i는 최종 중간 결과 평면(PN_M)을 생성하는 최종 계수 세트(1002_N)에 대한 최하위(bottom) 레벨의 계수들(1002_N_M)을 갖는 최종 이미지 평면(1001_M)에 대한 최종 2D 컨벌루션을 도시한다. 이 시점에서 모든 계수 세트에 대한 모든 중간 평면들이 계산되었다. 도 10j는 각각의 계수 세트에 대한 최종 결과 평면을 생성하기 위해 특정 계수 세트에 대한 모든 중간 평면의 합산을 나타내며, 이는 차례로 CNN 계층의 결과에 대응한다. 즉, 도 9a의 합산(910)은 N개의 계수 세트들 각각에 대해 수행된다. 따라서, 결과 평면들(1003_1 내지 1003_N) 각각은 도 8의 결과 평면들(803_1 내지 803_N)에 대응한다.
일 실시예에서, 머신은 각 중간 평면을 개별적으로 저장하여 이들을 합산하기 보다는 "중간 평면 합 누적(running intermediate plane sum)"를 유지함으로써 10j의 덧셈을 수행한다. 예를 들어, 도 10a 및 10f를 참조하면, 중간 평면(P1_2)이생성된 직후 중간 평면(P1_2)은 중간 평면(P1_1)에 가산된다. 평면들((P1_1 및 P1_2)의 결과 합산은 예를 들어 스텐실 프로세서 유닛 내에 내부적으로 저장된다. 중간 평면(P1_3)(미도시)이 제1 계수 세트(또한 미도시) 내의 제3 평면(1002_1_3)을 갖는 제3 이미지 평면의 2D 컨볼루션의 결과로서 생성될 때, 상기 P1_1/P1_2 합산 결과가 후속적으로 호출(recall)되어 중간 평면(P1_3)에 가산된다. 그 결과는 다시 저장되고 중간 평면(P1_4) 생성 후 중간 평면(P1_4)에 가산하기 위해 호출될 것이다. 유사한 처리가 다른 계수 세트들의 중간 평면들에 적용된다. 누적 합 및 중간 평면들의 x, y 치수들이 2차원 시프트 레지스터 어레이의 치수들보다 큰 경우, 합산은 누적 합계 및 다음 중간 평면을 시트들로 파싱하여, 처리를 위해 해당 시트들을 예를 들어 시트 단위로(sheet by sheet basis) 2차원 시프트 레지스터 어레이에 로딩함으로써 수행될 수 있다.
도 11a 내지 11j는 3×3 스텐실 크기에 대한 2D 컨볼루션을 수행하는 실시예를 기술한다. 아래에서 더 자세히 설명하는 바와같이, 다른 스텐실 크기도 가능하다. 도 11a를 참조하면, 이미지 데이터(A 내지 R)가 2차원 시프트 레지스터에 로딩된다. 도 11a는 2개의 스텐실(1101, 1102) 상당의 이미지 데이터를 도시한다. 간결성을 위해, 도 11a 내지 11fj의 설명은 도 11a에 도시된 바와 같이 픽셀 위치들(H 및 K)에서 출력 결과들을 생성하는 스텐실(1101, 1102)에 대한 2D 컨볼루션에 중점을 맞출 것이다. 그러나, 각각의 픽셀 위치에 중심이 맞추어진 상이한 스텐실이 존재하며 도 11a 내지 도 11j와 관련하여 설명될 2D 컨벌루션 프로세스는 모든 그러한 픽셀 위치에 대해 컨볼루션 결과를 동시에 생성한다는 것을 인식하는 것이 중요하다.
도 11a를 참조하면, 2D 컨볼루션을 수행하기 위해, 계수값들(1103)이 각각의 이미지 데이터 스텐실내의 각각의 위치된 픽셀에 의해 승산될 필요가 있다. 즉, 픽셀값들(A 및 D)은 두 픽셀값(A 및 D)과 a1이 모두 좌상(top left) 스텐실 코너에 위치하기 때문에 계수(a1)가 곱해지고, 픽셀값들(C 및 F)은 두 픽셀값(C 및 F)과 계수가 모두 우상(top right) 스텐실 코너에 위치하기 때문에 계수(a3)가 곱해진다. 2D 컨볼루션 결과는 픽셀 값과 대응하는 계수의 9개 부분 적의 합산이다. 아래에 더욱 상세히 기술되는 바와 같이, 일 실시예에서, 부분 적의 합산은 9개 사이클에 걸쳐 발생한다.
다양한 실시예들에서 스텐실 프로세서는 모든 실행 레인들에 즉치 오퍼랜드를 포함하는 스칼라 명령들을 발행할 수 있음은 도 3b의 설명으로부터 알 수 있다. 일 실시예에서, 2D 컨볼루션은 계수가 즉치 오퍼랜드로서 명령 워드에 포함되는 스칼라 곱셈 가산 명령들의 체인을 발행함으로써 구현된다.
도 11b를 참조하면, 제1 사이클 동안, 즉치 오퍼랜드로서 계수(a5)를 갖는 스칼라 명령이 발행된다. 상기 명령을 실행할 때, 계수(a5)는 이미지 데이터 어레이내의 모든 픽셀 값과 곱해지고 그 결과는 그의 대응하는 실행 레인 내의 픽셀 값에 국부적인 레지스터 공간에 저장된다. 다시 말하면, 픽셀 위치(H 및 K)에 중심이 있는 스텐실(1101, 1102)의 쌍만을 참조하면, 계수(a5)는 H와 K로 곱해진다. 부분 적(H×a5)은 스텐실(1101)의 중심에 있는 픽셀 위치(1121)(현재 픽셀 값 H를 가짐)의 실행 레인 레지스터 공간에 국부적으로 저장된다. 상기 부분 적(K×a5)은 스텐실(1102)의 중심에 있는 픽셀 위치(1122)(현재 픽셀 값 K를 가짐)의 실행 레인 레지스터 공간에 국부적으로 저장된다. 여기서, 스텐실(1101, 1102) 주위의 경계 및 그들 내부의 픽셀 위치들은 전용 ALU 및 각 픽셀 위치에서의 로컬 레지스터 공간을 포함하는 하드웨어의 고정 영역들로 간주될 수 있다. 즉, 스텐실(1101 및 1102) 내의 각각의 픽셀은 각각 전용 ALU 실행 유닛 및 로컬 전용 레지스터 공간을 갖는 하드웨어 실행 레인으로서 보여질 수 있다.
도 11c를 참조하면, 제2 사이클 동안, 제1 시프트 명령이 실행되어 2차원 시프트 레지스터 어레이 내의 이미지 데이터를 1 유닛 우측으로 시프트시키고, 즉치 오퍼랜드로서 계수(a4)를 갖는 후속 스칼라 곱셈-가산 명령이 발행된다. 제2 명령을 실행할 때, 계수(a4)는 이미지 데이터 어레이 내의 모든 픽셀값과 곱해지고 그 결과는 대응하는 실행 레인 내의 픽셀값에 국부적인 레지스터 공간에 저장된다. 다시 말하면, 픽셀 위치(G 및 J)에서 중심이 위치된 한 쌍의 스텐실(1101, 1102)만을 참조하면, 계수(a4)는 G와 J로 곱해진다. 상기 부분 적(G×a4)은 스텐실(1101)의 중심에 있는 실행 레인 레지스터 공간(즉, 값(H×a5)를 포함하는 픽셀 위치(1121))에 국부적으로 저장된 값에 가산되고, 그 결과(S_H)는 동일한 레지스터 공간에 다시 쓰여진다. 상기 부분 적(J×a4)은 스텐실(1102)의 중심에 있는 실행 레인 레지스터 공간(즉, 현재 값(K×a5)를 갖는 픽셀 위치(1122))에 국부적으로 저장된 값에 가산되고 그 결과(S_K)는 동일한 레지스터 공간에 다시 쓰여진다.
도 11d를 참조하면, 제3 사이클 동안, 제1 시프트 명령이 실행되어 2차원 시프트 레지스터 어레이 내의 이미지 데이터를 1 유닛 아래로(down)로 시프트시키고, 즉치 오퍼랜드로서 계수(a1)를 갖는 후속 스칼라 곱셈-가산 명령이 발행된다. 제2 명령을 실행할 때, 계수(a1)는 이미지 데이터 어레이 내의 모든 픽셀값과 곱해지고 그 결과는 대응하는 실행 레인 내의 픽셀값에 국부적인 레지스터 공간에 저장된다. 다시 말하면, 픽셀 위치(A 및 D)에서 중심이 위치된 한 쌍의 스텐실(1101, 1102)만을 참조하면, 계수(a1)는 A와 D로 곱해진다. 상기 부분 적(A×a1)은 스텐실(1101)의 중심에 있는 실행 레인 레지스터 공간(도 11c의 값(S_H)를 포함하는)에 국부적으로 저장된 값에 가산되고, 그 결과(S_H)는 동일한 레지스터 공간에 다시 쓰여진다. 상기 부분 적(D×a1)은 스텐실(1101)의 중심에 있는 실행 레인 레지스터 공간(도 11c의 값(S_K)를 포함하는)에 국부적으로 저장된 값에 가산되고, 그 결과(S_K)는 동일한 레지스터 공간에 다시 쓰여진다.
또한, 도 11e 내지 도 11j는 계수가 아직 곱해지지 않은 스텐실들의 중심에 새로운 픽셀 값을 배치하는 대응하는 시프트를 각각 갖는 그러한 6개의 사이클을 더 도시한다. 도 11j의 마지막 사이클이 실행된 후, 2D 컨볼루션에 대한 결과는 각 스텐실의 중심에 있는 로컬 레지스터 공간(스텐실(1101)에 대한 값(S_H) 및 스텐실(1102)에 대한 값(S_K))에 상주한다.
전술한 설명은 전체 CNN 계층이 동일한 스텐실 프로세서상에서 실행되는 접근법에 관한 것이지만, 다른 접근법은 다수의 스텐실 프로세서에 걸쳐 CNN 계층 실행을 병렬화하려고 시도할 수 있다(도 8은 CNN 계층와 관련된 계산의 실시예를 도시하고 있다). 예를 들어, 도 8 및 도 12를 참조하면, N이 스텐실 프로세서들의 수보다 작은 경우, 각 스텐실 프로세서는 그 자신의 3D 컨볼루션을 할당받을 수 있다(즉, 각 스텐실 프로세서는 자신의 고유한 계수 세트로 3D 컨볼루션을 수행한다). 따라서, 각 스텐실 프로세서는 동일한 이미지 데이터를 수신하지만 이를 상이한 계수 세트로 컨벌루션한다. 이 경우, 도 9a에 의해 제안된 순서화는 각 스텐실 프로세서 에서 지켜질 수 있다(즉, 각각의 스텐실 프로세서가 단일 계수 세트에 대한 이미지 데이터의 각 평면을 컨볼루션한다). N이 스텐실 프로세서들의 수보다 크더라도, CNN 계층의 실행은, 예를 들어, 각 스텐실 프로세서가 둘 이상의 고유한 계수 세트를 처리함으로써 여전히 분산/병렬화될 수 있다.
도 13에 도시된 또 다른 병렬화 접근법에서, 입력 이미지 데이터의 상이한 평면들은 상이한 스텐실 프로세서들에 고유하게 할당된다. 각각의 스텐실 프로세서는, 예를 들어, 모든 계수 세트들에 대해 적절한 평면 레벨로 로딩된다. 예를 들어, 제1(최상위) 이미지 데이터 평면을 처리하도록 할당된 스텐실 프로세서 (1302_1)는 모든 N개의 계수 세트의 제1(최상위) 평면을 수신한다. 그런 다음 스텐실 프로세서는 도 10b~10d의 동작을 수행하기 위해 진행하고, 동시에 제2(차하위) 이미지 평면을 처리하도록 할당된 다른 스텐실 프로세서(1302_2)는 도 10f~10h의 컨볼루션을 수행한다. 이 접근법에서 동일한 계수 세트에 대한 중간 합계(sum) 평면은 다수의 스텐실 프로세서에 걸쳐 분산되며 이후 계수 세트에 대한 특정 결과 평면을 생성하기 위해 정렬된 합산에 대해 동일한 스텐실 프로세서로 이동해야 한다. 여기서, 상이한 스텐실 프로세서는 상이한 계수 세트들에 대해 상이한 결과 평면들을 동시에 계산할 수 있다. 이 접근법의 확장에서, 하나 이상의 이미지 데이터 평면이 임의의 특정 스텐실 프로세서에 할당될 수 있다(예를 들어, 이미지 데이터 평면의 수가 스텐실 프로세서의 수를 초과하는 경우).
도 14에 도시된 또 다른 접근법에서, 각 스텐실 프로세서는 결과 평면의 특정 영역에서만 동작하도록 할당될 수 있다. 예를 들어, 제1 스텐실 프로세서 (1402_1)는 이미지 평면 표면 영역의 제1 사분면에서 동작하고, 제2 스텐실 프로세서(1402_2)는 이미지 평면 표면 영역의 제2 사분면에서 동작하고, 제3 스텐실 프로세서(1402_3)는 이미지 평면 표면 영역의 제3 사분면에서 동작하며, 제4 스텐실 처리기(1402_4)는 이미지 평면 표면 영역의 제4 사분면에서 동작한다. 각 스텐실 프로세서는 전체 CNN 계층을 실행하지만 전체 이미지의 표면 영역의 1/4에 불과하다. 최종 결과 평면들은 관련 스텐실 프로세서들이 처리된 정확한 사분면에 서로 인접하게 적절한 결과 평면들을 "맞춤(fitting)"으로써 실현된다. 도 14는 이미지가 4개의 사분면으로 분해되는 일 유형의 실시예만을 도시한다. 다른 구성은 보다 적은 고유한 표면들(예컨대, 2개 반) 또는 보다 많은 고유한 표면 영역들(예컨대, 9개, 16개 등)을 가질 수 있다. 상이한 이미지 섹션들 사이에 중첩되는 입력들은 하나 이상의 스텐실 프로세서로 보내야 한다.
또 다른 구성에서, 각각 N개의 계수 세트를 갖는 하나 이상의 CNN 계층이 단일 스텐실 프로세서상에서 실행될 수 있다. 일 실시예에서, 단일 스텐실 프로세서상에서 다수의 CNN 계층을 실행하는 것은 다수의 CNN 계층들 사이에서 시간 다중화에 의해 수행될 수 있다. 도 15는 2개의 상이한 CNN 계층이 동일한 스텐실 프로세서 상에 다중화되는 단순한 예를 도시한다. 여기서, 입력 이미지 데이터(1501_1)의 제1 평면은 스텐실 프로세서 RAM에 로딩된다. 그 다음, 스텐실 프로세서는 제1 CNN 계층에 대한 계수 세트(1502_1 내지 1502_N) 각각에 대한 적절한 평면을 갖는 이미지 데이터(1501_1)의 2D 컨벌루션들을 수행하도록 진행한다. 그 결과 중간 평면들은 전술한 바와 같이 누적 합 누산기에서 합산된다.
제1 CNN 계층에 대한 최종 계수 세트(1502_N)가 컨벌루션되어 그의 중간 평면이 누산기에 가산된 후, 다음 CNN 계층이 처리된다. 즉, 이미지 데이터 평면(1501_1)은 스텐실 프로세서의 활성 컨텍스트 밖으로 스위칭되는 것이 아니라, 대신 제2 CNN 계층에 대한 계수 세트(1512_1 내지 1512_N)의 적절한 각각의 계층들과 함께 계속해서 사용된다. 제2 CNN 계층에 대한 중간 평면들은 제1 CNN 계층에 대한 누산기와는 별도의 누산기에 축적된다. 제2 계수 세트(1512_1 내지 1512_N)의 적절한 각각의 평면들이 처리된 후, 이미지 데이터에 대한 다음 이미지 평면은 스텐실 프로세서의 컨텍스트로 스위칭되고 프로세스는 반복되지만 두 계수 세트에 대해 상이한 각각의 평면으로 반복된다.
또 다른 접근법에서, 제1 CNN에 대한 출력은 제2 CNN에 대한 입력으로 직접공급(feed)한다. 예를 들어, 계수 세트(1502)에 대한 중간 평면들의 합산은 계수 세트(1512)를 갖는 스텐실 프로세서에 의해 실행될 다음의 후속 CNN에 대한 입력 이미지 평면을 생성한다.
또 다른 구성에서, (상이한 이미지들상의 CNN들이 이미지 프로세서에 의해 동시에 수행될 수 있도록) 상이한 스텐실 프로세서들에 상이하고 독립적인 이미지들이 할당될 수 있다.
전술한 설명에서 3×3 스텐실 크기가 강조되었지만, 일 실시예에서, 머신은 다수의 3D 스텐실(예컨대, 1×1×M, 3×3×M, 5×5×M 및 7×7×M)을 (예를 들어, 이미지 프로세서 및/또는 컴파일된 프로그램 코드의 구성 레지스터 공간을 통해) 지원하도록 설계된다.
전술한 곱셈 및 합산 연산은 부동 소수점 표기법으로 계산될 수 있지만, 다른 실시예에서는 고정 소수점 정수 표기법으로 계산될 수 있다. 더욱이, 고정 정수 표기법은 낮은 정밀도(예를 들어, 8 비트 또는 그 이하(예컨대, 5 비트)) 또는 더 높은 정밀도일 수 있다. 너 낮은 정밀도 고정 정수는 많은 애플리케이션에서 이미지 품질의 손실없이 더 많은 시간/에너지 효율을 제공한다.
다양한 실시예에서, 실행 가능 프로그램 코드는 사이클 당 2개의 MAD를 달성하기 위해 단일 ALU 레인상에서 2개(예컨대, 8 비트)의 승산-가산(MAD)을 실행하도록 구조화된다. 일 실시예에서, ALU 레인 하드웨어는 2개의 8 비트×8 비트 곱셈(즉, 4개의 8 비트 입력 오퍼랜드)을 수행하고, 그런 다음 2개의 16 비트 적 (products)과 32 비트 누산기를 함께 가산하여 1 사이클에서 32 비트 합을 생성하도록 설계된다. 여기서, 누산기는 곱셈 결과가 출력 "누산기" 레지스터에 기록되는 합산 결과와 더해지는 32 비트 입력 오퍼랜드에 해당한다. 여기서, 두 곱셈은 출력 평면내의 동일한 픽셀에 대한 것으로 가정되므로 함께 가산될 수 있다. 4개의 8 비트 입력 오퍼랜드는 동일한 입력 이미지 평면으로부터의 2개의 입력 및 2개의 계수 값으로 구성된다.
대안적인 실시예에서, 각 ALU 레인은 사이클 당 2개의 MAD를 달성하기 위해 이중 8 비트 곱셈-가산을 지원하도록 설계된다. 즉, 하드웨어는 16 비트 입력 오퍼랜드를 이용하여 16 비트 누산기로의, 첫 번째 8 비트×8 비트 곱셈 및 결과 합산을 수행하고, 별도의 16 비트 입력 오퍼랜드를 이용하여 별도의 16 비트 누산기로의 두 번째, 개별 8 비트×8 비트 곱셈 및 결과 합산을 수행한다. 그러나, 16 비트 누산기는 매 사이클마다 32 비트 누산기로의 전송을 요구하는 단일 사이클(예컨대, 전체 8 비트 입력 피승수로)에서 포화되어 전반적인 속도를 전체 사이클 당 1 MAD로 떨어뜨릴 수 있다.
포화 히트(hit)를 피하기 위해, 저해상도 입력 피승수 데이터가 사용될 수 있다. 예를 들어, 한 쌍의 6 비트×6 비트 곱셈은 각각의 상이한 16 비트 입력 오퍼랜드를 갖는 별개의 각각의 16 비트 누산기로 합산되는 각각의 결과로 수행될 수 있다. 상기 저해상도 입력 피승수는 16 비트 누산기 포화 및 32 비트 누산기로의 해당 전송 전에 다수의 사이클을 필요로 한다. 예를 들어, 포화는 16 사이클마다 발생할 수 있다. 16 사이클마다 포화의 경우, 매 17 사이클마다 이중 16 비트 누산기가 추가될 수 있고, 매 18 사이클마다 직전 이중 누산기 합의 결과가 실행중인 32 비트 누산기에 더해질 수 있다. 일 실시예에서, 하드웨어는 단일 사이클에서 누산기 합계 및 32 비트 누산기로의 가산을 수행하도록 설계될 수 있다. 다양한 실시예에서, 이러한 저 정밀도의 접근법은 사이클 당 1.8 곱셈-가산을 성취할 수 있다.
더 정밀도가 높은 애플리케이션(예를 들어, 8 비트 이상의 피승수 데이터로)은 사이클 당 약 1 MAD가 수행되는 32 비트 입력 합산 오퍼랜드 및 누산기 결과를 사용하도록 설계될 수 있다. 따라서 저 정밀도 접근법과 마찬가지로 상당한 수의 사이클이 실행될 때까지만 누적기의 포화를 방지한다. 예를 들어, 12 비트 입력 피승수 이미지 데이터의 경우, 32 비트 누산기가 포화되기 전에 단일 MAD의 256 사이클이 실행된다.
도 16은 실행 레인들의 어레이 및 2차원 시프트 레지스터(1601)를 갖는 이미지 프로세서상에서 컨볼루션 신경망 계층을 실행하는 것을 포함하는 방법을 도시한다. 2차원 시프트 레지스터는 실행 레인을 위한 로컬 개별 레지스터 공간을 제공한다. 컨볼루션 신경망의 실행은 이미지 데이터의 3차원 블록의 이미지 데이터 평면을 2차원 시프트 레지스터(1602)로 로딩하는 것을 포함한다. 컨볼루션 신경망의 실행은 또한 다음의 단계들을 순차적으로 수행하여 계수 값들의 어레이로 이미지 데이터 평면의 2차원 컨볼루션을 수행하는 단계(1603)를 포함하고, 상기 다음의 단계들은 부분 적들의 어레이를 생성하기 위해 각각의 픽셀 및 계수 값들을 실행 레인 내에서 동시에 승산하는 단계; 상기 이미지 데이터 내의 상이한 스텐실들에 대한 2 차원 레지스터 내에 유지되는 부분 적들의 각각의 누적을 갖는 상기 부분 적들을 상기 실행 레인들 내에서 동시에 합산하는 단계; 및 상기 2 차원 시프트 레지스터 어레이 내의 컨텐츠를 시프트함으로써 상기 실행 레인들 내의 상기 2 차원 컨볼 루션에 대한 값들의 정확한 정렬을 수행하는 단계를 포함한다.
d. 구현 실시예
전술한 다양한 이미지 프로세서 아키텍처 특징들은 종래의 의미에서의 이미지 프로세싱에 반드시 제한되는 것이 아니며 따라서 이미지 프로세서가 재-특징화될 수 있는(또는 되지 않을 수 있는) 다른 애플리케이션들에 적용될 수 있다는 것을 지적하는 것이 적절하다. 예를 들어, 상술한 다양한 이미지 프로세서 아키텍처 특징들 중 임의의 것이 실제 카메라 이미지들의 프로세싱과는 대조적으로 애니메이션의 생성 및/또는 발생 및/또는 렌더링에 사용되면, 이미지 프로세서는 그래픽 프로세싱 유닛으로서 특징화될 수 있다. 부가적으로, 상술한 이미지 프로세서 아키텍처 특징들은 비디오 프로세싱, 비전 프로세싱, 이미지 인식 및/또는 기계 학습과 같은 다른 기술적 어플리케이션들에 적용될 수 있다. 이러한 방식으로 적용되면, 이미지 프로세서는 더 범용 프로세서(예를 들어, 컴퓨팅 시스템의 CPU이거나 그 일부인)와 통합되거나(예를 들어, 코-프로세서로서) 또는 컴퓨팅 시스템 내의 독립형 프로세서일 수 있다 .
전술한 하드웨어 설계 실시예들은 반도체 칩 내에서 및/또는 반도체 제조 프로세스를 향한 최종 타게팅을 위한 회로 설계의 디스트립션으로서 구현될 수 있다. 후자의 경우에서, 그러한 회로 디스트립션들은 (예를 들어, VHDL 또는 Verilog) 레지스터 전송 레벨(RTL) 회로 디스크립션, 게이트 레벨 회로 디스크립션, 트랜지스터 레벨 회로 디스크립션 또는 마스크 디스크립션 또는 그들의 다양한 조합의 형태를 취할 수 있다.
전술한 섹션들로부터, 전술한 바와같은 이미지 프로세서가 컴퓨터 시스템상의 하드웨어로(예를 들어, 핸드 헬드 디바이스의 카메라로부터의 데이터를 처리하는 핸드 헬드 디바이스의 시스템 온 칩(SOC)의 일부로서) 구현될 수 있음을 인식하는 것이 적절하다. 이미지 프로세서가 하드웨어 회로로서 구현되는 경우, 이미지 프로세서에 의해 처리되는 이미지 데이터는 카메라로부터 직접 수신될 수 있다는 점에 유의한다. 여기서, 이미지 프로세서는 개별 카메라의 일부이거나, 통합된 카메라를 갖는 컴퓨팅 시스템의 일부일 수 있다. 후자의 경우에서, 이미지 데이터는 카메라 또는 컴퓨팅 시스템의 시스템 메모리로부터 직접 수신될 수 있다(예를 들어, 카메라는 자신의 이미지 데이터를 이미지 프로세서가 아닌 시스템 메모리로 전송함). 이전 섹션에서 설명한 많은 기능들이 (애니메이션을 렌더링하는) 그래픽 프로세서 유닛에 적용될 수 있다.
도 17은 컴퓨팅 시스템의 예시적인 도면을 제공한다. 이하에서 설명되는 컴퓨팅 시스템의 많은 구성 요소는 통합된 카메라 및 관련 이미지 프로세서(예컨대, 스마트 폰 또는 태블릿 컴퓨터와 같은 핸드 헬드 디바이스)를 갖는 컴퓨팅 시스템에 적용 가능하다. 당업자는이 두 가지를 쉽게 구분할 수 있다.
도 17에서 관찰되는 바와 같이, 기본 컴퓨팅 시스템은 중앙 처리 장치(1701)(예를 들어, 멀티-코어 프로세서 또는 애플리케이션 프로세서상에 배치된 복수의 범용 프로세싱 코어(1715_1 내지 1715_N 및 메인 메모리 컨트롤러(1717)를 포함할 수 있는) 시스템 메모리(1702), 디스플레이(1703)(예컨대, 터치 스크린, 플랫-패널), 로컬 유선 포인트-투-포인트 링크(예컨대, USB) 인터페이스(1704), 다양한 네트워크 I/O 기능들(1705)(이더넷 인터페이스 및/또는 셀룰러 모뎀 서브 시스템과 같은), 무선 로컬 영역 네트워크(예컨대, WiFi) 인터페이스(1706), 무선 포인트-투-포인트 링크(예컨대, 블루투스) 인터페이스(1707) 및 GPS 인터페이스(1708), 다양한 센서(1709_1 내지 1709_N), 하나 이상의 카메라(1710), 배터리(1711), 전력 관리 제어 유닛(1712), 스피커 및 마이크로폰(1713) 및 오디오 코덱/디코더(1714)를 포함한다.
애플리케이션 프로세서 또는 멀티-코어 프로세서(1750)는 CPU(1701), 하나 이상의 그래픽 프로세싱 유닛(1716), 메모리 관리 기능(1717)(예를 들어, 메모리 제어기), I/O 제어 기능(1718) 및 이미지 프로세싱 유닛(1719)을 포함한다. 범용 프로세싱 코어들(1715)은 전형적으로 컴퓨팅 시스템의 운영 체제 및 애플리케이션 소프트웨어를 실행한다. 그래픽 프로세싱 유닛(1716)은 전형적으로 예를 들어 디스플레이(1703) 상에 제시되는 그래픽 정보를 생성하기 위해 그래픽 집중 기능들을 실행한다. 메모리 제어 기능(1717)은 시스템 메모리(1702)와 인터페이스하여 시스템 메모리(1702)로/로부터 데이터를 기록/판독한다. 전력 관리 제어 유닛(1712)은 일반적으로 시스템(1700)의 전력 소비를 제어한다.
이미지 프로세싱 유닛(1719)은 이전 섹션들에서 전술한 임의의 이미지 프로세싱 유닛 실시예들에 따라 구현될 수 있다. 선택적으로 또는 조합하여, IPU(1719)는 GPU(1716) 및 CPU(1701) 중 하나 또는 둘 모두에 그들의 코(co)-프로세서로서 연결될 수 있다. 또한, 다양한 실시예들에서, GPU(1716)는 상술한 임의의 이미지 프로세서 특징들로 구현될 수 있다.
터치 스크린 디스플레이(1703), 통신 인터페이스(1704~1707), GPS 인터페이스(1708), 센서(1709), 카메라(1710) 및 스피커/마이크로폰 코덱(1713, 1714) 각각은, 적절한 경우 통합된 주변 디바이스(예컨대, 하나 이상의 카메라(1710)를 포함하는 전체 컴퓨팅 시스템에 관련된 다양한 형태의 I/O( 입력 및/또는 출력)로서 간주될 수 있다. 구현예에 따라, 이들 I/O 구성 요소들 중 다양한 것들은 애플리케이션 프로세서/멀티-코어 프로세서(1750) 상에 통합될 수 있거나 애플리케이션 프로세서/멀티-코어 프로세서(1750)의 다이(die) 외부 또는 패키지 외부에 위치될 수 있다.
일 실시예에서, 하나 이상의 카메라(1710)는 그 시야에서 카메라와 객체 사이의 깊이를 측정할 수 있는 깊이 카메라(depth camera)를 포함한다. 애플리케이션 프로세서 또는 다른 프로세서의 범용 CPU 코어(또는 프로그램 코드를 실행하기 위한 명령 실행 파이프 라인을 갖는 다른 기능 블록)에서 실행하는 애플리케이션 소프트웨어, 운영 체제 소프트웨어, 디바이스 드라이버 소프트웨어 및/또는 펌웨어는 전술한 임의의 기능들을 수행할 수 있다.
본 발명의 실시예들은 전술한 바와 같은 다양한 프로세스를 포함할 수 있다. 프로세스들은 기계 실행 가능 명령들로 구현될 수 있다. 상기 명령들은 범용 또는 특수 목적 프로세서로 하여금 특정 프로세스들을 수행하도록 하는데 사용될 수 있다. 대안적으로, 이들 프로세스는 상기 프로세스들을 수행하기 위한 하드 와이어드 로직을 포함하는 특정 하드웨어 구성 요소들에 의해 또는 프로그래밍된 컴퓨터 구성 요소들 및 커스텀 하드웨어 구성 요소들의 임의의 조합에 의해 수행될 수 있다.
본 발명의 요소들은 기계 실행 가능 명령들을 저장하기 위한 기계 판독 가능 매체로서 또한 제공될 수 있다. 기계 판독 가능 매체는 플로피 디스켓, 광 디스크, CD-ROM 및 광 자기 디스크, 플래시 메모리, ROM, RAM, EPROM, EEPROM, 자기 또는 광학 카드, 전파 매체 또는 전자 명령들을 저장하기에 적합한 다른 유형의 매체/기계-판독 가능 매체를 포함할 수 있지만 이에 한정되는 것은 아니다. 예를 들어, 요소들은 통신 링크(예컨대, 모뎀 또는 네트워크 연결)를 통해 반송파 또는 다른 전파 매체에 구체화된 데이터 신호들에 의해 원격 컴퓨터(예컨대, 서버)로부터 요청 컴퓨터(예컨대, 클라이언트)로 전송된 컴퓨터 프로그램으로서 다운로드될 수 있다.
전술한 명세서에서, 특정 예시적인 실시예가 설명되었다. 그러나, 첨부된 청구 범위에 설명된 본 발명의 더 넓은 사상 및 범위를 벗어나지 않고 다양한 변경 및 수정이 이루어질 수 있음이 명백할 것이다. 따라서, 명세서 및 도면은 제한적인 의미라기 보다는 예시적인 것으로 간주되어야 한다.

Claims (20)

  1. 프로세서에 있어서,
    2차원 시프트 레지스터 어레이; 및
    2차원 프로세싱 요소(element) 어레이를 포함하고, 상기 시프트 레지스터 어레이의 각시프트 레지스터는 상기 2차원 프로세싱 요소 어레이 내의 프로세싱 요소들 중 하나에 전용이고,
    상기 프로세서는 이미지 데이터의 하나 이상의 픽셀값 각각에 대해 2차원 컨볼루션을 수행하기 위한 명령들을 실행하도록 구성되고, 상기 2차원 컨볼루션은 복수의 계수와 관련되고, 상기 명령들은 상기 프로세서로 하여금 동작들을 수행하게 하고,
    상기 동작들은,
    상기 2차원 프로세싱 요소 어레이의 각 프로세싱 요소에 의해, (i) 상기 2차원 컨볼루션의 제1 계수 및 (ii) 상기 프로세싱 요소에 전용된 시프트 레지스터에 저장된 각각의 픽셀값을 사용하여 승산을 수행하는 단계와,
    상기 2차원 프로세싱 요소 어레이의 각 프로세싱 요소에 의해, 상기 프로세싱 요소에 대한 현재 컨볼루션 합(sum)을 업데이트하도록 (i) 상기 승산의 결과와 (ii) 상기 프로세싱 요소에 대한 각각의 현재 컨볼루션 합의 가산을 수행하는 단계와, 그리고
    상기 2차원 컨볼루션에 대한 모든 계수들이 처리되지 않았다는 결정에 기초하여, 상기 프로세서에 의해, 상기 2차원 시프트 레지스터 어레이에 저장된 이미지 데이터의 각 픽셀을 동일한 방향으로 시프트시키는 단계를 포함하는 것을 특징으로 하는 프로세서.
  2. 제1항에 있어서,
    상기 동작들은,
    상기 2차원 컨볼루션에 대한 모든 계수값들이 처리되었다는 결정에 기초하여, 상기 이미지 데이터내의 하나 이상의 픽셀값 각각에 대해 계산된 2차원 컨볼루션의 결과를 출력하는 단계를 더 포함하는 것을 특징으로 하는 프로세서.
  3. 제1항에 있어서,
    상기 동작들은,
    상기 프로세서에 의해, 상기 이미지 데이터를 상기 2차원 시프트 레지스터 어레이에 로딩하는 단계와; 그리고
    상기 프로세서에 의해, 상기 2차원 컨볼루션에 대한 상기 복수의 계수를 상기 프로세서에 국부적인 메모리에 로딩하는 단계를 더 포함하는 것을 특징으로 하는 프로세서.
  4. 제1항에 있어서,
    상기 승산을 수행하는 단계와 상기 가산을 수행하는 단계는,
    상기 2차원 프로세싱 요소 어레이의 각 프로세싱 요소에 의해, (i) 상기 2차원 컨볼루션의 현재 계수, (ii) 상기 프로세싱 요소에 전용된 시프트 레지스터내의 각각의 픽셀값 및 (iii) 상기 프로세싱 요소에 대한 각각의 현재 컨볼루션 합을 사용하여 곱셈-가산 명령을 실행하는 단계를 포함하는 것을 특징으로 하는 프로세서.
  5. 제4항에 있어서,
    상기 프로세서는,
    상기 2차원 프로세싱 요소 어레이내의 각 프로세싱 요소로 명령들을 발행하도록 구성된 스칼라 프로세싱 요소를 포함하고, 상기 동작들은,
    상기 스칼라 프로세싱 요소에 의해 상기 2차원 프로세싱 요소 어레이의 각 프로세싱 요소로 상기 곱셈-가산 명령을 발행하는 단계를 더 포함하는 것을 특징으로 하는 프로세서.
  6. 제5항에 있어서,
    상기 곱셈-가산 명령을 발행하는 단계는,
    상기 2차원 컨볼루션의 현재 계수값을 상기 곱셈-가산 명령의 즉치 오퍼랜드(intermediate operand)로서 발행하는 단계를 포함하는 것을 특징으로 하는 프로세서.
  7. 제1항에 있어서,
    상기 동작들은,
    각 프로세싱 요소에 의해, 상기 프로세싱 요소에 국부적인 레지스터 공간에 각 가산의 결과를 저장하는 단계를 더 포함하는 것을 특징으로 하는 프로세서.
  8. 제1항에 있어서,
    상기 프로세서는 다수의 스텐실 프로세서를 갖는 컴퓨팅 디바이스의 스텐실 프로세서이고, 그리고
    상기 스텐실 프로세서들은 상기 다수의 스텐실 프로세서의 각 스텐실 프로세서로 하여금 단일 이미지에 대한 이미지 데이터의 다수의 평면들 각각에 설정된 각각의 계수를 사용하여 상기 2차원 컨볼루션을 수행하게 하는 명령들을 실행하도록 구성되는 것을 특징으로 하는 프로세서.
  9. 제1항에 있어서,
    상기 프로세서는 다수의 스텐실 프로세서를 갖는 컴퓨팅 디바이스의 스텐실 프로세서이고, 그리고
    상기 스텐실 프로세서들은 상기 다수의 스텐실 프로세서의 각 스텐실 프로세서로 하여금 이미지 데이터의 다수의 평면을 갖는 단일 이미지에 대한 이미지 데이터의 각각의 평면에 설정된 각각의 계수를 사용하여 상기 2차원 컨볼루션을 수행하게 하는 명령들을 실행하도록 구성되는 것을 특징으로 하는 프로세서.
  10. 제1항에 있어서,
    상기 프로세서는 다수의 스텐실 프로세서를 갖는 컴퓨팅 디바이스의 스텐실 프로세서이고, 그리고
    상기 스텐실 프로세서들은 상기 다수의 스텐실 프로세서의 각 스텐실 프로세서로 하여금 이미지 평면의 상이한 각각의 부분에 상기 2차원 컨볼루션을 수행하게 하는 명령들을 실행하도록 구성되는 것을 특징으로 하는 프로세서.
  11. 명령들을 포함하는 비-일시적 컴퓨터 저장 매체로서,
    2차원 시프트 레지스터 어레이; 및
    2차원 프로세싱 요소(element) 어레이를 포함하고, 상기 시프트 레지스터 어레이의 각시프트 레지스터는 상기 2차원 프로세싱 요소 어레이 내의 프로세싱 요소들 중 하나에 전용인 프로세서에 의해 실행될 때,
    상기 프로세서로 하여금 이미지 데이터의 하나 이상의 픽셀값 각각에 대해 2차원 컨볼루션을 수행하게 하고, 상기 2차원 컨볼루션은 복수의 계수와 관련되고, 상기 명령들은 상기 프로세서로 하여금 동작들을 수행하게 하고,
    상기 동작들은,
    상기 2차원 프로세싱 요소 어레이의 각 프로세싱 요소에 의해, (i) 상기 2차원 컨볼루션의 제1 계수 및 (ii) 상기 프로세싱 요소에 전용된 시프트 레지스터에 저장된 각각의 픽셀값을 사용하여 승산을 수행하는 단계와,
    상기 2차원 프로세싱 요소 어레이의 각 프로세싱 요소에 의해, 상기 프로세싱 요소에 대한 현재 컨볼루션 합(sum)을 업데이트하도록 (i) 상기 승산의 결과와 (ii) 상기 프로세싱 요소에 대한 각각의 현재 컨볼루션 합의 가산을 수행하는 단계와, 그리고
    상기 2차원 컨볼루션에 대한 모든 계수들이 처리되지 않았다는 결정에 기초하여, 상기 프로세서에 의해, 상기 2차원 시프트 레지스터 어레이에 저장된 이미지 데이터의 각 픽셀을 동일한 방향으로 시프트시키는 단계를 포함하는 것을 특징으로 하는 비-일시적 컴퓨터 저장 매체.
  12. 제11항에 있어서,
    상기 동작들은,
    상기 2차원 컨볼루션에 대한 모든 계수값들이 처리되었다는 결정에 기초하여, 상기 이미지 데이터내의 하나 이상의 픽셀값 각각에 대해 계산된 2차원 컨볼루션의 결과를 출력하는 단계를 더 포함하는 것을 특징으로 하는 비-일시적 컴퓨터 저장 매체.
  13. 제11항에 있어서,
    상기 동작들은,
    상기 프로세서에 의해, 상기 이미지 데이터를 상기 2차원 시프트 레지스터 어레이에 로딩하는 단계와; 그리고
    상기 프로세서에 의해, 상기 2차원 컨볼루션에 대한 상기 복수의 계수를 상기 프로세서에 국부적인 메모리에 로딩하는 단계를 더 포함하는 것을 특징으로 하는 비-일시적 컴퓨터 저장 매체.
  14. 제11항에 있어서,
    상기 승산을 수행하는 단계와 상기 가산을 수행하는 단계는,
    상기 2차원 프로세싱 요소 어레이의 각 프로세싱 요소에 의해, (i) 상기 2차원 컨볼루션의 현재 계수, (ii) 상기 프로세싱 요소에 전용된 시프트 레지스터내의 각각의 픽셀값 및 (iii) 상기 프로세싱 요소에 대한 각각의 현재 컨볼루션 합을 사용하여 곱셈-가산 명령을 실행하는 단계를 포함하는 것을 특징으로 하는 비-일시적 컴퓨터 저장 매체.
  15. 제14항에 있어서,
    상기 프로세서는,
    상기 2차원 프로세싱 요소 어레이내의 각 프로세싱 요소로 명령들을 발행하도록 구성된 스칼라 프로세싱 요소를 포함하고, 상기 동작들은,
    상기 스칼라 프로세싱 요소에 의해 상기 2차원 프로세싱 요소 어레이의 각 프로세싱 요소로 상기 곱셈-가산 명령을 발행하는 단계를 더 포함하는 것을 특징으로 하는 비-일시적 컴퓨터 저장 매체.
  16. 제15항에 있어서,
    상기 곱셈-가산 명령을 발행하는 단계는,
    상기 2차원 컨볼루션의 현재 계수값을 상기 곱셈-가산 명령의 즉치 오퍼랜드로서 발행하는 단계를 포함하는 것을 특징으로 하는 비-일시적 컴퓨터 저장 매체.
  17. 제11항에 있어서,
    상기 동작들은,
    각 프로세싱 요소에 의해, 상기 프로세싱 요소에 국부적인 레지스터 공간에 각 가산의 결과를 저장하는 단계를 더 포함하는 것을 특징으로 하는 비-일시적 컴퓨터 저장 매체.
  18. 제11항에 있어서,
    상기 프로세서는 다수의 스텐실 프로세서를 갖는 컴퓨팅 디바이스의 스텐실 프로세서이고, 그리고
    상기 스텐실 프로세서들은 상기 다수의 스텐실 프로세서의 각 스텐실 프로세서로 하여금 단일 이미지에 대한 이미지 데이터의 다수의 평면들 각각에 설정된 각각의 계수를 사용하여 2차원 컨볼루션을 수행하게 하는 명령들을 실행하도록 구성되는 것을 특징으로 하는 비-일시적 컴퓨터 저장 매체.
  19. 제11항에 있어서,
    상기 프로세서는 다수의 스텐실 프로세서를 갖는 컴퓨팅 디바이스의 스텐실 프로세서이고, 그리고
    상기 스텐실 프로세서들은 상기 다수의 스텐실 프로세서의 각 스텐실 프로세서로 하여금 이미지 데이터의 다수의 평면을 갖는 단일 이미지에 대한 이미지 데이터의 각각의 평면에 설정된 각각의 계수를 사용하여 2차원 컨볼루션을 수행하게 하는 명령들을 실행하도록 구성되는 것을 특징으로 하는 비-일시적 컴퓨터 저장 매체.
  20. 2차원 시프트 레지스터 어레이 및 2차원 프로세싱 요소 어레이를 포함하는 프로세서에 의해 수행되는 방법으로서, 상기 시프트 레지스터 어레이의 각 시프트 레지스터는 상기 2차원 프로세싱 요소 어레이내의 프로세싱 요소들 중 하나에 전용이고,
    상기 방법은 프로세서로 하여금 이미지 데이터의 하나 이상의 픽셀값 각각에 대한 2차원 컨볼루션을 수행하게 하고, 상기 2차원 컨볼루션은 복수의 계수와 관련되고, 상기 방법은,
    상기 2차원 프로세싱 요소 어레이의 각 프로세싱 요소에 의해, (i) 상기 2차원 컨볼루션의 제1 계수 및 (ii) 상기 프로세싱 요소에 전용된 시프트 레지스터에 저장된 각각의 픽셀값을 사용하여 승산을 수행하는 단계와,
    상기 2차원 프로세싱 요소 어레이의 각 프로세싱 요소에 의해, 상기 프로세싱 요소에 대한 현재 컨볼루션 합(sum)을 업데이트하도록 (i) 상기 승산의 결과와 (ii) 상기 프로세싱 요소에 대한 각각의 현재 컨볼루션 합의 가산을 수행하는 단계와, 그리고
    상기 2차원 컨볼루션에 대한 모든 계수들이 처리되지 않았다는 결정에 기초하여, 상기 프로세서에 의해, 상기 2차원 시프트 레지스터 어레이에 저장된 이미지 데이터의 각 픽셀을 동일한 방향으로 시프트시키는 단계를 포함하는 것을 특징으로 하는 프로세서에 의해 수행되는 방법.
KR1020197000838A 2016-07-01 2017-06-07 프로그램 가능한 2차원 이미지 프로세서상의 컨볼루션 신경망 KR102232722B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/201,204 2016-07-01
US15/201,204 US10546211B2 (en) 2016-07-01 2016-07-01 Convolutional neural network on programmable two dimensional image processor
PCT/US2017/036441 WO2018005030A1 (en) 2016-07-01 2017-06-07 Convolutional neural network on programmable two dimensional image processor

Publications (2)

Publication Number Publication Date
KR20190022627A KR20190022627A (ko) 2019-03-06
KR102232722B1 true KR102232722B1 (ko) 2021-03-29

Family

ID=59363203

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197000838A KR102232722B1 (ko) 2016-07-01 2017-06-07 프로그램 가능한 2차원 이미지 프로세서상의 컨볼루션 신경망

Country Status (9)

Country Link
US (3) US10546211B2 (ko)
EP (1) EP3479302B1 (ko)
JP (1) JP6764954B2 (ko)
KR (1) KR102232722B1 (ko)
CN (1) CN107563952B (ko)
DE (2) DE102017113733B4 (ko)
GB (3) GB2574940B (ko)
TW (1) TWI690858B (ko)
WO (1) WO2018005030A1 (ko)

Families Citing this family (62)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20180046898A1 (en) * 2016-08-11 2018-02-15 Vivante Corporation Zero Coefficient Skipping Convolution Neural Network Engine
US10360470B2 (en) 2016-10-10 2019-07-23 Gyrfalcon Technology Inc. Implementation of MobileNet in a CNN based digital integrated circuit
US10339445B2 (en) 2016-10-10 2019-07-02 Gyrfalcon Technology Inc. Implementation of ResNet in a CNN based digital integrated circuit
US10366328B2 (en) 2017-09-19 2019-07-30 Gyrfalcon Technology Inc. Approximating fully-connected layers with multiple arrays of 3x3 convolutional filter kernels in a CNN based integrated circuit
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
US10402628B2 (en) 2016-10-10 2019-09-03 Gyrfalcon Technology Inc. Image classification systems based on CNN based IC and light-weight classifier
US10366302B2 (en) 2016-10-10 2019-07-30 Gyrfalcon Technology Inc. Hierarchical category classification scheme using multiple sets of fully-connected networks with a CNN based integrated circuit as feature extractor
US10043095B2 (en) * 2016-10-10 2018-08-07 Gyrfalcon Technology, Inc. Data structure for CNN based digital integrated circuit for extracting features out of an input image
TWI634490B (zh) * 2016-11-14 2018-09-01 美商耐能股份有限公司 卷積運算裝置及卷積運算方法
US10878310B2 (en) 2016-11-29 2020-12-29 Mellanox Technologies, Ltd. Accelerated convolution in convolutional neural networks
US11562115B2 (en) 2017-01-04 2023-01-24 Stmicroelectronics S.R.L. Configurable accelerator framework including a stream switch having a plurality of unidirectional stream links
US10339443B1 (en) 2017-02-24 2019-07-02 Gopro, Inc. Systems and methods for processing convolutional neural network operations using textures
US11037330B2 (en) * 2017-04-08 2021-06-15 Intel Corporation Low rank matrix compression
US11373266B2 (en) * 2017-05-05 2022-06-28 Intel Corporation Data parallelism and halo exchange for distributed machine learning
US10474464B2 (en) 2017-07-05 2019-11-12 Deep Vision, Inc. Deep vision processor
US10817983B1 (en) * 2017-09-28 2020-10-27 Apple Inc. Method and device for combining real and virtual images
CN109754359B (zh) * 2017-11-01 2021-12-07 腾讯科技(深圳)有限公司 一种应用于卷积神经网络的池化处理的方法及系统
US11270201B2 (en) 2017-12-29 2022-03-08 Intel Corporation Communication optimizations for distributed machine learning
CN108182471B (zh) * 2018-01-24 2022-02-15 上海岳芯电子科技有限公司 一种卷积神经网络推理加速器及方法
US10459876B2 (en) * 2018-01-31 2019-10-29 Amazon Technologies, Inc. Performing concurrent operations in a processing element
GB201801639D0 (en) * 2018-02-01 2018-03-21 Ruff Brendan Patrick Low precision efficient multiplication free convolutional filter bank device
US11468302B2 (en) 2018-03-13 2022-10-11 Recogni Inc. Efficient convolutional engine
CN108520297B (zh) * 2018-04-02 2020-09-04 周军 可编程深度神经网络处理器
CN108829610B (zh) * 2018-04-02 2020-08-04 浙江大华技术股份有限公司 一种神经网络前向计算过程中的内存管理方法及设备
EP3557485B1 (en) * 2018-04-19 2021-05-26 Aimotive Kft. Method for accelerating operations and accelerator apparatus
KR102126857B1 (ko) * 2018-05-10 2020-06-25 서울대학교산학협력단 행 단위 연산 뉴럴 프로세서 및 이를 이용한 데이터 처리 방법
CN108921926B (zh) * 2018-07-02 2020-10-09 云从科技集团股份有限公司 一种基于单张图像的端到端三维人脸重建方法
US10417342B1 (en) 2018-07-03 2019-09-17 Gyrfalcon Technology Inc. Deep learning device for local processing classical chinese poetry and verse
CN108681984B (zh) * 2018-07-26 2023-08-15 珠海一微半导体股份有限公司 一种3*3卷积算法的加速电路
CN109065089B (zh) * 2018-07-26 2020-11-06 杭州闪亿半导体有限公司 一种用于卷积运算的存储模块、模组
US10311149B1 (en) 2018-08-08 2019-06-04 Gyrfalcon Technology Inc. Natural language translation device
CN109086875A (zh) * 2018-08-16 2018-12-25 郑州云海信息技术有限公司 一种基于宏指令集的卷积网络加速方法及装置
US10983583B2 (en) * 2018-08-23 2021-04-20 Apple Inc. Electronic display reduced blanking duration systems and methods
JP7165018B2 (ja) 2018-10-03 2022-11-02 キヤノン株式会社 情報処理装置、情報処理方法
US11501141B2 (en) * 2018-10-12 2022-11-15 Western Digital Technologies, Inc. Shifting architecture for data reuse in a neural network
US10387772B1 (en) 2018-10-22 2019-08-20 Gyrfalcon Technology Inc. Ensemble learning based image classification systems
CN109711538B (zh) * 2018-12-14 2021-01-15 安徽寒武纪信息科技有限公司 运算方法、装置及相关产品
US10552939B1 (en) 2019-02-12 2020-02-04 Google Llc Image processor complex transfer functions
JP7408289B2 (ja) * 2019-03-28 2024-01-05 株式会社エヌエスアイテクス 畳込み演算装置
CN111767994A (zh) * 2019-04-01 2020-10-13 中国科学院半导体研究所 一种神经元计算模块
KR20210004702A (ko) * 2019-07-05 2021-01-13 삼성전자주식회사 Ai 프로세서 및 이의 신경망 연산 수행 방법
US11475283B2 (en) 2019-10-24 2022-10-18 Apple Inc. Multi dimensional convolution in neural network processor
DE102019130930A1 (de) 2019-11-15 2021-05-20 Carl Zeiss Microscopy Gmbh Mikroskop und Verfahren mit Ausführen eines faltenden neuronalen Netzes
CN110728367B (zh) * 2019-12-18 2020-05-05 深圳鲲云信息科技有限公司 用于神经网络的数据存储方法及装置
CN111079904B (zh) * 2019-12-23 2023-05-23 福建星网视易信息系统有限公司 深度可分离卷积的加速方法和存储介质
US11403727B2 (en) 2020-01-28 2022-08-02 Nxp Usa, Inc. System and method for convolving an image
DE102020201182A1 (de) * 2020-01-31 2021-08-05 Robert Bosch Gesellschaft mit beschränkter Haftung Hardwarebeschleunigte Berechnung von Faltungen
US11593609B2 (en) 2020-02-18 2023-02-28 Stmicroelectronics S.R.L. Vector quantization decoding hardware unit for real-time dynamic decompression for parameters of neural networks
WO2021183567A1 (en) * 2020-03-10 2021-09-16 Verheyen Henry Hardware architecture for processing data in neural network
US11513847B2 (en) 2020-03-24 2022-11-29 Deep Vision Inc. System and method for queuing commands in a deep learning processor
JP7367595B2 (ja) 2020-04-07 2023-10-24 富士通株式会社 情報処理装置及び情報処理方法
US11500680B2 (en) * 2020-04-24 2022-11-15 Alibaba Group Holding Limited Systolic array-friendly data placement and control based on masked write
KR102441171B1 (ko) * 2020-05-26 2022-09-08 한국전자통신연구원 다시점 얼굴 영상 기반 사용자 모니터링 장치 및 방법
CN111767985B (zh) * 2020-06-19 2022-07-22 深圳市商汤科技有限公司 一种神经网络的训练方法、视频识别方法及装置
US11531873B2 (en) 2020-06-23 2022-12-20 Stmicroelectronics S.R.L. Convolution acceleration with embedded vector decompression
US11586442B2 (en) 2020-08-06 2023-02-21 Nxp Usa, Inc. System and method for convolving image with sparse kernels
GB2599098B (en) * 2020-09-22 2024-04-10 Imagination Tech Ltd Hardware implementation of windowed operations in three or more dimensions
US11734017B1 (en) 2020-12-07 2023-08-22 Waymo Llc Methods and systems for processing vehicle sensor data across multiple digital signal processing cores virtually arranged in segments based on a type of sensor
US20220207332A1 (en) * 2020-12-31 2022-06-30 Nxp Usa, Inc. Scalable neural network accelerator architecture
CN112967211A (zh) * 2021-01-31 2021-06-15 成都商汤科技有限公司 一种图像处理方法、装置、计算机设备及存储介质
CN113191935A (zh) * 2021-04-30 2021-07-30 华中科技大学 一种用于高斯金字塔构建的可重构硬件加速方法与系统
US20230032323A1 (en) * 2021-07-28 2023-02-02 Apical Limited Image processing method and system

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150178246A1 (en) 2013-12-20 2015-06-25 Enric Herrero Abellanas Processing device for performing convolution operations

Family Cites Families (77)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4445177A (en) 1981-05-22 1984-04-24 Data General Corporation Digital data processing system utilizing a unique arithmetic logic unit for handling uniquely identifiable addresses for operands and instructions
DE3851005T2 (de) 1987-06-01 1995-04-20 Applied Intelligent Syst Inc Paralleles Nachbarverarbeitungssystem und -Verfahren.
US4770430A (en) 1987-08-11 1988-09-13 Lange Dennis M Self-steering axle assembly for vehicles
US4935894A (en) 1987-08-31 1990-06-19 Motorola, Inc. Multi-processor, multi-bus system with bus interface comprising FIFO register stocks for receiving and transmitting data and control information
US5253308A (en) 1989-06-21 1993-10-12 Amber Engineering, Inc. Massively parallel digital image data processor using pixel-mapped input/output and relative indexed addressing
WO1994009595A1 (en) 1991-09-20 1994-04-28 Shaw Venson M Method and apparatus including system architecture for multimedia communications
JP3482660B2 (ja) 1993-09-08 2003-12-22 ソニー株式会社 画像データ処理装置および画像データ処理方法
US5612693A (en) 1994-12-14 1997-03-18 International Business Machines Corporation Sliding window data compression using a toroidal bit shift register
JP3573755B2 (ja) 1996-01-15 2004-10-06 シーメンス アクチエンゲゼルシヤフト 画像処理プロセッサ
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
US6366289B1 (en) 1998-07-17 2002-04-02 Microsoft Corporation Method and system for managing a display image in compressed and uncompressed blocks
US6587158B1 (en) 1998-07-23 2003-07-01 Dvdo, Inc. Method and apparatus for reducing on-chip memory in vertical video processing
US7010177B1 (en) 1998-08-27 2006-03-07 Intel Corporation Portability of digital images
EP1164544B1 (en) 1999-03-16 2011-11-02 Hamamatsu Photonics K.K. High-speed vision sensor
JP3922859B2 (ja) 1999-12-28 2007-05-30 株式会社リコー 画像処理装置、画像処理方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体
US6745319B1 (en) 2000-02-18 2004-06-01 Texas Instruments Incorporated Microprocessor with instructions for shuffling and dealing data
US6728862B1 (en) 2000-05-22 2004-04-27 Gazelle Technology Corporation Processor array and parallel data processing methods
US6728722B1 (en) 2000-08-28 2004-04-27 Sun Microsystems, Inc. General data structure for describing logical data spaces
US7286717B2 (en) 2001-10-31 2007-10-23 Ricoh Company, Ltd. Image data processing device processing a plurality of series of data items simultaneously in parallel
JP4146654B2 (ja) 2002-02-28 2008-09-10 株式会社リコー 画像処理回路、複合画像処理回路、および、画像形成装置
US9170812B2 (en) 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
WO2003088033A1 (en) 2002-04-09 2003-10-23 University Of Rochester Multiplier-based processor-in-memory architectures for image and graphics processing
AU2003286131A1 (en) 2002-08-07 2004-03-19 Pact Xpp Technologies Ag Method and device for processing data
US20060044576A1 (en) 2004-07-30 2006-03-02 Kabushiki Kaisha Toshiba Apparatus for image processing
US7667764B2 (en) 2004-06-04 2010-02-23 Konica Minolta Holdings, Inc. Image sensing apparatus
JP4219887B2 (ja) 2004-12-28 2009-02-04 富士通マイクロエレクトロニクス株式会社 画像処理装置及び画像処理方法
ATE504043T1 (de) 2005-04-28 2011-04-15 Univ Edinburgh Umkonfigurierbares anweisungs-zellen-array
US7882339B2 (en) 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
JP2007067917A (ja) 2005-08-31 2007-03-15 Matsushita Electric Ind Co Ltd 画像データ処理装置
US7602974B2 (en) 2005-10-21 2009-10-13 Mobilic Technology (Cayman) Corp. Universal fixed-pixel-size ISP scheme
FR2895103B1 (fr) 2005-12-19 2008-02-22 Dxo Labs Sa Procede et systeme de traitement de donnees numeriques
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US20080111823A1 (en) 2006-11-13 2008-05-15 Faraday Technology Corp. Graphics processing system
EP1927949A1 (en) 2006-12-01 2008-06-04 Thomson Licensing Array of processing elements with local registers
US8321849B2 (en) 2007-01-26 2012-11-27 Nvidia Corporation Virtual architecture and instruction set for parallel thread computing
US20080244222A1 (en) 2007-03-30 2008-10-02 Intel Corporation Many-core processing using virtual processors
TW200842699A (en) 2007-04-06 2008-11-01 Technology Properties Ltd Signal processing
JP4389976B2 (ja) 2007-06-29 2009-12-24 ブラザー工業株式会社 画像処理装置および画像処理プログラム
JP4844853B2 (ja) 2007-09-05 2011-12-28 国立大学法人東北大学 固体撮像素子及びその駆動方法
CN102047241B (zh) 2008-05-30 2014-03-12 先进微装置公司 本地与全局数据共享
JP4999791B2 (ja) 2008-06-30 2012-08-15 キヤノン株式会社 情報処理装置、その制御方法、及びプログラム
JP5376920B2 (ja) 2008-12-04 2013-12-25 キヤノン株式会社 コンボリューション演算回路、階層的コンボリューション演算回路及び物体認識装置
US8456480B2 (en) 2009-01-14 2013-06-04 Calos Fund Limited Liability Company Method for chaining image-processing functions on a SIMD processor
KR101572879B1 (ko) 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
US8442927B2 (en) * 2009-07-30 2013-05-14 Nec Laboratories America, Inc. Dynamically configurable, multi-ported co-processor for convolutional neural networks
US20110055495A1 (en) 2009-08-28 2011-03-03 Qualcomm Incorporated Memory Controller Page Management Devices, Systems, and Methods
US8976195B1 (en) 2009-10-14 2015-03-10 Nvidia Corporation Generating clip state for a batch of vertices
US8436857B2 (en) 2009-10-20 2013-05-07 Oracle America, Inc. System and method for applying level of detail schemes
US8595428B2 (en) 2009-12-22 2013-11-26 Intel Corporation Memory controller functionalities to support data swizzling
US8749667B2 (en) 2010-08-02 2014-06-10 Texas Instruments Incorporated System and method for maintaining maximum input rate while up-scaling an image vertically
US8508612B2 (en) 2010-09-30 2013-08-13 Apple Inc. Image signal processor line buffer configuration for processing ram image data
US8797323B2 (en) 2011-01-18 2014-08-05 Intel Corporation Shadowing dynamic volumetric media
WO2012105174A1 (ja) 2011-01-31 2012-08-09 パナソニック株式会社 プログラム生成装置、プログラム生成方法、プロセッサ装置及びマルチプロセッサシステム
US9092267B2 (en) 2011-06-20 2015-07-28 Qualcomm Incorporated Memory sharing in graphics processing unit
US20130027416A1 (en) 2011-07-25 2013-01-31 Karthikeyan Vaithianathan Gather method and apparatus for media processing accelerators
JP5742651B2 (ja) 2011-10-15 2015-07-01 コニカミノルタ株式会社 画像処理装置、連携方法および連携プログラム
JP5746100B2 (ja) 2011-12-27 2015-07-08 京セラドキュメントソリューションズ株式会社 画像形成装置
US8823736B2 (en) 2012-01-20 2014-09-02 Intel Corporation Graphics tiling architecture with bounding volume hierarchies
US10244246B2 (en) 2012-02-02 2019-03-26 Texas Instruments Incorporated Sub-pictures for pixel rate balancing on multi-core platforms
US9235769B2 (en) 2012-03-15 2016-01-12 Herta Security, S.L. Parallel object detection method for heterogeneous multithreaded microarchitectures
TWI520598B (zh) 2012-05-23 2016-02-01 晨星半導體股份有限公司 影像處理裝置與影像處理方法
US9232139B2 (en) 2012-07-24 2016-01-05 Apple Inc. Image stabilization using striped output transformation unit
US10318308B2 (en) * 2012-10-31 2019-06-11 Mobileye Vision Technologies Ltd. Arithmetic logic unit
US9378181B2 (en) 2012-11-09 2016-06-28 Intel Corporation Scalable computing array
US8954992B2 (en) 2013-03-15 2015-02-10 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Distributed and scaled-out network switch and packet processing
US9477999B2 (en) * 2013-09-20 2016-10-25 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor
US10540587B2 (en) 2014-04-11 2020-01-21 Google Llc Parallelizing the training of convolutional neural networks
EP3035204B1 (en) * 2014-12-19 2018-08-15 Intel Corporation Storage device and method for performing convolution operations
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US10095479B2 (en) 2015-04-23 2018-10-09 Google Llc Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure
US9965824B2 (en) 2015-04-23 2018-05-08 Google Llc Architecture for high performance, power efficient, programmable image processing
US10291813B2 (en) 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US9756268B2 (en) 2015-04-23 2017-09-05 Google Inc. Line buffer unit for image processor
US9785423B2 (en) 2015-04-23 2017-10-10 Google Inc. Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure
US9772852B2 (en) 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture for image processor
US9769356B2 (en) 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor
US10671564B2 (en) * 2015-10-08 2020-06-02 Via Alliance Semiconductor Co., Ltd. Neural network unit that performs convolutions using collective shift register among array of neural processing units

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150178246A1 (en) 2013-12-20 2015-06-25 Enric Herrero Abellanas Processing device for performing convolution operations

Also Published As

Publication number Publication date
CN107563952B (zh) 2021-04-16
DE102017113733A1 (de) 2018-01-04
GB2564285B (en) 2019-07-17
JP2019522291A (ja) 2019-08-08
US20210004633A1 (en) 2021-01-07
EP3479302B1 (en) 2023-11-01
GB201814094D0 (en) 2018-10-17
JP6764954B2 (ja) 2020-10-07
WO2018005030A1 (en) 2018-01-04
US20180005074A1 (en) 2018-01-04
DE102017113733B4 (de) 2022-06-30
US20180005075A1 (en) 2018-01-04
CN107563952A (zh) 2018-01-09
GB2574940B (en) 2020-07-22
DE202017103694U1 (de) 2017-10-04
GB2574940A (en) 2019-12-25
TW201802727A (zh) 2018-01-16
GB2564285A (en) 2019-01-09
US10789505B2 (en) 2020-09-29
US10546211B2 (en) 2020-01-28
GB201907743D0 (en) 2019-07-17
GB201709785D0 (en) 2017-08-02
EP3479302A1 (en) 2019-05-08
KR20190022627A (ko) 2019-03-06
GB2554491B (en) 2018-10-10
GB2554491A (en) 2018-04-04
TWI690858B (zh) 2020-04-11

Similar Documents

Publication Publication Date Title
KR102232722B1 (ko) 프로그램 가능한 2차원 이미지 프로세서상의 컨볼루션 신경망
US11140293B2 (en) Sheet generator for image processor
CN107438860B (zh) 用于高性能功率高效的可编程图像处理的架构
KR101971657B1 (ko) 이미지 프로세서에 대한 에너지 효율적인 프로세서 코어 아키텍처
EP3286724B1 (en) Two dimensional shift array for image processor
GB2576117A (en) Compiler managed memory for image processor
US10430919B2 (en) Determination of per line buffer unit memory allocation
US10719295B2 (en) Circuit to perform dual input value absolute value and sum operation
KR20190107101A (ko) 지원 내부 네트워크 및 구성 가능한 개수의 활성 코어들을 갖는 이미지 프로세서

Legal Events

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