KR20200069300A - 일반화된 이미지 프로세싱을 위한 이미지 프리프로세싱 - Google Patents

일반화된 이미지 프로세싱을 위한 이미지 프리프로세싱 Download PDF

Info

Publication number
KR20200069300A
KR20200069300A KR1020207009985A KR20207009985A KR20200069300A KR 20200069300 A KR20200069300 A KR 20200069300A KR 1020207009985 A KR1020207009985 A KR 1020207009985A KR 20207009985 A KR20207009985 A KR 20207009985A KR 20200069300 A KR20200069300 A KR 20200069300A
Authority
KR
South Korea
Prior art keywords
image
connections
image data
coupled
storage locations
Prior art date
Application number
KR1020207009985A
Other languages
English (en)
Inventor
엘리엇 델라예
아시시 시라사오
아론 응
용준 우
진드리치 제다
Original Assignee
자일링크스 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 자일링크스 인코포레이티드 filed Critical 자일링크스 인코포레이티드
Publication of KR20200069300A publication Critical patent/KR20200069300A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations
    • G06F17/153Multidimensional correlation or convolution
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0604Improving or facilitating administration, e.g. storage management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0683Plurality of storage devices
    • G06K9/00979
    • G06K9/00986
    • G06K9/4628
    • 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
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • 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
    • G06V10/44Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components
    • G06V10/443Local feature extraction by analysis of parts of the pattern, e.g. by detecting edges, contours, loops, corners, strokes or intersections; Connectivity analysis, e.g. of connected components by matching or filtering
    • G06V10/449Biologically inspired filters, e.g. difference of Gaussians [DoG] or Gabor filters
    • G06V10/451Biologically inspired filters, e.g. difference of Gaussians [DoG] or Gabor filters with interaction between the filter responses, e.g. cortical complex cells
    • G06V10/454Integrating the filters into a hierarchical structure, e.g. convolutional neural networks [CNN]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/94Hardware or software architectures specially adapted for image or video understanding
    • G06V10/95Hardware or software architectures specially adapted for image or video understanding structured as a network, e.g. client-server architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/94Hardware or software architectures specially adapted for image or video understanding
    • G06V10/955Hardware or software architectures specially adapted for image or video understanding using specific electronic processors

Landscapes

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

Abstract

이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하기 위한 예시적인 프리프로세서 회로는, 이미지 데이터(802)의 복수의 행들(814)을 저장하고 복수의 행들 중의 행을 출력하도록 구성된 제1 버퍼(705); 제1 버퍼(705)에 의해 출력된 행(814)의 개개의 복수의 이미지 샘플들의 개개의 복수의 이미지 샘플을 저장하기 위한 복수의 저장 위치들(709)을 포함하는, 제1 버퍼(705)에 커플링된 제2 버퍼(708); 복수의 시프트 레지스터들(712); 복수의 연결들(718)을 포함하는 인터커넥트 네트워크(710) ― 각각의 연결(718)은 복수의 시프트 레지스터들(712)의 개개의 시프트 레지스터를 복수의 저장 위치들(709) 중 하나 초과에 커플링하고, 복수의 저장 위치들(709) 중 하나 이상은 복수의 연결들(718) 중 하나 초과에 커플링됨 ― ; 복수의 연결들(718)에 기초하여 복수의 시프트 레지스터들(712)에 복수의 이미지 샘플들을 로딩(1608)하고 이미지 샘플들의 복수의 스트림들을 출력하도록 복수의 시프트 레지스터들(712)을 시프트(1616)하게 구성된 제어 회로(714)를 포함한다.

Description

