KR20190107101A - 지원 내부 네트워크 및 구성 가능한 개수의 활성 코어들을 갖는 이미지 프로세서 - Google Patents

지원 내부 네트워크 및 구성 가능한 개수의 활성 코어들을 갖는 이미지 프로세서 Download PDF

Info

Publication number
KR20190107101A
KR20190107101A KR1020197023971A KR20197023971A KR20190107101A KR 20190107101 A KR20190107101 A KR 20190107101A KR 1020197023971 A KR1020197023971 A KR 1020197023971A KR 20197023971 A KR20197023971 A KR 20197023971A KR 20190107101 A KR20190107101 A KR 20190107101A
Authority
KR
South Korea
Prior art keywords
processor
cores
instance
object code
configuration
Prior art date
Application number
KR1020197023971A
Other languages
English (en)
Other versions
KR102235056B1 (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 KR20190107101A publication Critical patent/KR20190107101A/ko
Application granted granted Critical
Publication of KR102235056B1 publication Critical patent/KR102235056B1/ko

Links

Images

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/26Power supply means, e.g. regulation thereof
    • G06F1/32Means for saving power
    • G06F1/3203Power management, i.e. event-based initiation of a power-saving mode
    • G06F1/3234Power saving characterised by the action undertaken
    • G06F1/3243Power saving in microcontroller unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17356Indirect interconnection networks
    • G06F15/17368Indirect interconnection networks non hierarchical topologies
    • G06F15/17375One dimensional, e.g. linear array, ring
    • 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
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Abstract

방법이 설명된다. 상기 방법은 프로세서상에서 실행될 오브젝트 코드의 제1 인스턴스를 구성하는 단계를 포함한다. 프로세서에는 여러 개의 코어와 내부 네트워크가 있다. 내부 네트워크는 제1 개수의 코어들이 통신 가능하게 결합될 수 있게 하는 제1 구성으로 구성된다. 상기 방법은 상기 프로세서의 제2 인스턴스에서 실행될 상기 오브젝트 코드의 제2 인스턴스를 구성하는 단계를 더 포함한다. 프로세서의 제2 인스턴스의 각각의 내부 네트워크는 다른 수의 코어들이 통신 가능하게 결합 될 수 있게 하는 제2 구성으로 구성되며, 상기 프로세서상의 동일 위치 코어 및 상기 프로세서의 제2 인스턴스는 상기 제 1 및 제 2 구성에 대해 동일한 네트워크 어드레스를 갖는다. 또한, 상기 방법을 가능하게 하도록 설계된 내부 네트워크를 갖는 프로세서가 설명된다.

Description

지원 내부 네트워크 및 구성 가능한 개수의 활성 코어들을 갖는 이미지 프로세서
본 발명의 분야는 일반적으로 컴퓨팅 과학에 관한 것으로, 보다 구체적으로는 구성 가능한 개수의 활성 코어들 및 지원 내부 네트워크를 갖는 이미지 프로세서에 관한 것이다.
일반적으로 이미지 프로세싱에는 배열(어레이)로 구성되는 픽셀 값들의 프로세싱이 포함된다. 여기서, 공간적으로 구성된 2차원 어레이는 이미지의 2차원 특성을 캡처한다(추가 차원은 시간(예를 들어, 2차원 이미지의 시퀀스) 및 데이터 유형(예를 들어, 컬러)을 포함할 수 있다. 일반적인 시나리오에서, 정렬된 픽셀 값은 모션 이미지를 캡처하기 위해 스틸 이미지 또는 프레임 시퀀스를 생성한 카메라에 의해 제공된다. 일반적인 이미지 프로세서는 일반적으로 두 가지 극단(extreme) 측면이 있다.
첫 번째 극단에서는 범용 프로세서 또는 범용 유사 프로세서(예를 들어, 벡터 명령어 강화를 갖는 범용 프로세서)에서 실행되는 소프트웨어 프로그램으로서 이미지 프로세싱 태스크를 수행한다. 첫 번째 극단에서 일반적으로 매우 다양한 애플리케이션 프로그램 소프트웨어 개발 플랫폼을 제공하지만, 관련 오버헤드(예컨대, 명령어 패치(fetch) 및 디코드, 온-칩 및 오프-칩 데이터의 처리, 추측(speculative) 실행)와 결합된 보다 정교한 데이터 구조를 사용하면 궁극적으로 프로그램 코드 실행 중 데이터 단위당 더 많은 양의 에너지가 소비된다.
두 번째 반대의 극단에서는 고정 기능 유선연결 회로를 훨씬 더 큰 데이터 단위에 적용한다. 맞춤 설계 회로에 직접적으로 더 큰 데이터 단위를 사용하는 것은 단위 데이터당 전력 소비를 크게 감소시킨다. 그러나 맞춤 설계된 고정 기능 회로를 사용하면 일반적으로 프로세서가 수행할 수 있는 제한된 태스크가 수행된다. 이와 같이 널리 사용되는 프로그래밍 환경(첫 번째 극단과 관련됨)은 두 번째 극단에서 부족하다.
고도의 다용성 있는 애플리케이션 소프트웨어 개발 기회와 데이터 단위당 향상된 전력 효율성을 제공하는 기술 플랫폼은 바람직하지만 아직 미해결책으로 남아 있다.
방법이 설명된다. 상기 방법은 프로세서상에서 실행될 오브젝트 코드의 제1 인스턴스를 구성하는 단계를 포함한다. 상기 프로세서는 다중 코어들과 내부 네트워크를 갖는다. 상기 내부 네트워크는 제1 개수의 코어들이 통신 가능하게 결합될 수 있게 하는 제1 구성으로 구성된다. 상기 방법은 또한 상기 프로세서의 제2 인스턴스에서 실행될 상기 오브젝트 코드의 제2 인스턴스를 구성하는 단계를 포함한다. 상기 프로세서의 제2 인스턴스의 각각의 내부 네트워크는 다른 수의 코어들이 통신 가능하게 결합될 수 있게 하는 제2 구성으로 구성되며, 상기 프로세서상의 동일 위치 코어들 및 상기 프로세서의 제2 인스턴스는 상기 제1 및 제2 구성에 대해 동일한 네트워크 어드레스를 갖는다. 또한, 상기 방법을 가능하게 하도록 설계된 내부 네트워크를 갖는 프로세서가 설명된다.
전술 한 임의의 특징은 본 발명의 임의의 특정 양태 또는 실시 예와 함께 사용될 수 있다는 것을 알아야 한다.
다음의 설명 및 첨부 도면은 본 발명의 실시 예를 설명하기 위해 사용된다.
도 1은 스텐실(stencil) 프로세서 아키텍처의 상위 레벨 도면을 도시한다.
도 2는 이미지 프로세서 아키텍처의 상세한 도면을 도시한다.
도 3은 이미지 프로세서 아키텍처의 더 상세한 도면을 도시한다.
도 4는 이미지 프로세서에 의해 실행될 수 있는 애플리케이션 소프트웨어 프로그램을 나타낸다.
도 5는 구성 가능한 수의 활성 코어들을 지원하도록 구성된 네트워크 링을 갖는 도 3의 이미지 프로세서를 도시한다.
도 6a, 도 6b, 도 6c 및 도 6d는 상이한 수의 활성 코어들로 구성된 도 5의 이미지 프로세서를 도시한다.
도 7은 프로세서 구성(configuration) 방법을 도시한다.
도 8a, 도 8b, 도 8c, 도 8d 및 도 8e는 라인 그룹으로의 이미지 데이터 파싱, 시트(sheet)로의 라인 그룹의 파싱 및 중첩 스텐실들을 갖는 시트상에서 수행 된 오퍼레이션을 도시한다.
도 9a는 스텐실 프로세서의 일 실시 예를 도시한다.
도 9b는 스텐실 프로세서의 명령어의 실시 예를 도시한다.
도 10은 스텐실 프로세서 내의 데이터 연산 유닛의 실시 예를 도시한다.
도 11a, 11b, 11c, 11d, 11e, 11f, 11g, 11h, 11i, 11j 및 11k는 중첩 스텐실들을 갖는 한 쌍의 이웃하는 출력 픽셀 값들을 결정하기 위해 2차원 시프트 어레이 및 실행 레인 어레이의 사용 예를 도시한다.
도 12는 통합된(integrated) 실행 레인 어레이 및 2차원 시프트 어레이를 위한 유닛 셀의 실시 예를 도시한다.
도 13은 예시적인 컴퓨팅 시스템을 도시한다.
1.0 고유 이미지 프로세서 아키텍처
당 업계에 공지된 바와 같이, 프로그램 코드를 실행하기 위한 기본 회로 구조는 실행 스테이지 및 레지스터 공간을 포함한다. 실행 스테이지는 명령어들을 실행하기 위한 실행 유닛들을 포함한다. 실행될 명령어에 대한 입력 피연산자가 레지스터 공간에서 실행 스테이지로 제공된다. 실행 스테이지의 명령어 실행에서 생성된 결과는 레지스터 공간에 다시 기록된다.
전통적인 프로세서에서 소프트웨어 스레드를 실행하면 실행 스테이지를 통해 일련의 명령어들이 순차적으로 실행된다. 가장 일반적으로 오퍼레이션들은 단일 결과가 단일 입력 피연산자 세트에서 생성된다는 의미에서 "스칼라(scalar)"이다. 그러나 "벡터" 프로세서들의 경우, 실행 스테이지에 의한 명령어의 실행은 입력 피연산자의 벡터로부터 결과 벡터를 생성할 것이다.
도 1은 2차원 시프트 레지스터 어레이(102)에 연결된 실행 레인 어레이(101)를 포함하는 고유 이미지 프로세서 아키텍처(100)의 상위 레벨(high level) 도면을 도시한다. 여기서, 실행 레인 어레이의 각 실행 레인은 프로세서(100)에 의해 지원되는 명령어(명령) 세트를 실행하는데 필요한 실행 유닛들을 포함하는 이산 실행 스테이지로서 볼 수 있다. 다양한 실시 예에서, 각각의 실행 레인은 동일한 머신 사이클에서 실행될 동일한 명령어를 수신하여 프로세서가 2차원 단일 명령 다중 데이터(SIMD: single instruction multiple data) 프로세서로서 오퍼레이션한다.
각각의 실행 레인은 2차원 시프트 레지스터 어레이(102) 내의 해당 위치에 자신의 전용 레지스터 공간을 갖는다. 예를 들어, 코너 실행 레인(103)은 코너 시프트 레지스터 위치(104)에서 자신의 전용 레지스터 공간을 가지며, 코너 실행 레인(105)은 코너 시프트 레지스터 위치(106)에서 자신의 전용 레지스터 공간을 갖는다.
또한, 시프트 레지스터 어레이(102)는, 이전 머신 사이클 동안 다른 실행 레인의 레지스터 공간에 상주하는 값에 대해 자신의 레지스터 공간으로부터 각 실행 레인이 직접 오퍼레이션할 수 있도록 그 콘텐츠(contents)를 시프트할 수 있다. 예를 들어, +1 수평 시프트는 각 실행 레인의 레지스터 공간이 가장 왼쪽(leftmost)의 레지스터 공간으로부터 값을 수신하도록 한다. 수평축을 따라 좌우 방향으로 값들을 시프트시키고, 수직축을 따라 상하 방향으로 값을 시프트시키는 능력으로 인해, 프로세서는 효율적으로 이미지 데이터의 스텐실들을 프로세싱할 수 있다.
여기서 알려진 바와 같이, 스텐실은 기본 데이터 단위로 사용되는 이미지 표면 영역의 부분(slice)이다. 예를 들어, 출력 이미지의 특정 픽셀 위치에 대한 새로운 값은 특정 픽셀 위치가 중심에 위치된 입력 이미지 영역 내의 픽셀 값들의 평균으로서 계산될 수 있다. 예를 들어 스텐실의 크기가 3×3 픽셀인 경우, 특정 픽셀 위치는 3 × 3 픽셀 어레이의 중간 픽셀에 대응할 수 있고, 상기 평균은 3 × 3 픽셀 어레이 내의 9개의 픽셀에 대해 계산될 수 있다.
도 1의 프로세서(100)의 다양한 동작 실시예에 따르면, 실행 레인 어레이(101)의 각 실행 레인은 출력 이미지 내의 특정 위치에 대한 픽셀 값을 계산하는 역할을 한다. 따라서, 입력 픽셀 데이터의 초기 로딩 및 시프트 레지스터 내의 8개의 시프트 오퍼레이션들의 조정된 시프트 시퀀스 이후에, 위에서 언급한 3×3 스텐실 평균화 예를 계속하면, 실행 레인 어레이의 각 실행 레인은 해당 픽셀 위치에 대한 평균을 계산하는 데 필요한 9개의 모든 픽셀 값들을 로컬 레지스터 공간에 수신한다. 즉, 프로세서는 예를 들어 이웃 출력 이미지 픽셀 위치에 중심을 둔 다수의(복수의) 중첩 스텐실을 동시에 프로세싱할 수 있다. 도 1의 프로세서 아키텍처는 이미지 스텐실을 프로세싱하는 데 특히 적합하기 때문에 스텐실 프로세서라고도 한다.
도 2는 복수의 스텐실 프로세서(202_1 내지 202_N)를 갖는 이미지 프로세서에 대한 아키텍처(200)의 실시 예를 도시한다. 도 2에서 관찰된 바와 같이, 아키텍처(200)는 네트워크(204)(예를 들어, 온칩(on-chip) 스위치 네트워크, 온칩 링 네트워크 또는 다른 종류의 네트워크를 포함하는 네트워크 온칩(NOC))를 통해 복수의 스텐실 프로세서(202_1 ~ 202_N)와 해당 시트 생성기(203_1 ~ 203_N)에 상호 연결된 복수의 라인 버퍼 유닛들(201_1 ~ 201_M)을 포함한다. 일 실시 예에서, 임의의 라인 버퍼 유닛(201_1 내지 201_M)은 네트워크(204)를 통해 임의의 시트 생성기 (203_1 내지 203_N) 및 해당 스텐실 프로세서(202_1 내지 201_N)에 접속할 수 있다.
프로그램 코드는 소프트웨어 개발자에 의해 앞서 정의된 이미지 프로세싱 동작을 수행하도록 해당 스텐실 프로세서(202) 상에 컴파일되고 로드된다(예를 들어, 설계 및 구현에 따라 스텐실 프로세서의 관련 시트 생성기(203) 상에 로드될 수 있는 프로그램 코드). 이와 같이, 각각의 스텐실 프로세서(202_1 내지 202_N)는 프로세싱 코어, 프로세서 코어, 코어 등과 같은 보다 일반적으로 특징지을 수 있고, 전체 이미지 프로세서는 멀티 코어 이미지 프로세서로서 특징지어질 수 있다. 적어도 일부의 경우, 이미지 프로세싱 파이프라인은 제1 파이프라인 스테이지에 대한 제1 커널 프로그램을 제1 스텐실 프로세서(202_1)로 로딩하고, 제2 파이프라인 스테이지에 대한 제2 커널 프로그램을 제2 스텐실 프로세서(202_2)에 로딩함으로써 실현될 수 있으며, 제1 커널은 상기 파이프라인의 제1 스테이지의 기능을 수행하며, 제2 커널은 상기 파이프라인의 제2 스테이지의 기능 등을 수행하고, 부가적인 제어 흐름 방법은 출력 이미지 데이터를 상기 파이프라인의 한 스테이지에서 상기 파이프라인의 다음 스테이지로 전달하기 위해 설치된다.
다른 구성들에서, 이미지 프로세서는 동일한 커널 프로그램 코드를 오퍼레이팅하는 2 이상의 스텐실 프로세서(202_1, 202_2)를 갖는 병렬 기계로 실현될 수 있다. 예를 들어, 고밀도 및 높은 데이터 레이트 스트림(data rate stream)의 이미지 데이터는 각각이 동일한 기능을 수행하는 복수의 스텐실 프로세서에 걸쳐 프레임들을 확산시킴으로써 프로세싱될 수 있다.
또 다른 구성들에서, 커널들의 임의의 DAG(directed acyclic graph)는 각각의 스텐실 프로세서를 그들 자신의 각각의 프로그램 코드의 커널로 구성하고 그리고 출력 이미지를 한 커널에서 DAG 디자인의 다음 커널 입력으로 보내도록 하드웨어에 적절한 제어 흐름 훅들(hooks)을 구성함으로써 이미지 프로세서상에 로딩될 수 있다.
일반적인 흐름으로서, 이미지 데이터의 프레임들은 매크로 I/O 유닛(205)에 의해 수신되고 그리고 프레임 단위로 하나 이상의 라인 버퍼 유닛(201)에 전달된다. 특정 라인 버퍼 유닛은 이미지 데이터의 프레임을 "라인 그룹"이라 불리는 더 작은 이미지 데이터 영역으로 파싱한 다음, 라인 그룹을 네트워크(204)를 통해 특정 시트 생성기로 전달한다. 예를 들어, 프레임의 여러 연속적인 전체 행 또는 열의 데이터를 사용하여 완전하거나 "풀(full)" 단일 라인 그룹을 구성할 수 있다(간략하게 하기 위해, 본 명세서는 주로 연속적인 행들을 나타낼 것이다). 상기 시트 생성기는 이미지 데이터의 라인 그룹을 "시트(sheet)"라고 하는 더 작은 이미지 데이터 영역으로 파싱하고, 상기 시트를 해당 스텐실 프로세서에 제공한다.
단일 입력을 갖는 DAG 플로우 또는 이미지 프로세싱 파이프라인의 경우, 일반적으로, 입력 프레임들은 이미지 데이터를 라인 그룹들로 파싱하고 그리고 해당 스텐실 프로세서(202_1)가 파이프라인/DAG에서 제1 커널의 코드를 실행하고 있는 시트 생성기(203_1)로 라인 그룹들을 보내는 동일한 라인 버퍼 유닛(201_1)으로 보내진다. 스텐실 프로세서(202_1)가 프로세싱하는 라인 그룹에 대한 스텐실 프로세서(202_1)의 오퍼레이션이 완료되면, 시트 생성기(203_1)는 출력 라인 그룹을 "다운스트림" 라인 버퍼 유닛(201_2)으로 보낸다(일부 사용 예에서, 출력 라인 그룹은 이전에 입력 라인 그룹을 보낸 동일한 라인 버퍼 유닛(201_1)으로 되돌려 보낼 수 있다).
그 다음, 그들 자신의 다른 시트 생성기 및 스텐실 프로세서(예를 들어, 시트 생성기(203_2) 및 스텐실 프로세서(202_2))에서 실행중인 파이프라인/DAG의 다음 스테이지/오퍼레이션을 나타내는 하나 이상의 "컨슈머(consumer)" 커널은 제1 스텐실 프로세서(202_1)에 의해 생성된 이미지 데이터를 다운스트림 라인 버퍼 유닛(201_2)으로부터 수신한다. 이러한 방식으로, 제1 스텐실 프로세서상에서 오퍼레이팅하는 "프로듀서(producer)" 커널은 제2 스텐실 프로세서상에서 오퍼레이팅하는 "컨슈머" 커널에 전송된 출력 데이터를 가지며, 여기서 컨슈머 커널은 프로듀서 커널이 전체 파이프라인 또는 DAG의 디자인(설계)과 일관된 다음 태스크 세트를 수행한다.
도 1과 관련하여 상술한 바와 같이, 각 스텐실 프로세서(202_1 내지 202_N)는 이미지 데이터의 복수의 중첩하는 스텐실상에서 동시에 오퍼레이팅하도록 설계된다. 스텐실 프로세서의 내부 하드웨어 프로세싱 용량 및 복수의 중첩 스텐실은 시트의 크기를 효과적으로 결정한다. 다시, 전술한 바와 같이, 스텐실 프로세서들(202_1 내지 202_N) 중 임의의 하나 내에서, 실행 레인들의 어레이들은 조화롭게(unison) 오퍼레이팅하여 복수의 중첩 스텐실에 의해 커버되는 이미지 데이터 표면 영역을 동시에 프로세싱한다.
또한, 다양한 실시 예에서, 이미지 데이터의 시트들은 스텐실 프로세서의 대응하는 (예를 들어, 로컬) 시트 생성기(203)에 의해 스텐실 프로세서(202)의 2차원 시프트 레지스터 어레이에 로딩된다. 시트 및 2차원 시프트 레지스터 어레이 구조의 사용은, 예를 들어, 실행 레인 어레이에 의해 그 직후에 데이터에 대해 직접 수행되는 프로세싱 태스크들을 갖는 단일 로드 오퍼레이션과 같이 다량의 데이터를 많은 양의 레지스터 공간으로 이동시킴으로써 전력 소비 개선을 효과적으로 제공한다. 또한 실행 레인 어레이와 해당 레지스터 어레이를 사용하면 쉽게 프로그래밍/구성할 수 있는 다양한 스텐실 크기를 제공한다. 라인 버퍼 유닛들, 시트 생성기들 및 스텐실 프로세서들의 오퍼레이션에 대한 자세한 내용은 섹션 3.0에서 자세히 설명한다.
도 3은 도 2의 이미지 프로세서의 특정 하드웨어 구현예의 보다 상세한 실시 예를 도시한다. 도 3에서 관찰된 바와 같이, 도 2의 네트워크(204)는 라인 버퍼 유닛(301)과 시트 생성기/스텐실 프로세서 코어(302) 사이의 각 교차점에 4x4 네트워크 노드(314)를 갖는 링 토폴로지(304)로 구현된다. 단순화를 위해, 도 3은 라인 버퍼 유닛(301_4)과 시트 생성기/스텐실 프로세서 코어(302_4) 사이에 상주하는 네트워크 노드(314)만을 라벨링한다.
여기서, 시트 발생기/스텐실 프로세서 코어들(302_1 내지 302_8) 각각은 스텐실 프로세서 및 그것의 대응하는 시트 생성기 모두를 포함하는 것으로 이해된다. 단순화를 위해, 시트 발생기/스텐실 프로세서 코어(302_1 내지 302_8) 각각은 이후 스텐실 프로세서 코어 또는 코어로 간단히 언급될 것이다. 도 3의 특정 실시 예에서는 8개의 라인 버퍼 유닛(301_1 ~ 301_8)과 8개의 코어(302_1 ~ 402_8)가 도시되어 있지만, 상이한 수의 라인 버퍼 유닛 및/또는 코어를 갖는 상이한 아키텍처가 가능하다는 것을 이해해야 한다. 링 토폴로지 이외의 네트워크 토폴로지도 가능하다.
도 3의 이미지 프로세서와 관련하여, 링 네트워크(304)는: 1) I/O 유닛(305)이 입력 데이터를 임의의 라인 버퍼 유닛(301_1 내지 301_8)(또는 임의의 코어(302_1 내지 302_8))에 전달하게 하고; 2) 임의의 라인 버퍼 유닛(301_1 내지 301_8)이 임의의 코어(302_1 내지 302_8)로 라인 그룹을 전달하게 하고; 3) 임의의 코어(302_1 내지 302_8)가 출력 데이터를 임의의 라인 버퍼 유닛(301_1 내지 301_8)으로 전달하게 하고; 그리고 4) 임의의 라인 버퍼 유닛(301_1 내지 301_8)이 이미지 프로세서 출력 데이터를 I/O 유닛(305)으로 전달하게 한다. 따라서 다양한 소프트웨어 커널 로딩 옵션들과 내부 네트워크 구성이 가능하다. 즉, 이론적으로, 프로세서의 다양한 코어(302) 상에서 실행될 복수의 커널로 구성된 임의의 소프트웨어 애플리케이션에 대해, 임의의 커널이 임의의 코어에 로드될 수 있으며, 임의의 라인 버퍼 유닛이 임의의 코어에 대해 입출력 데이터를 소싱/싱크(source/sink)하도록 구성될 수 있다.
도 4는 도 3의 이미지 프로세서상에 로딩될 수 있는 예시적인 애플리케이션 소프트웨어 프로그램 또는 그 일부를 도시한다. 도 4에서 관찰된 바와 같이, 상기 프로그램 코드는 입력 이미지 데이터(401)의 하나 이상의 프레임을 프로세싱하여 입력 이미지 데이터(401)에 대한 전체 변환을 수행할 것으로 예상될 수 있다. 상기 변환은 애플리케이션 소프트웨어 개발자에 의해 명료화된 오케스트레이션된 시퀀스(orchestrated sequence)로 입력 이미지 데이터에 대해 오퍼레이팅하는 프로그램 코드(402)의 하나 이상의 커널의 오퍼레이션에 의해 실현된다.
도 4의 예에서, 전체 변환은 제1 커널(K1)을 갖는 각각의 입력 이미지를 먼저 프로세싱함으로써 수행된다. 커널(K1)에 의해 생성된 출력 이미지는 커널(K2)에 의해 오퍼레이팅된다. 커널(K2)에 의해 생성된 출력 이미지들 각각은 커널(K3_1 또는 K3_2)에 의해 오퍼레이팅되고, 커널(들)(K3_1 또는 K3_2)에 의해 생성된 출력 이미지들은 커널(K4)에 의해 오퍼레이팅된다. 도 3의 특정 예에서, 커널(K3_1 및 K3_2)은 예를 들어 상이한 이미지 프로세싱 오퍼레이션을 수행하는 상이한 커널일 수 있다 (예를 들어, 커널(K3_1)은 제1 특정 유형의 입력 이미지에 대해 오퍼레이팅하고 커널(K3_2)은 제2 상이한 유형의 입력 이미지에 대해 오퍼레이팅함).
단순화를 위해, 4개의 커널(K1 내지 K4)만이 도시된다. 도 3의 이미지 프로세서 하드웨어 아키텍처 실시 예를 참조하면, 각각의 커널이 다른 스텐실 프로세서상에서 오퍼레이팅하는 기본 구성에서, 프로세서의 모든 코어(302)가 해당 커널을 갖기 전에 4개의 커널이 커널(K4)로부터 플로우(flow)할 수 있다는 것을 알아야 한다(도 4의 4개의 커널 플로우는 도 3의 프로세서의 코어의 절반만 사용함).
2.0 지원 내부 네트워크 및 구성 가능한 수의 코어들을 갖는 이미지 프로세서
도 5는 링 네트워크 구현 및 네트워크 링 상의 각 노드에 할당된 특정 어드레스의 상세도를 갖는 도 3의 이미지 프로세서의 실시 예(500)를 도시한다. 도 5에서 관찰되는 바와 같이, 링 네트워크는 프로세서 코어(502_1 내지 502_8)의 상이한 수를 가능하게 하는 멀티플렉서 쌍(506_1, 506_2 및 506_3)을 포함한다. 여기서, 이미지 프로세서(500)는, 예를 들어 다수의 상이한 네트워크 구성들(아래에 설명된 임의의/모든 구성과 같은) 중 임의의 특정 구성을 구현하거나 달리 구현하기 위해 멀티플렉서들의 채널 선택 값들을 결정하는 구성 레지스터 공간(도 5에 도시되지 않음)을 포함할 수 있다. 도 5에서 볼 수 있듯이, 멀티플렉서 쌍의 A 채널이 선택되면 링은 계속해서 다음 쌍의 프로세서 코어를 연결한다. 대조적으로, 멀티플렉서 쌍의 B 채널이 선택되면 상기 링은 "회로들을 단락(short circuits)"하여 상기 다음 쌍의 프로세서 코어를 차단한다.
도 6a 내지도 6d는 도 5의 이미지 프로세서로 가능한 활성 프로세서 코어 구성들의 수 및 다른 링 네트워크를 도시한다.
도 6a는 (프로세싱 코어(502_1)의 링상의 위치에 대응하는) 노드 1과 (프로세싱 코어(502_1)의 링상의 위치에 대응하는) 노드 2 사이에 다이렉트 로직 연결(direct logical connection)을 효과적으로 형성하는 멀티플렉서 쌍(506_1)의 B 채널이 선택되는 구성에 대응한다. 도 5 및 도 6a를 참조하면, 멀티플렉서 쌍(506_1)의 B 채널의 선택은 링 네트워크로부터 프로세싱 코어(502_3, 502_5, 502_7, 502_8, 502_6 및 502_4)를 효과적으로 차단(cut off)한다. 이와 같이, 링 네트워크는 I/O 유닛(505)과 프로세싱 코어(502_1, 502_2)만 결합한다. 이 특정 구성은, 예를 들어, 이미지 프로세서(500)상에서 실행될 애플리케이션 소프트웨어 프로그램이 하나 또는 두개의 커널만을 포함하면, 이 경우에 2개 이하의 프로세싱 코어(코어 502_1 및 코어 502_2)가 활성화된다. 다른 코어들(502_3, 502_5, 502_7, 502_8, 502_6 및 502_4)은 예를 들어 비활성 저전력 상태에 배치되어 이미지 프로세서의 전체 전력 소비를 낮출 수 있다.
도 6b는 멀티플렉서 쌍(506_1)의 A 채널이 선택되고 멀티플렉서 쌍(506_2)의 B 채널이 선택되는 구성에 대응한다. 이 특정 멀티플렉서 구성은 도 6a의 구성과 비교하여 링을 확장하여, 링이 코어(502_1 및 502_2)를 결합(커플링)할뿐만 아니라 코어(502_3 및 502_4)를 결합하도록 한다. 여기서, (프로세싱 코어(502_3)의 링상의 위치에 대응하는) 노드 3과 (프로세싱 코어(502_4)의 링상의 위치에 대응하는) 노드 4 사이에 다이렉트 로직 연결이 형성된다. 도 5 및 도 6b에 도시된 바와 같이, 멀티플렉서 쌍(506_1)의 A 채널 및 멀티플렉서 쌍(506_2)의 B 채널의 선택은 링 네트워크로부터 프로세싱 코어(502_5, 502_7, 502_8 및 502_6)를 효과적으로 차단한다. 이와 같이, 링 네트워크는 I/O 유닛(505)과 프로세싱 코어(502_1, 502_2, 502_3 및 502_4)만을 결합(couple)한다.
이 특정 구성은, 예를 들어 이미지 프로세서(500)상에서 실행될 애플리케이션 소프트웨어 프로그램이 단지 3개 또는 4개의 커널을 포함하는 경우에 선택될 수 있으며, 이 경우 4개 이하의 프로세싱 코어(코어 502_1, 502_2, 502_3 및 502_4)가 활성화된다. 다른 코어(502_5, 502_7, 502_8 및 502_6)는 예를 들어 비활성 저전력 상태에 배치되어 이미지 프로세서의 전체 전력 소비를 낮출 수 있다.
도 6c는 멀티플렉서 쌍들(506_1 및 506_2)의 A 채널들이 선택되고 그리고 멀티플렉서 쌍(506_3)의 B 채널들이 선택되었던 구성에 대응한다. 이 특정 멀티플렉서 구성은 도 6b의 구성과 비교하여 링을 확장하여, 링이 코어(502_1, 502_2, 502_3 및 502_4)를 결합(커플링)할 뿐만 아니라 코어(502_5 및 502_6)를 결합(커플링)하도록 한다. 여기서, (프로세싱 코어(502_5)의 링상의 위치에 대응하는) 노드 5와 (프로세싱 코어(502_6)의 링상의 위치에 대응하는) 노드 6 사이에는 다이렉트 로직 연결이 형성된다. 도 5 및 도 6c에 도시된 바와 같이, 멀티플렉서 쌍(506_1 및 506_2)의 A 채널들 및 멀티플렉서 쌍(506_3)의 B 채널들의 선택은 링 네트워크로부터 프로세싱 코어(502_7 및 502_8)를 효과적으로 차단한다. 이와 같이, 링 네트워크는 I/O 유닛(505)과 프로세싱 코어(502_1, 502_2, 502_3, 502_4, 502_5 및 502_6)를 결합한다.
이 특정 구성은 예를 들어 이미지 프로세서(500)상에서 실행될 애플리케이션 소프트웨어 프로그램이 5개 또는 6개의 커널만을 포함하는 경우에 선택될 수 있으며, 이 경우 6개 이하의 프로세싱 코어(코어 502_1, 502_2, 502_3 , 502_4, 502_5 및 502_6)가 활성화된다. 다른 코어들(502_7 및 502_8)은 예를 들어 비활성 저전력 상태에 배치되어 이미지 프로세서의 전체 전력 소비를 낮출 수 있다.
도 6d는 멀티플렉서 쌍들(506_1, 506_2 및 506_3)의 A 채널들이 선택되는 구성에 대응한다. 이 특정 멀티플렉서 구성은 링이 I/O 유닛(505)과 모든 코어 (502_1, 502_2, 502_3, 502_4, 502_5, 502_6, 502_7 및 502_8)를 결합하도록도 6b의 구성에 비해 링을 확장한다. 여기서, (프로세싱 코어(502_7)의 링상의 위치에 대응하는) 노드 7과 (프로세싱 코어(502_8)의 링상의 위치에 대응하는) 노드 8은 사이의 유선 연결(hardwired connection)은 링의 우측 에지를 형성한다. 이 특정 구성은, 예를 들어, 이미지 프로세서(500)상에서 실행될 애플리케이션 소프트웨어 프로그램이 7개 또는 8개의 커널을 포함하는 경우에 선택될 수 있다.
도 5의 프로세서의 네트워크 링 설계의 또 다른 적절한 특징은 상이한 네트워크 노드들에 대한 어드레스 값 할당의 고유한 배열(arrangement)이다. 여기서, 간단히 도 3을 참조하면, 도 3의 프로세서(300)는 통상적으로 링 주위에 일련의 노드를 번호 지정한다는 것을 유의한다. 그러나, 도 5의 링 네트워크상의 네트워크 어드레스 할당은 도 3의 종래의 접근법과 다르므로, 활성 네트워크 구성상의 수치 어드레스는 얼마나 많은 코어가 링상에서 활성화되도록 구성되는지에 관계없이 끊임없이(continuous) 연속적(consecutive)으로 유지된다.
즉, 도 6a의 구성이 선택되면, 링상의 활성 숫자 어드레스(active numerical addresse)는 어드레스 0, 1 및 2를 포함한다. 대조적으로, 도 6b의 구성이 선택되면, 링상의 활성 숫자 어드레스는 어드레스 0, 1, 2, 3 및 4를 포함한다. 또한, 도 6c의 구성이 선택되면, 링상의 활성 숫자 어드레스는 어드레스 0, 1, 2, 3, 4, 5 및 6을 포함한다. 마지막으로, 도 6d의 구성이 선택되면, 링상의 활성 숫자 어드레스는 어드레스 0, 1, 2, 3, 4, 5, 6, 7 및 8을 포함한다.
이러한 방식으로 네트워크 어드레스(주소)를 배열하면 상이한 수의 활성 프로세서 코어 및 그에 상응하게 상이한 기본 링 네트워크 구성을 갖는 상이한 소프트웨어 애플리케이션에 걸쳐 최하위 레벨 코드가 재사용되는 경우에도, 애플리케이션 소프트웨어 소스 코드를 여러 다른 최하위 레벨의 오브젝트 코드(이진 코드라고도 함) 인스턴스로 재컴파일하는 것을 방지할 수 있다. 여기서, 다양한 환경에서, 통신의 목적지인 커널은 이론적으로 예를 들어 실제 하드웨어 프로세서 내의 임의의 코어에 맵핑될 수 있는 로직 어드레스를 갖는 애플리케이션 소프트웨어 프로그램의 소스 코드 레벨에서 식별된다. 그러나, 소스 코드가 하위 레벨 오브젝트 또는 이진 코드로 컴파일될 때, 로직 어드레스는 프로세서상의 특정 하드웨어 코어의 아이덴티티(identity)로 변환된다(즉, 링 네트워크상의 특정 어드레스들 중 하나).
예를 들어, I/O 유닛이 커널 K1로 입력 데이터를 보내고 커널 K1이 출력 데이터를 커널 K2로 보내는 두 개의 커널 K1과 K2를 사용하는 애플리케이션 소프트웨어를 고려하자. 하위 레벨 오브젝트 코드로 소스 코드를 컴파일한 후 커널 K1이 코어 502_1에서 구체적으로 실행되도록 지정되고 그리고 커널 K2가 코어 502_2에서 구체적으로 실행되도록 지정(할당)되었다고 가정한다. 이와 같이, 임의의 목적 코드 통신은 커널 K1에 전송되는 통신에 대해 1의 네트워크 어드레스 및 커널 K2에 전송되는 통신에 대해 2의 네트워크 어드레스를 포함할 것이다.
링 주변의 네트워크 노드 어드레스 할당의 고유한 배열로 인해, 최하위 레벨 프로그램 코드의 특정 인스턴스는 도 6a의 2개의 코어 프로세서 구성뿐만 아니라,도 6b, 6c 및 6d의 다른 프로세서 코어 구성 각각에서도 동작가능하다. 이와 같이, 커널(K1 및 K2)을 포함하는 애플리케이션 소프트웨어 프로그램의 소스 코드는 애플리케이션 소프트웨어 프로그램이 다른 이미지 프로세서 구성(6a, 6b, 6d, 6e) 중 하나에서 실행되도록 목표로 한다면 다른 오브젝트 코드 인스턴스들로 재컴파일될 필요가 없다. 재컴파일할 필요가 없기 때문에 애플리케이션 소프트웨어 개발 및/또는 구축과 관련하여 효율성이 높아진다.
즉, 오브젝트 코드 레벨에서의 프로그램 코드 재사용이보다 쉽게 달성될 수 있고 및/또는 애플리케이션 코드의 구축(construction)은 오브젝트 코드의 인스턴스를 더 큰 오브젝트 코드 애플리케이션으로 플러그 가능한 컴포넌트로 사용하여 오브젝트 코드 레벨에서 달성될 수 있다. 커널 K1 및 K2를 갖는 전술한 애플리케이션 소프트웨어 프로그램이 독립 실행형 프로그램으로서뿐만 아니라 고유한 프로세싱 태스크를 갖는 다수의 다른 오퍼레이션 전에 수행되는 프론트-엔드 오퍼레이션으로서의 중요한 사용(significant use)을 갖는 오퍼레이션(OP1)을 수행하는 예를 고려한다. 단순화를 위해, 3가지 다른 오퍼레이션이 존재한다고 가정하며, 3가지 다른 오퍼레이션은 1) 2개의 커널들(예를 들어, K3 및 K4)로 구현되는 OP2; 2) 3개의 커널들(예를 들어, K3, K4 및 K5)로 구현되는 OP3; 그리고 3) 5개의 커널(예: K3, K4, K5, K6 및 K7)로 구현되는 OP4를 포함한다.
여기서, OP1 프론트-엔드 오퍼레이션이 커널 K2가 그 출력 데이터를 (예를 들어, 네트워크 노드 0에서의 I/O 유닛(505)보다는) 네트워크 노드 3의 코어(502_3)로 전송하는 오브젝트 코드 인스턴스로 컴파일(compiled)되는 애플리케이션 소프트웨어 개발 환경을 고려한다. 또한, 후속 오퍼레이션 OP2, OP3 및 OP4가, 1) OP2, OP3 및 OP4의 제1(입력, K3) 및 제2 (K4) 커널은 각각 코어(502_3 및 502_4)에서 오퍼레이팅하고; 2) OP3 및 OP4의 제2 (K5) 커널이 코어 502_5에서 오퍼레이팅하고; 그리고 3) OP4의 제4 (K6) 및 제5 (K7) 커널은 코어 502_6 및 502_7에서 각각 오퍼레이팅하도록, 오브젝트 코드 인스턴스로 컴파일된다고 가정한다.
이 경우, 컴파일된 프론트-엔드 OP1 인스턴스는 오브젝트 코드 레벨에서 각각 컴파일된 OP2, OP3 및 OP3 오브젝트 코드 인스턴스 중 하나와 "있는 그대로(as is)" 결합하여 즉시 실행 가능한 3개의 애플리케이션 소프트웨어 프로그램을 개별적으로 생성할 수 있으며, 3개의 애플리케이션 소프트웨어 프로그램은 1) OP1 + OP2에 대응하는 제1 애플리케이션 소프트웨어 프로그램; 2) OP1 + OP3에 대응하는 제2 애플리케이션 소프트웨어 프로그램; 그리고 3) OP1 + OP4에 해당하는 제3 애플리케이션 소프트웨어 프로그램을 포함한다.
여기서, OP1의 오브젝트 코드 인스턴스가 OP2, OP3 및 OP4 오브젝트 코드 인스턴스 각각과 개별적으로 결합하여 세 가지 다른 오브젝트 코드 레벨 애플리케이션을 생성할뿐만 아니라
4개의 코어를 이용하는 제1 애플리케이션 소프트웨어 프로그램(OP1 + OP2)은도 6b의 프로세서 구성에서 오퍼레이팅하도록 구성될 수 있고, 5개의 코어를 이용하는 제2 애플리케이션 소프트웨어 프로그램(OP1 + OP3)은 도 6c의 프로세서 구성에서 오퍼레이팅하도록 구성될 수 있고, 7개의 코어를 사용하는 제3 애플리케이션 소프트웨어 프로그램(OP1 + OP4)은 도 6d의 프로세서 구성에서 오퍼레이팅하도록 구성될 수 있다.
따라서, OP1의 오브젝트 코드 인스턴스를 다른 오브젝트 코드 인스턴스와 결합하여 더 큰 워킹(larger working) 오브젝트 코드 레벨 애플리케이션을 생성할 수 있을 뿐만 아니라, OP1의 오브젝트 코드 인스턴스는 상이한 애플리케이션을 초래하는 결합이 다른 수의 활성 하드웨어 코어 및 이에 상응하는 상이한 내부 링 네트워크 구성을 갖는 상이한 프로세서 구성을 필요로 하더라도 결합(combined)될 수 있다. 즉, 프로세서 내의 내부 네트워크가 다른 프로세서 구성에 따라 다르더라도 대상 하드웨어 프로세서의 활성 코어의 수/구성과 무관한 오브젝트 코드 레벨에서 프로그램 코드 구성은 달성(accomplished)될 수 있다.
또한, 오브젝트 코드 레벨에서 추상(abstract) 커널 식별자를 사용하면 모든 오브젝트 코드 프로그램은 더 큰 오브젝트 코드 레벨 구성으로 쉽게 플러그인 할 수 있으며 그리고 다른 프로세서 코어들에서 실행되도록 구성될 수 있다. 예를 들어, 컴파일된 것으로 상기 설명된 OP3의 오브젝트 코드 인스턴스가, 1) 입력 변수 = BASE로 제1 커널(위의 설명에서 K3)을 식별하고; 2) 식별자 = BASE + 1로 제2 커널 (위의 설명에서 K4)을 식별하고; 그리고 3) 식별자 = BASE + 2로 제3 커널 (위의 설명에서 K5)를 식별한다고 가정한다. 이 경우 위에서 설명한 제2 (OP1 + OP3) 애플리케이션과 함께 사용하기 위한 OP3 오브젝트 코드의 구성은 BASE =3으로 설정함으로써 간단하다.
또한, 독립 실행형(stand alone) 오퍼레이션을 위한 OP3 오브젝트 코드의 동일한 인스턴스 재사용은 BASE = 1로 설정함으로써 간단히 수행될 수 있다. 나중에 OP3의 제1 커널은 코어(502_1)에서 실행되고 그리고 그의 제2 코어는 네트워크 링에서 올바른 커널 대 커널 통신을 사용하여 코어(502_2)에서 오퍼레이팅한다. 따라서, 입력 변수/구성 정보(BASE)의 심플한 변경으로, 오브젝트 코드 레벨에서 OP3의 동일한 인스턴스가 도 6c의 프로세서 구성(위에 설명된 제2 애플리케이션(OP1 + OP3)의 경우)에서 쉽게 오퍼레이팅하도록 만들어지거나, 도 6a의 프로세서 구성에서 독립 실행형 애플리케이션으로서 오퍼레이팅할 수 있다.
이와 같이, 서로 관련하여 그들의 네트워크 어드레스 오프셋에 의해 오브젝트 레벨 프로그램 내의 상이한 커널들을 식별함으로써,링의 노드 수가 각기 다른 프로세서 구성에 따라 변경 되더라도 프로세서의 네트워크 링에 있는 고유한 어드레스싱 패턴은 기본적으로 이러한 오프셋의 의미(meaning)를 보존하기 때문에 오브젝트 레벨 프로그램의 동일한 인스턴스가 서로 다른 프로세서 구성에 쉽게 매핑될 수 있다. 따라서, 많은 경우에, 프로그램의 오브젝트 코드 인스턴스가 생성되면, 예를 들어, 프로그램의 기능 또는 다른 기본 프로세서 구성의 새로운 사용에 대한 동일한 소스 코드 레벨에서 오브젝트 코드의 새로운 인스턴스를 컴파일하는 대신 "플러그인(plug-in)"으로 다양한 애플리케이션 및 해당 구성들에 대해 동일한 카피들(copies)을 재사용할 수 있다.
오브젝트 코드 인스턴스를 더 큰 오브젝트 코드 구성으로 플러그인하는 기능(능력)은 또한 입력 스트림이 시작되는 어드레스 및/또는 출력 스트림이 전송될 어드레스가 오브젝트 코드 레벨에서 각각의 입력 변수로 특정되는 경우 향상된다. 예를 들어, 다시 OP3을 예로 들자면, OP3가 BASE = 3 및 위에서 설명된 제2(OP1 + OP3) 애플리케이션을 위해 사용될 때, OP3에 대한 입력 데이터가 어디서 왔는지를 식별하는 추가 입력 변수(IN)는 IN=2로 설정(세팅)될 수 있다 (코어(502_2)에서 실행중인 OP1의 K2는 OP1 + OP3 애플리케이션에 대한 입력 데이터를 OP3에 보낸다). OP3가 출력 정보를 보낼 곳을 식별하는 목적지는 OUT = 0으로 설정된 다른 변수 OUT으로 지정될 수 있다(OP3는 OP1 + OP3 애플리케이션에서 사용될 때 I/O 유닛(505)에 출력 데이터를 전송함). 상술한 바와 같이, 이들 설정(세팅)들로, OP3의 오브젝트 코드 인스턴스는 도 6c의 구성으로 프로세서가 설정되어있는 OP1 + OP2 애플리케이션 내에서 오퍼레이팅할 수 있다.
독립 실행 오퍼레이션을 위해 OP3 오브젝트 코드의 동일한 인스턴스의 카피를 재사용하려면 입력 구성 정보는 IN = OUT = 0 및 BASE = 1로 설정되야만 한다. 이러한 구성으로, OP3는 I/O 유닛(505)으로부터 입력 데이터를 수신하고 그 출력 데이터를 I/O 유닛(505)으로 보낼(전송) 것이다. 또한, 이러한 구성으로, OP3 인스턴스는 도 6a의 프로세서 구성에서 오퍼레이팅할 수 있다. 이와 같이 OP3 코드의 동일한 인스턴스는 본질적으로 다른 내부 네트워크 링 구성을 포함하는 기본 프로세서 구성과 무관하다.
따라서, 전반적인 애플리케이션 소프트웨어 개발 환경은 기본적이고 자주 사용되는/재사용된 프로세싱 기능을 수행하도록 작성된 소스 코드 레벨에서 더 세분화된(smaller granularized) 애플리케이션 소프트웨어 프로그램의 개발을 포함할 수 있다. 더 세분화된 소스 코드 애플리케이션은 각각의 오브젝트 코드 인스턴스로 컴파일(컴파일링)된다. 그 다음 필요에 따라 오브젝트 코드 인스턴스가 카피되고, 더 크고 포괄적인(comprehensive) 실행 가능 오브젝트 코드 레벨 애플리케이션을 형성하기 위해 오브젝트 코드 인스턴스의 다른 카피들과 결합된다.
다른 수의 코어들을 갖는 상이한 하드웨어 플랫폼이 존재한다면 더 많은 효율성을 실현할 수 있다. 여기서, 도 6a 내지 6d에 관한 상기 설명은, 8개 코어가 있는 단일 하드웨어 플랫폼에 대한 것이며, 8개 코어 플랫폼은 2개, 4개, 6개 또는 8개의 활성 코어로 구성될 수 있다. 다시 말하면, 예를 들어, 2 커널 오브젝트 코드 레벨 프로그램(예를 들어, OP1)은 OP1 프로그램에 대한 2개의 새로운 오브젝트 코드 인스턴스를 재컴파일하지 않고도 이들 구성 중 임의의 것으로 오퍼레이팅할 수 있다.
이 다양성(versatility)은 예를 들어, 1) 2개의 활성 코어의 단일 구성을 지원하는 2개의 코어로만 구성된 제1 하드웨어 플랫폼; 2) 2개의 활성 코어의 제1 구성 및 4개의 활성 코어의 제2 구성을 지원하는 4개의 코어로 구성된 제2 하드웨어 플랫폼; 3) 2개의 코어를 지원하는 제1 구성, 4개의 코어를 지원하는 제2 구성, 및 6개의 코어를 지원하는 제3 구성을 지원하는 6개의 코어로 구성된 제3 하드웨어 플랫폼; 그리고 4) 도 6a 내지 6d와 관련하여 상술한 4가지 상이한 구성을 지원하는 8개의 코어로 구성된 제4 하드웨어 플랫폼으로 구성된 제품 라인으로 더욱 확장할 수 있다.
2개의 커널을 사용하는 오브젝트 코드 레벨 프로그램 OP1은 위의 4)의 하드웨어 플랫폼의 4개 구성 각각에서 오퍼레이팅할 수 있는 것으로 위에서 소상히 설명된다. 그러나, 상기 1), 2) 및 3)의 하드웨어 플랫폼이 여기에 설명된 바와 같이 네트워크 노드를 열거하도록 설계된 경우, 4)의 하드웨어 플랫폼의 4개 구성 모두에서 동작 가능한 오브젝트 코드 레벨 프로그램 OP1은, i) 위 3)의 하드웨어 플랫폼의 3개의 다른 구성; ii) 위 2)의 하드웨어 플랫폼의 2개의 다른 구성; 그리고 iii) 위 1)의 하드웨어 플랫폼 중에서 또한 동작가능할 것이다. 따라서, 코드 재사용 기능은 동일한 하드웨어 플랫폼의 다른 구성뿐만 아니라 다양한 하드웨어 플랫폼의 다양한 구성으로 확장한다. 상기 코드는 독립 실행형(독립형)이거나 위에 설명된 다른 오브젝트 코드 레벨 프로그램과 결합될 수 있다.
도 7은 상술 한 방법을 도시한다. 도 7에서 관찰되는 바와 같이, 본 방법은, 프로세서 상에 실행되도록 오브젝트 코드의 제1 인스턴스를 구성하는 단계(701)를 포함하며, 상기 프로세서는 다수의 코어 및 내부 네트워크를 가지며, 상기 내부 네트워크는 제1 개수의 코어가 통신 가능하게 결합될 수 있게 하는 제1 구성으로 구성된다. 상기 방법은 또한, 상기 프로세서의 제2 인스턴스상에서 실행되도록 상기 오브젝트 코드의 제2 인스턴스를 구성하는 단계(702)를 포함하며, 상기 프로세서의 제2 인스턴스의 각각의 내부 네트워크는 상이한 수의 코어가 통신 가능하게 결합 될 수 있게 하는 제2 구성으로 구성되며, 상기 프로세서상의 동일 위치 코어 및 상기 프로세서의 제2 인스턴스는 상기 제1 및 제2 구성에 대해 동일한 네트워크 어드레스를 갖는다.
전술한 아이디어는 도 5의 특정 프로세서에 한정되지 않는다는 것을 인식하는 것이 적절하다. 여기서, 예를 들어 상이한 수의 프로세싱 코어 또는 상이한 유형의 내부 네트워크 토폴로지를 갖는 다른 프로세서들이 본 명세서의 교시를 이용할 수 있다. 즉, 다른 네트워크 토폴로지(예: 교환 연결 네트워크(switched connection network))는 소스/대상 노드들의 물리적 어드레스를 다른 내부 네트워크 구성에 걸쳐 일정하게 유지하고 및/또는 서로 다른 내부 네트워크 구성에서 계속적이고 연속적인 물리적 어드레스를 유지하도록 설계될 수 있다.
3.0 이미지 프로세서 구현 실시 예
도 8a-e 내지 도 12e는 상기에서 설명된 이미지 프로세서 및 관련 스텐실 프로세서에 대한 다양한 실시 예의 동작 및 설계에 관한 부가적인 세부 사항을 제공한다. 도 2의 설명으로부터 라인 버퍼 유닛이 라인 그룹을 스텐실 프로세서의 관련 시트 생성기에 공급한다는 것을 상기하면, 도 8a 내지 도 8e는 라인 버퍼 유닛(201)의 파싱 활동(parsing activity), 시트 생성기 유닛(203)의 세밀한 파싱 활동뿐만 아니라 시트 생성기 유닛(203)에 연결된 스텐실 프로세서의 스텐실 프로세싱 활동의 하이 레벨 실시 예를 도시한다.
도 8a는 이미지 데이터(801)의 입력 프레임의 실시 예를 도시한다. 도 8a는 또한 스텐실 프로세서가 오퍼레이팅하도록 설계된 3개의 중첩 스텐실(802)(각각 3 x 3 픽셀의 치수를 갖는)의 아웃라인(outline)을 도시한다. 각 스텐실이 각각 출력 이미지 데이터를 생성하는 출력 픽셀은 단색 검정색(solid black)으로 강조 표시된다. 단순화를 위해, 3개의 중첩 스텐실(802)은 수직 방향으로만 중첩되는 것으로 도시된다. 실제로 스텐실 프로세서는 수직 및 수평 방향 모두에서 중첩 스텐실을 갖도록 설계될 수 있음을 인식하는 것이 적절하다.
스텐실 프로세서 내의 수직 중첩(오버랩) 스텐실(802) 때문에, 도 8a에서 관찰되는 바와 같이, 단일 스텐실 프로세서가 오퍼레이팅할 수 있는 프레임 내의 넓은 범위의 이미지 데이터가 존재한다. 아래에서보다 상세히 설명하는 바와 같이, 일 실시 예에서, 스텐실 프로세서는 중첩하는 스텐실들 내의 데이터를 이미지 데이터를 통해 왼쪽에서 오른쪽으로 프로세싱한다(라인들의 다음 세트에 대해 위에서 아래 순서로 반복). 따라서 스텐실 프로세서가 계속해서 작동하면서 단색 검정색 출력 픽셀 블록의 수는 수평 방향으로 오른쪽으로 증가한다. 전술한 바와 같이, 라인 버퍼 유닛(201)은 스텐실 프로세서가 확장된 수의 입력 사이클(upcoming cycles) 동안 오퍼레이팅하기에 충분한 입력 프레임으로부터 입력 이미지 데이터의 라인 그룹을 파싱하는 역할을 한다. 라인 그룹의 예시적인 묘사는 음영 영역(803)으로 도시된다. 일 실시 예에서, 라인 버퍼 유닛(201)은 시트 생성기로 또는 시트 생성기로부터 라인 그룹을 송수신하기 위한 상이한 역동성(dynamics)을 이해할 수 있다. 예를 들어, "전체 그룹 (full group)"으로 지칭되는 하나의 모드에 따라, 이미지 데이터의 완전한 전체 폭 라인은 라인 버퍼 유닛과 시트 생성기 사이에서 전달된다. "가상 높이(virtually tall)"라고 하는 제2 모드에 따다, 라인 그룹은 초기에는 전체 폭 행들의 서브세트와 함께 전달된다. 그 다음, 나머지 행들은 작은 (전체 폭보다 작은) 부분으로 순차적으로 전달된다.
라인 버퍼 유닛에 의해 정의되고 시트 생성기 유닛으로 전달된 입력 이미지 데이터의 라인 그룹(803)으로, 시트 생성기 유닛은 라인 그룹을 스텐실 프로세서의 하드웨어 제한에보다 정확하게 부합되는 더 미세한 시트로 파싱한다. 보다 상세하게는, 이하에 더욱 상세히 설명하는 바와 같이, 일 실시 예에서, 각 스텐실 프로세서는 2차원 시프트 레지스터 어레이로 구성된다. 2차원 시프트 레지스터 어레이(배열)는 본질적으로 이미지 데이터를 실행 레인의 어레이 "아래(beneath)"로 시프트시키며, 여기서 시프팅 패턴은 각 실행 레인이 각각의 스텐실 내의 데이터에 대해 오퍼레이팅하도록 한다(즉, 각 실행 레인은 자체 스텐실 정보를 프로세싱하여 해당 스텐실에 대한 출력을 생성한다). 일 실시 예에서, 시트들은 2차원 시프트 레지스터 어레이에 "채워지거나(fill)" 로드되는 입력 이미지 데이터의 표면 영역이다.
아래에서 더 상세히 설명되는 바와 같이, 다양한 실시 예에서, 실제로 임의의 사이클에서 시프트될 수 있는 2차원 레지스터 데이터의 다중 층이 존재한다. 편의상, 본 설명의 대부분은 시프트될 수 있는 2차원 레지스터 데이터의 하나 이상의 그러한 계층들을 갖는 구조를 지칭하기 위해 단순히 "2차원 시프트 레지스터" 등의 용어를 사용한다.
따라서, 도 8b에 도시된 바와 같이, 상기 시트 생성기는 라인 그룹(803)으로부터 초기 시트(804)를 파싱하여 이를 스텐실 프로세서에 제공한다(여기서, 데이터의 시트는 일반적으로 참조 번호 804로 식별되는 음영 영역에 대응한다). 도 8c 및 도 8d에 도시된 바와 같이, 스텐실 프로세서는 중첩 스텐실(802)을 시트를 통해 좌측에서 우측으로 효과적으로 이동시킴으로써 입력 이미지 데이터의 시트에 대해 오퍼레이팅한다. 도 8d에 도시된 바와 같이, 출력값이 시트 내의 데이터로부터 계산 될 수있는 픽셀의 수는 소진(exhausted)된다(다른 픽셀 위치는 시트 내의 정보로부터 결정된 출력 값을 가질 수 없다). 단순화를 위해 이미지의 경계 영역이 무시되었다.
도 8e에 도시된 바와 같이, 상기 시트 발생기는 스텐실 프로세서가 오퍼레이션을 계속하기 위해 다음 시트(805)를 제공한다. 다음 시트에서 오퍼레이션하기 시작할 때의 스텐실의 초기 위치는 (도 8d에서 이전에 도시된 바와 같이) 제1 시트상의 소진(exhaustion) 지점에서 우측으로의 다음 진행이다. 새로운 시트(805)에서, 스텐실 프로세서가 제1 시트의 프로세싱과 동일한 방식으로 새로운 시트상에서 오퍼레이팅함에 따라, 스텐실은 오른쪽으로 계속 이동할 것이다.
출력 픽셀 위치를 둘러싸는 스텐실의 경계 영역 때문에 제1 시트(804)의 데이터와 제2 시트(805)의 데이터 사이에 약간의 오버랩(중첩)이 있음에 유의한다. 상기 중첩은 시트 생성기가 중첩 데이터를 두 번 재전송함으로써 간단히 처리될 수 있다. 다른 구현 예에서, 스텐실 프로세서에 다음 시트를 공급하기 위해, 시트 생성기는 스텐실 프로세서에 새로운 데이터를 전송하기만하고, 스텐실 프로세서는 이전 시트로부터 중첩 데이터를 재사용할 수 있다.
도 9는 스텐실 프로세서 아키텍처(900)의 일 실시 예를 도시한다. 도 9에서 알 수 있는 바와 같이, 스텐실 프로세서는 데이터 계산(연산) 유닛(901), 스칼라 프로세서(902) 및 관련 메모리(903) 및 I/O 유닛(904)을 포함한다. 데이터 연산 유닛(901)은 어레이의 특정 행들 또는 열들과 관련된 개별 랜덤 액세스 메모리들(907), 2차원 시프트 어레이 구조(906) 및 실행 레인들의 어레이(905)를 포함한다.
I/O 유닛(904)은 시트 생성기로부터 수신된 "입력" 시트를 데이터 연산 유닛(901)에 로딩하고 스텐실 프로세서로부터 시트 생성기로 데이터의 "출력" 시트를 저장하는 역할을 한다. 일 실시 예에서, 시트 데이터를 데이터 연산 유닛(901)에 로딩하는 것은 수신된 시트를 이미지 데이터의 행/열로 파싱하고 그리고 이미지 데이터의 행/열을 2차원 시프트 레지스터 구조(906) 또는 실행 레인 어레이의 행/열의 각각의 랜덤 액세스 메모리 (907)로 로드하는 것을 수반한다(아래에서 더 자세히 설명됨). 시트가 초기에 메모리(907)에 로드되면, 실행 레인 어레이(905) 내의 개별 실행 레인은 (예를 들어, 시트 데이터의 오퍼레이션 직전에 로드 명령어로서) 적절할 때 랜덤 액세스 메모리(907)로부터 2차원 시프트 레지스터 구조(906)로 시트 데이터를 로드할 수 있다. (시트 발생기로부터 또는 메모리(907)로부터 직접적으로) 레지스터 구조(906)에 데이터 시트의 로딩이 완료되면, 실행 레인 어레이(905)의 실행 레인은 데이터에 대해 오퍼레이팅하여 최종적으로 시트로서 시트 생성기 또는 랜덤 액세스 메모리(907)로 다시 최종적으로 "기록된다(write back)". 나중에 I/O 유닛(904)이 랜덤 액세스 메모리들(907)로부터 데이터를 인출하여 출력 시트를 형성하고, 형성된 출력 시트는 시트 생성기로 전송된다.
스칼라 프로세서(902)는 스칼라 메모리(903)로부터 스텐실 프로세서의 프로그램 코드의 명령어들을 판독하여 상기 명령어들을 실행 레인 어레이(905)의 실행 레인들로 발행하는 프로그램 컨트롤러(제어기)(909)를 포함한다. 일 실시예에서, 단일 동일 명령어는 데이터 연산 유닛(901)으로부터 단일 명령 다중 데이터(SIMD: single instruction multiple data)) 유사 동작(behavior)을 수행하도록 어레이(905) 내의 모든 실행 레인들로 브로드캐스트된다. 일 실시예에서, 스칼라 메모리(903)로부터 판독되고 실행 레인 어레이(905)의 실행 레인들로 발행되는 명령어들의 명령어 포맷은 명령당 하나 이상의 오피코드(opcode)를 포함하는 VLIW(very-long-instruction-word) 타입 포맷을 포함한다. 추가 실시예에서, VLIW 포맷은 각 실행 레인의 ALU에 의해 수행되는 수학적 기능을 지시하는 ALU 오피코드(아래에 개시된 바와같이, 일 실시예에서, 하나 이상의 종래의 ALU 오퍼레이션을 지정할 수 있는) 및 메모리 오피코드(특정 실행 레인 또는 실행 레인 세트에 대해 메모리 오퍼레이션을 지시하는)를 포함한다.
용어 "실행 레인"은 명령어(예컨대, 명령어를 실행할 수 있는 논리 회로)을 실행할 수 있는 하나 이상의 실행 유닛의 세트를 지칭한다. 실행 레인은, 다양한 실시예에서, 그러나 단지 실행 유닛 이상의 프로세서-유사 기능을 더 많이 포함할 수 있다. 예를 들어, 하나 이상의 실행 유닛 외에도, 실행 레인은 수신된 명령어를 디코딩하는 논리 회로, 또는 더 많은 다중 명령 다중 데이터(MIMD) 형 설계의 경우 명령을 인출(fetch) 및 디코드하는 논리 회로를 또한 포함할 수 있다. MIMD형 접근법(방법)과 관련하여, 비록 중앙 집중식 프로그램 제어 접근법이 본 명세서에 대부분 기술되었지만, 보다 분산된 접근법이 (예를 들어, 프로그램 코드 및 어레이(905)의 각 실행 레인 내의 프로그램 제어기를 포함하는) 다양한 대안적인 실시예들에서 구현될 수 있다.
실행 레인 어레이(905), 프로그램 제어기(909) 및 2차원 시프트 레지스터 구조(906)의 조합은 광범위한 프로그램 가능 기능들을 위한 폭넓게 적응/구성 가능한 하드웨어 플랫폼을 제공한다. 예를 들어, 애플리케이션 소프트웨어 개발자는 개별 실행 레인이 매우 다양한 기능을 수행할 수 있고 임의의 출력 어레이 위치에 근접한 입력 이미지 데이터에 용이하게 액세스할 수 있다는 점에서 치수(예컨대, 스텐실 크기)뿐만 아니라 넓은 범위의 상이한 기능적 성능(capability)을 갖는 커널들을 프로그래밍할 수 있다.
실행 레인 어레이(905)에 의해 오퍼레이팅되는 이미지 데이터에 대한 데이터 저장소로서 동작하는 것 이외에, 랜덤 액세스 메모리(907)는 하나 이상의 룩-업 테이블을 또한 유지할 수 있다. 다양한 실시예에서, 하나 이상의 스칼라 룩-업 테이블이 또한 스칼라 메모리(903) 내에 인스턴스화될 수 있다.
스칼라 룩-업은 동일한 룩-업 테이블로부터의 동일 데이터 값을 동일한 인덱스로부터 실행 레인 어레이(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)은 병렬로 실행될 수 있음).
일 실시예에서, 스칼라 프로세서에 의해 실행되는 스칼라 명령들은 메모리들 또는 데이터 연산 유닛(901)의 2D 시프트 레지스터(906)로부터 시트들을 로드/저장하기 위해 시트 생성기(703)로 발행되는 명령들을 포함한다. 여기서, 시트 생성기의 오퍼레이션은 라인 버퍼 유닛(701)의 오퍼레이션 또는 시트 생성기가 스칼라 프로세서에 의해 발행된 임의의 명령을 완료하는데 걸리는 사이클 수의 사전 실행 시간(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은, 명목상의 실시예에서, 양측(우측, 하측)에 있는 레지스터가 수평 및 수직 연결을 모두 가질 때 수평 시프트 연결들만을 갖는 할로의 우측 레지스터들과 수직 시프트 연결들만을 갖는 할로의 하측 레지스터들을 도시한다. 다양한 실시 예들에서, 할로 영역은 이미지 프로세싱 명령들을 실행하기 위한 해당 실행 레인 로직(예컨대, ALU가 존재하지 않음)을 포함하지 않는다. 그러나, 개별 할로 액세스 레지스터 위치가 개별적으로 메모리에서 데이터를 로드하고 데이터를 메모리에 저장할 수 있도록 개별 메모리 액세스 유닛(M)이 각 할로 영역 위치에 있다.
추가의 스필-오버 공간(room)은 어레이의 각 행 및/또는 각 열 또는 그 일부들에 결합(couple)되는 랜덤 액세스 메모리(1007)들에 의해 제공된다(예를 들어, 랜덤 액세스 메모리는 4개의 실행 레인 행 및 2개의 실행 레인 열에 걸쳐 있는 실행 레인 어레이의 "영역(region)"에 할당될 수 있다. 간략화를 위해, 나머지 애플리케이션은 주로 행 및/또는 열 기반 할당 방식(schemes)을 참조할 것이다). 여기서, 실행 레인의 커널 동작이 2차원 시프트 레지스터 어레이(1006)(일부 이미지 처리 루틴에 필요할 수 있는) 외부의 픽셀 값들을 처리하도록 요구하는 경우, 이미지 데이터의 평면은 예를 들어 할로 영역(1009)으로부터 랜덤 액세스 메모리(1007)로 더 스필-오버할 수 있다. 예를 들어, 하드웨어가 실행 레인 어레이의 우측 에지에 있는 실행 레인의 우측에 4개의 저장 요소만 있는 할로 영역을 포함하는 6×6 스텐실을 생각해 보자. 이 경우, 데이터는 스텐실을 완전히 프로세싱하기 위해 할로 영역(1009)의 우측 에지에서 오른쪽으로 더 멀리 시프트되어야 한다. 할로 영역(1009) 외부로 시프트된 데이터는 랜덤 액세스 메모리(1007)로 스필-오버될 것이다. 랜덤 액세스 메모리들(1007) 및 도 9의 스텐실 프로세서의 다른 애플리케이션들이 아래에 더 제공된다.
도 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에서 관찰되는 바와 같이, 두 실행 레인의 프로그램 코드는 시프트 레지스터 어레이 내의 데이터가 한 위치 아래로 시프트(shift)되고 한 위치 우측(right)으로 시프트되게 한다. 이는 두 실행 레인을 그들 각각의 스텐실의 상부 좌측 코너로 정렬시킨다. 이후 프로그램 코드는 그들 각각의 위치들에 있는(R2에 있는) 데이터가 R1으로 로딩(load)되게 한다.
도 11c에서 관찰되는 바와 같이, 프로그램 코드는 다음으로 실행 레인 쌍이 시프트 레지스터 어레이 내의 데이터를 좌측으로 1 단위(unit) 시프트시켜 각 실행 레인의 각각의 위치의 우측에 있는 값이 각각의 실행 레인 위치로 시프트되게 한다. 그 다음 R1의 값(이전 값)은 실행 레인 위치(R2에 있는)로 시프트된 새로운 값으로 가산(ADD)된다. 그 결과는 R1에 기록된다. 도 11d에서 관찰되는 바와 같이, 도 11c에 대해 전술한 것과 동일한 프로세스가 반복되어 상기 결과(R1)가 상부(upper) 실행 레인에 A+B+C 값을 포함하고 하부(lower) 실행 레인에 F+G+H 값을 포함하게 한다. 이 시점에서 두 실행 레인은 그들의 각각의 스텐실의 상부 행을 프로세싱한다. 실행 레인 어레이의 좌측에 있는 할로 영역(좌측에 하나가 있는 경우)에 스필-오버를 기록하거나 할로 영역이 실행 레인 어레이의 좌측에 존재하지 않으면 랜덤 액세스 메모리에 스필-오버를 기록한다.
도 11e에서 관찰되는 바와 같이, 프로그램 코드는 다음으로 시프트 레지스터 어레이 내의 데이터를 1 단위 위로 시프트시켜 두 실행 레인이 각각의 스텐실의 중간 행의 우측 에지와 정렬되게 한다. 두 실행 레인의 레지스터(R1)는 현재 스텐실의 상측(top) 행과 중간 행의 최우측(rightmost) 값의 합산을 포함한다. 도 11f 및 11g는 두 실행 레인의 스텐실의 중간 행을 가로질러 왼쪽으로 움직이는 계속 진행(continued progress)을 보여준다. 누적 가산은 도 11g의 프로세싱의 끝에서 두 실행 레인이 각각의 스텐실의 상측 행과 중간 행의 값들의 합산을 포함하도록 계속된다.
도 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)로부터의 컨텐츠를 좌측, 우측, 상측 및 하측 이웃들 각각으로 시프트시킬 것이다. 동일한 시프트 시퀀스와 공조하여, 실행 레인은 또한 그의 좌측, 우측, 상측 및 하측 이웃들 중 특정 하나로부터의 컨텐츠를 그의 레지스터 파일로 시프트시킬 것이다. 다시, 시프트 아웃 타겟(shift out target) 및 시프트 인 소스(shift in source)는 모든 실행 레인에 대해 동일 시프트 방향과 일치해야 한다(예컨대, 시프트 아웃이 우측 이웃에 대한 것이면, 시프트 인은 좌측 이웃으로부터 있어야 함).
일 실시예에서, 단지 하나의 레지스터의 컨텐츠가 사이클 당 실행 레인 당 시프트되도록 허용되었지만, 다른 실시예들은 하나 이상의 레지스터의 컨텐츠가 시프트 인/아웃되도록 허용할 수 있다. 예를 들어, 도 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)에 의해 실행되어, 그들의 관련 랜덤 액세스 메모리로부터/로 데이터를 인출/저장한다. 또한 하드웨어 실행 레인(601)은 2차원 시프트 레지스터 구조 내의 데이터를 시프트하기 위한 시프트 동작 명령(우측, 좌측, 상측, 하측)을 지원한다. 전술한 바와 같이, 프로그램 제어 명령들은 주로 스텐실 프로세서의 스칼라 프로세서에 의해 실행된다.
4.0 구현 예들
전술한 다양한 이미지 프로세서 아키텍처 특징들은 종래의 의미에서의 이미지 프로세싱에 반드시 제한되는 것이 아니며 따라서 이미지 프로세서가 재-특징화될 수 있는(또는 되지 않을 수 있는) 다른 애플리케이션들에 적용될 수 있다는 것을 지적하는 것이 적절하다. 예를 들어, 상술한 다양한 이미지 프로세서 아키텍처 특징들 중 임의의 것이 실제카메라 이미지들의 프로세싱과는 대조적으로 애니메이션의 생성 및/또는 발생 및/또는 렌더링에 사용되면, 이미지 프로세서는 그래픽 프로세싱 유닛으로서 특징화될 수 있다. 부가적으로, 상술한 이미지 프로세서 아키텍처 특징들은 비디오 프로세싱, 비전 프로세싱, 이미지 인식 및/또는 기계 학습과 같은 다른 기술적 애플리케이션들에 적용될 수 있다. 이러한 방식으로 적용되면, 이미지 프로세서는 더 범용 프로세서(예를 들어, 컴퓨팅 시스템의 CPU이거나 그 일부인)와 통합되거나(예를 들어, 코-프로세서로서) 또는 컴퓨팅 시스템 내의 독립형 프로세서일 수 있다 .
전술한 하드웨어 설계 실시예들은 반도체 칩 내에서 및/또는 반도체 제조 프로세스를 향한 최종 타게팅을 위한 회로 설계의 디스크립션(description)으로서 구현될 수 있다. 후자의 경우에서, 그러한 회로 디스트립션들은(예를 들어, VHDL 또는 Verilog) 레지스터 전송 레벨(RTL) 회로 디스크립션, 게이트 레벨 회로 디스크립션, 트랜지스터 레벨 회로 디스크립션 또는 마스크 디스크립션 또는 그들의 다양한 조합의 형태를 취할 수 있다. 회로 디스크립션은 일반적으로 컴퓨터 판독 가능 저장 매체(CD-ROM 또는 다른 유형의 저장 기술)로 구현된다.
전술한 섹션들로부터, 전술한 바와같은 이미지 프로세서가 컴퓨터 시스템상의 하드웨어로(예를 들어, 핸드헬드 디바이스의 카메라로부터의 데이터를 프로세싱하는 핸드헬드 디바이스의 시스템 온 칩(SOC)의 일부로서) 구현될 수 있음을 인식하는 것이 적절하다. 이미지 프로세서가 하드웨어 회로로서 구현되는 경우, 이미지 프로세서에 의해 프로세싱되는 이미지 데이터는 카메라로부터 직접 수신될 수 있다는 점에 유의한다. 여기서, 이미지 프로세서는 개별 카메라의 일부이거나, 통합된 카메라를 갖는 컴퓨팅 시스템의 일부일 수 있다. 후자의 경우에서, 이미지 데이터는 카메라 또는 컴퓨팅 시스템의 시스템 메모리로부터 직접 수신될 수 있다(예를 들어, 카메라는 자신의 이미지 데이터를 이미지 프로세서가 아닌 시스템 메모리로 전송함). 이전 섹션에서 설명한 많은 기능들이(애니메이션을 렌더링하는) 그래픽 프로세서 유닛에 적용될 수 있다.
도 13은 컴퓨팅 시스템의 예시적인 도면을 제공한다. 이하에서 설명되는 컴퓨팅 시스템의 많은 구성 요소는 통합된 카메라 및 관련 이미지 프로세서(예컨대, 스마트 폰 또는 태블릿 컴퓨터와 같은 핸드헬드 디바이스)를 갖는 컴퓨팅 시스템에 적용 가능하다. 당업자는이 두 가지를 쉽게 구분할 수 있다.
도 13에서 관찰되는 바와 같이, 기본 컴퓨팅 시스템은 중앙 처리 장치(1301)(예를 들어, 멀티-코어 프로세서 또는 애플리케이션 프로세서상에 배치된 복수의 범용 프로세싱 코어(1315_1 내지 1315_N 및 메인 메모리 제어기(1317)를 포함할 수 있는) 시스템 메모리(1302), 디스플레이(1303)(예컨대, 터치 스크린, 플랫-패널), 로컬 유선 포인트-투-포인트 링크(예컨대, USB) 인터페이스(1304), 다양한 네트워크 I/O 기능들(N'wk)(1305)(이더넷 인터페이스 및/또는 셀룰러 모뎀 서브 시스템과 같은), 무선 로컬 영역 네트워크(예컨대, WiFi) 인터페이스(1306), 무선 포인트-투-포인트 링크(예컨대, 블루투스) 인터페이스(1307) 및 GPS 인터페이스(1308), 다양한 센서(1309_1 내지 1309_N), 하나 이상의 카메라(1310), 배터리(1311), 전력 관리 제어 유닛(Pwr Mgt)(1312), 스피커 및 마이크로폰(1313) 및 오디오 코덱/디코더(CODEC)(1314)를 포함한다.
애플리케이션 프로세서 또는 멀티-코어 프로세서(1350)는 CPU(1301), 하나 이상의 그래픽 프로세싱 유닛(1316), 메모리 관리 기능(MC)(1317)(예를 들어, 메모리 제어기), I/O 제어 기능(I/O)(1318) 및 이미지 프로세싱 유닛(1319)을 포함한다. 범용 프로세싱 코어들(1315)은 전형적으로 컴퓨팅 시스템의 운영 체제 및 애플리케이션 소프트웨어를 실행한다. 그래픽 프로세싱 유닛(1316)은 전형적으로 예를 들어 디스플레이(1303) 상에 제시되는 그래픽 정보를 생성하기 위해 그래픽 집중 기능들을 실행한다. 메모리 제어 기능(1317)은 시스템 메모리(1302)와 인터페이스하여 시스템 메모리(1302)로/로부터 데이터를 기록/판독한다. 전력 관리 제어 유닛(1324)은 일반적으로 시스템(1300)의 전력 소비를 제어한다.
이미지 프로세싱 유닛(IPU)(1319)은 이전 섹션들에서 전술한 임의의 이미지 프로세싱 유닛 실시예들에 따라 구현될 수 있다. 선택적으로 또는 조합하여, IPU(1319)는 GPU(1316) 및 CPU(1301) 중 하나 또는 둘 모두에 그들의 코(co)-프로세서로서 연결될 수 있다. 또한, 다양한 실시예들에서, GPU(1316)는 상술한 임의의 이미지 프로세서 특징들로 구현될 수 있다. 이미지 프로세싱 유닛(1319)은 상기에서 설명된 바와 같은 애플리케이션 소프트웨어로 구성될 수 있다. 또한, 도 13의 컴퓨팅 시스템과 같은 컴퓨팅 시스템은 이미지 프로세서상에 애플리케이션 소프트웨어 프로그램의 구성을 결정하는 상술된 계산을 수행하는 프로그램 코드를 실행할 수 있다.
터치 스크린 디스플레이(1303), 통신 인터페이스(1304~1307), GPS 인터페이스(1308), 센서(1309), 카메라(1310) 및 스피커/마이크로폰 코덱(1313, 1314) 각각은, 적절한 경우 통합된 주변 디바이스(예컨대, 하나 이상의 카메라(1310)를 포함하는 전체 컴퓨팅 시스템에 관련된 다양한 형태의 I/O( 입력 및/또는 출력)로서 간주될 수 있다. 구현예에 따라, 이들 I/O 구성 요소들 중 다양한 것들은 애플리케이션 프로세서/멀티-코어 프로세서(1350) 상에 통합될 수 있거나 애플리케이션 프로세서/멀티-코어 프로세서(1350)의 다이(die) 외부 또는 패키지 외부에 위치될 수 있다.
일 실시예에서, 하나 이상의 카메라(1310)는 그 시야에서 카메라와 객체 사이의 깊이를 측정할 수 있는 깊이 카메라를 포함한다. 애플리케이션 프로세서 또는 다른 프로세서의 범용 CPU 코어(또는 프로그램 코드를 실행하기 위한 명령 실행 파이프 라인을 갖는 다른 기능 블록)에서 실행하는 애플리케이션 소프트웨어, 운영 체제소프트웨어, 디바이스 드라이버 소프트웨어 및/또는 펌웨어는 전술한 임의의 기능들을 수행할 수 있다.
본 발명의 실시예들은 전술한 바와 같은 다양한 프로세스를 포함할 수 있다. 프로세스들은 기계 실행 가능 명령들로 구현될 수 있다. 상기 명령들은 범용 또는 특수 목적 프로세서로 하여금 특정 프로세스들을 수행하도록 하는데 사용될 수 있다. 대안적으로, 이들 프로세스는 상기 프로세스들을 수행하기 위한 하드 와이어드 로직을 포함하는 특정 하드웨어 구성 요소들에 의해 또는 프로그래밍된 컴퓨터 구성 요소들 및 커스텀 하드웨어 구성 요소들의 임의의 조합에 의해 수행될 수 있다.
본 발명의 요소들은 기계 실행 가능 명령들을 저장하기 위한 기계 판독 가능 매체로서 또한 제공될 수 있다. 기계 판독 가능 매체는 플로피 디스켓, 광 디스크, CD-ROM 및 광 자기 디스크, 플래시 메모리, ROM, RAM, EPROM, EEPROM, 자기 또는 광학 카드, 전파 매체 또는 전자 명령들을 저장하기에 적합한 다른 유형의 매체/기계-판독 가능 매체를 포함할 수 있지만 이에 한정되는 것은 아니다. 예를 들어, 요소들은 통신 링크(예컨대, 모뎀 또는 네트워크 연결)를 통해 반송파 또는 다른 전파 매체에 구체화된 데이터 신호들에 의해 원격 컴퓨터(예컨대, 서버)로부터 요청 컴퓨터(예컨대, 클라이언트)로 전송된 컴퓨터 프로그램으로서 다운로드될 수 있다.
전술한 명세서에서, 특정 예시적인 실시예가 설명되었다. 그러나, 첨부된 청구 범위에 설명된 본 발명의 더 넓은 사상 및 범위를 벗어나지 않고 다양한 변경 및 수정이 이루어질 수 있음이 명백할 것이다. 따라서, 명세서 및 도면은 제한적인 의미라기 보다는 예시적인 것으로 간주되어야 한다.
이하, 일부 예들이 설명된다.
예 1: 이미지 프로세서로서, 복수의 프로세싱 코어들; 그리고 프로세싱 코어들 사이에 결합된 링 네트워크(ring network)를 포함하며, 상기 링 네트워크는 상기 프로세싱 코어들의 제1 세트를 결합하는 제1 구성 및 상기 프로세싱 코어들의 제1 세트와 상기 프로세싱 코어들의 제2 세트를 결합하는 제2 구성을 제공하며, 상기 제1 구성 및 상기 제2 구성은 연속적인 시퀀스(continuous sequence)로 각 프로세싱 코어에 네트워크 어드레스를 할당하고, 상기 제1 구성 및 상기 제2 구성은 상기 프로세싱 코어들의 제1 세트 내의 각각의 프로세싱 코어에 동일한 네트워크 어드레스를 할당하고, 상기 링 주위의 상기 프로세싱 코어들에 할당된 상기 네트워크 어드레스는 상기 연속적인 시퀀스와 다르다.
예 2: 예 1에 있어서, 상기 이미지 프로세서는 상기 제1 및 제2 구성을 설정하기 위한 레지스터 공간을 포함한다.
예 3: 예 1 또는 2에 있어서, 상기 링 네트워크는 멀티플렉서들의 세트를 포함하여, 상기 멀티플렉서들의 세트의 제1 채널의 선택이 상기 링 네트워크로 하여금 상기 링상의 추가 노드들이 포함되도록 하고, 상기 멀티플렉서들의 세트의 제2 채널의 선택이 상기 링 네트워크로 하여금 상기 추가 노드를 제외하도록 한다.
예 4 : 예 3에 있어서, 상기 멀티플렉서들의 세트는 한 쌍의 멀티플렉서들을 포함한다.
예 5: 선행하는 예들 중 적어도 하나에 있어서, 상기 프로세싱 코어는 프로그램 코드를 실행한다.
예 6: 선행하는 예들 중 적어도 하나에 있어서, 상기 프로세싱 코어들은 각각의 실행 레인 어레이 및 2차원 시프트 레지스터 어레이를 포함한다.
예 7: 선행하는 예들 중 적어도 하나에 있어서, 이미지 프로세서의 아키텍처는 적어도 하나의 라인 버퍼, 적어도 하나의 시트 생성기 및/또는 적어도 하나의 스텐실 생성기를 포함한다.
예 8: 선행하는 예들 중 적어도 하나에 있어서, 상기 프로세서는 스텐실들, 특히 중첩 스텐실들을 프로세싱하도록 구성된다.
예 9: 선행하는 예들 중 적어도 하나에 있어서, 상기 프로세서는 특히 상기 실행 레인 어레이 외부의 레지스터들이 있는 상기 실행 레인 어레이보다 넓은 치수를 갖는 시프트 레지스터 구조를 포함하는 데이터 연산 유닛 상에서 오퍼레이팅하도록 구성된다.
예 10: 컴퓨팅 시스템에 의해 프로세싱될 때 방법이 수행되게 하는 프로그램 코드를 포함하는 비-일시적 기계 판독 가능 저장 매체로서, 상기 방법은, 프로세서상에서 실행되도록 오브젝트 코드의 제1 인스턴스를 구성하는 단계 -상기 프로세서는 다수의(복수의) 코어들 및 내부 네트워크를 가지며, 상기 내부 네트워크는 제1 개수의 코어들이 통신 가능하게 결합될 수 있게 하는 제1 구성으로 구성됨 -; 그리고 상기 프로세서의 제2 인스턴스에서 실행되도록 상기 오브젝트 코드의 제2 인스턴스를 구성하는 단계를 포함하며, 상기 프로세서의 제2 인스턴스의 각각의 내부 네트워크는 상이한 수의 코어들이 통신 가능하게 결합될 수 있게 하는 제2 구성으로 구성되며, 상기 프로세서상의 동일 위치(same positioned) 코어들 및 상기 프로세서의 제2 인스턴스는 상기 제1 구성 및 제2 구성에 대해 동일한 네트워크 어드레스를 갖는다.
예 11: 예 10에 있어서, 상기 오브젝트 코드의 상기 제1 인스턴스 및 상기 오브젝트 코드의 상기 제2 인스턴스는 상기 프로세서의 상이한 코어들 및 상기프로세서의 상기 제2 인스턴스에서 실행한다.
예 12: 예 10 또는 11에 있어서, 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스는 상이한 코어들을 베이스 어드레스로부터의 오프셋들로서 어드레싱한다.
예 13: 예 10 내지 12중 적어도 하나에 있어서, 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스를 구성하는 단계는 상기 제1 및 제2 인스턴스에 대해 상이한베이스 어드레스를 설정하는 단계를 포함한다.
예 14: 예 10 내지 13중 적어도 하나에 있어서, 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스 중 하나는 각각의 프로세서상의 큰 애플리케이션(larger application) 내의 코드의 작은(smaller) 컴포넌트로서 실행되며, 상기 큰 애플리케이션은 다른 프로그램의 오브젝트 코드 인스턴스를 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스 중 하나와 결합함으로써 구성된다.
예 15: 예 10 내지 14중 적어도 하나에 있어서, 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스들 중 다른 하나는 각각의 프로세서상의 독립 실행형 애플리케이션으로서 실행된다.
예 16: 예 10 내지 15중 적어도 하나에 있어서, 상기 방법은, 상기 프로세서와는 상이한 수의 코어들을 갖는 다른 프로세서상에서 실행하도록 상기 오브젝트 코드의 제3 인스턴스를 구성하는 단계를 더 포함한다.
예 17: 예 10 내지 16중 적어도 하나에 있어서, 상기 방법은 적어도 하나의 라인 버퍼, 적어도 하나의 시트 생성기(발생기) 및/또는 적어도 하나의 스텐실 생성기(발생기)를 포함하는 이미지 프로세서의 아키텍처상에서 오퍼레이팅한다.
예 18: 예 10 내지 17중 적어도 하나에 있어서, 상기 비-일시적 기계 판독 가능 매체는 스텐실들, 특히 중첩 스텐실들을 프로세싱하도록 구성된다.
예 19: 예 10 내지 18중 적어도 하나에 있어서, 상기 비-일시적 기계 판독 가능 매체는 특히 실행 레인 어레이 외부에 레지스터들이 있는 상기 실행 레인 어레이보다 넓은 치수를 갖는 시프트 레지스터 구조를 포함하는 데이터 연산 유닛 상에서 오퍼레이팅하도록 구성된다.
예 20: 컴퓨팅 시스템으로서,
복수의 프로세싱 코어들;
시스템 메모리;
상기 복수의 프로세싱 코어들과 상기 시스템 메모리 사이의 시스템 메모리 제어기;
상기 컴퓨팅 시스템에 의해 프로세싱될 때 방법을 수행하게 하는 프로그램 코드를 포함하는 비-일시적 기계 판독 가능 저장 매체를 포함하며, 상기 방법은,
프로세서상에서 실행하도록 오브젝트 코드의 제1 인스턴스를 구성하는 단계 -상기 프로세서는 다수의(복수의) 코어들 및 내부 네트워크를 가지며, 상기 내부 네트워크는 제1 개수의 코어들이 통신 가능하게 결합될 수 있게 하는 제1 구성으로 구성됨 -; 그리고 상기 프로세서의 제2 인스턴스에서 실행하도록 상기 오브젝트 코드의 제2 인스턴스를 구성하는 단계를 포함하며, 상기 프로세서의 제2 인스턴스의 각각의 내부 네트워크는 상이한 수의 코어들이 통신 가능하게 결합될 수 있게 하는 제2 구성으로 구성되며, 상기 프로세서상의 동일 위치(same positioned) 코어들 및 상기 프로세서의 제2 인스턴스는 상기 제1 구성 및 제2 구성에 대해 동일한 네트워크 어드레스를 갖는다.
예 21: 예 20에 있어서, 상기 오브젝트 코드의 상기 제1 인스턴스 및 상기 오브젝트 코드의 상기 제2 인스턴스는 상기 프로세서의 상이한 코어들 및 상기 프로세서의 상기 제2 인스턴스를 실행한다.
예 22: 예 20 또는 21에 있어서, 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스는 상이한 코어들을 베이스 어드레스로부터의 오프셋들로서 어드레싱한다.
예 23: 예 20 내지 22중 적어도 하나에 있어서, 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스를 구성하는 단계는 상기 제1 및 제2 인스턴스에 대해 상이한베이스 어드레스를 설정하는 단계를 포함한다.
예 24: 예 20 내지 23중 적어도 하나에 있어서, 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스 중 하나는 각각의 프로세서상의 큰 애플리케이션(larger application) 내의 코드의 작은(smaller) 컴포넌트로서 실행되며, 상기 큰 애플리케이션은 다른 프로그램의 오브젝트 코드 인스턴스를 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스 중 하나와 결합함으로써 구성된다.
예 25: 예 20 내지 24중 적어도 하나에 있어서, 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스들 중 다른 하나는 각각의 프로세서상의 독립 실행형 애플리케이션으로서 실행된다.
예 26: 예 20 내지 25중 적어도 하나에 있어서, 상기 프로세서 및 상기 프로세서의 제2 인스턴스는 이미지 프로세서이다.
예 27: 예 20 내지 26중 적어도 하나에 있어서, 상기 컴퓨팅 시스템은, 적어도 하나의 라인 버퍼, 적어도 하나의 시트 생성기 및/또는 적어도 하나의 스텐실 생성기를 포함하는 아키텍처를 갖는 이미지 프로세서를 포함한다.
예 28: 예 20 내지 27중 적어도 하나에 있어서, 상기 컴퓨팅 시스템은 스텐실들, 특히 중첩 스텐실들을 프로세싱하도록 구성된다.
예 29: 예 20 내지 28중 적어도 하나에 있어서, 상기 비-일시적 기계 판독 가능 매체는
특히 실행 레인 어레이 외부에 레지스터들이 있는 상기 실행 레인 어레이보다 넓은 치수를 갖는 시프트 레지스터 구조를 포함하는 데이터 연산 유닛을 포함한다.

Claims (29)

  1. 이미지 프로세서로서,
    복수의 프로세싱 코어들; 그리고
    프로세싱 코어들 사이에 결합된 링 네트워크를 포함하며, 상기 링 네트워크는 상기 프로세싱 코어들의 제1 세트를 결합하는 제1 구성 및 상기 프로세싱 코어들의 제1 세트와 상기 프로세싱 코어들의 제2 세트를 결합하는 제2 구성을 제공하며, 상기 제1 구성 및 상기 제2 구성은 연속적인 시퀀스로 각 프로세싱 코어에 네트워크 어드레스들을 할당하고, 상기 제1 구성 및 상기 제2 구성은 상기 프로세싱 코어들의 제1 세트 내의 각각의 프로세싱 코어에 동일한 네트워크 어드레스들을 할당하고, 상기 링 주위의 상기 프로세싱 코어들에 할당된 상기 네트워크 어드레스들은 상기 연속적인 시퀀스와 다른 것을 특징으로 하는 이미지 프로세서.
  2. 제1항에 있어서, 상기 이미지 프로세서는 상기 제1 구성 및 제2 구성을 설정하기 위한 레지스터 공간을 포함하는 것을 특징으로 하는 이미지 프로세서.
  3. 제1항 또는 제2항에 있어서,
    상기 링 네트워크는 멀티플렉서들의 세트를 포함하여, 상기 멀티플렉서들의 세트의 제1 채널의 선택이 상기 링 네트워크로 하여금 상기 링상의 추가 노드들이 포함되도록 하고, 상기 멀티플렉서들의 세트의 제2 채널의 선택이 상기 링 네트워크로 하여금 상기 추가 노드들을 제외하도록 하는 것을 특징으로 하는 이미지 프로세서.
  4. 제3항에 있어서, 상기 멀티플렉서들의 세트는 한 쌍의 멀티플렉서들을 포함하는 것을 특징으로 하는 이미지 프로세서.
  5. 선행하는 청구항들 중 적어도 하나에 있어서, 상기 프로세싱 코어들은 프로그램 코드를 실행하는 것을 특징으로 하는 이미지 프로세서.
  6. 선행하는 청구항들 중 적어도 하나에 있어서, 상기 프로세싱 코어들은 각각의 실행 레인 어레이 및 2차원 시프트 레지스터 어레이를 포함하는 것을 특징으로 하는 이미지 프로세서.
  7. 선행하는 청구항들 중 적어도 하나에 있어서, 이미지 프로세서의 상기 아키텍처는 적어도 하나의 라인 버퍼, 적어도 하나의 시트 생성기 및/또는 적어도 하나의 스텐실 생성기를 포함하는 것을 특징으로 하는 이미지 프로세서.
  8. 선행하는 청구항들 중 적어도 하나에 있어서, 상기 프로세서는 스텐실들, 특히 중첩 스텐실들을 프로세싱하도록 구성되는 것을 특징으로 하는 이미지 프로세서.
  9. 선행하는 청구항들 중 적어도 하나에 있어서, 상기 프로세서는 특히 상기 실행 레인 어레이 외부에 레지스터들이 있는 상기 실행 레인 어레이보다 넓은 치수(wider dimension)를 갖는 시프트 레지스터 구조를 포함하는 데이터 연산 유닛 상에서 오퍼레이팅하도록 구성되는 것을 특징으로 하는 이미지 프로세서.
  10. 컴퓨팅 시스템에 의해 프로세싱될 때 방법이 수행되게 하는 프로그램 코드를 포함하는 비-일시적 기계 판독 가능 저장 매체로서, 상기 방법은,
    프로세서상에서 실행하도록 오브젝트 코드의 제1 인스턴스를 구성하는 단계 -상기 프로세서는 복수의 코어들 및 내부 네트워크를 가지며, 상기 내부 네트워크는 제1 개수의 코어들이 통신 가능하게 결합될 수 있게 하는 제1 구성으로 구성됨 -; 그리고
    상기 프로세서의 제2 인스턴스에서 실행하도록 상기 오브젝트 코드의 제2 인스턴스를 구성하는 단계를 포함하며, 상기 프로세서의 제2 인스턴스의 각각의 내부 네트워크는 상이한 수의 코어들이 통신 가능하게 결합될 수 있게 하는 제2 구성으로 구성되며, 상기 프로세서상의 동일 위치(same positioned) 코어들 및 상기 프로세서의 제2 인스턴스는 상기 제1 구성 및 제2 구성에 대해 동일한 네트워크 어드레스들을 갖는 것을 특징으로 하는 비-일시적 기계 판독 가능 저장 매체.
  11. 제10항에 있어서, 상기 오브젝트 코드의 상기 제1 인스턴스 및 상기 오브젝트 코드의 상기 제2 인스턴스는 상기프로세서의 상기 제2 인스턴스 및 상기 프로세서의 상이한 코어들에서 실행되는 것을 특징으로 하는 비-일시적 기계 판독 가능 저장 매체.
  12. 제10항 또는 제11항에 있어서,
    상기 오브젝트 코드의 상기 제1 및 제2 인스턴스는 상이한 코어들을 베이스 어드레스로부터의 오프셋들로서 어드레싱하는 것을 특징으로 하는 비-일시적 기계 판독 가능 저장 매체.
  13. 제10항 내지 제12항 중 적어도 한 항에 있어서, 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스를 구성하는 단계는 상기 제1 및 제2 인스턴스에 대해 상이한 베이스 어드레스들을 설정하는 단계를 포함하는 것을 특징으로 하는 비-일시적 기계 판독 가능 저장 매체.
  14. 제10항 내지 제13항 중 적어도 한 항에 있어서,
    상기 오브젝트 코드의 상기 제1 및 제2 인스턴스 중 하나는 각각의 프로세서상의 큰 애플리케이션(larger application) 내의 코드의 작은(smaller) 컴포넌트로서 실행되며, 상기 큰 애플리케이션은 다른 프로그램의 오브젝트 코드 인스턴스를 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스 중 하나와 결합함으로써 구성되는 것을 특징으로 하는 비-일시적 기계 판독 가능 저장 매체.
  15. 제10항 내지 제14항 중 적어도 한 항에 있어서,
    상기 오브젝트 코드의 상기 제1 및 제2 인스턴스들 중 다른 하나는 각각의 프로세서상의 독립 실행형 애플리케이션으로서 실행되는 것을 특징으로 하는 비-일시적 기계 판독 가능 저장 매체.
  16. 제10항 내지 제15항 중 적어도 한 항에 있어서, 상기 방법은, 상기 프로세서와는 상이한 수의 코어들을 갖는 다른 프로세서상에서 실행하도록 상기 오브젝트 코드의 제3 인스턴스를 구성하는 단계를 더 포함하는 것을 특징으로 하는 비-일시적 기계 판독 가능 저장 매체.
  17. 제10항 내지 제16항 중 적어도 한 항에 있어서, 상기 방법은 적어도 하나의 라인 버퍼, 적어도 하나의 시트 생성기 및/또는 적어도 하나의 스텐실 생성기를 포함하는 이미지 프로세서의 아키텍처상에서 오퍼레이팅하는 것을 특징으로 하는 비-일시적 기계 판독 가능 저장 매체.
  18. 제10항 내지 제17항 중 적어도 한 항에 있어서, 상기 비-일시적 기계 판독 가능 저장 매체는 스텐실들, 특히 중첩 스텐실들을 프로세싱하도록 구성되는 것을 특징으로 하는 비-일시적 기계 판독 가능 저장 매체.
  19. 제10항 내지 제18항 중 적어도 한 항에 있어서, 상기 비-일시적 기계 판독 가능 저장 매체는 특히 실행 레인 어레이 외부에 레지스터들이 있는 상기 실행 레인 어레이보다 넓은 치수를 갖는 시프트 레지스터 구조를 포함하는 데이터 연산 유닛 상에서 오퍼레이팅하도록 구성되는 것을 특징으로 하는 비-일시적 기계 판독 가능 저장 매체.
  20. 컴퓨팅 시스템으로서,
    복수의 프로세싱 코어들;
    시스템 메모리;
    상기 복수의 프로세싱 코어들과 상기 시스템 메모리 사이의 시스템 메모리 제어기;
    상기 컴퓨팅 시스템에 의해 프로세싱될 때 방법을 수행하게 하는 프로그램 코드를 포함하는 비-일시적 기계 판독 가능 저장 매체를 포함하며, 상기 방법은,
    프로세서상에서 실행하도록 오브젝트 코드의 제1 인스턴스를 구성하는 단계 -상기 프로세서는 복수의 코어들 및 내부 네트워크를 가지며, 상기 내부 네트워크는 제1 개수의 코어들이 통신 가능하게 결합될 수 있게 하는 제1 구성으로 구성됨 -; 그리고
    상기 프로세서의 제2 인스턴스에서 실행하도록 상기 오브젝트 코드의 제2 인스턴스를 구성하는 단계를 포함하며, 상기 프로세서의 제2 인스턴스의 각각의 내부 네트워크는 상이한 수의 코어들이 통신 가능하게 결합될 수 있게 하는 제2 구성으로 구성되며, 상기 프로세서상의 동일 위치(same positioned) 코어들 및 상기 프로세서의 제2 인스턴스는 상기 제1 구성 및 제2 구성에 대해 동일한 네트워크 어드레스들을 갖는 것을 특징으로 하는 컴퓨팅 시스템.
  21. 제20항에 있어서, 상기 오브젝트 코드의 상기 제1 인스턴스 및 상기 오브젝트 코드의 상기 제2 인스턴스는 상기 프로세서의 상기 제2 인스턴스 및 상기 프로세서의 상이한 코어들에서 실행하는 것을 특징으로 하는 컴퓨팅 시스템.
  22. 제20항 또는 제21항에 있어서, 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스는 상이한 코어들을 베이스 어드레스로부터의 오프셋들로서 어드레싱하는 것을 특징으로 하는 컴퓨팅 시스템.
  23. 제20항 내지 제22항 중 적어도 한 항에 있어서, 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스를 구성하는 단계는 상기 제1 및 제2 인스턴스에 대해 상이한 베이스 어드레스들을 설정하는 단계를 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  24. 제20항 내지 제23항 중 적어도 한 항에 있어서, 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스 중 하나는 각각의 프로세서상의 큰 애플리케이션(larger application) 내의 코드의 작은(smaller) 컴포넌트로서 실행되며, 상기 큰 애플리케이션은 다른 프로그램의 오브젝트 코드 인스턴스를 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스 중 하나와 결합함으로써 구성되는 것을 특징으로 하는 컴퓨팅 시스템.
  25. 제20항 내지 제24항 중 적어도 한 항에 있어서, 상기 오브젝트 코드의 상기 제1 및 제2 인스턴스들 중 다른 하나는 각각의 프로세서상의 독립 실행형 애플리케이션으로서 실행되는 것을 특징으로 하는 컴퓨팅 시스템.
  26. 제20항 내지 제25항 중 적어도 한 항에 있어서, 상기 프로세서 및 상기 프로세서의 제2 인스턴스는 이미지 프로세서인 것을 특징으로 하는 컴퓨팅 시스템.
  27. 제20항 내는 제26항 중 적어도 한 항에 있어서, 상기 컴퓨팅 시스템은, 적어도 하나의 라인 버퍼, 적어도 하나의 시트 생성기 및/또는 적어도 하나의 스텐실 생성기를 포함하는 아키텍처를 갖는 이미지 프로세서를 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  28. 제20항 내는 제27항 중 적어도 한 항에 있어서, 상기 컴퓨팅 시스템은 스텐실들, 특히 중첩 스텐실들을 프로세싱하도록 구성되는 것을 특징으로 하는 컴퓨팅 시스템.
  29. 제20항 내는 제28항 중 적어도 한 항에 있어서, 상기 비-일시적 기계 판독 가능 매체는 특히 실행 레인 어레이 외부에 레지스터들이 있는 상기 실행 레인 어레이보다 넓은 치수를 갖는 시프트 레지스터 구조를 포함하는 데이터 연산 유닛을 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
KR1020197023971A 2017-05-12 2018-01-12 지원 내부 네트워크 및 구성 가능한 개수의 활성 코어들을 갖는 이미지 프로세서 KR102235056B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/594,502 2017-05-12
US15/594,502 US10789202B2 (en) 2017-05-12 2017-05-12 Image processor with configurable number of active cores and supporting internal network
PCT/US2018/013582 WO2018208339A1 (en) 2017-05-12 2018-01-12 Image processor with configurable number of active cores and supporting internal network

Publications (2)

Publication Number Publication Date
KR20190107101A true KR20190107101A (ko) 2019-09-18
KR102235056B1 KR102235056B1 (ko) 2021-04-01

Family

ID=61132915

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197023971A KR102235056B1 (ko) 2017-05-12 2018-01-12 지원 내부 네트워크 및 구성 가능한 개수의 활성 코어들을 갖는 이미지 프로세서

Country Status (7)

Country Link
US (1) US10789202B2 (ko)
EP (1) EP3622370A1 (ko)
JP (1) JP6967597B2 (ko)
KR (1) KR102235056B1 (ko)
CN (1) CN110300944B (ko)
TW (2) TWI735971B (ko)
WO (1) WO2018208339A1 (ko)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10489878B2 (en) * 2017-05-15 2019-11-26 Google Llc Configurable and programmable image processor unit
US11074213B2 (en) * 2019-06-29 2021-07-27 Intel Corporation Apparatuses, methods, and systems for vector processor architecture having an array of identical circuit blocks
CN110597755B (zh) * 2019-08-02 2024-01-09 北京多思安全芯片科技有限公司 一种安全处理器的重组配置方法
CN113222126B (zh) * 2020-01-21 2022-01-28 上海商汤智能科技有限公司 数据处理装置、人工智能芯片
CN113342719B (zh) * 2021-06-30 2022-12-13 珠海一微半导体股份有限公司 一种运算加速单元及其运算方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5430885A (en) * 1986-10-30 1995-07-04 Hitachi, Ltd. Multi-processor system and co-processor used for the same
US7941698B1 (en) * 2008-04-30 2011-05-10 Hewlett-Packard Development Company, L.P. Selective availability in processor systems
US20140149766A1 (en) * 2012-01-10 2014-05-29 Ahmad Samih Router parking in power-efficient interconnect architectures

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US1400962A (en) * 1920-03-09 1921-12-20 Roy E Leonard Process of and apparatus for drilling oil-wells
CA2101848A1 (en) * 1991-02-06 1992-08-07 Robert Walsh Disk drive array memory system using nonuniform disk drives
JPH06290159A (ja) * 1993-03-30 1994-10-18 Agency Of Ind Science & Technol 並列計算機のプロセス割当方法
JP3290798B2 (ja) * 1994-03-14 2002-06-10 富士通株式会社 並列コンピュータ
US20030033374A1 (en) * 2001-07-24 2003-02-13 Condor Engineering, Inc. Method and system for implementing a communications core on a single programmable device
JP2004252508A (ja) * 2003-02-18 2004-09-09 Nec Corp 単一プロセッサ用ソフトウェアプログラムをマルチプロセッサ用ソフトウェアプログラムに変換する方法
JP2006093937A (ja) * 2004-09-22 2006-04-06 Canon Inc 光電融合回路
JP2012252490A (ja) * 2011-06-02 2012-12-20 Renesas Electronics Corp マルチプロセッサおよびそれを用いた画像処理システム
US9514563B2 (en) 2013-08-30 2016-12-06 Arm Limited Graphics processing systems
WO2015163897A1 (en) 2014-04-24 2015-10-29 Empire Technology Development Llc Core prioritization for heterogeneous on-chip networks
US9769356B2 (en) * 2015-04-23 2017-09-19 Google Inc. Two dimensional shift array for image processor
US10291813B2 (en) 2015-04-23 2019-05-14 Google Llc Sheet generator for image processor

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5430885A (en) * 1986-10-30 1995-07-04 Hitachi, Ltd. Multi-processor system and co-processor used for the same
US7941698B1 (en) * 2008-04-30 2011-05-10 Hewlett-Packard Development Company, L.P. Selective availability in processor systems
US20140149766A1 (en) * 2012-01-10 2014-05-29 Ahmad Samih Router parking in power-efficient interconnect architectures

Also Published As

Publication number Publication date
TW201947524A (zh) 2019-12-16
JP6967597B2 (ja) 2021-11-17
TWI735971B (zh) 2021-08-11
TWI676150B (zh) 2019-11-01
CN110300944B (zh) 2023-05-16
US20180329864A1 (en) 2018-11-15
US10789202B2 (en) 2020-09-29
WO2018208339A1 (en) 2018-11-15
JP2020519979A (ja) 2020-07-02
CN110300944A (zh) 2019-10-01
EP3622370A1 (en) 2020-03-18
KR102235056B1 (ko) 2021-04-01
TW201901612A (zh) 2019-01-01

Similar Documents

Publication Publication Date Title
KR101973733B1 (ko) 높은 성능, 전력 효율, 프로그램 가능 이미지 처리 프로세싱을 위한 아키텍처
US11138013B2 (en) Energy efficient processor core architecture for image processor
US11153464B2 (en) Two dimensional shift array for image processor
US11140293B2 (en) Sheet generator for image processor
KR102235056B1 (ko) 지원 내부 네트워크 및 구성 가능한 개수의 활성 코어들을 갖는 이미지 프로세서
KR20180100374A (ko) 이미지 프로세서용 컴파일러 관리 메모리
KR20190095462A (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