KR102278658B1 - 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처 - Google Patents

높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처 Download PDF

Info

Publication number
KR102278658B1
KR102278658B1 KR1020197011226A KR20197011226A KR102278658B1 KR 102278658 B1 KR102278658 B1 KR 102278658B1 KR 1020197011226 A KR1020197011226 A KR 1020197011226A KR 20197011226 A KR20197011226 A KR 20197011226A KR 102278658 B1 KR102278658 B1 KR 102278658B1
Authority
KR
South Korea
Prior art keywords
processor
dimensional
array
sheet
shift register
Prior art date
Application number
KR1020197011226A
Other languages
English (en)
Other versions
KR20190043643A (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 KR20190043643A publication Critical patent/KR20190043643A/ko
Application granted granted Critical
Publication of KR102278658B1 publication Critical patent/KR102278658B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/14Picture signal circuitry for video frequency region
    • 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
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N25/00Circuitry of solid-state image sensors [SSIS]; Control thereof
    • H04N25/70SSIS architectures; Circuits associated therewith
    • H04N25/71Charge-coupled device [CCD] sensors; Charge-transfer registers specially adapted for CCD sensors
    • H04N25/75Circuitry for providing, modifying or processing image signals from the pixel array
    • H04N5/378
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N5/00Details of television systems
    • H04N5/76Television signal recording
    • H04N5/91Television signal processing therefor
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Image Processing (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

장치가 설명된다. 상기 장치는 이미지 처리 유닛(IPU)을 포함한다. 이미지 유닛은 네트워크를 포함한다. 이미지 처리 유닛은, 2 차원 시프트 레지스터 어레이 구조에 연결되어 프로그램 코드의 실행을 통해 복수의 중첩 스텐실들을 동시에 처리하는 실행 유닛 레인들의 어레이를 각각 포함하는 복수의 스텐실 프로세서 회로들을 포함한다. 이미지 처리 유닛은 복수의 스텐실 프로세서들과 네트워크 사이에 각각 결합된 복수의 시트 생성기들을 포함한다. 시트 생성기들은 이미지 데이터의 입력 라인 그룹들을 스텐실 프로세서에 의한 처리를 위한 이미지 데이터의 입력 시트들로 파싱하고, 스텐실 프로세서들로부터 수신된 이미지 데이터의 출력 시트들로부터 이미지 데이터의 출력 라인 그룹들을 형성한다. 이미지 처리 유닛은, 네트워크에 연결되어 전체 프로그램 흐름을 구현하기 위해 생성 스텐실 프로세서들로부터 소비 스텐실 프로세서들에 이르는 방향으로 라인 그룹들을 패스하는 복수의 라인 버퍼 유닛을 포함한다.

Description

높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처{ARCHITECTURE FOR HIGH PERFORMANCE, POWER EFFICIENT, PROGRAMMABLE IMAGE PROCESSING}
본 발명의 분야는 일반적으로 이미지 처리에 관한 것으로, 더 구체적으로는 고성능, 전력 효율, 프로그램 가능한 이미지 처리를 위한 아키텍처에 관한 것이다.
이미지 처리는 일반적으로 어레이로 편성되는 픽셀 값의 처리를 포함한다. 여기서, 공간적으로 편성된 2 차원 어레이는 이미지의 2 차원 특성을 캡춰한다(추가적인 차원들은 시간(예를 들어, 2 차원 이미지의 시퀀스) 및 데이터 유형(예를 들어, 컬러)을 포함할 수 있다. 일반적인 시나리오로 어레이된 픽셀 값은 모션의 이미지를 캡처하기 위해 정지 이미지 또는 프레임 시퀀스를 생성한 카메라에 의해 제공된다. 통상적인 이미지 프로세서는 일반적으로 2개의 극단(extreams)의 각 측면에 있다.
제1 극단은 범용 프로세서 또는 범용과 유사한 프로세서(예를 들어, 벡터 명령 강화를 갖는 범용 프로세서)상에서 실행되는 소프트웨어 프로그램으로서 이미지 처리 작업을 수행한다. 비록 제1 극단은 일반적으로 매우 융통성있는 어플리케이션 소프트웨어 개발 플랫폼을 제공하지만 연관된 오버 헤드(예 : 명령 인출 및 디코드, 온칩 및 오프 칩 데이터 처리, 추측 실행)와 결합된 보다 정교한 데이터 구조의 사용은 궁극적으로 프로그램 코드의 실행 동안 데이터의 단위당 더 많은 양의 에너지가 소모된다.
반대인 제2 극단은 고정 기능의 하드-와이어드 회로를 훨씬 더 큰 데이터 블록에 적용한다. 커스텀 설계 회로에 직접적으로 적용되는 더 큰 (정교한 것에 반대인) 데이터 블록(대단히 정교하지 않은 블록)을 사용하면 데이터 단위당 전력 소비가 크게 감소한다. 그러나 맞춤 설계된 고정 기능 회로를 사용하면 일반적으로 프로세서가 수행할 수있는 작업이 제한적이다. 이와 같이 고도로 융통성이 있는 프로그래밍 환경(제1 극단과 관련됨)은 제2 극단에서 결여되어 있다.
고도로 융통성 있는 어플리케이션 소프트웨어 개발 기회와 데이터 단위당 개선된 전력 효율성을 겸비한 기술 플랫폼이 바람직하지만 해결책이지만 아직 제안된바 없다.
장치가 설명된다. 상기 장치는 이미지 처리 유닛(IPU)을 포함한다. 이미지 유닛은 네트워크를 포함한다. 이미지 처리 유닛은, 2 차원 시프트 레지스터 어레이 구조에 연결되어 프로그램 코드의 실행을 통해 복수의 중첩 스텐실들을 동시에 처리하는 실행 유닛 레인들의 어레이를 각각 포함하는 복수의 스텐실 프로세서 회로들을 포함한다. 이미지 처리 유닛은 복수의 스텐실 프로세서들과 네트워크 사이에 각각 결합된 복수의 시트 생성기들을 포함한다. 시트 생성기들은 이미지 데이터의 입력 라인 그룹들을 스텐실 프로세서에 의한 처리를 위한 이미지 데이터의 입력 시트들로 파싱하고, 스텐실 프로세서들로부터 수신된 이미지 데이터의 출력 시트들로부터 이미지 데이터의 출력 라인 그룹들을 형성한다. 이미지 처리 유닛은, 네트워크에 연결되어 전체 프로그램 흐름을 구현하기 위해 생성 스텐실 프로세서들로부터 소비 스텐실 프로세서들에 이르는 방향으로 라인 그룹들을 패스하는 복수의 라인 버퍼 유닛을 포함한다.
다음의 설명 및 첨부 도면은 본 발명의 실시 예를 설명하기 위해 사용된다.
도 1은 이미지 프로세서 하드웨어 아키텍처의 예를 도시한 것이다.
도 2a,도 2b,도 2c,도 2d 및 도 2e는 라인 그룹으로의 이미지 데이터의 파싱, 시트로의 라인 그룹의 파싱 및 중첩 스텐실을 갖는 시트 상에서 수행되는 동작을 도시한 것이다
도 3a는 스텐실 프로세서의 예를 도시한 것이다.
도 3b는 스텐실 프로세서의 명령어의 예를 도시한 것이다.
도 4는 스텐실 프로세서 내의 데이터 연산 유닛의 예를 도시한 것이다.
도 5a, 5b, 5c, 5d, 5e, 5f, 5g, 5h, 5i, 5j 및 5k는 중첩 스텐실들로 한 쌍의 이웃 출력 픽섹값을 결정하기 위해 2차원 시프트 어레이 및 실행 레인 어레이를 사용하는 예를 도시한 것이다.
도 6은 통합된 실행 레인 어레이 및 2 차원 시프트 어레이를 위한 유닛 셀의 예를 도시한 것이다.
도 7은 이미지 처리 프로그램 코드를 개발 및 구현하기 위한 절차를 도시한 것이다.
도 8은 이미지 프로세서를 구성하기 위한 절차를 도시한 것이다.
도 9a 및 도 9b는 라인 버퍼 유닛의 동작을 도시한 것이다.
도 2 10a 및 10b는 DAG 프로그램 흐름을 도시한 것이다.
도 2 11a, 11b 및 11c는 파이프 라인 프로그램 흐름을 도시한 것이다.
도 12는 예시적인 컴퓨팅 시스템을 도시한 것이다.
a. 이미지 프로세서 하드웨어 아키텍처 및 동작
도 1은 하드웨어로 구현된 이미지 프로세서에 대한 아키텍처(100)의 실시 예를 도시한다. 이미지 프로세서는, 예를 들어, 시뮬레이션된 환경 내의 가상 프로세서 용으로 기록된 프로그램 코드를 하드웨어 프로세서에 의해 실제로 실행되는 프로그램 코드로 변환하는 컴파일러에 의해 타켓팅될 수 있다. 도 1에 도시된 바와 같이, 아키텍처(100)는 네트워크(104) (예컨대, 온 칩(on-chip) 스위치 네트워크, 온칩(on-chip) 링 네트워크 또는 다른 종류의 네트워크를 포함하는 네트워크)를 통해 복수의 스텐실 프로세서 유닛(102_1~102_N)과 대응하는 시트 생성 유닛(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 스테이지의 기능을 수행하고, 추가적인 제어 플로우 메쏘드들이 파이프 라인의 한 스테이지로부터 파이프 라인의 다음 스테이지로 출력 이미지 데이터를 패스하도록 설치될 수 있다.
다른 구성에서, 이미지 프로세서는 동일한 커널 프로그램 코드를 동작시키는 2 이상의 스텐실 프로세서(102_1, 102_2)를 갖는 병렬 머신으로서 실현될 수 있다. 예를 들어, 고밀도 및 고 데이터 속도 스트림의 이미지 데이터는 각각이 동일한 기능을 수행하는 복수의 스텐실 프로세서에 걸쳐 프레임을 확산시킴으로써 처리될 수 있다.
또 다른 구성에서, 본질적으로 임의의 커널들의 DAG는 각각의 스텐실 프로세서를 그들 자신의 각각의 커널 프로그램 코드로 구성하고 적절한 제어 흐름 훅들(hooks)을 하드웨어에 구성하여 하나의 커널로부터의 출력 이미지들을 DAG 디자인에서의 다음 커널의 입력으로 향하게 함으로써 하드웨어 프로세서상에 로딩될 수 있다.
일반적인 흐름으로서, 이미지 데이터의 프레임은 매크로 I/O 유닛(105)에 의해 수신되고 프레임 단위로 하나 이상의 라인 버퍼 유닛(101)으로 전달된다. 특정 라인 버퍼 유닛은 이미지 데이터의 프레임을 "라인 그룹"이라 불리는 더 작은 이미지 데이터 영역으로 파싱한 다음, 라인 그룹을 네트워크(104)를 통해 특정 시트 생성기로 전달한다. 완전한 또는 "전체의" 단일 라인 그룹은, 예를 들어, 프레임의 복수의 연속적인 완전한 행 또는 열의 데이터로 구성될 수 있다 (간략성을 위해, 본 명세서는 주로 연속적인 행을 언급할 것이다). 시트 생성기는 이미지 데이터의 라인 그룹을 "시트"라고 하는 더 작은 이미지 데이터 영역으로 파싱하고 해당 시트를 해당 스텐실 프로세서에 제공한다.
이미지 처리 파이프 라인 또는 단일 입력을 갖는 DAG 플로우의 경우, 일반적으로, 입력 프레임은 이미지 데이터를 라인 그룹으로 파싱하고 라인 그룹을 시트 생성기(103_1)로 향하게 하는 동일 라인 버퍼 유닛(101_1)로 전달되며, 이의 대응하는 스텐실 프로세서(102_1)는 파이프라인/DAG의 제 1 커널의 코드를 실행한다. 시트 처리기(103_1)는 그가 처리하는 라인 그룹에 대한 스텐실 처리기(102_1)의 동작이 완료되면, 출력 라인 그룹을 "다운 스트림" 라인 버퍼 유닛(101_2)에 보낸다 (몇몇 경우에, 출력 라인 그룹은 이전에 입력 라인 그룹을 송신한 동일 라인 버퍼 유닛(101_1))에 다시 보내진다).
자신들의 각각의 다른 시트 생성기 및 스텐실 프로세서(예를 들어, 시트 생성기(103_2) 및 스텐실 프로세서(102_2))에서 실행중인 파이프 라인/DAG의 다음 스테이지/동작을 나타내는 하나 이상의 "소비자" 커널은 이후, 하류 라인 버퍼 유닛(101_2)으로부터 제 1 스텐실 프로세서(102_1)에 의해 생성된 이미지 데이터를 수신한다. 이러한 방식으로, 제 1 스텐실 프로세서상에서 동작하는 "생산자"커널은 제 2 스텐실 프로세서상에서 동작하는 "소비자"커널에 전송된 출력 데이터를 가지며, 여기서 소비자 커널은 전체 파이프 라인 또는 DAG의 디자인과 일치하는 생산자 커널 이후의 다음 세트의 작업을 수행한다.
스텐실 프로세서(102)는 이미지 데이터의 복수의 중첩 스텐실 상에서 동시에 동작하도록 설계된다. 스텐실 프로세서의 여러 중첩 스텐실 및 내부 하드웨어 처리 용량은 시트의 크기를 효과적으로 결정한다. 여기서, 스텐실 프로세서(102) 내에서, 실행 레인의 어레이는 조화롭게 동작하여 복수의 중첩 스텐실에 의해 커버되는 이미지 데이터 표면 영역을 동시에 처리한다.
아래에서보다 상세히 설명되는 바와 같이, 다양한 실시 예에서, 이미지 데이터 시트는 스텐실 프로세서(102) 내의 2 차원 레지스터 어레이 구조로 로딩된다. 시트 및 2 차원 레지스터 어레이 구조의 사용은 대량의 레지스터 공간으로 많은 양의 데이터를 이동시킴으로써 전력 소비 개선을 효과적으로 제공하는 것으로 믿어진다. 예를 들어, 단일 로드 연산은 데이터는 실행 레인 어레이에 의해 그 직후에 저장된다. 또한 실행 레인 어레이과 해당 레지스터 어레이을 사용하면 쉽게 프로그래밍/구성할 수 있는 다양한 스텐실 크기를 사용할 수 있다.
도 2 도 2a 내지도 2e는 라인 버퍼 유닛(101)의 파싱 활동 및 시트 생성기 유닛(103)의 더 미세화된 파싱 활동뿐만 아니라, 시트 생성기 유닛(103)에 결합된 스텐실 프로세서(102)의 스텐실 처리 활동의 높은 수준의 실시 예를 도시한다.
도 2a는 이미지 데이터(201)의 입력 프레임의 실시 예를 도시한다. 도 2a는 또한 스텐실 프로세서가 동작하도록 설계된 3개의 중첩 스텐실(202)(각각 3 x 3 픽셀의 치수를 가짐)의 윤곽을 도시한다. 각 스텐실이 출력 이미지 데이터를 각각 생성하는 출력 픽셀은 검정 색으로 강조 표시된다. 단순화를 위해, 3개의 중첩 스텐실(202)은 수직 방향으로만 오버랩되는 것으로 도시되어있다. 실제로 스텐실 프로세서는 수직 및 수평 방향 모두에서 중첩 스텐실을 갖도록 설계될 수 있음을 인식하는 것이 적절하다.
스텐실 프로세서 내의 수직 오버랩 스텐실(202) 때문에, 도 2a에 도시된 바와 같이, 단일 스텐실 프로세서가 동작할 수 있는 프레임 내에는 넓은 범위의 이미지 데이터가 존재한다. 아래에서보다 상세히 설명되는 바와 같이, 일 실시 예에서, 스텐실 프로세서는 이미지 데이터를 가로질러 좌측에서 우측 방식으로 그들의 중첩 스텐실 내의 데이터를 처리한다(그리고 다음의 라인 세트에 대해 위에서 아래로 순서대로 반복한다). 따라서 스텐실 프로세서가 계속해서 작동하면서 굵은 흑색 출력 픽셀 블록의 수는 수평으로 오른쪽으로 증가한다. 전술한 바와 같이, 라인 버퍼 유닛(101)은 스텐실 프로세서가 확장된 수의 다가올 사이클 동안 동작하기에 충분한 인입 프레임으로부터 입력 이미지 데이터의 라인 그룹을 파싱하는 역할을 한다. 라인 그룹의 예시적인 묘사는 음영 영역(203)으로 도시되어있다. 일 실시 예에서, 라인 버퍼 유닛(101)은 시트 생성기로 또는 시트 생성기로부터 라인 그룹을 송신/수신하기 위한 상이한 다이나믹스를 포함할 수 있다.
예를 들어, "전체 그룹"이라고 하는 하나의 모드에 따르면, 이미지 데이터의 완전한 전체 폭의 라인은 라인 버퍼 유닛과 시트 생성기 사이에서 전달된다. "가상 높이"라고 하는 제 2 모드에 따르면 라인 그룹은 처음에는 전체 너비 행의 하위 집합과 함께 전달된다. 나머지 행은 작은(전체 너비보다 작은) 부분으로 순차적으로 전달된다.
라인 버퍼 유닛에 의해 정의되고 입력 생성기 유닛으로 전달된 입력 이미지 데이터의 라인 그룹(203)에 의해, 시트 생성기 유닛은 스텐실의 하드웨어 한계에 보다 정확하게 맞는 보다 미세한 시트로 라인 그룹을 더 파싱한다. 보다 상세하게는, 이하에서 더 상세히 설명되는 바와 같이, 일 실시 예에서, 각 스텐실 프로세서는 2 차원 시프트 레지스터 어레이로 구성된다. 2 차원 시프트 레지스터 어레이는 본질적으로 이미지 데이터를 "레인 아래"로 이동시키며, 여기서 시프팅 패턴은 각 실행 레인이 각각의 스텐실 내의 데이터에 대해 작동하게 한다(즉, 각 실행 레인은 그 자신의 스텐실을 처리한다). 해당 스텐실에 대한 출력을 생성하는 정보). 일 실시 예에서, 시트는 2 차원 시프트 레지스터 어레이에 "채워지거나" 로드되는 입력 이미지 데이터의 표면 영역이다.
아래에서 더 상세히 설명되는 바와 같이, 다양한 실시 예에서, 실제로 임의의 사이클에서 시프트될 수 있는 2 차원 레지스터 데이터의 다중 층이 존재한다. 편의상, 본 설명의 대부분은 "2차원 시프트 레지스터"등의 용어를 시프트될 수 있는 2 차원 레지스터 데이터의 하나 이상의 그러한 계층을 갖는 구조를 지칭하기 위해 간단히 사용할 것이다.
따라서, 도 2b에서 보인 바와 같이, 시트 생성기는 라인 그룹(203)으로부터 초기 시트(204)를 파싱하고 그것을 스텐실 프로세서(여기에서, 데이터 시트는 일반적으로 참조 번호(204)로 식별되는 음영 영역에 대응함)에 제공한다. 도 2c 및 도 2d에 도시된 바와 같이, 스텐실 프로세서는 중첩 스텐실(202)을 시트 위로 좌측에서 우측으로 효과적으로 이동시킴으로써 입력 이미지 데이터 시트에 대해 작동한다. 도 2d에서와 같이, 시트 내의 데이터로부터 산출될 수있는 픽셀의 수는 소진된다(다른 픽셀 위치는 시트 내의 정보로부터 결정된 출력 값을 가질 수 없다). 단순화를 위해 이미지의 경계 영역은 무시되었다.
도 2e에서 보인 바와 같이, 시트 발생기는 스텐실 프로세서가 작업을 계속하기 위해 다음 시트(205)를 제공한다. 스텐실이 다음 시트에서 작동하기 시작할 때의 스텐실의 초기 위치는(도 2d에서 이전에 도시된 바와 같이) 제1시트 상의 고갈 지점으로부터 우측으로의 다음 진행이다. 새로운 시트(205)로, 스텐실 프로세서가 제 1 시트의 처리와 동일한 방식으로 새로운 시트 상에서 작동함에 따라 스텐실은 오른쪽으로 계속 이동할 것이다.
출력 픽셀 위치를 둘러싸는 스텐실의 경계 영역 때문에 제 1 시트(204)의 데이터와 제 2 시트(205)의 데이터 사이에 약간의 중첩이 있음을 주목한다. 오버랩되는 데이터를 두 번 재전송하는 시트 생성기만으로 오버랩을 처리할 수있다. 다른 실시 예에서, 스텐실 프로세서에 다음 시트를 공급하기 위해, 시트 생성기는 스텐실 프로세서에 새로운 데이터를 전송하기 만하고, 스텐실 프로세서는 이전 시트로부터의 중첩 데이터를 재사용할 수 있다.
b. 스텐실 프로세서 설계 및 동작
도 3은 스텐실 프로세서 구조(300)의 실시 예를 도시한다. 도 3에서 보인 바와 같이, 스텐실 프로세서는 데이터 연산 유닛(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)에 저장한다.
나중에 I/O 유닛(304)이 랜덤 엑세스 메모리들(307)로부터 데이터를 인출하여 출력 시트를 형성하면 시트 생성기로 전송된다.
스칼라 프로세서(302)는 스텐실 프로세서(303)로부터 스텐실 프로세서의 프로그램 코드의 명령을 판독하고 명령을 실행 레인 어레이(305)의 실행 레인에 발행하는 프로그램 제어기(309)를 포함한다. 일 실시 예에서, 단일의 동일한 명령이 데이터 연산 유닛(301)으로부터 SIMD와 유사한 행동을 행하기 위해 어레이(305) 내의 모든 실행 레인으로 방송된다. 일 실시 예에서, 스칼라 메모리(303)로부터 판독되고 실행 레인 어레이(305)의 실행 레인에 발행되는 명령의 명령 포맷은 명령 당 둘 이상의 연산 코드를 포함하는 VLIW(very-long-instruction-word) 타입 포맷을 포함한다. 또 다른 실시 예에서, VLIW 포맷은 각 실행 레인의 ALU(후술하는 바와 같이, 일 실시 예에서 하나 이상의 전통적인 ALU 연산을 지정할 수 있음) 및 메모리 오퍼랜드(특정 실행 레인 또는 실행 레인 세트에 대한 메모리 동작을 지령함) 에 의해 수행되는 수학적 기능을 지시하는 ALU 연산 코드를 포함한다
"실행 레인"이라는 용어는 명령(예를 들어, 명령을 실행할 수 있는 논리 회로)을 실행할 수 있는 하나 이상의 실행 유닛들의 세트를 지칭한다. 실행 레인은, 다양한 실시 예에서, 그러나 단지 실행 유닛 이상의 프로세서 - 유사 기능을 포함할 수 있다. 예를 들어, 하나 이상의 실행 유닛 외에도, 실행 레인은 수신된 명령을 디코딩하는 논리 회로 또는 더 많은 MIMD와 유사한 설계의 경우 명령을 페치하고 디코드하는 논리 회로를 포함할 수 있다. MIMD 형 접근법과 관련하여, 중앙 집중형 프로그램 제어 접근법이 본 명세서에 대부분 기술되었지만, 다양한 대안적인 실시 예(예를 들어, 프로그램 코드 및 어레이(305)의 각 실행 레인 내의 프로그램 제어기를 포함함)로 구현될 수 있다.
실행 레인 어레이(305), 프로그램 제어기(309) 및 2 차원 시프트 레지스터 구조(306)의 조합은 광범위한 프로그램 가능 기능을 위한 광범위하게 적응/구성 가능한 하드웨어 플랫폼을 제공한다. 예를 들어, 어플리케이션 소프트웨어 개발자는 개별 실행 레인이 다양한 기능을 수행할 수 있고(즉 스텐실 크기와 같은) 넓은 범위의 다양한 기능을 갖춘 커널을 프로그래밍할 수 있으며, 임의의 출력 어레이 위치에 근접한 이미지 데이터를 입력한다.
실행 레인 어레이(305)에 의해 동작되는 이미지 데이터에 대한 데이터 저장소로서 동작하는 것 외에, 랜덤 액세스 메모리(307)는 하나 이상의 룩업 테이블을 유지할 수도 있다. 다양한 실시 예에서, 하나 이상의 스칼라 룩업 테이블이 또한 스칼라 메모리(303) 내에서 인스턴스화될 수 있다.
스칼라 룩업(scalar look-up)은 동일한 룩업 테이블로부터의 동일한 데이터 값을 동일한 인덱스로부터 실행 레인 어레이(305) 내의 각 실행 레인으로 전달하는 것을 포함한다. 다양한 실시 예에서, 전술한 VLIW 명령 포맷은 스칼라 프로세서에 의해 수행된 룩업 연산을 스칼라 룩업 테이블로 향하게하는 스칼라 연산 코드를 포함하도록 확장된다. opcode와 함께 사용하도록 지정된 인덱스는 즉치 오퍼랜드이거나 다른 데이터 저장 위치에서 가져올 수 있다. 그럼에도 불구하고, 일 실시 예에서, 스칼라 메모리 내의 스칼라 룩업 테이블로부터의 룩업은 본질적으로 동일한 클럭 사이클 동안 실행 레인 어레이(305) 내의 모든 실행 레인으로 동일한 데이터 값을 방송하는 것을 포함한다. 룩업 테이블의 사용 및 작동에 관한 추가 세부 사항은 아래에 제공된다.
도 3b는 전술한 VLIW 명령어 어휘들(들)을 요약한다. 도 3b에서 보인 바와 같이, VLIW 명령 워드 포맷은 3 개의 개별 명령들에 대한 필드들을 포함한다. 1) 스칼라 프로세서에 의해 실행되는 스칼라 명령(351); 2) 실행 레인 어레이 내의 각각의 ALU에 의해 SIMD 방식으로 방송되고 실행되는 ALU 명령(352); 및 3) 부분적인 SIMD 방식으로 방송되고 실행되는 메모리 명령(353)(예를 들어, 실행 레인 어레이의 동일한 행을 따르는 실행 레인이 동일한 랜덤 액세스 메모리를 공유하고, 다른 행의 각각으로부터 하나의 실행 레인을 공유한다면 실제로 명령을 실행한다(메모리 명령(353)의 포맷은 각 행으로부터 어느 실행 레인이 명령을 실행하는지를 식별하는 피 연산자를 포함할 수 있다)
하나 이상의 즉시 오퍼랜드에 대한 필드(354)도 포함된다. 명령들(351, 352, 353) 중 어떤 것이 명령형에서 식별될 수 있는 어떤 즉각적인 오퍼랜드 정보를 사용한다. 명령들(351, 352, 353) 각각은 또한 그들 자신의 각각의 입력 오퍼랜드 및 결과 정보(예를 들어, ALU 동작을 위한 로컬 레지스터 및 로컬 레지스터 및 메모리 액세스 명령을 위한 메모리 어드레스)를 포함한다. 일 실시 예에서, 스칼라 명령(351)은 실행 레인 어레이 내의 실행 레인이 명령(352, 353) 중 하나를 실행하기 전에 스칼라 프로세서에 의해 실행된다. 즉, VLIW 워드의 실행은 스칼라 명령(351)이 실행되는 제 1 사이클을 포함하고, 다른 명령들(352, 353)과 함께 제 2 사이클이 (다양한 실시 예들에서 명령들(352 및 353)과 병행하여)실행될 수 있다.
일 실시 예에서, 스칼라 프로세서에 의해 실행되는 스칼라 명령은 데이터 연산 유닛의 메모리 또는 2D 시프트 레지스터로부터 시트를 로드/저장하기 위해 시트 생성기에 발행되는 명령을 포함한다. 여기서, 시트 생성기의 동작은 라인 버퍼 유닛의 동작 또는 스칼라 프로세서에 의해 발행된 명령을 완료하기 위해 시트 생성기에 걸리는 사이클 수의 사전 실행 시간 이해를 방해하는 다른 변수에 의존할 수 있다. 이와 같이, 일 실시 예에서, 스칼라 명령(351)이 시트 생성기에 발행되도록 명령을 내리는 다른 VLIW 워드는 또한 다른 2 개의 명령 필드(352, 353)에 무 조작(NOOP) 명령을 포함한다. 그 다음, 프로그램 코드는 시트 생성기가 데이터 연산 유닛으로/로부터 로드/저장을 완료할 때까지 명령어 필드(352, 353)에 대한 NOOP 명령어 루프를 입력한다. 여기서, 시트 생성기에 명령을 발행할 때, 스칼라 프로세서는 명령 완료시 시트 생성기가 재설정하는 인터록 레지스터 비트를 설정할 수 있다. NOOP 루프 동안 스칼라 프로세서는 인터록 비트의 비트를 모니터링한다. 스칼라 프로세서가 시트 생성기가 명령을 완료했다는 것을 감지하면 정상 실행이 다시 시작된다.
도 4는 데이터 연산 컴포넌트(401)의 실시 예를 도시한다. 도 4에서 보인 바와 같이, 데이터 연산 컴포넌트(401)는 2 차원 시프트 레지스터 어레이 구조(406)의 "위"에 논리적으로 위치되는 실행 레인 어레이(405)를 포함한다. 상술한 바와 같이, 다양한 실시 예들에서, 시트 생성기에 의해 제공된 이미지 데이터 시트는 2 차원 시프트 레지스터(406)에 로딩된다. 그런 다음, 실행 레인은 레지스터 구조(406)로부터의 시트 데이터에 대해 연산한다.
실행 레인 어레이(405) 및 시프트 레지스터 구조(406)는 서로에 대한 위치에 고정된다. 그러나, 시프트 레지스터 어레이(406) 내의 데이터는 전략적으로 조정된 방식으로 시프트되어 실행 레인 어레이의 각 실행 레인이 데이터 내의 다른 스텐실을 처리하게 한다. 따라서 각 실행 레인은 생성되는 출력 시트의 다른 픽셀에 대한 출력 이미지 값을 결정한다. 도 4의 아키텍처로부터, 중첩 스텐실은 실행 레인 어레이(405)가 수직으로 인접한 실행 레인뿐만 아니라 수평으로 인접한 실행 레인을 포함하므로 수직으로 정렬 및 수평으로 정렬됨이 분명하다.
데이터 연산 유닛(401)의 일부 주목할만한 구조적 특징은 실행 레인 어레이(405)보다 넓은 치수를 갖는 시프트 레지스터 구조(406)를 포함한다. 즉, 실행 레인 어레이(405) 외부에 레지스터(409)의 "할로(halo)"이 있다. 할로(409)은 실행 레인 어레이의 양측에 존재하는 것으로 도시되어 있지만, 구현에 따라, 할로은 실행 레인 어레이(405)의 적은(1 개) 또는 그 이상(3 또는 4 개)의 측면 상에 존재할 수 있다. 할로(405)는 데이터가 실행 레인(405)의 "아래"로 시프팅되고 있을 때 실행 레인 어레이(405)의 경계 바깥으로 유출되는 데이터에 대해 "스필 오버(spill-over)"공간을 제공하는 역할을 한다. 간단한 경우로서, 실행 레인 어레이(405)의 우측 에지를 중심으로 하는 5x5 스텐실은 스텐실의 가장 왼쪽 픽셀이 처리될 때 우측으로 네 개의할로 레지스터 위치를 필요로할 것이다. 도 4를 용이하게하기 위해,도 4는 명목상의 실시 예에서, 수평 시프트 접속만을 갖는 것으로 할로의 우측의 레지스터들 및 수직 시프트 접속들을 갖는 것으로서 할로의 하부 측의 레지스터들을 도시한다(오른쪽, 아래) 수평 및 수직 연결을 모두 것이다.
어레이의 각 행 및/또는 각 열 또는 그 일부(예를 들어, 랜덤 액세스 메모리는 실행 레인 어레이의 "영역"에 할당될 수 있음)에 연결된 랜덤 액세스 메모리(407)에 의해 추가 스필 오버 룸이 제공된다 4 개의 실행 레인 행과 2 개의 실행 레인 열을 현명하게 나타낸다. 단순화를 위해 나머지 응용 프로그램은 주로 행 및/또는 열 기반할당 체계를 참조한다. 여기서, 실행 레인의 커널 동작이 2 차원 시프트 레지스터 어레이(406)(일부 이미지 처리 루틴이 요구할 수있는) 외부의 픽셀 값을 처리하도록 요구하는 경우, 이미지 데이터의 평면은 예를 들어,할로 영역(409)을 랜덤 엑세스 메모리(407)에 저장한다. 예를 들어, 하드웨어가 실행 레인 어레이의 오른쪽 가장자리에 있는 실행 레인 오른쪽에 4 개의 저장 요소만 있는 할로 영역을 포함하는 6X6 스텐실을 고려해보자. 이 경우, 데이터는 스텐실을 완전히 처리하기 위해 할로(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를 포함한다. 아래에서 더 상세히 설명되는 바와 같이, 일 실시 예에서, 시프트 레지스터는 어레이 위치 당 복수의( "깊이"의) 저장/레지스터 요소로 실제로 구현되지만, 시프팅 활동은 저장 요소의 하나의 평면(예를 들어, 저장 요소에 의한 평면 만주기 당 이동할 수 있음). 도 2 도 5a 내지도 5k는 각각의 실행 레인으로부터 결과적인 X를 저장하는데 사용되는 이들 깊은 레지스터 위치들 중 하나를 나타낸다. 설명의 용이함을 위해, 더 깊은 결과 레지스터는 그 상대 레지스터(R2)보다 오히려 나란히 그려진다.
도 5a 내지도 5k는 실행 레인 어레이 내에 도시된 한 쌍의 실행 레인 위치(511)와 정렬되는 2 개의 스텐실의 연산에 초점을 맞추고 있다. 예시의 용이함을 위해,한 쌍의 실행 레인(510)은 실제로 다음의 예에 따라, 이들은 수직 이웃이될 때 수평 이웃으로 도시된다.
처음에 그림 5a에서 볼 수 있듯이 실행 레인은 중앙 스텐실 위치의 중앙에 위치한다. 그림 5b는 두 개의 실행 레인에서 실행되는 오브젝트 코드를 보여준다. 도 5b에서 보인 바와 같이, 두 실행 레인의 프로그램 코드는 시프트 레지스터 어레이 내의 데이터가 한 위치 아래로 시프트되고 오른쪽 위치가 한 위치로 시프트되게 한다. 이렇게 하면 두 실행 레인이 각각의 스텐실의 왼쪽 상단 모서리에 맞춰진다. 그런 다음 프로그램 코드는 해당 위치의 R2에있는 데이터를 R1에 로드한다.
도 5c에서 관찰된 바와 같이, 프로그램 코드는 다음에 실행 레인 쌍이 시프트 레지스터 어레이 내의 데이터를 하나의 유닛을 좌측으로 시프트시켜 각각의 실행 레인의 각각의 위치의 우측에 있는 값이 각각의 실행 레인으로 시프트되게 한다 '위치. R1(이전 값)의 값은 실행 레인의 위치(R2)로 이동한 새 값과 함께 추가된다. 결과는 R1에 기록된다. 도 5d에서 관찰된 바와 같이, 결과적인 R1이 상위 실행 레인에 A + B + C 값을 포함하고 하위 실행 레인에 F + G + H 값을 포함하게 하는도 5c에 대해 전술한 것과 동일한 프로세스가 반복된다. 이 시점에서 두 실행 레인은 각각의 스텐실의 위쪽 행을 처리한다. 실행 레인 어레이(왼쪽에 있는 경우)의 왼쪽에 있는 할로 영역 또는 실행 레인 어레이의 왼쪽에 할로 영역이 없으면 임의 액세스 메모리에 스필 오버를 기록한다 .
도 5e에서 관찰된 바와 같이, 다음에 프로그램 코드는 시프트 레지스터 어레이 내의 데이터를 하나의 유닛 위로 시프트시켜 두 실행 레인이 각각의 스텐실의 중간 행의 우측 에지와 정렬되게 한다. 두 실행 레인의 레지스터 R1은 현재 스텐실의 상단 행과 중간 행의 가장 오른쪽 값의 합계를 포함한다. 도 2 5f 및 5g는 두 실행 레인 스텐실의 중간 행을 가로 질러 왼쪽으로 계속 진행하는 것을 보여준다. 누적 가산은 도 5g의 처리의 종료시 두 실행 레인 모두 각각의 스텐실의 상부 행과 중간 행의 값들의 합산을 포함하도록 계속된다.
도 5h는 각각의 실행 레인을 대응하는 스텐실의 최하위 행과 정렬시키기위한 다른 시프트를 도시한다. 도 2 5i와 5j는 두 레인의 스텐실 과정에서 완전한 가공으로 계속 전환했다는 것을 보여준다. 도 5k는 각 실행 레인을 데이터 어레이 내의 그 정확한 위치와 정렬시키고 이에 대한 결과를 기록하기 위한 추가적인 시프트를 도시한다.
도 5a-5k의 예에서, 시프트 동작을 위한 목적 코드는(X, Y) 좌표로 표현된 시프트의 방향 및 크기를 식별하는 명령 포맷을 포함할 수 있다. 예를 들어,한 위치 씩 시프트업을 위한 오브젝트 코드는 SHIFT 0, +1과 같은 오브젝트 코드로 표현될 수 있다. 다른 예로서,한 위치에 의한 오른쪽으로의 시프트는 오브젝트 코드에서 SHIFT +1, 0으로 표현될 수 있다. 다양한 실시 예에서, 보다 큰 크기의 시프트가 오브젝트 코드(예를 들어, SHIFT 0, + 2)에서 특정될 수도 있다. 여기서, 2D 시프트 레지스터 하드웨어가 사이클 당 하나의 위치에 의한 시프트만을 지원하는 경우, 명령은 머신에 의해 다중 사이클 실행을 요구하도록 해석될 수 있거나 2D 시프트 레지스터 하드웨어는 당 하나 이상의 위치에 의한 시프트를 지원하도록 설계될 수 있다 주기. 후술하는 실시 예는 이하에서 더 상세히 설명된다.
도 6은 어레이 실행 레인 및 시프트 레지스터 구조에 대한 유닛 셀의 다른 상세한 도면을 도시한다(할로 영역의 레지스터는 대응하는 실행 레인을 포함하지 않는다). 일 실시 예에서, 실행 레인 어레이의 각 노드와 관련된 실행 레인 및 레지스터 공간은 실행 레인 어레이의 각 노드에서도 6에서 관찰된 회로를 인스턴스화 함으로써 구현된다. 도 6에서 관찰된 바와 같이, 단위 셀은 4 개의 레지스터(R2 내지 R5)로 구성된 레지스터 파일(602)에 연결된 실행 레인(601)을 포함한다. 임의의 사이클 동안, 실행 레인(601)은 임의의 레지스터(R1 내지 R5)로부터 판독하거나 그에 기록할 수 있다. 2 개의 입력 오퍼랜드를 필요로 하는 명령어의 경우, 실행 레인은 R1 내지 R5 중 어느 하나로부터 오퍼랜드 모두를 검색할 수 있다.
일 실시 예에서, 2 차원 시프트 레지스터 구조는 단일 사이클 동안, 레지스터(R2 내지 R4) 중의 하나(단지) 중 하나의 내용이 출력 멀티플렉서를 통해 이웃 레지스터 파일 중 하나에 "출력"되도록 허용함으로써 구현된다 레지스터들(R2 내지 R4) 중 하나(단지) 중 하나의 내용이 입력 멀티플렉서들(604)을 통해 이웃들이 이웃하는 것들이 이웃들 사이의 시프트가 동일한 방향으로 존재하면 대응하는 것으로부터 "시프트된"내용으로 대체된다 예를 들어, 모든 실행 레인이 왼쪽으로 시프트되고, 모든 실행 레인이 오른쪽으로 시프트된다. 동일한 레지스터가 자신의 내용을 시프트 아웃하고 동일 사이클 상에 시프트되는 내용으로 대체하는 것이 일반적일 수도 있지만, 멀티플렉서 장치(603, 604)는 동일 주기 동안 동일한 레지스터 파일 내에서 상이한 시프트 소스 및 시프트 타겟 레지스터를 가능하게 한다.
도 6에 도시된 바와 같이, 시프트 시퀀스 동안 실행 레인은 그 레지스터 파일(602)로부터 컨텐츠를 좌측, 우측, 상부 및 하부 이웃 각각으로 이동시킬 것이다. 동일한 시프트 시퀀스와 함께 실행 레인은 내용을 왼쪽, 오른쪽, 위쪽 및 아래쪽 특정 이웃의 레지스터 파일로 이동한다. 다시, 시프트 아웃 타겟 및 소스 시프트는 모든 실행 레인에 대해 동일한 시프트 방향과 일치해야한다(예를 들어, 시프트 아웃이 우측 이웃으로, 시프트 인이 좌측 이웃으로부터 이루어져야 한다).
일 실시 예에서, 단지 하나의 레지스터의 내용이 사이클 당 실행 레인 당 시프트되는 것이 허용되지만, 다른 실시 예들은 하나 이상의 레지스터의 내용이 시프트 인/아웃되도록 허용할 수 있다. 예를 들어,도 6에서 관찰된 멀티플렉서 회로(603, 604)의 제 2 인스턴스가 도 6의 설계에 통합되는 경우, 동일한 사이클 동안 2 개의 레지스터의 내용이 시프트 아웃될 수 있다. 물론, 단지 하나의 레지스터의 내용이 사이클 당 시프팅되는 것이 허용되는 실시 예에서, 수학적 연산들 사이의 시프트들에 대해 더 많은 클록 사이클들을 소모함으로써 수학적 연산들간에 복수의 레지스터들로부터의 시프트가 발생할 수 있다(예를 들어, 두 개의 레지스터들의 내용은 수학 연산 사이에 두 시프트 연산을 소모함으로써 수학 연산 사이에서 시프트된다).
시프트 시퀀스 동안 모든 실행 레인의 레지스터 파일 내용보다 적은 값이 이동되면 각 실행 레인의 시프트 아웃되지 않은 레지스터의 내용이 그대로 유지된다(시프트하지 않음). 이와 같이, 콘텐츠에서 시프트된 것으로 대체되지 않는 시프트되지 않은 콘텐츠는 시프팅 사이클 전반에 걸쳐 실행 레인에 국부적으로 유지된다. 각 실행 레인에서 보인 메모리 유닛( "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. 이미지 프로세서의 구성 및 라인 버퍼 유닛 동작
도 7은 가상 이미지 처리 환경(701), 가상 이미지 처리 하드웨어(703) 및 가상 처리 환경(701)을 위해 쓰여진 상위 레벨 코드를 객체 처리 기술 환경(701)으로 변환하는 컴파일러(702)를 포함하는 이미지 프로세서 기술 플랫폼의 상위 레벨 도면을 도시한다. 실제 하드웨어(703)가 물리적으로 실행된다. 아래에서보다 상세하게 설명되는 바와 같이, 가상 처리 환경(701)은 개발될 수있는 어플리케이션 측면에서 광범위하게 응용 가능하며 어플리케이션의 구성 프로세스의 용이한 시각화를 위해 맞춤화된다. 개발자(704)에 의한 프로그램 코드 개발 노력이 완료되면, 컴파일러(702)는 가상 처리 환경(701) 내에 작성된 코드를 실제 하드웨어(703)를 타겟으로하는 오브젝트 코드로 변환한다.
다양한 실시 예에서, 하드웨어 플랫폼 용으로 작성된 프로그램 코드는로드 및 저장 명령을 갖는 명령 세트를 포함하는 고유한 가상 코드로 기록되며, 그 명령 포맷은 예를 들어 X, Y 좌표와 같은 입력 및 출력 어레이 위치를 식별한다. 다양한 구현 예에서, X, Y 좌표 정보는 실제로 하드웨어 플랫폼에 프로그래밍될 수 있고, 그 컴포넌트의 다양한 것들에 의해 인식/이해될 수 있다. 이것은 예를 들어 X, Y 좌표(예 : 컴파일러 내에서)를 다른 정보로 변환하는 것과 별개이다. 예를 들어, 스텐실 프로세서 내의 2 차원 시프트 레지스터 구조의 경우, X, Y 좌표 정보는 레지스터 시프트 이동으로 변환된다. 대조적으로, 하드웨어 플랫폼의 다른 부분은 더 높은 가상 코드 레벨에서 원래 표현된 X, Y 좌표 정보를 구체적으로 수신하고 이해할 수 있다.
도 8에서 보인 바와 같이, 프로그램 코드 개발자는 가상 코드 레벨(801)에서 특수한 명령 포맷을 갖는 X, Y 좌표로서 데이터 위치를 표현한다. 컴파일 단계 동안, 가상 코드는 하드웨어(객체 코드)에 의해 실제로 처리되는 프로그램 코드 및 하드웨어의 구성(예를 들어, 레지스터) 공간에 로드되는 대응하는 구성 정보로 변환된다. 도 8에서 관찰된 바와 같이, 일 실시 예에서, 특정 커널에 대한 목적 코드는 스텐실 프로세서의 스칼라 프로세서(805)의 프로그램 공간에 로딩된다.
구성 프로세스의 일부로서, 스칼라 프로세서(805)상에서 실행되는 구성 소프트웨어는 적절한 구성 정보(811, 812)를 스텐실 프로세서(802)에 결합된 시트 생성기 유닛(803) 및 신규로 생성할 라인 버퍼 유닛(801) 스텐실 프로세서(802)가 스텐실 프로세서(802)에 의해 동작하거나, 스텐실 프로세서(802)에 의해 생성된 처리된 시트를 수신하기 위한 시트. 일반적으로, 시트는 여전히 전체 이미지의 X, Y 좌표로 고려될 수 있다. 즉, 이미지 또는 프레임이 (예컨대, 행당 픽셀 수, 행 수, 열당 픽셀 수 및 열 수와 관련하여) 정의되면 이미지의 모든 부분이나 위치는 계속해서 X, Y 좌표로 참조할 수 있다.
이와 같이, 다양한 실시 예들에서, 시트 생성기 유닛(803) 및 라인 버퍼 유닛(801) 중 하나 또는 둘 모두는 각각의 내부에 정보(811, 812) 이미지 또는 프레임의 특정 위치 및/또는 영역(예를 들어, 라인 그룹, 시트)이 X, Y 좌표로 식별되는 정보 플랫폼을 확립하는 구성 공간(806, 807)을 포함한다. 다양한 구현/용도에서, X, Y 좌표는 가상 코드 레벨로 표현된 동일한 X, Y 좌표 일 수 있다.
이러한 정보의 예로는 라인 버퍼 단위의 활성 라인 그룹 수, 각 라인 그룹의 이미지 크기(예 : 4 개의 X, Y 좌표(각 코너에 하나씩) 또는 X , Y 좌표(더 가까운 더 낮은 구석을 위한 것과 더 먼 구석을 위한 것) 또는 절대 이미지 너비와 이미지 높이, 스텐실 크기(단일 스텐실의 크기를 정의하는 X, Y 값 및/또는 스텐실 프로세서의 스텐실 중첩 스텐실), 시트 및/또는 라인 그룹 크기(예 : 이미지 크기와 동일한 용어로 지정되지만 크기가 더 작음) 등 부가적으로, 라인 버퍼 유닛(701)은 적어도 라인 버퍼 유닛(801)에 의해 관리되는 라인 그룹을 판독하는 생산자 커널의 수 및 소비자 커널의 수와 같은 추가적인 구성 정보로 프로그램될 수 있다. 또한 이미지 데이터와 관련된 채널 및/또는 치수의 수는 일반적으로 구성 정보로 포함된다.
도 9a는 이미지 내의 라인 그룹을 단지 하나의 예로서 정의하기 위해 X, Y 좌표의 사용을 도시한다. 여기서, N 개의 라인 그룹(901_1, 901_2 ,. . . 901_N)은 이미지(901) 내에서 관찰 가능하다. 도 9a에서 알 수 있는 바와 같이, 각각의 라인 그룹은, 예를 들어, 라인 그룹의 코너 포인트들 중 하나 이상을 정의하는 이미지 내의 X, Y 좌표를 참조하여 쉽게 정의될 수 있다. 이와 같이, 다양한 실시 예에서, 특정 라인 그룹을 정의하는데 사용되는 라인 그룹의 이름 또는 다른 데이터 구조는 특별히 그것을 식별하기 위해 라인 그룹과 관련된 X, Y 좌표 위치를 포함할 수 있다.
다시 도 8을 다시 참조하면,도 8은 런 타임 동안, 시트 생성기(803)가 예를 들어 X를 포함함으로써 라인 버퍼 유닛(801)으로부터 "다음"라인 그룹(또는 라인 그룹의 일부) , 원하는 데이터 영역을 정의하는 Y 좌표 정보. 도 9a는 이미지 데이터의 완전한 행들로만 구성된 공칭 "전체 폭"라인 그룹을 도시한다. "가상 높이"라고하는 다른 구성에서, 라인 버퍼 유닛(801)은 초기에 이미지 데이터의 전체 폭 로우로서 라인 그룹의 제 1 상부만을 통과시킨다. 그런 다음 줄 그룹의 다음 하위 행은 시트 생성기가 전체 너비 행보다 작고 별도로 요청된 연속 청크로 특별히 요청된다. 따라서 전체 라인 그룹을 얻기 위해 시트 생성기가 여러 요청을한다. 여기서, 이러한 각각의 요청은 다음 부분에 기인하는 X, Y 좌표에 의해 다음 부분을 정의할 수 있다.
도 9b에서 보인 바와 같이, 라인 버퍼 유닛은 라인 그룹(902_1 내지 902_N)이 저장되는 메모리(901)(예를 들어, 정적 또는 동적 랜덤 액세스 메모리(SRAM 또는 DRAM))를 포함한다. 메모리(901)는 라인 버퍼 유닛(및 예를 들어 시트 생성기 및 스텐실 프로세서)을 구현하는 동일한 회로, 또는 오프 칩과 함께 칩 상에 구현될 수 있다. 도 9b는 메모리(901) 내의 특정 이미지/프레임에 대한 라인 그룹들(902_1 내지 902_N)을 생성하고 소비하는 다양한 커널들 사이의 활동을 도시한다.
도 9b에서 관찰된 바와 같이, 생산자 커널 K1은 별도의 시간 인스턴스 P1, P2 내지 PN을 통해 메모리(901)에 저장하기 위해 새로운 라인 그룹을 라인 버퍼 유닛(901)에 보낸다. 생산자 커널 K1은 새로운 데이터 시트를 생성하는 스텐실 프로세서에서 실행된다. 스텐실 프로세서에 결합된 시트 발생기는 시트를 집계하여 라인 그룹을 형성하고 라인 그룹을 메모리에 저장하는 라인 버퍼 유닛에 전달한다.
또한 도 9b에 도시된 바와 같이, 생산자 커널 K1에 의해 생성된 라인 그룹들(902_1 내지 902_N)상에서 동작하는 2 개의 소비자 커널들 K2, K3이있다. 여기서, 소비자 커널(K2, K3)은 각각 시간(C21, C31)에서 제 1 라인 그룹(902_1)을 수신한다. 분명히, 시간 C21과 C31은 시간 PI 이후에 발생한다. 다른 제한 사항은 없을 수 있다. 예를 들어 시간 C21 및/또는 C31은 P2 내지 PN 중 어느 하나의 시간 전 또는 후에 발생할 수 있다. 여기서, 커널 K2 및 K3에 대한 각각의 시트 생성기는 각각의 커널에 적절한 시간에 다음 라인 그룹을 요청한다. 커널(K2, K3) 중 어느 하나가 시간 PI 전에 라인 그룹(902_1)을 요청하면, 라인 그룹(902_1)이 메모리(901)에 실제로 기록될 때까지 요구는 유휴 상태가 된다.
인지되는 바와 같이, 모든 라인 그룹(902_1 내지 902_N)에 대한 커널(K2 및 K3) 중 하나 또는 둘 모두로부터의 요청은 시간 PI 전에 도착할 수 있다. 따라서 라인 그룹은 언제든지 소비자 커널에 의해 요청될 수 있다. 그러나 생산자 커널 Kl이 생산할 수있는 속도로 회선 그룹을 요구할 때 회선 그룹은 소비자 커널에 전달된다. 다양한 실시 예에서, 소비자 커널은 라인 그룹을 순서대로 요구하고 마찬가지로 시퀀스로 수신한다(커널 K2는 시간 C22 내지 C2N의 순서로 라인 그룹 902_2 내지 902_N을 수신한다). 단순화를 위해 특정 라인 그룹에 대해 하나의 생산자 커널만 표시된다. 상이한 생산자가 동일한 라인 그룹(예를 들어, 모든 생산자가 라인 그룹에 기록한 후에야 소비자가 서비스될 수 있는 곳)에 기록하는 것을 허용하도록 다양한 실시 예가 설계될 수 있다.
(소비자 커널(들)이 프로세서의 DAG 처리 흐름의 제1커널이기 때문에) 이미지 데이터의 프레임은 메모리(901)로 전송될 수 있다(DMA(direct memory access) 또는 카메라에서) 그리고 라인 그룹으로 파싱된다. 소비자 커널이없는 경우(생산자 커널이 프로세서의 전체 프로그램 흐름에서 마지막 커널이기 때문에) 결과 라인 그룹을 결합하여 출력 프레임을 형성할 수 있다.
d. 커널의 응용과 구조
도 10a는 가상 환경 내에 작성된 어플리케이션 소프트웨어가 취할 수있는 구조 및 형태의 예를 도시한다. 도 10a에서 보인 바와 같이, 프로그램 코드는 하나 이상의 입력 이미지 데이터(1001) 프레임을 처리하여 입력 이미지 데이터(1001)에 대한 전체적인 변환을 수행할 것으로 예상될 수 있다. 변환은 개발자에 의해 표현된 편성된 시퀀스의 입력 이미지 데이터에 대해 동작하는 프로그램 코드(1002)의 하나 이상의 커널의 동작에 의해 실현된다.
예를 들어,도 10a에서 관찰된 바와 같이, 전체 변환은 제 1 커널 K1로 각 입력 이미지를 먼저 처리함으로써 수행된다. 커널 K1에 의해 생성된 출력 이미지는 커널 K2에 의해 연산된다. 커널(K2)에 의해 생성된 출력 이미지 각각은 커널(K3_1 또는 K3_2)에 의해 연산되고, 커널(K3_l/K3_2)에 의해 생성된 출력 이미지는 커널(K4)에 의해 연산된다. K3_l 및 K3_2 커널은 K3 단계에서 병렬 처리를 부과함으로써 전체 처리 속도를 높이기 위해 설계된 동일한 커널 일 수 있거나 다른 커널 일 수 있다(예 : 커널 K3_l은 제 1 특정 유형의 입력 이미지에서 작동하고 커널 K3_2는 제 2, 다른 유형의 입력 이미지).
이와 같이,보다 큰 전체 이미지 처리 시퀀스는 이미지 처리 파이프 라인 또는 직접 비순환 적 그래프(DAG)의 형태를 취할 수 있고, 개발 환경은 개발자가 실제로 개발된 프로그램 코드의 표현을 개발자에게 제시하도록 구비될 수 있다. 커널은 개발자가 개별적으로 개발할 수도 있고/또는 기본 기술(실제 신호 프로세서 하드웨어 및/또는 설계와 같은)이나 타사(예 : 공급 업체)가 제공하는 엔터티가 제공할 수도 있다. 개발 환경 용으로 작성된 커널 소프트웨어). 따라서 명목상의 개발 환경에는 개발자가 큰 개발 노력의 전체 흐름에 영향을 미치기 위해 다양한 방식으로 "연결"할 수 있는 커널의 "라이브러리"가 포함될 것으로 기대된다. 이러한 라이브러리의 일부가될 것으로 예상되는 일부 기본 커널에는 다음 기본 이미지 처리 작업 중 하나 이상을 제공하는 커널이 포함될 수 있다. 컨볼루션, 노이즈 제거, 색상 공간 변환, 가장자리 및 구석 감지, 선명 화, 화이트 밸런스, 감마 보정 , 톤 매핑, 행렬 곱셈, 이미지 등록, 피라미드 구성, 웨이브 렛 변환, 블록 단위 이산 코사인 및 푸리에 변환 등이 있다.
전술한 바와 같이, 다양한 실시 예들에서, 각각의 커널은 자신의 스텐실 프로세서상에서 실행된다. 예를 들어,도 10a를 참조하면, 커널 K1은 제 1 스텐실 프로세서상에서 실행되고, 커널 K2는 제 2 스텐실 프로세서상에서 실행된다. 또한, 위에서 논의한 바와 같이, 커널 버퍼를 통해 커널을 생성하고 소비한다.
도 10b는 도 10a의 DAG 흐름을 구현하기 위해 이미지 프로세서가 어떻게 구성될 수 있는지를 도시한다. 도 10b에서 관찰된 바와 같이, 라인 버퍼 유닛(1001_1)(LBU_1)은 입력 이미지 스트림을 수신하고 수신된 프레임을 라인 그룹으로 파싱한다. 스위칭 네트워크는 라인 그룹들을 LBU_1로부터 커널 K1이 실행되는 제 1 스텐실 프로세서(1002_1)로 라우팅하도록 구성된다. 커널(K1)로부터의 출력 이미지는 라인 그룹으로 포맷되고 제 2 라인 버퍼 유닛(1001_2)(LBU_2)으로 전송된다. 그런 다음이 라인 그룹은 커널 K2가 실행되는 제 2 스텐실 프로세서로 전달된다.
도 10a로부터, 이미지 정보는 커널(K2)로부터 커널(K3_1 또는 K3_2) 중 하나로 분할될 수 있다. 여기서, 예를 들어, 커널 K3_1 및 K3_2는 처리되는 전체 이미지와 관련된 상이한 채널을 처리할 수 있다. 예를 들어, 커널 K3_1은 적색(R) 이미지를 처리하고 커널 K3_2는 녹색(G) 및 파란색(B) 이미지를 처리할 수 있다. 대안적으로, K3_1은 시각적 이미지를 처리할 수 있는 반면, 커널 K3_2는 깊이 이미지(예를 들어, 시각 이미지와 함께 비행 시간 깊이 이미지 카메라로부터 얻은)를 처리할 수 있다. 그럼에도 불구하고, 이미지의 모든 채널은 커널 K1 및 K2에 의해 처리되지만 이미지의 다른 채널은 다른 커널 K3_1 및 K3_2로 처리된다. 더욱이, 커널(K3_1 및 K3_2)은 동일한(예를 들어, 매우 수치 적으로 집중적인) 프로그램 코드의 별개의 인스턴스 일 수 있고, 2 개의 스텐실 프로세서는 병렬로 실행함으로써 K3 기능의 처리를 가속화하는데 사용된다.
그럼에도 불구하고, 전술한 "분할"은 커널 K2로부터의 일부 라인 그룹 이미지 정보를 제 3 라인 버퍼 유닛(1001_3)(LBU_3) 및 커널 K2로부터의 다른 라인 그룹 이미지 정보로 버퍼링하여 제 4 라인 버퍼 유닛(1001_4)(LBU_4 ). LBU_3 라인 버퍼 유닛에서 버퍼링된 라인 그룹은 커널 K3_1이 실행되는 제 3 스텐실 프로세서(1002_3)로 포워딩된다. LBU_4 라인 버퍼 부에 버퍼링된 라인 그룹은 커널(K3_2)이 실행되는 제 4 스텐실 처리 유닛(1002_4)로 전달된다. 커널 K3_1 및 K3_2의 출력 라인 그룹은 각각 제 5 및 제 6 라인 버퍼 유닛(1001_4(LBU_5), 1001_5(LBU_6))에 버퍼링된다. LBU_5 및 LBU_6 라인 버퍼 유닛들로부터의 라인 그룹들은 커널 K4를 실행하는 제 5 스텐실 프로세서(1002_5)로 전달된다. 스플릿 라인 그룹은 제 5 스텐실 프로세서(1002_5)에서 다시 병합됨에 유의한다.
도 11a 및 11b는 각 스텐실 프로세서가 직전 스테이지에서 라인 그룹을 수신하고 직후 스테이지에 대해 라인 그룹을 제공하는 보다 직접적인 파이프 라인 방식과 관련된다. 구체적으로는, 라인 버퍼 유닛(1101_1(LBU_1), 1101_2(LBU_2), 1101_3(LBU_3), 1101_4(LBU_4) 각각은 커넬 K1, K2, K3, K4를 각각 실행하는 스텐실 유닛(1102_1, 1102_2, 1102_3, 1102_4)을 피드하고, 스텐실 프로세서들(1102_1, 1102_2, 1102_3, 1102_4)은 각각 라인 버퍼 유닛들(1101_2(LBU_2), 1101_3(LBU_3), 1101_4(LBU_4), 1101_5(LBU_5)을 피드한다.
도 11c는 본질적으로 2 개의 파이프 라인을 병렬로(K1-K3 -...) 및(K2-K4 -...) 실행하는 또 다른 파이프 라인 접근법을 도시한다. 이 구성은 병렬 실행을 통해 파이프 라인 속도를 높이는 데 사용할 수 있다(예 : K1과 K2 커널이 같고 K3과 K4 커널이 동일 함) 또는 이미지 데이터 컨텍스트에 따라 두 개의 다른 파이프 라인이 사용된다(예 : 하나의 파이프 라인은 한 종류의 채널을 처리하고 다른 파이프 라인은 다른 종류의 채널을 처리한다.
도 11a, 11b 및 11c는 적절한 방식으로 스텐실 프로세서를 소스 및 싱크 라인 그룹에 연결하기 위해 연결 네트워크(1004/1104)에 만들어야할 다양한 구성을 기록한다.
다양한 실시 예들에서, 이미지 프로세서는 무수히 많은 다양한 구성들(예를 들어, 스칼라 프로세서의 스칼라 메모리) 중 임의의 것을 구현하도록 구성 정보를 유지하기 위한(예를 들어, 구성 레지스터 및/또는 스칼라 프로세서의 스칼라 메모리와 같은) 예 : DAG, 이미지 처리 파이프 라인). 일부 예시적인 구성 파라미터는 1) 소스 이미지의 수(예를 들어, 카메라 또는 대형 컴퓨터 시스템의 메인 메모리로부터 시스템으로 스트리밍되는 소스 이미지 프레임의 수); 2) 라인 그룹 수(시스템의 라인 버퍼 단위로 구성된 총 라인 그룹 수). 3) 활성 스텐실 프로세서의 수(시스템의 활성 스텐실 프로세서의 총 수). 4) 스텐실 프로세서 당 입력 라인 그룹 수(하나의 스텐실 프로세서는 하나 이상의 입력 이미지 프레임을 처리할 수 있으며, Num_Input_LGs_perStencil은 본질적으로 스텐실 프로세서가 처리할 입력 이미지 프레임의 수를 나타낸다. 스텐실 프로세서당 출력 라인 그룹의 수(하나의 스텐실 프로세서는 하나 이상의 출력 이미지 프레임을 처리할 수 있으며, Num_Output_LGs_perStencil은 본질적으로 스텐실 프로세서가 처리할 출력 이미지 프레임의 수를 나타냄). 6) 라인 그룹당 소비자 수(각 라인 버퍼 단위로 구성된 각 라인 그룹에 대해 Num_Cons_per_LG는 라인 그룹의 소비자 수를 나타냄). 다른 유형의 구성 정보는 전술한 시스템의 임의의 특징, 구조 또는 동작에 기초하여 시스템에 의해 수용될 수 있다.
e. 구현 실시예
전술한 다양한 이미지 프로세서 아키텍처 특징은 종래의 의미에서의 이미지 처리에 반드시 제한되는 것이 아니며, 따라서 이미지 프로세서가 재 특성화될 수있는(또는 되지 않을 수도 있는) 다른 어플리케이션에 적용될 수 있다는 것을 지적하는 것이 적절하다. 예를 들어, 상술한 다양한 이미지 프로세서 아키텍처 특징 중 임의의 것이 실제 카메라 이미지의 처리과는 대조적으로 애니메이션의 생성 및/또는 생성 및/또는 렌더링에 사용되면, 이미지 프로세서는 그래픽 처리 장치. 부가적으로, 상술한 이미지 프로세서 아키텍처 특징은 비디오 처리, 비전 처리, 이미지 인식 및/또는 기계 학습과 같은 다른 기술적 어플리케이션에 적용될 수 있다. 이러한 방식으로 적용되면, 이미지 프로세서는 보다 범용적인 프로세서(예를 들어, 컴퓨팅 시스템의 CPU의 일부분)와 (예를 들어, 코-프로세서로서)통합될 수 있거나, 컴퓨터 시스템 내의 스탠드 얼론 프로세서일 수 있다.
전술한 하드웨어 설계 실시 예는 반도체 칩 내에서 및/또는 반도체 제조 프로세스를 향한 최종 타깃을 위한 회로 설계의 설명으로서 구현될 수 있다. 후자의 경우, 이러한 회로 기술은 상위/행동 수준 회로 설명(예 : VHDL 설명) 또는 하위 레벨 회로 기술(예 : 레지스터 전송 레벨(RTL) 설명, 트랜지스터 레벨 설명 또는 마스크 설명) 또는 이들의 다양한 조합을 포함할 수 있다. 회로 설명은 일반적으로 컴퓨터 판독 가능 저장 매체(CD-ROM 또는 다른 유형의 저장 기술)로 구현된다.
이전 섹션들로부터, 상술된 이미지 프로세서는(예를 들어, 핸드 헬드 장치의 카메라로부터의 데이터를 처리하는 핸드-헬드 장치의 시스템 온 칩(SOC)의 일부로서) 컴퓨터 시스템상의 하드웨어로 구현될 수 있음을 인식하는 것이 적절하다. 이미지 프로세서가 하드웨어 회로로서 구현되는 경우, 이미지 프로세서에 의해 처리되는 이미지 데이터는 카메라로부터 직접 수신될 수 있다는 점에 유의해야한다. 여기서, 이미지 프로세서는 개별 카메라의 일부이거나, 통합된 카메라를 갖는 컴퓨팅 시스템의 일부일 수 있다. 후자의 경우에, 이미지 데이터는 카메라 또는 컴퓨팅 시스템의 시스템 메모리로부터 직접 수신될 수 있다(예를 들어, 카메라는 자신의 이미지 데이터를 이미지 프로세서가 아닌 시스템 메모리로 전송한다). 이전 섹션에서 설명한 많은 기능이 그래픽 처리 장치(애니메이션 렌더링)에도 적용될 수 있다.
도 12는 컴퓨팅 시스템의 예시적인 도면을 제공한다. 이하에서 설명되는 컴퓨팅 시스템의 많은 구성 요소는 통합 카메라 및 관련 이미지 프로세서(예 : 스마트 폰 또는 태블릿 컴퓨터와 같은 핸드 헬드 장치)를 갖는 컴퓨팅 시스템에 적용 가능하다. 당업자는 이 두 가지를 쉽게 구분할 수 있다.
도 12에서 보인 바와 같이, 기본 컴퓨팅 시스템은 중앙 처리 장치(1201)(예를 들어, 복수의 범용 처리 코어(1215_1 내지 1215_N) 및 메인 메모리 제어기(1217)를 포함할 수 있다)(예를 들어, 프로세서), 시스템 메모리(1202), 디스플레이(1203)(예를 들어, 터치 스크린, 플랫 패널), 로컬 유선 포인트 - 투 포인트 링크(USB) 인터페이스(1204), 다양한 네트워크 I/O 기능(1206), 무선 포인트 - 투 - 포인트 링크(예를 들어, 블루투스) 인터페이스(1207) 및 글로벌 포지셔닝 시스템 인터페이스(1208), 다양한 센서(1209_1 내지 1209_N) , 하나 이상의 카메라(1210), 배터리(1211), 전력 관리 제어 유닛(1212), 스피커 및 마이크로폰(1213) 및 오디오 코더/디코더(1214)를 포함한다.
어플리케이션 프로세서 또는 멀티 코어 프로세서(1250)는 그 CPU(1201) 내에 하나 이상의 범용 처리 코어(1215), 하나 이상의 그래픽 처리 유닛(1216), 메모리 관리 기능(1217; 메모리 제어기), I/O 제어 기능 부(1218) 및 이미지 유닛(1219)을 포함한다. 범용 처리 코어(1215)는 전형적으로 컴퓨팅 시스템의 운영 시스템 및 어플리케이션 소프트웨어를 실행한다. 그래픽 처리 유닛(1216)은 일반적으로 그래픽 집중 기능을 실행하여, 예를 들어, 디스플레이(1203) 상에 표시되는 그래픽 정보를 생성한다. 메모리 제어 기능(1217)은 시스템 메모리(1202)와 인터페이스하여 시스템 메모리(1202)로 데이터를 기록/판독한다. 전력 관리 제어 유닛(1212)은 일반적으로 시스템(1200)의 전력 소비를 제어한다.
이미지 처리 유닛(1219)은 이전 섹션에서 전술한 이미지 처리 유닛 실시 예들 중 임의의 것에 따라 구현될 수 있다. 선택적으로 또는 조합하여, IPU(1219)는 GPU(1216) 및 CPU(1201) 중 하나 또는 둘 모두에 코 프로세서로서 연결될 수 있다. 또한, 다양한 실시 예에서, GPU(1216)는 상기 길이로 설명된 임의의 이미지 프로세서 특징으로 구현될 수 있다.
터치 스크린 디스플레이(1203), 통신 인터페이스들(1204 내지 1207), GPS 인터페이스(1208), 센서들(1209), 카메라(1210) 및 스피커/마이크로폰 코덱(1213, 1214) 각각은 다양한 형태의 I/O(예를 들어, 하나 이상의 카메라(1210))를 포함하는 전체 컴퓨팅 시스템에 대해(예를 들어, 하나 이상의 카메라(예를 들어, 하나 이상의 카메라(또는) 출력) 구현에 따라, 이들 I/O 컴포넌트들 중 다양한 것들은 어플리케이션 프로세서/멀티 코어 프로세서(1250) 상에 통합될 수 있거나 또는 다이 외부 또는 어플리케이션 프로세서/멀티 코어 프로세서(1250)의 패키지 외부에 위치될 수 있다.
일 실시 예에서, 하나 이상의 카메라(1210)는 그 시야에서 카메라와 물체 사이의 깊이를 측정할 수있는 깊이 카메라를 포함한다. 어플리케이션 프로세서 또는 다른 프로세서의 범용 CPU 코어(또는 프로그램 코드를 실행하기 위한 명령 실행 파이프 라인을 갖는 다른 기능 블록)에서 실행하는 어플리케이션 소프트웨어, 운영 체제 소프트웨어, 장치 드라이버 소프트웨어 및/또는 펌웨어는 설명된 기능들 중 임의의 기능을 수행할 수 있다
본 발명의 실시예는 전술한 바와 같은 다양한 프로세스를 포함할 수 있다. 프로세스는 기계 실행 가능 명령어로 구현될 수 있다. 명령은 범용 또는 특수 목적 프로세서가 특정 프로세스를 수행하도록 하는 데 사용될 수 있다. 대안 적으로, 이러한 프로세스는 프로세스를 수행하기 위해 하드 와이어된 및/또는 프로그램 가능한 논리를 포함하는 특정 하드웨어 구성 요소에 의해 수행되거나 프로그래밍된 컴퓨터 구성 요소 및 사용자 정의 하드웨어 구성 요소의 임의의 조합에 의해 수행될 수 있다.
본 발명의 요소들은 또한 머신 실행 가능 명령어들을 저장하기 위한 머신 판독 가능 매체로서 제공될 수 있다. 기계 판독 가능 매체는 플로피 디스켓, 광 디스크, CD-ROM 및 광 자기 디스크, 플래시 메모리, ROM, RAM, EPROM, EEPROM, 자기 또는 광학 카드, 전파 매체 또는 기타를 포함할 수 있지만 전자 명령들을 저장하기에 적합한 유형의 매체/기계 - 판독 가능 매체. 예를 들어, 본 발명은 통신 링크(예 : 모뎀 또는 네트워크 연결)를 통해 반송파 또는 다른 전파 매체에 구현된 데이터 신호를 통해 원격 컴퓨터(예 : 서버)에서 요청 컴퓨터(예 : 클라이언트)로 전송될 수 있는 컴퓨터 프로그램으로서 다운로드될 수 있다.
전술한 명세서에서, 본 발명은 특정 실시 예를 참조하여 설명되었다. 그러나, 첨부된 청구 범위에 설명된 본 발명의 더 넓은 사상 및 범위를 벗어나지 않으면서 다양한 변경 및 수정이 이루어질 수 있음이 명백할 것이다. 따라서, 명세서 및 도면은 제한적인 의미 라기보다는 예시적인 것으로 간주되어야 한다.

Claims (18)

  1. 컴퓨팅 디바이스로서,
    각각의 2차원 시프트 레지스터 어레이 및 각각의 2차원 처리 요소(element) 어레이를 포함하는 복수의 프로세서;
    상기 복수의 프로세서 중의 프로세서에 의해 생성된 데이터를 수신 및 저장하고, 저장된 데이터를 하나 이상의 소비자(consumer) 프로세서에 제공하도록 구성된 복수의 라인 버퍼; 및
    상기 복수의 라인 버퍼 중 하나 이상으로부터 라인 그룹을 수신하고, 상기 라인 그룹으로부터의 데이터 시트를 프로세서의 각각의 2차원 시프트 레지스터 어레이에 로딩하도록 구성된 복수의 시트 생성기와, 상기 각 시트 생성기는 상기 복수의 프로세서의 각각의 프로세서에 전용이고,
    상기 각 프로세서는 상기 프로세서의 상기 각각의 2차원 시프트 레지스터 어레이에 로딩된 각각의 데이터 시트를 처리하기 위한 명령들을 실행하도록 구성되고, 상기 데이터 시트를 처리하는 것은,
    상기 프로세서의 상기 2차원 처리 요소 어레이의 각 처리 요소에 의해, 상기 프로세서의 2차원 시프트 레지스터 어레이에 의한 상기 데이터 시트의 2차원 부분에 걸친 시프트 시퀀스 동안 상기 처리 요소에 의해 판독된 각각의 값을 사용하여 커널 함수에 따라 각각의 출력값을 계산하는 것을 포함하는 것을 특징으로 하는 컴퓨팅 디바이스.
  2. 제1항에 있어서,
    상기 각 시트 생성기는,
    상기 커널 함수에 따라 프로세서의 처리 요소들에 의해 계산된 복수의 출력값을 포함하는 출력 데이터 시트로 라인 그룹을 업데이트하고, 상기 업데이트된 라인 그룹을 상기 복수의 라인 버퍼의 특정 라인 버퍼에 제공하도록 구성되는 것을 특징으로 하는 컴퓨팅 디바이스.
  3. 제1항에 있어서,
    상기 프로세서들, 시트 생성기들 및 라인 버퍼들은,
    각 프로세서가 이미지 데이터 시트에 대해 각각의 커널 함수를 수행하도록 구성되고 각 라인 버퍼는 이미지 처리 파이프 라인의 중간 출력을 버퍼링하도록 구성되는 이미지 처리 파이프 라인을 구현하도록 구성되는 것을 특징으로 하는 컴퓨팅 디바이스.
  4. 제1항에 있어서,
    상기 각 시트 생성기는 상기 복수의 라인 버퍼 중 임의의 하나로부터 판독하고 상기 복수의 라인 버퍼 중 임의의 하나에 기록하도록 구성되는 것을 특징으로 하는 컴퓨팅 디바이스.
  5. 제1항에 있어서,
    상기 데이터 시트의 2차원 부분은 상기 커널 함수에 의해 정의된 스텐실 (stencil)인 것을 특징으로 하는 컴퓨팅 디바이스.
  6. 제1항에 있어서,
    상기 2차원 시프트 레지스터 어레이의 각 시프트 레지스터는 상기 2차원 처리 요소 어레이내의 처리 요소들 중 하나에 전용되고, 상기 각 처리 요소는 상기 처리 요소에 전용인 동일한 시프트 레지스터로부터 시프트 시퀀스 동안 다수의 상이한 값을 판독하도록 구성되는 것을 특징으로 하는 컴퓨팅 디바이스.
  7. 제1항에 있어서,
    상기 각 프로세서는 다수의 시프트 레지스터 평면을 포함하고, 상기 각 시프트 레지스터 평면은 상이한 2차원 시프트 레지스터 어레이를 포함하는 것을 특징으로 하는 컴퓨팅 디바이스.
  8. 제1항에 있어서,
    상기 각 프로세서는 상기 프로세서의 각각의 2차원 처리 요소 어레이에 시프트 명령들을 발행하도록 구성된 스칼라 처리 요소를 포함하고,
    상기 각 시프트 명령은 상기 프로세서의 상기 2차원 처리 요소 어레이의 처리 요소들에 의해 실행될 때, 상기 프로세서의 2차원 시프트 레지스터 어레이가 동일한 방향으로 데이터를 시프트하도록 하는 것을 특징으로 하는 컴퓨팅 디바이스.
  9. 제8항에 있어서,
    상기 2차원 처리 요소 어레이내의 모든 처리 요소들은 동일한 클럭 사이클에서 동일한 방향으로 상기 2차원 시프트 레지스터 어레이의 데이터를 시프트하도록 구성되는 것을 특징으로 하는 컴퓨팅 디바이스.
  10. 방법으로서,
    컴퓨팅 디바이스의 복수의 라인 버퍼의 특정 라인 버퍼에 의해, 상기 컴퓨팅 디바이스의 복수의 프로세서 중 제1 프로세서에 의해 생성된 데이터를 수신하는 단계와, 상기 각 프로세서는 각각의 2차원 시프트 레지스터 어레이 및 각각의 2차원 처리 요소 어레이를 포함하고;
    상기 특정 라인 버퍼에 의해, 상기 제1 프로세서에 의해 생성된 데이터를 저장하는 단계와;
    상기 특정 라인 버퍼에 의해, 상기 저장된 데이터의 라인 그룹을 상기 컴퓨팅 디바이스의 복수의 시트 생성기 중 특정 시트 생성기에 제공하는 단계와, 상기 복수의 시트 생성기의 각 시트 생성기는 복수의 프로세서 중 하나에 전용이고, 상기 특정 시트 생성기는 상기 복수의 프로세서 중 제2 프로세서에 전용이고;
    상기 특정 시트 생성기에 의해, 상기 특정 라인 버퍼로부터 라인 그룹을 수신하는 단계와;
    상기 특정 시트 생성기에 의해, 상기 라인 그룹으로부터의 데이터 시트를 상기 제2 프로세서의 각각의 2차원 시프트 레지스터 어레이에 로딩하는 단계와; 그리고
    상기 제2 프로세서에 의해, 상기 제2 프로세서의 상기 2차원 시프트 레지스터 어레이에 로딩된 데이터 시트를 처리하기 위한 명령들을 실행하는 단계를 포함하고, 상기 데이터 시트를 처리하는 단계는,
    상기 프로세서의 상기 2차원 처리 요소 어레이의 각 처리 요소에 의해, 상기 프로세서의 2차원 시프트 레지스터 어레이에 의한 상기 데이터 시트의 2차원 부분에 걸친 시프트 시퀀스 동안 상기 처리 요소에 의해 판독된 각각의 값을 사용하여 커널 함수에 따라 각각의 출력값을 계산하는 단계를 포함하는 것을 특징으로 하는 방법.
  11. 제10항에 있어서,
    상기 특정 시트 생성기에 의해, 상기 커널 함수에 따라 상기 제2 프로세서의 처리 요소들에 의해 계산된 복수의 출력값을 포함하는 출력 데이터 시트로 상기 라인 그룹을 업데이트하는 단계와; 그리고
    상기 특정 시트 생성기에 의해, 상기 업데이트된 라인 그룹을 상기 복수의 라인 버퍼의 다른 라인 버퍼에 제공하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  12. 제10항에 있어서,
    상기 컴퓨팅 디바이스의 프로세서들, 시트 생성기들 및 라인 버퍼들을 사용하여 이미지 처리 파이프 라인을 구현하는 단계를 더 포함하고, 상기 각 프로세서는 이미지 데이터 시트에 대해 각각의 커널 함수를 수행하고, 각 라인 버퍼는 이미지 처리 파이프 라인의 중간 출력을 버퍼링하는 것을 특징으로 하는 방법.
  13. 제10항에 있어서,
    상기 각 시트 생성기는 상기 복수의 라인 버퍼 중 임의의 하나로부터 판독하고 상기 복수의 라인 버퍼 중 임의의 하나에 기록하도록 구성되는 것을 특징으로 하는 방법.
  14. 제10항에 있어서,
    상기 데이터 시트의 상기 2차원 부분은 상기 커널 함수에 의해 정의된 스텐실인 것을 특징으로 하는 방법.
  15. 제10항에 있어서,
    상기 각 2차원 시프트 레지스터 어레이의 각 시프트 레지스터는 상기 2차원 처리 요소 어레이내의 처리 요소들 중 하나에 전용이고,
    상기 제2 프로세서에 의해, 상기 제2 프로세서의 상기 2차원 시프트 레지스터 어레이에 로딩된 데이터 시트를 처리하기 위한 명령들을 실행하는 단계는 각 처리 요소에 의해, 상기 처리 요소에 전용인 동일한 시프트 레지스터로부터 시프트 시퀀스 동안 다수의 상이한 값을 판독하는 단계를 포함하는 것을 특징으로 하는 방법.
  16. 제10항에 있어서,
    상기 각 프로세서는 각각이 상이한 2차원 시프트 레지스터 어레이를 포함하는 다수의 시프트 레지스터 평면을 포함하는 것을 특징으로 하는 방법.
  17. 제10항에 있어서,
    상기 각 프로세서는 스칼라 처리 요소를 포함하고,
    상기 스칼라 처리 요소에 의해 상기 제2 프로세서의 상기 2차원 처리 요소 어레이의 각 처리 요소에, 상기 처리 요소들에 의해 실행될 때 상기 제2 프로세서의 상기 2차원 시프트 레지스터 어레이가 동일한 방향으로 데이터를 시프트하도록 하는 시프트 명령들을 발행하는 단계를 더 포함하는 것을 특징으로 하는 방법.
  18. 제17항에 있어서,
    상기 2차원 처리 요소 어레이내의 모든 처리 요소들은 동일한 클럭 사이클에서 동일한 방향으로 상기 2차원 시프트 레지스터 어레이 내의 데이터를 시프트하는 것을 특징으로 하는 방법.
KR1020197011226A 2015-04-23 2016-04-06 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처 KR102278658B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US14/694,828 2015-04-23
US14/694,828 US9965824B2 (en) 2015-04-23 2015-04-23 Architecture for high performance, power efficient, programmable image processing
PCT/US2016/026221 WO2016171909A1 (en) 2015-04-23 2016-04-06 Architecture for high performance, power efficient, programmable image processing
KR1020177028129A KR101973733B1 (ko) 2015-04-23 2016-04-06 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020177028129A Division KR101973733B1 (ko) 2015-04-23 2016-04-06 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처

Publications (2)

Publication Number Publication Date
KR20190043643A KR20190043643A (ko) 2019-04-26
KR102278658B1 true KR102278658B1 (ko) 2021-07-16

Family

ID=55858889

Family Applications (2)

Application Number Title Priority Date Filing Date
KR1020197011226A KR102278658B1 (ko) 2015-04-23 2016-04-06 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처
KR1020177028129A KR101973733B1 (ko) 2015-04-23 2016-04-06 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처

Family Applications After (1)

Application Number Title Priority Date Filing Date
KR1020177028129A KR101973733B1 (ko) 2015-04-23 2016-04-06 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처

Country Status (7)

Country Link
US (3) US9965824B2 (ko)
EP (2) EP3286726B1 (ko)
JP (2) JP6571790B2 (ko)
KR (2) KR102278658B1 (ko)
CN (2) CN113132558A (ko)
DE (1) DE112016001837T5 (ko)
WO (1) WO2016171909A1 (ko)

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9515658B1 (en) * 2014-10-09 2016-12-06 Altera Corporation Method and apparatus for implementing configurable streaming networks
GB2539461B (en) * 2015-06-16 2020-01-08 Canon Kk Image data encapsulation
US10313641B2 (en) 2015-12-04 2019-06-04 Google Llc Shift register with reduced wiring complexity
US9830150B2 (en) 2015-12-04 2017-11-28 Google Llc Multi-functional execution lane for image processor
US10204396B2 (en) 2016-02-26 2019-02-12 Google Llc Compiler managed memory for image processor
US10387988B2 (en) 2016-02-26 2019-08-20 Google Llc Compiler techniques for mapping program code to a high performance, power efficient, programmable image processing hardware platform
US10380969B2 (en) 2016-02-28 2019-08-13 Google Llc Macro I/O unit for image processor
CN108885776B (zh) * 2016-03-24 2022-09-27 富士胶片株式会社 图像处理装置、图像处理方法及存储介质
US20180007302A1 (en) 2016-07-01 2018-01-04 Google Inc. Block Operations For An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US10546211B2 (en) 2016-07-01 2020-01-28 Google Llc Convolutional neural network on programmable two dimensional image processor
US20180005059A1 (en) * 2016-07-01 2018-01-04 Google Inc. Statistics Operations On Two Dimensional Image Processor
US20180005346A1 (en) * 2016-07-01 2018-01-04 Google Inc. Core Processes For Block Operations On An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
US10795836B2 (en) * 2017-04-17 2020-10-06 Microsoft Technology Licensing, Llc Data processing performance enhancement for neural networks using a virtualized data iterator
US10467056B2 (en) * 2017-05-12 2019-11-05 Google Llc Configuration of application software on multi-core image processor
US10489199B2 (en) * 2017-05-12 2019-11-26 Google Llc Program code transformations to improve image processor runtime efficiency
US10489878B2 (en) * 2017-05-15 2019-11-26 Google Llc Configurable and programmable image processor unit
US10872393B2 (en) * 2017-05-15 2020-12-22 Google Llc Image processor with high throughput internal communication protocol
TWI812254B (zh) 2017-05-17 2023-08-11 美商谷歌有限責任公司 用於訓練神經網路之方法、系統及非暫時性電腦可讀儲存媒體
KR102008287B1 (ko) * 2017-05-23 2019-08-07 고려대학교 산학협력단 양방향 선입 선출 메모리와 이를 이용하는 컨볼루션 연산 처리 장치
WO2019143025A1 (ko) * 2018-01-16 2019-07-25 한국과학기술원 라인 입력 및 출력을 이용한 이미지 처리 방법 및 장치
US11468312B2 (en) 2018-02-02 2022-10-11 Samsung Electronics Co., Ltd. Memory management for machine learning training on GPU
US11468302B2 (en) * 2018-03-13 2022-10-11 Recogni Inc. Efficient convolutional engine
CN108596822A (zh) * 2018-04-24 2018-09-28 上海顺久电子科技有限公司 数据存储方法、装置及图像处理系统
CN109316202B (zh) * 2018-08-23 2021-07-02 苏州佳世达电通有限公司 影像校正方法及检测装置
CN111209231B (zh) * 2018-11-21 2021-05-11 上海寒武纪信息科技有限公司 数据处理方法、装置及相关产品
CN111209243B (zh) * 2018-11-21 2022-12-02 上海寒武纪信息科技有限公司 数据处理装置、方法及相关产品
EP4009186A1 (en) 2018-10-18 2022-06-08 Shanghai Cambricon Information Technology Co., Ltd Network-on-chip data processing method and device
US10552939B1 (en) 2019-02-12 2020-02-04 Google Llc Image processor complex transfer functions
TWI746126B (zh) * 2020-08-25 2021-11-11 創鑫智慧股份有限公司 矩陣乘法裝置及其操作方法
CN112184536B (zh) * 2020-09-24 2022-09-30 成都海光集成电路设计有限公司 基于gemm处理图像数据的方法、装置、设备和介质

Family Cites Families (86)

* 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
JPS6373380A (ja) * 1986-09-16 1988-04-02 Matsushita Electric Ind Co Ltd 画像プロセッサ
US4835712A (en) 1986-04-14 1989-05-30 Pixar Methods and apparatus for imaging volume data with shading
EP0293701B1 (en) 1987-06-01 1994-08-10 Applied Intelligent Systems, Inc. Parallel neighborhood processing system and method
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
US5706216A (en) * 1995-07-28 1998-01-06 Reisch; Michael L. System for data compression of an image using a JPEG compression circuit modified for filtering in the frequency domain
US6049859A (en) 1996-01-15 2000-04-11 Siemens Aktiengesellschaft Image-processing processor
US6031573A (en) 1996-10-31 2000-02-29 Sensormatic Electronics Corporation Intelligent video information management system performing multiple functions in parallel
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
US6067609A (en) * 1998-04-09 2000-05-23 Teranex, Inc. Pattern generation and shift plane operations for a mesh connected computer
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
JP4489305B2 (ja) 1999-03-16 2010-06-23 浜松ホトニクス株式会社 高速視覚センサ装置
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
US6986025B2 (en) 2001-06-11 2006-01-10 Broadcom Corporation Conditional execution per lane
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
AU2003221680A1 (en) 2002-04-09 2003-10-27 The Research Foundation Of State University Of New York Multiplier-based processor-in-memory architectures for image and graphics processing
WO2004021176A2 (de) 2002-08-07 2004-03-11 Pact Xpp Technologies Ag Verfahren und vorrichtung zur datenverarbeitung
US20060044576A1 (en) 2004-07-30 2006-03-02 Kabushiki Kaisha Toshiba Apparatus for image processing
US7593016B2 (en) * 2004-04-08 2009-09-22 Teranex Systems, Inc Method and apparatus for high density storage and handling of bit-plane data
US7667764B2 (en) 2004-06-04 2010-02-23 Konica Minolta Holdings, Inc. Image sensing apparatus
US7606996B2 (en) * 2004-08-04 2009-10-20 Panasonic Corporation Array type operation device
JP4219887B2 (ja) 2004-12-28 2009-02-04 富士通マイクロエレクトロニクス株式会社 画像処理装置及び画像処理方法
US20100122105A1 (en) 2005-04-28 2010-05-13 The University Court Of The University Of Edinburgh Reconfigurable instruction cell 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
JP4979287B2 (ja) * 2006-07-14 2012-07-18 富士ゼロックス株式会社 画像処理装置及びプログラム
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
US8068114B2 (en) * 2007-04-30 2011-11-29 Advanced Micro Devices, Inc. Mechanism for granting controlled access to a shared resource
JP4389976B2 (ja) 2007-06-29 2009-12-24 ブラザー工業株式会社 画像処理装置および画像処理プログラム
KR101036596B1 (ko) 2007-09-05 2011-05-24 가부시키가이샤 시마쓰세사쿠쇼 고체촬상소자 및 그 구동방법
JP5461533B2 (ja) 2008-05-30 2014-04-02 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド ローカル及びグローバルのデータ共有
JP4999791B2 (ja) 2008-06-30 2012-08-15 キヤノン株式会社 情報処理装置、その制御方法、及びプログラム
CN102112983A (zh) * 2008-08-06 2011-06-29 Nxp股份有限公司 Simd并行处理器架构
US8456480B2 (en) 2009-01-14 2013-06-04 Calos Fund Limited Liability Company Method for chaining image-processing functions on a SIMD processor
US8332794B2 (en) * 2009-01-22 2012-12-11 Taiwan Semiconductor Manufacturing Company, Ltd. Circuits and methods for programmable transistor array
WO2010113340A1 (en) * 2009-03-30 2010-10-07 Nec Corporation Single instruction multiple data (simd) processor having a plurality of processing elements interconnected by a ring bus
KR101572879B1 (ko) 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
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
JP2011165132A (ja) * 2010-02-15 2011-08-25 Seiko Epson Corp 画像処理装置、画像処理回路、及び画像処理方法
JP5835942B2 (ja) * 2010-06-25 2015-12-24 キヤノン株式会社 画像処理装置、その制御方法及びプログラム
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
JP5875530B2 (ja) 2011-01-31 2016-03-02 株式会社ソシオネクスト プログラム生成装置、プログラム生成方法、プロセッサ装置及びマルチプロセッサシステム
US9092267B2 (en) 2011-06-20 2015-07-28 Qualcomm Incorporated Memory sharing in graphics processing unit
JP5739758B2 (ja) * 2011-07-21 2015-06-24 ルネサスエレクトロニクス株式会社 メモリコントローラ及びsimdプロセッサ
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 晨星半導體股份有限公司 影像處理裝置與影像處理方法
JP5939572B2 (ja) * 2012-07-11 2016-06-22 国立大学法人東京農工大学 データ処理装置
US20140019486A1 (en) * 2012-07-13 2014-01-16 Amitava Majumdar Logic Content Processing for Hardware Acceleration of Multi-Pattern Search
US9232139B2 (en) 2012-07-24 2016-01-05 Apple Inc. Image stabilization using striped output transformation unit
CN202736078U (zh) * 2012-07-27 2013-02-13 华南理工大学 一种用于数字图像处理的特征提取模块
US9378181B2 (en) 2012-11-09 2016-06-28 Intel Corporation Scalable computing array
US9449257B2 (en) * 2012-12-04 2016-09-20 Institute Of Semiconductors, Chinese Academy Of Sciences Dynamically reconstructable multistage parallel single instruction multiple data array processing system
CN103019656B (zh) * 2012-12-04 2016-04-27 中国科学院半导体研究所 可动态重构的多级并行单指令多数据阵列处理系统
US9851977B2 (en) * 2012-12-06 2017-12-26 Kalray Apparatus and method for combining thread warps with compatible execution masks for simultaneous execution and increased lane utilization
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
US9374542B2 (en) 2014-03-28 2016-06-21 Intel Corporation Image signal processor with a block checking circuit
US9818166B2 (en) * 2015-01-16 2017-11-14 Intel Corporation Graph-based application programming interface architectures with producer/consumer nodes for enhanced image processing parallelism
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
Chao and Chen. Pyramid architecture for 3840 X 2160 quad full high definition 30 frames/s video acquisition. IEEE Trans. on CSVT, Vol. 20, No. 11, 2010년, pp. 1499-1508. 1부.*
Ragan-Kelley et al. Halide a language and compiler for optimizing parallelism, locality, and recomputation in image processing pipelines. ACM SIGPLAN Notices, Vol. 48, No. 6, 2013년, pp. 519-530. 1부.*
Wahib and Maruyama. Scalable kernel fusion for memory-bound GPU applications. SC14, 2014년 12월, pp. 191-202. 1부.*

Also Published As

Publication number Publication date
KR20170125396A (ko) 2017-11-14
US10719905B2 (en) 2020-07-21
EP3286726B1 (en) 2021-03-03
EP3286726A1 (en) 2018-02-28
DE112016001837T5 (de) 2018-03-08
US20190378239A1 (en) 2019-12-12
CN113132558A (zh) 2021-07-16
KR20190043643A (ko) 2019-04-26
CN107438860A (zh) 2017-12-05
KR101973733B1 (ko) 2019-04-29
US20160314555A1 (en) 2016-10-27
EP3852050A1 (en) 2021-07-21
US9965824B2 (en) 2018-05-08
JP2018513475A (ja) 2018-05-24
US10417732B2 (en) 2019-09-17
WO2016171909A1 (en) 2016-10-27
CN107438860B (zh) 2021-03-23
JP6571790B2 (ja) 2019-09-04
JP2019220202A (ja) 2019-12-26
US20170256021A1 (en) 2017-09-07
JP7202987B2 (ja) 2023-01-12

Similar Documents

Publication Publication Date Title
KR102278658B1 (ko) 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처
US11182138B2 (en) Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure
JP6858239B2 (ja) プログラムコードを、高性能で電力効率の良いプログラマブルな画像処理ハードウェアプラットフォームにマッピングするためのコンパイラ技法
JP6793228B2 (ja) 画像プロセッサのためのシート生成部
US10216487B2 (en) Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure
KR102013404B1 (ko) 이미지 프로세서용 라인 버퍼 유닛
JP2019507922A (ja) 画像プロセッサのためのコンパイラ管理メモリ
KR102278021B1 (ko) 이미지 프로세서 런타임 효율성을 개선하기 위한 프로그램 코드 변환
JP6750022B2 (ja) 画像プロセッサのためのマクロi/oユニット

Legal Events

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