일반화된 이미지 프로세싱을 위한 이미지 프리프로세싱
본 개시내용의 예들은 일반적으로 컴퓨팅 시스템들 및 전자 회로들에 관한 것으로, 특히 일반화된 이미지 프로세싱을 위한 이미지 프리프로세싱에 관한 것이다.
머신 러닝은 컴퓨팅 시스템들이 명시적으로 프로그래밍되지 않고도 작동하도록 유도하는 과학이다. 고전적인 머신 러닝은 K-평균 클러스터링, 선형 및 로지스틱 회귀들, 확률론 경사 하강법(stochastic gradient decent), 연관 규칙 러닝 등을 포함한 다양한 클러스터링 및 분류 기술들을 포함한다. 딥 러닝은 머신 러닝의 더 새로운 최선단(frontier)이다. 딥 러닝은 특징 추출 및 변환을 위해 비선형 프로세싱 유닛들의 다수의 층들을 사용하는 머신 러닝 알고리즘의 부류이다. 딥 러닝 알고리즘은 비지도식(unsupervised)(예컨대, 패턴 분석) 또는 지도식(supervised)(예컨대, 분류)일 수 있다. 딥 러닝 알고리즘은 ANN(artificial neural network)(본원에서 "뉴럴 네트워크"로서 지칭됨)의 층들을 사용하여 구현될 수 있다.
일반적으로, 뉴럴 네트워크는 그래프로 연결된 노드들(즉, "뉴런들")의 모음이다. 뉴럴 네트워크의 노드는 가중화된 입력들의 합을 컴퓨팅하고 선택적인 바이어스를 합에 추가한다. 노드의 출력은 최종 합의 함수("활성화 함수"로서 지칭됨)이다. 활성화 함수들의 예는 시그모이드 함수, 쌍곡 탄젠트(tanh) 함수, ReLU(Rectified Linear Unit) 함수 및 항등 함수를 포함한다. 뉴럴 네트워크 모델들은 종종, 특정 토폴로지를 정의하는 노드들의 층들 및 대응하는 가중치들 및 바이어스들로 구조화된다. 가중치들 및 바이어스들은 네트워크 파라미터로서 지칭된다.
일반적으로, 뉴럴 네트워크는 입력 층 및 출력 층을 포함하고, 선택적으로 입력 층과 출력 층 사이에 하나 이상의 숨겨진 층들을 포함할 수 있다. 딥 러닝 애플리케이션들에 사용되는 뉴럴 네트워크는 통상적으로 다수의 숨겨진 층들을 포함하며, 이는 DNN(deep neural network)이라는 용어가 생기게 하였다. 뉴럴 네트워크의 층들은 조밀하게 연결되거나(예컨대, 층의 각각의 노드는 이전 층의 모든 노드들에 완전히 연결됨) 또는 희박하게 연결될 수 있다(예컨대, 층의 각각의 노드는 이전 층의 노드들 중 일부에만 연결됨). CNN(convolutional neural network)은 콘볼루셔널 층들로서 지칭되는 하나 이상의 희박하게 연결된 층들을 포함하는 DNN의 유형이다. CNN은 이미지 또는 비디오 데이터를 프로세싱하는데 매우 적합하다. 다른 유형들의 DNN들은 스피치 및 텍스트 데이터를 프로세싱하는데 매우 적합한 RNN(recurrent neural network)들을 포함한다.
콘볼루션 연산들은 다수의 기술들을 사용하여 수행될 수 있으며, 이는 통상적으로 매우 다수의 DSP(digital signal processor)들을 사용하는 능력, 온-칩 버퍼들의 요건 및/또는 데이터 액세스 패턴들에 의해 제한된다. 하나의 예시적인 콘볼루션 기술은 DSP 어레이로 공급되는 샘플들의 시프트 레지스터를 생성한다. 이 기술은 콘볼루션 윈도우가 입력 이미지의 열들 및 행들을 스킵하는 스트라이딩 또는 확장된 콘볼루션(dilated convolution)들을 사용할 수 없다는 점에서 제한된다. 이는 샘플들을 통해 순차적으로 순환하기 위해 시프트 레지스터들을 사용하는 것과, 입력 이미지에서 샘플들을 스킵하거나 건너뛰는 스트라이드 또는 확장 간의 충돌에 기인한다. 따라서, 병렬 일반화된 콘볼루션들을 컴퓨팅하기 위해 개선된 아키텍처를 제공하는 것이 바람직하다.
이미지 프리프로세싱을 위한 기술들이 설명된다. 일 예에서, 이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하기 위한 프리프로세서 회로는, 이미지 데이터의 복수의 행들을 저장하고 복수의 행들 중의 행을 출력하도록 구성된 제1 버퍼; 제1 버퍼에 의해 출력된 행의 개개의 복수의 이미지 샘플들을 저장하기 위한 복수의 저장 위치들을 포함하는, 제1 버퍼에 커플링된 제2 버퍼; 복수의 시프트 레지스터들; 복수의 연결들을 포함하는 인터커넥트 네트워크 ― 각각의 연결은 복수의 시프트 레지스터들의 개개의 시프트 레지스터를 복수의 저장 위치들 중 하나 초과에 커플링하고, 복수의 저장 위치들 중 하나 이상은 복수의 연결들 중 하나 초과에 커플링됨 ― ; 및 복수의 연결들에 기초하여 복수의 시프트 레지스터들에 복수의 이미지 샘플들을 로딩하고 이미지 샘플들의 복수의 스트림들을 출력하도록 복수의 시프트 레지스터들을 시프트하게 구성된 제어 회로를 포함한다.
일부 실시예들에서, 복수의 연결들은 복수의 제1 연결들일 수 있다. 인터커넥트 네트워크는 복수의 멀티플렉서들을 포함할 수 있다. 각각의 멀티플렉서는 복수의 제1 연결들 중 개개의 연결에 커플링된 제1 입력, 및 복수의 시프트 레지스터들의 개개의 시프트 레지스터에 커플링된 출력을 포함할 수 있다.
일부 실시예들에서, 인터커넥트 네트워크는 복수의 제2 연결들을 포함할 수 있다. 각각의 제2 연결은 복수의 저장 위치들 중 하나 초과를 복수의 멀티플렉서들의 개개의 멀티플렉서의 제2 입력에 커플링할 수 있다. 복수의 저장 위치들 중 하나 이상은 복수의 제2 연결들 중 하나 초과에 커플링될 수 있다.
일부 실시예들에서, 제어 회로는 복수의 제1 연결들 또는 복수의 제2 연결들 중 하나를 선택하도록 복수의 멀티플렉서들을 제어하기 위해 인터커넥트 네트워크의 모드를 세팅하도록 구성될 수 있다.
일부 실시예들에서, 각각의 연결은 복수의 시프트 레지스터들의 개개의 시프트 레지스터를 복수의 저장 위치들의 상이한 패턴에 커플링할 수 있다.
일부 실시예들에서, 복수의 연결들 중 제1 연결을 통해 복수의 시프트 레지스터들의 제1 시프트 레지스터에 커플링된 복수의 저장 위치들의 패턴은, 복수의 연결들 중 제2 연결을 통해 복수의 시프트 레지스터들 중 제2 시프트 레지스터에 커플링된 복수의 저장 위치들의 패턴과 오버랩할 수 있다.
일부 실시예들에서, 복수의 저장 위치들의 상이한 패턴들은 이미지 데이터와 필터 사이의 콘볼루션(convolution)의 파라미터들에 의해 정의될 수 있고, 파라미터들은 필터의 폭, 수평 스트라이드 및 수평 확장을 포함한다.
다른 예에서, IC(integrated circuit)는, 이미지 데이터가 내부에 저장되어 있는 메모리에 액세스하도록 구성된 메모리 제어기; 메모리 제어기에 커플링되고, 이미지 데이터를 획득하고 이미지 데이터로부터 이미지 샘플들의 복수의 스트림들을 생성하도록 구성된 이미지 프리프로세서; 및 이미지 프리프로세서에 커플링되고, 이미지 샘플들의 복수의 스트림들을 프로세싱하도록 구성된 프로세서를 포함한다. 이미지 프리프로세서는, 이미지 데이터의 복수의 행들을 저장하고 복수의 행들 중의 행을 출력하도록 구성된 제1 버퍼; 제1 버퍼에 의해 출력된 행의 개개의 복수의 이미지 샘플들을 저장하기 위한 복수의 저장 위치들을 포함하는, 제1 버퍼에 커플링된 제2 버퍼; 복수의 시프트 레지스터들; 복수의 연결들을 포함하는 인터커넥트 네트워크 ― 각각의 연결은 복수의 시프트 레지스터들의 개개의 시프트 레지스터를 복수의 저장 위치들 중 하나 초과에 커플링하고, 복수의 저장 위치들 중 하나 이상은 복수의 연결들 중 하나 초과에 커플링됨 ― ; 및 복수의 연결들에 기초하여 복수의 시프트 레지스터들에 복수의 이미지 샘플들을 로딩하고 이미지 샘플들의 복수의 스트림들을 출력하도록 복수의 시프트 레지스터들을 시프트하게 구성된 제어 회로를 포함한다.
일부 실시예들에서, 복수의 연결들은 복수의 제1 연결들일 수 있다. 인터커넥트 네트워크는 복수의 멀티플렉서들을 포함할 수 있다. 각각의 멀티플렉서는 복수의 제1 연결들 중 개개의 연결에 커플링된 제1 입력, 및 복수의 시프트 레지스터들의 개개의 시프트 레지스터에 커플링된 출력을 포함할 수 있다.
일부 실시예들에서, 인터커넥트 네트워크는 복수의 제2 연결들을 포함할 수 있다. 각각의 제2 연결은 복수의 저장 위치들 중 하나 초과를 복수의 멀티플렉서들의 개개의 멀티플렉서의 제2 입력에 커플링할 수 있다. 복수의 저장 위치들 중 하나 이상은 복수의 제2 연결들 중 하나 초과에 커플링될 수 있다.
일부 실시예들에서, 제어 회로는 복수의 제1 연결들 또는 복수의 제2 연결들 중 하나를 선택하도록 복수의 멀티플렉서들을 제어하기 위해 인터커넥트 네트워크의 모드를 세팅하도록 구성될 수 있다.
일부 실시예들에서, 각각의 연결은 복수의 시프트 레지스터들의 개개의 시프트 레지스터를 복수의 저장 위치들의 상이한 패턴에 커플링할 수 있다.
일부 실시예들에서, 복수의 연결들 중 제1 연결을 통해 복수의 시프트 레지스터들의 제1 시프트 레지스터에 커플링된 복수의 저장 위치들의 패턴은, 복수의 연결들 중 제2 연결을 통해 복수의 시프트 레지스터들 중 제2 시프트 레지스터에 커플링된 복수의 저장 위치들의 패턴과 오버랩할 수 있다.
일부 실시예들에서, 복수의 저장 위치들의 상이한 패턴들은 이미지 데이터와 필터 사이의 콘볼루션의 파라미터들에 의해 정의될 수 있고, 파라미터들은 필터의 폭, 수평 스트라이드 및 수평 확장을 포함한다.
일부 실시예들에서, 프로세서는 데이터 프로세싱 유닛들의 시스토릭 어레이(systolic array)일 수 있다.
다른 예에서, 이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하는 방법은, 제1 버퍼에서, 이미지 데이터의 복수의 행들을 저장하고 복수의 행들 중의 행을 출력하는 단계; 제1 버퍼에 의해 출력된 행의 개개의 복수의 이미지 샘플들을, 복수의 저장 위치들을 갖는 제2 버퍼에 저장하는 단계; 인터커넥트 네트워크의 복수의 연결들에 기초하여 복수의 시프트 레지스터들에 복수의 이미지 샘플들을 로딩하는 단계 ― 각각의 연결은 복수의 시프트 레지스터들의 개개의 시프트 레지스터를 복수의 저장 위치들 중 하나 초과에 커플링하고, 복수의 저장 위치들 중 하나 이상은 복수의 연결들 중 하나 초과에 커플링됨 ― ; 및 이미지 샘플들의 복수의 스트림들을 출력하도록 복수의 시프트 레지스터들을 시프트하는 단계를 포함한다 .
일부 실시예들에서, 각각의 연결은 복수의 시프트 레지스터들의 개개의 시프트 레지스터를 복수의 저장 위치들의 상이한 패턴에 커플링할 수 있다.
일부 실시예들에서, 복수의 저장 위치들의 상이한 패턴들은 이미지 데이터와 필터 사이의 콘볼루션의 파라미터들에 의해 정의될 수 있고, 파라미터들은 필터의 폭, 수평 스트라이드 및 수평 확장을 포함한다.
일부 실시예들에서, 복수의 연결들은 복수의 제1 연결들일 수 있다. 인터커넥트 네트워크는 복수의 멀티플렉서들을 포함할 수 있다. 각각의 멀티플렉서는 복수의 제1 연결들 중 개개의 연결에 커플링된 제1 입력, 및 복수의 시프트 레지스터들의 개개의 시프트 레지스터에 커플링된 출력을 포함할 수 있다.
일부 실시예들에서, 인터커넥트 네트워크는 복수의 제2 연결들을 포함할 수 있다. 각각의 제2 연결은 복수의 저장 위치들 중 하나 초과를 복수의 멀티플렉서들의 개개의 멀티플렉서의 제2 입력에 커플링한다. 복수의 저장 위치들 중 하나 이상은 복수의 제2 연결들 중 하나 초과에 커플링될 수 있다.
이들 및 다른 양상들은 다음의 상세한 설명을 참조하여 이해될 수 있다.
위에서 인용된 특징들은 상세하게 이해될 수 있는 방식으로, 위에서 간략하게 요약되는 더 구체적인 설명은 예시적인 구현들을 참조하여 행해질 수 있는데, 이들 중 일부는 첨부된 도면들에서 예시된다. 그러나, 첨부된 도면들은 단지 통상적인 예시적인 구현들을 예시하며, 이에 따라 그의 범위를 제한하는 것으로 간주되지 않아야 하다는 것에 주의한다.
도 1은 일 예에 따라 뉴럴 네트워크들을 구현하기 위한 시스템을 도시하는 블록도이다.
도 2는 일 예에 따른 컴퓨팅 시스템을 도시하는 블록도이다.
도 3은 일 예에 따른 가속 회로를 도시하는 블록도이다.
도 4는 일 예에 따른 프로그래밍 가능 IC(integrated circuit)를 도시하는 블록도이다.
도 5는 일 예에 따른 프로그래밍 가능 IC의 FPGA(field programmable gate array) 구현을 예시한다.
도 6은 일 예에 따른 콘볼루션 프로세서를 도시하는 블록도이다.
도 7은 일 예에 따른 이미지 프리프로세서를 도시하는 블록도이다.
도 8a는 일 예에 따라, 콘볼루션 연산을 위한 입력 이미지 데이터, 필터 데이터 및 출력 이미지 데이터를 예시한다.
도 8b는 2-차원 행렬 곱셈 연산의 관점에서 콘볼루션을 예시한다.
도 9는 일 예에 따라, 도 7의 이미지 프리프로세서에 의해 입력 이미지 데이터를 프로세싱하는 방법을 예시한다.
도 10은 일 예에 따라, 도 7의 이미지 프리프로세서를 보다 상세히 도시하는 블록도이다.
도 11은 예시적인 입력 이미지 및 일 세트의 수용 필드들을 예시한다.
도 12a는 일 예에 따라, 인터커넥트 네트워크의 구성을 도시하는 블록도이다.
도 12b는 도 12a의 예에 따라, 행 버퍼와 시프트 레지스터들 사이의 연결들의 논리적 어레인지먼트를 도시하는 블록도이다.
도 13은 도 12a의 예에서 시프트 레지스터들에 의해 출력된 샘플 스트림들을 예시한다.
도 14a는 다른 예에 따라, 인터커넥트 네트워크의 구성을 도시하는 블록도이다.
도 14b는 도 14a의 예에 따라, 행 버퍼와 시프트 레지스터들 사이의 연결들의 논리적 어레인지먼트를 도시하는 블록도이다.
도 15는 다른 예에 따라, 행 버퍼와 시프트 레지스터들 사이의 연결들의 논리적 어레인지먼트를 도시하는 블록도이다.
도 16은 일 예에 따라, 도 7의 이미지 프리프로세서의 동작의 방법을 도시하는 흐름도이다.
도 17은 일 예에 따라, 도 7의 이미지 프리프로세서를 설계하는 방법을 도시하는 흐름도이다.
이해를 용이하게 하기 위하여, 동일한 참조 번호들은 가능한 경우, 도면들에 공통적인 동일한 엘리먼트들을 지정하기 위해 사용되었다. 일 예의 엘리먼트들은 다른 예들에서 유리하게 통합될 수 있는 것으로 고려된다.
다양한 특징들이 도면들을 참조하여 아래에서 설명된다. 도면들은 실척대로 그려지거나 실척대로 그려진 것은 아닐 수 있고 유사한 구조들 또는 기능들의 엘리먼트들은 도면들 전체에 걸쳐 유사한 참조 번호들로 표현된다는 것이 주의되어야 한다. 도면들은 단지 특징들의 설명을 용이하게 하기 위한 것으로 의도된다는 것이 주의되어야 한다. 이들은 청구된 발명의 철저한 설명으로서 또는 청구된 발명의 범위에 대한 제한으로서 의도되지 않는다. 또한, 예시된 예는 도시된 모든 양상들 또는 이점들을 가질 필요는 없다. 특정 예와 관련하여 설명된 양상 또는 이점은 반드시 그 예로 제한되는 것은 아니며, 만약 그렇게 예시되지는 않거나 만약 명시적으로 설명되지 않더라도 임의의 다른 예들에서 실시될 수 있다.
이미지 프리프로세싱을 위한 기술들이 설명된다. 이미지 프리프로세서는 콘볼루션과 같은 이미지 프로세싱 연산들을 수행하기 위해 매 클록 사이클마다 매우 다수의 데이터 샘플들을 생성할 수 있는 멀티플렉서들, 버퍼들 및 시프트 레지스터들의 아키텍처를 포함한다. 아키텍처는 입력 이미지 데이터의 스트라이딩된 또는 확장된 액세스 패턴들을 지원한다. 아키텍처는 대형 시스토릭 어레이(systolic array)를 사용하여 콘볼루션과 같은 이미지 프로세싱의 구현을 허용하며, 이는 CNN(convolutional neural network)들을 구현하는 데 특히 유용하다. 콘볼루션에 대해, 아키텍처는 최소 버퍼들, 최소 로직 레벨들, 및 메모리 대역폭의 감소를 갖는 최대 효율로 콘볼루션이 실행되게 하기 위해 콘볼루셔널 크기와 입력 이미지를 판독하는 메모리 레이턴시의 균형을 맞춘다. 아키텍처는 또한 최소 영역 페널티로 다양한 콘볼루셔널 필터 크기들을 지원하며, 이는 콘볼루셔널 필터 크기들을 동적으로 변경하는 CNN들에 대해 유리하다. 아키텍처의 이들 및 추가의 양상들이 도면들과 관련하여 아래에서 설명된다.
도 1은 일 예에 따라 뉴럴 네트워크들을 구현하기 위한 시스템(100)을 도시하는 블록도이다. 시스템(100)은 컴퓨터 시스템(102) 및 하나 이상의 컴퓨터 시스템들(108)을 포함한다. 컴퓨터 시스템(102)은 하나 이상의 설계 툴들(104)을 제공하는 소프트웨어를 실행하도록 구성된 종래의 컴퓨팅 컴포넌트들을 포함한다. 각각의 컴퓨터 시스템(108)은 하나 이상의 뉴럴 네트워크들(110)을 실행한다. 뉴럴 네트워크(들)(110)는 애플리케이션들(112), 가속 라이브러리들(114) 및 하나 이상의 하드웨어 가속기들(116)을 사용하여 구현된다.
일 예에서, 하드웨어 가속기(들)(116)는 FPGA(field programmable gate array)들과 같은 프로그래밍 가능 집적 회로(IC)들을 포함한다. 가속 라이브러리들(114)은 하드웨어 가속기(들)(116)과 인터페이싱하기 위한 API(application programming interface)들을 제공한다. 가속 라이브러리들(114)은 또한, 뉴럴 네트워크 층들 및 다른 유형들의 뉴럴 네트워크 구조들의 미리 정의되고 최적화된 구현들을 포함하여, 뉴럴 네트워크 기능들을 제공하는 라이브러리들을 포함할 수 있다. 따라서, 뉴럴 네트워크(들)(110)는 하드웨어 가속기(들)(116)에 구현된 하드웨어 부분들뿐만 아니라, 가속 라이브러리들(114)에 구현된 소프트웨어 부분들 둘 모두를 포함할 수 있다. 애플리케이션들(112)은 뉴럴 네트워크(들)(116)를 구현하기 위해 하드웨어 가속기(들)(116)를 프로그래밍 및 제어하도록 가속 라이브러리들(114)의 API들을 인보크한다.
설계자는 뉴럴 네트워크(들)(110)를 정의하기 위해 설계 툴(들)(104)과 상호작용한다. 설계 툴(들)(104)은 하드웨어 가속기(들)(116)를 프로그래밍하기 위한 파일들(예컨대, FPGA를 위한 구성 비트스트림들), 가속 라이브러리들(114)을 제공하는 파일들, 및 애플리케이션들(112)을 제공하는 파일들을 생성할 수 있다. 설계자는 RTL(register transfer language)를 사용하여 또는 C, C++, OpenCL 등과 같은 프로그래밍 언어, 또는 RTL과 프로그래밍 가능 언어(들)의 조합을 사용하여 뉴럴 네트워크(들)(110)의 하드웨어 부분들을 정의할 수 있다. 사용자는 C, C++, OpenCL 등과 같은 프로그래밍 언어를 사용하여 뉴럴 네트워크(들)(110)의 소프트웨어 부분들을 정의할 수 있다. 설계 툴(들)(104)은 소프트웨어-정의 뉴럴 네트워크들을 컴파일하여 하드웨어 가속기(들)(116)를 프로그래밍하기 위한 파일들 및 가속 라이브러리들(114)을 위한 라이브러리 파일들을 생성한다. 설계자는 뉴럴 네트워크(들)(110)의 하드웨어 및 소프트웨어 부분들의 개발을 보조하기 위해 클래스 라이브러리들, 템플릿 라이브러리들 등을 제공하는 라이브러리들(106)을 이용할 수 있다.
사용자는 프로그래밍 언어(예컨대, C, C++, Python 등)를 사용하여 애플리케이션들(112)을 정의할 수 있다. 사용자는 Caffe, TensorFlow, MXNet 등과 같은 뉴럴 네트워크 프레임워크들 및 라이브러리들을 사용할 수 있다.
도 2는 일 예에 따른 컴퓨팅 시스템(108)을 도시하는 블록도이다. 컴퓨팅 시스템(108)은 하드웨어(204) 및 하드웨어(204) 상에서 실행되는 소프트웨어(206)를 포함한다. 하드웨어(204)는 프로세싱 시스템(210), 시스템 메모리(1216), 저장 디바이스들("저장소(218)") 및 하드웨어 가속기(116)를 포함한다. 소프트웨어(206)는 운영 체제(OS)(244), 가속 라이브러리들(114) 및 애플리케이션들(112)을 포함한다.
프로세싱 시스템(210)은 마이크로프로세서(212), 지원 회로들(214) 및 주변 장치 버스(215)를 포함한다. 마이크로프로세서(212)는 x86-기반 프로세서, ARM®-기반 프로세서 등과 같은 임의의 유형의 범용 CPU(central processing unit)일 수 있다. 마이크로프로세서(212)는 하나 이상의 코어들 및 연관된 회로(예컨대, 캐시 메모리들, MMU(memory management unit)들, 인터럽트 제어기들 등)를 포함할 수 있다. 마이크로프로세서(212)는 시스템 메모리(216) 및/또는 저장소(218)에 저장될 수 있고 본원에서 설명되는 하나 이상의 동작들을 수행하는 프로그램 코드를 실행하도록 구성된다. 지원 회로들(214)은, 마이크로프로세서(212), 시스템 메모리(216), 저장소(218), 하드웨어 가속기(116) 또는 임의의 다른 주변 디바이스 사이의 데이터 흐름을 관리하기 위해 마이크로프로세서(212)와 협력하는 다양한 디바이스들을 포함한다. 예컨대, 지원 회로들(214)은 칩셋(예컨대, 노스 브리지, 사우스 브리지, 플랫폼 호스트 제어기 등), 전압 레귤레이터들, 펌웨어(예컨대, BIOS) 등을 포함할 수 있다. 지원 회로들(214)은 하드웨어 가속기(116)와 같은 다양한 주변 장치들이 연결된 주변 장치 버스(215)와 마이크로프로세서(212) 사이의 데이터 흐름을 관리한다. 일부 예들에서, 마이크로프로세서(212)는 칩셋(예컨대, 노스 브리지, 사우스 브리지 등)의 기능성의 전부 또는 상당 부분을 흡수하는 SiP(System-in-Package), SoC(System-on-Chip) 등일 수 있다. 주변 장치 버스는 PCIe(Peripheral Component Interconnect Express)와 같은 확장 버스 표준을 구현할 수 있다. 이 예에서, 프로세싱 시스템(210)은 하드웨어 가속기(116)와 별개로 도시된다. 아래에서 추가로 논의되는 다른 예들에서, 프로세싱 시스템(210) 및 하드웨어 가속기(116)는 SoC(System-On-Chip)를 사용하여 동일한 집적 회로(IC) 상에서 구현될 수 있다.
시스템 메모리(216)는 실행 가능 명령들 및 데이터와 같은 정보가 저장 및 리트리브될 수 있게 하는 디바이스이다. 시스템 메모리(216)는 예컨대, DDR(double-data rate) 동적 RAM(random access memory)(DRAM)과 같은 하나 이상의 RAM 모듈들을 포함할 수 있다. 저장 디바이스(218)는 로컬 저장 디바이스들(예컨대, 하나 이상의 하드 디스크들, 플래시 메모리 모듈들, 솔리드 스테이트 디스크들 및 광학 디스크들), 및/또는 컴퓨팅 시스템(108)이 하나 이상의 네트워크 데이터 저장 시스템들과 통신하는 것을 가능하게 하는 저장 인터페이스를 포함한다. 하드웨어(204)는 컴퓨팅 시스템의 다양한 다른 종래의 디바이스들 및 주변 장치들, 이를테면, 그래픽 카드들, USB(universal serial bus) 인터페이스들 등을 포함할 수 있다.
하드웨어 가속기(116)는 프로그래밍 가능 IC(228), 비-휘발성 메모리(224) 및 RAM(226)을 포함한다. 프로그래밍 가능 IC(228)는 FPGA 등 또는 FPGA를 갖는 SoC 등일 수 있다. NVM(224)은 플래시 메모리 등과 같은 임의의 유형의 비-휘발성 메모리를 포함할 수 있다. RAM(226)은 DDR DRAM 등을 포함할 수 있다. 프로그래밍 가능 IC(228)는 NVM(224) 및 RAM(226)에 커플링된다. 프로그래밍 가능 IC(228)는 또한 프로세싱 시스템(210)의 주변 장치 버스(215)에 커플링된다.
OS(244)는 Linux®, Microsoft Windows®, Mac OS® 등과 같이 당업계에 알려진 임의의 상용 운영 체제(commodity operating system)일 수 있다. 가속 라이브러리들(114)은 하드웨어 가속기(116)의 커맨드 및 제어를 위한 API들을 제공하는 드라이버들 및 라이브러리들을 포함한다. 애플리케이션들(112)은 뉴럴 네트워크(들)를 구현하기 위해 가속 라이브러리들(114)의 API들을 인보크하는, 마이크로프로세서(212) 상에서 실행되는 소프트웨어를 포함한다.
동작에서, 프로그래밍 가능 IC(228)는 가속 회로(230)로 구성된다. 가속 회로(230)는 일반적으로 베이스 플랫폼(230A) 및 커널(230B)을 포함한다. 예컨대, 가속 회로(230)는 정적 구역(234) 및 프로그래밍 가능 구역(236)을 사용하여 구현될 수 있다. 정적 구역(234)은 주변 장치 버스(215), NVM(224) 및 RAM(226)에 대한 인터페이스를 제공하기 위한 지원 회로들(240)을 포함한다. 프로그래밍 가능 구역(236)은 하나 이상의 커널 회로들("커널(들)(238)")을 포함할 수 있다. 베이스 플랫폼(230A)은 정적 구역(234)을 사용하여 구현되고, 커널(230B)은 프로그래밍 가능 구역(236)을 사용하여 구현된다. 다른 예에서, 베이스 플랫폼(230A)은 또한 프로그래밍 가능 구역(236)의 일부를 사용하여 구현될 수 있다. 따라서, 일부 예들에서, 프로그래밍 가능 구역(236)은 또한 일부 인터페이스 회로들을 포함한다. 일부 예들에서, 가속 회로(230)는 하나 초과의 프로그래밍 가능 구역(236)을 포함할 수 있으며, 이들 각각은 커널(들)(238)로 개별적으로 구성될 수 있다.
정적 구역(234)은 그의 회로가 프로그래밍 가능 구역(236)의 재구성들에 걸쳐 일정하게 유지된다는 점에서 "정적"이다. 일 예에서, 지원 회로들(240)은 PCIe 엔드포인트 회로들, DMA(direct memory access) 제어기, 인터커넥트들, 메모리 제어기, 메모리 인터페이스 회로(예컨대, DDR 인터페이스), (부분 재구성을 지원하기 위한) 디커플러 회로들, 플래시 프로그래머, 디버그 회로들 등을 포함한다. 일부 예들에서, 프로그래밍 가능 구역(236)은 지원 회로들(240) 중 어느 것도 포함하지 않는다. 다른 예들에서, 일부 지원 회로들은 프로그래밍 가능 구역(236)에서 구현된다. 그러한 경우에, 프로그래밍 가능 구역(236)은 "확장된 프로그래밍 가능 구역"으로서 지칭될 수 있다. 어느 경우든, 일 예에서, PCIe 회로들 및 DMA 회로들과 같은 일부 지원 회로들(240)은 항상, 정적 구역(234)에 존재한다.
도 3은 일 예에 따른 가속 회로(230)를 도시하는 블록도이다. 가속 회로(230)는 지원 회로들(240) 및 커널(238)을 포함한다. 이 예에서, 지원 회로들(240)은 PCIe 엔드포인트 회로("PCIe 엔드포인트(302)"), PCIe DMA 제어기(304), 인터커넥트 회로들("인터커넥트(306)"), 메모리 제어기들(310) 및 메모리 인터페이스들(312)을 포함한다. 지원 회로들(240)은 명확성을 위해 생략된 다른 회로들(예컨대, 디커플러 회로들, 디버그 회로들 등)을 포함할 수 있다. PCIe 엔드포인트(302)는 주변 장치 버스(215)에 대한 물리적 인터페이스를 제공한다. PCIe DMA 제어기(304)는 RAM(226) 및 커널(238)에 대한 DMA 동작들을 용이하게 한다. 인터커넥트(306)는 PCIe DMA 제어기(304)를 메모리 제어기들(310) 및 커널(238)에 커플링한다. 메모리 제어기들(310)은 메모리 인터페이스들(312)에 커플링된다. 메모리 인터페이스들(312)은 RAM(226)에 커플링된다.
동작에서, 가속 라이브러리들(246)은 PCIe DMA 제어기(304)를 통해 RAM(226)에 직접 액세스할 수 있다. 가속 라이브러리들(246)은 또한 PCIe DMA 제어기(304)를 통해 커널(238)에 액세스할 수 있다. 커널(238)은 메모리 제어기들(310)을 통해 RAM(226)에 액세스할 수 있다. 시스템 메모리(216)와 RAM(226) 사이의 DMA 동작들을 사용하여 소프트웨어(206)와 커널(238) 사이에서 데이터가 교환될 수 있다.
이 예에서, 커널(238)은 인터페이스들(330, 331 및 332)을 사용하여 인터커넥트(306)와 통신한다. 특히, 이들 인터페이스들은 제1 판독 인터페이스(330), 제2 판독 인터페이스(331) 및 판독/기록 인터페이스(332)를 포함한다. 예컨대, 판독 인터페이스(330)는 커널(238)을 제어하기 위한 제어 인터페이스로서 사용될 수 있다. 판독 인터페이스(331)는 메모리 인터페이스들(312) 중 제1 인터페이스를 통해 RAM(226)으로부터 판독하는 데 사용될 수 있다. 판독/기록 인터페이스(332)는 메모리 인터페이스들(312) 중 제2 인터페이스를 통해 RAM(226)으로부터 판독 및 기록하는 데 사용될 수 있다.
커널(238)은 인터커넥트 인터페이스(304), 제어 로직(342) 및 프로세싱 회로들(341)을 포함한다. 프로세싱 회로들(341)은, IM2COL 회로("IM2COL(344)"), 판독 제어 회로("판독 제어(346)"), 멀티플렉서(356), 선입 선출 회로("FIFO들(358)"), DSP(digital signal processor) 어레이(362), 스케일러 회로("스케일러(364)"), 최대 풀 회로(max pool circuit)("최대 풀(366)"), 멀티플렉서(368), FIFO들(354), 기록 제어 회로("기록 제어(352)"), 캐시(348), 판독 제어 회로("판독 제어(350)") 및 FIFO들(360)을 포함한다. 인터커넥트 인터페이스(340)는 인터페이스들(330, 331 및 332), 제어 로직(342) 및 프로세싱 회로들(341)에 커플링된다. 인터커넥트 인터페이스(340)는 제어 로직(342)과 인터페이스들(330) 사이뿐만 아니라 프로세싱 회로들(341)과 인터페이스들(331 및 332) 사이의 통신을 용이하게 하기 위해 스위치들, 클록 변환기들 등을 포함할 수 있다.
이 예에서, 인터커넥트 인터페이스(340)는 IM2COL 회로(344), 판독 제어 회로(346), 캐시(348) 및 기록 제어 회로(352)의 입력들에 커플링된다. IM2COL 회로(344) 및 판독 제어 회로(346)의 출력들은 멀티플렉서(356)의 입력들에 커플링된다. 멀티플렉서(356)의 출력은 FIFO들(358)의 입력에 커플링된다. FIFO들(358)의 출력은 DSP 어레이(362)의 제1 입력에 커플링된다. 캐시(348)의 출력은 판독 제어 회로(350)의 입력에 커플링된다. 판독 제어 회로(350)의 출력은 FIFO들(360)의 입력에 커플링된다. FIFO들(360)의 출력은 DSP 어레이(362)의 제2 입력에 커플링된다. DSP 어레이(362)의 출력은 스케일러(364)의 입력에 커플링된다. 스케일러(364)의 출력은 최대 풀 회로(366)의 입력 및 멀티플렉서(368)의 입력에 커플링된다. 최대 풀 회로(366)의 출력은 멀티플렉서(368)의 다른 입력에 커플링된다. 멀티플렉서(368)의 출력은 FIFO들(354)의 입력에 커플링된다. FIFO들(354)의 출력은 기록 제어 회로(352)에 커플링된다.
동작에서, DSP 어레이(362)는 뉴럴 네트워크를 구현하기 위한 행렬 곱셈 연산들을 수행한다. DSP 어레이(362)의 입력들은 FIFO들(358)로부터 입력 활성화 행렬들을 그리고 FIFO들(360)로부터 가중치 행렬들을 수신한다. 입력 활성화 행렬들은 판독 제어 회로(346)를 사용하여 RAM(226)으로부터 직접 판독될 수 있다. 대안적으로, 입력 활성화들은 RAM(226)으로부터 판독되고 DSP 어레이(362)로의 입력을 위해 IM2COL 회로(344)에 의해 프로세싱될 수 있다. IM2COL 회로(344)의 실시예들이 아래에서 설명된다. 가중치 행렬들은 판독 제어 회로(350)에 의해 RAM(226)으로부터 판독되고 캐시(348)에 캐싱될 수 있다. 스케일러(364)는 DSP 어레이(362)의 출력을 스케일링할 수 있다. 최대 풀 회로(366)는 DSP 어레이(362)의 스케일링된 출력 상에서 최대 풀링 기능을 구현할 수 있다. 일 예에서, 최대 풀 회로(966)는 CLB들 또는 다른 구성 가능한 로직을 사용하여 구현된다. 최대 풀 회로(366) 또는 스케일러(364)의 출력은 FIFO들(354)에 저장될 수 있다. 기록 제어 회로(352)는 FIFO들의 데이터를 RAM(226)에 기록한다. 제어 로직(342)은 프로세싱 회로들(341) 내의 다양한 회로들 이를테면, IM2COL 회로(344), 판독 제어 회로(346), 멀티플렉서들(356 및 368), 판독 제어 회로(350) 및 스케일러(364), 최대 풀 회로(366), 및 기록 제어 회로(352)를 제어한다.
도 4는 일 예에 따른 프로그래밍 가능 IC(228)를 도시하는 블록도이다. 프로그래밍 가능 IC(228)는 프로그래밍 가능 로직(3), 구성 로직(25) 및 구성 메모리(26)를 포함한다. 프로그래밍 가능 IC(228)는 NVM(224), RAM(226) 및 다른 회로들(29)과 같은 외부 회로들에 커플링될 수 있다. 프로그래밍 가능 로직(3)은 로직 셀들(30), 지원 회로들(31) 및 프로그래밍 가능 인터커넥트(32)를 포함한다. 로직 셀들(30)은 복수의 입력들의 일반 로직 기능들을 구현하도록 구성될 수 있는 회로들을 포함한다. 지원 회로들(31)은 전용 회로들 이를테면, 트랜시버들, 입력/출력 블록들, 디지털 신호 프로세서들, 메모리들 등을 포함한다. 로직 셀들 및 지원 회로들(31)은 프로그래밍 가능 인터커넥트(32)를 사용하여 상호연결될 수 있다. 로직 셀들(30)을 프로그래밍하고, 지원 회로들(31)의 파라미터들을 세팅하고, 프로그래밍 가능 인터커넥트(32)를 프로그래밍하기 위한 정보는 구성 로직(25)에 의해 구성 메모리(26)에 저장된다. 구성 로직(25)은 비휘발성 메모리(224) 또는 임의의 다른 소스(예컨대, DRAM(28) 또는 다른 회로들(29))로부터 구성 데이터를 획득할 수 있다. 일부 예들에서, 프로그래밍 가능 IC(228)는 프로세싱 시스템(2)을 포함한다. 프로세싱 시스템(2)은 마이크로프로세서(들), 메모리, 지원 회로들, IO 회로들 등을 포함할 수 있다. 예컨대, 프로세싱 시스템(2)은 프로세싱 시스템(210)과 유사한 회로들을 포함할 수 있다. 일부 예들에서, 프로세싱 시스템(2)은 프로세싱 시스템(210) 대신에 사용될 수 있다. 그러한 경우에, 전체 컴퓨팅 시스템(108)은 프로그래밍 가능 IC(228)를 사용하여 구현될 수 있으며, 여기서 소프트웨어(206)는 프로세싱 시스템(2) 상에서 실행된다.
도 5는, 트랜시버들(37), 구성 가능한 로직 블록들("CLB들")(33), 랜덤 액세스 메모리 블록들("BRAM들")(34), 입력/출력 블록들("IOB들")(36), 구성 및 클로킹 로직("CONFIG/CLOCK들")(42), 디지털 신호 프로세싱 블록들("DSP들")(35), 특수 입력/출력 블록들("I/O")(41)(예컨대, 구성 포트들 및 클록 포트들), 및 디지털 클록 관리자들, 아날로그-디지털 변환기들, 시스템 모니터링 로직 등과 같은 다른 프로그래밍 가능 로직(39)을 포함하는 매우 다수의 상이한 프로그래밍 가능 타일들을 포함하는 프로그래밍 가능 IC(228)의 FPGA 구현을 예시한다. FPGA는 또한 PCIe 인터페이스들(40), ADC(analog-to-digital converter)들(38) 등을 포함할 수 있다.
일부 FPGA들에서, 각각의 프로그래밍 가능 타일은 도 5의 상단에 포함된 예들에 의해 도시된 바와 같이, 동일한 타일 내의 프로그래밍 가능 로직 엘리먼트의 입력 및 출력 단자들(48)에 대한 연결들을 갖는 적어도 하나의 프로그래밍 가능 인터커넥트 엘리먼트("INT")(43)를 포함할 수 있다. 각각의 프로그래밍 가능 인터커넥트 엘리먼트(43)는 또한 동일한 타일 또는 다른 타일(들)의 인접한 프로그래밍 가능 인터커넥트 엘리먼트(들)의 인터커넥트 세그먼트들(49)에 대한 연결들을 포함할 수 있다. 각각의 프로그래밍 가능 인터커넥트 엘리먼트(43)는 또한 로직 블록들(도시되지 않음) 사이의 일반적인 라우팅 자원들의 인터커넥트 세그먼트들(50)에 대한 연결들을 포함할 수 있다. 일반적인 라우팅 자원들은 인터커넥트 세그먼트들(예컨대, 인터커넥트 세그먼트들(50))의 트랙들을 포함하는 로직 블록들(도시되지 않음)과 인터커넥트 세그먼트들을 연결하기 위한 스위치 블록들(도시되지 않음) 사이의 라우팅 채널들을 포함할 수 있다. 일반적인 라우팅 자원들의 인터커넥트 세그먼트들(예컨대, 인터커넥트 세그먼트들(50))은 하나 이상의 로직 블록들에 걸쳐 있을 수 있다. 일반적인 라우팅 자원들과 함께 취해지는 프로그래밍 가능 인터커넥트 엘리먼트들(43)은 예시된 FPGA를 위한 프로그래밍 가능 인터커넥트 구조("프로그래밍 가능 인터커넥트")를 구현한다.
예시적인 구현에서, CLB(33)는 단일 프로그래밍 가능 인터커넥트 엘리먼트("INT")(43)에 더하여, 사용자 로직을 구현하도록 프로그래밍될 수 있는 구성 가능한 로직 엘리먼트("CLE")(44)를 포함할 수 있다. BRAM(34)은 하나 이상의 프로그래밍 가능 인터커넥트 엘리먼트 외에도, BRAM 로직 엘리먼트("BRL")(45)를 포함할 수 있다. 통상적으로, 타일에 포함된 인터커넥트 엘리먼트들의 수는 타일의 높이에 의존한다. 도시된 예에서, BRAM 타일은 5개의 CLB들과 동일한 높이를 갖지만, 다른 수들(예컨대, 4개)이 또한 사용될 수 있다. DSP 타일(35)은 적절한 수의 프로그래밍 가능 인터커넥트 엘리먼트들 외에도, DSP 로직 엘리먼트("DSPL")(46)를 포함할 수 있다. IOB(36)는 예컨대, 프로그래밍 가능 인터커넥트 엘리먼트(43)의 하나의 인스턴스 외에도, 입력/출력 로직 엘리먼트("IOL")(47)의 2개의 인스턴스들을 포함할 수 있다. 당업자들에게 명백할 바와 같이, 예컨대 I/O 로직 엘리먼트(47)에 연결된 실제 I/O 패드는 통상적으로 입력/출력 로직 엘리먼트(47)의 영역으로 한정되지 않는다.
도시된 예에서, 다이(도 8에 도시됨)의 중앙 부근의 수평 영역은 구성, 클록 및 다른 제어 로직을 위해 사용된다. 이 수평 영역 또는 열로부터 연장하는 수직 열들(51)은 FPGA의 폭에 걸쳐 클록들 및 구성 신호들을 분배하는 데 사용된다.
도 5에 예시된 아키텍처를 활용하는 일부 FPGA들은, FPGA의 큰 부분을 구성하는 정규 컬럼식 구조(columnar structure)를 방해하는 부가적인 로직 블록들을 포함한다. 부가적인 로직 블록들은 프로그래밍 가능 블록들 및/또는 전용 로직일 수 있다.
도 5는 단지 예시적인 FPGA 아키텍처를 예시하도록 의도된다는 것에 주의한다. 예컨대, 행에서 로직 블록들의 수, 행들의 상대적인 폭, 행들의 수 및 순서, 행들에 포함된 로직 블록들의 유형들, 로직 블록들의 상대적 크기들 및 도 5의 상부에 포함된 인터커넥트/로직 구현들은 순전히 예시적이다. 예컨대, 실제 FPGA에서, CLB들의 2개 이상의 인접한 행은 통상적으로 CLB들이 나타나는 곳마다 포함되어 사용자 로직의 효율적인 구현을 용이하게 하지만, 인접한 CLB 행들의 수는 FPGA의 전체 크기에 따라 변동된다.
일반화된 이미지 프로세싱을 위한 이미지 프리프로세싱
도 6은 일 예에 따른 콘볼루션 프로세서(600)를 도시하는 블록도이다. 콘볼루션 프로세서(600)는 메모리(602), 이미지 프리프로세서(604) 및 프로세서(606)를 포함한다. 이미지 프리프로세서(604) 및 프로세서(606)는 위에서 설명된 가속 회로(230)에 구현될 수 있다. 예컨대, 프로세서(606)는 DSP 어레이(362)일 수 있다. 이미지 프리프로세서(604)는 이미지 프리프로세서(344)일 수 있다. 메모리(602)는 하드웨어 가속기(116)의 RAM(226)일 수 있다. 이미지 프리프로세서(604)의 예시적인 구조는 도 7과 관련하여 아래에서 설명된다. 다른 예에서, 콘볼루션 프로세서(600)는 가속 회로들 또는 도 3에 도시된 것과 상이한 구조들을 갖는 다른 유형들의 회로들에 구현될 수 있다.
동작에서, 메모리(602)는 입력 이미지 데이터(802)를 저장한다. 예시적인 입력 이미지 데이터(802)가 도 8a와 관련하여 아래에서 설명된다. 일반적으로, 입력 이미지 데이터(802)는 이미지들을 포함하며, 여기서 각각의 이미지는 샘플들의 2-차원 어레이이다. 이미지 프리프로세서(604)는 외부 회로(예컨대, 제어 로직(342))로부터 명령 데이터를 수신한다. 명령 데이터에 대한 응답으로, 이미지 프리프로세서(604)는 메모리(602)로부터 이미지 데이터(802)의 블록들을 획득하고 이미지 블록들을 이미지 샘플들의 복수의 병렬 스트림들("샘플 스트림들")로 포맷팅한다. 각각의 스트림의 이미지 샘플들은 필터 크기, 스트라이드 및 확장을 포함한 콘볼루션 파라미터들에 기초하여 순서화된다. 스트라이드 및 확장의 개념들을 포함해서, 이미지 데이터의 콘볼루션이 아래에 간략하게 설명된다. 프로세서(606)는 샘플 스트림들 및 콘볼루셔널 필터 데이터를 수신한다. 프로세서(606)는 입력 이미지 데이터(802) 및 콘볼루셔널 필터 데이터의 콘볼루션을 초래하는 연산들을 수행한다. 프로세서(606)는 프로세싱의 결과로서 출력 이미지 데이터를 생성한다.
일 예에서, 프로세서(606)는 DPU(data processing unit)들(607)의 시스토릭 어레이를 포함한다. 아래에 추가로 설명되는 바와 같이, 콘볼루션은 행렬 곱셈을 사용하여 수행될 수 있다. DPU들(607)은 샘플 스트림들 및 필터 데이터에 기초하여 곱셈-누산 연산들을 실행하여 출력 이미지 데이터를 생성한다. 다른 예에서, 프로세서(606)는 샘플 스트림들 및 필터 데이터를 벡터들로서 프로세싱하는, 하나 이상의 코어들을 갖는 벡터 프로세서일 수 있다. 또 다른 예들에서, 이미지 프리프로세서(604)는 프로세서(606)에 더하여 또는 프로세서(606)에 대한 대안으로서, (예컨대, 추후의 프로세싱을 위해 메모리에 저장된) 이미지 샘플 스트림들의 다른 소비자들에 커플링될 수 있다. 다른 예들에서, 프로세서(606)는 콘볼루션 대신에 다른 동작들(예컨대, 필터링 동작들)을 수행할 수 있다. 일반적으로, 이미지 프리프로세서(604)는 특정 동작들을 수행하기 위해 이미지 샘플들의 소비자에 의해 요구되는 소정의 샘플 패턴들을 갖는 이미지 샘플들의 스트림들을 생성한다.
도 7은 일 예에 따른 이미지 프리프로세서(604)를 도시하는 블록도이다. 이미지 프리프로세서(604)는 입력 버퍼 회로("입력 버퍼(705)"), 행 버퍼 회로("행 버퍼(708)"), 인터커넥트 네트워크(710), 시프트 레지스터 회로들("시프트 레지스터들(712)"), 및 제어 회로(714)를 포함한다. 이미지 프리프로세서(604)는 메모리 제어기(702)를 포함할 수 있다. 대안적으로, 메모리 제어기(702)는 이미지 프리프로세서(604) 외부(예컨대, 도 3에 도시된 메모리 제어기들(310)의 부분)에 구현될 수 있다. 제어 회로(714)는 이미지 프리프로세서(604) 외부의 다른 제어 회로들(예컨대, 도 3에 도시된 제어 로직(342))에 커플링될 수 있다.
일 예에서, 입력 버퍼(705)는 판독 제어 회로(703), 입력 버퍼(7041), 입력 버퍼(7042) 및 행 선택기(706)를 포함한다. 판독 제어 회로(703)는 메모리 제어기(702)와 입력 버퍼들(7041 및 7042) 사이에 커플링된다. 행 선택기(706)는 입력 버퍼들(7041 및 7042)과 행 버퍼(708) 사이에 커플링된다. 동작에서, 판독 제어 회로(703)는 어드레스 및 커맨드 데이터를 메모리 제어기(702)에 전송하여 메모리(602)로부터 이미지 데이터를 획득한다. 각각의 입력 버퍼(7041 및 7042)는 복수의 행들을 갖는 이미지 데이터의 블록을 저장하도록 구성된다. 이 예에서, 입력 버퍼(705)는 판독 제어 회로(703)가 하나의 입력 버퍼(7041 또는 7042)를 로딩하는 동안, 행 선택기(706)가 나머지 하나의 입력 버퍼(7041 또는 7042)로부터 판독하도록 이미지 데이터를 이중-버퍼링한다. 입력 버퍼(705)는 도 7에 도시된 것과 상이한 구조들을 포함할 수 있다(예컨대, 입력 버퍼(705)는 단일 버퍼일 수 있거나 이중 초과의 버퍼링을 구현할 수 있음). 일반적으로, 입력 버퍼(705)는 행 버퍼(708) 내로 로딩하기 위해 다수의 이미지 행들을 갖는 이미지 데이터의 블록(들)을 저장한다.
행 버퍼(708)는 복수의 저장 위치들을 포함한다. 예컨대, 행 버퍼(708)는 이미지 데이터의 행의 개개의 샘플을 저장하도록 각각 구성된 복수의 레지스터들을 포함할 수 있다. 행 버퍼(708)는 이미지 데이터의 행을 저장하기에 충분한 저장 위치들을 포함한다. 행 버퍼(708)에 저장된 샘플들은 인터커넥트 네트워크(710)를 통해 시프트 레지스터들(712) 내로 로딩된다. 각각의 시프트 레지스터(712)는 이미지 샘플 스트림을 생성하기 위해 행 버퍼(708)의 저장 위치들의 상이한 패턴에 액세스한다. 인터커넥트 네트워크(710)는 각각의 시프트 레지스터(712)와 행 버퍼(708) 내의 저장 위치들의 특정 패턴 사이의 연결을 포함한다. 아래에 추가로 설명되는 바와 같이, 시프트 레지스터들(712)에 커플링된 저장 위치들의 패턴들은 오버랩될 수 있고, 수행되는 콘볼루션 연산의 필터 폭, 스트라이드 및 확장에 의존하여 비-연속적일 수 있다. 상이한 필터 폭들, 스트라이드들 및 확장들은 행 버퍼(708)와 시프트 레지스터들(712) 사이에서 상이한 액세스 패턴들을 초래한다.
일 예에서, 인터커넥트 네트워크(710)는 각각의 시프트 레지스터(712)에 대해 단일 액세스 패턴을 지원한다. 이러한 예에서, 인터커넥트 네트워크(710)는 연결들을 구현하기 위한 와이어들만을 포함한다. 다른 예들에서, 인터커넥트 네트워크(710)는 각각의 시프트 레지스터(712)에 대해 다수의 액세스 패턴들을 지원한다. 그러한 예들에서, 인터커넥트 네트워크(710)는 상이한 액세스 패턴들을 구현하는 상이한 연결들 중에서 선택하기 위한 멀티플렉서들을 포함할 수 있다. 시프트 레지스터들(712)은 다른 회로(예컨대, 프로세서(606))에 의해 소비될 이미지 샘플 스트림들을 출력한다.
제어 회로(714)는 입력 버퍼(705), 행 버퍼(708) 및 시프트 레지스터들(712)에 커플링된다. 제어 회로(714)는 또한 명령 입력을 포함한다. 제어 회로(714)는 외부 제어 로직(예컨대, 제어 로직(342))으로부터 명령들을 수신할 수 있다. 제어 회로(714)는 본원에서 설명된 동작들을 수행하기 위해 인에이블 신호들, 클록 신호들 등을 입력 버퍼(705), 행 버퍼(708) 및 시프트 레지스터들(712) 각각에 제공할 수 있다. 명령 입력은 메모리(602)로부터 이미지 데이터를 획득하기 위한 어드레스 데이터를 제공할 수 있다. 제어 회로(714)는 어드레스 데이터를 판독 제어 회로(703)에 제공할 수 있다. 제어 회로(714)는 이미지 데이터의 행을 행 버퍼(708) 내의 저장 위치들에 로딩하기 위해 행 버퍼(708)에 행 클록을 제공한다. 제어 회로(714)는 이미지 샘플들을 시프트 아웃(shifting out)하기 위해 샘플 클록을 시프트 레지스터들(712)에 제공한다. 일 예에서, 제어 회로(714)는 또한, (예컨대, 인터커넥트 네트워크(710)가 멀티플렉서들을 포함할 때) 인터커넥트 네트워크(710)에 커플링될 수 있다. 제어 회로(714)는 각각의 시프트 레지스터(712)에 대해 어느 액세스 패턴이 사용될지를 선택하기 위해 인터커넥트 네트워크(710) 내의 멀티플렉서들에 모드 선택 신호를 제공할 수 있다.
도 8a는 일 예에 따라, 콘볼루션 연산을 위한 입력 이미지 데이터(802), 필터 데이터(804) 및 출력 이미지 데이터(806)를 예시한다. 콘볼루션 연산은 예컨대, CNN의 특정 층에 대해 수행될 수 있다. 입력 이미지 데이터(802)는 다수의 채널들(ID) 각각에 대해, 각각이 폭(IW) 및 높이(IH)를 갖는 2차원 이미지들을 포함한다. 따라서, 입력 이미지 데이터(802)는 IW × IH × ID 볼륨의 이미지 샘플들을 포함한다. 예컨대, 입력 이미지 데이터(802)는 적색, 녹색 및 청색(RGB) 채널들 각각에서 227 × 227 이미지들(예컨대, 227 × 227 × 3)을 포함할 수 있다. 다른 예에서, CNN의 내부 콘볼루셔널 층은 55 × 55 × 96 치수들(예컨대, 각각 55 × 55 이미지를 갖는 96개의 채널들)을 갖는 입력 이미지 데이터를 포함할 수 있다. 각각의 이미지(808)는 2차원 행렬
Figure pct00001
에 의해 표현될 수 있다. 각각의 이미지(808)는 IH개의 행들(814)을 포함한다. 아래에서 설명되는 바와 같이, 이미지 프리프로세서(604)는 이미지(808)를 행별 기반으로 프로세싱한다.
일부 경우들에서, 각각의 이미지(808)는 좌측 및 우측 에지들 상에서 0-값 샘플들의 열들 및/또는 최상부 및 최하부 에지들 상에서 0-값 샘플들의 열들로 패딩될 수 있다. 패딩은 숫자 PH 및 PW로 표현되며, 여기서 PH는 패딩 높이이고 PW는 패딩 폭이다. 예컨대, PH = PW = 0은 패딩이 없고; PH = PW = 1은 0-값 샘플들의 링이 이미지 샘플들을 둘러싸고 있음을 의미하고; PH = 1은 0-값 샘플들의 하나의 행이 최상부 에지에 추가되고 0-값 샘플들의 다른 행이 최하부 에지에 추가됨을 의미하고; 그리고 PW = 2는 0-값 샘플들의 2개의 열들이 우측 에지에 추가되고 0-값 샘플들의 다른 2개의 열들이 좌측 에지에 추가됨을 의미한다.
필터 데이터(804)는 각각이 폭(FW), 높이(FH) 및 깊이(ID)를 갖는 3차원 필터들(8041... 804OD)을 포함한다. 각각의 3차원 필터(8041... 804OD)는 출력 이미지 데이터(806)의 개개의 채널을 생성하도록 입력 이미지 데이터(802)와 콘볼빙된다. 따라서, 3-차원 필터들(8141…804OD)의 수는 출력 이미지의 깊이(OD)와 동일하다. 또한, 각각의 3차원 필터(8041…804OD)의 깊이는 입력 이미지 데이터(802)의 깊이(ID)와 매칭한다. 예컨대, CNN의 콘볼루셔널 층은 치수가 11 × 11 × 3인 96개의 3-차원 필터들을 포함할 수 있다. 필터(8041…804OD)의 각각의 2-차원 단면은 2차원 행렬
Figure pct00002
에 의해 표현될 수 있다.
출력 이미지 데이터(806)는 다수(OD)의 채널들에 대해, 각각이 폭(OW) 및 높이(IH)를 갖는 2차원 이미지들을 포함한다. 따라서, 출력 이미지 데이터(806)는 OW × OH × OD 볼륨을 형성한다. 예컨대, 출력 이미지 데이터(806)는 각각이 55 × 55 이미지를 갖는 96개의 채널들을 포함할 수 있다. 각각의 이미지(816)는 2차원 행렬
Figure pct00003
에 의해 표현될 수 있다. 각각의 이미지(816)는 OH개의 행들을 포함한다.
OH 및 OW의 값들은 필터 치수들(FH, FW), 입력 이미지 패딩(PH, PW), 수평 스트라이드(Sh), 수직 스트라이드(Sv), 수평 확장(Dh) 및 수직 확장(Dv)에 의존한다. 특히,
Figure pct00004
이고,
Figure pct00005
이다.
전체 이미지가 프로세싱되는 것을 보장하기 위해, 표현
Figure pct00006
은 Sv의 배수인 것으로 평가되어야 하고, 표현
Figure pct00007
은 Sh의 배수인 것으로 평가되어야 한다.
출력 이미지(812)의 출력 샘플은 "수용 필드"로서 본원에서 지칭되는 각각의 입력 이미지(808)의 인근 입력 샘플들에 의존한다. 각각의 수용 필드는 FH × FW 입력 샘플들을 포함한다. 출력 이미지(812)의 주어진 출력 샘플(cij)은 그의 수용 필드들의 벡터와 주어진 필터의 벡터 사이의 내적을 취함으로써 컴퓨팅된다. 따라서, 주어진 출력 샘플(cij)의 수용 필드들은 ID × FH × FW 샘플들과 동일한 볼륨의 입력 샘플들을 포함한다. 수용 필드들의 크기는 필터 치수들(FH, FW)에 의존한다. 수용 필드들의 입력 샘플들 및 수용 필드들이 서로 오버랩하는 정도는 콘볼루션의 스트라이드 및 확장 파라미터들 및 입력 이미지 데이터의 패딩에 의존한다.
도 8b는 2-차원 행렬 곱셈 연산의 관점에서 콘볼루션을 예시한다. 필터 행렬(902)은 OD개의 행들 및 (ID × FH × FW)개의 열들을 갖는다. 필터 행렬(902)에서, 필터들(8041...804OD) 각각은 (ID × FH × FW)개의 엘리먼트들을 갖는 벡터로 변환된다. 각각의 "벡터화된" 필터는 필터 행렬(906)의 행(908)이 된다.
출력 이미지 행렬(906)은 OD개의 행들 및 (OH × OW)개의 열들을 갖는다. 출력 이미지 행렬(906)의 각각의 행(912)은 출력 이미지(812)의 벡터화된 형태이다. 출력 이미지 행렬(906)은 출력 이미지 데이터(806)의 OD개의 채널들을 표현하는 OD개의 행들을 포함한다.
입력 이미지 행렬(904)은 ID × FH × FW개의 행들 및 OH × OW개의 열들을 갖는다. 입력 이미지 행렬(904)은 각각의 열(910)이 주어진 출력 샘플에 대한 수용 필드들을 포함하도록 형성된다. 따라서, 입력 이미지 행렬(904)은 콘볼루션을 위해 선택된 스트라이드 및 확장뿐만 아니라 필터 크기(FH, FW) 및 패딩(PH, PW)에 의존한다.
일 기술에서, 프로세서는 행렬들(902, 904 및 906)을 생성하고 행렬 곱셈 연산을 수행함으로써 콘볼루션을 수행할 수 있다. 그러나, 이러한 기술은 IM2COL(image-to-column) 프로세스를 사용한 대형 입력 이미지 행렬(904)의 생성을 요구한다. 입력 이미지 행렬(904)은 리던던트 데이터를 포함한다(예컨대, 이미지 샘플들은 수용 필드들의 정의된 오버랩에 따른 특정 패턴에 따라 열들에 걸쳐 반복됨). 예컨대, 227 × 227 × 3 이미지 샘플들(예컨대, 각각 패딩 없이는 227개의 픽셀들의 높이 및 폭을 갖는 RGB 이미지)을 갖는 입력 이미지 데이터를 고려한다. 11 × 11 × 3 필터 및 4개의 스트라이드를 추가로 가정한다. 이러한 예에서, 입력 이미지 데이터(802)는 154,587개의 이미지 샘플들을 포함하지만, 입력 이미지 행렬(904)은 1,098,075개의 이미지 샘플들을 포함한다. 각각의 이미지 샘플이 1 바이트인 경우, 입력 이미지 행렬(904)의 생성은 대략 1MB의 임시 저장소를 요구한다. 물론, 더 큰 입력 샘플 크기들은 훨씬 더 많은 임시 저장소를 요구한다. 또한, 입력 이미지 행렬(904)의 컴퓨테이션은 콘볼루션 연산을 수행하기 전에 입력 이미지 데이터(802)의 완전한 트래버싱(traversal)을 요구한다. 본원에서 추가로 설명된 바와 같이, 이미지 프리프로세서(604)는 입력 이미지 행렬(904)을 컴퓨팅할 필요성을 회피하고 따라서 훨씬 더 적은 메모리 자원들을 요구한다. 추가로, 이미지 프리프로세서(604)는 콘볼루션의 컴퓨테이션과 병렬로 입력 이미지 데이터(802)를 포맷팅한다.
도 9는 일 예에 따라, 이미지 프리프로세서(604)에 의해 입력 이미지 데이터(802)를 프로세싱하는 방법을 예시한다. 위의 예에서 설명된 바와 같이, 입력 이미지 데이터(802)는 복수의 이미지들(802)(예컨대, 이미지들(8021…802ID))을 포함한다. 입력 이미지 데이터(802)는 행-우선 포맷(row-major format)으로 메모리(602)에 저장될 수 있다. 입력 버퍼(705)는 블록 당 입력 이미지 데이터(802)를 한 번에 판독한다. 일 예에서, 이미지 데이터의 각각의 블록은 KH개의 행들(814)을 포함한다. 도 7의 예에서, 입력 버퍼(705)는 입력 이미지 데이터를 이중 버퍼링한다. 따라서, 프리프로세싱의 시작에서, 판독 제어 회로(703)는 이미지(8081)의 행들(8141…814KH)을 포함하는 블록(B1)을 입력 버퍼(7041)에 로딩한다. 판독 제어 회로(703)는 (예컨대, 제어 회로(714)로부터 수신된) 수직 스트라이드(Sv)를 결정하고, 행들(814Sv…814KH+Sv)을 포함하는 제2 블록(B2)을 입력 버퍼(7042)에 로딩한다.
행 선택기(706)는 버퍼(7041)로부터의 이미지 데이터의 행을 행 버퍼(708)에 로딩하는 반면, 판독 제어 회로(703)는 블록(B2)을 입력 버퍼(7042) 내로 로딩한다. 행 선택기(706)는 (예컨대, 제어 회로(714)에 의해 생성된) 행 클록에 따라 행 버퍼(708)를 로딩한다. 행 선택기(706)는 입력 버퍼(7042)로부터의 판독으로 스위칭하기 전에 입력 버퍼(7041)에서 KH개의 행들을 통해 트래버싱(traverse)한다. 입력 버퍼(7042)로의 스위칭 시에, 판독 제어 회로(703)는 블록(B3)(명시적으로 도시되지 않음)으로부터의 새로운 행들을 입력 버퍼(7041) 내로 로딩한다. 수직 스트라이드(Sv)에 의존하여, 판독 제어 회로(703)는 블록(B3) 및 이미지(8081) 내의 임의의 후속 블록으로 입력 버퍼(7041)를 업데이트하기 위해 KH개 미만의 행들을 판독할 수 있다는 것에 주의한다. 블록(B3)은 블록(B1)과 공통인 행들을 포함할 수 있고, 따라서 새로운 행들만이 입력 버퍼(7041)에 추가된다. 예컨대, KH = 11 및 Sv = 4인 경우, 블록(B3)의 처음 3개의 행들(예컨대, 행들(8149...81411))은 블록(B1)의 마지막 3개의 행들이며, 재사용될 수 있다. 입력 버퍼(7041)에 저장된 각각의 후속 홀수 번호 블록에 대해서도 마찬가지이다. 유사하게, 블록(B2) 이후에 입력 버퍼(7042)에 저장된 각각의 짝수 번호 블록에 대해서도 마찬가지이다. 일반적으로, 처음 2개의 블록들(B1 및 B2) 이후에, 판독 제어 회로(703)는 MIN(KH, 2*Sv)개의 행들을 입력 버퍼(7041) 또는 입력 버퍼(7042) 내로 기록한다. 도 9에 추가로 도시된 바와 같이, 판독 제어 회로(703)는 입력 이미지(808)(B1…BOH) 당 OH개의 블록들을 판독한다.
도 9의 예에서, 입력 버퍼들(7041 및 7042)은 KH의 높이를 갖는 것으로 가정한다. 일부 예들에서, 입력 버퍼들(7041 및 7042)은 KH개 초과의 행들을 저장할 수 있다. 예컨대, 이미지 프리프로세서(604)가 다수의 모드들을 지원하도록 구성된 경우, 입력 버퍼들(7041 및 7042)은 다수의 모드들의 최대치(KH) 이상의 행들의 수를 저장할 수 있다. 입력 버퍼들(7041 및 7042)이 KH개 초과의 행들을 저장할 수 있는 경우, 블록들은 높이가 KH보다 높을 수 있다. 이는 후속 사이클들에서 버퍼들을 업데이트하기 위해 메모리(602)로부터 판독될 필요가 있는 행들을 더 적게 한다.
도 9의 예에서, 하나의 입력 이미지(808)가 행 별로(IW의 행 폭을 가짐) 프로세싱되는 것으로 가정한다. 입력 버퍼들(7041 및 7042) 및 행 버퍼(708)는 IW개 초과의 이미지 샘플들을 저장할 수 있다. 예컨대, 이미지 프리프로세서(604)가 AlexNet CNN의 각각의 콘볼루셔널 층에 대한 콘볼루션을 지원하도록 구성된 경우를 고려한다. 제1 콘볼루셔널 층에서, 입력 이미지들은 높이 및 폭이 227 × 227이다. 제2 콘볼루셔널 층에서, 입력 이미지들은 높이 및 폭이 55 × 55이다. 제3 콘볼루셔널 층에서, 입력 이미지들은 높이 및 폭이 27 × 27이다. 제4 및 제5 콘볼루셔널 층들에서, 입력 이미지들은 13 × 13이다. 입력 버퍼들(7041 및 7042) 및 행 버퍼(708)는 제1 콘볼루셔널 층을 지원하기 위해 적어도 227개의 이미지 샘플들을 저장하도록 구성될 수 있다. 제1 층 이후의 콘볼루셔널 층들에 대해, 입력 이미지들은, 이미지 프리프로세서(604)에 프로세싱되는 "이미지"가 행들의 연접(concatenation)(예컨대, 2개의 55 샘플 행들의 연접, 4개의 27 샘플 행들의 연접 등)인 행들을 갖도록 인터리빙되는 방식으로 메모리(602)에 저장될 수 있다.
도 9의 예에서, 수직 확장(Dv)은 0(즉, 확장 없음)인 것으로 가정한다. 수직 확장이 0이 아닌 경우, 각각의 블록(B1…BOH)은 여전히 KH개의 행들을 포함하지만 행 인덱스들은 확장의 양에 의존하여 상이할 것이다. 예컨대, 수직 확장(Dv)이 1로 세팅되는 경우, 블록(B1)은 행들(8041, 8043, 8045,…, 8042KW - 1)을 포함한다. 블록(B2)은 행들(8045, 8047, 8049,…, 8042KW -1+ Sv)을 포함한다.
도 10은 일 예에 따라, 프로세서(606)를 보다 상세히 도시하는 블록도이다. 행 버퍼(708)는 저장 위치들(예컨대, 레지스터들)(7091…709T)을 포함하고, 여기서 T는 양의 정수이다. 수(T)는 적어도, CNN의 최대 IW(예컨대, AlexNet CNN에 대해 T >= 227임)를 지원하도록 선택될 수 있다. 각각의 저장 위치(709)는 M-비트 이미지 샘플(예컨대, M = 8, M = 16 등)을 저장한다. 각각의 저장 위치(709)는 행 버퍼(708)의 개개의 출력(d1…dT)을 통해 액세스 가능하다. 각각의 출력(d1…dT)은 M-비트 출력이다.
시프트 레지스터들(712)은 시프트 레지스터들(7121…712V)을 포함하며, 여기서 V는 양의 정수이다. 수(V)는 적어도, CNN의 최대 OW(예컨대, AlexNet CNN에 대해 V >= 55임) 또는 더 작은 OW 값들의 정수배를 지원하도록 선택될 수 있다. 이는 이미지 프리프로세서(604)가 출력 이미지의 전체 행에 대해 필요한 이미지 데이터를 프로세서(606)에 공급할 수 있게 한다. 각각의 시프트 레지스터(712)는 저장 위치들(예컨대, 레지스터들)(7131…713U)을 포함하고, 여기서 U는 양의 정수이다. 일 예에서, 수(U)는 적어도, 최대 필터 폭(FW)(예컨대, AlexNet CNN에 대해 U = 11임)을 지원하도록 선택된다. 각각의 저장 위치(713)는 M-비트 이미지 샘플을 저장한다. 저장 위치들(713)은 개개의 입력(sr1…srV)으로부터 병렬로 로딩된다. 각각의 입력(sr1…srV)은 개개의 시프트 레지스터(7121…712V)에서 저장 위치들(713)의 병렬 로딩을 지원하도록 U × M의 폭을 갖는다. 각각의 시프트 레지스터(712)는 M-비트 이미지 샘플들의 스트림을 출력한다. 따라서, 이미지 프리프로세서(604)는 시프트 레지스터들(7121…712V)에 의해 각각 출력된 V개의 샘플 스트림들을 생성한다.
인터커넥트 네트워크(710)는 출력들(d1…dT)과 입력들(sr1…srV) 사이에 배치된다. 인터커넥트 네트워크(710)는 연결들(718), 및 선택적으로 멀티플렉서들(720)을 포함한다. 일 예에서, 인터커넥트 네트워크(710)는 단일 모드(예컨대, 행 버퍼(708)의 하나의 액세스 패턴)를 지원한다. 이 경우에, 멀티플렉서(720)는 생략된다. 각각의 연결(718)은 입력(sr1)을 출력들(d1…dT)의 상이한 패턴에 커플링한다. 일 예에서, 상이한 패턴들은 선택된 필터 크기, 수평 스트라이드 및 수평 확장에 기초하여 오버랩된다. 다른 예에서, 인터커넥트 네트워크(710)는 다수의 모드들(예컨대, 행 버퍼(708)의 다수의 액세스 패턴들)을 지원한다. 그러한 경우에, 네트워크(715)는 멀티플렉서들(720)을 포함한다. 각각의 멀티플렉서(720)의 출력은 각각의 출력(sr1…srV)에 커플링된다. 멀티플렉서들(720)의 입력들은 연결들(718)에 커플링된다. 각각의 멀티플렉서(720)에 대해, 각각의 입력은 상이한 액세스 패턴들에 기초하여 입력들(d1…dT)의 상이한 세트에 연결된다. 인터커넥트 네트워크(710)의 예시적인 구조들은 아래에서 추가로 설명된다.
도 11은 예시적인 입력 이미지(1102) 및 일 세트의 수용 필드들(1104)을 예시한다. 입력 이미지(1102)는 5의 IW 및 5의 IH(즉, 5 × 5 이미지)를 갖는다. 이미지(1102)는 행렬
Figure pct00008
에 의해 정의되며, 여기서 각각의 aij는 입력 샘플이다. 본 예에서, 콘볼루션의 파라미터들은 3 × 3의 필터 치수들(FH, FW), 2의 수평 스트라이드(Sh) 및 0의 수평 확장(Dh)을 포함한다. 이러한 파라미터들에 의해, 출력 이미지의 높이(OH) 및 출력 이미지의 폭(OW)은 둘 모두 2(즉, OH = OW = 2)이다. 출력 이미지는 행렬
Figure pct00009
에 의해 정의되며, 여기서 각각의 cij는 출력 샘플(도 11에 명시적으로 도시되지 않음)이다. 출력 샘플(c1,1)은, 입력 이미지(1102)의 처음 3개의 행들 및 처음 3개의 열들의 입력 샘플들을 포함하는 수용 필드(11041,1)를 갖는다. 출력 샘플(c1,2)은, 입력 이미지(1102)의 처음 3개의 행들 및 마지막 3개의 열들의 입력 샘플들을 포함하는 수용 필드(11041,2)를 갖는다. 출력 샘플(c2,1)은, 마지막 3개의 행들 및 처음 3개의 열들의 입력 샘플들을 포함하는 수용 필드(11042,1)를 갖는다. 출력 샘플(c2,2)은, 마지막 3개의 행들 및 마지막 3개의 열들의 입력 샘플들을 포함하는 수용 필드(11042,2)를 갖는다.
도 12a는 일 예에 따라, 인터커넥트 네트워크(710)의 구성을 도시하는 블록도이다. 인터커넥트 네트워크(710)는 동일한 콘볼루셔널 파라미터들(예컨대, 필터 3 × 3, 스트라이드 2 및 확장 0)을 갖는, 도 11의 예에 도시된 이미지(1102)를 프로세싱하도록 구성된다. 인터커넥트 네트워크(710)는 예에서 하나의 모드를 지원하므로, 멀티플렉서들(720)은 요구되지 않고 생략된다.
이 예에서, 행 버퍼(708)는 입력 이미지(1102)에 행의 5개의 샘플들을 저장하기 위해 적어도 5개의 저장 위치들(7091...7095)을 포함한다. 시프트 레지스터들(712)은 출력 이미지의 OW와 매칭하도록 적어도 2개의 시프트 레지스터들(7121 및 7122)을 포함한다. 입력(sr1)은 연결(7181)을 통해 출력들(d1…d3)에 커플링된다. 연결(7181)은 각각, 출력들(d1…d3)에 커플링된 3개의 와이어들을 포함한다. 입력(sr2)은 연결(7182)을 통해 출력들(d3…d5)에 커플링된다. 연결(7182)은 각각, 출력들(d3…d5)에 커플링된 3개의 와이어들을 포함한다. 따라서, 각각의 행 사이클에 대해, 시프트 레지스터(7121)는 d1...d3으로부터의 이미지 샘플들로 병렬-로딩되고, 시프트 레지스터(7122)는 d3...d5로부터의 이미지 샘플들로 병렬-로딩된다.
도 12b는 도 12a의 예에 따라, 행 버퍼(708)와 시프트 레지스터들(712) 사이의 연결들의 논리적 어레인지먼트를 도시하는 블록도이다. 인터커넥트 네트워크(710)는 오버랩하는 행 출력 패턴들(1202)을 형성한다. 오버랩하는 행 출력 패턴들(1202)은 출력 패턴(12021) 및 출력 패턴(12022)을 포함한다. 출력 패턴(12021)은 출력들(d1…d3)을 제공하는 저장 위치들(709)의 패턴을 포함한다. 출력 패턴(12022)은 출력들(d3…d5)을 제공하는 저장 위치들(709)의 패턴을 포함한다. 출력 패턴(12021)은 연결(7181)에 의해 시프트 레지스터(7121)의 입력(sr1)에 커플링된다. 출력 패턴(12022)은 연결(7182)에 의해 시프트 레지스터(7122)의 입력(sr2)에 커플링된다. 출력 패턴들(12021 및 12022)은 출력(d3)이 오버랩한다. 출력 패턴들(1202)은 예에서 사용된 콘볼루셔널 파라미터들(예컨대, 필터 3 × 3, 스트라이드 2 및 확장 0)의 결과이다.
도 13은 도 12a의 예에서 시프트 레지스터들(7121 및 7122)에 의해 출력된 샘플 스트림들을 예시한다. 시프트 레지스터(7121)는 샘플 스트림(13021)을 출력한다. 시프트 레지스터(7122)는 샘플 스트림(13022)을 출력한다. 입력 이미지(1102)는 도 11의 예에 도시된 바와 같다. 샘플 스트림(13021)은 수용 필드(11041,1)의 샘플들에 뒤이어, 수용 필드(11042,1)의 샘플들을 포함한다. 샘플 스트림(13022)은 수용 필드(11041,2)의 샘플들에 뒤이어, 수용 필드(11042,2)의 샘플들을 포함한다. 각각의 행 사이클에 대해, 주어진 스트림은 특정 수용 필드의 행을 포함한다. 3개의 행 사이클들 후에, 주어진 스트림은 전체 수용 필드를 포함한다. 6개의 행 사이클 후에, 병렬 스트림들(13021 및 13022)은 모든 수용 필드들(1104)을 출력한다. 스트림들(13021 및 13022)의 샘플 패턴들은 도 12a에 도시된 연결들(7181 및 7182)에 의해 구현된 액세스 패턴들의 결과이다. 스트림들(13021 및 13022)은 이들 수용 필드들(1104)을 사전 컴퓨팅 및 저장하지 않고 모든 수용 필드들(1104)을 출력한다는 것에 주의한다. 오히려, 이미지 프리프로세서(604)는 스트림들(13021 및 13022)을 생성하기 위해 오리지널 입력 이미지(1102)의 6개의 행들을 프로세싱한다. 추가로, 프로세서(606)는 이미지 프리프로세서(604)에 의한 스트림 생성과 병렬로 콘볼루션 연산을 시작할 수 있다. 스트림들(13021 및 13022)은 필터 벡터(들)를 이용한 내적 연산들에 대해 적합한 포맷이다.
도 14a는 다른 예에 따라, 인터커넥트 네트워크(710)의 구성을 도시하는 블록도이다. 인터커넥트 네트워크(710)는 8의 폭(IW)을 갖는 이미지(예컨대, 8 × 8 이미지)를 프로세싱하도록 구성된다. 인터커넥트 네트워크(710)는 2개의 상이한 모드들을 지원한다. 모드 A에서, 필터 크기는 3 × 3이고, 스트라이드는 2이며, 확장은 0이다. 모드 B에서, 필터 크기는 5 × 5이고, 스트라이드는 3이며, 확장은 0이다. 인터커넥트 네트워크(710)는 다수의 모드들을 지원하므로, 멀티플렉서들(720)이 포함된다.
이 예에서, 행 버퍼(708)는 입력 이미지에 행의 8개까지의 샘플들을 저장하기 위해 적어도 8개의 저장 위치들(7091...7098)을 포함한다. 시프트 레지스터들(712)은 출력 이미지의 OW와 매칭하도록 적어도 2개의 시프트 레지스터들(7121 및 7122)을 포함한다. 입력(sr1)은 멀티플렉서(7201)의 출력에 커플링된다. 입력(sr2)은 멀티플렉서(7202)의 출력에 커플링된다. 멀티플렉서들(7201 및 7202) 각각은 모드 선택 입력("모드")뿐만 아니라 2개의 입력들(IA 및 IB)을 포함한다. 멀티플렉서(7201)의 포트(IA)는 연결(718A1)을 통해 출력들(d1…d3)에 커플링된다. 연결(718A1)은 각각, 출력들(d1…d3)에 커플링된 3개의 와이어들을 포함한다. 멀티플렉서(7202)의 포트(IA)는 연결(718A2)을 통해 출력들(d3…d5)에 커플링된다. 연결(718A2)은 각각, 출력들(d3…d5)에 커플링된 3개의 와이어들을 포함한다. 모드 A에서, 각각의 행 사이클에 대해, 시프트 레지스터(7121)는 d1...d3으로부터의 이미지 샘플들로 병렬-로딩되고, 시프트 레지스터(7122)는 d3...d5로부터의 이미지 샘플들로 병렬-로딩된다.
멀티플렉서(7201)의 포트(IB)는 연결(718B1)을 통해 출력들(d1…d5)에 커플링된다. 연결(718B1)은 각각, 출력들(d1…d5)에 커플링된 5개의 와이어들을 포함한다. 멀티플렉서(7202)의 포트(IB)는 연결(718B2)을 통해 출력들(d4…d8)에 커플링된다. 연결(718B2)은 각각, 출력들(d4…d8)에 커플링된 5개의 와이어들을 포함한다. 모드 B에서, 각각의 행 사이클에 대해, 시프트 레지스터(7121)는 d1...d5으로부터의 이미지 샘플들로 병렬-로딩되고, 시프트 레지스터(7122)는 d4...d8로부터의 이미지 샘플들로 병렬-로딩된다.
도 14b는 도 14a의 예에 따라, 행 버퍼(708)와 시프트 레지스터들(712) 사이의 연결들의 논리적 어레인지먼트를 도시하는 블록도이다. 인터커넥트 네트워크(710)는 각각, 모드들 A 및 B에 대한 오버랩하는 행 출력 패턴들(1202A 및 1202B)을 형성한다. 오버랩하는 행 출력 패턴들(1202A)은 출력 패턴(1202A1) 및 출력 패턴(1202A2)을 포함한다. 출력 패턴(1202A1)은 출력들(d1…d3)을 제공하는 저장 위치들(709)의 패턴을 포함한다. 출력 패턴(1202A2)은 출력들(d3…d5)을 제공하는 저장 위치들(709)의 패턴을 포함한다. 출력 패턴(1202A1)은 연결(718A1)에 의해 멀티플렉서(7201)의 입력(IA)에 커플링된다. 출력 패턴(1202A2)은 연결(718A2)에 의해 멀티플렉서(7202)의 입력(IA)에 커플링된다. 출력 패턴들(1202A1 및 1202A2)은 출력(d3)이 오버랩한다. 출력 패턴들(1202A)은 모드 A에서 사용된 콘볼루셔널 파라미터들(예컨대, 필터 3 × 3, 스트라이드 2 및 확장 0)의 결과이다.
오버랩하는 행 출력 패턴들(1202B)은 출력 패턴(1202B1) 및 출력 패턴(1202B2)을 포함한다. 출력 패턴(1202B1)은 출력들(d1…d5)을 제공하는 저장 위치들(709)의 패턴을 포함한다. 출력 패턴(1202B2)은 출력들(d4…d8)을 제공하는 저장 위치들(709)의 패턴을 포함한다. 출력 패턴(1202B1)은 연결(718B1)에 의해 멀티플렉서(7201)의 입력(IB)에 커플링된다. 출력 패턴(1202B2)은 연결(718B2)에 의해 멀티플렉서(7202)의 입력(IB)에 커플링된다. 출력 패턴들(1202B1 및 1202B2)은 출력(d4 및 d5)이 오버랩한다. 출력 패턴들(1202B)은 모드 B에서 사용된 콘볼루셔널 파라미터들(예컨대, 필터 5 × 5, 스트라이드 3 및 확장 0)의 결과이다.
도 15는 다른 예에 따라, 행 버퍼(708)와 시프트 레지스터들(712) 사이의 연결들의 논리적 어레인지먼트를 도시하는 블록도이다. 인터커넥트 네트워크(710)는 8의 폭(IW)을 갖는 이미지(예컨대, 8 × 8 이미지)를 프로세싱하도록 구성되고, 3개의 상이한 모드들을 지원한다. 인터커넥트 네트워크(710)는 각각, 모드들 A, B 및 C에 대한 오버랩하는 행 출력 패턴들(1202A, 1202B 및 1202C)을 형성한다. 모드들 A 및 B는 도 14b의 예에서와 동일하며 위에서 상세히 설명되었다. 모드 C는 3 × 3의 필터 크기, 2의 스트라이드 및 1의 확장을 포함하는 콘볼루셔널 파라미터들에 의해 정의된다.
오버랩하는 행 출력 패턴들(1202C)은 출력 패턴(1202C1) 및 출력 패턴(1202C2)을 포함한다. 출력 패턴(1202C1)은 출력들(d1, d3, 및 d5)을 제공하는 저장 위치들(709)의 패턴을 포함한다. 출력 패턴(1202C2)은 출력들(d3, d5, 및 d7)을 제공하는 저장 위치들(709)의 패턴을 포함한다. 출력 패턴(1202C1)은 연결(718C1)에 의해 멀티플렉서(7201)의 입력(IC)에 커플링된다. 출력 패턴(1202C2)은 연결(718C2)에 의해 멀티플렉서(7202)의 입력(IC)에 커플링된다. 출력 패턴들(1202C1 및 1202C2)은 출력(d3 및 d5)이 오버랩한다. 출력 패턴들(1202C)은 모드 C에서 사용된 콘볼루셔널 파라미터들(예컨대, 필터 3 × 3, 스트라이드 2 및 확장 1)의 결과이다.
도 12a, 도 14a 및 도 15에 도시된 인터커넥트 네트워크(710)의 예시적인 구성들은 설명을 위해 간략화된다. 더 큰 이미지 폭들 및 상이한 콘볼루셔널 파라미터들을 위해 구성들이 확장될 수 있다. 단 하나의 모드만이 지원되는 경우, 인터커넥트 네트워크(710)는 콘볼루셔널 파라미터들과 연관된 특정 액세스 패턴을 구현하기 위해 행 버퍼(708)와 시프트 레지스터들(712) 사이에 연결된 와이어들만을 포함한다. 다수의 모드들이 지원되는 경우, 인터커넥트 네트워크(710)는 둘 이상의 모드들과 연관된 둘 이상의 입력들을 갖는 멀티플렉서들을 포함한다.
도 16은 일 예에 따라, 이미지 프리프로세서(604)의 동작의 방법(1600)을 도시하는 흐름도이다. 방법(1600)은 선택적 단계(1602)에서 시작하며, 여기서 제어 회로(714)는, 다수의 동작 모드들이 가능한 경우 동작 모드를 선택한다. 제어 회로(714)가 단 하나의 동작 모드만을 포함하는 경우, 단계(1602)는 생략된다. 단계(1604)에서, 제어 회로(714)는 입력 버퍼(7041)를 로딩하고 입력 버퍼(7042)를 로딩하기 시작한다. 예컨대, 제어 회로(714)는 제어 신호들(인에이블 신호들, 클록 신호들, 어드레스 데이터 등)을 판독 제어 회로(703)에 제공한다. 판독 제어 회로(703)는 위에서 설명된 바와 같이 이미지 데이터의 블록들을 입력 버퍼들(7041 및 7042)에 로딩한다.
단계(1606)에서, 제어 회로(714)는 선택된 행을 행 버퍼(708)에 로딩한다. 예컨대, 제어 회로(714)는, 행을 선택하고 행 버퍼(708)를 로딩하도록 제어 신호들(인에이블 신호들, 클록 신호들 등)을 행 선택기 회로(706)에 제공한다. 행 버퍼(708)는 행 클록에 따라 로딩된다.
단계(1608)에서, 제어 회로(714)는 인터커넥트 네트워크(710)를 통해 행 버퍼(708)의 콘텐츠들로 시프트 레지스터들(712)을 병렬-로딩한다. 인터커넥트 네트워크(710)는 선택된(또는 유일한) 모드의 액세스 패턴을 구현한다.
단계(1608)로부터, 방법(1600)은 후속 단계들을 동시에 수행한다. 단계(1616)에서, 제어 회로(714)는 샘플 스트림들을 생성하기 위해 시프트 레지스터들(712)로부터 이미지 샘플들을 시프트-아웃한다. 샘플들은 샘플 클록에 따라 시프트 아웃된다. 동시에, 단계(1610)에서, 행 선택기(706)는 현재 이미지 블록에 프로세싱될 더 많은 행들이 존재하는지를 결정한다. 만약 그렇다면, 방법(1600)은 단계(614)로 진행되고, 여기서 행 선택기(706)는 선택된 행을 행 버퍼(708)에 로딩한다. 만약 그렇지 않다면, 방법(1600)은 먼저 단계(1612)로 진행되고, 여기서 행 선택기(706)는 입력 버퍼들을 스위칭하고 판독 제어 회로(703)는 새로운 이미지 데이터를 이전에 사용된 입력 버퍼에 로딩하기 시작한다. 방법(1600)은 단계(1608)로 리턴하고 반복된다.
도 17은 일 예에 따라, 이미지 프리프로세서(604)를 설계하는 방법(1700)을 도시하는 흐름도이다. 방법(1700)은 설계 툴(들)(104)을 사용하여 컴퓨터 시스템(102)과 같은 컴퓨터 시스템 상에서 실행될 수 있다. 방법(1700)은 단계(1702)에서 시작하며, 여기서 설계 툴(들)(104)은 하나 이상의 콘볼루셔널 층들에 대한 필터, 스트라이드 및 확장 파라미터들을 식별한다. 단계(1704)에서, 설계 툴(들)은 단계(1702)에서 식별된 파라미터 세트(들)에 기초하여 행 버퍼(708)의 액세스 패턴(들)을 결정한다. 단계(1706)에서, 설계 툴(들)(104)은 결정된 액세스 패턴(들)에 기초하여 행 버퍼(708)의 저장 위치들(709)을 시프트 레지스터들(712)에 연결하기 위해 인터커넥트 네트워크(710)의 네트(net)들을 생성한다. 선택적인 단계(1708)에서, 설계 툴(들)(104)은 멀티플렉서들(720)을 인터커넥트 네트워크(710)에 추가하여 다수의 액세스 패턴들을 지원한다.
위의 내용은 특정 예들에 관한 것이지만, 본 발명의 기본 범위를 벗어남이 없이 추가의 예들이 안출될 수 있고, 본 발명의 범위는 아래의 청구항들에 의해 결정된다.

