KR102016097B1 - 이미지 프로세서를 위한 2차원 시프트 어레이 - Google Patents
이미지 프로세서를 위한 2차원 시프트 어레이 Download PDFInfo
- Publication number
- KR102016097B1 KR102016097B1 KR1020177028034A KR20177028034A KR102016097B1 KR 102016097 B1 KR102016097 B1 KR 102016097B1 KR 1020177028034 A KR1020177028034 A KR 1020177028034A KR 20177028034 A KR20177028034 A KR 20177028034A KR 102016097 B1 KR102016097 B1 KR 102016097B1
- Authority
- KR
- South Korea
- Prior art keywords
- shift
- execution
- execution lane
- shift register
- data
- Prior art date
Links
- 238000000034 method Methods 0.000 claims description 44
- 125000001475 halogen functional group Chemical group 0.000 claims description 20
- 230000015654 memory Effects 0.000 description 32
- 238000012545 processing Methods 0.000 description 32
- 238000013461 design Methods 0.000 description 23
- 230000008569 process Effects 0.000 description 15
- 230000006870 function Effects 0.000 description 13
- 238000003860 storage Methods 0.000 description 6
- 230000033001 locomotion Effects 0.000 description 5
- 238000013459 approach Methods 0.000 description 4
- 238000003491 array Methods 0.000 description 4
- 238000007726 management method Methods 0.000 description 3
- 235000008694 Humulus lupulus Nutrition 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000009877 rendering Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 230000009471 action Effects 0.000 description 1
- 230000003542 behavioural effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 230000001010 compromised effect Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000005574 cross-species transmission Effects 0.000 description 1
- 230000001186 cumulative effect Effects 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 238000007620 mathematical function Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 230000007480 spreading Effects 0.000 description 1
- 238000003892 spreading Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/30134—Register stacks; shift registers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N3/00—Scanning details of television systems; Combination thereof with generation of supply voltages
- H04N3/10—Scanning details of television systems; Combination thereof with generation of supply voltages by means not exclusively optical-mechanical
- H04N3/14—Scanning details of television systems; Combination thereof with generation of supply voltages by means not exclusively optical-mechanical by means of electrically scanned solid-state devices
- H04N3/15—Scanning details of television systems; Combination thereof with generation of supply voltages by means not exclusively optical-mechanical by means of electrically scanned solid-state devices for picture signal generation
- H04N3/1575—Picture signal readout register, e.g. shift registers, interline shift registers
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N5/00—Details of television systems
- H04N5/14—Picture signal circuitry for video frequency region
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Image Processing (AREA)
- Executing Machine-Instructions (AREA)
- Image Input (AREA)
Abstract
장치가 설명된다. 설명되는 장치는 2차원 시프트 레지스터 어레이 구조에 결합되는 실행 레인 어레이를 포함한다. 실행 레인 어레이 내의 위치들은 2-차원 시프트 레지스터 어레이 구조 내의 동일한 위치들에 결합되어, 상이한 실행 레인들이 상이한 전용 레지스터들을 갖게 된다.
Description
본 발명의 기술분야는 일반적으로 이미지 프로세싱(image processing)에 관한 것이고, 더 구체적으로는, 이미지 프로세서(image processor)를 위한 2차원 시프트 어레이(two dimensional shift array)에 관한 것이다.
이미지 프로세싱은 전형적으로, 임의의 어레이 내에 체계화(organize)되는 픽셀 값(pixel value)들의 프로세싱을 수반한다. 여기서, 공간적으로 체계화되는 2차원 어레이는 이미지들의 2차원 특성(nature)을 캡처(capture)한다(추가적인 차원들은 시간(예를 들어, 2차원 이미지들의 시퀀스(sequence)) 및 데이터 타입(data type)(예를 들어, 컬러(color)들)을 포함할 수 있음). 전형적인 상황에서, 어레이화되는 픽셀 값(arrayed pixel value)들은, 움직이는 이미지(images of motion)들을 캡처하기 위해 스틸 이미지(still image) 혹은 프레임(frame)들의 시퀀스를 발생시킨 카메라에 의해 제공된다. 전통적인 이미지 프로세서들은 전형적으로 2개 극단(extreme)들 중 어느 한쪽 편에 치우쳐 있다.
첫 번째 극단은 범용 프로세서(general purpose processor) 혹은 유사 범용 프로세서(general purpose-like processor)(예를 들어, 벡터 명령(vector instruction)이 증진된 범용 프로세서) 상에서 실행되는 소프트웨어 프로그램들로서 이미지 프로세싱 태스크(image processing task)들을 수행한다. 비록 첫 번째 극단이 전형적으로 매우 넓은 다방면의 애플리케이션 소프트웨어 개발 플랫폼(application software development platform)을 제공하지만, 더 미세한 세분화된 데이터 구조(finer grained data structure)들을 사용하는 경우 그 관련된 오버헤드(overhead)(예를 들어, 명령 인출 및 디코딩(instruction fetch and decode), 온-칩 및 오프 칩 데이터(on-chip and off-chip data)의 처리(handling), 투기적 실행(speculative execution))와 결합되어 궁극적으로 프로그램 코드(program code)의 실행 동안 데이터의 단위 당 소비되는 에너지의 양이 더 커지게 되는 결과가 초래된다.
두 번째 반대편 극단은 고정 기능 하드와이어드 회로(fixed function hardwired circuitry)를 데이터의 훨씬 더 큰 블록(block)들에 적용하는 것이다. 맞춤 설계 회로(custom designed circuit)들에 직접적으로 적용되는 데이터의 (더 미세한 세분화된 블록들과는 반대로) 더 큰 블록들은 데이터의 단위 당 전력 소비를 크게 감소시킨다. 하지만, 맞춤 설계 고정 기능 회로(custom designed fixed function circuitry)를 사용하는 경우 일반적으로 프로세서가 수행할 수 있는 태스크들의 세트가 한정되는 결과가 초래된다. 이와 같이, 광범위한 다방면 프로그래밍 환경(즉, 첫 번째 극단과 관련된 환경)이 두 번째 극단에서는 부족하다.
매우 넓은 다방면의 애플리케이션 소프트웨어 개발 기회들을 데이터의 단위 당 향상된 전력 효율과 결합시켜 모두 제공하는 기술적 플랫폼(technology platform)이 바람직하지만 아직 해결되지 않은 채 남아 있다.
장치가 설명된다. 이러한 장치는, 2-차원 시프트 레지스터 어레이 구조(two-dimensional shift register array structure) 내에서 복수의 인접하는 위치들(contiguous locations)로부터의 데이터를 동일한 방향으로 동일한 개수의 위치들만큼 시프트(shifting)시켜 실행 레인 어레이(execution lane array) 내의 복수의 상이한 실행 레인들 각각에게 복수의 상이한 실행 레인들의 각각의 전용 레지스터(dedicated register)들 내의 새로운 값을 제공하기 위한 수단을 포함한다. 상이한 실행 레인들은 실행 레인 어레이와 2-차원 시프트 레지스터 어레이의 동일한 각각의 위치들에서 그들 각각의 전용 레지스터들에 결합된다.
장치가 설명된다. 이러한 장치는, 2차원 시프트 레지스터 어레이 구조에 결합되는 실행 레인 어레이를 포함한다. 실행 레인 어레이 내의 위치들은 2-차원 시프트 레지스터 어레이 구조 내의 동일한 위치들에 결합되어, 상이한 실행 레인들이 상이한 전용 레지스터들을 갖게 된다.
다음의 설명 및 첨부되는 도면들은 본 발명의 실시예들을 예시하기 위해 사용된다. 도면에서 예시되는 것은 다음과 같다.
도 1은 이미지 프로세서 하드웨어 아키텍처(image processor hardware architecture)의 실시예를 보여준다.
도 2a, 도 2b, 도 2c, 도 2d 및 도 2e는 이미지 데이터(image data)를 라인 그룹(line group)으로 파싱(parsing)하는 것, 라인 그룹을 시트(sheet)로 파싱하는 것, 그리고 중첩하는 스텐실(overlapping stencil)들을 사용하여 시트에 관해 수행되는 동작을 도시한다.
도 3은 스텐실 프로세서(stencil processor)의 실시예를 보여준다.
도 4는 스텐실 프로세서 내의 데이터 컴퓨테이션 유닛(data computation unit)의 실시예를 보여준다.
도 5a, 도 5b, 도 5c, 도 5d, 도 5e, 도 5f, 도 5g, 도 5h, 도 5i, 도 5j 및 도 5k는 중첩하는 스텐실들을 사용하여 한 쌍(pair)의 이웃하는 출력 픽셀 값(neighboring output pixel value)들을 결정하기 위해 2-차원 시프트 어레이 및 실행 레인 어레이를 사용하는 예를 도시한다.
도 6은 실행 레인 어레이와 2-차원 시프트 어레이가 통합된 것에 대한 유닛 셀(unit cell)의 실시예를 보여준다.
도 7a는 제1의 2차원 레지스터 어레이 구조 상호연결 스킴(two dimensional register array structure interconnection scheme)을 도시한다.
도 7b는 제2의 2차원 레지스터 어레이 구조 상호연결 스킴을 도시한다.
도 8a는 2-차원 레지스터 어레이 구조의 제 1 횡렬(row) 혹은 종렬(column)을 도시한다.
도 8b는 2-차원 레지스터 어레이 구조의 제 2 횡렬 혹은 종렬을 도시한다.
도 8c는 메모리 유닛(memory unit)에 결합되는 도 8b의 횡렬을 도시한다.
도 8d는 또 하나의 다른 토로이드(toroid) 실시예를 보여준다.
도 8e는 전력 관리 회로(power conservation circuit)를 보여준다.
도 9는 컴퓨팅 시스템(computing system)의 실시예를 보여준다.
도 1은 이미지 프로세서 하드웨어 아키텍처(image processor hardware architecture)의 실시예를 보여준다.
도 2a, 도 2b, 도 2c, 도 2d 및 도 2e는 이미지 데이터(image data)를 라인 그룹(line group)으로 파싱(parsing)하는 것, 라인 그룹을 시트(sheet)로 파싱하는 것, 그리고 중첩하는 스텐실(overlapping stencil)들을 사용하여 시트에 관해 수행되는 동작을 도시한다.
도 3은 스텐실 프로세서(stencil processor)의 실시예를 보여준다.
도 4는 스텐실 프로세서 내의 데이터 컴퓨테이션 유닛(data computation unit)의 실시예를 보여준다.
도 5a, 도 5b, 도 5c, 도 5d, 도 5e, 도 5f, 도 5g, 도 5h, 도 5i, 도 5j 및 도 5k는 중첩하는 스텐실들을 사용하여 한 쌍(pair)의 이웃하는 출력 픽셀 값(neighboring output pixel value)들을 결정하기 위해 2-차원 시프트 어레이 및 실행 레인 어레이를 사용하는 예를 도시한다.
도 6은 실행 레인 어레이와 2-차원 시프트 어레이가 통합된 것에 대한 유닛 셀(unit cell)의 실시예를 보여준다.
도 7a는 제1의 2차원 레지스터 어레이 구조 상호연결 스킴(two dimensional register array structure interconnection scheme)을 도시한다.
도 7b는 제2의 2차원 레지스터 어레이 구조 상호연결 스킴을 도시한다.
도 8a는 2-차원 레지스터 어레이 구조의 제 1 횡렬(row) 혹은 종렬(column)을 도시한다.
도 8b는 2-차원 레지스터 어레이 구조의 제 2 횡렬 혹은 종렬을 도시한다.
도 8c는 메모리 유닛(memory unit)에 결합되는 도 8b의 횡렬을 도시한다.
도 8d는 또 하나의 다른 토로이드(toroid) 실시예를 보여준다.
도 8e는 전력 관리 회로(power conservation circuit)를 보여준다.
도 9는 컴퓨팅 시스템(computing system)의 실시예를 보여준다.
a. 이미지 프로세서 하드웨어 아키텍처 및 동작(image processor hardware architecture and operation)
도 1은 하드웨어로 구현된 이미지 프로세서에 대한 아키텍처(100)의 실시예를 보여준다. 이미지 프로세서는 예를 들어, 시뮬레이트(simulate)된 환경 내에서 가상 프로세서(virtual processor)에 대해 작성된 프로그램 코드를 하드웨어 프로세서에 의해 실제로 실행되는 프로그램 코드로 변환하는 컴파일러(compiler)가 목표로 하고 있는 프로세서일 수 있다. 도 1에서 보여지는 바와 같이, 아키텍처(100)는 복수의 라인 버퍼 유닛들(line buffer units)(101_1 내지 101_M)을 포함하고, 복수의 라인 버퍼 유닛들(101_1 내지 101_M)은 네트워크(network)(104)(예를 들어, 온 칩 스위치 네트워크(on chip switch network), 온 칩 링 네트워크(on chip ring network), 혹은 다른 종류의 네트워크를 포함하는 네트워크 온 칩(Network On Chip, NOC))를 통해 복수의 스텐실 프로세서 유닛들(stencil processor units)(102_1 내지 102_N) 및 대응하는 시트 발생기 유닛들(sheet generator units)(103_1 내지 103_N)에 상호연결된다. 일 실시예에서, 임의의 라인 버퍼 유닛은 네트워크(104)를 통해 임의의 시트 발생기 및 대응하는 스텐실 프로세서에 연결될 수 있다.
일 실시예에서, 프로그램 코드는 소프트웨어 개발자에 의해 더 이른 시기에 정의된 이미지 프로세싱 동작들을 수행하기 위해 컴파일링(compiling)되고 대응하는 스텐실 프로세서(102)에 로딩(loading)된다(프로그램 코드는 또한, 예를 들어, 설계 및 구현에 따라, 스텐실 프로세서의 관련된 시트 발생기(103)에 로딩될 수 있음). 적어도 일부 경우들에서, 이미지 프로세싱 파이프라인(image processing pipeline)은, 제 1 파이프라인 스테이지(pipeline stage)에 대한 제 1 커널 프로그램(kernel program)을 제 1 스텐실 프로세서(102_1)로 로딩함으로써, 그리고 제 2 파이프라인 스테이지에 대한 제 2 커널 프로그램을 제 2 스텐실 프로세서(102_2)로 로딩함으로써, 그리고 기타 등등을 행함으로써 실현될 수 있고, 여기서 제 1 커널은 파이프라인의 제 1 스테이지의 기능들을 수행하고, 제 2 커널은 파이프라인의 제 2 스테이지의 기능들을 수행하고, 그리고 기타 등등이 행해지며, 추가적인 제어 흐름 방법들이 파이프라인의 하나의 스테이지로부터의 출력 이미지 데이터를 파이프라인의 다음 스테이지로 전달하기 위해 설치(install)된다.
다른 구성들에서, 이미지 프로세서는 동일한 커널 프로그램 코드를 동작시키는 둘 이상의 스텐실 프로세서들(102_1, 102_2)을 갖는 병렬 머신(parallel machine)으로서 실현될 수 있다. 예를 들어, 이미지 데이터의 높은 밀도 및 높은 데이터 속도 스트림은, 각각이 동일한 기능을 수행하는 복수의 스텐실 프로세서들에 걸쳐 프레임들을 스프레딩(spreading)시킴으로써 프로세싱될 수 있다.
또 하나의 다른 구성들에서, 본질적으로 커널들의 임의의 DAG는 하드웨어 프로세서에 로딩될 수 있는데, 이러한 로딩은, 각각의 스텐실 프로세서들을 구성하되 프로그램 코드에 관해 그들 자신의 각각의 커널을 갖도록 구성함으로써, 그리고 하드웨어에 구속되어 있는 적절한 제어 흐름을 구성하되 DAG 설계에서 하나의 커널로부터의 출력 이미지들을 다음 커널의 입력으로 지향(direct)시키도록 구성함으로써, 이루어진다.
일반적인 흐름으로서, 이미지 데이터의 프레임들은 매크로 I/O 유닛(macro I/O unit)(105)에 의해 수신되고, 프레임별로 라인 버퍼 유닛들(101) 중 하나 이상으로 전달된다. 특정 라인 버퍼 유닛은 자신의 이미지 데이터의 프레임을 이미지 데이터의 더 작은 영역(이것은 "라인 그룹(line group)"으로 지칭됨)으로 파싱하고, 그 다음에 이러한 라인 그룹을 네트워크(104)를 통해 특정 시트 발생기로 전달한다. 완전한 혹은 "전체(full)" 단일 라인 그룹(singular line group)은 예를 들어, 프레임의 복수의 인접하는 완전한 횡렬들 혹은 종렬들의 데이터를 이용해 구성될 수 있다(간결한 설명을 위해, 본 명세서는 주로 인접하는 횡렬들을 참조할 것임). 시트 발생기는 또한, 이미지 데이터의 라인 그룹을 이미지 데이터의 더 작은 영역(이것은 "시트(sheet)"로 지칭됨)으로 파싱하고, 이러한 시트를 자신의 대응하는 스텐실 프로세서에 제공한다.
단일 입력을 갖는 이미지 프로세싱 파이프라인 혹은 DAG 흐름의 경우에, 일반적으로, 입력 프레임들은, 이미지 데이터를 라인 그룹들로 파싱하고 라인 그룹들을 시트 발생기(103_1)로 지향시키는 동일한 라인 버퍼 유닛(101_1)으로 지향된다(이 경우, 시트 발생기(103_1)의 대응하는 스텐실 프로세서(102_1)는 파이프라인/DAG 내에서 제 1 커널의 코드를 실행시키고 있음). 스텐실 프로세서(102_1)가 프로세싱하는 라인 그룹들에 관해 스텐실 프로세서(102_1)에 의한 동작들이 완료된 경우, 시트 발생기(103_1)는 출력 라인 그룹들을 "다운스트림(downstream)" 라인 버퍼 유닛(101_2)으로 전송한다(어떤 사용의 경우들에서, 출력 라인 그룹은 더 이른 시기에 입력 라인 그룹들을 보냈던 동일한 라인 버퍼 유닛(101_1)으로 다시 전송될 수 있음).
그 다음에, 자기 자신들의 각각의 다른 시트 발생기 및 스텐실 프로세서(예를 들어, 시트 발생기(103_2) 및 스텐실 프로세서(102_2)) 상에서 실행되는 파이프라인/DAG 내의 다음 스테이지/동작을 나타내는 하나 이상의 "소비자(consumer)" 커널들은 제 1 스텐실 프로세서(102_1)에 의해 발생된 이미지 데이터를 다운스트림 라인 버퍼 유닛(101_2)으로부터 수신한다. 이러한 방식으로, 제 1 스텐실 프로세서 상에서 동작하는 "생산자(producer)" 커널은 제 2 스텐실 프로세서 상에서 동작하는 "소비자" 커널로 전달(forward)되는 자신의 출력 데이터를 가지며, 여기서 소비자 커널은 전체 파이프라인 혹은 DAG의 설계와 일관되도록 생산자 커널 이후의 태스크들의 다음 세트를 수행한다.
스텐실 프로세서(102)는 이미지 데이터의 복수의 중첩하는 스텐실들에 관해 동시에 동작하도록 설계된다. 스텐실 프로세서의 내부 하드웨어 프로세싱 용량 및 복수의 중첩하는 스텐실들은 시트의 크기를 효과적으로 결정한다. 이 경우, 스텐실 프로세서(102) 내에서, 실행 레인들의 어레이들은 복수의 중첩하는 스텐실들에 의해 커버(cover)되는 이미지 데이터 표면 영역을 동시에 프로세싱하도록 서로 조화를 이뤄 동작한다.
아래에서 더 상세히 설명되는 바와 같이, 다양한 실시예들에서, 이미지 데이터의 시트들은 스텐실 프로세서(102) 내의 2-차원 레지스터 어레이 구조 안으로 로딩된다. 시트들 및 2-차원 레지스터 어레이 구조의 사용은, 많은 양의 데이터를 많은 양의 레지스터 공간으로 예를 들어, 단일 로딩 동작(single load operation)으로서 이동시킴으로써(그리고 그 직후에 프로세싱 태스크들이 실행 레인 어레이에 의해 데이터에 관해 직접적으로 수행됨으로써), 전력 소비 향상들을 효과적으로 제공할 것으로 고려된다. 추가적으로, 실행 레인 어레이 및 대응하는 레지스터 어레이의 사용은 용이하게 프로그래밍가능/구성가능한 서로 다른 스텐실 크기들을 제공한다.
도 2a 내지 도 2e는, 라인 버퍼 유닛(101)의 파싱 동작, 시트 발생기 유닛(103)의 더 미세한 세분화된 파싱 동작, 뿐만 아니라 시트 발생기 유닛(103)에 결합되는 스텐실 프로세서(102)의 스텐실 프로세싱 동작을 모두 보여주는 실시예들을 상위 레벨에서 예시한다.
도 2a는 이미지 데이터(201)의 입력 프레임의 실시예를 도시한다. 도 2a는 또한, 3개의 중첩하는 스텐실들(202)(이들 각각은 3개의 픽셀들 x 3개의 픽셀들의 크기를 가짐)의 아웃라인(outline)을 도시하는데, 스텐실 프로세서는 이러한 3개의 중첩하는 스텐실들(202)에 관해 동작하도록 설계된다. 각각의 스텐실이 출력 이미지 데이터를 각각 발생시키게 되는 출력 픽셀이 굵게 흑색으로 강조되어 있다. 간결한 설명을 위해, 3개의 중첩하는 스텐실들(202)은 수직 방향으로만 중첩하는 것으로서 도시된다. 실제에 있어서 스텐실 프로세서는 중첩하는 스텐실들을 수직 방향 및 수평 방향 모두에서 갖도록 설계될 수 있다고 인식하는 것이 타당하다.
도 2a에서 보여지는 바와 같이, 스텐실 프로세서 내에서의 수직의 중첩하는 스텐실들(202) 때문에, 단일의 스텐실 프로세서가 동작할 수 있게 되는 프레임 내의 이미지 데이터의 폭넓은 대역(wide band)이 존재한다. 아래에서 더 상세히 논의되는 바와 같이, 일 실시예에서, 스텐실 프로세서들은 자신들의 중첩하는 스텐실들 내의 데이터를 이미지 데이터를 가로질러 좌측에서 우측으로 진행하는 방식으로 프로세싱한다(그리고 그 다음에 라인들의 다음 세트에 대해 반복하며 이것의 진행 순서는 상부(top)에서 하부(bottom)로 수행됨). 따라서, 스텐실 프로세서들이 자신들의 동작과 함께 진행함에 따라, 굵은 흑색의 출력 픽셀 블록들의 개수는 수평방향에서 우측으로 증가할 것이다. 앞에서 논의된 바와 같이, 라인 버퍼 유닛(101)은 (스텐실 프로세서들이 임의의 확장된 개수의 곧 다가올 싸이클(upcoming cycle)들에 대해 동작하기에 충분한) 임의의 들어오는 프레임으로부터의 입력 이미지 데이터의 라인 그룹을 파싱할 책임이 있다. 라인 그룹의 예시적 표현이 음영처리된 영역(203)으로서 예시되어 있다. 일 실시예에서, 라인 버퍼 유닛(101)은 라인 그룹을 시트 발생기로/로부터 전송/수신하기 위한 상이한 동적성질(dynamics)을 이해할 수 있다. 예를 들어, "전체 그룹(full group)"으로서 지칭되는 하나의 모드(mode)에 따르면, 이미지 데이터의 완전한 전체 폭 라인들이 라인 버퍼 유닛과 시트 발생기 간에 전달된다. "가상적으로 높은 높이(virtually tall)"로 지칭되는 또 다른 모드에 따르면, 라인 그룹은 초기에 전체 폭 횡렬들의 서브세트(subset)와 함께 전달된다. 그 다음에, 나머지 횡렬들은 더 작은(전체 폭보다 더 적은) 조각(piece)들로 순차적으로 전달된다.
라인 버퍼 유닛에 의해 정의된 입력 이미지 데이터의 라인 그룹(203)이 시트 발생기 유닛으로 전달되는 경우, 시트 발생기 유닛은 또한, 라인 그룹을 스텐실 프로세서의 하드웨어 제한사항들에 더 정확히 적합한 더 세밀한 시트들로 파싱한다. 더 구체적으로 살펴보면, 아래에서 또한 더 상세히 설명되는 바와 같이, 일 실시예에서, 각각의 스텐실 프로세서는 2차원 시프트 레지스터 어레이로 구성된다. 2차원 시프트 레지스터 어레이는 본질적으로 이미지 데이터를 실행 레인들의 어레이 "밑에서(beneath)" 시프트시키고, 여기서 시프트를 행하는 패턴은 각각의 실행 레인으로 하여금 자기 자신의 각각의 스텐실 내의 데이터에 관해 동작하도록 한다(즉, 각각의 실행 레인은 자기 자신의 스텐실에 관해 프로세싱을 수행하는데 해당 스텐실에 대한 출력을 발생시키기 위한 정보에 관해서 해당 스텐실에 관해 프로세싱을 수행함). 일 실시예에서, 시트들은 2차원 시프트 레지스터 어레이 안을 "채우는(fill)" 혹은 그렇지 않으면 2차원 시프트 레지스터 어레이 안으로 로딩되는, 입력 이미지 데이터의 표면 영역들이다.
아래에서 더 상세히 설명되는 바와 같이, 다양한 실시예들의 경우, 임의의 싸이클 상에서 시프트될 수 있는 2차원 레지스터 데이터의 복수의 계층들이 실제로 존재한다. 설명의 편의를 위해, 본 설명의 많은 부분은, 시프트될 수 있는 2-차원 레지스터 데이터의 하나 이상의 이러한 계층들을 갖는 구조들을 지칭하기 위해, 간단히 용어 "2-차원 시프트 레지스터" 등을 사용할 것이다.
따라서, 도 2b에서 보여지는 바와 같이, 시트 발생기는 라인 그룹(203)으로부터 초기 시트(204)를 파싱하고, 이것을 스텐실 프로세서에게 제공한다(여기서, 데이터의 시트는 도면 참조 번호 204에 의해 전반적으로 식별되는 음영처리된 영역에 대응함). 도 2c 및 도 2d에서 보여지는 바와 같이, 스텐실 프로세서는, 중첩하는 스텐실들(202)을 시트 위에서 좌측에서 우측으로 진행하는 방식으로 효과적으로 이동시킴으로써 입력 이미지 데이터의 시트에 관해 동작한다. 도 2d에서와 같은 경우, 시트 내의 데이터로부터 출력 값이 계산될 수 있게 하는 픽셀들의 개수는 소진(exhaust)된다(어떠한 다른 픽셀 위치들도 시트 내의 정보로부터 결정되는 출력 값을 가질 수 없음). 간결한 설명을 위해, 이미지의 가장자리 영역(border region)들은 무시되었다.
도 2e에서 보여지는 바와 같이, 그 다음에 시트 발생기는 스텐실 프로세서가 동작들을 계속 수행하게 될 다음 시트(205)를 제공한다. 다음 시트 상에서 동작이 시작됨에 따른 스텐실들의 초기 위치들은, (도 2d에서 이전에 도시된 바와 같이) 첫 번째 시트 상에서의 소진 지점으로부터 우측 옆으로 진행한 곳임에 유의해야 한다. 새로운 시트(205)에 대해서, 첫 번째 시트의 프로세싱과 동일한 방식으로 스텐실 프로세서가 새로운 시트에 관해 동작함에 따라 스텐실들은 간단히 우측으로 계속 이동할 것이다.
출력 픽셀 위치를 둘러싸는 스텐실들의 가장자리 영역들로 인해 첫 번째 시트(204)의 데이터와 두 번째 시트(205)의 데이터 간에 약간의 중복(overlap)이 존재함에 유의해야 한다. 이러한 중복은 시트 발생기가 그 중복되는 데이터를 두 번 재-전송함으로써 간단히 처리될 수 있다. 대안적 구현예들에서, 스텐실 프로세서에게 다음 시트를 공급하기 위해서, 시트 발생기는 스텐실 프로세서에게 단지 새로운 데이터만을 전송하도록 진행할 수 있고, 그리고 스텐실 프로세서는 이전의 시트로부터의 중복되는 데이터를 재사용한다.
b. 스텐실 프로세서 설계 및 동작(stencil processor design and operation)
도 3은 스텐실 프로세서 아키텍처(300)의 실시예를 보여준다. 도 3에서 보여지는 바와 같이, 스텐실 프로세서는 데이터 컴퓨테이션 유닛(data computation unit)(301), 스칼라 프로세서(scalar processor)(302) 및 관련된 메모리(303), 그리고 I/O 유닛(304)을 포함한다. 데이터 컴퓨테이션 유닛(301)은 실행 레인들(305), 2-차원 시프트 어레이 구조(306), 그리고 어레이의 특정 횡렬들 혹은 종렬들과 관련된 별개의 랜덤 액세스 메모리들(random access memories)(307)을 포함한다.
I/O 유닛(304)은 시트 발생기로부터 수신된 데이터의 "입력" 시트들을 데이터 컴퓨테이션 유닛(301)으로 로딩하는 것, 그리고 스텐실 프로세서로부터의 데이터의 "출력" 시트들을 시트 발생기에 저장하는 것을 수행할 책임이 있다. 일 실시예에서, 시트 데이터를 데이터 컴퓨테이션 유닛(301)으로 로딩하는 것은, 수신된 시트를 이미지 데이터의 횡렬들/종렬들로 파싱하는 것, 그리고 이미지 데이터의 횡렬들/종렬들을 2차원 시프트 레지스터 구조(306)로 로딩하거나, 혹은 실행 레인 어레이의 횡렬들/종렬들의 각각의 랜덤 액세스 메모리들(307)로 로딩하는 것을 수반한다(이것에 대해서는 아래에서 더 상세히 설명됨). 만약 시트가 초기에 메모리들(307) 안으로 로딩된다면, 실행 레인 어레이(305) 내의 개개의 실행 레인들은 적절한 경우 (예를 들어, 시트의 데이터에 관한 동작이 수행되기 직전의 로딩 명령으로서) 랜덤 액세스 메모리들(307)로부터 시트 데이터를 2-차원 시프트 레지스터 구조(306) 안으로 로딩할 수 있다. (시트 발생기로부터 직접 왔는지 아니면 메모리들(307)로부터 왔는지에 상관없이) 레지스터 구조(306) 안으로 데이터의 시트가 로딩되는 것이 완료되는 경우, 실행 레인 어레이(305)의 실행 레인들은 데이터에 관해 동작하고, 궁극적으로 처리가 끝난 데이터를 임의의 시트로서 시트 발생기에 다시 직접적으로 "재기입(write back)"하거나 혹은 랜덤 액세스 메모리들(307) 안으로 "재기입"한다. 만약 후자의 경우라면, I/O 유닛(304)은 출력 시트를 형성하기 위해 랜덤 액세스 메모리들(307)로부터 데이터를 인출하고, 그 다음에 이것은 시트 발생기로 전달된다.
스칼라 프로세서(302)는 프로그램 제어기(program controller)(309)를 포함하고, 프로그램 제어기(309)는 스칼라 메모리(303)로부터 스텐실 프로세서의 프로그램 코드의 명령들을 판독하고 이러한 명령들을 실행 레인 어레이(305) 내의 실행 레인들에 발행(issue)한다. 일 실시예에서, 단일의 동일한 명령이 어레이(305) 내의 모든 실행 레인들에게 브로드캐스팅(broadcasting)되어 데이터 컴퓨테이션 유닛(301)으로부터 SIMD와 유사한 동작이 실행되게 된다. 일 실시예에서, 스칼라 메모리(303)로부터 판독되어 실행 레인 어레이(305)의 실행 레인들에 발행되는 명령들의 명령 포맷(instruction format)은 명령 당 하나보다 많은 오피코드(opcode)를 포함하는 매우-긴-명령-워드(Very-Long-Instruction-Word, VLIW) 타입 포맷을 포함한다. 추가 실시예에서, VLIW 포맷은, 각각의 실행 레인의 ALU에 의해 수행되는 수학적 기능(mathematical function)을 제어하는 ALU 오피코드(이것은 아래에서 설명되는 바와 같이, 일 실시예에서, 하나보다 많은 전통적인 ALU 동작을 특정할 수 있음), 그리고 메모리 오피코드(이것은 특정 실행 레인 혹은 실행 레인들의 세트에 대한 메모리 동작을 제어함)를 모두 포함한다.
용어 "실행 레인"은 명령을 실행할 수 있는 하나 이상의 실행 유닛들의 세트를 지칭한다(예를 들어, 명령을 실행할 수 있는 논리 회로(logic circuitry)). 하지만, 실행 레인은, 다양한 실시예들에서, 단지 이와 같은 실행 유닛들을 뛰어넘어 프로세서와 더 유사한 기능을 포함할 수 있다. 예를 들어, 하나 이상의 실행 유닛들 이외에도, 실행 레인은 또한, 수신된 명령을 디코딩하는 논리 회로를 포함할 수 있거나, 혹은 MIMD와 더 유사한 설계들의 경우에는, 명령을 인출 및 디코딩하는 논리 회로를 포함할 수 있다. MIMD와 유사한 접근법들과 관련하여, 비록 중앙집중형 프로그램 제어 접근법이 본 명세서에서 주로 설명되었지만, 더 분산형 접근법이 다양한 대안적 실시예들에서 구현될 수 있다(예를 들어, 어레이(305)의 각각의 실행 레인 내에 프로그램 코드 및 프로그램 제어기가 포함되는 것).
실행 레인 어레이(305)와 프로그램 제어기(309)와 그리고 2차원 시프트 레지스터 구조(306)의 조합은 광범위하게 프로그래밍가능한 기능들을 위한 폭넓게 조정가능한/구성가능한 하드웨어 플랫폼을 제공한다. 예를 들어, 개개의 실행 레인들이 매우 다양한 기능들을 수행할 수 있고 임의의 출력 어레이 위치에 근접하여 입력 이미지 데이터에 용이하게 액세스할 수 있다는 점을 고려하여 볼 때, 애플리케이션 소프트웨어 개발자들은 광범위한 서로 다른 기능적 능력뿐만 아니라 치수(예를 들어, 스텐실 크기)를 갖는 커널들을 프로그래밍할 수 있다.
실행 레인 어레이(305)에 의해 동작이 수행되게 되는 이미지 데이터에 대한 데이터 저장으로서 동작하는 것과는 별개로, 랜덤 액세스 메모리들(307)은 또한 하나 이상의 참조 테이블(look-up table)들을 유지시킬 수 있다. 다양한 실시예들에서, 하나 이상의 스칼라 참조 테이블들이 또한 스칼라 메모리(303) 내에서 인스턴스화(instantiate)될 수 있다.
스칼라 참조(scalar look-up)는 동일한 인덱스(index)로부터 동일한 참조 테이블로부터의 동일한 데이터 값을 실행 레인 어레이(305) 내의 실행 레인들 각각으로 전달하는 것을 수반한다. 다양한 실시예들의 경우, 앞에서 설명된 VLIW 명령 포맷은, 스칼라 프로세서에 의해 수행되는 참조 동작(look-up operation)을 스칼라 참조 테이블로 지향시키는 스칼라 오피코드를 또한 포함하도록 확장된다. 오피코드와 함께 사용하기 위해 특정되는 인덱스는 즉시 오퍼랜드(immediate operand)일 수 있거나, 혹은 어떤 다른 데이터 저장 위치로부터 인출될 수 있다. 좌우간, 일 실시예에서, 스칼라 메모리 내의 스칼라 참조 테이블로부터의 참조는 본질적으로, 동일한 클럭 싸이클(clock cycle) 동안 실행 레인 어레이(305) 내의 모든 실행 레인들에게 동일한 데이터 값을 브로드캐스팅하는 것을 수반한다. 참조 테이블들의 사용 및 동작에 관한 추가적인 세부사항들이 아래에서 더 제공된다.
도 4는 데이터 컴퓨테이션 컴포넌트(401)의 실시예를 보여준다. 도 4에서 보여지는 바와 같이, 데이터 컴퓨테이션 컴포넌트(401)는, 2-차원 시프트 레지스터 어레이 구조(406) "위에(above)"에 논리적으로 위치하는 실행 레인들의 어레이(405)를 포함한다. 앞에서 논의된 바와 같이, 다양한 실시예들에서, 시트 발생기에 의해 제공되는 이미지 데이터의 시트는 2-차원 시프트 레지스터(406) 안으로 로딩된다. 그 다음에, 실행 레인들은 레지스터 구조(406)로부터의 시트 데이터에 관해 동작한다.
실행 레인 어레이(405)와 시프트 레지스터 구조(406)는 서로에 대해 상대적인 위치에 고정되어 있다. 하지만, 시프트 레지스터 어레이(406) 내의 데이터는 전략적이고 조정되는 방식으로 시프트되어 실행 레인 어레이 내의 각각의 실행 레인으로 하여금 데이터 내의 상이한 스텐실을 프로세싱하도록 한다. 이에 따라, 각각의 실행 레인은 발생되는 출력 시트 내에서의 상이한 픽셀에 대한 출력 이미지 값을 결정한다. 도 4의 아키텍처로부터 명백해지는 것은, 중첩하는 스텐실들이 수직으로 정렬될 뿐만 아니라 수평으로도 정렬된다는 것인데, 왜냐하면 실행 레인 어레이(405)는 수직으로 인접하는 실행 레인들뿐만 아니라 수평으로 인접하는 실행 레인들도 포함하고 있기 때문이다.
데이터 컴퓨테이션 유닛(401)의 약간 주목해야할 아키텍처 특징들은 실행 레인 어레이(405)보다 더 넓은 폭의 치수들을 갖는 시프트 레지스터 구조(406)를 포함하는 것이다. 즉, 실행 레인 어레이(405) 바깥쪽에 레지스터들(409)의 "할로(halo)"가 존재한다. 할로(409)가 실행 레인 어레이의 2개의 측면들 상에 존재하는 것으로 보여지고 있지만, 구현에 따라서, 할로는 실행 레인 어레이(405)의 더 적은 개수(1개) 또는 더 많은 개수(3개 혹은 4개)의 측면들 상에 존재할 수 있다. 할로(405)는, 데이터가 실행 레인들(405) "밑에서(beneath)" 시프트되고 있음에 따라, 실행 레인 어레이(405)의 경계(bound)들 바깥쪽으로 유출(spill)되는 데이터를 위한 "유출(spill-over)" 공간을 제공하는 역할을 한다. 간단한 경우로서, 실행 레인 어레이(405)의 우측 가장자리 상에 중심을 둔 5x5 스텐실은, 스텐실의 가장 좌측 픽셀들이 프로세싱될 때, 우측으로 4개의 할로 레지스터 위치들이 더 필요할 것이다. 도면의 용이한 도시를 위해, 도 4에서는, 할로의 우측면의 레지스터들이 오로지 수평방향 시프트 연결들만을 갖는 것으로 제시되었고, 할로의 하부측면의 레지스터들이 오로지 수직방향 시프트 연결들만을 갖는 것으로 제시되었다(통상적인 실시예에서, 두 개의 측면들(우측면, 하부측면) 상의 레지스터들은 수평 연결들 및 수직 연결들을 모두 갖게 됨).
추가적인 유출 공간은 어레이 내의 각각의 횡렬 및/또는 각각의 종렬에 결합되는 혹은 그 일부분에 결합되는 랜덤 액세스 메모리들(307)에 의해 제공된다(예를 들어, 횡렬방향으로 4개의 실행 레인들 그리고 종렬방향으로 2개의 실행 레인들에 걸쳐 있는 실행 레인 어레이의 "영역(region)"에 임의의 랜덤 액세스 메모리가 할당될 수 있음). 간결한 설명을 위해, 본 명세서의 나머지는 주로 종렬 및/또는 횡렬 기반 할당 방식들을 참조할 것이다. 여기서, 만약 임의의 실행 레인의 커널 동작들이 (일부 이미지 프로세싱 루틴(image processing routine)들이 요구할 수 있는) 2-차원 시프트 레지스터 어레이(406)의 바깥쪽에 있는 픽셀 값들의 프로세싱을 요구한다면, 이미지 데이터의 평면(plane)은 예를 들어, 할로 영역(409)으로부터 랜덤 액세스 메모리(407)로 더 유출될 수 있다. 예를 들어, 하드웨어가 실행 레인 어레이의 우측 가장자리 상에 있는 실행 레인의 우측에 단지 4개의 저장 요소들의 할로 영역을 포함하는 6X6 스텐실을 고려한다. 이러한 경우에, 데이터는 스텐실을 완전히 프로세싱하기 위해 할로(409)의 우측 가장자리를 벗어나 우측으로 더 시프트될 필요가 있게 된다. 이 경우, 할로 영역(409) 바깥쪽으로 시프트되는 데이터는 랜덤 액세스 메모리(407)로 유출되게 된다. 도 3의 스텐실 프로세서 및 랜덤 액세스 메모리들(407)의 다른 응용들이 아래에서 더 제공된다.
도 5a 내지 도 5k는, 앞에서 언급된 바와 같이, 실행 레인 어레이 "밑에" 있는 2차원 시프트 레지스터 어레이 내에서 이미지 데이터가 시프트되는 방식의 작동 예를 보여준다. 도 5a에서 보여지는 바와 같이, 2차원 시프트 어레이의 데이터 콘텐츠들(data contents)이 제 1 어레이(507) 내에 도시되어 있고, 실행 레인 어레이가 프레임(505)에 의해 도시되어 있다. 또한, 실행 레인 어레이 내의 2개의 이웃하는 실행 레인들(510)이 극히 단순화되어 도시되어 있다. 이처럼 단순화된 표현(510)에서, 각각의 실행 레인은, 레지스터(R1)를 포함하는데, 레지스터(R1)는 시프트 레지스터로부터의 데이터를 수용할 수 있고, (예를 들어, 싸이클들에 걸쳐 누산기(accumulator)로서 동작하기 위해) ALU 출력으로부터의 데이터를 수용할 수 있고, 혹은 출력 데이터를 출력 목적지 안으로 기입할 수 있다.
각각의 실행 레인은 또한 로컬 레지스터(local register)(R2)에서 이용가능한 콘텐츠들을 갖는데, 이러한 콘텐츠들은 2차원 시프트 어레이 내에서 실행 레인 "밑에" 있다. 따라서, R1은 실행 레인의 물리적 레지스터이고, 반면 R2는 2차원 시프트 레지스터 어레이의 물리적 레지스터이다. 실행 레인은 R1 및/또는 R2에 의해 제공되는 오퍼랜드들에 관해 동작할 수 있는 ALU를 포함한다. 아래에서 또한 더 상세히 설명되는 바와 같이, 일 실시예에서, 시프트 레지스터는 실제에 있어서는 어레이 위치 당 복수의(임의 "깊이(depth)"의) 저장/레지스터 요소들로 구현되지만, 시프트 동작은 저장 요소들의 하나의 평면으로만 한정된다(예를 들어, 저장 요소들의 단지 하나의 평면만이 싸이클 당 시프트될 수 있음). 도 5a 내지 도 5k는 이러한 더 깊은 레지스터 위치(deeper register location)들 중 하나를 각각의 실행 레인들로부터의 결과값(X)을 저장하기 위해 사용되는 것으로 도시한다. 용이한 예시를 위해, 더 깊은 결과값 레지스터(deeper resultant register)는 그 상응하는 레지스터(R2) 밑이 아니라 옆에 나란히 도시된다.
도 5a 내지 도 5k는 실행 레인 어레이 내에 도시된 한 쌍의 실행 레인 위치들(511)에 맞춰 그 중심 위치가 정렬되는 2개의 스텐실들을 계산하는 것에 초점을 맞추고 있다. 용이한 예시를 위해, 한 쌍의 실행 레인들(510)이 수평방향의 이웃들로서 도시된다(실제로는, 다음의 예에 따르면, 이들은 수직방향의 이웃들임).
도 5a에서 초기에 보여지는 바와 같이, 실행 레인들은 이들의 중앙의 스텐실 위치들 상에 그 중심을 두고 있다. 도 5b는 양쪽 실행 레인들에 의해 실행되는 객체 코드(object code)를 보여준다. 도 5b에서 보여지는 바와 같이, 양쪽 실행 레인들의 프로그램 코드는 시프트 레지스터 어레이 내의 데이터로 하여금 하측 방향으로 하나의 위치만큼의 시프트 및 우측 방향으로 하나의 위치만큼의 시프트를 행하도록 한다. 이것은 양쪽 실행 레인들을 이들의 각각의 스텐실들의 좌측 상단 코너(upper left hand corner)에 맞게 정렬시킨다. 그 다음에, 프로그램 코드는 그 각각의 위치들 내에(R2 내에) 위치하는 데이터가 R1 안으로 로딩되도록 한다.
도 5c에서 보여지는 바와 같이, 프로그램 코드는 다음으로 한 쌍의 실행 레인들로 하여금 시프트 레지스터 어레이 내의 데이터를 하나의 단위만큼 좌측으로 시프트하도록 하고, 이것은 해당 값을 각각의 실행 레인의 각각의 위치의 우측으로 가게 하여 각각의 실행 레인의 위치 안으로 시프트되도록 한다. 그 다음에, R1 내의 값(이전의 값)은 (R2 내의) 실행 레인의 위치 안으로 시프트된 새로운 값과 더해진다. 결과값이 R1 안으로 기입된다. 도 5d에서 보여지는 바와 같이, 도 5c에 대해 앞서 설명된 바와 동일한 프로세스가 반복되고, 이것은 결과값(R1)이 이제 상위 실행 레인 내의 값(A+B+C)과 하위 실행 레인 내의 값(F+G+H)을 포함하도록 한다. 이러한 시점에서, 양쪽 실행 레인들은 이들의 각각의 스텐실들의 위쪽 횡렬을 프로세싱하게 된다. 실행 레인 어레이의 좌측편 상의 할로 영역 안으로의 유출(할로 영역이 좌측편 상에 존재하는 경우임) 혹은 만약 할로 영역이 실행 레인 어레이의 좌측편 상에 존재하지 않는다면 랜덤 액세스 메모리 안으로의 유출이 발생됨에 유의해야 한다.
도 5e에서 보여지는 바와 같이, 프로그램 코드는 다음으로 시프트 레지스터 어레이 내의 데이터로 하여금 하나의 단위만큼 상측 방향으로 시프트하도록 하고, 이것은 양쪽 실행 레인들이 그들의 각각의 스텐실들의 가운데 횡렬의 우측 가장자리에 맞춰 정렬되도록 한다. 양쪽 실행 레인들의 레지스터(R1)는 현재 스텐실의 상부 횡렬 및 가운데 횡렬의 가장 우측 값의 합산(summation)을 포함한다. 도 5f 및 도 5g는 양쪽 실행 레인의 스텐실들의 가운데 횡렬을 가로질러 좌측방향으로 움직이는 계속되는 프로세스를 보여준다. 도 5g의 프로세싱의 끝에서 양쪽 실행 레인들이 이들 각각의 스텐실들의 상부 횡렬 및 가운데 횡렬의 값들의 합산을 포함하도록 누적적 추가(accumulative addition)가 계속된다.
도 5h는 각각의 실행 레인을 그 대응하는 스텐실의 가장 낮은 횡렬에 맞춰 정렬하기 위한 또 하나의 다른 시프트를 보여준다. 도 5i 및 도 5j는 양쪽 실행 레인들의 스텐실들의 진행과정에 걸쳐 프로세싱을 완료하기 위한 계속되는 시프트를 보여준다. 도 5k는 각각의 실행 레인을 데이터 어레이 내에서 그 올바른 위치에 맞게 정렬하고 거기에 결과값을 기입하기 위한 추가적인 시프트를 보여준다.
도 5a 내지 도 5k의 예에서, 시프트 동작들에 대한 객체 코드는 (X, Y) 좌표들로 표현되는 시프트의 방향 및 크기를 식별시키는 명령 포맷을 포함할 수 있음에 유의해야 한다. 예를 들어, 하나의 위치만큼 상측 방향으로의 시프트를 위한 객체 코드는 객체 코드에서 SHIFT 0, +1로서 표현될 수 있다. 또 하나의 다른 예로서, 하나의 위치만큼 우측 방향으로의 시프트는 객체 코드에서 SHIFT +1, 0으로서 표현될 수 있다. 다양한 실시예들에서, 더 큰 크기의 시프트들이 또한 객체 코드에서 특정될 수 있다(예를 들어, SHIFT 0, +2). 여기서, 만약 2D 시프트 레지스터 하드웨어가 단지 싸이클 당 하나의 위치만큼의 시프트들만을 지원한다면, 명령은 머신에 의해 복수의 싸이클 실행을 요구하도록 해석될 수 있거나, 또는 2D 시프트 레지스터 하드웨어는 싸이클 당 하나보다 많은 위치만큼의 시프트들을 지원하도록 설계될 수 있다. 후자의 실시예들이 아래에서 또한 더 상세히 설명된다.
도 6a는 어레이 실행 레인 및 시프트 레지스터 구조에 대한 유닛 셀의 또 하나의 다른 더 상세한 도면을 보여준다(할로 영역 내의 레지스터들은 대응하는 실행 레인을 포함하지 않음). 실행 레인과, 그리고 실행 레인 어레이 내의 각각의 위치와 관련된 레지스터 공간은, 일 실시예의 경우, 실행 레인 어레이의 각각의 노드(node)에서 도 6a에서 보여지는 회로를 인스턴스화함으로써 구현된다. 도 6a에서 보여지는 바와 같이, 유닛 셀은 4개의 레지스터들(R2 내지 R5)로 구성되는 레지스터 파일(register file)(602)에 결합되는 실행 레인(601)을 포함한다. 임의의 싸이클 동안, 실행 레인(601)은 레지스터들(R1 내지 R5) 중 임의의 레지스터로부터 판독을 행할 수 있고 혹은 임의의 레지스터에 기입을 행할 수 있다. 2개의 입력 오퍼랜드들을 요구하는 명령들에 대해, 실행 레인은 R1 내지 R5 중 임의의 것으로부터 양쪽 오퍼랜드들을 검색(retrieve)할 수 있다.
일 실시예에서, 2차원 시프트 레지스터 구조는, 단일의 싸이클 동안, 레지스터들(R2 내지 R4) 중 임의의 하나(단지 하나)의 레지스터의 콘텐츠들이 출력 멀티플렉서(output multiplexer)(603)를 통해 그 이웃하는 레지스터 파일들 중 하나의 레지스터 파일로 "출력(out)"으로 시프트될 수 있게 함으로써, 그리고 레지스터들(R2 내지 R4) 중 임의의 하나(단지 하나)의 레지스터의 해당 콘텐츠들이 임의의 대응하는 것으로부터 "입력(in)"으로 시프트되는 콘텐츠로 대체되게 함으로써(그 이웃들이 입력 멀티플렉서들(604)을 통해서 동일한 방향으로 이웃들 간의 시프트들이 일어나도록 되어 있는 경우임(예를 들어, 모든 실행 레인들이 좌측으로 시프트를 행하는 것, 모든 실행 레인들이 우측으로 시프트를 행하는 것, 등)), 구현된다. 동일한 레지스터가 자신의 콘텐츠들로 하여금 출력으로 시프트되게 하고 동일한 싸이클 상에서 입력으로 시프트되는 콘텐츠로 대체되게 하는 것이 일반적일 수 있지만, 멀티플렉서 구성(603, 604)은 동일한 싸이클 동안 동일한 레지스터 파일 내에서 상이한 시프트 소스(shift source) 및 시프트 타겟(shift target) 레지스터들을 허용한다.
도 6a에서 도시되는 바와 같이, 시프트 시퀀스 동안 실행 레인은 콘텐츠를 출력으로 자신의 레지스터 파일(602)로부터 자신의 좌측, 우측, 상부 및 하부 이웃들 각각으로 시프트할 것임에 유의해야 한다. 동일한 시프트 시퀀스와 함께, 실행 레인은 또한 자신의 좌측, 우측, 상부 및 하부 이웃들 중 특정된 하나로부터의 콘텐츠를 자신의 레지스터 파일 안으로 시프트시킬 것이다. 다시 말해서, 시프트 출력 타겟 및 시프트 입력 소스는 모든 실행 레인들에 대해 동일한 시프트 방향으로 일관돼야 한다(예를 들어, 만약 시프트 출력이 우측 이웃으로의 출력이라면, 시프트 입력은 좌측 이웃으로부터 입력이어야 함).
비록 일 실시예에서, 단지 하나의 레지스터의 콘텐츠가 싸이클 당 실행 레인 단위로 시프트될 수 있어도, 다른 실시예들은 하나보다 많은 레지스터의 콘텐츠가 입력/출력으로 시프트되게 할 수 있다. 예를 들어, 만약 도 6a에서 보여지는 멀티플렉서 회로(603, 604)의 또 다른 인스턴스가 도 6a의 설계 안으로 통합된다면, 2개의 레지스터들의 콘텐츠는 동일한 싸이클 동안 출력/입력으로 시프트될 수 있다. 당연한 것으로, 단지 하나의 레지스터의 콘텐츠가 싸이클 당 시프트될 수 있는 실시예들에서, 복수의 레지스터들로부터의 시프트들은 수학적 동작(mathematical operation)들 간의 시프트들을 위해 더 많은 클럭 싸이클들을 소비함으로써 수학적 동작들 간에 일어날 수 있다(예를 들어, 2개의 레지스터들의 콘텐츠들은 수학적 동작들 간에 2개의 시프트 동작들을 소비함으로써 수학적 동작들 간에 시프트될 수 있음).
만약 실행 레인의 레지스터 파일들의 모든 콘텐츠보다 적은 콘텐츠가 시프트 시퀀스 동안 출력으로 시프트된다면, 각각의 실행 레인의 출력으로 시프트되지 않은 레지스터들의 콘텐츠는 제자리에서 유지됨(시프트되지 않음)에 유의해야 한다. 이처럼, 콘텐츠 내에서 시프트된 것으로 대체되지 않는 그러한 임의의 시프트되지 않은 콘텐츠는 시프트 싸이클에 걸쳐 실행 레인에 대해 로컬 상태로 유지된다. 각각의 실행 레인 내에서 보여지는 메모리 유닛("M")은, 실행 레인 어레이 내에서 실행 레인의 횡렬 및/또는 종렬과 관련된 랜덤 액세스 메모리 공간으로부터/으로 데이터를 로딩/저장하는데 사용된다. 여기서, 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차원 시프트 레지스터 구조 내의 데이터를 시프트시키기 위한 시프트 동작 명령들(right, left, up, down)을 지원한다. 앞에서 설명된 바와 같이, 프로그램 제어 명령들은 대부분 스텐실 프로세서의 스칼라 프로세서에 의해 실행된다.
도 7a는 2-차원 레지스터 어레이 구조의 논리적(그리고 잠재적으로는 물리적) 설계를 "위에서 아래를 향해(top down)" 바라본 도면의 실시예를 도시한다. 도 7a의 "위에서 아래를 향해" 바라본 도면은 본질적으로 도 6의 유닛 셀 설계 실시예와 부합하는 것이며, 여기서 특정 어레이 위치에서의 각각의 레지스터 파일은 자신의 좌측, 우측, 상측, 및 하측의 이웃하는 유닛 셀 위치의 레지스터 파일에 결합된다. 즉, 예를 들어, 도 7에서 보여지는 바와 같이, 레지스터 파일(A)은 레지스터 파일들(B, C, D 및 E)에 결합된다.
도 7b는 2-차원 레지스터 어레이 구조의 논리적(그리고 잠재적으로는 물리적) 설계를 "위에서 아래를 향해" 바라본 도면의 또 하나의 다른 실시예를 도시한다. 도 7b에서 보여지는 바와 같이, 유닛 셀들은 가장 가까이 있는 수직방향 및 수평방향 이웃들에 결합될 뿐만 아니라 "두 번째로" 가장 가까이 있는 수직방향 및 수평방향 이웃들에 결합된다. 예를 들어, 도 7b에서 보여지는 바와 같이, 유닛 셀(A)은 유닛 셀들(B, C, D 및 E)에 결합될 뿐만 아니라 유닛 셀들(F, G, H 및 I)에 결합된다. 도면의 용이한 도시 및 열람을 위해, 가장 가까이 있는 이웃 및 두 번째로 가장 가까이 있는 이웃과의 결합을 모두 가질 필요가 있는 연결들의 전체 세트를 구비한 유닛 셀로서 단지 유닛 셀(A)만이 도시되었다. 유닛 셀(A) 이외에, 단지 하나 걸러 있는 유닛 셀만이 임의의 특정 횡렬 혹은 종렬을 따라 두 번째로 가장 가까이 있는 이웃과의 결합을 보여준다(예를 들어, 유닛 셀(B)은 임의의 두 번째로 가장 가까이 있는 이웃과의 결합을 나타내지 않음). 본 명세서를 읽는 자는, 바람직한 실시예가, 예를 들어, 두 번째로 가장 가까이 있는 이웃과의 결합을 지원하기 위해 어레이 가장자리들로부터 충분히 떨어져 있는 아울러 코어(core) 내에 있는 유닛 셀들 모두에 대한 유닛 셀(A)의 결합을 포함하게 될 것이라 점을 이해할 것이다.
두 번째로 가장 가까이 있는 연결을 갖는 것은 레지스터 어레이를 통한 레지스터 값들의 더 빠른 전파를 제공한다. 예를 들어, 만약 레지스터 값이 4개의 위치들만큼 떨어져 있는 임의의 유닛 셀로 이동될 필요가 있다면, 도 7b의 어레이 구조는 2개의 싸이클들에서 이러한 이동을 달성할 수 있고, 반면 도 7b의 어레이 구조는 단지 4개의 싸이클들에서 동일한 이동을 달성할 수 있다. 도 7b의 실시예가 또한 가장 가까이 있는 이웃 연결들을 갖고 있음에 유의해야 한다. 따라서, 도 7b의 구조에 대한 실행 레인 명령 세트는 도 7a의 구조에 대한 실행 레인 명령 세트보다 확장성(expansive)이 더 좋을 수 있다(이전의 것이 1-홉(hop) 및 2-홉 MOV 명령들을 갖는 반면, 후자는 단지 1-홉 MOV 명령들만을 가짐).
상이한 개수의 홉 이동들 및 대응하는 어레이 구조 실시예들과 관련하여 그 개수 및 조합은, 신속한 레지스터 값 이동을 위한 필요성(need)과 어레이 구조 배선 밀도에 대한 허용범위(tolerance) 간의 적절하게 타협된 균형점(trade off balance)에 따라, 실시예마다 매우 다양하게 달라질 수 있다고 지적하는 것이 타당하다. 일부 실시예들은 세 번째로 가장 가까이 있는 이웃 및/또는 네 번째로 가장 가까이 있는 이웃과의 연결들을 지원할 수 있고, 다른 실시예들은 그렇지 않을 수 있다(네 번째로 가장 가까이 있는 이웃과의 연결들의 경우, 예를 들어, 도 7b에서 유닛 셀(D)은 유닛 셀(J)에 직접적으로 연결되게 됨). 일부 실시예들은 단지 가장 가까이 있는 이웃과의 연결들만을 가질 수 있고, 일부 실시예들은 세 번째 혹은 네 번째로 가장 가까이 있는 이웃과의 연결들을 가질 수 있는 등등이다. 고려가능한 것으로, 더 정교한 실시예들은 심지어 대각선 연결들도 지원할 수 있다(예를 들어, 도 7b에서 유닛 셀(A)이 유닛 셀(K) 및 자신의 다른 3개의 이웃하는 코너 유닛 셀들에 연결되는 것). 본 발명의 기술분야에서 통상의 기술을 가진 자들은, 도 6의 출력 멀티플렉서 구조(603)로부터의 팬-아웃(fan-out)을 확장시킴으로써, 그리고 입력 멀티플렉서 구조(604)에 대한 입력들의 소스들을 확장시킴으로써, 유닛 셀들 간의 다양한 확장된 연결들 중 임의의 연결이 용이하게 달성됨을 인식할 것이다.
도 8a는 2차원 레지스터 어레이 구조 내에서 횡렬 혹은 종렬을 따라 레지스터들을 논리적으로 정렬하는 예를 보여준다(도면의 용이한 도시를 위해, 레지스터 어레이는 단지 8x8의 치수들을 갖는데, 반면 실제 실행에 있어서, 이러한 치수들은 훨씬 더 클 수 있음). 여기서, 프로세싱되는 어레이 내의 이웃하는 픽셀들은 수치적으로 이웃하는 유닛 셀들 내에 위치할 것이다(예를 들어, 어레이 내의 한 쌍의 이웃하는 픽셀들은, 유닛 셀 3과 유닛 셀 5가 아닌, 유닛 셀 3과 유닛 셀 4 내에 배치될 것임). 도 8a의 논리적 설계는 또한, 첫 번째 논리적 유닛 셀 1을 연결(801)를 통해 마지막 유닛 셀 8에 결합시킴으로써 순환 능력(roll capability)을 포함한다(따라서, 실행 레인 어레이의 실행 레인들도 또한 순환 오피코드(roll opcode)를 포함할 수 있음).
하지만, 문제들이 일어날 수 있는데, 특히 커다란 치수의 어레이들의 경우에 그러한데, 만약 도 8a의 설계가 논리적 설계를 나타낼 뿐만 아니라 물리적 설계도 나타낸다면 문제들이 일어날 수 있다. 만약 도 8a의 접근법이 또한 물리적 설계를 나타낸다면, 연결(801)은, 유닛 셀 1과 유닛 셀 8의 쌍 이외의 유닛 셀 쌍들을 연결시키는 다른 와이어(wire)들의 길이와 비교해, 극도로 긴 길이의 와이어에 대응한다. 이러한 특정 와이어 길이 문제는 회로 타이밍(circuit timing)과 관련된 복잡한 문제들을 유발할 수 있다(모든 유닛 셀들 간의 모든 시프트 시간들을, 가장 느린 유닛 셀 1과 유닛 셀 8 간의 시프트 시간보다 더 적게 되지 않게 하여 느리게 함으로써, 또는 유닛 셀 1과 유닛 셀 8 간의 시프트들이 임의의 다른 이웃하는 유닛 셀들 간의 시프트들보다 더 많은 싸이클들을 사용한다는 것을 인식해야 하는 복잡한 문제들을 도입함으로써, 문제가 유발됨).
도 8b는 도 8a의 논리적 설계를 갖는 레지스터 어레이 구조의 횡렬 혹은 종렬에 대한 개선된 물리적 설계의 실시예를 보여준다. 여기서, 물리적 설계는 (논리적 설계에 따른) 단지 논리적 연결들과는 반대로 회로 구조들의 실제 레이아웃(layout)에 대응한다. 도 8b에서 보여지는 바와 같은 물리적 설계는, 해당 레이아웃의 논리에 토로이드 설계를 부여함으로써, 유닛 셀 1과 유닛 셀 8 간의 연결에 의해 요구되는 추가 길이를 다른 유닛 셀 사이에 분할시켜 삭감(amortize)시킨다. 예를 들어, 비록 유닛 셀 1이 물리적으로 유닛 셀 2에 연결되어 논리적 설계를 보존하게 되지만, 유닛 셀 8은 물리적으로 이들 사이에 위치한다. 결과적으로, 도 8b의 구조에서의 유닛 셀들 간의 최대 와이어 길이는 도 8a에서의 와이어(801)의 길이보다 훨씬 더 짧아지게 된다. 이에 따라, 8b의 구조의 타이밍 관련 복잡한 문제들은 앞서 언급된 도 8a의 구조의 타이밍 관련 복잡한 문제들을 피하게 된다. 일 실시예에서, 모든 유닛 셀들 간의 레지스터 콘텐츠의 순환은 단일 싸이클 내에서 일어날 수 있게 된다.
도 8c는 시트 발생기 혹은 랜덤 액세스 메모리(802)(예컨대, 도 4의 RAM들(407) 중 어느 하나)와 레지스터 어레이의 임의의 횡렬 혹은 종렬 간의 데이터 버스 구조가, 토로이드형의 물리적 레이아웃을 갖는 어레이 혹은 횡렬에 대해 올바른 논리적 연결들을 보존하기 위해서, 임의의 종류의 뒤섞여지는 구조(swizzled structure)(803)를 포함하는 것을 보여준다. 도 8d는 임의의 레지스터 값이 지나가게 되는 최대 거리가 4개의 유닛 셀들이 되는 그러한 4-홉 시프트들을 구현할 수 있는 또 하나의 다른 토로이드 구조를 보여준다. 여기서, 또 하나의 다른 뒤섞여지는 구조와 유사한 데이터 버스가 도 8d의 레지스터들과 시트 발생기 혹은 RAM 간에 존재하게 될 것임이 명백해 진다. 이에 따라, 토로이드형 물리적 레이아웃의 구현의 특징은 논리적 순서로 정렬되는 입력들을 연결하는 데이터 버스에 의한 뒤섞여지는 구조의 존재이다.
도 8a는 시프트 어레이 구조의 유닛 셀의 출력 멀티플렉서(804)로부터의 특별한 팬-아웃 회로를 보여준다. 여기서, 출력 멀티플렉서(804)는 도 6a의 출력 멀티플렉서(603)와 유사한 것으로 고려될 수 있다. 시프트 어레이가 더욱더 많은 연결들(1개의 홉, 2개의 홉, 등)을 지원하도록 설계됨에 따라, 출력 멀티플렉서(804)의 팬-아웃은 커진다. 멀티플렉서(804)의 팬-아웃이 커짐에 따라, 전력 소비가 점점 더 많은 문제가 될 수 있다. 도 8e는 1개의 홉 및 2개의 홉 연결들을 모두 완전히 지원하는 시프트 레지스터 어레이에 대한 출력 멀티플렉서(804)를 보여준다. 여기서, 도 8e에서 보여지는 논리 게이트(logic gate)들이 존재하지 않는다면, 멀티플렉서(804)에서의 새로운 출력(예를 들어, 새로운 시프트 출력 값)은 8개의 상이한 위치들(좌측 이웃, 우측 이웃, ..., 하부 방향으로 2개의 홉만큼 떨어진 이웃)로 브로드캐스팅되게 된다. 여기서, 본 발명의 기술분야에서 이해되는 바와 같이, 논리적 회로 내의 와이어의 진행 길이(run length)에 걸쳐 데이터에서의 변경은 "전환 동작(switching activity)"에 대응하고, 이것은 또한 전력을 소모한다.
멀티플렉서(804)의 출력에서 보여지는 8개의 논리 게이트들의 존재는 시프트 방향에 대응하는 실제 와이어 상을 제외하고는 임의의 이러한 데이터 변경을 방지하도록 설계된다. 예를 들어, 만약 시프트 방향이 우측으로 1-홉이라면, 바로 우측 이웃에 결합되는 게이트만이 멀티플렉서(804)의 출력이 통과할 수 있게 할 것이다. 다른 모든 논리 게이트들은 데이터 값이 다른 노드들(시프트 값이 필요하지 않은 노드들)로 전파되는 것을 막을 것이고 프로세스에서 시프트 동작의 전력 소비를 감소시킬 것이다.
c. 구현 실시예들(implementation embodiments)
앞에서 설명된 다양한 이미지 프로세서 아키텍처 특징들이 전통적인 의미에서의 이미지 프로세싱에 반드시 한정될 필요는 없고 따라서 이미지 프로세서가 다시-특징지어지도록 할 수 있는(혹은 하지 않을 수 있는) 다른 애플리케이션들에 적용될 수 있다고 지적하는 것이 타당하다. 예를 들어, 만약 앞에서 설명된 다양한 이미지 프로세서 아키텍처 특징들 중 임의의 특징이 실제 카메라 이미지들의 프로세싱과는 대조적으로 애니메이션(animation)의 생성 및/또는 발생 및/또는 렌더링(rendering)에서 사용되게 된다면, 이미지 프로세서는 그래픽 프로세싱 유닛(graphics processing unit)으로서 특징지어질 수 있다. 추가적으로, 앞에서 설명된 이미지 프로세서 아키텍처 특징들은 비디오 프로세싱(video processing), 시각 프로세싱(vision processing), 이미지 인식(image recognition) 및/또는 머신 학습(machine learning)과 같은 다른 기술적 애플리케이션들에 적용될 수 있다. 이러한 방식으로 적용되는 경우, 이미지 프로세서는 (예를 들어, 컴퓨팅 시스템의 CPU이거나 혹은 그 일부인) 더 범용의 프로세서와 통합될 수 있거나(예를 들어, 이러한 더 범용의 프로세서에 대한 보조-프로세서(co-processor)로서 통합될 수 있거나), 또는 컴퓨팅 시스템 내에서의 독립형 프로세서(standalone processor)일 수 있다.
앞에서 논의된 하드웨어 설계 실시예들은 반도체 칩(semiconductor chip) 내에서 구현될 수 있고, 그리고/또는 궁극적으로 반도체 제조 프로세스를 향하는 목표를 달성하기 위한 회로 설계의 서술(description)로서 구현될 수 있다. 후자의 경우에, 이러한 회로 서술들은, 상위/동작 레벨 회로 서술들(higher/behavioral level circuit descriptions)의 형태(예를 들어, VHDL 서술), 또는 하위 레벨 회로 서술(lower level circuit description)의 형태(예를 들어, 레지스터 전달 레벨(Register Transfer Level, RTL) 서술, 트랜지스터 레벨 서술(transistor level description) 혹은 마스크 서술(mask description)), 또는 이들의 다양한 조합들의 형태를 가질 수 있다. 회로 서술들은 전형적으로 컴퓨터 판독가능 저장 매체(예컨대, CD-ROM 혹은 다른 타입의 저장 기술) 상에 구현된다.
이전의 설명부분들로부터 타당하게 인식할 수 있는 것은, 앞에서 설명된 바와 같은 이미지 프로세서는 컴퓨팅 시스템 상에서 하드웨어로 구현될 수 있다는 것이다(예를 들어, 핸드헬드 디바이스(handheld device)의 카메라로부터의 데이터를 프로세싱하는 핸드헬드 디바이스의 시스템 온 칩(System on Chip, SOC)의 일부로서 구현될 수 있음). 이미지 프로세서가 하드웨어 회로로서 구현되는 경우들에서, 이미지 프로세서에 의해 프로세싱되는 이미지 데이터는 카메라로부터 직접적으로 수신될 수 있음에 유의해야 한다. 여기서, 이미지 프로세서는 별개의 카메라의 일부일 수 있거나, 혹은 통합된 카메라를 구비한 컴퓨팅 시스템의 일부일 수 있다. 후자의 경우에서, 이미지 데이터는 카메라로부터 직접적으로 수신될 수 있거나, 혹은 컴퓨팅 시스템의 시스템 메모리로부터 수신될 수 있다(예를 들어, 카메라는 자신의 이미지 데이터를 이미지 프로세스가 아니라 시스템 메모리로 전송함). 이전의 설명부분들에서 설명된 특징들 중 많은 특징들은 (애니메이션을 렌더링하는) 그래픽 프로세서 유닛에 적용가능하는 것에 또한 유의해야 한다.
도 9는 컴퓨팅 시스템의 예시적인 도면을 제공한다. 아래에서 설명되는 컴퓨팅 시스템의 컴포넌트들 중 많은 컴포넌트들은 통합된 카메라 및 관련된 이미지 프로세서를 갖는 컴퓨팅 시스템(예를 들어, 스마트폰 혹은 태블릿 컴퓨터와 같은 핸드헬드 디바이스)에 적용가능하다. 통상의 기술을 가진 자들은 이러한 두 가지를 용이하게 구별할 수 있을 것이다.
도 9에서 보여지는 바와 같이, 기본적인 컴퓨팅 시스템은, 중앙 프로세싱 유닛(central processing unit)(901)(이것은 예를 들어, 복수의 범용 프로세싱 코어들(915_1 내지 915_N)을 포함할 수 있고, 그리고 다중-코어 프로세서(multi-core processor) 혹은 애플리케이션들의 프로세서(applications processor) 상에 배치되는 메인 메모리 제어기(main memory controller)(917)를 포함할 수 있음), 시스템 메모리(system memory)(902), 디스플레이(display)(903)(예를 들어, 터치스크린(touchscreen), 평판-패널(flat-panel)), 로컬 유선 포인트-투-포인트 링크(local wired point-to-point link)(예를 들어, USB) 인터페이스(904), 다양한 네트워크 I/O 기능들(905)(예컨대, 이더넷 인터페이스(Ethernet interface) 및/또는 셀룰러 모뎀 서브시스템(cellular modem subsystem)), 무선 로컬 영역 네트워크(Wireless Local Area Network)(예를 들어, WiFi) 인터페이스(906), 무선 포인트-투-포인트 링크(wireless point-to-point link)(예를 들어, 블루투스(Bluetooth)) 인터페이스(907) 그리고 전지구 위치결정 시스템(Global Positioning System) 인터페이스(908), 다양한 센서들(sensors)(909_1 내지 909_N), 하나 이상의 카메라들(910), 배터리(battery)(911), 전력 관리 제어 유닛(power management control unit)(912), 스피커 및 마이크로폰(speaker and microphone)(913), 그리고 오디오 코더/디코더(audio coder/decoder)(914)를 포함할 수 있다.
애플리케이션들의 프로세서 혹은 다중-코어 프로세서(950)는, 자신의 CPU(901) 내의 하나 이상의 범용 프로세싱 코어들(915), 하나 이상의 그래픽 프로세싱 유닛들(916), 메모리 관리 기능(917)(예를 들어, 메모리 제어기), I/O 제어 기능(918) 그리고 이미지 프로세싱 유닛(918)을 포함할 수 있다. 범용 프로세싱 코어들(915)은 전형적으로 컴퓨팅 시스템의 운영 체계(operating system) 및 애플리케이션 소프트웨어를 실행한다. 그래픽 프로세싱 유닛들(916)은 전형적으로, 예컨대 디스플레이(903) 상에 제시되는 그래픽 정보를 발생시키기 위해 그래픽 집중 기능(graphics intensive function)들을 실행시킨다. 메모리 제어 기능(917)은 시스템 메모리(902)로/로부터 데이터를 기입/판독하기 위해 시스템 메모리(902)와 인터페이스한다. 전력 관리 제어 유닛(912)은 일반적으로 시스템(900)의 전력 소비를 제어한다.
이미지 프로세싱 유닛(Image Processing Unit, IPU)(919)은 이전의 설명부분들에서 앞서 상세히 설명된 이미지 프로세싱 유닛 실시예들 중 임의의 실시예에 따라 구현될 수 있다. 대안적으로 혹은 결합되어, IPU(919)는 GPU(916) 및 CPU(901) 중 어느 하나 혹은 양쪽 모두에 이들의 보조-프로세서로서 결합될 수 있다. 추가적으로, 다양한 실시예들에서, GPU(916)는 앞서 상세히 설명된 이미지 프로세서 특징들 중 임의의 특징을 갖도록 구현될 수 있다.
터치스크린 디스플레이(903), 통신 인터페이스들(904 내지 907), GPS 인터페이스(908), 센서들(909), 카메라(910), 및 스피커/마이크로폰 코덱(913, 914) 각각은 모두, 전체 컴퓨팅 시스템(적절한 경우 여기에는 통합된 주변 디바이스(예를 들어, 하나 이상의 카메라들(910))가 또한 포함됨)에 대한 I/O(입력(Input) 및/또는 출력(Output))의 다양한 형태들로서 고려될 수 있다. 구현에 따라, 이러한 I/O 컴포넌트들 중 다양한 컴포넌트들은 애플리케이션들의 프로세서/다중-코어 프로세서(950) 상에 통합될 수 있거나, 또는 다이(die)에서 떨어져 위치할 수 있고, 또는 애플리케이션들의 프로세서/다중-코어 프로세서(950)의 패키지(package) 외부에 위치할 수 있다.
일 실시예에서, 하나 이상의 카메라들(910)은 깊이 카메라(depth camera)를 포함하고, 여기서 깊이 카메라는 그 시계(field of view) 내에서의 객체와 카메라 간의 깊이를 측정할 수 있다. 애플리케이션들의 프로세서 혹은 다른 프로세서의 범용 CPU 코어(또는 프로그램 코드를 실행하기 위해 명령 실행 파이프라인을 갖는 다른 기능적 블록) 상에서 실행되는 애플리케이션 소프트웨어, 운영 체계 소프트웨어, 디바이스 드라이버 소프트웨어 및/또는 펌웨어는 앞에서 설명된 기능들 중 임의의 기능을 수행할 수 있다.
본 발명의 실시예들은 앞에서 설명된 바와 같은 다양한 프로세스들을 포함할 수 있다. 이러한 프로세스들은 머신-실행가능 명령(machine-executable instruction)들로 구현될 수 있다. 이러한 명령들은 범용 프로세서 혹은 특수-목적 프로세서로 하여금 특정 프로세스들을 수행하도록 하는데 사용될 수 있다. 대안적으로, 이러한 프로세스들은, 해당 프로세스들을 수행하기 위한 하드와이어드 논리회로(hardwired logic)를 포함하는 특정 하드웨어 컴포넌트들에 의해 수행될 수 있거나, 또는 프로그래밍된 컴퓨터 컴포넌트들과 맞춤형 하드웨어 컴포넌트들의 임의의 조합에 의해 수행될 수 있다.
본 발명의 요소들은 또한, 머신-실행가능 명령들을 저장하기 위한 머신-판독가능 매체로서 제공될 수 있다. 머신-판독가능 매체는, 플로피 디스켓들(floppy diskettes), 광학 디스크들(optical disks), CD-ROM들, 그리고 광-자기 디스크들(magneto-optical disks), 플래시 메모리(FLASH memory), ROM들, RAM들, EPROM들, EEPROM들, 자기적 혹은 광학적 카드들, 전파 매체들(propagation media), 또는 전자적 명령들을 저장하는데 적합한 매체들/머신-판독가능 매체의 다른 타입을 포함할 수 있지만, 이러한 것으로만 한정되는 것은 아니다. 예를 들어, 본 발명은 반송파(carrier wave) 혹은 다른 전파 매체에 구현되는 데이터 신호들을 사용하여 원격 컴퓨터(예를 들어, 서버(server))로부터 임의의 요청하는 컴퓨터(예를 들어, 클라이언트(client))로 통신 링크(communication link)(예를 들어, 모뎀 혹은 네트워크 연결)을 통해 전달될 수 있는 컴퓨터 프로그램으로서 다운로드될 수 있다.
앞서의 상세한 설명에서, 본 발명은 본 발명의 예시적인 특정 실시예들을 참조하여 설명되었다. 하지만, 첨부되는 청구항들에 기재된 바와 같은 본 발명의 넓은 사상 및 범위로부터 벗어남이 없이 이러한 실시예들에 관한 다양한 수정들 및 변경들이 이루어질 수 있음은 명백할 것이다. 이에 따라, 본 명세서 및 도면들은 한정적 의미로서 고려되는 것이 아니라 예시적 의미로서 고려돼야 한다.
Claims (29)
- 프로세서(processor)로서, 상기 프로세서는,
복수의 실행 레인(execution lane)들과; 그리고
2차원 시프트 레지스터 어레이(two-dimensional shift-register array)를 포함하고,
각각의 실행 레인들은 명령들을 실행할 수 있는 논리 회로(logic circuitry)를 포함하고,
상기 2차원 시프트 레지스터 어레이는 복수의 전기적으로 결합된 시프트 레지스터들을 포함하고,
각각의 실행 레인은 상기 2차원 시프트 레지스터 어레이 내에서 상기 실행 레인에 전용으로 사용되는 각각의 시프트 레지스터로부터의 데이터를 하나 이상의 인접하는 시프트 레지스터들로 시프트시키도록 되어 있고,
상기 하나 이상의 인접하는 시프트 레지스터들 각각은 상이한 실행 레인에 전용으로 사용되는 시프트 레지스터이고,
상기 프로세서는 복수의 중첩하는 스텐실(overlapping stencil)들에 걸쳐 스텐실 기능(stencil function)을 구현하는 명령들을 상기 복수의 실행 레인들 각각에 의해 실행시키도록 되어 있고,
상기 스텐실 기능을 구현하는 명령들을 각각의 실행 레인에 의해 실행시키는 것은 상기 실행 레인들로 하여금 상기 2차원 시프트 레지스터 어레이의 시프트 레지스터들 내의 데이터를 2차원적으로 복수의 횟수로 시프트시키도록 하여 각각의 실행 레인이 상기 스텐실 기능에 의해 정의되는 각각의 스텐실의 복수의 값들을 판독하게 하는 것을 특징으로 하는 프로세서. - 제1항에 있어서,
상기 복수의 실행 레인들 중 각각의 실행 레인은 산술 논리 유닛(arithmetic logic unit)을 포함하고, 상기 산술 논리 유닛은 상기 실행 레인에 전용으로 사용되는 하나 이상의 시프트 레지스터들에 대해 판독(read) 및 기입(write)을 수행하도록 되어 있는 것을 특징으로 하는 프로세서. - 제1항에 있어서,
상기 복수의 실행 레인들 중 모든 실행 레인들은 동일한 특정된 방향으로 상기 시프트 레지스터들 내의 데이터를 동시에 시프트시키도록 되어 있는 것을 특징으로 하는 프로세서. - 제1항에 있어서,
상기 프로세서는,
상기 2차원 시프트 레지스터 어레이의 두 개의 차원들 중 하나를 따르는 방향을 특정하는 시프트 명령을 수신하도록 되어 있고, 그리고
상기 복수의 실행 레인들 각각으로 상기 특정된 방향을 나타내는 데이터를 브로드캐스팅(broadcasting)하도록 되어 있는 것을 특징으로 하는 프로세서. - 제4항에 있어서,
상기 시프트 명령의 일부로서 방향을 수신함에 응답하여 상기 실행 레인들은 상기 2차원 시프트 레지스터 어레이 내의 데이터를 상기 2차원 시프트 레지스터 어레이의 동일한 방향을 따라 시프트시키도록 되어 있는 것을 특징으로 하는 프로세서. - 제1항에 있어서,
상기 프로세서는,
2차원 이미지 데이터(two-dimensional image data)의 시트(sheet)를 수신하도록 되어 있고, 그리고
상기 2차원 이미지 데이터의 시트의 개별 부분들을 상기 2차원 시프트 레지스터 어레이의 대응하는 시프트 레지스터들 내에 저장하도록 되어 있는 것을 특징으로 하는 프로세서. - 제1항에 있어서,
각각의 실행 레인은 랜덤 액세스 메모리(random access memory)에 대해 판독 혹은 기입을 수행함이 없이 상기 실행 레인에 전용으로 사용되는 시프트 레지스터로부터의 데이터를 이웃하는 시프트 레지스터로 시프트시키도록 되어있는 것을 특징으로 하는 프로세서. - 제1항에 있어서,
각각의 실행 레인은 상기 실행 레인의 산술 논리 유닛에 의해 데이터가 프로세싱됨이 없이 상기 실행 레인에 전용으로 사용되는 시프트 레지스터로부터의 데이터를 이웃하는 시프트 레지스터로 시프트시키도록 되어있는 것을 특징으로 하는 프로세서. - 제1항에 있어서,
각각의 실행 레인은 둘 이상의 상이한 타입(type)들을 갖는 전용 레지스터(dedicated register)들을 갖고, 상기 둘 이상의 상이한 타입들을 갖는 전용 레지스터들은 하나 이상의 전용 시프트 레지스터(dedicated shift register)들 및 하나 이상의 전용 임시 레지스터(dedicated temporary register)들을 포함하고, 각각의 실행 레인의 산술 논리 유닛은 상기 실행 레인의 상기 하나 이상의 전용 시프트 레지스터들 및 상기 하나 이상의 전용 임시 레지스터들에 대해 판독 및 기입을 수행하도록 되어 있는 것을 특징으로 하는 프로세서. - 제1항에 있어서,
상기 프로세서는 또한 복수의 할로 실행 레인(halo execution lane)들을 포함하고, 각각의 할로 실행 레인은 상기 2차원 시프트 레지스터 어레이 내의 상기 복수의 시프트 레지스터들 중 하나 이상의 시프트 레지스터들을 갖고,
상기 할로 실행 레인들에 전용으로 사용되는 시프트 레지스터들은 상기 2차원 시프트 레지스터 어레이의 가장자리(edge)들을 따라 위치하는 시프트 레지스터들인 것을 특징으로 하는 프로세서. - 제10항에 있어서,
상기 복수의 할로 실행 레인들 중 각각의 할로 실행 레인에는 산술 논리 유닛이 없는 것을 특징으로 하는 프로세서. - 컴퓨터로 구현되는 방법으로서,
상기 방법은 프로세서 내의 복수의 실행 레인들에 의해 복수의 중첩하는 스텐실들에 걸쳐 스텐실 기능을 실행하는 방법이고,
상기 프로세서는 2차원 시프트 레지스터 어레이를 포함하고, 상기 2차원 시프트 레지스터 어레이는 복수의 전기적으로 결합된 시프트 레지스터들을 포함하고, 상기 시프트 레지스터들 각각은 상이한 실행 레인에 전용으로 사용되는 시프트 레지스터이고,
상기 방법은,
상기 프로세서 내의 상기 복수의 실행 레인들 중 각각의 실행 레인에 의해, 상기 스텐실 기능을 구현하는 명령들을 수신하는 단계와,
여기서 각각의 실행 레인은 명령들을 실행할 수 있는 논리 회로를 포함하고,
각각의 실행 레인은 상기 2차원 시프트 레지스터 어레이 내에서 상기 실행 레인에 전용으로 사용되는 각각의 시프트 레지스터로부터의 데이터를 하나 이상의 인접하는 시프트 레지스터들로 시프트시키도록 되어 있고,
상기 하나 이상의 인접하는 시프트 레지스터들 각각은 상이한 실행 레인에 전용으로 사용되는 시프트 레지스터이며; 그리고
상기 복수의 실행 레인들 중 각각의 실행 레인에 의해, 상기 스텐실 기능을 구현하는 명령들을 실행시키는 단계를 포함하고,
상기 스텐실 기능을 구현하는 명령들을 각각의 실행 레인에 의해 실행시키는 것은 상기 실행 레인들로 하여금 상기 2차원 시프트 레지스터 어레이의 시프트 레지스터들 내의 데이터를 2차원적으로 복수의 횟수로 시프트시키도록 하여 각각의 실행 레인이 상기 스텐실 기능에 의해 정의되는 각각의 스텐실의 복수의 값들을 판독하게 하는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 제12항에 있어서,
상기 복수의 실행 레인들 중 각각의 실행 레인은 산술 논리 유닛을 포함하고, 상기 산술 논리 유닛은 상기 실행 레인에 전용으로 사용되는 하나 이상의 시프트 레지스터들에 대해 판독 및 기입을 수행하도록 되어 있는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 제12항에 있어서,
각각의 실행 레인에 의해, 상기 스텐실 기능을 구현하는 명령들을 실행시키는 것은 상기 실행 레인들로 하여금 상기 시프트 레지스터들 내의 데이터를 동일한 특정된 방향으로 동시에 시프트시키도록 하는 것을 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 제12항에 있어서,
시프트 명령이 상기 2차원 시프트 레지스터 어레이의 두 개의 차원들 중 하나를 따르는 방향을 특정하고,
상기 방법은 또한 상기 프로세서에 의해 상기 복수의 실행 레인들 각각으로 상기 특정된 방향을 나타내는 데이터를 브로드캐스팅하는 것을 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 제15항에 있어서,
상기 시프트 명령의 일부로서 방향을 수신함에 응답하여 상기 실행 레인들은 상기 2차원 시프트 레지스터 어레이 내의 데이터를 상기 2차원 시프트 레지스터 어레이의 동일한 방향을 따라 시프트시키도록 되어 있는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 제12항에 있어서,
상기 방법은 또한,
상기 프로세서에 의해 2차원 이미지 데이터의 시트를 수신하는 것과, 그리고
상기 프로세서에 의해 상기 2차원 이미지 데이터의 시트의 개별 부분들을 상기 2차원 시프트 레지스터 어레이의 대응하는 시프트 레지스터들 내에 저장하는 것을 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 제12항에 있어서,
각각의 실행 레인에 의해 상기 시프트 레지스터들 내의 데이터를 시프트시키는 것은 랜덤 액세스 메모리에 대해 판독 혹은 기입을 수행함이 없이 상기 실행 레인에 전용으로 사용되는 시프트 레지스터로부터의 데이터를 이웃하는 시프트 레지스터로 시프트시키는 것을 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 제12항에 있어서,
각각의 실행 레인에 의해 상기 시프트 레지스터 내의 데이터를 시프트시키는 것은 상기 실행 레인의 산술 논리 유닛에 의해 데이터가 프로세싱됨이 없이 상기 실행 레인에 전용으로 사용되는 시프트 레지스터로부터의 데이터를 이웃하는 시프트 레지스터로 시프트시키는 것을 포함하는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 제12항에 있어서,
각각의 실행 레인은 둘 이상의 상이한 타입들을 갖는 전용 레지스터들을 갖고, 상기 둘 이상의 상이한 타입들을 갖는 전용 레지스터들은 하나 이상의 전용 시프트 레지스터들 및 하나 이상의 전용 임시 레지스터들을 포함하고, 각각의 실행 레인의 산술 논리 유닛은 상기 실행 레인의 상기 하나 이상의 전용 시프트 레지스터들 및 상기 하나 이상의 전용 임시 레지스터들에 대해 판독 및 기입을 수행하도록 되어 있는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 제1항에 있어서,
상기 스텐실 기능을 구현하는 명령들을 실행시키는 것은 각각의 실행 레인으로 하여금 상기 각각의 스텐실의 상기 복수의 값들을 사용하도록 하여 상기 스텐실 기능에 따라 각각의 단일 출력 값을 컴퓨팅하게 하는 것을 특징으로 하는 프로세서. - 제12항에 있어서,
상기 스텐실 기능을 구현하는 명령들을 실행시키는 것은 각각의 실행 레인으로 하여금 상기 각각의 스텐실의 상기 복수의 값들을 사용하도록 하여 상기 스텐실 기능에 따라 각각의 단일 출력 값을 컴퓨팅하게 하는 것을 특징으로 하는 컴퓨터로 구현되는 방법. - 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/694,750 | 2015-04-23 | ||
US14/694,750 US9769356B2 (en) | 2015-04-23 | 2015-04-23 | Two dimensional shift array for image processor |
PCT/US2016/026786 WO2016171926A1 (en) | 2015-04-23 | 2016-04-08 | Two dimensional shift array for image processor |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020197024671A Division KR102202579B1 (ko) | 2015-04-23 | 2016-04-08 | 이미지 프로세서를 위한 2차원 시프트 어레이 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20170125395A KR20170125395A (ko) | 2017-11-14 |
KR102016097B1 true KR102016097B1 (ko) | 2019-08-29 |
Family
ID=55806822
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020197024671A KR102202579B1 (ko) | 2015-04-23 | 2016-04-08 | 이미지 프로세서를 위한 2차원 시프트 어레이 |
KR1020177028034A KR102016097B1 (ko) | 2015-04-23 | 2016-04-08 | 이미지 프로세서를 위한 2차원 시프트 어레이 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020197024671A KR102202579B1 (ko) | 2015-04-23 | 2016-04-08 | 이미지 프로세서를 위한 2차원 시프트 어레이 |
Country Status (7)
Country | Link |
---|---|
US (3) | US9769356B2 (ko) |
EP (1) | EP3286724B1 (ko) |
JP (2) | JP6389571B2 (ko) |
KR (2) | KR102202579B1 (ko) |
CN (1) | CN107430760B (ko) |
DE (1) | DE112016001844T5 (ko) |
WO (1) | WO2016171926A1 (ko) |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10061746B2 (en) * | 2014-09-26 | 2018-08-28 | Intel Corporation | Instruction and logic for a vector format for processing computations |
US9830150B2 (en) | 2015-12-04 | 2017-11-28 | Google Llc | Multi-functional execution lane for image processor |
US10313641B2 (en) | 2015-12-04 | 2019-06-04 | Google Llc | Shift register with reduced wiring complexity |
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 |
US10204396B2 (en) | 2016-02-26 | 2019-02-12 | Google Llc | Compiler managed memory for image processor |
US10380969B2 (en) | 2016-02-28 | 2019-08-13 | Google Llc | Macro I/O unit for image processor |
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 |
US10546211B2 (en) | 2016-07-01 | 2020-01-28 | Google Llc | Convolutional neural network on programmable two dimensional image processor |
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 |
US20180005059A1 (en) * | 2016-07-01 | 2018-01-04 | Google Inc. | Statistics Operations On Two Dimensional Image Processor |
US10789202B2 (en) * | 2017-05-12 | 2020-09-29 | Google Llc | Image processor with configurable number of active cores and supporting internal network |
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 |
US10915319B2 (en) * | 2017-05-15 | 2021-02-09 | Google Llc | Two dimensional masked shift instruction |
US10262701B2 (en) | 2017-06-07 | 2019-04-16 | Micron Technology, Inc. | Data transfer between subarrays in memory |
WO2020103766A1 (en) * | 2018-11-23 | 2020-05-28 | Huawei Technologies Co., Ltd. | Filter independent l1 mapping of convolution data into general purpose register |
US10552939B1 (en) | 2019-02-12 | 2020-02-04 | Google Llc | Image processor complex transfer functions |
Family Cites Families (86)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4380046A (en) * | 1979-05-21 | 1983-04-12 | Nasa | Massively parallel processor computer |
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 |
US4797852A (en) * | 1986-02-03 | 1989-01-10 | Intel Corporation | Block shifter for graphics processor |
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 |
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 | ソニー株式会社 | 画像データ処理装置および画像データ処理方法 |
US6058473A (en) | 1993-11-30 | 2000-05-02 | Texas Instruments Incorporated | Memory store from a register pair conditional upon a selected status bit |
US5612693A (en) * | 1994-12-14 | 1997-03-18 | International Business Machines Corporation | Sliding window data compression using a toroidal bit shift register |
EP0875031B1 (de) | 1996-01-15 | 2001-06-20 | Infineon Technologies AG | Prozessor zur bildverarbeitung |
US5892962A (en) | 1996-11-12 | 1999-04-06 | Lucent Technologies Inc. | FPGA-based processor |
US6366289B1 (en) | 1998-07-17 | 2002-04-02 | Microsoft Corporation | Method and system for managing a display image in compressed and uncompressed blocks |
US6587158B1 (en) | 1998-07-23 | 2003-07-01 | Dvdo, Inc. | Method and apparatus for reducing on-chip memory in vertical video processing |
US7010177B1 (en) | 1998-08-27 | 2006-03-07 | Intel Corporation | Portability of digital images |
US6757019B1 (en) * | 1999-03-13 | 2004-06-29 | The Board Of Trustees Of The Leland Stanford Junior University | Low-power parallel processor and imager having peripheral control circuitry |
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 |
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 |
EP1322117A1 (fr) | 2001-12-06 | 2003-06-25 | Koninklijke Philips Electronics N.V. | Dispositif de codage/décodage arithmétique |
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 |
CN1215553C (zh) * | 2002-04-17 | 2005-08-17 | 西安交通大学 | 一种内在并行的二维离散小波变换的vlsi结构的设计方法 |
US7084929B2 (en) * | 2002-07-29 | 2006-08-01 | Koninklijke Philips Electronics N.V. | Video data filtering arrangement and method |
AU2003286131A1 (en) | 2002-08-07 | 2004-03-19 | Pact Xpp Technologies Ag | Method and device for processing data |
GB2395299B (en) * | 2002-09-17 | 2006-06-21 | Micron Technology Inc | Control of processing elements in parallel processors |
CN1187698C (zh) * | 2003-04-07 | 2005-02-02 | 西安交通大学 | 内在并行的二维离散小波变换的vlsi结构设计方法 |
US20060044576A1 (en) | 2004-07-30 | 2006-03-02 | Kabushiki Kaisha Toshiba | Apparatus for image processing |
US7199915B2 (en) * | 2004-03-26 | 2007-04-03 | Avago Technologies Fiber Ip (Singapore) Pte. Ltd. | Buffers for light modulation elements in spatial light modulators |
US7667764B2 (en) | 2004-06-04 | 2010-02-23 | Konica Minolta Holdings, Inc. | Image sensing apparatus |
KR100614647B1 (ko) * | 2004-07-02 | 2006-08-22 | 삼성전자주식회사 | 디블록킹 필터에서의 효과적인 에지 필터링 연산을 위한레지스터 어레이 구조 |
JP4219887B2 (ja) | 2004-12-28 | 2009-02-04 | 富士通マイクロエレクトロニクス株式会社 | 画像処理装置及び画像処理方法 |
ATE504043T1 (de) | 2005-04-28 | 2011-04-15 | Univ Edinburgh | Umkonfigurierbares anweisungs-zellen-array |
US7882339B2 (en) | 2005-06-23 | 2011-02-01 | Intel Corporation | Primitives to enhance thread-level speculation |
JP2007034887A (ja) * | 2005-07-29 | 2007-02-08 | Matsushita Electric Ind Co Ltd | ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成するための方法および装置 |
JP2007067917A (ja) | 2005-08-31 | 2007-03-15 | Matsushita Electric Ind Co Ltd | 画像データ処理装置 |
JP4712503B2 (ja) * | 2005-09-29 | 2011-06-29 | 富士通セミコンダクター株式会社 | リコンフィグ可能な画像処理用アドレス生成回路及びそれを有するリコンフィグlsi |
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 |
JP4934356B2 (ja) * | 2006-06-20 | 2012-05-16 | 株式会社日立製作所 | 映像処理エンジンおよびそれを含む映像処理システム |
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 | ブラザー工業株式会社 | 画像処理装置および画像処理プログラム |
US20090046105A1 (en) * | 2007-08-15 | 2009-02-19 | Bergland Tyson J | Conditional execute bit in a graphics processor unit pipeline |
JP4844853B2 (ja) | 2007-09-05 | 2011-12-28 | 国立大学法人東北大学 | 固体撮像素子及びその駆動方法 |
CN102047241B (zh) | 2008-05-30 | 2014-03-12 | 先进微装置公司 | 本地与全局数据共享 |
JP4999791B2 (ja) | 2008-06-30 | 2012-08-15 | キヤノン株式会社 | 情報処理装置、その制御方法、及びプログラム |
JP5435902B2 (ja) | 2008-07-07 | 2014-03-05 | サーパス工業株式会社 | 流量調整弁 |
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 |
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 |
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 | 晨星半導體股份有限公司 | 影像處理裝置與影像處理方法 |
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 |
US9378181B2 (en) | 2012-11-09 | 2016-06-28 | Intel Corporation | Scalable computing array |
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 |
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 |
-
2015
- 2015-04-23 US US14/694,750 patent/US9769356B2/en active Active
-
2016
- 2016-04-08 JP JP2017550909A patent/JP6389571B2/ja active Active
- 2016-04-08 CN CN201680019863.0A patent/CN107430760B/zh active Active
- 2016-04-08 DE DE112016001844.4T patent/DE112016001844T5/de active Pending
- 2016-04-08 KR KR1020197024671A patent/KR102202579B1/ko active IP Right Grant
- 2016-04-08 EP EP16718118.9A patent/EP3286724B1/en active Active
- 2016-04-08 WO PCT/US2016/026786 patent/WO2016171926A1/en active Application Filing
- 2016-04-08 KR KR1020177028034A patent/KR102016097B1/ko active IP Right Grant
-
2017
- 2017-05-09 US US15/590,849 patent/US10397450B2/en active Active
-
2018
- 2018-07-09 JP JP2018130045A patent/JP6764904B2/ja active Active
-
2019
- 2019-07-30 US US16/526,063 patent/US11153464B2/en active Active
Also Published As
Publication number | Publication date |
---|---|
EP3286724A1 (en) | 2018-02-28 |
WO2016171926A1 (en) | 2016-10-27 |
US20170310855A1 (en) | 2017-10-26 |
US10397450B2 (en) | 2019-08-27 |
US11153464B2 (en) | 2021-10-19 |
CN107430760A (zh) | 2017-12-01 |
KR20170125395A (ko) | 2017-11-14 |
CN107430760B (zh) | 2021-01-12 |
KR20190102086A (ko) | 2019-09-02 |
DE112016001844T5 (de) | 2018-02-08 |
JP2018520399A (ja) | 2018-07-26 |
JP6764904B2 (ja) | 2020-10-07 |
US20190364174A1 (en) | 2019-11-28 |
US9769356B2 (en) | 2017-09-19 |
EP3286724B1 (en) | 2021-10-06 |
JP6389571B2 (ja) | 2018-09-12 |
KR102202579B1 (ko) | 2021-01-13 |
US20160316107A1 (en) | 2016-10-27 |
JP2018185847A (ja) | 2018-11-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102016097B1 (ko) | 이미지 프로세서를 위한 2차원 시프트 어레이 | |
JP6612403B2 (ja) | 画像プロセッサのためのエネルギ効率的なプロセッサコアアーキテクチャ | |
US11140293B2 (en) | Sheet generator for image processor | |
KR101973733B1 (ko) | 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처 | |
KR102050899B1 (ko) | 이미지 프로세서용 컴파일러 관리 메모리 | |
KR102278021B1 (ko) | 이미지 프로세서 런타임 효율성을 개선하기 위한 프로그램 코드 변환 | |
KR20190107101A (ko) | 지원 내부 네트워크 및 구성 가능한 개수의 활성 코어들을 갖는 이미지 프로세서 |
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 |