KR102232723B1 - 2차원 실행 레인 어레이 및 2차원 시프트 레지스터를 갖는 이미지 프로세서상의 블록 연산을 위한 코어 프로세서 - Google Patents

2차원 실행 레인 어레이 및 2차원 시프트 레지스터를 갖는 이미지 프로세서상의 블록 연산을 위한 코어 프로세서 Download PDF

Info

Publication number
KR102232723B1
KR102232723B1 KR1020197003054A KR20197003054A KR102232723B1 KR 102232723 B1 KR102232723 B1 KR 102232723B1 KR 1020197003054 A KR1020197003054 A KR 1020197003054A KR 20197003054 A KR20197003054 A KR 20197003054A KR 102232723 B1 KR102232723 B1 KR 102232723B1
Authority
KR
South Korea
Prior art keywords
shift register
array
dimensional
processor
data
Prior art date
Application number
KR1020197003054A
Other languages
English (en)
Other versions
KR20190028454A (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 KR20190028454A publication Critical patent/KR20190028454A/ko
Application granted granted Critical
Publication of KR102232723B1 publication Critical patent/KR102232723B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/16Constructional details or arrangements
    • G06F1/20Cooling means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • G06F15/8023Two dimensional arrays, e.g. mesh, torus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06K9/00986
    • 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
    • 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
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C19/00Digital stores in which the information is moved stepwise, e.g. shift registers
    • G11C19/28Digital stores in which the information is moved stepwise, e.g. shift registers using semiconductor elements

Abstract

2차원 실행 레인 어레이 및 2 차원 시프트 레지스터 어레이를 갖는 이미지 프로세서 상에, 각각의 다음 반복마다 2차원 시프트 레지스터 어레이의 다수의 행 또는 열의 동시 시프트 량을 2배로 하는 방법이 개시된다. 이 방법은 또한 반복들의 시프트들 사이에서 2차원 실행 레인 어레이의 각각의 레인들 내의 하나 이상의 명령을 실행하는 단계를 포함한다. 또 다른 방법은, 2차원 실행 레인 어레이 및 2 차원 시프트 레지스터 어레이를 갖는 이미지 프로세서상에서, 상기 2차원 시프트 레지스터 어레이 내의 데이터의 다수의 행 또는 열의 반복된 동시 시프트 사이에서 동일한 어레이 위치의 상이한 레지스터들 내의 컨텐츠 사이에서 선택하는 실행 레인 어레이의 각각의 레인 내에서 하나 이상의 명령을 반복적으로 실행하는 단계를 포함한다.

Description

2차원 실행 레인 어레이 및 2차원 시프트 레지스터를 갖는 이미지 프로세서상의 블록 연산을 위한 코어 프로세서
본 발명은 일반적으로 이미지 프로세싱에 관한 것으로서, 보다 상세하게는 2차원 실행 레인 어레이 및 2차원 시프트 레지스터를 갖는 이미지 프로세서상의 블록 연산을 위한 코어 프로세스에 관한 것이다.
이미지 프로세싱은 일반적으로 어레이로 구성된 픽셀 값의 처리를 수반한다. 여기서, 공간적으로 조직화된 2차원 어레이는 이미지의 2차원 특성(nature)을 포착한다(추가 차원은 시간, 예를 들어 2차원 이미지의 시퀀스) 및 데이터 유형(예컨대, 컬러)을 포함할 수 있다). 일반적인 시나리오에서, 어레이화된 픽셀 값은 모션 이미지를 캡처하기 위해 정지 이미지 또는 프레임 시퀀스를 생성하는 카메라에 의해 제공된다. 종래의 이미지 프로세서들은 일반적으로 두 가지 극단적인 측면에 있다.
첫 번째 극단은 범용 프로세서 또는 범용 유사 프로세서(예컨대, 벡터 명령 강화를 갖는 범용 프로세서)상에서 실행되는 소프트웨어 프로그램으로서 이미지 프로세싱 태스크를 수행한다. 첫 번째 극단은 일반적으로 매우 다양한 애플리케이션 소프트웨어 개발 플랫폼을 제공하지만, 관련 오버 헤드(예컨대, 명령 인출 및 디코드, 온-칩 및 오프-칩 데이터의 프로세싱, 추론적 실행)와 결합된 보다 정교한 데이터 구조를 사용하면 궁극적으로 프로그램 코드의 실행 동안에 단위 데이터 당 더 많은 양의 에너지를 소모한다.
두 번째의 반대 극단은 훨씬 더 큰 데이터 블록에 고정 기능 하드와이어드 회로를 적용한다. 맞춤 설계된 회로에 직접적으로 더 큰(보다 정교한과 반대의) 데이터 블록을 사용하면 단위 데이터당 전력 소비가 크게 감소한다. 그러나, 맞춤 설계된 고정 기능 회로를 사용하면 일반적으로 프로세서가 수행할 수 있는 태스트 세트의 제한을 유발한다. 이와 같이 (첫 번째 극단과 관련된) 매우 다양한 프로그래밍 환경은 두 번째 극단에서 부족하다.
매우 다양한 애플리케이션 소프트웨어개발 기회와 단위 데이터 당 개선된 전력 효율을 함께 제공하는 기술 플랫폼은 바람직한 아직 결여된 솔루션으로 남아 있다.
2차원 실행 레인 어레이 및 2 차원 시프트 레지스터 어레이를 갖는 이미지 프로세서상에서, 각각의 다음 반복마다 2차원 시프트 레지스터 어레이의 다수의 행 또는 열의 동시 시프트 량을 2배로 하는 방법이 개시된다. 이 방법은 또한 반복들의 시프트들 사이에서 2차원 실행 레인 어레이의 각각의 레인들 내의 하나 이상의 명령을 실행하는 단계를 포함한다. 또 다른 방법은, 2차원 실행 레인 어레이 및 2 차원 시프트 레지스터 어레이를 갖는 이미지 프로세서상에서, 상기 2차원 시프트 레지스터 어레이 내의 데이터의 다수의 행 또는 열의 반복된 동시 시프트 사이에서 동일한 어레이 위치의 상이한 레지스터들 내의 컨텐츠 사이에서 선택하는 실행 레인 어레이의 각각의 레인 내에서 하나 이상의 명령을 반복적으로 실행하는 단계를 포함한다.
2차원 실행 레인 어레이 및 2 차원 시프트 레지스터 어레이를 갖는 이미지 프로세서상에서, 각각의 다음 반복마다 2차원 시프트 레지스터 어레이의 다수의 행 또는 열의 동시 시프트 량을 2배로 하는 수단을 포함하는 장치가 개시된다. 이 장치는 또한 반복들의 시프트들 사이에서 2차원 실행 레인 어레이의 각각의 레인들 내의 하나 이상의 명령을 실행하기 위한 수단을 포함한다. 또 다른 방법은, 2차원 실행 레인 어레이 및 2 차원 시프트 레지스터 어레이를 갖는 이미지 프로세서상에서, 상기 2차원 시프트 레지스터 어레이 내의 데이터의 다수의 행 또는 열의 반복된 동시 시프트 사이에서 동일한 어레이 위치의 상이한 레지스터들 내의 컨텐츠 사이에서 선택하는 실행 레인 어레이의 각각의 레인 내에서 하나 이상의 명령을 반복적으로 실행하는 수단을 포함한다.
다음의 설명 및 첨부 도면들은 본 발명의 다양한 실시예를 설명하기 위해 사용된다.
도 1은 기술 플랫폼의 다양한 구성 요소들을 나타낸다.
도 2a는 커널들로 구축된 애플리케이션 소프트웨어의 실시예를 도시한다.
도 2b는 커널의 구조의 실시예를 도시한다.
도 3은 커널의 동작의 실시예를 도시한다.
도 4a 내지 도 4c는 상위 레벨 애플리케이션 소프트웨어 개발 환경에서 커널 스레드를 개발하기 위한 가상 프로세서의 메모리 모델의 다양한 양태를 도시한다.
도 5a는 위치 관련 포맷을 갖는 로드 명령으로 작성된 스레드의 실시예를 도시한다.
도 5b는 상이한 픽셀 밀도를 갖는 이미지를 도시한다.
도 6은 애플리케이션 소프트웨어 개발 및 시뮬레이션 환경의 실시예를 도시한다.
도 7은 이미지 프로세서 하드웨어 아키텍처의 실시예를 도시한다.
도 8a 내지 도 8e는 라인 그룹으로의 이미지 데이터의 파싱, 시트로의 라인 그룹의 파싱 및 중첩 스텐실로 시트상에서 수행되는 연산을 도시한다.
도 9a는 스텐실 프로세서의 실시예를 도시한다.
도 9b는 스텐실 프로세서의 명령 워드의 실시예를 도시한다.
도 10은 스텐실 프로세서 내의 데이터 계산 유닛의 실시예를 도시한다.
도 11a 내지 도 11k는 중첩 스텐실로 한 쌍의 이웃하는 출력 픽셀 값을 결정하기 위한 2차원 시프트 어레이 및 실행 레인 어레이의 사용 예를 도시한다.
도 12는 통합된 실행 레인 어레이 및 2차원 시프트 어레이를 위한 단위 셀의 실시예를 도시한다.
도 13은 2차원 행/열 합 연산을 도시한다.
도 14a 내지 도 14d는 2차원 행 합 연산을 구현하기 위한 저 레벨 연산을 도시한다.
도 15는 2차원 프리픽스(prefix) 합 연산에 관한 것이다.
도 16a 내지 도 16d는 2차원 프리픽스 합 연산을 구현하기 위한 저 레벨 연산을 도시한다.
도 17은 2차원 검색 최소 연산에 관한 것이다.
도 18a 내지 도 18d는 2차원 최소치 검색(find minimum) 연산을 구현하기 위한 저 레벨 연산을 도시한다.
도 19a 및 도 19b는 행렬 곱 연산을 도시한다.
도 20a 내지 도 20e는 2차원 시프트 레지스터로 행렬 곱 연산을 구현하기 위한 저 레벨 연산을 도시한다.
도 21은 DFT 연산을 도시한다.
도 22a 내지 도 22f는 2차원 시프트 레지스터로 DFT 연산을 구현하기 위한 저 레벨 연산을 도시한다.
도 23은 버터 플라이 연산들을 도시한다.
도 24a 내지 도 24c는 2차원 시프트 레지스터로 구현된 버터 플라이 연산을 도시한다.
도 25는 기본 이미지 및 블록 이미지를 갖는 대체 이미지를 도시한다.
도 26a 내지 도 26d는 블록 매칭 알고리즘을 수행하기 위한 저 레벨 연산을 도시한다.
도 27은 2차원 실행 레인 어레이 및 2차원 시프트 레지스터 어레이를 갖는 하드웨어 플랫폼에 타겟팅된 프로그램 코드를 생성하기 위한 환경을 도시한다.
도 28은 컴퓨팅 시스템의 실시예를 도시한다.
i. 도입
이하의 설명은 향상된 전력 효율을 제공하기 위해 더 큰 데이터 블록(예를 들어, 이하에서 설명되는 바와 같은 라인 그룹들 및 시트들)을 사용하는 매우 다양한(widely versatile) 애플리케이션 소프트웨어 개발 환경을 제공하는 새로운 이미지 프로세싱 기술 플랫폼에 관한 수많은 실시예를 기술한다.
1.0 애플리케이션 소프트웨어 개발 환경
a. 커널의 응용 및 구조
도 1은 가상 이미지 프로세싱 환경(101), 실제 이미지 프로세싱 하드웨어(103) 및 상기 가상 프로세싱 환경(101)을 위해 작성된 상위 레벨 코드를 실제 하드웨어(103)가 물리적으로 실행하는 오브젝트 코드로 변역하기 위한 컴파일러(102)를 포함하는 이미지 프로세서 기술 플랫폼의 상위 레벨 뷰를 도시한다. 아래에서 보다 상세하게 설명하는 바와 같이, 가상 프로세싱 환경(101)은, 개발될 수 있고 애플리케이션의 구성 프로세스들의 용이한 시각화를 위해 맞춤화된 애플리케이션 측면에서 광범위하게 사용될 수 있다. 개발자(104)에 의한 프로그램 코드 개발 노력이 완료되면, 컴파일러(102)는 가상 프로세싱 환경(101)내에 작성된 코드를 실제 하드웨어(103)를 타겟으로 하는 오브젝트 코드로 변환한다.
도 2a는 가상 환경 내에 작성된 애플리케이션 소프트웨어가 취할 수 있는 구조 및 형태의 일 예를 도시한다. 도 2a에서 관찰되는 바와 같이, 프로그램 코드는 입력 이미지 데이터(201)의 하나 이상의 프레임을 처리하여 입력 이미지 데이터(201)에 대한 전체적인 변환을 수행할 것으로 예상될 수 있다. 상기 변환은 개발자에 의해 표현된(articulated) 조직화된(orchestrated) 시퀀스의 입력 이미지 데이터에 대해 동작하는 프로그램 코드(202)의 하나 이상의 커널의 동작에 의해 실현된다.
예를 들어, 도 2a에서 관찰되는 바와 같이, 전체 변환은 제1 커널(K1)로 각 입력 이미지를 먼저 처리함으로 수행(effect)된다. 상기 제1 커널(K1)에 의해 생성된 출력 이미지들은 커널(K2)에 의해 조작된다. 그런 다음 커널(K2)에 의해 생성된 각각의 출력 이미지는 커널(K3_1 또는 K3_2)에 의해 조작된다. 이어서 커널(들)(K3_1/K3_2)에 의해 생성된 출력 이미지는 커널(K4)에 의해 조작된다. 커널들(K3_1 및 K3_2)은 K3 스테이지에서 병렬 프로세싱을 부과하여 전체 프로세싱 속도를 높이기 위해 설계된 동일한 커널이거나 다른 커널(예컨대, 커널(K3_1)은 첫 번째 특정 유형의 입력 이미지에 대해 동작하고 커널(K3_2)은 두 번째, 다른 유형의 입력 이미지에 대해 동작함)일 수 있다.
이와 같이, 보다 큰 전체 이미지 프로세싱 시퀀스는 이미지 프로세싱 파이프 라인 또는 방향성 비순환 그래프(DAG : directed acyclic graph)의 형태를 취할 수 있고, 개발 환경은 이와 같이 개발된 프로그램 코드의 표현을 개발자에게 실제로 제시하도록 구비될 수 있다. 커널들은 개별적으로 개발자에 의해 개발될 수 있으며 및/또는(실제 신호 프로세서 하드웨어 및/또는 그의 설계와 같은) 임의의 기본 기술 및/또는 제3자(예컨대, 개발 환경을 위해 작성된 커널 소프트웨어 공급 업체)가 제공하는 엔터티에 의해 제공될 수 있다. 이와같이, 명목상의 개발 환경에는 개발자들이 그들의 큰 개발 노력의 전반적인 흐름에 영향을 미치기 위해 다양한 방식으로 자유롭게 "연결(hook-up)"할 수 있는 커널들의 "라이브러리"가 포함될 것으로 예상된다. 이러한 라이브러리의 일부일 것으로 예상되는 일부 기본 커널들은 다음과 같은 기본 이미지 프로세싱 작업들 즉 컨볼루션, 노이즈 제거, 색상 공간 변환, 에지 및 모서리 검출, 선명화(sharpening), 화이트 밸런스, 감마 보정, 톤 매핑, 행렬 곱셈, 이미지 등록, 피라미드 생성, 웨이브렛 변환, 블록-단위(block-wise) 이산 코사인 및 푸리에 변환 중 하나 이상을 제공하는 커널들을 포함할 수 있다.
도 2b는 개발자에 의해 구상될 수 있는 커널(203) 구조의 예시적인 묘사를 도시한다. 도 2b에 도시된 바와 같이, 커널(203)은 각 프로세서(205)가 출력 어레이(206)내의 특정 위치(커널이 생성하는 출력 이미지의 특정 픽셀 위치와 같은)로 향하는 각각의 기본(underlying) 프로세서(205)상에서 각각 동작하는 프로그램 코드("스레드들")(204)의 다수의 병렬 스레드로 간주될 수 있다. 간략화를 위해, 단지 3개의 프로세서 및 대응하는 스레드들이 도 2b에 도시되어 있다. 다양한 실시예에서, 모든 묘사된 출력 어레이 위치는 그 자신의 전용 프로세서 및 대응하는 스레드를 가질 것이다. 즉, 별도의 프로세서와 스레드가 출력 어레이의 각 픽셀에 할당될 수 있다. 대안적인 접근법에서, 동일한 스레드는 출력 픽셀보다 많은 데이터를 생성할 수 있고 및/또는(예를 들어, 소정의 제한된 경우) 2개의 상이한 스레드는 동일한 출력 픽셀에 대한 데이터 생성시 협력할 수 있다.
아래에서 더 상세히 설명되는 바와 같이, 다양한 실시예에서, 실제 기본 하드웨어에서, 실행 레인들의 어레이 및 대응하는 스레드들은 현재 처리되는 프레임의 "라인 그룹"의 일부에 대한 출력 이미지 데이터를 생성하기 위해(예를 들어, SIMD(Single Instruction Multiple Data) 방식으로) 조화롭게 동작한다. 라인 그룹은 이미지 프레임의 연속적인 상당한 크기의 섹션(sizable section)이다. 다양한 실시예에서, 개발자는 하드웨어가 라인 그룹들상에서 동작한다는 것을 의식할 수 있거나, 또는 개발 환경은 예를 들어 출력 프레임 내의 모든 픽셀(예컨대, 자신의 전용 프로세서 및 스레드에 의해 생성된 출력 프레임의 모든 픽셀)에 대해 별도의 프로세서 및 스레드가 존재하는 추상(abstraction)을 제시할 수 있다. 그럼에도 불구하고, 다양한 실시예에서, 개발자는 각 출력 픽셀(출력 어레이가 전체 출력 프레임 또는 그의 섹션으로 시각화되는지 여부)에 대해 개별 스레드를 포함하도록 출력을 이해한다.
아래에서 보다 상세히 설명되는 바와 같이, 일 실시예에서, 가상 환경에서 개발자에게 제시되는 프로세서(205)는 표준(예컨대, RISC) 오피코드들을 지원할뿐만 아니라 개발자가 수행중인 픽셀 프로세싱으로 픽셀을 쉽게 시각화할 수 있게 하는 특수 포맷된 데이터 액세스 명령들을 포함하는 명령 세트 아키텍처(ISA)를 갖는다. 종래의 수학 및 프로그램 제어 오피코드들의 전체 ISA와 결합하여 입력 어레이 위치를 쉽게 정의/시각화하는 능력(ability)은, 기본적으로 애플리케이션 프로그램 개발자가 임의의 크기의 이미지 표면상에서 수행될 임의의 원하는 기능을 이상적으로 정의할 수 있게 해주는 매우 다용도의 프로그래밍 환경을 허용한다. 예를 들어 이상적으로 도든 수학 연산은 모든 스텐실 크기에 적용되도록 쉽게 프로그래밍될 수 있다.
데이터 액세스 명령들에 관하여, 일 실시예에서, 가상 프로세서의 ISA("가상 ISA")는 특수 데이터 로드 명령 및 특수 데이터 저장 명령을 포함한다. 데이터 로드 명령은 이미지 데이터의 입력 어레이 내의 임의의 위치로부터 리드할 수 있다. 데이터 저장 명령은 이미지 데이터의 출력 어레이 내의 임의의 위치에 기록할 수 있다. 후자의 명령은 동일한 프로세서의 다수의 인스턴스를 서로 다른 출력 픽셀 위치들에 쉽게 할당할 수 있게 해준다(각 프로세서는 출력 어레이의 상이한 픽셀에 기록한다). 이와 같이, 예를 들어, 스텐실 크기(예컨대, 픽셀들의 폭 및 픽셀들의 높이로서 표현되는)는 쉽게 프로그램 가능한 특징(feature)으로 만들어질 수 있다. 프로세싱 동작의 시각화는 특수 로드 및 저장 명령들 각각이 특수 명령 포맷을 가지며 이에 의해 타겟 어레이 위치가 X 및 Y좌표로 단순하게 지정되므로 더욱 단순화된다.
그럼에도 불구하고, 출력 어레이 내의 다수의 위치들 각각에 대해 개별 프로세서를 인스턴스화함으로써, 프로세서는 예를 들어, 출력 어레이의 모든 위치에 대한 각각의 값이 동시에 생성되도록 병렬로 그들 각각의 스레드를 실행할 수 있다. 많은 이미지 프로세싱 루틴이 일반적으로 동일한 출력 이미지의 상이한 픽셀들에서 동일한 동작들을 수행한다는 것은 주목할 만한 사실이다. 이와 같이, 개발 환경의 일 실시예에서, 각 프로세서는 동일하고 동일한 스레드 프로그램 코드를 실행한다고 가정한다. 따라서, 가상화된 환경은 예를 들어 동일한 코드를 동일 방식(lock-step)으로 각각 실행하는 동일한 프로세서들의 2D 어레이로 구성된 일종의 2차원(2D) SIMD 프로세서로 간주될 수 있다.
도 3은 출력 어레이에서 2개의 상이한 픽셀 위치에 대해 동일한 코드를 처리하고 있는 2개의 가상 프로세서에 대한 처리 환경의 보다 상세한 예를 나타낸다. 도 3은 생성되는 출력 이미지에 대응하는 출력 어레이(304)를 도시한다. 여기서, 제1 가상 프로세서는 스레드(301)의 코드를 프로세싱하여 출력 어레이(304)의 위치(X1)에서 출력 값을 생성하고, 제2 가상 프로세서는 스레드(302)의 코드를 프로세싱하여 출력 어레이(304)의 위치(X2)에서 출력 값을 생성한다. 또한, 다양한 실시예에서, 개발자는 출력 어레이(304)내의 각 픽셀 위치에 대한 별도의 프로세서 및 스레드가 있다는 것을 이해할 것이다(간략화를 위해 도 3은 이들 중 2개만 도시함). 그러나, 다양한 실시예에서 개발자는 (기계의 특성과 같은 SIMD 때문에) 하나의 프로세서 및 스레드에 대한 코드를 개발할 필요가 있다.
당 업계에서 공지된 바와 같이, 출력 픽셀 값은 대응하는 출력 픽셀 위치를 포함하고 둘러싸는 입력 어레이의 픽셀들을 처리함으로써 종종 결정된다. 예를 들어, 도 3으로부터 알 수 있는 바와 같이, 출력 어레이(304)의 위치(X1)는 입력 어레이(303)의 위치(E)에 대응한다. 따라서 출력 값(X1)을 결정하기 위해 처리될 입력 어레이(303) 픽셀 값들의 스텐실은 입력 값(ABCDEFGHI)에 해당한다. 유사하게, 출력 값(X2)를 결정하기 위해 처리될 입력 어레이 픽셀들의 스텐실은 입력 값( DEFGHIJKL)에 해당한다.
도 3은 출력값(X1 및 X2)를 각각 계산하는데 사용될 수 있는 한 쌍의 스레드(301, 302)에 대한 대응하는 가상 환경 프로그램 코드의 예를 나타낸다. 도 3의 예에서, 코드 쌍 모두는 동일하며 대응하는 출력 값을 결정하기 위해 9개의 입력 어레이 값의 스텐실을 평균한다. 상기 2개의 스레드 간의 유일한 차이점은 입력 어레이로부터 호출되는 변수들 및 기록되는 출력 어레이의 위치이다. 구체적으로는, 출력 위치(X1)에 쓰는 스레드는 스텐실(ABCDEFGHI)에서 작동하고, 출력 위치(X2)에 쓰는 스레드는 스텐실(DEFGHIJKL)에서 작동한다.
스레드 쌍(301, 302)의 각각의 프로그램 코드로부터 알 수 있는 바와 같이, 각 가상 프로세서는 적어도 내부 레지스터(R1 및 R2)를 포함하고, 적어도 다음의 명령들, 즉 1) 입력 어레이로부터 R1으로의 로드(LOAD) 명령; 2) 입력 어레이로부터 R2로의 LOAD 명령; 3) R1과 R2의 컨텐츠를 더하고 그 결과를 R2에 위치시키는 가산(ADD) 명령; 4) R2내의 값을 즉치 오퍼랜드(9)로 나누는 나눗셈(DIV) 명령. 5) 스레드 전용인 출력 어레이 위치에 R2의 컨텐츠를 저장하는 저장(STORE) 명령을 지원한다. 다시 말하면, 단지 2개의 출력 어레이 위치 및 단지 2개의 스레드 및 대응하는 프로세서들이 도 3에 도시되어 있지만, 출력 어레이의 모든 위치에는 이러한 기능들을 수행하는 가상 프로세서 및 대응하는 스레드가 할당될 수 있다. 다양한 실시예들에서, 프로세싱 환경의 SIMD 유사 특성에 따라, 다수의 스레드들은 서로 고립(분리)되어 실행된다. 즉, 가상 프로세서 사이에는 스레드 간 통신이 없다(하나의 SIMD 채널이 다른 SIMD 채널로 교차하지 못하도록 함).
b. 가상 프로세서 메모리 모델
다양한 실시예에서, 가상 프로세서들의 적절한 특징은 그들의 메모리 모델이다. 본 기술 분야에서 이해되는 바와 같이, 프로세서는 메모리로부터 데이터를 판독하고, 해당 데이터에 대해 동작하여, 새로운 데이터를 메모리에 다시 기록한다. 메모리 모델은 프로세서가 가지는 데이터가 메모리에 구성되는 방식의 관점 또는 보기(view)이다. 도 4a 내지 도 4c는 개발 환경의 가상 프로세서에 대한 메모리 모델의 실시예에 관한 것이다. 3개의 가상 프로세서 및 대응하는 스레드들(401)만을 포함하는 단순한 환경이 예로서 사용된다. 아래에서 보다 상세히 설명되는 바와같이, 가상 프로세서들의 메모리 모델은 SIMD 시멘틱을 보존하는 동시에 각 가상 프로세서에 대한 스칼라 연산들 및 개별 중간 값(private intermediate value) 저장 공간을 제공합니다.
도 4a에서 관찰되는 바와 같이, 일 실시예에서, 각각의 가상 프로세서가 동작하는 메모리 영역(420)은 저장된 정보의 유형에 기초하여 6개의 상이한 파티션으로 구성된다. 구체적으로는, 1) 전용 스크래치 패드(private scratchpad) 영역(402); 2) 전역(global) 입력 데이터 어레이 영역(403); 3) 전역 출력 데이터 어레이 영역(404); 4) 전역 룩-업 테이블 정보 영역(405); 5) 전역 원자 통계 영역(406); 및 6) 전역 상수 테이블 정보 영역(407)이 있다.
도 4a에 도시된 바와 같은 파티션들은 전체 프로세싱 환경의 SIMD와 유사한 특성을 유지하면서 가상 프로세서들 사이에서 공유되거나 "전역"인 메모리의 이들 영역을 가시화하려고 시도한다. 마찬가지로, 도 4a는 또한 가상 프로세서들 사이에서 공유되지 않거나 특정 가상 프로세서에 대해 "전용"인 메모리의 다른 영역들을 시각화하려고 시도한다. 특히, 도 4a에서 관찰되는 바와 같이, 각 가상 프로세서에 전용인 스크래치 패드 영역(402)을 제외하고 모든 메모리 파티션은 전역적이다. 다수의 상이한 메모리 영역은 또한 이하에 설명되는 바와 같이 상이한 메모리 어드레싱 방식을 갖는다.
스크래치 패드 영역(402)에 관하여, 정교한 이미지 프로세싱 알고리즘의 실행 과정에 걸쳐 중간 정보(intermediate information)를 일시적으로 저장(예를 들어, 정보를 다시 읽은 후 나중에 사용)하는 것은 드문 일이 아니다. 또한, 이러한 정보가 스레드간에 상이한 것은 드문 일이 아니다(상이한 입력 값은 상이한 중간 값에 영향을 미칠 수 있다). 따라서, 메모리 모델은 각 가상 프로세서의 대응하는 스레드에 의한 그러한 중간 정보의 저장을 위한 프로세서 전용 스크래치 패드 영역(402)을 포함한다. 일 실시예에서, 특정 프로세서에 대한 스크래치 패드 영역은 전형적인(예컨대, 선형의) 랜덤 액세스 메모리 어드레스를 통해 해당 프로세서에 의해 액세스되고(409), 메모리의 판독/기록 영역이다(즉, 가상 프로세서는 전용 메모리로부터 정보를 판독할 수 있을 뿐만 아니라 전용 메모리에 정보를 기록할 수 있다). 스크래치 패드 영역에 액세스하기 위한 가상 프로세서 ISA 명령 포맷의 실시예들은 이하에서 더 상세히 설명된다.
입력 어레이부(403)는 출력 데이터를 생성하기 위해 스레드 세트로 호출되는(408) 입력 데이터 세트를 포함한다. 일반적인 상황에서, 입력 어레이는 각 스레드가 그곳에서 동작하거나 그의 내부에서 동작하는 이미지(예컨대, 프레임) 또는 이미지의 섹션에 대응한다. 입력 이미지는 카메라에 의해 제공된 픽셀 정보와 같은 실제 입력일 수도 있고, 보다 큰 전체 이미지 프로세싱 시퀀스에서 이전 커널에 의해 제공된 정보와 같은 중간 이미지의 일부 형태일 수도 있다. 가상 프로세서들은 동일한 사이클 동안 입력 이미지 데이터의 상이한 픽셀 위치들에서 작동하기 때문에 일반적으로 동일한 입력 데이터 아이템들에 대해 경쟁하지 않는다.
일 실시예에서, 새로운 메모리 어드레싱 방식이 어떤 특정 입력 값들이 입력 어레이(403)로부터 호출되어야 하는지를 정의하는데 사용된다. 구체적으로는, 종래의 선형 메모리 어드레스가 아닌 X, Y 좌표로 원하는 입력 데이터를 정의하는 "위치 관련(position relative)" 어드레싱 체계가 사용된다. 이와 같이, 가상 프로세서의 ISA의 로드 명령은 X 성분 및 Y 성분으로 입력 어레이 내의 특정 메모리 위치를 식별하는 명령 포맷을 포함한다. 이와 같이, 2차원 좌표계는 입력 어레이(403)로부터 판독된 입력 값들에 대한 메모리를 주소 지정하는데 사용된다.
위치 관련 메모리 어드레싱 접근법의 사용은 가상 프로세서가 동작하고 있는 이미지의 영역이 개발자에게 보다 쉽게 식별될 수 있게 한다. 위에서 언급한 바와같이, 종래의 수학적 및 프로그램 제어 오피코드의 전체 ISA와 결합하여 입력 어레이 위치를 쉽게 정의/시각화하는 기능(ability)은 애플리케이션 프로그램 개발자가 임의 크기의 이미지 표면에서 수행할 임의의 이상적인 기능을 이상적으로 쉽게 정의할 수 있게 해주는 매우 다양한 프로그래밍 환경을 가능하게 한다. 위치 관련 어드레싱 방식뿐만 아니라 지원되는 ISA의 다른 특징들의 실시예를 채택하는 명령들에 대한 다양한 명령 포맷 실시예들이 이하에서 더 상세히 설명된다.
출력 어레이(404)는 스레드가 생성을 담당하는 출력 이미지 데이터를 포함한다. 출력 이미지 데이터는 전체 이미지 프로세싱 시퀀스를 따르는 디스플레상에 제시되는 실제 이미지 데이터와 같은 최종 이미지 데이터일 수 있거나, 전체 이미지 프로세싱 시퀀스의 후속 커널이 입력 이미지 데이터 정보로서 사용하는 중간 이미지 데이터일 수 있다. 가상 프로세서는 동일한 사이클 동안 출력 이미지 데이터의 상이한 픽셀 위치에 기록하기 때문에 일반적으로 동일한 출력 데이터 아이템에 대해 경쟁하지 않는다.
일 실시예에서, 위치 관련 어드레싱 방식은 출력 어레이로의 기록에도 사용된다. 이와 같이, 각 가상 프로세서에 대한 ISA는 메모리의 목표 기록 위치를 종래의 랜덤 액세스 메모리 어드레스가 아닌 2차원 X, Y 좌표로 정의하는 저장 명령을 포함한다. 가상 ISA의 위치 관련 명령들의 실시예들에 관한 보다 상세한 설명은 이하에서 더 제공된다.
도 4a는 또한 룩-업 테이블 메모리 영역(405) 내에 유지되는 룩-업 테이블(411)로 룩업(410)을 수행하는 각각의 가상 프로세서를 나타낸다. 룩업 테이블들은 종종 예를 들어 상이한 어레이 위치들에 대한 필터 또는 변환 계수들을 획득하고, 상기 룩-업 테이블이 입력 인덱스 값에 대한 함수 출력을 제공하는 복소 함수(예컨대, 감마 곡선, 사인, 코사인)를 구현하기 위해 이미지 프로세싱 작업에 의해 사용된다. 여기서, SIMD 이미지 프로세싱 시퀀스들은 종종 동일한 클럭 사이클 동안 동일한 룩-업 테이블로 룩-업을 수행할 것으로 예상된다. 이와 같이, 입력 및 출력 어레이 메모리 영역(403, 404)과 마찬가지로, 룩-업 테이블 영역(405)은 임의의 가상 프로세서에 의해 전역적으로 액세스 가능하다. 도 4a는 마찬가지로 3개의 가상 프로세서 각각이 룩-업 테이블 메모리 영역(405)에 유지되는 동일한 룩-업 테이블(411)로부터의 정보를 효과적으로 룩-업하는 것을 나타낸다.
일 실시예에서, 인덱스 값들이 일반적으로 원하는 룩-업 테이블 엔트리를 정의하는데 사용되기 때문에, 룩-업 테이블 정보 영역은 정상 선형 액세스 방식을 사용하여 액세스된다. 일 실시예에서, 메모리의 룩-업 영역은 판독 전용이다(즉, 프로세서는 룩-업 테이블의 정보를 변경할 수 없고, 룩업 테이블로부터 정보를 판독하는 것만 허용된다). 간략화를 위해, 도 4a는 룩-업 테이블 영역(405) 내에 단지 하나의 룩-업 테이블이 상주함을 제시하지만, 가상 환경은 시뮬레이션된 런타임 동안 다수의 상이한 룩-업 테이블이 상주할 수 있게 한다. 룩-업 테이블로의 룩-업을 수행하는 명령들에 대한 가상 ISA 명령 포맷의 실시예들이 아래에 더 제공된다.
도 4b는 3개의 가상 프로세서 각각을 원자 통계 영역(406)에 기록(413)하는 것을 나타낸다. 이미지 프로세스가 정보를 "업데이트"하거나 적당한 변경(modest change)을 하는 것은 드문 일이 아니다. 그런 다음 업데이트된 정보는 상기 업데이트된 정보를 사용하는 다른 다운스트림 프로세스들에 사용될 수 있다. 이러한 업데이트 또는 적당한 변경의 예들은 출력 데이터에 대한 고정 오프셋의 간단한 가산, 출력 데이터에 대한 피승수의 간단한 승산 또는 일부 임계값에 대한 출력 데이터의 최소 또는 최대 비교를 포함한다.
이들 시퀀스에서, 도 4b에서 관찰되는 바와 같이, 개별 스레드(401)에 의해 방금 계산된 출력 데이터가 연산되어 그 결과(413)가 원자 통계 영역(406)에 기록될 수 있다. 구현 시멘틱에 따라, 원자 동작(atomic act)에 의해 작동되는 출력 데이터는 프로세서에 의해 내부적으로 유지되거나 출력 어레이에서 호출될 수 있으며, 도 4b는 후술된다. 다양한 실시예에서, 출력 데이터에 대해 수행될 수 있는 원자 동작은 가산, 곱셈, 최소 및 최대를 포함한다. 일 실시예에서, 원자 통계 영역(406)은 출력 데이터에 대한 업데이트가 출력 데이터 자체와 동일한 2차원 어레이로 논리적으로 구성되는 경우에 (입력 및 출력 어레이 액세스와 같이) 위치 관련 어드레싱 방식을 사용하여 액세스된다. 출력 데이터에 원자 동작을 수행하고 그 결과를 통계 영역(406)에 기록하기 위한 가상 ISA 명령 포맷의 실시예들은 이하에서 더 상세하게 설명된다.
도 4c는 상수 메모리 영역(407) 내의 상수 룩-업 테이블(415)로부터 상수값을 판독(414)하는 각 가상 프로세서를 도시한다. 여기서, 예를 들어, 상이한 스레드들(401)은 동일한 클록 사이클(예컨대, 전체 이미지에 대해 적용될 특정 곱셈기)에서 동일한 상수 또는 다른 값을 필요로 할 것으로 예상된다. 따라서, 상수 룩-업 테이블(415)로의 액세스는 도 4c에 도시된 바와 같이 각각의 가상 프로세서에 동일한 스칼라 값을 반환한다. 룩-업 테이블은 전형적으로 인덱스 값으로 액세스되기 때문에, 일 실시예에서, 상수 룩-업 테이블 메모리 영역은 선형 랜덤 액세스 메모리 어드레스로 액세스된다. 일 실시예에서, 메모리의 상수 영역은 오직 판독 전용이다(즉, 프로세서는 상수 테이블의 정보를 변경할 수 없고, 그것으로부터 정보를 판독하는 것만 허용된다). 간략화를 위해, 도 4c는 상수 메모리 영역(407) 내의 단일 상수 룩-업 테이블(415)만을 나타낸다. 스레드들이 하나 이상의 그러한 테이블을 사용할 수 있기 때문에, 메모리 영역(407)은 많은 상수 테이블이 필요/사용되는 것을 유지할 만큼 충분히 크게 구성된다.
c. 가상 프로세서 ISA
다수의 경우에서 상술한 바와 같이, 가상 프로세서(ISA)는 다수의 관련 특징들을 포함할 수 있다. 이들 중 일부는 바로 아래에 설명되어 있다.
다양한 실시예에서, 각 가상 프로세서의 명령 포맷은 다음과 같은 즉, 1) 입력 어레이 메모리 영역으로부터 입력 이미지 데이터를 판독하는 LOAD 명령; 2) 출력 이미지 데이터를 출력 어레이에 기록하는 STORE 명령; 및 3) 메모리의 통계 영역에 대한 원자적 업데이트 각각에 대해 X, Y 좌표를 정의하는 상대 위치 지정 (relative positioning) 접근법을 사용한다:
종래의 데이터 액세스, 수학적 및 프로그램 제어 오피코드의 전체 ISA와 결합하여 임의의 입력 어레이 위치를 쉽게 정의할 수 있는 능력은 애플리케이션 프로그램 개발자가 임의 크기의 이미지 표면상에서 수행될 임의의 원하는 기능을 이상적으로 정의할 수 있게 해주는 매우 다양한 프로그래밍 환경을 허용한다. 예를 들어 이상적인 수학 연산은 모든 스텐실 크기에 적용되도록 쉽게 프로그래밍될 수 있다.
일 실시예에서, 입/출력 어레이로부터/로 로드/저장하기 위한 명령들은 다음의 포맷 [OPCODE] LINEGROUP_(name)[(((X*XS + X0)/XD);((Y*YS + Y0)/YD); Z]을 갖는데, 여기서 [OPCODE]는 특정 유형의 동작(입력 어레이로부터 LOAD, 출력 어레이에 저장)이고, LINEGROUP_(name)은 입력 또는 출력 어레이 메모리 영역 내의 특정 이미지의 특정 섹션(예컨대, 이미지 데이터의 프레임에 대한 라인 그룹)에 할당된 이름이다. 여기서, 상이한 라인 그룹들이 개별적으로 동작되기 때문에, 상이한 라인 그룹들에는 고유하게 식별/액세스될 수 있도록 상이한 이름이 부여된다(예컨대, LINEGROUP_1, LINEGROUP_2 등). 동일한 이름의 라인 그룹들은 입력 어레이 메모리 영역과 출력 어레이 메모리 영역 모두에 존재할 수 있다. 임의의 라인 그룹의 원점(origin)은, 예를 들어, 그의 적절한 메모리 영역 내의 하단 좌측 코너일 수 있다.
일 실시예에서, 원자 통계 테이블에 대한 업데이트를 수행하는 명령들의 경우에, 명령 포맷은, 입력 오퍼랜드 정보가 입력 또는 출력 어레이 내의 특정 라인 그룹이 아닌 특정 통계 테이블(STATS_(name)) 내의 위치를 정의한다는 점에서 주목할 만한 차이점을 갖는 다음과 유사한 구조인 [OPCODE] STATS_(name)[(((X*XS + X0)/XD);((Y*YS + Y0)/YD); Z]를 취한다. 라인 그룹들과 마찬가지로, 스레드가 그의 동작 과정에서 상이한 통계 테이블에서 고유하게 작동할 수 있도록 상이한 이름들이 상이한 통계 테이블들에 주어진다. 상기 [OPCODE]는 수행될 특정 원자 동작(예컨대, STAT_ADD; STAT_MUL; STAT_MIN; STAT_MAX)을 지정한다.
입/출력 어레이 액세스 또는 원자 통계 테이블 액세스 모두에 대해, 명령의 Z 오피코드는 명명에 의해 타겟팅되는 명명된 라인 그룹 또는 통계 테이블의 채널을 정의한다. 여기서, 일반적으로 단일 이미지는 다수의 채널을 가질 것이다. 예를 들어, 비디오 이미지들은 일반적으로 비디오 스트림의 동일한 프레임에 대해 적색 채널(R), 녹색 채널(G) 및 청색 채널(B)을 갖는다. 어떤 의미에서, 완전한 이미지는 서로의 상부에 적층된(stacked) 별도의 R, G 및 B 채널 이미지로 불 수 있다. Z 오퍼랜드는 이들 중 어느 것이 명령에 의해 타겟팅되는 지를 정의한다(예컨대, Z=0는 적색 채널에 대응하고, Z=1은 청색 채널에 대응하고, Z=2는 녹색 채널에 대응함). 따라서 각 라인 그룹 및 통계 테이블은 처리중인 특정 이미지에 대한 각 채널의 컨텐츠를 포함하도록 구성된다.
상기 (X*XS + X0)/XD 오퍼랜드는 명령에 의해 카겟팅된 명명된 라인 그룹 또는 통계 테이블 내의 X 위치를 정의하고, (Y*YS + Y0)/YD 오퍼랜드는 명령에 의해 타겟팅되는 명명된 라인 그룹 또는 통계 테이블내의 Y 위치를 정의한다. 상기 X 위치에 대한 XS 및 XD 항목들 및 Y 위치에 대한 YS 및 YD 항목들은 상이한 픽셀 밀도를 갖는 입력 및 출력 이미지 사이의 스케일링에 사용된다. 스케일링에 대해서는 아래에 더 자세히 설명되어 있다.
가장 단순한 경우, 입력 이미지와 출력 이미지 사이에 스케일링이 없으며, 명령 포멧의 X 및 Y 성분은 단순히 X+X0 및 Y+Y0의 형식을 취하며, 여기서 X0 및 Y0는 스레드의 위치에 대한 위치 오프셋이다. 스레드는 그의 출력 값이 기록되는 출력 어레이 라인 그룹 내의 위치에 할당된 것으로 간주된다. 대응하는 동일 위치는 입력 어레이 라인 그룹 및 임의의 통계 테이블에서 쉽게 식별 가능하다.
예를 들어, 스레드가 출력 어레이(LINEGROUP_1)의 특정 X, Y 위치에 할당되면, 상기 명령 LOAD LINEGROUP_1[(X-1);(Y-1);Z]은 입력 어레이 내의 동일한 X, Y 위치로부터 왼쪽으로 한 픽셀 위치이고 아래로 한 픽셀 위치인 값을 LINEGROUP_1로부터 로드한다.
따라서, 그의 좌측 및 우측 이웃들과 함께 X, Y 위치에 대한 픽셀 값들을 함께 평균화하는 단순 블러 커널(blur kernel)은 도 5a에 도시된 바와 같이 의사-코드로 기록될 수 있다. 도 5a에서 관찰되는 바와 같이, 위치((X);(Y))는 출력 어레이에 기록되는 가상 프로세서의 위치에 대응한다. 의사 코드에서, LOAD는 입력 어레이로부터의 로드에 대한 오피코드에 해당하고, STORE는 출력 어레이로의 저장에 대한 오피코드에 해당한다. 입력 어레이에는 LINEGROUP_1이 있고 출력 어레이에는 LINEGROUP_1이 존재한다.
도 5b는 상대 위치 지정 로드 및 저장 명령 포맷의 스케일링 특징을 설명하기 위한 스케일링된 이미지를 도시한다. 다운 샘플링은 입력 이미지에 존재하는 모든 픽셀보다 적은 출력 이미지를 제공함으로써 고해상도 이미지를 저해상도 이미지로 변환하는 것을 의미한다. 업 샘플링은 출력 이미지에 입력 이미지에 존재하는 픽셀 보다 많은 픽셀을 생성함으로써 저해상도 이미지를 고해상도 이미지로 변환하는 것을 의미한다.
예를 들어, 도 5b를 참조하면, 이미지(501)는 입력 이미지를 나타내고 이미지(502)는 출력 이미지를 나타내는 경우, 출력 이미지에 입력 이미지 보다 적은 픽셀들이 있기 때문에 다운 심플링이 수행될 것이다. 여기서, 출력 이미지의 각 픽셀에 대해, 출력 픽셀에 대한 출력 값을 결정하는 입력 이미지의 관련 픽셀들은 출력 이미지에서 어느 한 축을 따라 이동하는 출력 픽셀 위치로부터 "멀리 떨어져(farther away)" 진행한다. 예를 들어, 3:1 다운 샘플링 비율의 경우, 어느 한 축을 따르는 출력 이미지의 제1 픽셀은 입력 이미지에서 동일한 축을 따르는 제1, 제2 및 제3 픽셀에 대응하고, 출력 이미지의 두 번째 픽셀은 입력 이미지의 제4, 제5 및 제6 픽셀에 대응한다. 따라서, 제1 출력 픽셀은 제3 위치에 적절한 픽셀을 갖고, 제2 출력 픽셀은 제6 위치에 적절한 픽셀을 갖는다.
이와 같이, 상대 위치 지정 명령 포맷의 XS 및 YS 피승수 항들은 다운 샘플링을 구현하는데 사용된다. 도 5a의 블러 의사 코드가 양축을 따라 3:1 다운 샘플링을 위해 재작성되어야 하는 경우, 상기 코드는 다음과 같이 재작성될 것이다:
Figure 112019010777691-pct00001
대조적으로, 1:3 업 샘플링(예컨대, 이미지(502)는 입력 이미지이고 이미지(501)는 출력 이미지인)의 경우, XD 및 YD 제수(divisors)는 어느 한 축을 따르는 모든 입력 픽셀에 대해 3개의 출력 픽셀을 생성하는데 사용된다. 이와 같이, 블러 코드는 다음과 같이 재작성된다.
Figure 112019010777691-pct00002
다양한 실시예에서, 메모리의 전용, 상수 및 룩업 부분들을 액세스하는 명령들에 대한 명령 포맷은 a*b+c의 형태를 또한 취하는 오퍼랜드를 포함하며, 여기서 a는 기본(base) 위치이고, b는 스케일링 항 및 c는 오프셋이다. 그러나, 여기서 상기 a*b+c 항이 본질적으로 타겟팅된 테이블에 적용되는 선형 인덱스에 해당하는 선형 어드레싱 접근법이 사용된다. 이들 명령 각각은 또한 액세스되는 메모리 영역의 오피코드 및 식별자를 포함한다. 예를 들어, 룩- 테이블 메모리 영역으로부터 룩-업을 수행하는 명령은 LOAD LKUP_(name)[(A*B+C)]로 표현될 수 있다. 여기서 LOAD는 로드 동작을 식별하는 오피코드이고 LKUP_(name)은 액세스되는 룩-업 메모리 영역내의 룩-업 테이블의 이름을 지정한다. 다시 말하면, 다수의 룩-업 테이블은 스레드에 의해 사용될 수 있으므로, 명명 방식(naming scheme)이 룩-업 테이블 메모리 영역에 존재하는 둘 이상의 적절한 테이블을 식별하는데 사용된다.
유사한 방식의 오피코드를 갖는 유사한 포멧이 상기 상수 및 상기 전용 메모리 영역들(예컨대, LOAD CNST_(name)[(A*B+C)]; LOAD PRVT_(name)[(A*B+C)])을 타겟팅하는 명령들에 이용될 수 있다. 일 실시예에서, 룩업 테이블 및 상수 테이블 액세스는 판독 전용이다(프로세서는 거기에 위치된 데이터를 변경할 수 없다). 따라서 이들 메모리 영역에 대한 STORE 명령은 존재하지 않는다. 일 실시예에서, 메모리의 전용 영역은 판독/기록용이다. 이와 같이 해당 메모리 영역에 대한 저장 명령이 존재한다(예컨대, STORE PRVT [(A*B+C)]).
다양한 실시예에서, 각 가상 프로세서는 정수, 부동 소수점 또는 고정 소수점 값을 포함할 수 있는 범용 레지스터를 포함한다. 또한, 범용 레지스터는 8, 16 또는 32 비트 값과 같은 구성 가능한 비트 폭의 데이터 값을 포함할 수 있다. 따라서, 입력 어레이 또는 출력 어레이의 각 픽셀 위치에서의 이미지 데이터는 8, 16 또는 32 비트의 데이터 크기를 가질 수 있다. 여기서, 가상 프로세서는 범용 레지스터 내의 값의 비트 크기 및 숫자 포멧을 설정하는 실행 모드로 구성될 수 있다. 명령들은 즉치 오퍼랜드를 지정할 수도 있다(이들은 입력 값이 지정된 레지스터에서 발견되는 것이 아니라 명령 자체에서 직접 표현되는 입력 오퍼랜드임). 즉치 오퍼랜드들은 구성 가능한 8, 16 또는 32 비트 폭을 가질 수도 있다.
확장된 실시예에서, 각 가상 프로세서는 스칼라 모드 또는 자체 내부의 SIMD 모드로도 동작할 수 있다. 즉, 특정 어레이 위치 내의 데이터는 스칼라 값 또는 다수의 요소를 갖는 벡터로 간주될 수 있다. 예를 들어, 제1 구성은 각 이미지 어레이 위치가 스칼라 8비트 값을 유지하는 8비트의 스칼라 연산을 설정할 수 있다. 반대로, 다른 구성은 32비트의 병렬/SIMD 연산을 설정할 수 있으며, 여기서 각 이미지 어레이 위치는 어레이 위치 당 32비트의 총 데이터 크기에 대해 4개의 8비트 값을 유지한다고 가정한다.
다양한 실시예들에서, 각 가상 프로세서는 또한 술어(predicate) 값들을 유지하기 위한 레지스터들을 포함한다. 단일 술어 값은 종종 길이가 1비트에 불과하며 기존 데이터에 대해 참/거짓 또는 보다 큰/보다 작은(greater than/less than) 테스트를 수행하는 오피코드의 결과를 나타낸다. 예를 들어, 실행 중에 코드를 통한 분기 방향을 결정하기 위해(즉, 조건부 분기 명령들에서 오피코드로 사용되는) 술어 값들이 사용된다. 술어 값들은 명령에서 즉치 오퍼랜드로 표현될 수도 있다.
다양한 실시예에서, 각 가상 프로세서는 스칼라 값들을 유지하기 위한 레지스터들을 포함한다. 여기서, 스칼라 값들은 (도 4c와 관련하여 상술한 바와 같이) 상수에 대해 예약된 메모리 모델의 파티션 공간에 저장되고 이로부터 판독된다. 여기서, 동일한 이미지를 처리하는 가상 프로세서 그룹의 각 가상 프로세서는 상수 메모리 공간에서 동일한 스칼라 값을 사용한다. 확장된 실시예에서, 스칼라 술어들이 또한 존재한다. 이들은 술어 및 스칼라 모두의 정의를 충족시키는 레지스터 공간에 보존되는 값들이다.
다양한 실시예에서, 각 가상 프로세서는 지원되는 산술 명령 오피코드들이 다음과 같은 임의의 실행 가능한 조합을 포함하는 RISC 유사 명령 세트로서 설계된다. 즉, 명령 세트는 1) ADD(오퍼랜드 A와 B의 가산); 2) SUB(오퍼랜드 A와 B의 감산); 3) MOV(하나의 레지스터에서 다른 레지스터로 오퍼랜드 이동); 4) MUL(오퍼랜드 A와 B 승산); 5) MAD(오퍼랜드 A와 B를 승산하고 그 결과에 C를 가산); 6) ABS(오퍼랜드 A의 절대값 리턴); 7) DIV(오퍼랜드 A를 오퍼랜드 B로 제산); 8) SHL(오퍼랜드 A를 왼쪽으로 시프트); 9) SHR(오퍼랜드 A를 오른쪽으로 시프트); 10) MIN/MAX(오퍼랜드 A와 B중 어느 것이 더 큰지를 리턴); 11) SEL(오퍼랜드 A의 특정 바이트 선택); 12) AND(오퍼랜드 A와 B의 논리 AND를 리턴). 13) OR(오퍼랜드 A와 B의 논리 OR을 리턴). 14) XOR(오퍼랜드 A와 B의 논리 배타적 OR을 리턴). 15) NOT(오퍼랜드 A의 논리 역을 리턴)을 포함한다.
상기 명령 세트는 또한 다음과 같은 표준 술어 연산들을 포함한다: 1) SEQ(A가 B와 같으면 1을 리턴); 2) SNE(A가 B와 같지 않으면 1을 리턴); 3) SLT(A가 B보다 작으면 1을 리턴); 4) SLE(A가 B보다 작거나 같으면 1을 리턴). 오퍼랜드로서 공칭 변수들 또는 술어들을 포함할 수 있는 JMP(jump) 및 BRANCH와 같은 제어 흐름 명령들도 포함된다.
d. 애플리케이션 소프트웨어 개발 및 시뮬레이션 환경
도 6은 애플리케이션 소프트웨어 개발 및 시뮬레이션 환경(601)을 도시한다. 도 2와 관련하여 위에서 논의된 바와같이, 개발자는 의도된 전체적인 이미지 변환과 일치하는 전략적 순서로 커널들을 배열함으로써 포괄적인 이미지 프로세싱 기능(예컨대, 파이프 라인의 각 스테이지가 전용 이미지 프로세싱 태스크, 일부 다른 DAG에서 지정한 루틴 세트 등을 수행하는 이미지 프로세싱 파이프 라인)을 개발할 수 있다. 커널들은 라이브러리(602)로부터 호출될 수 있고 및/또는 개발자는 하나 이상의 커스텀 커널을 개발할 수 있다.
라이브러리(602) 내의 커널들은 커널들의 제3자 벤더 및/또는 임의의 기본 기술(예를 들어, 타겟팅된 하드웨어 이미지 프로세서 또는 타겟팅된 하드웨어 이미지 프로세서의 밴더, 예컨대, 그것의 설계 또는 실제 하드웨어로서 제공되는를 포함하는 하드웨어 프랫폼의 벤더)의 제공자에 의해 제공될 수 있다.
커스텀 개발된 커널들의 경우에, 많은 경우 개발자는 단일 스레드(603)에 대한 프로그램 코드만을 작성할 필요가 있다. 즉, 개발자는 출력 픽셀 위치에 대한 입력 픽셀 값들을 참조하여 (예를 들어, 전술한 위치 관련 메모리 액세스 명령 포멧으로) 단일 출력 픽셀 값을 결정하는 프로그램 코드만을 작성할 필요가 있다. 단일 스레드(603)의 동작을 만족하면, 개발 환경은 각각의 가상 프로세서상에서 스레드 코드의 다수의 인스턴스를 자동으로 인스턴스화하여 이미지 표면 영역에서 동작하는 프로세서의 어레이에서 커널을 실행한다. 상기 이미지 표면 영역은 (라인 그룹과 같은) 이미지 프레임의 섹션일 수 있다.
다양한 실시예에서, 커스텀 스레드 프로그램 코드는 가상 프로세서 ISA의 오브젝트 코드(또는 가상 프로세서 ISA 오브젝트 코드로 컴파일되는 상위 수준 언어)로 작성된다. 커스텀 커널의 프로그램 코드의 실행 시뮬레이션은 메모리 모델에 따라 구성된 메모리에 액세스하는 가상 프로세서를 포함하는 시뮬레이트된 런타임 환경에서 수행될 수 있다. 여기서, 가상 프로세서(604)의 소프트웨어 모델(객체 지향 또는 기타) 및 상기 모델을 통합하는 메모리(605)가 인스턴트화된다.
그런 다음 가상 프로세서 모델(604)은 스레드 코드(603)의 실행을 시뮬레이팅한다. 스레드의 성능, 더 큰 커널 및 커널이 속한 임의의 더 큰 기능을 만족하면, 전체는 기본 하드웨어의 실제 오브젝트 코드로 컴파일된다. 시뮬레이션 환경(601) 전체는 컴퓨터 시스템(예컨대, 워크 스테이션)(606)상에서 실행되는 소프트웨어로서 구현될 수 있다.
2.0 하드웨어 아키텍처 실시예
a. 이미지 프로세서 하드웨어 아키텍처 및 운영
도 7은 하드웨어로 구현된 이미지 프로세서를 위한 아키텍처(700)의 일 실시예를 나타낸다. 이미지 프로세서는, 예를 들어, 시뮬레이션된 환경 내의 가상 프로세서용으로 작성된 프로그램 코드를 하드웨어 프로세서에 의해 실제로 실행되는 프로그램 코드로 변환하는 컴파일러에 의해 타켓팅될 수 있다. 도 7에서 관찰되는 바와 같이, 아키텍처(700)는 네트워크(예컨대, 온 칩 스위치 네트워크, 온 칩 링 네트워크 또는 다른 종류의 네트워크를 포함하는 네트워크 온 칩(NOC)를 통해 복수의 스텐실 프로세서 유닛(702_1~702_N)(이하 "스텐실 프로세서", 스텐실 프로세서 유닛" 등) 및 대응하는 시트 생성기 유닛들(703_1~703_N)(이하 "시트 생성기", "시트 생성기 유닛" 등)에 상호 연결된 복수의 라인 버퍼 유닛(701_1~701_M)(이하 "라인 버퍼", "라인 버퍼 유닛" 등)을 포함한다. 일 실시예에서, 임의의 라인 버퍼 유닛은 네트워크(704)를 통해 임의의 시트 생성기 및 대응하는 스텐실 프로세서에 접속할 수 있다.
일 실시예에서, 프로그램 코드는 소프트웨어 개발자에 의해 앞서 정의된 이미지 프로세싱 동작을 수행하도록 컴파일되어 대응하는 스텐실 프로세서(702) 상에 로딩된다(프로그램 코드는 예를 들어, 설계 및 구현에 따라 스텐실 프로세서의 관련 시트 생성기(703) 상에 로딩될 수 있도 있다). 적어도 일부의 경우에서 이미지 프로세싱 파이프라인은 제1 파이프 라인 스테이지에 대한 제1 커널 프로그램을 제1 스텐실 프로세서(702_1)에 로딩하고, 제2 파이프 라인 스테이지에 대한 제2 커널 프로그램을 제2 스텐실 프로세서(702_2) 등에 로딩함으로써 실현될 수 있으며, 여기서 제1 커널은 파이프 라인의 제1 스테이지의 기능을 수행하고, 제2 커널은 파이프 라인의 제 2 스테이지의 기능을 수행하며, 추가의 제어 플로우 방법이 파이프 라인의 한 스테이지로부터의 파이프라인의 다음 스테이지로 출력 이미지 데이터를 전달하기 위해 설치된다.
다른 구성들에서, 이미지 프로세서는 동일한 커널 프로그램 코드를 동작시키는 2개 이상의 스텐실 프로세서(702_1, 702_2)를 갖는 병렬 머신으로서 구현될 수 있다. 예를 들어, 고밀도 및 고 데이터 레이트 스트림의 이미지 데이터는 각각이 동일한 기능을 수행하는 다수의 스텐실 프로세서를 통해 프레임들을 확산시킴으로써 처리될 수 있다.
또 다른 구성들에서, 기본적으로 모든 커널의 DAG는 각각의 스텐실 프로세서를 그들 자신의 각각의 프로그램 코드의 커널로 구성하고, DAG 설계에서 하나의 커널로부터의 출력 이미지를 다음 커널의 입력으로 지정하기 위하여 하드웨어에 적절한 제어 플로우 훅(hooks)을 구성함으로써 하드웨어 프로세서상에 로딩될 수 있다.
일반적인 플로우로서, 이미지 데이터의 프레임은 매크로 I/O 유닛(705)에 의해 수신되어, 프레임 단위(frame-by-frame basis)로 하나 이상의 라인 버퍼 유닛(701)으로 전달된다. 특정 라인 버퍼 유닛은 이미지 데이터의 프레임을 "라인 그룹"이라 불리는 더 작은 이미지 데이터 영역으로 파싱한 다음, 해당 라인 그룹을 네트워크(704)를 통해 특정 시트 생성기로 전달한다. 완전한 또는 "전체(full)" 단일 라인 그룹은, 예를 들어, 프레임의 다수의 연속적인 완전한 행 또는 열의 데이터로 구성될 수 있다(간결성을 위해, 본 명세서는 주로 연속적인 행을 지칭할 것이다). 시트 생성기는 이미지 데이터의 라인 그룹을 "시트"라고 하는 더 작은 이미지 데이터 영역으로 파싱하여 해당 시트를 대응하는 스텐실 프로세서에 제공한다.
단일 입력을 갖는 이미지 프로세싱 파이프 라인 또는 DAG 플로우의 경우에, 일반적으로, 입력 프레임은 이미지 데이터를 라인 그룹으로 파싱하고 해당 라인 그룹을 대응하는 스텐실 프로세서(702_1)가 파이프 라인/DAG에서 제1 커널의 코드를 실행하고 있는 시트 생성기(703_1)로 향하게 하는 동일한 라인 버퍼 유닛(701_1)으로 보내진다. 스텐실 프로세서(702_1)에 의한 라인 그룹들상의 연산이 완료되면, 시트 생성기(703_1)는 출력 라인 그룹들을 "다운 스트림" 라인 버퍼 유닛(701_2)으로 보낸다(일부 사용예에서, 출력 라인 그룹은 이전에 입력 라인 그룹을 보낸 동일한 라인 버퍼 유닛(701_1)으로 회신될 수 있다).
그런 다음 자신의 각각의 다른 시트 생성기 및 스텐실 프로세서(예컨대, 시트 생성기(703_2) 및 스텐실 프로세서(702_2))에서 실행중인 파이프 라인/DAG의 다음 스테이지/연산을 나타내는 하나 이상의 "소비자" 커널은 다운스트림 라인 버퍼 유닛 (701_2)로부터 제1 스텐실 프로세서(702_1)에서 생성된 이미지 데이터를 수신한다. 이런 방식으로, 제1 스텐실 프로세서에서 동작하는 "생산자" 커널은 제2 스텐실 프로세서에서 동작하는 "소비자" 커널로 전달되는 출력 데이터를 가지며, 여기서 소비자 커널은 생산자 커널이 전체 파이프 라인 또는 DAG 설계와 일관성을 유지한 이후에 다음 태스크 세트를 수행한다.
스텐실 프로세서(702)는 이미지 데이터의 다수의 중첩 스텐실상에서 동시에 동작하도록 설계된다. 스텐실 프로세서의 다수의 중첩 스텐실 및 내부 하드웨어 프로세싱 용량은 시트의 크기를 효과적으로 결정한다. 여기서, 스텐실 프로세서(702) 내에서, 실행 레인 어레이들은 다수의 중첩 스텐실에 의해 커버되는 이미지 데이터 표면 영역을 동시에 처리하도록 조화롭게 동작한다.
아래에서 보다 상세히 설명되는 바와 같이, 다양한 실시예에서, 이미지 데이터의 시트들은 스텐실 프로세서(702) 내의 2차원 레지스터 어레이 구조에 로딩된다. 시트들 및 2차원 레지스터 어레이 구조의 사용은, 예를 들어 실행 레인 어레이에 의해 그 직후에 데이터에 대해 직접적으로 수행되는 프로세싱 태스크들을 갖는 단일 로드 연산과 같이, 대량의 레지스터 공간으로 많은 양의 데이터를 이동시킴으로써 전력 소비 개선을 효과적으로 제공하는 것으로 믿어진다. 또한 실행 레인 어레이와 해당 레지스터 어레이의 사용은 용이하게 프로그래밍/구성할 수 있는 상이한 스텐실 크기를 제공한다.
도 8a 내지 도 8e는 라인 버퍼 유닛(701)의 파싱 동작(activity), 시트 생성기 유닛(703)의 더 세분화된(finer grained)의 파싱 동작뿐만 아니라 시트 생성기 유닛(703)에 결합된 스텐실 프로세서(702)의 스텐실 프로세싱 동작의 높은 수준의 실시예를 도시한다.
도 8a는 이미지 데이터(801)의 입력 프레임의 실시예를 도시한다. 도 8a는 또한 스텐실 프로세서가 동작하도록 설계된 3개의 중첩 스텐실(802)(각 스텐실은 3×3 픽셀 치수를 갖음)의 윤곽을 도시한다. 각 스텐실이 각각 출력 이미지 데이터를 생성하는 출력 픽셀은 검정색으로 강조 표시된다. 간략화를 위해, 3개의 중첩 스텐실(802)은 수직 방향으로만 중첩된 것으로 묘사된다. 실제로 스텐실 프로세서는 수직 및 수평 방향 모두에서 중첩 스텐실들을 갖도록 설계될 수 있음을 인식하는 것이 타당하다.
스텐실 프로세서 내의 수직 중첩 스텐실(802) 때문에, 도 8a에 도시된 바와 같이, 단일 스텐실 프로세서가 동작할 수 있는 넓은 범위(wide band)의 이미지 데이터가 프레임 내에 존재한다. 아래에서 보다 상세히 설명되는 바와 같이, 일 실시예에서, 스텐실 프로세서들은 이미지 데이터를 가로질러 좌측에서 우측 방식으로 그들의 중첩 스텐실 내의 데이터를 처리한다(그리고 나서 다음 라인들의 세트에 대해 위에서 아래 순서로 반복한다). 따라서, 스텐실 프로세서들이 동작하면서 앞으로 진행함에 따라, 검정색 출력 픽셀 블록들의 수는 수평 방향으로 오른쪽으로 증가할 것이다. 전술한 바와 같이, 라인 버퍼 유닛(701)은 스텐실 프로세서가 확장된 수의 다가올 사이클 동안 동작하기에 충분한 입력 프레임(incoming frame)으로부터 입력 이미지 데이터의 라인 그룹을 파싱하는 역할을 한다. 라인 그룹의 예시적인 묘사는 음영 영역(803)으로 도시되어 있다. 일 실시예에서, 이하에서 더 설명되는 바와같이, 라인 버퍼 유닛(701)은 시트 생성기로 또는 시트 생성기로부터 라인 그룹을 송신/수신하기 위해 다양한 역동성(dynamics)을 이해할 수 있다. 예를 들어, "전체 그룹(full group)"으로 지칭되는 하나의 모드에 따르면, 이미지 데이터의 완전한 전체 폭의 라인들은 라인 버퍼 유닛과 시트 생성기 사이에서 전달된다. "가상 높이(virtually tall)"라고 지칭되는 두 번째 모드에 따르면, 라인 그룹은 처음에는 전체 폭 행들의 서브 세트와 함께 전달된다. 그런 다음 나머지 행들은 순차적으로 더 작은(전체 폭보다 작은) 조각들(pieces)로 전달된다.
라인 버퍼 유닛에 의해 정의되고 시트 생성기 유닛으로 전달된 입력 이미지 데이터의 라인 그룹(803)에 의해, 시트 생성기 유닛은 라인 그룹을 스텐실 프로세서의 하드웨어 제한에 보다 정확하게 부합되는 보다 미세한 시트로 파싱한다. 보다 상세하게는, 이하에 더욱 상세히 설명하는 바와 같이, 일 실시예에서, 각 스텐실 프로세서는 2차원 시프트 레지스터 어레이로 구성된다. 2차원 시프트 레지스터 어레이는 기본적으로 이미지 데이터를 실행 레인들의 어레이 "아래(beneath)"로 시프트시키며, 여기서 시프팅 패턴은 각 실행 레인이 각각의 스텐실 내의 데이터에 대해 동작하게 한다(즉, 각 실행 레인은 자체 스텐실 정보를 처리하여 해당 스텐실에 대한 출력을 생성한다). 일 실시예에서, 시트들은 2차원 시프트 레지스터 어레이에 "채워(fill)"지거나 2차원 시프트 레지스터 어레이에 로딩되는 입력 이미지 데이터의 표면 영역이다.
따라서, 도 8b에서 관찰되는 바와 같이, 시트 생성기는 라인 그룹(803)으로부터 초기 시트(804)를 파싱하여 이를 스텐실 프로세서로 제공한다(여기서, 데이터 시트는 일반적으로 참조 번호(804)로 식별되는 5×5의 음영 영역에 해당한다). 도 8c 및 도 8d에서 관찰되는 바와 같이, 스텐실 프로세서는 시트에 대해 좌측에서 우측 방식으로 중첩 스텐실(802)을 효과적으로 이동시킴으로써 입력 이미지 데이터 시트에 대해 동작한다. 도 8d에 도시된 바와 같이, 시트 내의 데이터로부터 출력값을 계산할 수 있는 픽셀의 수(암화된 3×3 어레이 내의 9개)는 소진(exhausted)된다(다른 픽셀 위치는 시트내의 정보로부터 결정된 출력값을 가질 수 없다). 단순화를 위해 이미지의 경계 영역은 무시되었다.
도 8e에서 관찰되는 바와 같이, 시트 발생기는 스텐실 프로세서가 연산을 계속하도록 다음 시트(805)를 제공한다. 스텐실들이 다음 시트상에서 동작하기 시작할 때 스텐실의 초기 위치는(도 8d에서 이전에 도시된 바와 같이) 첫 번째 시트상의 소진 지점에서 우측으로의 다음 진행(progression)이다. 새로운 시트(805)를 사용하여, 스텐실 프로세서가 첫 번째 시트의 처리와 동일한 방식으로 새로운 시트상에서 동작함에 따라 스텐실들은 오른쪽으로 계속 이동할 것이다.
출력 픽셀 위치를 둘러싸는 스텐실들의 경계 영역들 때문에 제1 시트(804)의 데이터와 제2 시트(805)의 데이터 사이에 약간의 중첩이 있음에 유의한다. 상기 중첩은 충첩 데이터를 두 번 재전송하는 시트 생성기에 의해 간단히 처리될 수 있다. 다른 구현예에서, 스텐실 프로세서에 다음 시트를 공급하기 위해, 시트 생성기는 새로운 데이터를 스텐실 프로세서로 전송하고, 스텐실 프로세서는 이전 시트로부터의 중첩 데이터를 재사용할 수 있다.
b. 스텐실 프로세서 설계 및 운영
도 9a는 스텐실 프로세서 유닛 아키텍처(900)의 실시예를 도시한다. 도 9a에서 관찰되는 바와 같이, 스텐실 프로세서는 데이터 계산 유닛(901), 스칼라 프로세서(902) 및 관련 메모리(903) 및 I/O 유닛(904)을 포함한다. 데이터 계산 유닛(901)은 실행 레인 어레이(905), 2차원 시프트 어레이 구조(906) 및 어레이의 특정 행들 또는 열들과 관련된 각각의 개별 랜덤 액세스 메모리들(907)을 포함한다.
I/O 유닛(904)은 시트 생성기로부터 수신된 데이터의 "입력" 시트들을 데이터 계산 유닛(901)으로 로딩하고, 스텐실 프로세서로부터 데이터의 "출력" 시트들을 시트 생성기에 저장하는 역할을 한다. 일 실시예에서, 시트 데이터를 데이터 계산 유닛(901)에 로딩하는 것은, 수신된 시트를 이미지 데이터의 행/열로 파싱하는 것 및 이미지 데이터의 행/열을 2차원 시프트 레지스터 구조(906) 또는 (아래에서 보다 상세히 기술된) 실행 레인 어레이의 행/열의 각각의 랜덤 액세스 메모리(907)로 로딩하는 것을 수반한다. 만약 시트가 메모리들(907)에 처음 로딩되면, 실행 레인 어레이(905) 내의 개별 실행 레인들은 적절할 때 랜덤 억세스 메모리들(907)로부터 시트 데이터를 2차원 시프트 레지스터 구조(906)에 로딩할 수 있다(예컨대, 시트 데이터에 대한 연산 바로 전의 로드 명령으로서). (시트 발생기로부터 또는 메모리들(907)로부터 직접적으로) 레지스터 구조(906)로 데이터 시트의 로딩이 완료되면, 실행 레인 어레이(905)의 실행 레인들은 데이터에 대해 동작하여, 최종적으로 직접 되돌려 보내는 시트로서 최종 데이터를 시트 생성기로 또는 랜덤 억세스 메모리들(907)에 "라이트 백(write back)한다. 만약 실행 레인들이 랜덤 억세스 메모리들(907)에 다시 기록(라이트 백)되면, I/O 유닛(904)은 랜덤 억세스 메모리들(907)로부터 데이터를 인출(fetch)하여 출력 시트를 형성하고, 형성된 출력 시트는 시트 생성기로 전달된다.
스칼라 프로세서(902)는 스칼라 메모리(903)로부터 스텐실 프로세서의 프로그램 코드의 명령들을 판독하여 해당 명령들을 실행 레인 어레이(905)의 실행 레인들에 발행하는 프로그램 컨트롤러(909)를 포함한다. 일 실시예에서, 단일의 동일 명령은 어레이(905) 내의 모든 실행 레인들로 브로드캐스트되어 데이터 계산 유닛(901)으로부터 단일 명령 다중 데이터(SIMD : single instruction multiple data)) 유사 동작(behavior)을 수행한다. 일 실시예에서, 스칼라 메모리(903)로부터 판독되고 실행 레인 어레이(905)의 실행 레인들로 발행되는 명령들의 명령 포맷은 명령 당 하나 이상의 오피코드를 포함하는 VLIW(very-long-instruction-word) 타입 포맷을 포함한다. 추가 실시예에서, VLIW 포맷은 각 실행 레인의 ALU에 의해 수행되는 수학적 기능을 지시하는 ALU 오피코드(아래에 개시된 바와같이, 일 실시예에서, 하나 이상의 종래의 ALU 연산을 지정할 수 있는) 및 메모리 오피코드(특정 실행 레인 또는 실행 레인 세트에 대해 메모리 연산을 지시하는)를 포함한다.
"실행 레인"이라는 용어는 명령(예컨대, 명령을 실행할 수 있는 논리 회로)을 실행할 수 있는 하나 이상의 실행 유닛들의 세트를 지칭한다. 실행 레인은, 다양한 실시예에서, 그러나 단지 실행 유닛 이상의 프로세서-유사 기능을 더 많이 포함할 수 있다. 예를 들어, 하나 이상의 실행 유닛 외에, 실행 레인은 수신된 명령을 디코딩하는 논리 회로, 또는 더 많은 다중 명령 다중 데이터(MIMD) 형 설계의 경우 명령을 인출(fetch) 및 디코드하는 논리 회로를 또한 포함할 수 있다. MIMD형 접근법과 관련하여, 비록 중앙 집중식 프로그램 제어 접근법이 본 명세서에 대부분 기술되었지만, 보다 분산된 접근법이 (예를 들어, 프로그램 코드 및 어레이(905)의 각 실행 레인 내의 프로그램 제어기를 포함하는) 다양한 대안적인 실시예들에서 구현될 수 있다.
실행 레인 어레이(905), 프로그램 콘트롤러(909) 및 2차원 시프트 레지스터 구조(906)의 조합은 광범위한 프로그램 가능 기능들을 위해 광범위하게 적응/구성 가능한 하드웨어 플랫폼을 제공한다. 예를 들어, 애플리케이션 소프트웨어 개발자는 개별 실행 레인이 다양한 기능을 수행할 수 있고 임의의 출력 어레이 위치에 근접한 입력 이미지 데이터에 용이하게 액세스할 수 있다는 점에서 주어진 치수(예컨대, 스텐실 크기)뿐만 아니라 넓은 범위의 상이한 기능적 성능(capability)을 갖는 커널들을 프로그래밍할 수 있다.
실행 레인 어레이(905)에 의해 동작되는 이미지 데이터에 대한 데이터 저장소로서 동작하는 것 외에, 랜덤 액세스 메모리(907)는 섹션 1.0에서 상술한 가상 프로세싱 메모리의 룩-업 테이블 구성요소에 보유되는 임의의 룩-업 테이블들과 같은 하나 이상의 룩-업 테이블을 또한 유지할 수 있다. 다양한 실시예에서, 하나 이상의 스칼라 룩-업 테이블이 또한 스칼라 메모리(903) 내에 인스턴스화될 수 있다. 하나 이상의 스칼라 룩-업 테이블은 섹션 1.0에서 상술한 메모리 모델의 스칼라 록-업 테이블 구성요소에 보유되는 스칼라 룩-업 테이블일 수 있다.
스칼라 룩-업은 동일한 인덱스로부터 동일한 룩-업 테이블의 동일한 데이터 값을 실행 레인 어레이(905) 내의 각 실행 레인에 전달하는 것을 포함한다. 다양한 실시예에서, 전술한 VLIW 명령 포맷은 또한 스칼라 프로세서에 의해 수행되는 룩-업 연산을 스칼라 룩-업 테이블로 향하게 하는 스칼라 오피코드를 포함하도록 확장된다. 오피코드와 함께 사용하도록 지정된 인덱스는 즉치 오퍼랜드(immediate operand)이거나 몇몇 다른 데이터 저장 위치로부터 인출될 수 있다. 그럼에도 불구하고, 일 실시예에서, 스칼라 메모리 내의 스칼라 룩-업 테이블로부터의 룩업은 본질적으로 동일한 클럭 사이클 동안 실행 레인 어레이(905) 내의 모든 실행 레인에 동일한 데이터 값을 브로드캐스트하는 것을 포함한다. 룩-업 테이블의 사용 및 동작에 관한 추가 세부 사항은 아래에 제공된다.
도 9b는 전술한 VLIW 명령 워드 실시예(들)을 요약한 것이다. 도 9b에서 관찰되는 바와 같이, VLIW 명령 워드 포맷은 3개의 개별 명령 즉, 1) 스칼라 프로세서에 의해 실행되는 스칼라 명령(951), 2) 실행 레인 어레이 내의 각각의 ALU에 의해 SIMD 방식으로 브로드캐스트되고 실행되는 ALU 명령(952) 및 3) 부분적인 SIMD 방식으로 브로드캐스트되고 실행되는 메모리 명령(953)(예컨대, 실행 레인 어레이의 동일한 행을 따르는 실행 레인들이 동일한 랜덤 액세스 메모리를 공유하는 경우, 상이한 행들 각각으로부터 하나의 실행 레인이 실제로 명령을 실행한다(메모리 명령(953)의 포맷은 각 행으로부터 어느 실행 레인이 명령을 실행하는지를 식별하는 오퍼랜드를 포함할 수 있음)에 대한 필드들을 포함한다.
하나 이상의 즉치 오퍼랜드에 대한 필드(954)가 또한 포함된다. 명령들(951, 952, 953) 중 어떤 것이 명령 포멧에서 식별될 수 있는 어떤 즉치 오퍼랜드 정보를 사용한다. 명령들(951, 952, 953) 각각은 또한 그 자신의 각각의 입력 오퍼랜드 및 결과 정보(resultant information)(예를 들어, ALU 연산들을 위한 로컬 레지스터들 과 메모리 액세스 명령들을 위한 로컬 레지스터 및 메모리 어드레스)를 포함한다. 일 실시예에서, 스칼라 명령(951)은 실행 레인 어레이 내의 실행 레인들이 다른 두 명령(952, 953) 중 하나를 실행하기 전에 스칼라 프로세서에 의해 실행된다. 즉, VLIW 워드의 실행은 스칼라 명령(951)이 실행되는 제1 사이클을 포함하고, 다른 명령들(952, 953)과 함께 제2 사이클에서 실행될 수 있다(다양한 실시예들에서 명령들(952 및 953)은 병렬로 실행될 수 있음).
일 실시예에서, 스칼라 프로세서(902)에 의해 실행되는 스칼라 명령들은 메모리들 또는 데이터 계산 유닛(901)의 2D 시프트 레지스터(906)로부터 시트들을 로드/저장하기 위해 시트 생성기(703)로 발행되는 명령들을 포함한다. 여기서, 시트 생성기의 동작은 라인 버퍼 유닛(701)의 동작 또는 시트 생성기(703)가 스칼라 프로세서(902)에 의해 발행된 임의의 명령을 완료하는데 걸리는 사이클 수의 사전 실행 시간(pre-runtime) 이해를 방해하는 다른 변수들에 의존할 수 있다. 이와 같이, 일 실시예에서, 스칼라 명령(951)이 시트 생성기(703)로 명령을 발행하거나 명령을 발행하게 하는 임의의 VLIW 워드는 또한 다른 두 명령 필드(952, 953)에 무 연산 (NOOP:no-operation) 명령을 포함한다. 그 후, 프로그램 코드는 시트 생성기가 데이터 계산 유닛으로/로부터 로드/저장을 완료할 때까지 명령 필드(952, 953)에 대한 NOOP 명령 루프를 입력한다. 여기서, 시트 생성기에 명령을 발행할 때, 스칼라 프로세서는 명령 완료시에 시트 생성기가 리셋하는 인터락(interlock) 레지스터의 비트를 설정할 수 있다. NOOP 루프 동안 스칼라 프로세서는 인터락 레지스터의 비트를 모니터링한다. 스칼라 프로세서가 상기 시트 생성기가 명령을 완료했음을 감지하면 정상(normal) 실행이 다시 시작된다.
도 10는 데이터 계산 유닛(1001)의 실시예를 도시한다. 도 10에서 관찰되는 바와 같이, 데이터 계산 유닛(1001)은 2차원 시프트 레지스터 어레이 구조(1006)의 "위(above)"에 논리적으로 위치되는 실행 레인 어레이(1005)를 포함한다. 상술한 바와 같이, 다양한 실시예에서, 시트 생성기에 의해 제공되는 이미지 데이터의 시트는 2차원 시프트 레지스터(1006)에 로딩된다. 그런 다음, 실행 레인들은 레지스터 구조(1006)로부터의 시트 데이터에 대해 연산한다.
실행 레인 어레이(1005) 및 시프트 레지스터 구조(1006)는 서로에 대해 상대적인 위치에 고정된다. 그러나, 시프트 레지스터 어레이(1006) 내의 데이터는 전략적으로 조정된 방식으로 시프트되어, 실행 레인 어레이의 각 실행 레인이 데이터 내의 상이한 스텐실을 처리하게 한다. 이와같이, 각 실행 레인은 생성되는 출력 시트내의 상이한 픽셀에 대한 출력 이미지 값을 결정한다. 도 10의 아키텍처로부터, 중첩 스텐실은 실행 레인 어레이(1005)가 수직으로 인접한 실행 레인들뿐만 아니라 수평으로 인접한 실행 레인들을 포함하므로 수직으로 배열될 뿐만 아니라 수평으로 배열될 수 있음이 명확해야 한다.
데이터 계산 유닛(1001)의 일부 주목할 만한 구조적 특징은 실행 레인 어레이(1005)보다 넓은 치수를 갖는 시프트 레지스터 구조(1006)를 포함한다. 즉, 실행 레인 어레이(1005) 외부에 레지스터들의 "할로(halo)"(1009)가 있다. 할로(1009)는 실행 레인 어레이의 양측에 존재하는 것으로 도시되어 있지만, 구현예에 따라, 할로는 실행 레인 어레이(1005)의 보다 적은(1개) 또는 그 이상(3 또는 4개)의 측면상에 존재할 수 있다. 할로(1005)는 데이터가 실행 레인들(1005)의 "아래"로 시프트됨에 따라 실행 레인 어레이(1005)의 경계들 외부로 유출(spill)되는 데이터에 대해 "스필-오버(spill-over)" 공간을 제공하는 역할을 한다. 간단한 경우로서, 실행 레인 어레이(1005)의 우측 에지를 중심으로 하는 5×5 스텐실은 스텐실의 가장 왼쪽 픽셀들이 처리될 때 우측으로 4개의 할로 레지스터 위치를 필요로 할 것이다. 도면의 간략화를 위해, 도 10은, 명목상의 실시예에서, 양측(우측, 하측)에 있는 레지스터가 수평 및 수직 연결을 모두 가질 때 수평 시프트 연결들만을 갖는 할로의 우측 레지스터들과 수직 시프트 연결들만을 갖는 할로의 하측 레지스터들을 도시한다.
추가의 스필-오버 공간(room)은 어레이의 각 행 및/또는 각 열 또는 그 일부들에 결합(couple)되는 랜덤 액세스 메모리(1007)들에 의해 제공된다(예를 들어, 랜덤 액세스 메모리는 4개의 실행 레인 행 및 2개의 실행 레인 열에 걸쳐 있는 실행 레인 어레이의 "영역(region)"에 할당될 수 있다. 간략화를 위해, 나머지 애플리케이션은 주로 행 및/또는 열 기반 할당 방식(schemes)을 참조할 것이다). 여기서, 실행 레인의 커널 동작이 2차원 시프트 레지스터 어레이(1006)(일부 이미지 처리 루틴에 필요할 수 있는) 외부의 픽셀 값들을 처리하도록 요구하는 경우, 이미지 데이터의 평면은 예를 들어 할로 영역(1009)으로부터 랜덤 억세스 메모리(1007)로 더 스필-오버할 수 있다. 예를 들어, 하드웨어가 실행 레인 어레이의 우측 에지에 있는 실행 레인 우측에 4개의 저장 요소만 있는 할로 영역을 포함하는 6×6 스텐실을 생각해 보자. 이 경우, 데이터는 스텐실을 완전히 처리하기 위해 할로 영역(1009)의 우측 에지에서 오른쪽으로 더 멀리 시프트되어야 한다. 할로 영역(1009) 외부로 시프트된 데이터는 랜덤 액세스 메모리(1007)로 스필-오버될 것이다. 랜덤 액세스 메모리들(1007) 및 도 3의 스텐실 프로세서의 다른 애플리케이션들이 아래에 더 제공된다.
도 11a 내지 도 11k는 이미지 데이터가 상술한 바와 같이 실행 레인 어레이 "아래"의 2차원 시프트 레지스터 어레이 내에서 시프트되는 방식의 실제 예를 나타낸다. 도 11a에서 관찰되는 바와 같이, 2차원 시프트 어레이의 데이터 컨텐츠는 제1 어레이(1107)에 도시되고, 실행 레인 어레이는 프레임(1105)으로 도시된다. 또한, 실행 레인 어레이 내의 2개의 이웃 실행 레인(1110)이 간략하게 도시되어 있다. 이러한 단순 묘사(1110)에서, 각 실행 레인은 시프트 레지스터로부터 데이터를 받아들이거나, ALU 출력으로부터 데이터를 받아들이거나(예컨대, 사이클들을 통해 누산기로서 동작하는) 또는 출력 데이터를 출력 목적지에 기록할 수 있는 레지스터(R1)를 포함한다.
또한 각 실행 레인은, 로컬 레지스터(R2)에서, 2차원 시프트 어레이의 "아래" 컨텐츠를 이용할 수 있다. 따라서, R1은 실행 레인의 물리 레지스터이고, R2는 2차원 시프트 레지스터 어레이의 물리 레지스터이다. 실행 레인은 R1 및/또는 R2가 제공하는 오퍼랜드들에 대해 동작할 수 있는 ALU를 포함한다. 아래에서 더 상세히 설명되는 바와 같이, 일 실시예에서, 시프트 레지스터는 실제로 어레이 위치 당 다수의("깊이"의) 저장/레지스터 요소들로 구현되지만, 시프팅 활동은 저장 요소들의 하나의 평면으로 제한된다(예를 들어, 저장 요소들의 하나의 평면만 사이클 당 시프트될 수 있음). 도 11a 내지 도 11k는 각각의 실행 레인으로부터 결과(X)를 저장하는데 사용되는 이들 디퍼(deeper) 레지스터 위치들 중 하나를 나타낸다. 설명의 용이함을 위해, 디퍼 결과 레지스터는 그의 상대 레지스터(R2) 아래에 있지 않고 나란히 그려진다.
도 11a 내지 도 11k는 중심 위치가 실행 레인 어레이(1105) 내에 도시된 한 쌍의 실행 레인 위치(1111)와 정렬되는 2개의 스텐실의 계산에 중점을 두고 있다. 예시의 용이함을 위해, 한 쌍의 실행 레인(1110)은 사실상 다음의 예에 따라 이들이 수직 이웃일 때 수평 이웃으로 도시된다.
도 11a에서 처음에 관찰되는 바와 같이, 실행 레인(1111)은 중앙 스텐실 위치에 중심이 맞춰진다. 도 11b는 두 실행 레인(1111)에 의해 실행되는 오브젝트 코드를 도시한다. 도 11b에서 관찰되는 바와 같이, 두 실행 레인(1111)의 프로그램 코드는 시프트 레지스터 어레이(1107) 내의 데이터가 한 위치 아래로 시프트되고 한 위치 우측으로 시프트되게 한다. 이는 두 실행 레인(1111)을 그들 각각의 스텐실의 상부 좌측 모서리에 정렬시킨다. 이후 프로그램 코드는 그들 각각의 위치들에 있는(R2에 있는) 데이터가 R1으로 로딩되게 한다.
도 11c에서 관찰되는 바와 같이, 프로그램 코드는 다음으로 실행 레인 쌍(1111)이 시프트 레지스터 어레이(1107)의 데이터를 좌측으로 1 단위(unit) 시프트시켜 각 실행 레인의 각각의 위치의 우측에 있는 값이 각각의 실행 레인 위치로 시프트되게 한다. 그런 다음 R1의 값(이전 값)은 실행 레인 위치(R2에 있는)로 시프트된 새로운 값에 가산된다. 그 결과는 R1에 기록된다. 도 11d에서 관찰되는 바와 같이, 도 11c에 대해 전술한 것과 동일한 프로세스가 반복되어 결과(R1)가 상부(upper) 실행 레인에 A+B+C 값을 포함하고 하부(lower) 실행 레인에 F+G+H 값을 포함하게 한다. 이 시점에서 두 실행 레인(1111)은 그들의 각각의 스텐실의 상부 행을 처리한다. 실행 레인 어레이(1105)의 좌측에 있는 할로 영역(좌측에 하나가 있는 경우)에 스필-오버를 기록하거나 할로 영역이 실행 레인 어레이(1105)의 좌측에 존재하지 않으면 랜덤 액세스 메모리에 기록한다.
도 11e에서 관찰되는 바와 같이, 다음으로 프로그램 코드는 시프트 레지스터 어레이 내의 데이터를 1 단위 위로 시프트시켜 두 실행 레인(1111)이 각각의 스텐실의 중간 행의 우측 에지와 정렬되게 한다. 두 실행 레인(1111)의 레지스터(R1)는 현재 스텐실의 상측(top) 행과 중간 행의 최우측(rightmost) 값의 합산을 포함한다. 도 11f 및 11g는 두 실행 레인의 스텐실의 중간 행을 가로질러 왼쪽으로 움직이는 계속 진행(continued progress)을 보여준다. 누적 가산은 도 11g의 처리의 끝에서 두 실행 레인(1111)이 각각의 스텐실의 상측 행과 중간 행의 값들의 합산을 포함하도록 계속된다.
도 11h는 각각의 실행 레인을 대응하는 스텐실의 최하위 행과 정렬시키는 다른 시프트를 도시한다. 도 11i 및 도 11j는 두 실행 레인의 스텐실들의 과정을 통해 프로세싱을 완료하기 위한 계속된 시프팅을 나타낸다. 도 11k는 각 실행 레인을 데이터 어레이내의 정확한 위치에 정렬시키고 그에 대한 결과를 기록하기 위한 추가 시프팅을 도시한다.
도 11a 내지 도 1k의 예에서, 시프트 동작을 위한 오브젝트 코드는 (X, Y) 좌표로 표현된 시프트의 방향 및 크기를 식별하는 명령 포맷을 포함할 수 있다. 예를 들어, 한 위치(location) 씩 시프트 업하기 위한 오브젝트 코드는 SHIFT 0, +1과 같은 오브젝트 코드로 표현될 수 있다. 다른 예로서, 한 위치씩 우측으로의 시프트는 SHIFT +1, 0과 같은 오브젝트 코드로 표현될 수 있다. 다양한 실시예에서, 보다 큰 크기의 시프트들이 오브젝트 코드(예컨대, SHIFT 0, + 2)로 지정될 수도 있다. 여기서, 2D 시프트 레지스터 하드웨어가 사이클 당 한 위치씩의 시프트만을 지원하는 경우, 명령은 머신에 의해 다수의 사이클 실행을 요구하도록 해석될 수 있거나 2D 시프트 레지스터 하드웨어가 사이클 당 한 위치 이상씩의 시프트들을 지원하도록 설계될 수 있다. 후술하는 실시예는 이하에서 더 상세히 설명된다.
도 12는 어레이 실행 레인 및 시프트 레지스터 구조에 대한 단위 셀의 다른, 보다 상세한 도면을 도시한다(할로 영역내의 레지스터들은 대응하는 실행 레인을 포함하지 않음). 실행 레인 어레이의 각 위치와 관련된 실행 레인 및 레지스터 공간은, 일 실시예에서, 실행 레인 어레이의 각각의 노드에서 도 12에서 관찰되는 회로를 인스턴스화함으로써 구현된다. 도 12에 도시된 바와 같이, 단위 셀은 4개의 레지스터(R2 내지 R5)로 구성된 레지스터 파일(1202)에 연결된 실행 레인(1201)을 포함한다. 임의의 사이클 동안, 실행 레인(1201)은 임의의 레지스터(R1 내지 R5)로부터 판독하거나 임의의 레지스터(R1 내지 R5)에 기록할 수 있다. 두개의 입력 오퍼랜드가 필요한 명령들의 경우, 실행 레인은 R1 내지 R5중 하나로부터 두 오퍼랜드를 검색할 수 있다.
일 실시예에서, 2차원 시프트 레지스터 구조는 단일 사이클 동안, 레지스터들(R2 내지 R4) 중 어느 하나(단지)의 컨텐츠가 출력 멀티플렉서(1203)를 통해 이웃 레지스터 파일 중 하나로 시프트 "아웃(out)"되도록 허용하고, 그 이웃들이 입력 멀티플렉서들(1204)를 통해 이웃들간의 시프트가 동일한 방향(예컨대, 모든 실행 레인들이 좌측으로 시프트되고, 모든 실행 레인들이 우측으로 시프트되는 등)에 있는경우 레지스터들(R2 내지 R4) 중 하나(단지) 중 어느 하나의 컨텐츠를 대응하는 것으로부터 시프트 "인(in)"된 컨텐츠로 대체함으로써 구현된다. 동일한 레지스터가 그의 컨텐츠를 시프트 아웃하고 동일한 사이클에서 시프트 인되는 컨텐츠로 대체되는 것이 일반적이더라도, 멀티플렉서 배열(1203, 1204)은 동일한 사이클 동안 동일한 레지스터 파일 내에 상이한 시프트 소스 및 시프트 타겟 레지스터들을 허용한다.
도 12에 도시된 바와 같이, 시프트 시퀀스 동안 실행 레인은 그의 레지스터 파일(1202)로부터의 컨텐츠를 좌측, 우측, 상측 및 하측 이웃들 각각으로 시프트시킬 것이다. 동일한 시프트 시퀀스와 공조하여, 실행 레인은 또한 그의 좌측, 우측, 상측 및 하측 이웃들 중 특정 하나로부터의 컨텐츠를 그의 레지스터 파일로 시프트시킬 것이다. 다시, 시프트 아웃 타겟 및 시프트 인 소스는 모든 실행 레인에 대해 동일 시프트 방향과 일치해야 한다(예컨대, 시프트 아웃이 우측 이웃에 대한 것이면, 시프트 인은 좌측 이웃으로부터 있어야 함).
일 실시예에서, 단지 하나의 레지스터의 컨텐츠가 사이클 당 실행 레인 당 시프트되도록 허용되었지만, 다른 실시예들은 하나 이상의 레지스터의 컨텐츠가 시프트 인/아웃되도록 허용할 수 있다. 예를 들어, 도 12에서 관찰된 멀티플렉서 회로(1203, 1204)의 제2 인스턴스가 도 12의 설계에 통합되는 경우, 동일한 사이클 동안 2개의 레지스터의 컨텐츠가 시프트 아웃/인될 수 있다. 물론, 단지 하나의 레지스터의 컨텐츠가 사이클 당 시프프되도록 허용된 실시예에서, 수학 연산들 간의 시프트들에 대해 더 많은 클럭 사이클들을 소비(consuming)함으로써 수학 연산들간에 다수의 레지스터들로부터의 시프트가 일어날 수 있다(예를 들어, 두 레지스터의 컨텐츠는 수학 연산간에 두개의 시프트 연산을 사용하여 수학 연산 사이에서 시프트될 수 있음).
실행 레인의 레지스터 파일들의 모든 컨텐츠보다 적은 컨텐츠가 시프트 시퀀스 동안 시프트 아웃되면, 각 실행 레인의 시프트 아웃되지 않은 레지스터들의 컨텐츠는 그대로 유지된다(시프트하지 않음). 이와 같이, 시프트-인 컨텐츠로 대체되지 않는 비-시프트된 컨텐츠는 시프팅 사이클 전체에서 실행 레인에 국부적으로 유지된다. 각 실행 레인에서 관찰되는 메모리 유닛("M")은 실행 레인 어레이 내의 실행 레인의 행 및/또는 열과 관련된 랜덤 액세스 메모리 공간으로부터/로 데이터를 로드/저장하는데 사용된다. 여기서, M 유닛은 실행 레인의 자체 레지스터 공간으로부터/로 로드/저장할 수 없는 데이터를 로드/저장하는데 종종 사용된다는 점에서 표준 M 유닛의 역할을 한다. 다양한 실시예에서, M 유닛의 주요 동작은 로컬 레지스터로부터의 데이터를 메모리에 기록하고, 메모리로부터 데이터를 판독하여 이를 로컬 레지스터에 기록하는 것이다.
하드웨어 실행 레인(1201)의 ALU 유닛에 의해 지원되는 ISA 오피코드들과 관련하여, 다양한 실시예에서, 하드웨어 ALU에 의해 지원되는 수학적 오피코드는 가상 실행 레인(예컨대, ADD, SUB, MOV, MUL, MAD, ABS, DIV, SHL, SHR, MIN/MAX, SEL, AND, OR, XOR, NOT)에 의해 지원되는 수학적 오피코드들과 통합되어 있다(예컨대, 실질적으로 동일함). 위에서 설명한 바와 같이, 메모리 액세스 명령들은 실행 레인(1201)에 의해 실행되어, 그들의 관련 랜덤 액세스 메모리로부터/로 데이터를 인출/저장한다. 또한 하드웨어 실행 레인(1201)은 2차원 시프트 레지스터 구조 내의 데이터를 시프트하기 위한 시프트 동작 명령(우측, 좌측, 상측, 하측)을 지원한다. 전술한 바와 같이, 프로그램 제어 명령들은 주로 스텐실 프로세서의 스칼라 프로세서에 의해 실행된다.
3.0. 이미지 프로세서상에 구현된 블록 연산
a. 행/열 합 연산
도 13 및 도 14a, 도 14b는 행/열 합(sum) 연산에 관한 것이다. 행/열 연산은 통계 계산, 노이즈 억제 및 대규모 다운-샘플링에 특히 유용하다. 행 합 및/또는 열 합 연산은 전술한 섹션들에서 기술한 이미지 프로세서의 실시예들과 같은 2차원 실행 레인 어레이 및 대응하는 2 차원 시프트 레지스터 어레이를 갖는 이미지 프로세서 상에서 구현될 수 있다.
도 13에서 관찰되는 바와 같이, 행 합 연산은 어레이의 동일한 행에 있는 모든 값을 가산하고, 열 합 연산은 어레이의 동일한 열에 있는 모든 값을 가산한다. 또한, 도시된 바와 같이, 행 합 연산을 사용하면 모든 행의 값이 그들 각각의 행 에서 동시에 가산될 수 있다. 마찬가지로, 열 합 연산을 사용하면 모든 열의 값이 그들 각각의 열에서 동시에 가산될 수 있다. 그러나, 시프트 레지스터 어레이의 다양성 때문에, 모든 행 또는 열에 대한 합계는 필수 사항은 아니다. 즉, 어레이내의 모든 행보다 적은 수가 동시에 합산될 수 있고, 어레이내의 모든 열보다 적은 수가 동시에 합산될 수도 있다.
도 14a 내지 도 14d는 행 합 연산을 구현하기 위한 기계 레벨 연산의 일 실시 예를 도시한다. 간략화를 위해 단지 하나의 행만 도시된다. 독자(reader)는 도 14a 내지 도 14d에 묘사된 연산들이 또한 열에도 적용될 수 있음을 이해할 것이다. 또한, 행 또는 열 동작 모두에 대해, 도 14a 내지 도 14d의 시퀀스는 또한 어레이 내의 다수의 행들 또는 열들에 대해 동시에 수행될 수 있다. 또한, 행의 치수는 8개의 위치 폭(locations wide)으로만 도시된다(실제 구현예에서는 실행 레인 어레이 및 시프트 레지스터 어레이는 16×16 또는 심지어 더 클 수 있음).
일 구현예에서, 도 14a에서 관찰되는 바와 같이, 2차원 시프트 레지스터 어레이는 어레이(1401)의 대향 단부들 사이의 다이렉트 논리 시프트를 지원하도록 설계된다. 즉, 시프트 레지스터는 행 축을 따라 시프트를 수행할 때 최우측 어레이 열과 최좌측 어레이 열 사이에서 컨텐츠를 "롤(roll)" 또는 "루프(loop)"하거나 "래핑(weap)"할 수 있고 및/또는 열 축을 따라 시프트를 수행할 때 최상위 어레이 행과 최하위 어레이 행사이에서 컨텐츠를 롤 또는 루프할 수 있다. 또한, 다양한 실시예에서, 시프트 레지스터는 단일 명령에서 다수의 레지스터 위치 홉(hoops)을 지원할 수 있다 (예를 들어, 시프트 명령과 관련된 오피코드 및/또는 변수는 시프트 양이 수평 및/또는 수직 축을 따라 +/-1, +/-2, +/-3 또는 +/-4 레지스터 위치장소(places)인지 여부를 특정한다). 하드웨어에서 지원되지 않는 시프트 거리는 컴파일러에 의해 에뮬레이트될 수 있다.
도 14a에서 관찰되는 바와 같이, 처음에, 행에는 각 실행 레인의 각각의 R0 및 R1 레지스터 위치에 데이터 값(A0 내지 A7)이 로드된다. 그런 다음 도 14b에서 관찰되는 바와 같이, 기계 연산의 제1 반복에서, R1 레지스터 공간 위치들이 한 위치만큼 왼쪽으로 시프트되고 각 실행 레인의 R1 및 R0 컨텐츠가 R0 및 R1에 다시 기록된 결과와 합산된다. 이것은 R1에 제1 누적 부분 합을 생성하며, 이는 다음의 설명에서 더 명확하게 될 것이지만, 전체 합산 연산을 위한 누산기로서 동작한다.
도 14c에 도시된 기계 연산의 다음 반복에서, R1 레지스터 공간 위치들이 2 위치만큼 왼쪽으로 시프트되고 각 실행 레인의 R1 및 R0 컨텐츠가 합산된다. 그 결과는 다시 R0 및 R1에 유지된다. 마지막으로, 도 14d에 도시된 기계 연산의 세 번째 반복에서, R1 레지스터 공간 위치들이 4 위치만큼 좌측으로 시프트되고 그 결과는 레지스터 위치(R0 및 R1) 중 하나 또는 둘 모두에 기록된다. 따라서, 도 14b, 14c 및 14d에 걸친 합 연산의 반복을 보면, 시프트 량은 각 반복마다 2배가 되고, 단 3번의 반복 이후에 완료된 결과가 (즉, 도 14c에서와 같이) 모든 레인들에 존재함을 주목해야 한다. 16의 넓은 행의 경우, 시프트 양은 4번째 반복에 대해 8개 위치가 되며 연산은 4번째 반복 후에 완료된다.
b. 행/열 프리픽스 합 연산
도 15 및 16a 내지 16d는 2차원 실행 레인 어레이 및 대응하는 2차원 시프트 레지스터를 갖는 이미지 프로세서상에서 또한 수행될 수 있는 행/열 프리픽스 합 연산에 관련된다. 행/열 프리픽스 합 연산은 적분 이미지, 가속 박스 필터 및 압축 작업을 연산을 위한 어드레스 계산에 특히 유용하다. 도 15를 참조하면, 간략화를 위해, 단지 하나의 행이 도시되어 있다. 그러나, 연산은 열들에 대해서도 수행될 수 있다. 또한, 위에서 설명된 행/열 합 연산과 같이, 단 하나의 행만이 도시되었지만, 다양한 구현예에서, (모든 행/열을 포함하는) 레지스터 어레이의 임의 수의 행들(또는 열들)이 동시에 합산될 수 있다. 또한, 도 15의 행의 치수는 단지 8개의 위치 폭으로만 도시되어 있지만, 실제 구현예에서 실행 레인 및 시프트 레지스터 어레이들은 16×16 또는 심지어 더 클 수 있다.
도 15에서 관찰되는 바와 같이, 행 내의 임의의 위치에 대한 행 프리픽스 연산의 결과는 해당 위치까지 이어지는 값들의 합이다. 마찬가지로, 열 내의 임의의 위치에 열 프리픽스 연산의 값은 해당 위치까지 이어지는 값들의 합이다.
도 16a 내지 도 16d는 행 프리픽스 연산을 위한 머신 레벨 연산의 실시예를 도시한다. 이전 섹션에서 설명된 행 합 연산과 마찬가지로, 행 프리픽스 연산은 어레이 에지 위치들(1601) 사이에서 시프트틀을 돌릴(roll) 수 있는 2차원 시프트 레지스터의 사용을 채용한다.
도 16a에서 관찰되는 바와 같이, 행은 각 실행 레인의 각각의 R0 레지스터 위치에 데이터 값(A0 내지 A7)을 초기에 로딩한다. 또한, 각 실행 레인의 R2 레지스터 공간에 널(null)("0")이 로드된다.
도 16b에 도시된 기계 레벨 연산의 제1 반복에서, R0 레지스터 공간 위치는 목적지 위치의 R1 레지스터 공간으로 오른쪽으로 한 위치 시프트된다. 후속 ADD 연산은 RO 컨텐츠에 상기 반복 횟수와 관련된 레인의 위치에 따라 상이한 R1 컨텐츠 또는 R2 컨텐츠를 가산한다. 구체적으로, 제1 행 위치는 위치(0)가 2N-1보다 작거나 같기 때문에(여기서, N은 반복 횟수(20-1=0)임) R2의 널을 선택하고(R1에서 시트된 건텐츠가 아닌), R0의 컨텐츠에 상기 널을 가산하고 그 결과를 R0에 다시 저장한다. 따라서, 제1행 위치는 R0에서 A0 값을 유지한다.
대조적으로, 다른 행 위치들 각각은 그 위치가 2N-1보다 크기 때문에, R1의 상기 시프트된 컨텐츠(R2의 널 값 대신)를 선택하고, 이를 R0의 컨텐츠에 가산하여 그 결과를 R0에 저장한다. 따라서, 제1 행 위치 이외의 각 행 위치는 RO에 그의 원래의 컨텐츠와 RO의 최자측 인접 컨텐츠의 합을 유지하는 반면 제1행 위치는 R0에 단순히 원래 콘텐츠만 유지할 것이다.
도 16c에 도시된 기계 레벨 연산들의 제2 반복에서, R0 레지스터 공간 위치들의 컨텐츠는 목적지의 R1 레지스터 공간으로 오른쪽으로 두 위치 시프트된다. 따라서, 위에서 설명된 행/열 연산과 마찬가지로, 기계 연산들의 각각의 다음 반복마다 시프트 량은 2배가 된다. 제1 반복과 마찬가지로, 후속 ADD 연산은 RO 컨텐츠에 현재의 반복 횟수와 관련된 레인의 위치에 따라 R1 컨텐츠 또는 R2 컨텐츠를 가산한다. 이 경우, 제1 및 제2 행 위치는 그들의 위치(0, 1)가 2N-1(21-1 = 1)보다 작거나 같기 때문에 R2에 있는 널을 선택한다(R1에서 시프트된 컨텐츠가 아닌). 따라서, 이들 레인은 R0의 컨텐츠에 널 값을 가산하여 그 결과를 R0에 다시 저장한다. 따라서, 제1행 위치는 R0에 A0 값을 유지하고, 제2행 위치는 R0에 A0+A1 값을 유지할 것이다.
대조적으로, 다른 행 위치들 각각은 그 위치가 2N-1보다 크기 때문에, R1의 상기 시프트된 컨텐츠(R2의 널 값 대신)를 선택하고, 상기 R1의 컨텐츠를 RO의 컨텐츠에 가산하고 그 결과를 R0에 저장한다. 따라서, 제1 및 제2행 위치 이외의 각각의 행 위치는 RO에 그의 원래의 컨텐츠 및 그의 총 시프트된 컨텐츠에 기초하여 누적된 합을 유지할 것이다.
도 16d에 도시된 기계 레벨 연산의 제3 반복에서, R0 레지스터 공간 위치는 목적지의 R1 레지스터 공간으로 오른쪽으로 4개 위치 시프트된다. 다시 말하면, 기계 연산의 다음 반복마다 시프트 양이 2배가 된다. 초기 반복과 마찬가지로, 후속 ADD 연산은 RO 컨텐츠에 현재의 반복 횟수와 관련된 레인의 위치에 따라 R1 컨텐츠 또는 R2 컨텐츠를 가산한다. 이 경우, 제1 내지 제4 행 위치는 그들의 위치가 2N-1(21-1 = 3)보다 작거나 같기 때문에 R2에 있는 널을 선택할 것이다(R1에서 시프트된 컨텐츠가 아닌). 따라서, 이들 레인 각각은 R0의 컨텐츠에 널 값을 가산하여 그 결과를 R0에 다시 저장한다. 따라서, 제1행 위치는 R0에 A0의 원래 값을 유지하고, 제2행 위치는 R0에 A0+A1 값을 유지하며, 제3행 위치는 R0에 A0+A1+A2 값을 유지하고, 제4행 위치는 R0에 A0+A1+A2+A3 값을 유지할 것이다.
대조적으로, 다른 행 위치들 각각은 그 위치가 2N-1보다 크게 유지되기 때문에, R1의 상기 시프트된 컨텐츠(R2의 널 값 대신)를 선택하고, 상기 R1의 컨텐츠를 RO의 컨텐츠에 가산하고 그 결과를 R0에 저장한다. 따라서, 제1,제2 및 제행 위치 이외의 각각의 행 위치는 그의 원래의 컨텐츠와 그의 총 시프트된 컨텐츠에 기초하여 누적된 합을 유지할 것이다.
제3 반복 후에, 상기 프리픽스 합 연산은 완료된다. 만약 행의 치수가 16인 경우, R1 레지스터 컨텐츠를 8개 위치만큼 시프트하는 하나 이상의 연산 세트만이 16개의 실행 레인 모두에서 16개의 상이한 위치들 모두에 고유한 합산을 누적하는데 필요할 것이다.
c. 행/열 검색 최소(find min) 연산
도 17a 및 18a 내지 18d는 2차원 실행 레인 어레이 및 대응하는 2차원 시프트 레지스터를 갖는 이미지 프로세서상에서 실행될 수 있는 행/열 검색 최소 연산에 관한 것이다. 행/열 검색 최소 연산은 통계 계산 및 블록 매칭 후-처리에 특히 유용하다.
도 17을 참조하면, 단순화를 위해, 단지 하나의 행이 도시되어 있다. 그러나, 실제 구현예에서, 열 검색 최소 연산이 행 검색 최소 연산을 구현하는 동일한 프로세서에서 구현될 수 있다. 또한, 행(또는 열)에 대한 최소값은 (모든 행/열까지 포함하는) 레지스터 어레이의 모든 행(또는 열)에 대해 동시에 찾을 수 있다. 또한, 행/열의 치수는 8 위치 폭으로만 도시되어 있지만, 실제 구현예에서, 실행 레인 및 시프트 레지스터 어레이는 16×16 또는 심지어 더 클 수 있다.
도 17에서 관찰되는 바와 같이, 행 검색 최소 연산의 결과는 동일한 행 내의 모든 값과 그 행의 위치(location)/위치(position)(인덱스라고도 지칭됨) 중에서 가장 작은 값에 해당한다. 마찬가지로, 열 검색 최소 연산의 결과는 동일한 열 내의 모든 값과 그 열 내의 위치/위치 중에서 가장 작은 값에 해당한다. 이전 섹션에서 논의된 행 합 및 프리힉스 합 연산과 마찬가지로, 행/열 검색 최소 연산은 어레이 에지 위치들(1701) 사이에서 롤(roll) 시프트할 수 2차원 시프트 레지스터의 사용을 이용한다.
도 18a 내지 도 18d는 행 프리픽스 연산에 대한 기계 레벨 연산의 실시예를 도시한다. 초기에, 도 18a에서 관찰되는 바와 같이, 행은 각 실행 레인의 각각의 R0 레지스터 위치에 데이터 값(A0 내지 A7)으로 로딩된다. 또한, 각 행 위치의 인덱스는 각 실행 레인의 R1 레지스터 공간에 로딩된다.
도 18b에 도시된 기계 레벨 연산들의 제1 반복에서, R0 및 R1 레지스터 위치의 컨텐츠는 이웃 실행 레인의 레지스터 공간의 R2 및 R3 레지스터 공간으로 1 단위 시프트된다. 그런 다음 R0 및 R2 레지스터의 각각의 값은 각 실행 레인 내에서 비교된다. 비교의 최소값과 해당 인덱스는 R0 및 R1 레지스터 공간에 저장된다. 즉, R0 값이 R2 값보다 작으면, R0 및 R1 레지스터는 그들의 원래 컨텐츠를 유지한다. 반면에, R2 값이 R0 값보다 작으면, R2 값은 R0에 기록되고 R3 값은 R1에 기록된다. 이것은 R0에 비교의 최소값을 유지하고 R1에 그것의 인덱스를 유지하는 효과가 있다.
도 18c에 도시된 기계 레벨 연산들의 제2 반복에서, R0 및 R1 레지스터 위치의 컨텐츠는 다운스트림 실행 레인의 R2 및 R3 레지스터 공간으로 2 단위 시프트된다. 따라서, 다시 한번, 다음 반복으로 시프트 양은 2배가 된다. 그런 다음 R0 및 R2 레지스터의 각각의 값이 각 실행 레인 내에서 비교된다. 비교의 최소값과 해당 인덱스는 R0 및 R1 레지스터 공간에 저장된다. 이것은 R0의 각 실행 레인과 R1의 인덱스에서 수행된 두 비교에서 관찰되는 최소값을 유지하는 효과가 있다.
도 18d에서 관찰된 기계 레벨 연산들의 제3 반복에서, R0 및 R1 레지스터 위치의 컨텐츠는 다운스트림 실행 레인의 R2 및 R3 레지스터 공간으로 4 단위 시프트된다. 그런 다음 R0 및 R2 레지스터의 각각의 값은 각 실행 레인 내에서 비교된다. 비교의 최소값과 대응하는 인덱스는 R0 및 R1 레지스터 공간에 저장된다. 이것은 R0의 각 실행 차선과 R1의 색인에서 수행된 3가지 비교에서 관찰되는 최소값을 유지하는 효과가 있다.
제3 반복 이후에, 검색 최소(최소값 검색) 연산은 각 실행 레인이 R0 레지스터 공간에 있는 전체 행의 최소값과 R1 레지스터 공간에 있는 대응하는 인덱스를 가질 때 완료된다(원래 최소값으로 제공된 행 위치는 그의 R1 레지스터 공간에서 식별된 자체 행 위치를 찾는다). 행의 치수(차원)가 16인 경우, 8개의 위치만큼 시프트 레지스터의 다운스트림으로의 R0 및 R1 레지스터 컨텐츠의 시프트에 기초하여 단지 하나 이상의 연산 세트가 16개의 실행 레인 모두에서 최소 16개의 상이한 위치를 제공하는 것이 필요할 것이다.
검색 최대 연산은 또한 핵심 수학 연산이 최소값을 찾는 것보다 최대값을 찾는 것을 제외하고는 전술한 동일한 원리를 사용하여 구현될 수 있음에 유의한다.
d. 행렬 곱셈
도 19a, 19b 및 20은 행렬 곱셈에 관한 것이다. 행렬 곱셈은 특히 이산 푸리에 또는 코사인 변환(압축 및 필터링의 공통 프리미티브) 및 (일반적으로 이미지 인식에 사용되는) 더 큰 행렬/곱셈 연산을 표현하는데 특히 유용하다. 2개의 행렬(A 및 B)의 행렬 곱셈은, 결과 내의 각 행렬 좌표 위치에 대해, 좌표 위치의 행에 있는 요소들과 좌표 위치의 열에 있는 대응하는 요소들의 적(products)이다. 도 19b는 도 19a의 행렬(A와 B)의 행렬 배수에 대한 결과 행렬(X)을 도시한다. 여기서, 결과 행렬(C) 내의 2개의 좌표 위치(1901, 1902)에 대한 행렬(A 및 B)의 관련 부분 적 항들이 특별히 도시되어 있다.
특히, 예를 들어, 도 19b의 결과 행렬(C)에서 좌표 위치(c12)에 대한 결과 적(resultant product)은 도 19a의 행렬(B)의 열(1902)의 대응하는 요소들과 승산되는 행렬(A)의 행(1901)에 요소들에 대응하는 (a11 * b11) + (a12 * b21) + (a13 * b31) + (a14 * b41)이다.
마찬가지로, 도 19b의 결과 행렬(C)에서 좌표 위치(c22)에 대한 결과 적은 도 19a의 행렬(B)의 열(1902)의 대응하는 요소들과 승산되는 행렬(A)의 행(1903)의 요소들에 대응하는 (a21 * b12) + (a22 * b22) + (a23 * b32) + (a24 * b42)이다. 이 두 예에서 알 수 있듯이, 결과 행렬(C)내의 좌표 위치 x, y에 대한 결과는 다음과 같이 나타낼 수 있다.
Figure 112019010777691-pct00003
도 20a 내지 도 20e는 2차원 실행 레인 어레이 및 대응하는 2차원 시프트 레지스터 어레이의 고유한 시프팅 이점을 사용하는 행렬 곱셈 연산의 실시예를 나타낸다.
도 20a에서 관찰되는 바와 같이, 처음에 2개의 행렬(A 및 B)이 2차원 시프트 레지스터 어레이에 로딩된다. 예를 들어, 행렬(A)의 값들은 2차원 시프트 레지스터의 R0 레지스터 공간에 로딩되고, 행렬(B)의 값들은 2차원 시프트 레지스터 어레이의 R1 레지스터 공간에 로딩될 수 있어서, 각 행렬 좌표가 상이한 실행 레인의 관련 레지스터 공간에 대응한다. 다시 말하면, 설명의 용이함을 위해, 4×4 행렬이 도시되어 있지만, 실제 구현예에서는 더 큰 행렬들이 대응하는 더 큰 치수의 시프트 레지스터 어레이와 승산될 수 있다.
도 20b에서 관찰되는 바와 같이, 회전식 전단 알고리즘(rotational shearing algorithm) 시프트가 행렬(A)에 적용되는 행 방향(row-wise) 회전식 전단 알고리즘 시프트 시퀀스 및 행렬(B)에 적용되는 열 방향 회전식 전단 알고리즘 시프트 시퀀스 모두에 적용된다. 당 업계에 공지된 바와 같이, 회전식 전단 알고리즘은 N-1만큼(여기서 N은 N이 행렬 내의 위치임) 시프트 양을 증가시킨다.
따라서, 도 20b에서 관찰되는 바와 같이, 행렬(A)의 제1행은 전혀 시프트되지 않고, 행렬(A)의 제2행은 1 단위 시프트되고, 행렬(A)의 제3행은 2 단위 시프트되고 행렬(A)의 제4행은 3 단위 시프트된다. 유사하게, 행렬(B)의 제1열은 전혀 시프트되지 않고, 행렬(B)의 제2열은 1 단위 시프트되고, 행렬(B)의 제3열은 2 단위 시프트되고 행렬(B)의 제4열은 3 단위 시프트된다. 여기서, 2차원 시프트 레지스터 어레이는 행 지향 시프트 및 열 지향 시프트 모두에 대해 어레이 에지들에서 요소들을 돌릴(roll) 수 있는 것으로 이해된다.
또한, 각각의 실행 레인에 의해 실행되는 각각의 시프트 명령이 상이한 입력 오퍼랜드 데이터를 지정할 수 있는 2차원 시프트 레지스터 어레이 및 대응하는 실행 레인 어레이의 다양한 특성 때문에, 2차원 시프트 레지스터 어레이는 상이한 수평 시프트 양만큼 상이한 행들을 시프트할 수 있고, 상이한 수직 시프트 양만큼 상이한 열을 시프트하는 동시에 동일한 행렬에 대한 모든 실행 레인에 걸쳐 시프트 명령들을 동시에 수행할 수 있다 (다양한 실시예에서, 동일한 수평 시프트 양이 동일한 행의 레인들에 대해 지정되어야 하고 동일한 수직 시프트 양이 동일한 열의 레인들에 대해 지정되어야 한다). 따라서, A 및 B 행렬 모두의 전단(shearing)은 2 사이클정도로도 완료될 수 있다(즉, 하나의 행렬에 대한 모든 시프트는 시프트 레지스터가 단일 사이클에서 다중 홉 시프트(multiple hop shifts)를 구현할 수 있다고 가정할 때 한 사이클에서 수행된다).
도 20b에 도시된 바와 같이, 행렬(A 및 B)의 데이터가 전단 알고리즘으로부터 재정렬됨에 따라, 각각의 실행 레인이 그의 대응하는 2차원 시프트 레지스터 공간에서 A 및 B 값을 승산하는 곱셈 연산이 수행된다. 여기서, A 값들은 예를 들어 R0 공간에 유지되고 B 값들은 R1 공간에 유지된다는 것을 상기하자. 곱셈의 결과는 국부적인 R2 공간에 저장된다. 널(Null) 값들은 R3 공간에 초기 조건으로 로드될 수 있으며 R2의 곱셈 결과는 R3의 컨텐츠에 가산된다. 합산의 결과는 R3에 다시 저장된다. 다음의 가르침에서 명백해 지듯이, R3는 행렬 곱셈 연산을 통해 부분 적 항들의 합산을 누적하는 누산기의 역할을 한다.
이해의 용이함을 위해, 도 20b는 원래 도 19b에 도시된 결과 행렬(C)의 좌표 위치들(c11 및 c22)에 대한 제1 반복 이후의 결과 R3 공간의 컨텐츠를 명시적으로 나타낸다. 여기서, 도 20b의 제1 반복 이후에, 위치(C11)의 R3 레지스터 공간은 부분 적 항(a11*b11)을 포함하고, 위치(C22)의 R3 레지스터 공간은 부분 적 항 (a21*b12)을 포함한다.
도 20c에서 관찰되는 바와 같이, 다음 반복시, 행렬 A 데이터를 포함하는 R0 레지스터는 수평으로 1 단위 시프트되고 행렬 B 데이터를 포함하는 R1 레지스터는 수직으로 1 단위 시프트된다. 이어서, 도 20b와 관련하여 바로 위에서 설명한 수학적 연산이 반복된다. 그러나, 각 레인의 R3 레지스터 공간은 초기에 제1 반복의 부분 적 항(예컨대, 위치(c11)의 R3에서 a11 * b11 및 위치(c22)의 R3에서 a21 * b12)을 포함한다. 이와 같이, 반복의 끝에서, 레지스터(R3)는 지금까지 계산된 두 부분 적들의 누적 합을 포함한다. 즉, 위치(c11)의 R3는 (a11*b11) + (a12*b21)의 합계를 가지며 위치(c22)의 R3는 합계 (a21 * b12) + (a22 * b22)를 가질 것이다.
도 20d 및 도 20e에 도시된 바와 같이, 두 행렬에 대한 단일 단위 시프트의 2회 반복 한 후에 곱셈-덧셈이 이어지면, 행렬 곱셈은 그 로컬 R3 레지스터 공간에서 부분 적들의 정확한 합산을 갖는 각 레지스터 어레이 위치로 완료될 것이다.
e. 2차원 이산 푸리에 변환(2D DFT )
도 21은 2차원 DFT(2D DFT)를 나타낸다. 2D DFT는 노이즈 감소 및 컨볼루션가속화에 특히 유용하다. 도 21에서 관찰되는 바와 같이, 2D DFT는 2개의 복소 항(complex terms)(2101, 2102)의 곱의 2차원 공간에 대한 합산으로 표현될 수 있다. 복소 항들 중 제1 항(2101)은 크기 및 위상이 시간 및 주파수의 함수인 페이저(phasor)에 대응한다. 구현시, 제1 복소 항(2101)은 제1 계수 행렬로서 명시적으로 계산된다. 복소 항들 중 제2 항(2102)은 공간 도메인에서 주파수 도메인으로 변환되는 신호에 대응한다.
간략화를 위해, 도 21은 제1 복소 항(2101)은 Re1+jIm1로 나타내고, 제2 복소 항(2102)은 Re2+jIm2로 나타낸다. 당 업계에서 공지된 바와 같이, (Re1+jIm1)*(Re2+jIm2)의 실수부는 (Re1*Re2)-(Im1*Im2)로 표현될 수 있고, 허수부는 j((Re1*Im2)+(Re2*Im1))로 표현될 수 있다. 직전에 논의된 행렬 곱셈과 마찬가지로, 2D 공간에 대한 2D DFT의 합산은 좌표 위치의 행에 있는 요소들의 적을 좌표 위치의 열에 있는 대응 요소들로 가산한다.
따라서, DFT 결과의 실수부는 Re1 값의 어레이와 Re2 값의 어레이에 대해 행렬 곱셈을 수행하고 결과 어레이에서 Im1 값과 Im2 값의 어레이에 대해 행렬 곱셈의 결과를 감산함으로써 계산될 수 있다. 유사하게, DFT 결과의 허수부는 Re1 값의 어레이 및 Im2 값의 어레이에 대해 행렬 곱셈을 수행하고 결과 어레이에 Re2 값 및 Im1 값의 어레이에 대한 행렬 곱셈의 결과를 가산함으로써 계산될 수 있다.
도 22a는 DFT의 실수부를 계산하기 위한 기계 연산을 나타낸다. 도 22a에서 관찰되는 바와 같이, Re1 값의 어레이는 2차원 시프트 레지스터 어레이의 R0 레지스터 공간으로 로딩되고, Re2 값의 어레이는 2차원 시프트 레지스터 어레이의 R1 레지스터 공간으로 로딩되고, Im1 값의 어레이는 2차원 시프트 레지스터 어레이의 R2 레지스터 공간으로 로딩되고, Im2 값의 어레이는 2차원 시프트 레지스터 어레이의 R3 레지스터 공간으로 로딩된다. 도 22b에서 관찰되는 바와 같이, 이어서 Re1 및 Im1 값이 수평으로 전단되고 Re2 및 Im2 값이 수직으로 전단되는 어레이 값들 각각에 회전식 전단 알고리즘이 적용된다.
도 22c에서 관찰되는 바와 같이, 그 다음 Re1*Re2 행렬 곱셈과 Im1*Im2 행렬 곱셈이 수행되어 그 결과가 각각 R0 및 R2 레지스터 공간에 보관된다. 그 다음 R2 레지스터 공간의 컨텐츠는 R0 레지스터 공간에서 감산되고, 도 22d에서 관찰된 바와 같이 R0 레지스터 공간에서 DFT 변환의 실수부를 벗어나는 감산의 결과가 된다.
일 실시예에서, R0 레지스터 공간의 실수부는 R4 레지스터 공간으로 이동되거나(존재하는 경우) 시프트 레지스터 어레이에 연결된 로컬 메모리에 쓰여진다. 그 다음, 원래의 Re1 및 Im1 값은 R0 및 R1 레지스터 공간(예컨대, 동일한 로컬 메모리로부터)으로 다시 기록되고 수평으로 전단되어, 도 22a의 레지스터 컨텐츠가 2차원 시프트 레지스터 어레이에서 재생성된다.
그런 다음 Re1 * Im2 행렬 곱셈 및 Re2 * Im1 행렬 곱셈은 그 결과가 각각 R0 및 R2 레지스터 공간에 유지되도록 수행된다. 즉, 행렬 곱셈은 R0 및 R3의 컨텐츠에 대해 수행되고 결과는 R0에 다시 쓰여지고, 행렬 곱셈은 R2에 기록되는 컨텐츠인 R2 및 R1의 컨텐츠에 대해 수행된다. R0 및 R2의 결과 행렬은 도 22e에 도시된다. 그런 다음 R0 레지스터 공간의 컨텐츠는 R2 레지스터 공간의 컨텐츠에 가산되어 R0에 다시 기록된다. 이것은 도 22f에 도시된 바와 같이 R0 레지스터 공간에서 DFT 변환의 허수부를 남긴다.
f. FFT 버터 플라이( FFT Butterfly )
당 업계에 공지된 바와 같이, 고속 푸리에 변환(FFT)은 DFT에 대해 보다 빠르고 덜 계산적인 접근법이다. FFT는 시간 또는 공간 도메인 데이터를 주파수 도메인 데이터로 신속하게 변환하는 특수한 효율적 알고리즘에 의존한다. 이러한 알고리즘의 핵심 구성 요소는 버터 플라이 알고리즘이다. 예시적인 버터 플라이 알고리즘은 도 23에 도시된다. 여기서, 버터 플라이 연산은 특정 스테이지(stage)가 동일한 행 또는 열의 요소간에 발생하는 스와핑(swapping)의 양을 결정하는 스테이지에 의해 정의된다. 당 업계에 공지된 바와 같이, 완전한 FFT는 버터 플라이 연산들 사이에서 다수의 상이한 스테이지 버터 플라이 연산들의 스왑핑된 컨텐츠에 대해 수학적 연산을 수행하는 것을 포함한다.
도 23은 1, 2 및 4 스테이지 버터 플라이 연산을 각각 도시한다. 1 스테이지 버터플라이의 경우 이웃 요소들이 스와핑된다(서로 바뀐다). 2 스테이지 버터 플라이의 경우, 이웃 요소 쌍이 스와핑된다. 4 스테이지 버터 플라이의 경우 4개의 이웃 요소 그룹이 스와핑된다. 2차원 FFT의 경우, 신호 데이터의 제1 어레이 내의 요소들은 서로 스와핑된 신호 데이터 요소들에 대해 수학적 연산이 수행되는 다수의 버터 플라이 스테이지 각각에 따라 스와핑된다.
도 24a는 2차원 R0 레지스터 공간에 저장된 신호 데이터의 어레이에 대해 1 스테이지 1 버터 플라이를 수행하는데 사용될 수 있는 기계 레벨 시프트 동작을 도시한다. 단순화를 위해 하나의 행만이 표시된다. 2차원 시프트 레지스터 내의 어레이의 다수의(예컨대, 모두) 행 또는 열은 관찰되는 특정 행에 따라 동시에 처리될 수 있음을 인식하는 것이 타당하다.
여기에서, 시프트 레지스터는 그의 R0 레지스터 공간에서 각 행에 걸쳐 A0 내지 A7로 초기에 로드된다. 그런 다음 시프트 레지스터는 R0 레지스터 컨텐츠를 1 단위 오른쪽으로 시프트하고 각 실행 레인은 방금 R1 레지스터 공간에서 해당 위치로 시프트된 데이터를 저장한다. 그런 다음, 시프트 레지스터는 R0 레지스터 컨텐츠를 왼쪽으로 2 단위 시프트한다 (결과값은 R0'로 표시됨). 그 다음, 각 실행 레인은 자신의 로컬 R0 컨텐츠 또는 로컬 R1 컨텐트가 레인의 위치에 따라 R0에 저장되는 선택 동작(즉, R0가 선택되면, R0의 컨텐츠는 변경되지 않음)을 수행한다. 도 24a의 특정 실시예에서, 짝수 레인은 R0을 선택하고, 홀수 레인은 R1을 선택한다. 선택 후에 올바르게 스와핑된 값들은 각 실행 레인의 R0 레지스터 공간에 있다 (R0"로 표시됨).
도 24b 및 도 24c는 2 스테이지 및 4 스테이지 버터 플라이 연산을 나타낸다. 프로세싱은 위에 설명된 1 스테이지 버터 플라이 연산과 유사하지만, 2 스테이지 버터 플라이의 경우 시프트 레지스터 어레이는 R0 레지스터 컨텐츠를 오른쪽으로 2 단위 이동하고 왼쪽으로 4 단위 시프트한다. 다른 모든 짝수 레인과 그의 가장 오른쪽 이웃은 R1과 R0"중 하나에서 선택하고, 다른 짝수 레인들은 R1과 R0" 중의 다른 하나에서 가장 오른쪽 이웃을 선택한다. 도 25c에 도시된 4 스테이지 버터 플라이의 경우, 시프트 레지스터 어레이는 R0의 컨텐츠를 4 단위 오른쪽으로 이동시킨 다음 R0에 있는 (R0'로 표시된) 모든 값들을 선택한다.
g. 블록 매치( block match )
도 25는 블록 매칭을 나타낸 도면이다. 블록 매칭은 모션 추정(예를 들어, 비디오 압축에 대한), 이미지 안정화 및 이미지 융합 알고리즘(예컨대, 노출 융합 및 일시적 노이즈 융합)에 특히 유용하다. 여기서, 제1 기본(base)(예를 들어, 이전) 이미지의 특정 특징은 대체(예를 들어, 이후) 이미지에서 검색된다. 도 26의 예에서, 기본 이미지에 제시되는 블록 ABCD는 대체 이미지에서 발견되어야 한다.
도 26a 및 도 26b는 2차원 실행 레인 어레이 및 2차원 시프트 레지스터 어레이를 갖는 이미지 프로세서상에서 블록 매칭을 수행하는 방법을 도시한다. 여기서, 대체 이미지의 픽셀은 2차원 시프트 레지스터의 R0 레지스터 공간에 유지된다. 찾고 있는 기본 이미지의 특징의 제1픽셀(예컨대, "A")이 모든 실행 레인에 브로드캐스팅되고 R0 레지스터 공간의 컨텐츠와 값("A")의 절대 차이가 취해지고 그 결과는 R1에 저장된다(단순화를 위해, 대체 이미지의 다른 픽셀들은 특징의 값(A, B, C, D) 중 임의의 것을 찾지 못한다고 가정한다). 만약 대체 이미지의 픽셀 값이 브로트캐스트 픽셀 값 A와 매치(또는 거의 매치)하면, R1의 결과는 0(또는 거의)이어야 한다. R1의 다른 모든 결과는 실질적으로 0가 아니어야 한다.
도 26b를 참조하면, 대체 이미지가 2차원 시프트 레지스터에서 1 단위 시프트되어, 검색되는 특징의 다음 픽셀 값("B")이 모든 실행 레인으로 브로드캐스팅되고 절대 차이가 다시 취해져 R1에 저장된다. 여기서, 두 개의 연속 픽셀 매칭을 갖는 특정 실행 레인 어레이 위치(2601)는 R1에서 가장 낮은 결과 값을 가져야 한다. 이 특정 실행 레인 위치는 브로드캐스트되는 픽셀 값들의 특정 순서가 시프트 레지스터 어레이의 R0에서 대체 이미지의 특정 스캐닝/시프팅 모션과 정렬되는 위치이다.
도 26c 및 도 26d에서 관찰되는 바와 같이, 프로세스는 다음의 반복마다 다음 픽셀 값을 브로드캐스트하고 특정 스캔 순서로 대체 이미지 데이터를 시프트한다. 탐색된 모든 이미지 픽셀을 브로드캐스트하고 상기 검색된 이미지의 크기에 대응하는 영역에 걸쳐 상기 대체 이미지를 RO에 대응하게 시프트시키기에 충분한 수의 반복 후에, 이상적으로 실행 레인 어레이의 하나의 위치(2601)만이 모든 반복 사이클마다 매치를 경험하게 될 것이다. 이와 같이, 이 특정 어레이 위치(2601)는 모든 반복이 완료된 후 그의 R1 레지스터 공간에서(또는 적어도 다른 실행 레인보다 작은 값으로) 제로 또는 거의 제로 값을 유지할 수 있어야 한다.
상술한 바와 같은 검색 최소 연산은 어레이 내의 모든 행에 걸쳐 R1 레지스터 공간상에서 실행된다. 그러면 각 행의 가장 낮은 대응 값이 해당 행의 각 위치에 유지된다. 그런 다음 검색 최소 연산은 어레이의 모든 열에 걸쳐 R1 레지스터 공간상에서 실행된다. 그 결과는 모든 반복에서 기본 이미지와 일치하는 픽셀을 식별해야 하며, 이는 차례로 대체 어레이에서 이미지 검색의 정확한 위치를 식별하는데 사용될 수 있다.
4.0 저 레벨 프로그램 코드의 구성
도 27은 프로그래머가 높은 레벨의 이미지 처리 기능을 설계하고 (도 1 내지 도 6을 참조하여 상술한 가상 ISA 환경을 포함할 수 있는) 애플리케이션 개발 환경이 전술한 특수 연산들 중 임의의 또는 전부를 제공하여 개발자가 처음부터 다시 작성하지 않도록 하는 사전-런타임 개발 환경을 도시한다.
여기서, 개발자는 위에서 논의된 임의 연산을 명시적으로 호출할 수 있고 및/또는 개발 환경은 응답으로 라이브러리 2701로부터 이들을 자동으로 제공할 수 있다. 대안적으로 또는 조합하여, 그러한 연산들에 대한 개발자의 요구는 함축되거나 추론될 수 있고(2D DFT의 경우 행렬 곱셈과 같은), 개발 환경은 이러한 기능을 수행하는 라이브러리(2701)로부터 (예를 들어, 컴파일 프로세스의 일부로서) 프로그램 코드를 자동으로 삽입한다.
따라서, 상술한 연산들 또는 그 대안적인 실시예들을 수행하는 프로그램 코드는 상위 레벨(예컨대, 가상 ISA) 프로그램 코드 또는 하위 레벨의 오브젝트 코드로 표현될 수 있다. 다양한 실시예에서, 상위 레벨의 가상 ISA 코드는 x, y 어드레스 좌표를 갖는 메모리 판독으로서 동작할 데이터 값들을 지정할 수 있는 반면, 오브젝트 코드는 이러나 데이터 액세스들을 (전술한 임의의 시프트 동작들 또는 유사 실시예와 같은) 2차원 시프트 레지스터 동작으로서 이해할 수 있다. 컴파일러는 개발 환경에서의 x, y 판독값을 지정된 오브젝트 코드인 2차원 시프트 레지스터의 대응하는 시프트들로 변환할 수 있다(예를 들어, x, y 좌표(+2, +2)를 갖는 개발 환경의 판독은 오브젝트 코드에서 왼쪽 두 공간으로의 시프트와 두 공간 아래로의 시프트로서 실현될 수 있다). 환경에 따라, 개발자는 이들 레벨(또는 예를 들어 더 높은 VISA 레벨) 모두에 대한 가시성을 가질 수 있다. 또 다른 실시예에서, 이러한 사전 작성된 루틴들은 (예컨대, 적시(just-in-time) 컴파일러에 의해) 사전-런타임보다는 런타임 중에 호출될 수 있다.
5.0. 결론 서술
선행 섹션들로부터, 섹션 1.0에서 상술된 가상 환경은 컴퓨터 시스템상에서 인스턴트화될 수 있음을 인식하는 것에 관련된다. 마찬가지로, 섹션 2.0에서 상술한 이미지 프로세서는(예를 들어, 핸드 헬드 디바이스의 카메라로부터의 데이터를 처리하는 핸드 헬드 디바이스의 시스템 온 칩(SOC)의 일부로서) 컴퓨터 시스템상의 하드웨어로 구현될 수 있다.
전술한 다양한 이미지 프로세서 아키텍처 특징은 종래의 의미에서의 이미지 프로세싱에 반드시 제한되는 것이 아니며 따라서 이미지 프로세서가 재-특징화될 수 있는(또는 되지 않을 수 있는) 다른 애플리케이션들에 적용될 수 있다는 것을 지적하는 것이 타당하다. 예를 들어, 상술한 다양한 이미지 프로세서 아키텍처 특징들 중 임의의 것이 실제 카메라 이미지들의 프로세싱과는 대조적으로 애니메이션의 생성 및/또는 발생 및/또는 렌더링에 사용되면, 이미지 프로세서는 그래픽 프로세싱 유닛으로서 특징화될 수 있다. 부가적으로, 상술한 이미지 프로세서 아키텍처 특징들은 비디오 프로세싱, 비전 프로세싱, 이미지 인식 및/또는 기계 학습과 같은 다른 기술적 어플리케이션들에 적용될 수 있다. 이러한 방식으로 적용되면, 이미지 프로세서는 더 범용 프로세서(예를 들어, 컴퓨팅 시스템의 CPU이거나 그 일부)와 통합되거나(예를 들어, 코-프로세서로서) 또는 컴퓨팅 시스템 내의 독립형 프로세서일 수 있다 .
전술한 하드웨어 설계 실시예들은 반도체 칩 내에서 및/또는 반도체 제조 프로세스를 향한 최종 타게팅을 위한 회로 설계의 디스트립션으로서 구현될 수 있다. 후자의 경우, 그러한 회로 디스트립션들(예를 들어, VHDL 또는 Verilog) 레지스터 전송 레벨(RTL)은 회로 디스크립션, 게이트 레벨 회로 디스크립션, 트랜지스터 레벨 회로 디스크립션 또는 마스크 디스크립션 또는 그들의 다양한 조합의 형태를 취할 수 있다. 회로 기술은 일반적으로 (CD-ROM 또는 다른 유형의 저장 기술과 같은) 컴퓨터 판독 가능 저장 매체로 구현된다.
전술한 섹션들로부터, 전술한 바와같은 이미지 프로세서는 컴퓨터 시스템상의 하드웨어로(예를 들어, 핸드 헬드 디바이스의 카메라로부터의 데이터를 처리하는 핸드 헬드 디바이스의 시스템 온 칩(SOC)의 일부로서) 구현될 수 있음을 인식하는 것이 타당하다. 이미지 프로세서가 하드웨어 회로로서 구현되는 경우, 이미지 프로세서에 의해 처리되는 이미지 데이터는 카메라로부터 직접 수신될 수 있음을 주목해야 한다. 여기서, 이미지 프로세서는 개별 카메라의 일부이거나, 통합된 카메라를 갖는 컴퓨팅 시스템의 일부일 수 있다. 후자의 경우에서, 이미지 데이터는 카메라 또는 컴퓨팅 시스템의 시스템 메모리로부터 직접 수신될 수 있다(예를 들어, 카메라는 자신의 이미지 데이터를 이미지 프로세서가 아닌 시스템 메모리로 전송함). 또한 이전 섹션에서 설명한 많은 기능들이(애니메이션을 렌더링하는) 그래픽 프로세서 유닛에 적용될 수 있다.
도 28은 컴퓨팅 시스템의 예시적인 도면을 제공한다. 이하에서 설명되는 컴퓨팅 시스템의 많은 구성 요소는 통합된 카메라 및 관련 이미지 프로세서(예컨대, 스마트 폰 또는 태블릿 컴퓨터와 같은 핸드 헬드 디바이스)를 갖는 컴퓨팅 시스템에 적용 가능하다. 당업자는 이 두 가지를 쉽게 구분할 수 있다.
도 28에서 관찰되는 바와 같이, 기본 컴퓨팅 시스템은 (예를 들어, 멀티-코어 프로세서 또는 애플리케이션 프로세서상에 배치된 복수의 범용 프로세싱 코어(2815_1 내지 2815_N 및 메인 메모리 컨트롤러(2817)를 포함할 수 있는) 중앙 처리 장치(2801), 시스템 메모리(2802), 디스플레이(2803)(예컨대, 터치 스크린, 플랫-패널), 로컬 유선 포인트-투-포인트 링크(예컨대, USB) 인터페이스(2804), (이더넷 인터페이스 및/또는 셀룰러 모뎀 서브 시스템과 같은) 다양한 네트워크 I/O 기능(2805), 무선 로컬 영역 네트워크(예컨대, WiFi) 인터페이스(2806), 무선 포인트-투-포인트 링크(예컨대, 블루투스) 인터페이스(2807) 및 GPS 인터페이스(2808), 다양한 센서(2809_1~2809_N), 하나 이상의 카메라(2810), 배터리(2811), 전력 관리 제어 유닛(2824), 스피커 및 마이크로폰(2813) 및 오디오 코덱/디코더(2814)를 포함한다.
애플리케이션 프로세서 또는 멀티-코어 프로세서(2850)는 CPU(2801), 하나 이상의 그래픽 프로세싱 유닛(2816), 메모리 관리 기능(2817)(예를 들어, 메모리 컨트롤러), I/O 제어 기능(2818) 및 이미지 프로세싱 유닛(2819)을 포함할 수 있다. 범용 프로세싱 코어들(2815)은 전형적으로 컴퓨팅 시스템의 운영 체제 및 애플리케이션 소프트웨어를 실행한다. 그래픽 프로세싱 유닛(2816)은 전형적으로 그래픽 집중 기능들을 실행하여 예를 들어 디스플레이(2803) 상에 제시되는 그래픽 정보를 생성한다. 메모리 제어 기능(2817)은 시스템 메모리(2802)와 인터페이스하여 시스템 메모리(2802)로/로부터 데이터를 기록/판독한다. 전력 관리 제어 유닛(2824)은 일반적으로 시스템(2800)의 전력 소비를 제어한다.
이미지 프로세싱 유닛(2819)은 이전 섹션들에서 전술한 임의의 이미지 프로세싱 유닛 실시예들에 따라 구현될 수 있다. 선택적으로 또는 조합하여, IPU(2819)는 GPU(2816) 및 CPU(2801) 중 하나 또는 둘 모두에 그들의 코(co)-프로세서로서 연결될 수 있다. 또한, 다양한 실시예들에서, GPU(2816)는 상술한 임의의 이미지 프로세서 특징들로 구현될 수 있다.
터치 스크린 디스플레이(2803), 통신 인터페이스(2804~2807), GPS 인터페이스(2808), 센서(2809), 카메라(2810) 및 스피커/마이크로폰 코덱(2813, 2814) 모두는 적절한 경우 통합된 주변 디바이스뿐만 아니라 (예를 들어, 하나 이상의 카메라(2810)를 포함하는 전체 컴퓨팅 시스템에 관련된 다양한 형태의 I/O( 입력 및/또는 출력)로 간주될 수 있다. 구현예에 따라, 이들 I/O 구성 요소들 중 다양한 것들은 애플리케이션 프로세서/멀티-코어 프로세서(2850) 상에 통합될 수 있거나 애플리케이션 프로세서/멀티-코어 프로세서(2850)의 다이(die) 외부 또는 패키지 외부에 위치될 수 있다.
일 실시예에서, 하나 이상의 카메라(2810)는 그 시야에서 카메라와 객체 사이의 깊이감을 측정할 수 있는 깊이 카메라(depth camera)를 포함한다. 애플리케이션 프로세서 또는 다른 프로세서의 범용 CPU 코어(또는 프로그램 코드를 실행하기 위한 명령 실행 파이프 라인을 갖는 다른 기능 블록)에서 실행하는 애플리케이션 소프트웨어, 운영 체제소프트웨어, 디바이스 드라이버 소프트웨어 및/또는 펌웨어는 전술한 임의의 기능들을 수행할 수 있다.
본 발명의 실시예들은 전술한 바와 같은 다양한 프로세스를 포함할 수 있다. 프로세스들은 기계 실행 가능 명령들로 구현될 수 있다. 상기 명령들은 범용 또는 특수 목적 프로세서로 하여금 특정 프로세스들을 수행하도록 하는데 사용될 수 있다. 대안적으로, 이들 프로세스는 상기 프로세스들을 수행하기 위한 하드 와이어드 로직을 포함하는 특정 하드웨어 구성 요소들에 의해 또는 프로그래밍된 컴퓨터 구성 요소들 및 커스텀 하드웨어 구성 요소들의 임의의 조합에 의해 수행될 수 있다.
본 발명의 요소들은 기계 실행 가능 명령들을 저장하기 위한 기계 판독 가능 매체로서 또한 제공될 수 있다. 기계 판독 가능 매체는 플로피 디스켓, 광 디스크, CD-ROM 및 광 자기 디스크, 플래시 메모리, ROM, RAM, EPROM, EEPROM, 자기 또는 광학 카드, 전파 매체 또는 전자 명령들을 저장하기에 적합한 다른 유형의 매체/기계-판독 가능 매체를 포함할 수 있지만 이에 한정되는 것은 아니다. 예를 들어, 요소들은 통신 링크(예컨대, 모뎀 또는 네트워크 연결)를 통해 반송파 또는 다른 전파 매체에 구체화된 데이터 신호들에 의해 원격 컴퓨터(예컨대, 서버)로부터 요청 컴퓨터(예컨대, 클라이언트)로 전송된 컴퓨터 프로그램으로서 다운로드될 수 있다.
전술한 명세서에서, 특정 예시적인 실시예가 설명되었다. 그러나, 첨부된 청구 범위에 설명된 본 발명의 더 넓은 사상 및 범위를 벗어나지 않고 다양한 변경 및 수정이 이루어질 수 있음이 명백할 것이다. 따라서, 명세서 및 도면은 제한적인 의미라기 보다는 예시적인 것으로 간주되어야 한다.

Claims (40)

  1. 프로세서로서,
    2차원 시프트 레지스터 어레이; 및
    프로세싱 요소들(elements)의 2차원 어레이를 포함하여, 상기 2차원 시프트 레지스터 어레이의 각 시프트 레지스터는 상기 프로세싱 요소들 중 하나에 전용이고,
    상기 프로세서는 상기 2차원 시프트 레지스터 어레이의 행 또는 열에 저장된 모든 값들을 합산하는 누적 연산을 수행하기 위한 명령들을 실행하도록 구성되고, 상기 명령들은 상기 프로세서로 하여금 상기 2차원 시프트 레지스터 어레이 내의 데이터의 행 또는 열에 저장된 값들에 대해 다중 반복(multiple iterations)을 반복적으로 수행하게 하고, 각각의 반복 동작들을 포함하고 상기 동작들은:
    하나 이상의 프로세싱 요소들의 각 프로세싱 요소에 의해, (1) 이전 누적 결과 및 (2) 상기 프로세싱 요소에 전용인 시프트 레지스터 내의 값의 합산으로서 업데이트된 누적 결과를 계산하는 단계와, 그리고
    상기 행 또는 열의 모든 데이터가 상기 업데이트된 누적 결과에 가산될 때까지 이전의 반복에 비해 2배가 되는 시프트 량만큼 상기 행 또는 열을 따라 특정 방향으로 상기 2차원 시프트 레지스터 어레이의 데이터를 시프트하는 단계를 포함하는 동작들을 포함하는 것을 특징으로 하는 프로세서.
  2. 제1항에 있어서,
    상기 2차원 시프트 레지스터 어레이는,
    다수의 시프트 레지스터 평면을 가지며, 각각의 시프트 레지스터 평면은 별도의 2차원 시프트 레지스터 어레이를 포함하고, 그리고
    상기 명령들은 각의 프로세싱 요소로 하여금 각각의 반복 사이에서 시프트되는 상기 시프트 레지스터 평면과 상이한 시프트 레지스터 평면에 전용인 시프트 레지스터에 상기 업데이트된 누적 결과를 저장하게 하는 것을 특징으로 하는 프로세서.
  3. 제1항에 있어서,
    상기 2차원 시프트 레지스터 어레이는,
    상기 2차원 시프트 레지스터 어레이의 에지로부터 상기 2차원 시프트 레지스터 어레이의 대향 에지로 데이터를 래핑(wrap)하도록 구성되는 것을 특징으로 하는 프로세서.
  4. 제1항에 있어서, 상기 2차원 시프트 레지스터 어레이는,
    단일 명령 또는 단일 사이클에 대해 다수의 홉(hops)으로 데이터를 시프트하도록 구성되는 것을 특징으로 하는 프로세서.
  5. 제1항에 있어서, 상기 명령들은,
    상기 프로세서로 하여금 상기 2차원 시프트 레지스터 어레이의 다수의 행 또는 다수의 열에 대해 상기 누적 연산을 병렬로 수행하게 하는 것을 특징으로 하는 프로세서.
  6. 제1항에 있어서, 상기 프로세싱 요소들의 2차원 어레이는 적어도 8×8 프로세싱 요소들의 어레이를 포함하는 것을 특징으로 하는 프로세서.
  7. 프로세서로서,
    프로세싱 요소들의 2차원 어레이와, 각각의 프로세싱 요소는 프로세싱 요소들의 2차원 어레이의 제1 차원을 따라 각각의 위치와 관련되고; 그리고
    2차원 시프트 레지스터 어레이를 포함하여, 상기 2차원 시프트 레지스터 어레이는 다수의 시프트 레지스터 평면을 가지며, 각각의 시프트 레지스터 평면은 별도의 2차원 시프트 레지스터 어레이를 포함하고, 상기 2차원 시프트 레지스터 어레이의 각 시프트 레지스터는 상기 프로세싱 요소들 중 하나에 전용이고,
    상기 프로세서는 제1 시퀀스의 값들로부터, 제2 시퀀스의 값들의 각 위치에서의 각각의 결과 값이 (i) 제1 시퀀스의 값들의 대응하는 위치에서의 초기 값과 (ii) 상기 제1 시퀀스의 값들의 상기 위치 이전에 발생하는 모든 값의 합산인 상기 제2 시퀀스의 값들을 생성하는 프리픽스 연산을 수행하기 위한 명령들을 실행하도록 구성되고,
    상기 다수의 시프트 레지스터 평면의 제1 시프트 레지스터 평면 및 제2 시프트 레지스터 평면은 초기에 상기 제1 시퀀스의 값들의 데이터를 가지며,
    상기 명령들은 상기 프로세서로 하여금 0에서 M까지의 다중 반복을 수행하게하고, 각각의 반복 N은 동작들을 포함하고, 상기 동작들은:
    상기 제1 시퀀스의 값들을 따라 특정 방향으로 상기 제2 시프트 레지스터 평면의 데이터를 2N의 시프트 량만큼 시프트시키는 단계와, 그리고
    각 프로세싱 요소에 의해, (1) 상기 제1 시프트 레지스터 평면 내의 상기 프로세싱 요소에 전용인 시프트 레지스터의 제1 값 및 (2) 상기 프로세싱 요소의 위치가 2N-1보다 큰 경우에만 상기 제2 시프트 레지스터 평면 내의 상기 프로세싱 요소에 전용인 시프트 레지스터의 제2값의 합산을 계산하는 단계를 포함하는 것을 특징으로 하는 프로세서.
  8. 제7항에 있어서,
    상기 2차원 시프트 레지스터 어레이는,
    상기 2차원 시프트 레지스터 어레이의 에지로부터 상기 2차원 시프트 레지스터 어레이의 대향 에지로 데이터를 래핑하도록 구성되는 것을 특징으로 하는 프로세서.
  9. 제7항에 있어서,
    상기 2차원 시프트 레지스터 어레이는,
    단일 명령 또는 단일 사이클에 대해 다수의 홉(hops)으로 데이터를 시프트하도록 구성되는 것을 특징으로 하는 프로세서.
  10. 제7항에 있어서, 상기 명령들은,
    상기 프로세서로 하여금 상기 2차원 시프트 레지스터 어레이의 다수의 행 또는 다수의 열에 대해 상기 프리픽스 연산을 병렬로 수행하게 하는 것을 특징으로 하는 프로세서.
  11. 제7항에 있어서,
    상기 프로세싱 요소들의 2차원 어레이는 적어도 8×8 프로세싱 요소들의 어레이를 포함하는 것을 특징으로 하는 프로세서.
  12. 프로세서로서,
    프로세싱 요소들의 2차원 어레이와, 각각의 프로세싱 요소는 프로세싱 요소들의 2차원 어레이의 제1 차원을 따라 각각의 위치와 관련되고; 그리고
    2차원 시프트 레지스터를 포함하여, 상기 2차원 시프트 레지스터 어레이는 다수의 시프트 레지스터 평면을 가지며, 각각의 시프트 레지스터 평면은 별도의 2차원 시프트 레지스터 어레이를 포함하고, 상기 2차원 시프트 레지스터 어레이의 각 시프트 레지스터는 상기 프로세싱 요소들 중 하나에 전용이고,
    상기 프로세서는 상기 2차원 시프트 레지스터 어레이의 행 또는 열에 저장된 제1 시퀀스의 값들로부터, 상기 제1 시퀀스의 어느 값이 상기 제1 시퀀스의 값들 내의 다른 모든 값보다 작은지를 계산하는 검색-최소 연산(find-min operation)을 수행하기 위해 명령들을 실행하도록 구성되고,
    상기 다수의 시프트 레지스터 평면의 제1 시프트 레지스터 평면은 초기에 상기 제1 시퀀스의 값들의 데이터를 갖고, 상기 다수의 시프트 레지스터 평면의 제2 시프트 레지스터 평면은 초기에 상기 제1 시퀀스의 값들 내의 각 값에 대한 각각의 인덱스 값들을 가지며,
    상기 다수의 시프트 레지스터 평면의 제3 시프트 레지스터 평면은 초기에 1위치만큼 시프프된 상기 제1 시퀀스의 값들의 데이터를 가지며, 상기 다수의 시프트 레지스터 평면들의 제4 시프트 레지스터 평면은 초기에 상기 제2 시프트 레지스터 평면 내의 각 값에 대한 각각의 인덱스 값을 가지며,
    상기 명령들은 상기 프로세서로 하여금 다수의 반복을 수행하게 하고, 각각의 반복은 동작들을 포함하고, 상기 동작들은:
    (i) 상기 프로세싱 요소에 속하는 상기 제1 시프트 레지스터 평면상의 시프트 레지스터 및 (ii) 상기 프로세싱 요소에 속하는 상기 제3 시프트 레지스터 평면상의 시프트 레지스터 사이의 더 작은 값을 계산하는 단계와,
    상기 더 작은 값을 제1 시프트 레지스터 평면상의 시프트 레지스터에 저장하고 대응하는 인덱스 값을 제2 시프트 레지스터 평면상의 시프트 레지스터에 저장하는 단계와, 그리고
    상기 2차원 시프트 레지스터 어레이의 행 또는 열의 모든 데이터가 처리될 때까지 이전의 반복에 비해 2배가 되는 시프트 량만큼 상기 행 또는 열을 따라 특정 방향으로 상기 2차원 시프트 레지스터 어레이의 데이터를 시프트하는 단계를 포함하는 것을 특징으로 하는 프로세서.
  13. 제12항에 있어서, 상기 동작들은,
    제1 시프트 레지스터 평면에 저장된 제1 블록에 대해, 제2 시프트 레지스터 평면에 저장된 매칭 블록의 위치를 식별하도록 블록 매칭 프로세스를 수행하는 단계를 더 포함하고, 상기 제1 블록은 복수의 데이터 값을 포함하고, 상기 제1 블록내의 상기 복수의 데이터 값들의 각 데이터 값에 대해 다음의 동작들을 수행하는 단계를 포함하며, 상기 동작들은:
    상기 데이터 값을 상기 프로세싱 요소들 각각으로 브로드캐스트하는 단계,
    각 프로세싱 요소에 의해, (i) 상기 데이터 값 및 (ii) 상기 프로세싱 요소에 속하는 상기 제2 시프트 레지스터 평면의 시프트 레지스터 내의 데이터를 계산하는 단계, 및
    상기 제1 블록을 갖는 상기 제1 시프트 레지스터 평면을 특정 방향으로 1 단위(unit) 만큼 시프트시키는 단계를 포함하고, 그리고
    상기 검색 최소 연산을 수행하는 것은 상기 제2 시프트 레지스터 평면에 저장된 매칭 블록의 위치를 식별하는 것을 특징으로 하는 프로세서.
  14. 제12항에 있어서, 상기 2차원 시프트 레지스터 어레이는,
    상기 2차원 시프트 레지스터 어레이의 에지로부터 상기 2차원 시프트 레지스터 어레이의 대향 에지로 데이터를 래핑하도록 구성되는 것을 특징으로 하는 프로세서.
  15. 제12항에 있어서, 상기 2차원 시프트 레지스터 어레이는,
    단일 명령 또는 단일 사이클에 대해 다수의 홉(hops)으로 데이터를 시프트하도록 구성되는 것을 특징으로 하는 프로세서.
  16. 제12항에 있어서, 상기 명령들은,
    상기 프로세서로 하여금 상기 2차원 시프트 레지스터 어레이의 다수의 행 또는 다수의 열에 대해 상기 검색 최소 연산을 병렬로 수행하게 하는 것을 특징으로 하는 프로세서.
  17. 제12항에 있어서,
    상기 프로세싱 요소들의 2차원 어레이는 적어도 8×8 프로세싱 요소들의 어레이를 포함하는 것을 특징으로 하는 프로세서.
  18. 삭제
  19. 삭제
  20. 삭제
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
  26. 삭제
  27. 삭제
  28. 삭제
  29. 삭제
  30. 삭제
  31. 삭제
  32. 삭제
  33. 삭제
  34. 삭제
  35. 삭제
  36. 삭제
  37. 삭제
  38. 삭제
  39. 삭제
  40. 삭제
KR1020197003054A 2016-07-01 2017-06-08 2차원 실행 레인 어레이 및 2차원 시프트 레지스터를 갖는 이미지 프로세서상의 블록 연산을 위한 코어 프로세서 KR102232723B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/201,269 2016-07-01
US15/201,269 US20180005346A1 (en) 2016-07-01 2016-07-01 Core Processes For Block Operations On An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register
PCT/US2017/036565 WO2018005037A1 (en) 2016-07-01 2017-06-08 Core processes for block operations on an image processor having a two-dimensional execution lane array and a two-dimensional shift register

Publications (2)

Publication Number Publication Date
KR20190028454A KR20190028454A (ko) 2019-03-18
KR102232723B1 true KR102232723B1 (ko) 2021-03-26

Family

ID=59258352

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197003054A KR102232723B1 (ko) 2016-07-01 2017-06-08 2차원 실행 레인 어레이 및 2차원 시프트 레지스터를 갖는 이미지 프로세서상의 블록 연산을 위한 코어 프로세서

Country Status (9)

Country Link
US (2) US20180005346A1 (ko)
EP (1) EP3479341B1 (ko)
JP (1) JP6837084B2 (ko)
KR (1) KR102232723B1 (ko)
CN (1) CN107563954B (ko)
DE (2) DE102017113867A1 (ko)
GB (2) GB2553632B (ko)
TW (2) TWI646501B (ko)
WO (1) WO2018005037A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
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
CN112005213A (zh) 2018-02-27 2020-11-27 谷歌有限责任公司 用于图像处理器的大型查找表
JP7035751B2 (ja) * 2018-04-12 2022-03-15 富士通株式会社 コード変換装置、コード変換方法、及びコード変換プログラム
US10776110B2 (en) * 2018-09-29 2020-09-15 Intel Corporation Apparatus and method for adaptable and efficient lane-wise tensor processing
US10552939B1 (en) * 2019-02-12 2020-02-04 Google Llc Image processor complex transfer functions
US20210081691A1 (en) * 2019-09-16 2021-03-18 SambaNova Systems, Inc. Efficient Execution of Operation Unit Graphs on Reconfigurable Architectures Based on User Specification
US11410027B2 (en) 2019-09-16 2022-08-09 SambaNova Systems, Inc. Performance estimation-based resource allocation for reconfigurable architectures
CN113536220A (zh) * 2020-04-21 2021-10-22 中科寒武纪科技股份有限公司 运算方法、处理器及相关产品
GB2595696B (en) * 2020-06-04 2022-12-28 Envisics Ltd Forming a hologram of a target image for projection using data streaming
CN112784977B (zh) * 2021-01-15 2023-09-08 北方工业大学 一种目标检测卷积神经网络加速器
WO2023089610A1 (en) * 2021-11-18 2023-05-25 Deci.Ai Ltd. System and method for optimizing calculation of butterfly transforms by a processing unit

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008165756A (ja) * 2006-12-01 2008-07-17 Thomson Licensing ローカル・レジスタを有する処理要素のアレイ

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
DE3851005T2 (de) 1987-06-01 1995-04-20 Applied Intelligent Syst Inc Paralleles Nachbarverarbeitungssystem und -Verfahren.
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
US5173947A (en) * 1989-08-01 1992-12-22 Martin Marietta Corporation Conformal image processing apparatus and method
IL94232A0 (en) * 1990-04-27 1991-01-31 Israel Defence Electrical apparatus particularly useful as an electromagnetic pulse simulator
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 ソニー株式会社 画像データ処理装置および画像データ処理方法
US5848286A (en) 1994-03-29 1998-12-08 Cray Research, Inc. Vector word shift by vo shift count in vector supercomputer processor
US5606707A (en) * 1994-09-30 1997-02-25 Martin Marietta Corporation Real-time image processor
US5612693A (en) 1994-12-14 1997-03-18 International Business Machines Corporation Sliding window data compression using a toroidal bit shift register
JPH08194679A (ja) * 1995-01-19 1996-07-30 Texas Instr Japan Ltd ディジタル信号処理方法及び装置並びにメモリセル読出し方法
EP0875031B1 (de) * 1996-01-15 2001-06-20 Infineon Technologies AG Prozessor zur bildverarbeitung
US6016395A (en) * 1996-10-18 2000-01-18 Samsung Electronics Co., Ltd. Programming a vector processor and parallel programming of an asymmetric dual multiprocessor comprised of a vector processor and a risc processor
US5892962A (en) 1996-11-12 1999-04-06 Lucent Technologies Inc. FPGA-based processor
US6148111A (en) * 1998-04-27 2000-11-14 The United States Of America As Represented By The Secretary Of The Navy Parallel digital image compression system for exploiting zerotree redundancies in wavelet coefficients
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
US6970196B1 (en) 1999-03-16 2005-11-29 Hamamatsu Photonics K.K. High-speed vision sensor with image processing function
JP3922859B2 (ja) 1999-12-28 2007-05-30 株式会社リコー 画像処理装置、画像処理方法およびその方法をコンピュータに実行させるプログラムを記録したコンピュータ読み取り可能な記録媒体
US6745319B1 (en) 2000-02-18 2004-06-01 Texas Instruments Incorporated Microprocessor with instructions for shuffling and dealing data
US6728862B1 (en) 2000-05-22 2004-04-27 Gazelle Technology Corporation Processor array and parallel data processing methods
US6728722B1 (en) 2000-08-28 2004-04-27 Sun Microsystems, Inc. General data structure for describing logical data spaces
US7286717B2 (en) 2001-10-31 2007-10-23 Ricoh Company, Ltd. Image data processing device processing a plurality of series of data items simultaneously in parallel
JP4146654B2 (ja) 2002-02-28 2008-09-10 株式会社リコー 画像処理回路、複合画像処理回路、および、画像形成装置
US9170812B2 (en) 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
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
AU2003286131A1 (en) 2002-08-07 2004-03-19 Pact Xpp Technologies Ag Method and device for processing data
US20060044576A1 (en) 2004-07-30 2006-03-02 Kabushiki Kaisha Toshiba Apparatus for image processing
US20050216700A1 (en) * 2004-03-26 2005-09-29 Hooman Honary Reconfigurable parallelism architecture
WO2005109221A2 (en) * 2004-05-03 2005-11-17 Silicon Optix A bit serial processing element for a simd array processor
US7667764B2 (en) 2004-06-04 2010-02-23 Konica Minolta Holdings, Inc. Image sensing apparatus
JP4219887B2 (ja) 2004-12-28 2009-02-04 富士通マイクロエレクトロニクス株式会社 画像処理装置及び画像処理方法
WO2006114642A1 (en) 2005-04-28 2006-11-02 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
US7991817B2 (en) * 2006-01-23 2011-08-02 California Institute Of Technology Method and a circuit using an associative calculator for calculating a sequence of non-associative operations
GB2436377B (en) * 2006-03-23 2011-02-23 Cambridge Display Tech Ltd Data processing hardware
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US7933940B2 (en) * 2006-04-20 2011-04-26 International Business Machines Corporation Cyclic segmented prefix circuits for mesh networks
US20080111823A1 (en) 2006-11-13 2008-05-15 Faraday Technology Corp. Graphics processing system
EP1927950A1 (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
JP4389976B2 (ja) 2007-06-29 2009-12-24 ブラザー工業株式会社 画像処理装置および画像処理プログラム
EP2192765B1 (en) 2007-09-05 2015-11-11 Tohoku University Solid-state image sensor and drive method for the same
US8661226B2 (en) * 2007-11-15 2014-02-25 Nvidia Corporation System, method, and computer program product for performing a scan operation on a sequence of single-bit values using a parallel processor architecture
US9619428B2 (en) 2008-05-30 2017-04-11 Advanced Micro Devices, Inc. SIMD processing unit with local data share and access to a global data share of a GPU
US8225325B2 (en) * 2008-06-06 2012-07-17 Apple Inc. Multi-dimensional thread grouping for multiple processors
JP4999791B2 (ja) 2008-06-30 2012-08-15 キヤノン株式会社 情報処理装置、その制御方法、及びプログラム
US8456480B2 (en) 2009-01-14 2013-06-04 Calos Fund Limited Liability Company Method for chaining image-processing functions on a SIMD processor
KR101572879B1 (ko) 2009-04-29 2015-12-01 삼성전자주식회사 병렬 응용 프로그램을 동적으로 병렬처리 하는 시스템 및 방법
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
GB201007406D0 (en) 2010-05-04 2010-06-16 Aspex Semiconductor Ltd Block motion estimation
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
CN103339604B (zh) 2011-01-31 2016-10-26 株式会社索思未来 程序生成装置、程序生成方法、处理器装置以及多处理器系统
US9092267B2 (en) 2011-06-20 2015-07-28 Qualcomm Incorporated Memory sharing in graphics processing unit
US20130027416A1 (en) 2011-07-25 2013-01-31 Karthikeyan Vaithianathan Gather method and apparatus for media processing accelerators
JP5742651B2 (ja) 2011-10-15 2015-07-01 コニカミノルタ株式会社 画像処理装置、連携方法および連携プログラム
JP5746100B2 (ja) 2011-12-27 2015-07-08 京セラドキュメントソリューションズ株式会社 画像形成装置
US8823736B2 (en) 2012-01-20 2014-09-02 Intel Corporation Graphics tiling architecture with bounding volume hierarchies
US10244246B2 (en) 2012-02-02 2019-03-26 Texas Instruments Incorporated Sub-pictures for pixel rate balancing on multi-core platforms
US9235769B2 (en) 2012-03-15 2016-01-12 Herta Security, S.L. Parallel object detection method for heterogeneous multithreaded microarchitectures
TWI520598B (zh) 2012-05-23 2016-02-01 晨星半導體股份有限公司 影像處理裝置與影像處理方法
US9232139B2 (en) 2012-07-24 2016-01-05 Apple Inc. Image stabilization using striped output transformation unit
US9319254B2 (en) * 2012-08-03 2016-04-19 Ati Technologies Ulc Methods and systems for processing network messages in an accelerated processing device
US9378181B2 (en) 2012-11-09 2016-06-28 Intel Corporation Scalable computing array
US8954992B2 (en) 2013-03-15 2015-02-10 Lenovo Enterprise Solutions (Singapore) Pte. Ltd. Distributed and scaled-out network switch and packet processing
US10996959B2 (en) * 2015-01-08 2021-05-04 Technion Research And Development Foundation Ltd. Hybrid processor
US9749548B2 (en) 2015-01-22 2017-08-29 Google Inc. Virtual linebuffers for image signal processors
US10291813B2 (en) 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor
US9756268B2 (en) 2015-04-23 2017-09-05 Google Inc. Line buffer unit for image processor
US9769356B2 (en) 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor
US10095479B2 (en) 2015-04-23 2018-10-09 Google Llc Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure
US9772852B2 (en) 2015-04-23 2017-09-26 Google Inc. Energy efficient processor core architecture for image processor
US9785423B2 (en) 2015-04-23 2017-10-10 Google Inc. Compiler for translating between a virtual image processor instruction set architecture (ISA) and target hardware having a two-dimensional shift array structure
US9965824B2 (en) 2015-04-23 2018-05-08 Google Llc Architecture for high performance, power efficient, programmable image processing
US9632979B2 (en) * 2015-06-01 2017-04-25 Intel Corporation Apparatus and method for efficient prefix sum operation

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2008165756A (ja) * 2006-12-01 2008-07-17 Thomson Licensing ローカル・レジスタを有する処理要素のアレイ

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Mark Harris, "Optimizing Parallel Reduction in CUDA", 2016.04.14., NVIDIA Developer Technology, pp.1-38. 1부.*

Also Published As

Publication number Publication date
JP2019519863A (ja) 2019-07-11
TW201921314A (zh) 2019-06-01
US20180005346A1 (en) 2018-01-04
GB2576278A (en) 2020-02-12
GB2553632A (en) 2018-03-14
GB2576278B (en) 2020-09-16
US9978116B2 (en) 2018-05-22
TWI690896B (zh) 2020-04-11
DE102017113867A1 (de) 2018-01-04
GB201709788D0 (en) 2017-08-02
CN107563954A (zh) 2018-01-09
US20180005347A1 (en) 2018-01-04
TWI646501B (zh) 2019-01-01
GB2553632B (en) 2019-12-25
GB201916257D0 (en) 2019-12-25
KR20190028454A (ko) 2019-03-18
EP3479341A1 (en) 2019-05-08
TW201810180A (zh) 2018-03-16
JP6837084B2 (ja) 2021-03-03
WO2018005037A1 (en) 2018-01-04
DE202017103727U1 (de) 2017-11-02
EP3479341B1 (en) 2023-11-29
CN107563954B (zh) 2021-04-20

Similar Documents

Publication Publication Date Title
KR102190318B1 (ko) 2차원 실행 레인 어레이 및 2차원 시프트 레지스터를 갖는 이미지 프로세서에 대한 블록 연산
KR102232723B1 (ko) 2차원 실행 레인 어레이 및 2차원 시프트 레지스터를 갖는 이미지 프로세서상의 블록 연산을 위한 코어 프로세서
US10216487B2 (en) Virtual image processor instruction set architecture (ISA) and memory model and exemplary target hardware having a two-dimensional shift array structure

Legal Events

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