Claims (14)

  1. 이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하기 위한 프리프로세서 회로(preprocessor circuit)로서,
    이미지 데이터의 복수의 행들을 저장하고 상기 복수의 행들 중의 행을 출력하도록 구성된 제1 버퍼;
    상기 제1 버퍼에 의해 출력된 상기 행의 개개의 복수의 이미지 샘플들을 저장하기 위한 복수의 저장 위치들을 포함하는, 상기 제1 버퍼에 커플링된 제2 버퍼;
    복수의 시프트 레지스터들;
    복수의 연결들을 포함하는 인터커넥트 네트워크 ― 각각의 연결은 상기 복수의 시프트 레지스터들의 개개의 시프트 레지스터를 상기 복수의 저장 위치들 중 하나 초과에 커플링하고, 상기 복수의 저장 위치들 중 하나 이상은 상기 복수의 연결들 중 하나 초과에 커플링됨 ― ;
    상기 복수의 연결들에 기초하여 상기 복수의 시프트 레지스터들에 상기 복수의 이미지 샘플들을 로딩하고 상기 이미지 샘플들의 복수의 스트림들을 출력하도록 상기 복수의 시프트 레지스터들을 시프트하게 구성된 제어 회로를 포함하는,
    이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하기 위한 프리프로세서 회로.
  2. 제1 항에 있어서,
    상기 복수의 연결들은 복수의 제1 연결들이고, 상기 인터커넥트 네트워크는 복수의 멀티플렉서들을 포함하고, 각각의 멀티플렉서는 상기 복수의 제1 연결들의 개개의 연결에 커플링된 제1 입력, 및 상기 복수의 시프트 레지스터들의 개개의 시프트 레지스터에 커플링된 출력을 포함하는,
    이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하기 위한 프리프로세서 회로.
  3. 제2 항에 있어서,
    상기 인터커넥트 네트워크는 복수의 제2 연결들을 포함하고, 각각의 제2 연결은 상기 복수의 저장 위치들 중 하나 초과를 상기 복수의 멀티플렉서들의 개개의 멀티플렉서의 제2 입력에 커플링하고, 상기 복수의 저장 위치들 중 하나 이상은 상기 복수의 제2 연결들 중 하나 초과에 커플링되는,
    이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하기 위한 프리프로세서 회로.
  4. 제3 항에 있어서,
    상기 제어 회로는 상기 복수의 제1 연결들 또는 상기 복수의 제2 연결들 중 하나를 선택하도록 상기 복수의 멀티플렉서들을 제어하기 위해 상기 인터커넥트 네트워크의 모드를 세팅하도록 구성되는,
    이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하기 위한 프리프로세서 회로.
  5. 제1 항에 있어서,
    각각의 연결은 상기 복수의 시프트 레지스터들의 개개의 시프트 레지스터를 상기 복수의 저장 위치들의 상이한 패턴에 커플링하는,
    이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하기 위한 프리프로세서 회로.
  6. 제5 항에 있어서,
    상기 복수의 연결들 중 제1 연결을 통해 상기 복수의 시프트 레지스터들의 제1 시프트 레지스터에 커플링된 상기 복수의 저장 위치들의 패턴은, 상기 복수의 연결들 중 제2 연결을 통해 상기 복수의 시프트 레지스터들 중 제2 시프트 레지스터에 커플링된 상기 복수의 저장 위치들의 패턴과 오버랩하는,
    이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하기 위한 프리프로세서 회로.
  7. 제5 항에 있어서,
    상기 복수의 저장 위치들의 상이한 패턴들은 상기 이미지 데이터와 필터 사이의 콘볼루션(convolution)의 파라미터들에 의해 정의되고, 상기 파라미터들은 상기 필터의 폭, 수평 스트라이드 및 수평 확장을 포함하는,
    이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하기 위한 프리프로세서 회로.
  8. 제1 항 내지 제7 항 중 어느 한 항의 프리프로세서 회로를 포함하는 집적 회로로서,
    이미지 데이터가 내부에 저장되어 있는 메모리에 액세스하도록 구성된 메모리 제어기; 및
    이미지 프리프로세서에 커플링되고, 상기 이미지 샘플들의 복수의 스트림들을 프로세싱하도록 구성된 프로세서를 더 포함하는,
    집적 회로.
  9. 제8 항에 있어서,
    상기 프로세서는 데이터 프로세싱 유닛들의 시스토릭 어레이(systolic array)인,
    집적 회로.
  10. 이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하는 방법으로서,
    제1 버퍼에서, 상기 이미지 데이터의 복수의 행들을 저장하고 상기 복수의 행들 중의 행을 출력하는 단계;
    상기 제1 버퍼에 의해 출력된 상기 행의 개개의 복수의 이미지 샘플들을, 복수의 저장 위치들을 갖는 제2 버퍼에 저장하는 단계;
    인터커넥트 네트워크의 복수의 연결들에 기초하여 상기 복수의 시프트 레지스터들에 상기 복수의 이미지 샘플들을 로딩하는 단계 ― 각각의 연결은 복수의 시프트 레지스터들의 개개의 시프트 레지스터를 상기 복수의 저장 위치들 중 하나 초과에 커플링하고, 상기 복수의 저장 위치들 중 하나 이상은 상기 복수의 연결들 중 하나 초과에 커플링됨 ― ;
    상기 이미지 샘플들의 복수의 스트림들을 출력하도록 상기 복수의 시프트 레지스터들을 시프트하는 단계를 포함하는,
    이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하는 방법.
  11. 제10 항에 있어서,
    각각의 연결은 상기 복수의 시프트 레지스터들의 개개의 시프트 레지스터를 상기 복수의 저장 위치들의 상이한 패턴에 커플링하는,
    이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하는 방법.
  12. 제11 항에 있어서,
    상기 복수의 저장 위치들의 상이한 패턴들은 상기 이미지 데이터와 필터 사이의 콘볼루션의 파라미터들에 의해 정의되고, 상기 파라미터들은 상기 필터의 폭, 수평 스트라이드 및 수평 확장을 포함하는,
    이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하는 방법.
  13. 제10 항에 있어서,
    상기 복수의 연결들은 복수의 제1 연결들이고, 상기 인터커넥트 네트워크는 복수의 멀티플렉서들을 포함하고, 각각의 멀티플렉서는 상기 복수의 제1 연결들의 개개의 연결에 커플링된 제1 입력, 및 상기 복수의 시프트 레지스터들의 개개의 시프트 레지스터에 커플링된 출력을 포함하는,
    이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하는 방법.
  14. 제13 항에 있어서,
    상기 인터커넥트 네트워크는 복수의 제2 연결들을 포함하고, 각각의 제2 연결은 상기 복수의 저장 위치들 중 하나 초과를 상기 복수의 멀티플렉서들의 개개의 멀티플렉서의 제2 입력에 커플링하고, 상기 복수의 저장 위치들 중 하나 이상은 상기 복수의 제2 연결들 중 하나 초과에 커플링되는,
    이미지 데이터를 이미지 샘플들의 복수의 스트림들로 포맷팅하는 방법.
KR1020207009985A 2017-10-17 2018-10-11 일반화된 이미지 프로세싱을 위한 이미지 프리프로세싱 KR20200069300A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/786,267 US11386644B2 (en) 2017-10-17 2017-10-17 Image preprocessing for generalized image processing
US15/786,267 2017-10-17
PCT/US2018/055447 WO2019079102A1 (en) 2017-10-17 2018-10-11 IMAGE PRETREATMENT FOR GENERALIZED IMAGE PROCESSING

Publications (1)

Publication Number Publication Date
KR20200069300A true KR20200069300A (ko) 2020-06-16

Family

ID=64110087

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207009985A KR20200069300A (ko) 2017-10-17 2018-10-11 일반화된 이미지 프로세싱을 위한 이미지 프리프로세싱

Country Status (6)

Country Link
US (1) US11386644B2 (ko)
EP (1) EP3698313B1 (ko)
JP (1) JP7277449B2 (ko)
KR (1) KR20200069300A (ko)
CN (1) CN111183452B (ko)
WO (1) WO2019079102A1 (ko)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11429861B1 (en) 2017-05-01 2022-08-30 Perceive Corporation Device storing multiple sets of parameters for machine-trained network
KR102586173B1 (ko) * 2017-10-31 2023-10-10 삼성전자주식회사 프로세서 및 그 제어 방법
US10504462B2 (en) * 2018-01-25 2019-12-10 Qualcomm Incorporated Non-linear processing of two-dimensional data
US11164072B2 (en) 2018-02-08 2021-11-02 Western Digital Technologies, Inc. Convolution engines for systolic neural network processor
US10796198B2 (en) 2018-02-08 2020-10-06 Western Digital Technologies, Inc. Adjusting enhancement coefficients for neural network engine
EP3557485B1 (en) * 2018-04-19 2021-05-26 Aimotive Kft. Method for accelerating operations and accelerator apparatus
US10740434B1 (en) * 2018-04-20 2020-08-11 Perceive Corporation Reduced dot product computation circuit
US11210586B1 (en) 2018-04-20 2021-12-28 Perceive Corporation Weight value decoder of neural network inference circuit
US11783167B1 (en) 2018-04-20 2023-10-10 Perceive Corporation Data transfer for non-dot product computations on neural network inference circuit
US11586910B1 (en) 2018-04-20 2023-02-21 Perceive Corporation Write cache for neural network inference circuit
US11295200B1 (en) 2018-04-20 2022-04-05 Perceive Corporation Time-multiplexed dot products for neural network inference circuit
US11222257B1 (en) 2018-04-20 2022-01-11 Perceive Corporation Non-dot product computations on neural network inference circuit
US11568227B1 (en) 2018-04-20 2023-01-31 Perceive Corporation Neural network inference circuit read controller with multiple operational modes
US11468145B1 (en) 2018-04-20 2022-10-11 Perceive Corporation Storage of input values within core of neural network inference circuit
US11049013B1 (en) 2018-04-20 2021-06-29 Perceive Corporation Encoding of weight values stored on neural network inference circuit
US10795729B2 (en) * 2018-04-28 2020-10-06 Cambricon Technologies Corporation Limited Data accelerated processing system
JP2020035502A (ja) * 2018-08-28 2020-03-05 キオクシア株式会社 半導体集積回路
US10430355B1 (en) * 2018-10-30 2019-10-01 International Business Machines Corporation Mixing restartable and non-restartable requests with performance enhancements
US11847567B1 (en) 2018-12-05 2023-12-19 Perceive Corporation Loss-aware replication of neural network layers
US11995533B1 (en) 2018-12-05 2024-05-28 Perceive Corporation Executing replicated neural network layers on inference circuit
CN111382094B (zh) * 2018-12-29 2021-11-30 深圳云天励飞技术有限公司 一种数据处理方法及装置
US11551082B2 (en) * 2019-01-10 2023-01-10 Koninklijke Philips N.V. Parallel sequence reductions with recursive neural networks
US11347297B1 (en) 2019-01-23 2022-05-31 Perceive Corporation Neural network inference circuit employing dynamic memory sleep
US10929058B2 (en) 2019-03-25 2021-02-23 Western Digital Technologies, Inc. Enhanced memory device architecture for machine learning
US11783176B2 (en) 2019-03-25 2023-10-10 Western Digital Technologies, Inc. Enhanced storage device memory architecture for machine learning
US11216731B2 (en) * 2019-04-10 2022-01-04 Alexander Fairhart Apparatus and process for visual recognition
US11625585B1 (en) 2019-05-21 2023-04-11 Perceive Corporation Compiler for optimizing filter sparsity for neural network implementation configuration
US11379555B2 (en) * 2019-06-28 2022-07-05 Amazon Technologies, Inc. Dilated convolution using systolic array
US11620495B1 (en) 2019-08-16 2023-04-04 Perceive Corporation Neural networks with spatial and temporal features
US11681902B2 (en) 2019-09-27 2023-06-20 Amazon Technologies, Inc. Transposed convolution using systolic array
US11941511B1 (en) 2019-11-11 2024-03-26 Perceive Corporation Storing of intermediate computed values for subsequent use in a machine trained network
CN112819022B (zh) * 2019-11-18 2023-11-07 同方威视技术股份有限公司 基于神经网络的图像识别装置和图像识别方法
DE102020201182A1 (de) * 2020-01-31 2021-08-05 Robert Bosch Gesellschaft mit beschränkter Haftung Hardwarebeschleunigte Berechnung von Faltungen
KR20220015680A (ko) 2020-07-31 2022-02-08 삼성전자주식회사 딥러닝 연산 수행 방법 및 장치
US11748251B2 (en) 2021-01-08 2023-09-05 Microsoft Technology Licensing, Llc Storing tensors in memory based on depth
US11762946B1 (en) * 2022-09-23 2023-09-19 Recogni Inc. Systems for using shifter circuit and 3×3 convolver units to emulate functionality of larger sized convolver units

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2001054054A (ja) * 1999-08-05 2001-02-23 Canon Inc 画像処理装置およびその方法
US6744929B1 (en) * 1999-11-18 2004-06-01 Nikon Corporation Image data compression method image data compression apparatus and recording medium and data signal for providing image data compression program
US6346825B1 (en) 2000-10-06 2002-02-12 Xilinx, Inc. Block RAM with configurable data width and parity for use in a field programmable gate array
JP4076963B2 (ja) * 2004-02-06 2008-04-16 シャープ株式会社 シフトレジスタ及び表示装置
US7881320B1 (en) * 2005-12-12 2011-02-01 Xilinx, Inc. Parsing data from multiple digital bitstreams
TWI319864B (en) * 2006-01-27 2010-01-21 Driving circuit and driving method of a liquid crystal display device
TWI340941B (en) * 2006-05-19 2011-04-21 Chimei Innolux Corp System for displaying image
US7502980B2 (en) * 2006-08-24 2009-03-10 Advantest Corporation Signal generator, test apparatus, and circuit device
CA2637343A1 (en) * 2008-07-29 2010-01-29 Ignis Innovation Inc. Improving the display source driver
US8687922B2 (en) * 2012-02-24 2014-04-01 Apple Inc. Parallel scaler processing
US9235498B1 (en) * 2013-06-03 2016-01-12 Xilinx, Inc. Circuits for and methods of enabling the modification of an input data stream
US9477999B2 (en) * 2013-09-20 2016-10-25 The Board Of Trustees Of The Leland Stanford Junior University Low power programmable image processor
KR102225324B1 (ko) * 2014-06-09 2021-03-10 삼성디스플레이 주식회사 데이터 구동부
US10061537B2 (en) 2015-08-13 2018-08-28 Microsoft Technology Licensing, Llc Data reordering using buffers and memory
JP6700712B2 (ja) 2015-10-21 2020-05-27 キヤノン株式会社 畳み込み演算装置
US10204396B2 (en) 2016-02-26 2019-02-12 Google Llc Compiler managed memory for image processor
US10380969B2 (en) 2016-02-28 2019-08-13 Google Llc Macro I/O unit for image processor
US11620490B2 (en) * 2017-10-17 2023-04-04 Xilinx, Inc. Multi-layer neural network processing by a neural network accelerator using host communicated merged weights and a package of per-layer instructions

Also Published As

Publication number Publication date
US11386644B2 (en) 2022-07-12
WO2019079102A1 (en) 2019-04-25
JP2020537788A (ja) 2020-12-24
CN111183452B (zh) 2023-03-24
EP3698313B1 (en) 2023-12-20
JP7277449B2 (ja) 2023-05-19
CN111183452A (zh) 2020-05-19
US20190114499A1 (en) 2019-04-18
EP3698313A1 (en) 2020-08-26

Similar Documents

Publication Publication Date Title
JP7277449B2 (ja) 汎用化画像処理の画像前処理
KR102578508B1 (ko) 호스트 전달되는 병합된 가중치들 및 계층별 명령어들의 패키지를 사용한 뉴럴 네트워크 가속기에 의한 다중 계층 뉴럴 네트워크 프로세싱
KR102562715B1 (ko) 다수의 프로세서들 및 뉴럴 네트워크 가속기를 갖는 뉴럴 네트워크 프로세싱 시스템
JP7337053B2 (ja) 超並列ソフトウェア定義ハードウェアシステムにおける静的ブロックスケジューリング
US11429848B2 (en) Host-directed multi-layer neural network processing via per-layer work requests
US10354733B1 (en) Software-defined memory bandwidth reduction by hierarchical stream buffering for general matrix multiplication in a programmable IC
US10984500B1 (en) Inline image preprocessing for convolution operations using a matrix multiplier on an integrated circuit
US11568218B2 (en) Neural network processing system having host controlled kernel acclerators
US10515135B1 (en) Data format suitable for fast massively parallel general matrix multiplication in a programmable IC
US10943039B1 (en) Software-driven design optimization for fixed-point multiply-accumulate circuitry
EP4010793A1 (en) Compiler flow logic for reconfigurable architectures
US11036827B1 (en) Software-defined buffer/transposer for general matrix multiplication in a programmable IC
JP2006351047A (ja) データ処理装置および方法、コンピュータプログラム、情報記憶媒体、並列演算装置、データ処理システム
JP2022537433A (ja) バックプロパゲーションを直接用いたプログラマブルデバイスブロックのニューラルネットワークの学習

Legal Events

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