KR20190133028A - 고 처리율의 내부 통신 프로토콜을 구비한 이미지 프로세서 - Google Patents

고 처리율의 내부 통신 프로토콜을 구비한 이미지 프로세서 Download PDF

Info

Publication number
KR20190133028A
KR20190133028A KR1020197031167A KR20197031167A KR20190133028A KR 20190133028 A KR20190133028 A KR 20190133028A KR 1020197031167 A KR1020197031167 A KR 1020197031167A KR 20197031167 A KR20197031167 A KR 20197031167A KR 20190133028 A KR20190133028 A KR 20190133028A
Authority
KR
South Korea
Prior art keywords
packet
processor
data
image
sent
Prior art date
Application number
KR1020197031167A
Other languages
English (en)
Other versions
KR102284078B1 (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 KR20190133028A publication Critical patent/KR20190133028A/ko
Application granted granted Critical
Publication of KR102284078B1 publication Critical patent/KR102284078B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0813Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
    • 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
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L25/00Baseband systems
    • H04L25/38Synchronous or start-stop systems, e.g. for Baudot code
    • H04L25/40Transmitting circuits; Receiving circuits
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L47/00Traffic control in data switching networks
    • H04L47/10Flow control; Congestion control
    • H04L47/39Credit based
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L49/00Packet switching elements
    • H04L49/90Buffering arrangements
    • H04L49/9063Intermediate storage in different physical parts of a node or terminal
    • H04L49/9078Intermediate storage in different physical parts of a node or terminal using an external memory or storage device

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Image Processing (AREA)
  • Multi Processors (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

프로세서가 설명된다. 프로세서는 네트워크를 포함한다. 복수의 처리 코어는 네트워크에 연결된다. 프로세서는 네트워크에 연결된 송신기 회로를 포함한다. 송신기 회로는 처리 코어들 중 하나에 의해 생성된 출력 데이터를 네트워크로 전송한다. 송신기 회로는 송신기 회로가 출력 데이터의 이전의 제1 패킷의 전송을 완료하기 전에 출력 데이터의 제2 패킷의 전송에 대한 요청을 전송하도록 하는 제어 논리 회로를 포함한다.

Description

고 처리율의 내부 통신 프로토콜을 구비한 이미지 프로세서
본 발명의 분야는 일반적으로 컴퓨팅 사이언스, 보다 구체적으로는 고 처리율 내부 통신 프로토콜을 갖는 이미지 프로세서에 관한 것이다.
이미지 처리은 일반적으로 어레이로 구성된 픽셀 값의 처리을 포함한다. 여기서, 공간적으로 구성된 2 차원 어레이는 이미지의 2 차원 특성(추가 차원은 시간, 예를 들어, 2 차원 이미지 시퀀스가 포함될 수 있음) 및 데이터 유형(예를 들어, 컬러)을 캡처한다. 일반 시나리오에서, 배열된 픽셀값들은 움직임 이미지를 캡처하기 위해 스틸 이미지 또는 프레임 시퀀스를 생성하는 카메라에 의해 제공된다. 기존 이미지 프로세서는 일반적으로 두 가지 극단적인 측면에 해당한다.
첫 번째 극단은 범용 프로세서 또는 범용 유사 프로세서(예를 들어, 벡터 명령 확장을 갖는 범용 프로세서)상에서 실행되는 소프트웨어 프로그램으로서 이미지 처리 태스크를 수행한다. 첫 번째 극단은 일반적으로 매우 다양한 애플리케이션 소프트웨어 개발 플랫폼을 제공하지만, 관련된 오버 헤드(예를 들어, 명령 페치 및 디코딩, 온-칩 및 오프-칩 데이터의 처리, 추론적 실행)와 연결된 더 정밀한 세분화 데이터 구조의 사용은 프로그램 코드의 실행 중에 데이터 단위당 더 많은 양의 에너지가 소비되게 한다.
두 번째의 반대 극단은 고정 기능 하드 와이어 회로를 훨씬 더 큰 데이터 단위에 적용한다. 더 큰(더 정밀한 세분화와 달리) 단위의 데이터를 맞춤 설계된 회로에 직접 적용하면 데이터 단위당 전력 소비가 크게 줄어 든다. 그러나, 맞춤 설계된 고정 기능 회로를 사용하면 일반적으로 프로세서가 수행할 수 있는 제한된 태스크 세트가 생성된다. 이와 같이, 두 번째 극단에는 (제1 극단과 관련된) 매우 다양한 프로그래밍 환경이 부족하다.
데이터 단위당 개선된 전력 효율과 연결된 매우 다양한 애플리케이션 소프트웨어 개발 기회를 제공하는 기술 플랫폼은 바람직하지만 아직 미해결된 솔루션으로 남아 있다.
프로세서가 설명된다. 프로세서는 네트워크를 포함한다. 복수의 처리 코어는 네트워크에 연결된다. 프로세서는 네트워크에 연결된 송신기 회로를 포함한다. 송신기 회로는 처리 코어들 중 하나에 의해 생성된 출력 데이터를 네트워크로 전송한다. 송신기 회로는 송신기 회로가 출력 데이터의 이전의 제1 패킷의 전송을 완료하기 전에 출력 데이터의 제2 패킷의 전송에 대한 요청을 전송하도록 하는 제어 논리 회로를 포함한다.
다음의 설명 및 첨부 도면은 본 발명의 실시예를 설명하기 위해 사용된다.
도 1은 스텐실 프로세서 아키텍처의 상위 레벨 뷰를 도시한다.
도 2는 이미지 프로세서 아키텍처의 보다 상세한 뷰를 도시한다.
도 3은 이미지 프로세서 아키텍처의 훨씬 더 상세한 뷰를 도시한다.
도 4는 이미지 프로세서에 의해 실행될 수 있는 애플리케이션 소프트웨어 프로그램을 도시한다.
도 5a는 제1 통신 시퀀스를 도시한다.
도 5b는 개선된 통신 시퀀스를 도시한다
도 5c는 통신 흐름 동안 카운터 사용 거동을 도시한다.
도 6a는 송신기 회로의 실시예를 도시한다.
도 6b는 수신기 회로의 실시예를 도시한다.
도 7은 통신 방법을 도시한다.
도 8a, 8b, 8c, 8d 및 8e는 이미지 데이터를 라인 그룹으로의 파싱, 라인 그룹을 시트로의 파싱 및 중첩 스텐실을 갖는 시트에서 수행되는 동작을 도시한다.
도 9a는 스텐실 프로세서의 실시예를 도시한다.
도 9b는 스텐실 프로세서의 명령 단어의 실시예를 도시한다.
도 10은 스텐실 프로세서내의 데이터 계산 유닛의 실시예를 도시한다.
도 11a, 11b, 11c, 11d, 11e, 11f, 11g, 11h, 11i, 11j 및 11k는 중첩 스텐실을 갖는 한 쌍의 인접 출력 필셀값을 결정하기 위해 2 차원 시프트 어레이 및 실행 레인 어레이의 사용 예를 도시한다.
도 12는 통합된 실행 레인 어레이 및 2 차원 시프트 어레이를 위한 단위 셀의 실시예를 도시한다.
도 13은 예시적인 컴퓨팅 시스템을 도시한다.
1.0 고유 이미지 프로세서 아키텍처
당 업계에 알려진 바와 같이, 프로그램 코드를 실행하기 위한 기본 회로 구조는 실행 스테이지 및 레지스터 공간을 포함한다. 실행 스테이지는 명령을 실행하기 위한 실행 유닛을 포함한다. 실행될 명령에 대한 입력 피연산자는 레지스터 공간에서 실행 스테이지로 제공된다. 명령의 실행 스테이지의 실행에서 생성된 결과는 레지스터 공간에 다시 기록된다.
종래의 프로세서에서 소프트웨어 스레드의 실행은 실행 스테이지를 통한 일련의 명령의 순차적 실행을 수반한다. 가장 일반적으로, 연산은 단일 결과가 단일 입력 피연산자 세트로부터 생성된다는 점에서 "스칼라"이다. 그러나, "벡터" 프로세서의 경우, 실행 스테이지에 의한 명령의 실행은 입력 피연산자의 벡터로부터 결과 벡터를 생성할 것이다.
도 1은 2 차원 시프트 레지스터 어레이(102)에 연결된 실행 레인(101)의 어레이를 포함하는 고유 이미지 프로세서 아키텍처(100)의 상위 레벨 뷰를 도시한다. 여기서, 실행 레인 어레이 내의 각 실행 레인은 프로세서(100)에 의해 지원되는 명령 세트를 실행하는데 필요한 실행 유닛들을 포함하는 개별 실행 스테이지로 보일 수 있다. 다양한 실시예에서, 각 실행 레인은 프로세서가 2 차원 단일 명령 다중 데이터(SIMD) 프로세서로 동작할 수 있도록 동일한 머신 사이클에서 실행하기 위해 동일한 명령을 수신한다.
각 실행 레인은 2 차원 시프트 레지스터 어레이(102) 내의 대응 위치에 자신의 전용 레지스터 공간을 갖는다. 예를 들어, 코너 실행 레인(103)은 코너 시프트 레지스터 위치(104)에 자신의 전용 레지스터 공간을 갖으며, 코너 실행 레인(105)은 코너 시프트 레지스터 위치(106)에 자신의 전용 레지스터 공간을 갖는다.
또한, 시프트 레지스터 어레이(102)는 각 실행 레인이 이전 머신 사이클 동안 다른 실행 레인의 레지스터 공간에 상주하는 값에 따라 자신의 레지스터 공간으로부터 직접 연산할 수 있도록 그의 컨텐츠를 시프트할 수 있다. 예를 들어, +1 수평 시프트는 각 실행 레인의 레지스터 공간이 그의 가장 왼쪽에 있는 이웃 레지스터 공간으로부터 값을 수신하게 한다. 프로세서는 수평축을 따라 좌우 방향으로 값들을 시프트하고 수직축을 따라 상하 방향으로 값들을 시프트하는 능력으로 인해 이미지 데이터의 스텐실들을 효율적으로 처리할 수 있다.
여기서, 공지된 바와 같이, 스텐실은 기본 데이터 단위로 사용되는 이미지 표면 영역의 슬라이스이다. 예를 들어, 출력 이미지에서 특정 픽셀 위치에 대한 새로운 값은 그 특정 픽셀 위치가 중심에 있는 입력 이미지의 영역에서 픽셀값들의 평균으로 계산될 수 있다. 예를 들어, 스텐실의 치수가 3 픽셀×3 픽셀인 경우, 특정 픽셀 위치는 3×3 픽셀 어레이의 중간 픽셀에 대응할 수 있고, 평균은 3×3 픽셀 어레이 내의 9 개의 픽셀 모두에 대해 계산될 수 있다 .
도 1의 프로세서(100)의 다양한 동작 실시예에 따르면, 실행 레인 어레이(101)의 각 실행 레인은 출력 이미지의 특정 위치에 대한 픽셀값을 계산하는 역할을 한다. 따라서, 바로 위에서 언급된 3×3 스텐실 평균화 예를 계속하면서, 입력 픽셀 데이터의 초기 로딩 및 시프트 레지스터 내에서 8 개의 시프트 동작의 조정된 시프트 시퀀스 이후, 실행 레인 어레이의 각 실행 레인은 대응하는 픽셀 위치에 대한 평균을 계산하는데 필요한 9 개의 픽셀 값 모두를 그의 로컬 레지스터 공간으로 수신할 것이다. 즉, 프로세서는 예를 들어 이웃하는 출력 이미지 픽셀 위치들에 중심을 둔 다수의 중첩 스텐실을 동시에 처리할 수 있다. 도 1의 프로세서 아키텍처는 이미지 스텐실을 처리하는데 특히 적합하기 때문에 스텐실 프로세서라고도 지칭될 수 있다.
도 2는 다수의 스텐실 프로세서(202_1~202_N)를 갖는 이미지 프로세서를 위한 아키텍처(200)의 실시예를 도시한다. 이와 같이, 이미지 프로세서는 개별 스텐실 프로세서가 이미지 처리 코어, 처리 코어, 프로세서 코어, 코어 또는 다른 유사 용어로 보다 일반적으로 특징화될 수 있는 멀티-코어 프로세서로 지칭될 수 있다. 도 2에서 볼 수 있는 바와같이, 아키텍처(200)는 온칩 스위치 네트워크, 온칩 링 네트워크 또는 다른 종류의 네트워크를 포함하는 네트워크(204)(예컨대, 네트워크 온 칩(NOC))를 통해 복수의 스텐실 프로세서 유닛(202_1~202_N)과 대응하는 시트 생성기 유닛(203_1~203_N)에 상호 연결된 복수의 라인 버퍼 유닛(201_1~201_M)을 포함한다. 일 실시예에서, 임의의 라인 버퍼 유닛(201_1~201_M)은 네트워크(204)를 통해 임의의 시트 생성기(203_1~203_N) 및 대응하는 스텐실 프로세서(202_1~202_N)에 연결될 수 있다.
프로그램 코드는 소프트웨어 개발자에 의해 미리 정의된 이미지 처리 동작을 수행하기 위해 대응하는 스텐실 프로세서(202)에 컴파일 및 로딩된다(프로그램 코드는 또한 예를 들어 설계 및 구현에 따라 스텐실 프로세서의 관련 시트 생성기(203)에 로딩될 수 있다). 적어도 일부 예에서, 이미지 처리 파이프 라인은 제1 파이프 라인 스테이지를 위한 제1 커널 프로그램을 제1 스텐실 프로세서(202_1)로 로딩하고, 제2 파이프 라인 스테이지를 위한 제2 커널 프로그램을 제2 스텐실 프로세서(202_2)에 로딩함으로써 실현될 수 있는데, 여기서 제1 커널은 파이프 라인의 제1 스테이지의 기능을 수행하고, 제2 커널은 파이프 라인의 제2 스체이지의 기능을 수행하며, 파이프 라인의 한 스테이지에서 파이프 라인의 다음 스테이지로 출력 이미지 데이터를 전달하기 위해 추가 제어 흐름 방법이 설치된다.
다른 구성에서, 이미지 프로세서는 동일한 커널 프로그램 코드를 운영하는 둘 이상의 스텐실 프로세서(202_1, 202_2)를 갖는 병렬 머신으로 실현될 수 있다. 예를 들어, 이미지 데이터의 고밀도 및 고 데이터 레이트 스트림은 각각 동일한 기능을 수행하는 다수의 스텐실 프로세서를 통해 프레임을 확산시킴으로써 처리될 수 있다.
또 다른 구성에서, 본질적으로 커널들의 임의의 DAG(directed acyclic graph)는 DAG 설계에서 하나의 커널로부터 다음 커널의 입력으로 출력 이미지를 전달하기 위해 개별 스텐실 프로세서를 프로그램 코드의 자체 개별 커널로 구성하고 적절한 제어 흐름 후크(hooks)를 하드웨어에 구성함으로써 이미지 프로세서에 로딩될 수 있다.
일반적인 플로우로서, 이미지 데이터의 프레임은 매크로 I/O 유닛(205)에 의해 수신되고 프레임 단위로 하나 이상의 라인 버퍼 유닛(201)로 전달된다. 특정 라인 버퍼 유닛은 그의 이미지 데이터의 프레임을 "라인 그룹"으로 지칭되는 더 작은 영역의 이미지 데이터로 파싱한 다음, 그 라인 그룹을 네트워크(204)를 통해 특정 시트 생성기로 전달한다. 완전한 또는 "전체(full)" 단일 라인 그룹은 예를 들어, 프레임의 다수의 인접하는 완전한 행 또는 열의 데이터로 구성될 수 있다(단순성을 위해 본 명세서는 주로 인접하는 행들을 지칭함). 시트 생성기는 이미지 데이터의 라인 그룹을 "시트"로 지칭되는 더 작은 영역의 이미지 데이터로 파싱하여, 그 시트를 그의 대응하는 스텐실 프로세서로 제공한다.
단일 입력을 갖는 이미지 처리 파이프 라인 또는 DAG 플로우의 경우, 일반적으로, 입력 프레임들은, 이미지 데이터를 라인 그룹들로 파싱하고 그 라인 그룹들을 대응 스텐실 포로세서(202_1)가 파이프 라인/DAG에서 제1 커널의 코드를 실행하고 있는 시트 생성기(203_1)로 전달하는 동일한 라인 버퍼 유닛(201_1)으로보내진다. 스텐실 프로세서(202_1)가 처리하는 라인 그룹들에서 연산이 완료되면, 시트 생성기(203_1)는 출력 라인 그룹을 "다운 스트림" 라인 버퍼 유닛(201_2)으로 전송한다(일부 사용 경우에 출력 라인 그룹은 입력 라인 그룹들로 이전에 전송되었던 동일한 라인 버퍼 유닛(201_1)으로 다시 전송될 수 있음).
그런 다음 자신의 개별 다른 시트 생성기 및 스텐실 프로세서(예를 들어, 시트 생성기(203_2) 및 스텐실 프로세서(202_2))상에서 실행되는 파이프 라인/DAG에서의 다음 스테이지/연산을 나타내는 하나 이상의 "소비(자)" 커널은 다운스트림 라인 버퍼 유닛(201_2)로부터 제1 스텐실 프로세서(202_1)에 의해 생성된 이미지 데이터를 수신한다. 이러한 방식으로, 제1 스텐실 프로세서에서 작동하는 "생산(자)" 커널은 그의 출력 데이터를 제2 스텐실 프로세서에서 작동하는 "소비(자)" 커널로 전달하여, 소비자 커널이 전체 파이프 라인 또는 DAG의 설계와 일치하는 생산자 커널 이후에 다음 태스크 세트를 수행하게 한다.
도 1과 관련하여 위에서 언급한 바와 같이, 각 스텐실 프로세서(202_1~202_N)는 이미지 데이터의 다수의 중첩 스텐실에서 동시에 동작하도록 설계된다. 스텐실 프로세서의 다중 중첩 스텐실 및 내부 하드웨어 처리 용량은 시트의 사이즈를 효과적으로 결정한다. 또한, 전술한 바와 같이, 임의의 스텐실 프로세서(202_1~202_N) 내에서, 실행 레인의 어레이는 다수의 중첩 스텐실에 의해 커버되는 이미지 데이터 표면 영역을 동시에 처리하기 위해 동시에 동작한다.
또한, 다양한 실시예에서, 이미지 데이터의 시트들은 스텐실 프로세서의 대응하는(예를 들어, 로컬) 시트 생성기(203)에 의해 스텐실 프로세서(202)의 2 차원 시프트 레지스터 어레이로 로딩된다. 시트 및 2 차원 시프트 레지스터 어레이 구조의 사용은 예를 들어, 실행 레인 어레이에 의해 그 직후 데이터에 대해 직접 수행되는 처리 태스크를 갖는 단일 로드 동작과 같이 대량의 데이터를 대량의 레지스터 공간으로 이동시킴으로써 전력 소비 개선을 효과적으로 제공하는 것으로 여겨진다. 부가적으로, 실행 레인 어레이 및 대응하는 레지스터 어레이의 사용은 쉽게 프로그래 가능한/구성 가능한 상이한 스텐실 사이즈를 제공한다. 라인 버퍼 유닛, 시트 생성기 및 스텐실 프로세서의 작동에 관한 자세한 내용은 아래의 섹션 3.0에서 더 제공된다.
도 3은 도 2의 이미지 프로세서의 특정 하드웨어 구현의 보다 상세한 실시예를 도시한다. 도 3에서 볼 수 있는 바와 같이, 도 2의 네트워크(204)는 라인 버퍼 유닛(301)과 시트 생성기/스텐실 프로세서 코어(302) 사이의 각각의 교차점에 4×4 네트워크 노드(314)를 갖는 링 토폴로지(304)로 구현된다. 간략화하기 위해, 도 3은 라인 버퍼 유닛(301_4)과 시트 생성기/스텐실 프로세서 코어(302_4) 사이에 상주하는 네트워크 노드(314)만을 표시한다.
여기서, 시트 생성기/스텐실 프로세서 코어(302_1~302_8) 각각은 스텐실 프로세서 및 그의 대응하는 시트 생성기를 모두 포함하는 것으로 이해된다. 간략화를 위해, 시트 생성기/스텐실 프로세서 코어(302_1~302_8) 각각은 이후 간단히 스텐실 프로세서 코어 또는 코어로 지칭될 것이다. 8개의 라인 버퍼 유닛(301_1~301_8) 및 8개의 코어(302_1~402_8)가 도 3의 특정 실시예에 도시되어 있지만, 상이한 개수의 라인 버퍼 유닛 및/또는 코어를 갖는 상이한 아키텍처가 가능하다는 것이 이해되어야 한다. 링 토폴로지 이외의 네트워크 토폴로지도 가능하다.
도 3의 이미지 프로세서와 관련하여, 링 네트워크(304)는 1) I/O 유닛(305)이 입력 데이터를 임의의 라인 버퍼 유닛(301_1~301_8)(또는 임의의 코어(302_1~ 302_8))로 전달하고, 2) 임의의 라인 버퍼 유닛(301_1~301_8)이 라인 그룹을 임의의 코어(302_1~302_8)로 포워딩하고, 임의의 코어(302_1~302_8)가 그의 출력 데이터를 임의의 라인 버퍼 유닛(301_1~301_8)으로 전달하고, 그리고 4) 임의의 라인 버퍼 유닛(301_1~301_8)가 이미지 프로세서 출력 데이터를 I/O 유닛(305)으로 전달할 수 있게 한다. 이와 같이, 다양한 소프트웨어 커널 로딩 옵션과 내부 네트워크 구성이 가능한다. 즉, 이론적으로, 프로세서의 다양한 코어(302)에서 실행될 다수의 커널로 구성된 임의의 소프트웨어 애플리케이션에 대해, 임의의 커널은 임의의코어로 로딩될 수 있으며 임의의 라인 버퍼 유닛은 임의의 코어로/로부터 입/출력 데이터를 소싱(souce)/싱킹(sink)하도록 구성될 수 있다.
도 4는 도 3의 이미지 프로세서에 로딩될 수 있는 예시적인 애플리케이션 소프트웨어 프로그램 또는 그 일부를 도시한다. 도 4에서 볼 수 있는 바와 같이, 프로그램 코드는 입력 이미지 데이터(401)의 일부 전체 변환에 영향을 주기 위해 입력 이미지 데이터(401)의 하나 이상의 프레임을 처리할 것으로 예상될 수 있다. 그 변환은 애플리케이션 소프트웨어 개발자에 의해 표현된 조정된 시퀀스로 입력 이미지 데이터에 대해 동작하는 프로그램 코드(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의 4개의 커널 플로우는 도 3의 프로세서 코어의 절반만 사용함)를 갖기 전에 커널(K4)로부터 4개의 커널이 더 나올 수 있음을 주목한다.
2.0 트랜잭션을 효율적으로 구현하는 송수신기
전술한 바와 같이, 하나의 스텐실 프로세서상에서 실행되는 프로그램 코드의 생산 커널은 그의 출력 데이터(예를 들어, 라인 그룹으로서)를 라인 버퍼 유닛으로 전송한다. 라인 버퍼 유닛은 생산 커널의 출력 데이터를 소비하는 프로그램 코드의 개별 커널을 실행하는 하나 이상의 다른 스텐실 프로세서로 데이터(예를 들어, 또한 라인 그룹으로서)를 큐잉하거나 저장 및 포워딩한다. 전체 이미지 프로세서 내에서, 다수의 스텐실 프로세서가 다수의 라인 버퍼 유닛에 상호 연결되어, 예를 들어 다수의 생성/소비 커널 연결이 구현될 수 있다.
다양한 실시예에서, 특정 생성/소비 커널 관계에 대한 저장 및 포워딩 큐는 "버퍼" 또는 "라인 버퍼"로 지칭될 수 있는 반면, "라인 버퍼 유닛"은 다수의 버퍼를 동시에 지원할 수 있는 하드웨어 구성 요소이다. 여기서, 라인 버퍼 유닛은 메모리 리소스 및 관련 로직을 포함할 수 있다. 라인 버퍼 유닛에 의해 지원되는 상이한 버퍼들은 개별 저장 및 포워딩 활동을 위해 메모리 리소스의 상이한 부분에 할당된다. 이미지 프로세서의 내부 네트워크는 이미지 프로세서 내에 동시에 존재하는 다양한 생산 커널 대 라인 버퍼 유닛 통신/연결 및 다양한 라인 버퍼 유닛 대 소비 커널 통신/연결을 지원한다. 여기서, 일 실시예에서, 각 스텐실 프로세서는 내부 네트워크에 연결된 송신기 및 수신기로 구성된 송수신기를 포함한다. 마찬가지로, 각각의 라인 버퍼 유닛은 내부 네트워크에 연결된 송수신기를 포함한다.
다양한 실시예에서, 스텐실 프로세서 및 라인 버퍼 유닛의 조합에 의해 임의의 시간에 내부 네트워크로 제공될 수 있는 잠재적으로 많은 양의 트래픽으로, 크레딧(credit) 제어 메커니즘은 이미지 프로세서 내의 임의의 리소스(라인 버퍼 유닛의 메모리 리소스 및/또는 스텐실 프로세서의 로컬 메모리 리소스와 같은 네트워크 및/또는 다른 리소스를 포함)의 과부하를 방지하는데 이용된다.
예를 들어, 일 실시예에서, 라인 버퍼 유닛 메모리 리소스 및/또는 생산 스텐실 프로세서(생산 커널을 실행하는 스텐실 프로세서, 이하 송신 프로세서)로부터 라인 버퍼 유닛으로의 통신을 위한 라인 버퍼 유닛 메모리 리소스 및/또는 네트워크의 과부하를 방지하기 위해, 크레딧 제어 메커니즘은 각각의 라인 버퍼 유닛에 구현되어 생산 커널로부터 연관된 라인 버퍼 유닛으로의 출력 이미지 데이터의 흐름을 제어한다. 여기서, 라인 버퍼 유닛은 다수의 크레딧에 대한 제어를 유지하고, 출력 이미지 데이터를 라인 버퍼 유닛으로 전송하기 원하는 송신 프로세서에 크레딧을 발행한다. 각 크레딧은 송신 프로세서에 의해 전송될 수 있는 데이터 양에 해당한다.
이와 같이, 송신 프로세서는 보유하고 있는 크레딧의 수에 대응하는 양의 데이터만을 전송할 수 있다. 스텐실 프로세서는 실제로 그의 출력 데이터를 라인 버퍼 유닛으로 전송하기 때문에 대응하는 양의 크레딧 카운트를 고갈시킨다. 예를 들어, 각각의 크레딧이 1MB의 데이터에 해당하면, 송신 프로세서는 라인 버퍼 유닛으로 전송하는 각각의 1MB의 데이터로 그의 크레딧 량을 1씩 줄인다(실제 프로세서 구현에서 패킷 및 대응하는 데이터 전송은 훨씬 정밀하게 세분화되는데, 예를 들어 각 패킷은 일반적으로 수십 바이트 또는 수백 바이트이며 각 크레딧은 수십 바이트(예를 들어, 32 바이트)에 해당한다. 라인 버퍼 유닛은 송신 프로세서가 데이터를 계속 전송할 수 있도록 (예를 들어, 라인 버퍼 유닛내에서 리소스가 비워지면) 송신 프로세서에 추가 크레딧을 계속 전송할 수 있다. 그러나. 언제든지 송신 프로세서의 크레딧 카운트가 0으로 떨어지면, 라인 버퍼 유닛으로부터 추가 크레딧을 수신할 때까지 더 이상 데이터를 라인 버퍼 유닛으로 전송할 수 없다.
도 5a는 전술한 원리에 따라 동작하는 종래 설계의 예시적인 시나리오를 도시한다. 여기서, 라인 버퍼 유닛(502)은 송신 프로세서(501)로부터 수신된 데이터 유닛을 보유하기 위해 고정된 사이즈의 내부 큐(단순함을 위해 도 5에 미도시)를 포함한다. 특히, 큐는 N=5 개의 엔트리(항목)가 있고 각 엔트리는 특정 양의 데이터(예를 들어, M 바이트)를 보유할 수 있다고 가정한다. 기본 구성에서, 송신 프로세서(501)는 특정 통신 세션에서 각각 하나 이상의 M 바이트의 데이터 유닛 또는 라인 버퍼 유닛(502)과의 "연결"을 전송한다(예를 들어, 각각 M 바이트의 다수의 데이터 유닛을 포함하는 패킷 전송). 송신 프로세서(501)가 M 바이트의 다음 데이터 유닛을 라인 버퍼 유닛(502)에 전송할 때마다 그 다음 데이터 유닛은 큐에 입력된다.
M 바이트 데이터 유닛이 큐로부터 서비스될 때(예를 들어, 라인 버퍼 유닛(502)이 그것을 메모리 리소스에 기록할 수 있기 때문에), 라인 버퍼 유닛(502)은 하나의 크레딧을 송신 프로세서(501)로 전송한다. 여기서, 큐로부터 M 바이트 데이터 유닛의 서비스는 송신 프로세서(501)로부터 전송된 다음 M 바이트 유닛으로 채워질 수 있는 하나의 큐 엔트리를 기본적으로 해제(free)한다. 예를 들어, 라인 버퍼 유닛(502)이 큐로부터 다수의 M 바이트 유닛을 신속하게 서비스할 수 있는 경우, 대응하는 크레딧 량이 송신 프로세서(501)로 돌려 보내진다. 예를 들어, 라인 버퍼 유닛(502)이 큐로부터 3 개의 M 바이트 유닛을 신속하게 서비스하는 경우, 라인 버퍼 유닛(502)은 3 개의 크레딧을 송신 프로세서(501)로 다시 전송한다.
따라서, 도 5a를 참조하면, 초기 상태에서, 송신 프로세서(501)는, 예를 들어, 라인 버퍼 유닛(502)으로 전송할 출력 이미지 데이터의 다음 패킷을 가질 때, 요청(RTS_1)을 라인 버퍼 유닛(502)으로 전송하라는 요청을 송신한다. 라인 버퍼 유닛 큐는 처음에 비어 있으므로, 확인 응답(ACK_1)으로 상기 요청을 승인할 때, 라인 버퍼 유닛(502)은 큐의 사이즈(N = 5)와 동일한 크레딧 량을 전송한다. 이어서 송신 프로세서(501)는 다수의 M 바이트 데이터 유닛을 연속으로(D1, D2,..) 전송하기 시작한다. 데이터 유닛의 전송으로부터 프로세서의 크레딧 카운트가 고갈되는 것은 도 5a 시나리오의 프로세서 측에 표시되어 있다.
라인 버퍼 유닛(502) 측에서, 라인 버퍼 유닛(502)은 송신 프로세서(501)로부터 M 개의 데이터 유닛을 연속적으로 수신하고, 수신될 때 이들을 큐에 입력하고, 라인 버퍼 유닛의 능력에 따라(예를 들어, 이들을 메모리에 기록하기 위해) 큐로부터 그들을 서비스한다. 큐로부터 M 바이트 데이터 유닛을 서비스할 때마다, 라인 버퍼 유닛(502)은 새로 수신된 크레딧을 그의 크레딧 카운트에 추가하는 추가 크레딧을 송신 프로세서(501)로 전송한다.
결국, 송신 프로세서는 현재 연결을 위해 모든 M 바이트 데이터 유닛을 전송했을 것이다(예를 들어, 패킷의 모든 M 바이트 데이터 유닛이 전송되었다). 도 5a의 시나리오에서, 현재 연결은 6M 바이트 데이터 유닛으로 구성되어 있다고 가정한다(예를 들어, 패킷이 6M 바이트 데이터 유닛으로 구성됨). 이와 같이, 송신 프로세서(501)는 D6 데이터 유닛의 송신으로 패킷에 대한 최종 데이터 유닛을 전송하였다. 또한, 결국, 라인 버퍼 유닛(502)은 그의 큐로부터 모든 M 바이트 유닛을 서비스하고, 대응하는 크레딧를 송신 프로세서(501)로 돌려 보낼 것이다. 이와 같이, 송신 프로세서(501)는 세션에 대한 모든 데이터 유닛을 송신하여 그의 크레딧 카운트가 라인 버퍼 유닛의 큐의 크기(N=5)와 동일할 때 연결의 완료를 인식할 것이다. 여기서, 송신 프로세서(501)는 전체 크레딧 세트를 갖지만, 요청을 아직 전송하지 않았거나 이러한 후속 패킷에 대한 확인 응답을 받지 않았기 때문에, 예를 들어, 제2 후속 패킷에 대해 이들을 사용하도록 어용되지 않는다.
도 5a의 종래의 설계에서, 송신 프로세서(501)가 현재 세션의 완료 이전에(예를 들어, 시나리오의 제1 패킷의 데이터 유닛을 전송하는 동안) 라인 버퍼 유닛(502)으로 전송할 다른 패킷이 있는 경우, 이전 패킷의 전송이 완료된 것으로 간주된 후 후속 제2 패킷에 대한 요청만 전송할 수 있다. 위에서 언급한 바와 같이, 연결은 그 연결에 대한 모든 데이터를 전송하여 그의 크레딧 카운트 량이 라인 버퍼 유닛 큐의 사이즈(N = 5)와 동일할 때까지 송신 프로세서에 의해 완료된 것으로 간주되지 않는다.
이 접근법의 문제점은 이전 패킷의 최종 데이터 유닛의 전송과 후속 패킷의 제1 데이터 유닛의 전송 사이에서 낭비될 수 있는 시간량(504)이다. 여기서, 도 5a에서 볼 수 있는 바와 같이, 제1 패킷의 전송은 D6 데이터 유닛의 전송과 같이 완료되지만, 연결은 시간(503)까지 완료된 것으로 간주되지 않는다. 낭비 시간(504)은 주로 생산 프로세서가 리턴된 크레딧이 제2 패킷에 대한 RTS_2/ACK_2 전파 지연과 연결된 큐의 사이즈와 동일하기를 라인 버퍼 유닛(502)으로부터 기다리는 결과이다. 긴 대기 시간(wait time)은 트래픽이 네트워크를 통해 전송되지 않는 프로세서의 비 효율성을 초래할 수 있다.
종래의 설계에 따르면, 패킷의 최종 데이터 유닛(예를 들어, D6)이 특별하게 마킹되거나 또는 사이드밴드 신호가 패킷의 최종 데이터 유닛의 전송에 상응하는 라인 버퍼 유닛(502)으로 전송되어, 라인 버퍼 유닛(502)은 특정 패킷/연결에 대한 최종 데이터 유닛이 수신된 시점을 알 수 있게 된다. 여기서, 패킷/연결의 최종 데이터 유닛(D6)이 라인 버퍼 유닛의 큐로부터 서비스될 때, 라인 버퍼 유닛(502)은 다음 요청(RTS_2)을 ACK_2로 확인 응답하도록 허용된다. 여기서, 방금 완료된 제1 패킷/연결을 처리하는 동안(또는 그 이전에도), 라인 버퍼 유닛(502)을 사용하는 다른 생산자/소비자 커널 관계에 대한 다른 생산 프로세서로부터의 요청들을 라인 버퍼 유닛(502)이 수신했을 수 있다. 라인 버퍼 유닛(502)은 이들 요청 중 하나(예를 들어, 가장 오래된 보류중인 요청)를 자유로이 확인 응답하여, 방금 완료된 연결로부터 최종 데이터 유닛(D6)을 서비스한 후에 다음 패킷 전송을 시작한다.
패킷 전송이 방금 완료된 송신 프로세서(501)는 또한 이전 패킷 전송이 완료되자 마자(도 5a의 시간(503)에서) 위에서 논의한 바와같이 다음 요청(RTS_2)을 자유롭게 송신할 수 있다. 다른 생성 스텐실 프로세서로부터의 다른 경쟁 요청들이 라인 버퍼 유닛(502)과 함께 보류 중이 아닌 경우, 라인 버퍼 유닛(502)은 이전 패킷 전송이 방금 완료된 송신 프로세서(501)에 의해 전송되었던 요청(RTS_2)을 확인 응답할 것이다. 그런 다음 제1 패킷에 대해 전술한 프로세스가 반복된다.
도 5b는 송신 프로세서(501)가 전송 중인 현재 패킷의 완료 이전에 다음 패킷에 대한 요청(REQ_2)을 전송하도록 혀용된 도 5a의 종래 설계에 대한 제1 개선을 도시한다. 즉, 예를 들면, 시간 기간(515)은 전송된 것이 제1 패킷의 전송에 관여하는 시간 기간으로 간주될 수 있다(제1 패킷의 통신 세션 또는 연결이 시간 주기(515)에 걸쳐 연장됨). 도 5b의 개선된 설계에서, 송신 프로세서가 (즉 시간 기간(515)내에서) 제1 패킷의 송신에 관여하면서 송신 프로세서는 제2 패킷에 대한 요청(REQ_2)을 전송할 수 있다.
도 5b의 특정 예에서, 송신 프로세서(501)는 전송할 다른 패킷이 있음을 인식하자마자 요청을 송신하도록 허용된다. 알 수 있는 바와 같이, 송신 프로세서(501)는 제1 패킷에 대한 요청(RTS_1)을 전송한 후 거의 즉시 전송될 다른 패킷이 있음을 인식한다(RTS_2는 RTS_1 이후 즉시 전송됨).
마찬가지로, 개선된 설계에서, 라인 버퍼 유닛(502)은 현재 처리중인 패킷 전송이 아직 완료되지 않았어도 요청에 자유롭게 응답할 수 있다. 예를 들어, 라인 버퍼 유닛(502)이 다른 송신 프로세서로부터의 다른 경쟁 요청을 갖지 않는 상황(또는 REQ_2가 다른 경쟁 요청 이전에 라인 버퍼 유닛(502)에 의해 수신된 경우)에서, 라인 버퍼 유닛(502)은 제2 요청(ACK_2)을 자유롭게 확인 응답할 수 있다. 여기서, 모든 크레딧이 현재 활성화된 패킷 전송(제1 패킷)에 할애되었기 때문에 제2 확인 응답(ACK_2)과 관련된 크레딧은 없다. 또한, 제2 확인 응답(ACK_2)이 전송중인 현재 패킷을 전송하는 동일한 송신 프로세서(501)로 발행되면, 송신 프로세서(501)와 라인 버퍼 유닛(502)은 현재 송신 프로세서(501)가 현재 패킷의 전송이 완료된 후에 다음 패킷을 라인 버퍼 유닛(502)로 송신할 것이라는 것을 이해한다.
이러한 상황에서, 송신 프로세서(501)가 전송될 제2 패킷에 대한 확인 응답 (ACK_2)을 이미 수신한 상태에서, 송신 프로세서(501)는 후속의 제2 패킷의 전송을 위해 제1 패킷 전송의 종료를 나타내는 누적된 크레딧을 사용할 수 있다. 즉, 송신 프로세서(501)는 패킷의 최종 데이터 유닛(D6)을 전송한 후 제1 패킷 전송의 완료를 인식하고 그의 그레딧 카운트는 라인 버퍼 단위 큐의 크기(N=5)에 대응한다는 것을 도 5a의 논의로부터 상기한다.
따라서, 도 5a의 종래의 설계에 따르면, 제2 패킷에 대한 확인 응답(ACK_2)이 아직 수신되지 않았기 때문에 이들 크레딧은 즉시 사용이 불가능하다. 반대로, 도 5b의 개선된 접근법으로, 송신 프로세서(501)는 제2 패킷에 대한 확인 응답(ACK_2)을 이미 수신했기 때문에 제2 패킷의 전송을 위해 이들 크레딧을 즉시 사용할 수 있다. 라인 버퍼 유닛(502)은 데이터 유닛(D6)의 수신으로 제1 패킷의 완료를 인식했기 때문에(도 5a와 관련하여 위에서 설명 됨) 수신될 후속 데이터 유닛이 제2 패킷을 위한 것임을 이해할 것이다.
또한, 종래 설계의 송신 프로세서(501)는 현재 라인 버퍼 유닛(502)과의 현재 전송이 완료될 때까지(생산 커널이 하나 이상의 라인 버퍼 유닛으로 출력 이미지 데이터를 전송할 수 있을 때까지) 후속 패킷을 다른 라인 버퍼 유닛으로 전송하라는 요청을 송신하도록 허용되지 않는다. 이와 같이, 도 5a의 제2 패킷이 다른 라인 버퍼 유닛으로 전송되더라도, 낭비 시간(504)은 여전히 존재할 것이다.
도 5b의 개선된 설계와 관련하여 논의된 바와 같이, 송신 프로세서(501)는 그의 현재 패킷의 완료 전에 제2 패킷에 대한 요청을 전송하도록 허용된다. 다양한 실시예에서, 이것은 송신 프로세서가 현재 인터렉션에 참여하고 있는 라인 버퍼 유닛 이외의 다른 라인 버퍼 유닛으로 요청을 전송하는 것을 포함한다. 도 5b에 명시적으로 도시되지 않았지만, RTS_2는 라인 버퍼 유닛(502) 이외의 라인 버퍼 유닛으로 전송되고 ACK_2는 동일한 다른 라인 버퍼 유닛(502)으로부터 수신되는 것으로 가정한다. 여기서, 다른 라인 버퍼 유닛이 확인 응답(ACK_2)을 전송함으로써 요청을 승인할 때, 할당된 크레딧 량이 라인 버퍼 유닛별로 라인 버퍼 유닛에 제공되면, 송신 프로세서(501)는 현재 제1 패킷을 라인 버퍼 유닛(501)으로 전송하는 동안 다른 라인 버퍼 유닛으로부터 관련 크레딧을 수신한다.
이와 같이, 일 실시예에서, 송신 프로세서의 송수신기는 상이한 라인 버퍼 유닛들로부터의 크레딧을 추적하기 위해 상이한 크레딧 카운터가 사용되는 다수의 크레딧 카운터를 보유한다. 제2 패킷이 제1 패킷과 다른 목적지(대상)로 전송되는 경우, 송신기는 목적지들 중 하나에 대해 제1 크레딧 카운터를 이용하고 목적지들 중 다른 하나에 대해 제2 크레딧 카운터를 사용하여 인터리빙 방식으로 제1 및 제2 패킷을 각자 목적지로 동시에 전송할 수 있다(제2 패킷의 전송은 제1 패킷의 완료까지 기다릴 필요가 없음). 다양한 실시예에서, 어느 크레딧 카운터가 어느 목적지에 대응하는지는 송신 프로세서에 의해 전송되는 트래픽 패턴에 따라 변할 수 있다.
일 예가 도 5c에 도시되어 있다. 도 5c에서 볼 수 있는 바와 같이, 제1 시간 간격(521) 동안, 송신 프로세서는 제1 패킷을 제1 라인 버퍼 유닛(LBU_1)으로 전송하고 있다. 그의 크레딧 카운트는 제1 크레딧 카운터(531)에 유지된다. 그 후, 제2 시간 간격(522) 동안, 송신 프로세서는 여전히 제1 패킷을 제1 라인 버퍼 유닛으로 전송하고 있지만 제2 패킷을 제2 라인 버퍼 유닛(LBU_2)으로 전송하고 있다. 제2 패킷에 대한 크레딧 카운트는 제1 크레딧 카운터(531)에 따라 트랜잭션이 진행되는 라인 버퍼 유닛과는 다른 라인 버퍼 유닛으로 전송되기 때문에, 제2의 다른 크레딧 카운터(532)에 유지된다.
그런 다음, 제3 시간 간격(523) 동안, 제1 패킷은 전송이 완료되었지만 제2 패킷은 여전히 전송 중이다. 그 후, 제4 시간 간격(524) 동안, 송신 프로세서는 제1 및 제2 라인 버퍼 유닛과 다른 제3 라인 버퍼(LBU_3) 유닛으로 제3 패킷을 전송한다. 제3 패킷의 크레딧 카운트는 제1 크레딧 카운터(531)에 유지된다. 그 후, 제5 시간 간격(525) 동안, 제2 패킷은 전송이 완료되고, 제2 라인 버퍼 유닛 또는 다른 라인 버퍼 유닛으로 전송할 후속 패킷은 없다.
그런 다음, 제6 시간 간격(526) 동안, 송신 프로세서는 제1 라인 버퍼 유닛으로 전송할 다른 패킷을 갖는다. 이 경우, 제2 크레딧 카운터(532)는 이 새로운 패킷에 대한 크레딧이 제1 라인 버퍼 유닛으로 전송되도록 유지하는데 사용된다. 제1 라인 버퍼 유닛에 대한 크레딧 카운터들은 본질적으로 제1 라인 버퍼 유닛으로 전송될 패킷 쌍 사이에서 교환된다. 즉, 제1 및 제2 시간 간격(521, 522) 동안, 제1 크레딧 카운터(531)는 제1 라인 버퍼 유닛에 대한 크레딧들을 추적하는데 사용되는 반면, 제6 시간 간격(526) 동안, 제2 크레딧 카운터(532)는 제1 라인 버퍼 유닛에 대한 크레딧들을 추적하는데 사용된다.
전술한 이미지 프로세서에서, 위의 논의는 라인 버퍼 유닛으로 데이터를 전송하는 처리 코어에 관한 것이지만, 라인 버퍼 유닛으로부터 소비 커널을 실행하는 처리 코어로의 패킷 전송에 대해 동일한 프로토콜 시나리오가 존재할 수 있음을 ㅈ지적하는 것이 적절하다. 이 경우, 라인 버퍼 유닛은 도 5a 내지 5c의 송신기의 거동을 가정하고, 처리 코어는 도 5a 및 5b의 수신기의 거동을 가정한다. 이와 같이, 다양한 실시예에서, 처리 코어들(및/또는 그들의 대응하는 시트 생성기) 및 라인 버퍼 유닛들 모두는 송신기 회로 및 수신기 회로를 모두 포함한다.
도 6a 및 6b는 각각 송신기 회로 및 수신기 회로의 실시예를 도시한다. 도 6a에서 볼 수 있는 바와 같이, 송신기 회로(601)는 전술한 프로토콜에 따라 데이터 유닛 또는 RTS 요청을 전송하는 송신기를 포함한다. 전송될 준비가 된 데이터 유닛은 출력 큐(604)에 큐잉된다. RTS 및 크레딧 제어 논리 회로(605)는 크레딧 카운터 (606_1, 606_2) 중 하나에서 목적지와의 현재 세션 동안 유지되는 크레딧 카운트에 따라 다음 데이터 유닛을 목적지로 전송하는 것을 허가한다. 제어 로직(605)은 또한 RTS 요청을 발행하여 적절한 목적지와의 전송 세션을 개시한다. 다음 RTS를 전송할 목적지의 아이덴티티는 예를 들어 아웃바운드(발신) 큐(604)의 아웃바운드 패킷과 연관된 목적지 주소로부터 결정될 수 있다.
수신 회로(611)는 확인 응답 및 크레딧 량을 수신하여 이를 제어 로직(605)으로 포워딩한다. 2 개의 크레딧 카운터(606_1 및 606_2)가 605의 제어 로직에서 볼 수 있다. 다양한 실시예에서 크레딧 카운트(606_1, 606_2)는 예를 들어, 통신 세션마다 특정 목적지에 대한 크레딧들을 보유하도록 할당되어, 도 5c와 관련하여 설명된 바와 같이 아웃 바운드 트래픽 흐름에 따라 크레딧들을 보유하는 목적지를 교환할 수 있다.
다른 실시예에서, 송신 회로(602)가 2개 이상의 상이한 목적지를 갖는 2개 이상의 전송 세션을 동시에 즐길 수 있도록 2개 이상의 크레딧 카운터가 존재할 수 있다. 즉, 다른 목적지를 갖는 동시 트랜잭션의 수는 예를 들어 네트워크의 능력/용량에 따라 실시예마다 차이가 있을 수 있다. 일 실시예에서, 송신기 회로(601)는 이전의 제1 패킷이 전송되는 동안 제2 패킷에 대한 RTS를 전송하도록 허용된다. 제2 패킷에 대한 RTS가 전송되는 목적지는 이전의 제1의 패킷이 전송되는 목적지 또는 다른 목적지일 수 있다.
도 6b는 수신기측 회로(602)를 도시한다. 여기서, 수신기 회로(620)에 의해 수신된 수신 데이터 유닛은 인바운드(수신) 큐(607)에 큐잉된다(다양한 실시예에서, 미처리 크레딧의 수는 인바운드 큐(607)의 크기에 대응함을 상기한다). 수신된 데이터 유닛이 큐(607)로부터 서비스될 때, 제어 로직(608)은 전송 회로(621)를 통해 대응하는 크레딧 량을 데이터 유닛의 송신자에게 돌려 보낸다. 제어 로직(608)은 또한 수신기(602)에게 RTS 요청을 지시한 잠재적으로 다수의 송신기 중 어느 것이 수신기(602)가 패킷을 수신할 다음의 송신기로 선택될지를 결정한다. 다수의 계류중인 RTS 요청은 제어 로직(608)내의 큐(도 6b에 도시되지 않음)에 상주할 수 있고, 로직은 일부(예를 들어, 합당) 알고리즘(예를 들어, 수신기(602)가 큐에서 가장 오래된 RTS로부터 수신하도록 구성된 다른 송신자에 걸친 라운드 로빈)에 따라 큐로부터 RTS 요청들 중 하나를 선택한다. 제어 로직(608)이 다수의 요청하는 송신자 중 어느 송신자가 수신자에게 패킷을 송신할 수 있는지를 결정할 때, 제어 로직(608)은 송신 회로(621)를 통해 확인 응답이 송신자에게 송신되도록 한다.
다양한 실시예에서, 수신기가 현재 패킷을 수신하고 있는 동일한 송신자에게 전송되는 확인 응답에 대한 크레딧은 전송되지 않는다. 또한, 다양한 실시예에서, 큐(607)의 크기에 대응하는 크레딧 량은 수신기(602)가 현재 패킷을 수신하고 있지 않은 송신자에게 전송되는 확인 응답과 함께 전송된다. 다양한 실시예에서, 수신기(602)는 동일한 송신기 또는 다른 송신기들로부터의 다수의 패킷들을 인터리빙하지 않는다(하나의 송신기로부터의 하나의 패킷만이 수신기(602)에 의해 수신되도록 허용된다).
제어 논리 회로(605, 608)는 제어 로직 기능 또는 이들 접근법의 임의의 조합을 수행하기 위해 프로그램 코드를 실행하는 전용 하드웨어 로직 회로, 프로그램 가능 로직 회로(예를 들어, 필드 프로그램 가능 게이트 어레이(FPGA) 논리 회로, 프로그램 가능 논리 디바이스(PLD) 논리 회로, 프로그램 가능 논리 어레이(PLA) 논리 회로), 임베디드 프로세서 회로로서 구현될 수 있다.
도 7은 전술한 방법을 도시한다. 이 방법은 처리 코어의 출력 데이터를 생성하기 위해 프로세서의 처리 코어상에서 프로그램 코드를 처리하는 단계를 포함한다(701). 이 방법은 프로세서의 네트워크에 연결된 송신기 회로에 의해, 송신기 회로가 이전의 제1 패킷의 전송을 완료하기 전에 제2 패킷에 대한 전송 요청을 전송하는 단계를 포함한다(702). 제2 패킷은 처리 코어에 의해 생성된 제2 출력 데이터를 포함하고, 제1 패킷은 처리 코어에 의해 생성된 제1 출력 데이터를 포함한다. 이 방법은 또한 네트워크에 연결된 프로세서의 하나 이상의 다른 처리 코어로 제1 출력 데이터 및 제2 출력 데이터를 처리하는 단계를 포함한다(703).
3.0 이미지 프로세서 구현 실시예
도 8a-e 내지 도 12는 위에서 상세히 설명된 이미지 프로세서 및 관련 스텐실 프로세서에 대한 다양한 실시예의 동작 및 설계에 관한 추가 세부 사항을 제공한다. 도 2의 논의에서 라인 버퍼 유닛가 라인 그룹을 스텐실 프로세서의 관련 시트 생성기에 공급한다는 점을 상기하면, 도 8a 내지 도 8e는 라인 버퍼 유닛(201)의 파싱 활동, 시트 생성기 유닛(203)의 보다 정밀한 세밀화된 파싱 활동뿐만 아니라 시트 생성기 유닛(203)에 연결된 스텐실 프로세서(702)의 스텐실 처리 활동 모두에 대한 상위 레벨 실시예를 도시한다.
도 8a는 이미지 데이터(801)의 입력 프레임의 실시예를 도시한다. 도 8a는 또한 스텐실 프로세서가 동작하도록 설계된 3개의 중첩 스텐실(802)(각각 3 픽셀 × 3 픽셀의 치수를 가짐)의 개요를 도시한다. 각 스텐실이 각각 출력 이미지 데이터를 생성하는 출력 픽셀은 검은색으로 강조 표시된다. 간략화를 위해, 3개의 중첩 스텐실(802)은 수직 방향으로만 중첩되는 것으로 도시되어 있다. 실제로 스텐실 프로세서는 수직 및 수평 방향으로 중첩 스렌실을 갖도록 설계될 수 있음을 인식하는 것이 적절하다.
스텐실 프로세서 내의 수직 중첩 스텐실(802)로 인해, 도 8a에 도시된 바와 같이, 프레임 내에는 단일 스텐실 프로세서가 동작할 수 있는 광대역의 이미지 데이터가 존재한다. 아래에서 보다 상세하게 논의되는 바와 같이, 일 실시예에서, 스텐실 프로세서는 이미지 데이터를 가로 질러 좌우 방식으로 그들의 중첩 스텐실 내에서 데이터를 처리한다(이어서 다음 라인 세트에 대해 상하 순서로 반복한다). 따라서, 스텐실 프로세서가 연산을 계속 진행함에 따라 검은색 출력 픽셀 블록의 수는 오른쪽으로 수평으로 증가한다. 전술한 바와 같이, 라인 버퍼 유닛(201)은 스텐실 프로세서가 확장된 수의 다가오는(upcoming) 사이클 동안 동작하기에 충분한 인입(incoming) 프레임으로부터 입력 이미지 데이터의 라인 그룹을 파싱하는 역할을 한다. 라인 그룹의 예시적인 묘사는 음영 영역(803)으로서 도시되어 있다. 일 실시예에서, 라인 버퍼 유닛(201)은 시트 생성기로/로부터 라인 그룹을 송신/수신하기위한 상이한 역학 관계를 이해할 수있다. 예를 들어, "전체 그룹(full group)"으로 지칭되는 하나의 모드에 따르면, 이미지 데이터의 완전한 전체 폭 라인들이 라인 버퍼 유닛과 시트 생성기 사이에 전달된다. "가상 키(virtually tall)"라고 하는 제2 모드에 따르면, 라인 그룹은 초기에 전체 폭 행의 서브 세트로 전달된다. 그런 다음 나머지 행은 더 작은(전체 폭보다 작은) 조각으로 순차적으로 전달된다.
입력 이미지 데이터의 라인 그룹(803)이 라인 버퍼 유닛에 의해 정의되고 시트 생성기 유닛으로 전달됨에 따라, 시트 생성기 유닛은 라인 그룹을 스텐실 프로세서의 하드웨어 제한에 보다 정확하게 맞는 미세한 시트로 추가 파싱한다. 보다 구체적으로, 아래에 보다 상세히 설명될 바와 같이, 일 실시예에서, 각각의 스텐실 프로세서는 2 차원 시프트 레지스터 어레이로 구성된다. 2 차원 시프트 레지스터 어레이는 기본적으로 이미지 데이터를 실행 레인 어레이의 "아래로" 시프트하는데, 여기서 시프트 패턴은 각 실행 레인이 그 자신의 개별 스텐실 내에서 데이터에 대해 연산하도록 한다(즉, 각 실행 레인은 그 자신의 스텐실의 정보를 처리하여 해당 스텐실에 대한 출력을 생성한다). 일 실시예에서, 시트들은 2 차원 시프트 레지스터 어레이에 "채워(fill)지거나" 로딩되는 입력 이미지 데이터의 표면 영역이다.
이하에서 보다 상세히 설명되는 바와 같이, 다양한 실시예에서, 임의의 사이클상에서 시프트될 수 있는 2 차원 레지스터 데이터의 다중 계층이 실제로 존재한다. 편의상, 본 설명의 많은 부분은 단순히 "2 차원 시프트 레지스터"등의 용어를 사용하여, 시프트될 수 있는 2 차원 레지스터 데이터의 하나 이상의 이러한 계층을 갖는 구조를 지칭할 것이다.
따라서, 도 8b에서 볼 수 있는 바와같이, 시트 생성기는 라인 그룹(803)으로부터 초기 시트(804)를 분석하여 이를 스텐실 프로세서로 제공한다(여기서, 데이터의 시트는 일반적으로 참조 번호(804)로 식별되는 음영 영역에 대응함). 도 8c 및 8d에서 볼 수 있는 바와 같이, 스텐실 프로세서는 중첩 스텐실(802)을 시트상에서 좌우 방식으로 효과적으로 이동시킴으로써 입력 이미지 데이터의 시트상에서 연산한다. 도 8d에서, 시트 내의 데이터로부터 출력값이 계산될 수 있는 픽셀의 수는 소진된다(다른 픽셀 위치는 시트 내의 정보로부터 결정된 출력 값을 가질 수 없음). 간략화를 위해 이미지의 경계 영역은 무시되었다.
그런 다음 도 8e에 도시된 바와같이, 시트 생성기는 스텐실 프로세서가 연산을 계속하도록 다음 시트(805)를 제공한다. 다음 시트에서 연산을 시작할 때 스텐실들의 초기 위치는 (도 8d에서 이전에 도시된 바와 같이) 제1 시트의 소진 포인트로부터 오른쪽으로의 다음 진행이다. 새로운 시트(805)를 사용하면, 제1 시트의 처리와 동일한 방식으로 새로운 시트상에서 스텐실 프로세서가 연산함에 따라 스텐실들은 오른쪽으로 계속 이동할 것이다.
출력 픽셀 위치를 둘러싸는 스텐실들의 경계 영역으로 인해 제1 시트(804)의 데이터와 제2 시트(805)의 데이터 사이에 약간의 중첩이 있음을 주목한다. 중첩은 시트 생성기가 중첩 데이터를 두 번 재전송함으로써 간단히 처리될 수 있다. 대안적인 구현에서, 다음 시트를 스텐실 프로세서에 공급하기 위해, 시트 생성기는 새로운 데이터를 스텐실 프로세서로만 전송하도록 진행할 수 있고, 스텐실 프로세서는 이전 시트로부터 중첩 데이터를 재사용한다.
도 9는 스텐실 프로세서 아키텍처(900)의 실시예를 도시한다. 도 9에서 볼 수 있는 바와같이, 스텐실 프로세서는 데이터 계산 유닛(901), 스칼라 프로세서(902) 및 관련 메모리(903) 그리고 I/O 유닛(904)을 포함한다. 데이터 계산 유닛(901)은 실행 레인 어레이(905), 2 차원 시프트 어레이 구조(906) 및 그 어레이의 특정 행 또는 열과 연관된 개별 랜덤 액세스 메모리들(907)를 포함한다.
I/O 유닛(904)은 시트 생성기로부터 수신된 데이터의 "입력" 시트들을 데이터 계산 유닛(901)에 로딩하고, 스텐실 프로세서로부터 시트 생성기로 데이터의 "출력" 시트들을 저장하는 역할을 한다. 일 실시예에서, 데이터 계산 유닛(901)으로의 시트 데이터의 로딩은 수신된 시트를 이미지 데이터의 행/열로 파싱하고, 이미지 데이터의 행/열을 2 차원 시프트 레지스터 구조(906) 또는 (이하에 보다 상세히 기술된) 실행 레인 어레이의 행/열의 개별 랜덤 액세스 메모리들(907)로 로딩하는 것을 수반한다. 시트가 초기에 메모리들(907)로 로딩되면, 실행 레인 어레이(905) 내의 개별 실행 레인은 적절한 경우 (예를 들어, 시트의 데이터에 대한 연산 직전에 로드 명령으로) 랜덤 액세스 메모리(907)로부터 2 차원 시프트 레지스터 구조(906)로 시트 데이터를 로딩할 수 있다. 레지스터 시트 구조(906)로의 데이터 시트의 로딩이 완료되면(시트 생성기 또는 메모리들(907)로부터 직접 여부), 실행 레인 어레이(905)의 실행 레인들은 데이터에 대해 연산하여 최종적으로 시트로서 시트 생성기 또는 랜덤 액세스 메모리들(907)에 직접 완료된(finished) 데이터를 "라이트 백(write back)"한다. 나중에 I/O 유닛(904)이 랜덤 액세스 메모리(907)로부터 그 데이터를 인출하여 출력 시트를 형성한 다음 시트 생성기로 전한된다.
스칼라 프로세서(902)는 스칼라 메모리(903)로부터 스텐실 프로세서의 프로그램 코드의 명령을 판독하여 실행 레인 어레이(905)의 실행 레인들로 명령을 발행하는 프로그램 제어기(909)를 포함한다. 일 실시예에서, 단일의 동일한 명령이 어레이(905) 내의 모든 실행 레인으로 브로드 캐스트되어 데이터 계산 유닛(901)으로부터 SIMD-유사 거동을 수행한다. 일 실시예에서, 스칼라 메모리(903)로부터 판독되어 실행 레인 어레이(905)의 실행 레인들로 발행된 명령들의 명령 포맷은 명령 당 하나 이상의 연산 코드를 포함하는 VLIW(very long-instruction-word) 타입 포맷을 포함한다. 다른 실시예에서, VLIW 포맷은 각 실행 레인의 ALU에 의해 수행되는 수학적 기능을 지시하는 ALU 연산 코드(아래에서 설명되는 바와 같이, 하나의 실시예에서 하나 이상의 기존 ALU 연산을 지정할 수 있는) 및 메모리 연산 코드(특정 실행 레인 또는 실행 레인 세트에 대한 메모리 명령을 지시하는)를 포함한다.
"실행 레인"이라는 용어는 명령을 실행할 수 있는 하나 이상의 실행 유닛(예를 들어, 명령을 실행할 수 있는 논리 회로)의 세트를 지칭한다. 그러나, 다양한 실시예에서, 실행 레인은 단순한 실행 유닛 외에 더 많은 프로세서-유사 기능을 포함할 수 있다. 예를 들어, 하나 이상의 실행 유닛 이외에, 실행 레인은 또한 수신된 명령을 디코딩하는 논리 회로, 또는 더 많은 MIMD-유사 설계의 경우, 명령을 인출 및 디코딩하는 논리 회로를 포함할 수 있다. MIMD-유사 접근법과 관련하여, 본 명세서에서는 중앙 집중식 프로그램 제어 접근법이 주로 설명되었지만, (예를 들어, 어레이(905)의 각각의 실행 레인 내에 프로그램 코드 및 프로그램 제어기를 포함하는) 다양한 대안 실시예에서 보다 분산된 접근법이 구현될 수 있다.
실행 레인 어레이(905), 프로그램 제어기(909) 및 2 차원 시프트 레지스터 구조(906)의 조합은 광범위한 프로그램 가능 기능을 위한 광범위하게 적응/구성 가능한 하드웨어 플랫폼을 제공한다. 예를 들어, 애플리케이션 프트웨어 개발자는 개별 실행 레인이 다양한 기능을 수행할 수 있고 임의의 출력 어레이 위치에 근접한 입력 이미지 데이터에 쉽게 액세스할 수 있는 경우 치수(예를 들어, 스텐실 크기)뿐만 아니라 다양한 기능 역량을 갖는 커널들을 프로그래밍할 수 있다.
랜덤 레인 메모리(907)는 실행 레인 어레이(905)에 의해 연산되는 이미지 데이터에 대한 데이터 저장소로서 작용하는 것 외에도 하나 이상의 룩업 테이블을 보유할 수 있다. 다양한 실시예에서, 하나 이상의 스칼라 룩업 테이블이 또한 스칼라 메모리(903) 내에 예시될 수 있다.
스칼라 룩업은 동일한 인덱스로부터 동일한 룩업 테이블에서 동일한 데이터 값을 실행 레인 어레이(905)내의 각 실행 레인으로 전달하는 것을 포함한다. 다양한 실시예에서, 위에서 설명된 VLIW 명령 포맷은 스칼라 프로세서에 의해 수행된 룩업 동작을 스칼라 룩업 테이블로 지시하는 스칼라 연산 코드를 포함하도록 확장된다. 연산 코드와 함께 사용하도록 지정된 인덱스는 즉치 피연산자이거나 일부 다른 데이터 저장 위치로부터 인출될 수 있다. 여하튼, 일 실시예에서, 스칼라 메모리 내의 스칼라 룩업 테이블로부터의 룩업은 기본적으로 동일한 클럭 사이클 동안 실행 레인 어레이(905) 내의 모든 실행 레인으로 동일한 데이터 값을 브로드캐스트하는 것을 포함한다. 룩업 테이블의 사용 및 동작에 관한 추가 세부 사항은 아래에 추가로 제공된다.
도 9b는 위에서 논의된 VLIW 명령 워드 실시예를 요약한다. 도 9b에서 볼 수 있는 바와 같이, VLIW 명령 워드 포맷은 다음의 3개의 개별 명령, 즉 1) 스칼라 프로세서에 의해 실행되는 스칼라 명령(951), 2) 실행 레인 어레이내의 개별 ALU에 의해 SIMD 방식으로 브로드캐스트 및 실행되는 ALU 명령(952), 및 3) 부분 SIMD 방식으로 브로드캐스트되고 실행되는 메모리 명령(953)에 대한 필드를 포함한다(예를 들어, 실행 레인 어레이에서 동일한 행을 따라 실행 레인들이 동일한 랜덤 액세스 메모리를 공유하는 경우 다른 행들 각각으로부터의 하나의 실행 레인은 실제로 명령을 실행하고, 메모리 명령(953)의 포맷은 각 행으로부터 어느 실행 레인이 명령을 실행하는지 식별하는 피연산자를 포함할 수 있다).
하나 이상의 즉치 피연산자에 대한 필드(954)가 또한 포함된다. 어떤 명령(951, 952, 953)이 어떤 즉치 피연산자 정보를 사용하는지는 명령 포멧으로 식별될 수 있다. 명령(951, 952, 953) 각각은 또한 그들 자신의 개별 입력 피연산자 및 결과 정보(예를 들어, ALU 연산을 위한 로컬 레지스터 및 메모리 액세스 명령을 위한 로컬 레지스터와 메모리 어드레스)를 포함한다. 일 실시예에서, 스칼라 명령(951)은 실행 레인 어레이 내의 실행 레인들이 명령(952, 953) 중 다른 하나를 실행하기 전에 스칼라 프로세서에 의해 실행된다. 즉, VLIW 워드의 실행은 스칼라 명령(951)이 실행되는 제1 사이클에 이어 다른 명령(952, 953)이 실행될 수 있는 제2 사이클을 포함할 수 있다(다양한 실시예에서 명령(952 및 953)은 병렬로 실행될 수 있음에 유의한다).
일 실시예에서, 스칼라 프로세서에 의해 실행되는 스칼라 명령은 데이터 계산 유닛의 메모리들 또는 2D 시프트 레지스터로부터/로 시트들을 로드/저장하기 위해 시트 생성기로 발행된 커멘드이다. 여기서, 시트 생성기의 연산은 라인 버퍼 유닛의 연산 또는 스칼라 프로세서에서 발행된 임의의 명령을 시트 생성기가 완료하는데 소요되는 사이클 수에 대한 사전-런타임 이해를 방해하는 다른 변수에 따라 달라질 수 있다. 이와 같이, 일 실시예에서, 스칼라 명령(951)에 해당하거나 커멘드가 시트 생성기로 발행되게 하는 임의의 VLIW 워드는 또한 다른 2개의 명령 필드(952, 953)에 무-연산(NOOP) 명령을 포함한다. 그 후, 프로그램 코드는 시트 생성기가 데이터 계산 유닛으로/로부터 그의 로드/저장을 완료할 때까지 명령 필드(952, 953)에 대한 NOOP 명령의 루프를 입력한다. 여기서, 커멘드를 시트 생성기에 발행할 때, 스칼라 프로세서는 그 커멘드 완료시 시트 생성기가 리셋하는 인터록(interlock) 레지스터의 비트를 설정할 수 있다. NOOP 루프 동안 스칼라 프로세서는 인터록 비트의 비트를 모니터링한다. 시트 생성기가 그의 커멘드를 완료했음을 스칼라 프로세서가 감지하면 정상 실행이 다시 시작된다.
도 10은 데이터 계산 컴포넌트(1001)의 실시예를 도시한다. 도 10에서 볼 수 있는 바와같이, 데이터 계산 컴포넌트(1001)는 2 차원 시프트 레지스터 어레이 구조(1006) "위에(above)" 논리적으로 위치된 실행 레인 어레이(1005)를 포함한다. 상술한 바와 같이, 다양한 실시예에서, 시트 생성기에 의해 제공되는 이미지 데이터의 시트는 2 차원 시프트 레지스터(1006)로 로딩된다. 그 후, 실행 레인은 레지스터 구조(1006)로부터 시트 데이터에 대해 연산한다.
실행 레인 어레이(1005) 및 시프트 레지스터 구조(1006)는 서로에 대해 제위치에 고정된다. 그러나, 시프트 레지스터 어레이(1006) 내의 데이터는 실행 레인 어레이 내의 각각의 실행 레인이 데이터 내의 상이한 스텐실을 처리하게 하기 위해 전략적이고 조정된 방식으로 시프트된다. 이와 같이, 각 실행 레인은 생성되는 출력 시트에서 상이한 픽셀에 대한 출력 이미지 값을 결정한다. 도 10의 아키텍처에서, 실행 레인 어레이(1005)가 수평으로 인접한 실행 레인들 뿐만 아니라 수직으로 인접한 실행 레인들을 포함하기 때문에 중첩 스텐실은 수직 뿐만 아니라 수평으로 배열되어 있어야 한다.
데이터 계산 유닛(1001)의 주목할 만한 구조적 특징은 실행 레인 어레이(1005)보다 더 넓은 치수를 갖는 시프트 레지스터 구조(1006)를 포함한다. 즉, 실행 레인 어레이(1005) 외부에 레지스터들의 "할로(halo)(1009)"가 존재한다. 비록 할로(1009)는 구현에 따라 실행 레인 어레이의 2개 면에 존재하는 것으로 도시되어 있지만, 할로는 실행 레인 어레이(1005)의 더 적은(1개) 또는 더 많은(3개 또는 4개)면에 존재할 수 있다. 할로(1009)는 데이터가 실행 레인(1005) "아래로" 시프트함에 따라 실행 레인 어레이(1005)의 경계들 외부로 유출되는 데이터를 위한 "유출(spill-over)" 공간을 제공하는 역할을 한다. 간단한 경우로서, 실행 레인 어레이(1005)의 우측 가장자리를 중심으로 하는 5×5 스텐실은 그 스텐실의 가장 촤측 픽셀들이 처리될 때 우측으로 4개의 할로 레지스터 위치가 더 필요하다. 도면을 용이하게 하기 위해, 도 10은 공칭 실시예에서 양 측(오른쪽, 아래쪽)의 레지스터들이 수평 및 수직 연결을 모두 가질 때 수평 시프트 연결만 있는 할로 오른쪽의 레지스터들과 수직 시프트 연결만 있는 할로 아래쪽의 레지스터들을 도시한다. 다양한 실시예에서, 할로 영역은 이미지 처리 명령을 처리하기 위해 (예를 들어, ALU가 존재하지 않는) 대응하는 실행 레인 로직을 포함하지 않는다. 그러나, 개별 메모리 액세스 유닛(M)은 개별 할로 레지스터 위치가 메모리로부터 데이터를 개별적으로 로드하여 데이터를 메모리에 저장할 수 있도록 각각의 할로 영역 위치에 존재한다.
추가 유출 룸(room)이 어레이의 각 행 및/또는 각 열 또는 그 일부에 연결된 랜덤 액세스 메모리(1007)에 의해 제공된다(예를 들어, 랜덤 액세스 메모리는 행 방향으로 4개의 실행 레인 및 열 방향으로 2개의 실행 레인을 커버하는 실행 레인 어레이의 "영역(region)"에 할당될 수 있다. 간략화를 위해, 애플리케이션의 나머지 부분은 주로 행 및/또는 열 기반 할당 방식을 참조할 것이다. 여기서, 실행 레인의 커널 연산이 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)를 저장하는데 사용되는 보다 깊은(depper) 레지스터 위치 중 하나를 도시한다. 설명의 편의를 위해, 보다 깊은 결과 레지스터는 그의 대응 레지스터(R2) 아래가 아니라 나란히 도시되어 있다.
도 11a 내지 11k는 중심 위치가 실행 레인 어레이 내에 도시된 한 쌍의 실행 레인 위치(1111)와 정렬되는 2개의 스텐실의 계산에 중점을 둔다. 설명의 편의를 위해, 한 쌍의 실행 레인(1110)은 실제로 다음 예에 따라, 이들이 수직 이웃일 때 수평 이웃으로서 도시된다.
도 11a에서 초기에 볼 수 있는 바와 같이, 실행 레인들은 그들의 중앙 스텐실 위치를 중심으로 한다. 도 11b는 두 실행 레인에 의해 실행되는 오브젝트 코드를 도시한다. 도 11b에서 볼 수 있듯이, 두 실행 레인의 프로그램 코드는 시프트 레지스터 어레이 내의 데이터가 한 위치 아래로 시프트하고 한 위치 오른쪽으로 시프트하게 한다. 이렇게 하면 두 실행 레인이 그들의 개별 스텐실의 좌측 위 코너에 맞춰 정렬된다. 그런 다음 프로그램 코드는 그들의 개별 위치에 있는(R2에) 데이터가 데이터가 R1으로 로딩되게 한다.
도 11c에서 볼 수 있는 바와 같이, 프로그램 코드는 그 다음에 한 쌍의 실행 레인이 시프트 레지스터 어레이 내의 데이터를 한 단위(unit) 왼쪽으로 시프트되게 하여, 각 실행 레인의 각각의 위치 오른쪽에 있는 값이 각 실행 레인의 위치로 시프트되게 한다. 그런 다음 R1의 값(이전 값)에 실행 레인 위치(R2의)로 시프트된 새로운 값이 가산된다. 그 결과는 R1에 기록된다. 도 11d에서 볼 수 있듯이, 도 11c에 대해 전술한 것과 동일한 프로세스가 반복되어. 그 결과(R1)가 이제 상위 실행 레인에서의 값(A+B+C)과 하위 실행 레인에서의 값(F+G+H)을 포함하게 한다. 이 시점에서 두 실행 레인은 그들의 개별 스텐실의 상부 행을 처리했다. 실행 레인 어레이의 왼쪽에 있는 할로 영역으로의(왼쪽에 있는 경우) 또는 할로 영역이 실행 레인 어레이의 좌측에 존재하지 않는 경우 랜덤 액세스 메모리로의 유출에 유의한다.
도 11e에서 볼 수 있듯이, 프로그램 코드는 그 다음 시프트 레지스터 어레이의 데이터가 한 단위 위로 시프트되게 하여, 두 실행 레인이 그들 각각의 스텐실의 중간 행의 우측 가장자리에 정렬되게 한다. 두 실행 레인의 레지스터(R1)에는 현재 스텐실의 상부 행 및 중간 행의 가장 오른쪽 값의 합이 포함된다. 도 11f 및 11g는 두 실행 레인의 스텐실 중간 행을 가로 질러 왼쪽으로 계속 진행되는 것을 보여준다. 누적 가산은 도 11g의 처리가 끝날 때 두 실행 레인이 그들 각각의 스텐실의 상부 행과 중간 행의 값의 합을 포함하도록 계속된다.
도 11h는 각 실행 레인을 대응하는 스텐실의 최하위 행에 정렬시키기 위한 다른 시프트를 도시한다. 도 11i 및 11j는 두 실행 레인의 스텐실 과정을 통해 처리가 완료하기 위한 연속 시프팅을 도시한다. 도 11k는 각 실행 레인을 데이터 어레이내의 정확한 위치에 정렬시키고 그 결과를 기록하기 위한 추가 시프팅을 도시한다.
도 11a 내지 11k의 예에서, 시프트 동작을 위한 오브젝트 코드는 (X, Y) 좌표로 표현된 시프트의 방향 및 크기를 식별하는 명령 포맷을 포함할 수 있음에 유의한다. 예를 들어, 한 위치만큼 시프트하기 위한 오브젝트 코드는 오브젝트 코드에서 SHIFT 0, +1로 표현될 수 있다. 다른 예로서, 한 위치만큼 우측으로의 시프트는 오브젝트 코드에서 SHIFT +1, 0로 표현될 수 있다. 다양한 실시예에서, 또한 더 큰 크기의 시프트는 오브젝트 코드에서 (예를 들어, SHIFT 0, +2)로 특정될 수 있다. 여기서, 2D 시프트 레지스터 하드웨어가 사이클 당 한 위치씩만 시프트를 지원하는 경우, 명령은 다중 사이클 실행을 요구하도록 머신에 의해 해석될 수 있거나, 2D 시프트 레지스터 하드웨어는 사이클 당 하나 이상의 위치씩 시프트를 지원하도록 설계될 수 있다. 후자의 실시예는 아래에 더 상세히 설명된다.
도 12는 실행 레인 및 대응하는 시프트 레지스터 구조(할로 영역내의 레지스터들은 대응하는 실행 레인을 포함하지 않지만 다양한 실시예에서 메모리 유닛을 포함함)에 대한 단위 셀의 다른 보다 상세한 묘사를 도시한다. 실시예에서, 실행 레인 어레이에서 각 위치와 연관된 실행 레인 및 레지스터 공간은 그 실행 레인 어레이의 각 노드에서 도 12에서 관찰된 회로를 예시함으로써 구현된다. 도 12에서 볼 수 있듯이, 단위 셀은 4개의 레지스터(R2~R5)로 구성된 레지스터 파일(1202)에 연결된 실행 레인(1201)을 포함한다. 임의의 사이클 동안, 실행 레인(1201)은 임의의 레지스터(R1~R5)로부터/에 판독 또는 기록할 수 있다. 두 개의 입력 피연산자가 필요한 명령의 경우, 실행 레인은 R1 내지 R5 중 하나에서 피연산자 모두를 검색할 수 있다.
일 실시예에서, 2 차원 시프트 레지스터 구조는 단일 사이클 동안, 레지스터(R2~R4) 중 임의의 하나(만)의 컨텐츠가 출력 멀티플렉서(1203)를 통해 그의 이웃하는 레지스터 파일들 중 하나로 시프트 "아웃(out)"되도록 허용하고, 이웃들 사이의 시프트가 동일한 방향(예를 들어, 모든 실행 레인이 왼쪽으로 시프트되고, 모든 실행 레인이 오른쪽으로 시프트되는 등)에 있도록 이웃들이 입력 멀티플렉서(1204)를 통해 이웃하는 경우, 대응하는 것으로부터 시프트 "인(in)"되는 컨텐츠로 레지스터(R2~R4) 중 임의의 하나(만)의 컨텐츠가 교체되도록 함으로써 구현된다. 동일한 레지스터가 그의 컨텐츠를 시프트-아웃시키고 동일 사이클에서 시프트-인된 컨텐츠로 교체하는 것이 일반적이지만, 멀티플렉서 장치(1203, 1204)는 동일 사이클 동안 동일한 레지스터 파일 내에서 상이한 시프트 소스 및 시프트 타겟 레지스터를 허용한다.
도 12에 도시된 바와 같이, 시프트 시퀀스 동안, 실행 레인은 그의 레지스터 파일(1202)로부터 그의 각각의 좌측, 우측, 상부 및 하부 이웃으로 컨텐츠를 시프트-아웃할 것이다. 동일 시프트 시퀀스와 공조하여, 실행 레인은 또한 그의 좌측, 우측, 상부 및 하부 이웃들 중 특정 하나로부터 그의 레지스터 파일로 컨텐츠를 시프트-인할 것이다. 또한, 시프트-아웃 타겟 및 시프트-인 소스는 모든 실행 레인에 대해 동일한 시프트 방향과 일치해야 한다(예를 들어, 시프트-아웃이 우측 이웃으로인 경우, 시프트-인은 좌측 이웃으로부터 이어야 함).
일 실시예에서, 단지 하나의 레지스터의 컨텐츠가 사이클 당 실행 레인 당 시프트되도록 허용되지만, 다른 실시예는 하나 이상의 레지스터의 컨텐츠가 시프트 인/아웃되도록 허용할 수 있다. 예를 들어, 도 12에 도시된 멀티플렉서 회로(1203, 1204)의 제2 인스턴스가 도 12의 설계에 포함된다면, 2개의 레지스터의 컨텐츠는 동일 사이클 동안 시프트 아웃/인될 수 있다. 물론, 단지 하나의 레지스터의 컨텐츠가 사이클 당 시프트되도록 허용된 실시예에서, 다수의 레지스터로부터의 시프트는 수학 연산 사이의 시프트를 위해 더 많은 클럭 사이클을 소비함으로써 수학 연산 사이에서 발생할 수 있다(예를 들어, 2개의 레지스터의 컨텐츠는 수학 연산 사이에서 2개의 시프트 연산을 소비함으로써 수학 연산 간에 시프트될 수 있음).
시프트 시퀀스 동안 실행 레인의 레지스터 파일의 모든 컨텐츠보다 적은 수의 컨텐츠가 시프트-아웃되는 경우, 각 실행 레인의 미 시프트-아웃된 레지스터들의 컨텐츠는 그대로 유지된다(시프트하지 않음). 이와 같이, 시프트-인 컨텐츠로 대체되지 않은 임의의 미 시프트된 컨텐츠는 시프트 사이클에 걸쳐 실행 레인에 로컬로 유지된다. 각 실행 레인에 도시된 메모리 유닛("M")은 실행 레인 어레이 내의 실행 레인의 행 및/또는 열과 연관된 랜덤 액세스 메모리 공간으로부터/로 데이터를 로드/저장하는데 사용된다. 여기서, M 유닛은 실행 레인의 자체 레지스터 공간으로부터/로 로드/저장할 수 없는 데이터를 로드/저장하는데 종종 사용된다는 점에서 표준 M 유닛으로 작용한다. 다양한 실시예들에서, M 유닛의 주요 동작은 로컬 레지스터로부터 메모리로 데이터를 기록하고, 메모리로부터 데이터를 읽어 그것을 로컬 레지스터에 기록하는 것이다.
하드웨어 실행 레인(1201)의 ALU 유닛에 의해 지원되는 ISA 연산 코드와 관련하여, 다양한 실시예에서, 하드웨어 ALU가 지원하는 수학 연산 코드는 예를 들어, ADD, SUB, MOV, MUL, MAD, ABS, DIV, SHL, SHR, MIN/MAX, SEL, AND, OR, XOR, NOT을 포함한다. 바로 위에서 설명한 바와 같이, 메모리 액세스 명령은 실행 레인(1201)에 의해 실행되어 그들의 관련 랜덤 액세스 메모리로부터/로 데이터를 인출/저장할 수 있다. 또한, 하드웨어 실행 레인(1201)은 2 차원 시프트 레지스터 구조 내의 데이터를 시프트하기 위해 시프트 연산 명령(오른쪽, 왼쪽, 위, 아래)을 지원한다. 상술한 바와 같이, 프로그램 제어 명령은 스텐실 프로세서의 스칼라 프로세서에 의해 대부분 실행된다.
4.0 구현 실시예
전술한 다양한 이미지 프로세서 아키텍처 특징들은 반드시 기존 의미의 이미지 처리에 국한되지 않으며 따라서 이미지 프로세서가 재특성화되게 할 수 있는(또는 그렇지 않은) 다른 애플리케이션에 적용될 수 있음을 지적하는 것이 적절하다. 예를 들어, 전술한 다양한 이미지 프로세서 아키텍처 특징들 중 임의의 것이 실제 카메라 이미지의 처리와 반대로 애니메이션의 창작 및/또는 생성 및/또는 렌더링에 사용되는 경우, 이미지 프로세서는 그래픽 처리 유닛으로으로서 특징지어 질 수 있다. 또한, 전술한 이미지 프로세서 아키텍처 특징들은 비디오 처리, 비전 처리, 이미지 인식 및/또는 기계 학습과 같은 다른 기술적 애플리케이션에 적용될 수 있다. 이런 방식으로 적용되면, 이미지 프로세서는 (예를 들어, 컴퓨팅 프로세서의 CPU이거나 그의 일부인) 보다 범용 프로세서와 통합(예를 들어, 코-프로세서로서)될 수 있거나, 컴퓨팅 시스템 내의 독립형 프로세서일 수 있다.
전술한 하드웨어 설계 실시예는 반도체 칩 내에 구현될 수 있고 및/또는 반도체 제조 공정에 대한 최종 목표를 위한 회로 설계의 디스크립션으로 구현될 수 있다. 후자의 경우, 이러한 회로 디스크립션은(예를 들어, VHDL 또는 Verilog) 레지스터 전송 레벨(RTL) 회로 디스크립션, 게이트 레벨 회로 디스크립션, 트랜지스터 레벨 회로 디스크립션 또는 마스크 디스크립션 또는 이들의 다양한 조합의 형태를 취할 수 있다. 회로 디스크립션은 일반적으로 (CD-ROM 또는 다른 유형의 저장 기술과 같은) 컴퓨터 판독 가능 저장 매체에 구현된다.
전술한 섹션들로부터, 전술한 바와 같은 이미지 프로세서가 (예를 들어, 휴대용 디바이스의 카메라로부터의 데이터를 처리하는 휴대용 디바이스의 시스템 온 칩(SOC)의 일부로서) 컴퓨터 시스템의 하드웨어로 구현될 수 있음을 인식하는 것이 적절하다. 이미지 프로세서가 하드웨어 회로로서 구현되는 경우, 그 이미지 프로세서에 의해 처리되는 이미지 데이터는 카메라로부터 직접 수신될 수 있음에 유의한다. 여기서, 이미지 프로세서는 개별 카메라의 일부이거나 통합 카메라를 갖는 컴퓨팅 시스템의 일부일 수 있다. 후자의 경우, 이미지 데이터는 그 카메라로부터 또는 컴퓨팅 시스템의 시스템 메모리로부터 직접 수신될 수 있다(예를 들어, 카메라는 이미지 프로세서가 아닌 시스템 메모리로 이미지 데이터를 전송한다). 또한 이전 섹션에서 설명한 많은 특징들은 (애니메이션을 렌더링하는) 그래픽 프로세서 유닛에 적용할 수 있다.
도 13은 컴퓨팅 시스템의 예시적인 묘사를 제공한다. 후술되는 컴퓨팅 시스템의 많은 컴포넌트는 통합 카메라 및 관련 이미지 프로세서(예를 들어, 스마트 폰 또는 태블릿 컴퓨터와 같은 휴대용 디바이스)를 갖는 컴퓨팅 시스템에 적용 가능하다. 통상의 기술자는 그 둘 사이를 쉽게 설명할 수 있을 것이다. 또한, 도 13의 컴퓨팅 시스템은 또한 워크 스테이션 또는 슈퍼 컴퓨터와 같은 고성능 컴퓨팅 시스템의 많은 특징을 포함한다.
도 13에서 볼 수 있는 바와같이, 기본 컴퓨팅 시스템은 중앙 처리 유닛(1301)(예를 들어, 복수의 범용 처리 코어(1315_1~1315_N) 및 멀티-코어 프로세서 또는 애플리케이션 프로세서 상에 배치된 메인 메모리 제어기(1317)을 포함할 수 있음), 시스템 메모리(1302), 디스플레이(1303)(예를 들어, 터치 스크린, 평판), 로컬 유선 점-대-점 링크(예를 들어, USB) 인터페이스(1304), (이더넷 인터페이스 및/또는 셀룰러 모뎀 서브 시스템과 같은) 다양한 네트워크 I/O 기능(1305), 무선 근거리 통신망(예를 들어, WiFi) 인터페이스(1306), 무선 점-대-점 링크(예를 들어, 블루투스) 인터페이스(1307) 및 글로벌 위치 측정 시스템 인터페이스(1308), 다양한 센서(1309_1~1309_N), 하나 이상의 카메라(1310), 배터리(1311), 전력 관리 제어 유닛(1312), 스피커 및 마이크로폰(1313) 및 오디오 코더/디코더(1314)을 포함할 수 있다.
애플리케이션 프로세서 또는 멀티-코어 프로세서(1350)는 CPU(1201) 내의 하나 이상의 범용 처리 코어(1315), 하나 이상의 그래픽 처리 유닛(1316), 메모리 관리 기능(1317)(예를 들어, 메모리 제어기), I/O 제어 기능(1318) 및 이미지 처리 유닛(1315)을 포함할 수 있다. 범용 처리 코어(1315)는 전형적으로 컴퓨팅 시스템의 운영 체제및 애플리케이션 소프트웨어를 실행한다. 그래픽 처리 유닛(1316)은 전형적으로 예를 들어 디스플레이(1303) 상에 제시되는 그래픽 정보를 생성하기 위해 그래픽 집약적 기능을 실행한다. 메모리 제어 기능(1317)은 시스템 메모리(1302)와 인터페이스하여 시스템 메모리(1302)로/로부터 데이터를 기록/판독한다. 전력 관리 제어 유닛(1312)은 일반적으로 시스템(1300)의 전력 소비를 제어한다.
이미지 처리 유닛(1319)은 전술한 섹션들에서 전술한 이미지 처리 유닛 실시예들 중 임의의 것에 따라 구현될 수 있다. 대안적으로 또는 조합하여, IPU(1319)는 그의 코-프로세서로서 GPU(1316) 및 CPU(1301) 중 하나 또는 둘 모두에 결합될 수 있다. 부가적으로, 다양한 실시예에서, GPU(1316)는 전술한 임의의 이미지 프로세서 특징들로 구현될 수 있다. 이미지 처리 유닛(1319), 또는 데이터를 전송하는 컴퓨팅 시스템의 다른 유닛은 전술한 바와 같이 효율적인 통신 시퀀스를 구현하는 송수신기로 구성될 수 있다.
터치 스크린 디스플레이(1303), 통신 인터페이스(1304~1307), GPS 인터페이스(1308), 센서(1309), 카메라(1310) 및 스피커/마이크폰 코덱(1313, 1314) 각각은 또한, 적절한 경우 통합된 주변 디바이스(예를 들어, 하나 이상의 카메라(1310))를 포함하는 전체 컴퓨팅 시스템에 대한 다양한 형태의 I/O(입력 및/또는 출력)로 볼 수 있다. 구현에 따라, 이들 I/O 컴포넌트 중 다양한 컴포넌트는 애플리케이션 프로세서/멀티-코어 프로세서(1350)에 통합될 수 있거나 또는 애플리케이션 프로세서/멀티-코어 프로세서(1350)의 다이 외부 또는 패키지 외부에 위치될 수 있다.
일 실시예에서, 하나 이상의 카메라(1310)는 카메라와 그의 시야내의 객체 사이의 깊이를 측정할 수 있는 깊이 카메라를 포함한다. 애플리케이션 프로세서 또는 다른 프로세서의 범용 CPU 코어(또는 프로그램 코드를 실행하기 위한 명령 실행 파이프 라인을 갖는 다른 기능 블록)에서 실행되는 애플리케이션 소프트웨어, 운영 체제 소프트웨어, 디바이스 드라이버 소프트웨어 및/또는 펌웨어는 전술한 임의의 기능을 수행할 수 있다.
본 발명의 실시예는 전술한 바와 같은 다양한 프로세스들을 포함할 수 있다. 프로세스들은 기계 실행 가능 명령으로 구현될 수 있다. 이 명령은 범용 또는 특수 목적 프로세서가 특정 프로세스들을 수행하도록 하는데 사용될 수 있다. 대안 적으로, 이들 프로세스는 프로세스들을 수행하기 위한 하드 와이어 및/또는 프로그램 가능 로직을 포함하는 특정 하드웨어 컴포넌트에 의해, 또는 프로그램된 컴퓨터 컴포넌트 및 주문형 하드웨어 컴포넌트의 임의의 조합에 의해 수행될 수 있다.
본 발명의 요소는 또한 기계 실행 가능 명령들을 저장하기 위한 기계 판독 가능 매체로서 제공될 수 있다. 기계 판독 가능 매체는 플로피 디스켓, 광 디스크, CD-ROM, 및 광 자기 디스크, 플래시 메모리, ROM, RAM, EPROM, EEPROM, 자기 또는 광 카드, 전파 매체 또는 전자 명령을 저장하기에 적합한 다른 유형의 매체/기계 판독 가능 매체를 포함하지만 이에 한정되지는 않는다. 예를 들어, 본 발명은 통신 링크(예를 들어, 모뎀 또는 네트워크 연결)를 통해 반송파 또는 다른 전파 매체에 구현된 데이터 신호에 의해 원격 컴퓨터(예를 들어, 서버)로부터 요청 컴퓨터(예를 들어, 클라이언트)로 전송될 수 있는 컴퓨터 프로그램으로서 다운로드될 수 있다. 전술한 명세서에서, 본 발명은 특정 예시적인 실시예를 참조하여 설명되었다. 그러나, 첨부된 청구 범위에 기재된 본 발명의 더 넓은 사상 및 범위를 벗어나지 않고 다양한 수정 및 변경이 이루어질 수 있음이 명백할 것이다. 따라서, 명세서 및 도면은 제한적인 의미가 아니라 예시적인 것으로 간주되어야 한다.
이하에서는 일부 예시적인 실시예들이 기술된다.
실시예 1 : 프로세서에 있어서, 네트워크; 네트워크에 연결된 복수의 처리 코어; 네트워크에 연결된 송신기 회로를 포함하고, 상기 송신기 회로는 처리 코어들 중 하나에 의해 생성된 출력 데이터를 네트워크로 전송하고, 상기 송신기 회로는 송신기 회로가 출력 데이터의 이전의 제1 패킷의 전송을 완료하기 전에 송신기 회로가 출력 데이터의 제2 패킷의 전송 요청을 전송하게 하는 제어 논리 회로를 포함한다.
실시예 2: 제1 실시예에 있어서, 상기 요청은 제2 패킷이 동일한 목적지로 전송될 경우 제1 패킷이 전송중인 동일한 목적지로 전송되거나; 또는 제2 패킷이 다른 목적지로 전송될 경우 다른 목적지로 전송된다.
실시예 3: 제1 실시예 또는 제2 실시예에 있어서, 상기 제어 논리 회로는 제1 및 제2 패킷이 동일한 목적지로 전송되는 경우 제1 및 제2 패킷에 대해 동일한 크레딧 카운터를 사용하고; 또는 제1 및 제2 패킷이 다른 목적지로 전송되는 경우 제1 패킷에 대해 제1 크레딧 카운터를 사용하고 제2 패킷에 대해 제2 크레딧 카운터를 사용한다.
실시예 4: 선행하는 실시예들 중 적어도 하나에 있어서, 상기 제어 논리 회로는 다른 목적지로의 다수의 패킷의 동시 전송을 제어하기 위한 복수의 크레딧 카운터를 포함한다.
실시예 5: 제2 실시예 내지 제4 실시예 중 적어도 하나에 있어서, 상기 크레딧 카운터 각각은 임의의 특정 목적지로의 전송을 제어하도록 영구적으로 할당되지 않는다.
실시예 6: 선행하는 실시예들 중 적어도 하나에 있어서, 상기 프로세서는 이미지 프로세서이고, 상기 제1 및 제2 패킷은 데이터 이미지 라인을 포함한다.
실시예 7: 선행하는 실시예들 중 적어도 하나에 있어서, 상기 제1 및 제2 패킷의 데이터 유닛은 송신기에 의해 전송된 후 및 데이터 유닛이 처리 코어들 중 다른 하나 이상에 의해 처리되기 전에 프로세서의 메모리 회로에 의해 큐잉된다.
실시예 8: 제6 실시예 또는 제7 실시예에 있어서, 상기 이미지 프로세서는 2 차원 시프트 레지스터 어레이에 연결된 실행 레인의 어레이를 포함한다.
실시예 9: 제6 실시예 내지 제8 실시예 중 적어도 하나에 있어서, 상기 이미지 프로세서는 이미지 데이터의 스텐실을 처리하기 위한 다수의 스텐실 프로세서를 포함한다.
실시예 10: 제9 실시예의 프로세서는 중첩 스텐실에서 동작하도록 구성된다.
실시예 11: 선행하는 실시예들 중 적어도 하나에 있어서, 상기 실행 레인 어레이 외부에 레지스터들의 "할로(halo)"가 존재하도록 상기 실행 레인 어레이보다 더 넓은 치수를 갖는 시프트 레지스터 구조를 갖는 데이터 계산 유닛을 포함하거나 이에 연결된다.
실시예 12: 컴퓨팅 시스템으로서, 복수의 범용 처리 코어; 시스템 메모리; 그 시스템 메모리와 범용 처리 코어 사이에 연결된 메모리 제어기; 이미지 프로세서를 포함하고, 상기 이미지 프로세서는, a) 네트워크, b) 네트워크에 연결된 복수의 이미지 처리 코어, c) 네트워크에 연결된 송신기 회로를 포함하고, 상기 송신기 회로는 처리 코어들 중 하나에 의해 생성된 출력 데이터를 네트워크로 전송하고, 상기 송신기 회로는 송신기 회로가 출력 데이터의 이전의 제1 패킷의 전송을 완료하기 전에 송신기 회로가 출력 데이터의 제2 패킷의 전송 요청을 전송하게 하는 제어 논리 회로를 포함한다.
실시예 13: 제12 실시예에 있어서, 상기 요청은 제2 패킷이 동일한 목적지로 전송될 경우 제1 패킷이 전송중인 동일한 목적지로 전송되거나; 또는, 제2 패킷이 다른 목적지로 전송될 경우 다른 목적지로 전송된다.
실시예 14: 제12 실시예 또는 제13 실시예에 있어서, 상기 제어 논리 회로는 제1 및 제2 패킷이 동일한 목적지로 전송되는 경우 제1 및 제2 패킷에 대해 동일한 크레딧 카운터를 사용하고; 또는 제1 및 제2 패킷이 다른 목적지로 전송되는 경우 제1 패킷에 대해 제1 크레딧 카운터를 사용하고 제2 패킷에 대해 제2 크레딧 카운터를 사용한다.
실시예 15: 제12 실시예 내지 제14 실시예 중 적어도 하나에 있어서, 상기 제어 논리 회로는 다른 목적지로의 다수의 패킷의 동시 전송을 제어하기 위한 복수의 크레딧 카운터를 포함한다.
실시예 16: 제12 실시예 내지 제15 실시예 중 적어도 하나에 있어서, 상기 크레딧 카운터 각각은 임의의 특정 목적지로의 전송을 제어하도록 영구적으로 할당되지 않는다.
실시예 17: 제12 실시예 내지 제16 실시예 중 적어도 하나에 있어서, 상기 제1 및 제2 패킷은 데이터 이미지 라인을 포함한다.
실시예 18: 제12 실시예 내지 제17 실시예 중 적어도 하나에 있어서, 상기 제1 및 제2 패킷의 데이터 유닛은 송신기에 의해 전송된 후 및 데이터 유닛이 처리 코어들 중 다른 하나 이상에 의해 처리되기 전에 프로세서의 메모리 회로에 의해 큐잉된다.
실시예 19: 제12 실시예 내지 제18 실시예 중 적어도 하나에 있어서, 상기 이미지 프로세서는 2 차원 시프트 레지스터 어레이에 연결된 실행 레인의 어레이를 포함한다.
실시예 20: 제12 실시예 내지 제19 실시예 중 적어도 하나에 있어서, 상기 이미지 프로세서는 이미지 데이터의 처리 스텐실을 처리하기 위한 다수의 스텐실 프로세서를 포함한다.
실시예 21: 제20 실시예의 컴퓨팅 시스템은 중첩 스텐실에서 동작하도록 구성된다.
실시예 22: 제12 실시예 내지 제21 실시예 중 적어도 하나에 있어서, 상기 실행 레인 어레이 외부에 레지스터들의 "할로(halo)"가 존재하도록 상기 실행 레인 어레이보다 더 넓은 치수를 갖는 시프트 레지스터 구조를 갖는 데이터 계산 유닛을 포함하거나 이에 연결된다.
실시예 23: 프로세서에 의해 수행되는 방법으로서, 처리 코어의 출력 데이터를 생성하기 위해 프로세서의 처리 코어상에서 프로그램 코드를 처리하는 단계와; 상기 프로세서 내의 네트워크에 연결된 송신기 회로에 의해, 송신기 회로가 이전의 제1 패킷의 전송을 완료하기 전에 제2 패킷에 대한 전송 요청을 전송하는 단계와, 상기 제2 패킷은 처리 코어에 의해 생성된 제2 출력 데이터를 포함하고, 상기 제1 패킷은 처리 코어에 의해 생성된 제1 출력 데이터를 포함하고; 그리고 상기 네트워크에 연결된 프로세서의 하나 이상의 다른 처리 코어로 제1 출력 데이터 및 제2 출력 데이터를 처리하는 단계를 포함한다.
실시예 24: 제23 실시예에 있어서, 상기 송신기 회로에 의해 제1 출력 데이터를 전송 한 후 및 하나 이상의 처리 코어에 의해 제1 출력 데이터를 처리하기 전에 제1 출력 데이터를 큐잉하는 단계를 더 포함한다.
실시예 25: 제23 실시예 또는 제24 실시예에 있어서, 상기 큐잉 단계는 네트워크에 연결된 버퍼에 의해 이미지 데이터 라인들을 큐잉하는 단계를 포함한다.
실시예 26: 제23 실시예 내지 제25 실시예 중 적어도 하나에 있어서, 상기 제1 패킷의 전송에 관여하면서 제2 패킷의 전송에 관여하는 송신기 회로를 더 포함하고, 상기 제2 패킷은 제1 패킷과 다른 목적지로 전송된다.
실시예 27: 제23 실시예 내지 제26 실시예 중 적어도 하나에 있어서, 상기 제1 및 제2 패킷이 동일한 목적지로 전송되는 경우 송신기로부터 제1 및 제2 패킷의 전송을 제어하기 위해 동일한 크레딧 카운터를 사용하는 단계를 더 포함한다.
실시예 28: 제23 실시예 내지 제27 실시예 중 적어도 하나에 있어서,상기 송신기로부터 제3 패킷의 전송을 제어하기 위해 동일한 크레딧 카운터를 사용하는 단계를 더 포함하고, 상기 제3 패킷은 제1 및 제2 패킷의 전송이 발생할 때 이외의 시간 기간 동안 제1 및 제2 패킷과는 다른 목적지로 전송된다.
실시예 29: 제23 실시예 내지 제28 실시예 중 적어도 하나에 있어서, 상기 이미지 프로세서는 2 차원 시프트 레지스터 어레이에 연결된 실행 레인 어레이를 포함한다.
실시예 30: 제23 실시예 내지 제29 실시예 중 적어도 하나에 있어서, 상기 이미지 프로세서는 이미지 데이터의 스텐실을 처리하기 위한 다수의 스텐실 프로세서를 포함한다.
실시예 31: 제30 실시예의 방법은 중첩 스텐실에서 동작하도록 구성된다.
실시예 32: 제23 실시예 내지 제31 실시예 중 적어도 하나에 있어서, 상기 실행 레인 어레이 외부에 레지스터들의 "할로(halo)"가 존재하도록 상기 실행 레인 어레이보다 더 넓은 치수를 갖는 시프트 레지스터 구조를 갖는 데이터 계산 유닛을 포함하거나 이에 연결된다.

Claims (32)

  1. 프로세서에 있어서,
    네트워크;
    네트워크에 연결된 복수의 처리 코어;
    네트워크에 연결된 송신기 회로를 포함하고, 상기 송신기 회로는 처리 코어들 중 하나에 의해 생성된 출력 데이터를 네트워크로 전송하고, 상기 송신기 회로는 송신기 회로가 출력 데이터의 이전의 제1 패킷의 전송을 완료하기 전에 송신기 회로가 출력 데이터의 제2 패킷의 전송 요청을 전송하게 하는 제어 논리 회로를 포함하는 것을 특징으로 하는 프로세서.
  2. 제1항에 있어서,
    상기 요청은,
    제2 패킷이 동일한 목적지로 전송될 경우 제1 패킷이 전송중인 동일한 목적지로 전송되거나; 또는,
    제2 패킷이 다른 목적지로 전송될 경우 다른 목적지로 전송되는 것을 특징으로 하는 프로세서.
  3. 제1항 또는 제2항에 있어서,
    상기 제어 논리 회로는,
    제1 및 제2 패킷이 동일한 목적지로 전송되는 경우 제1 및 제2 패킷에 대해 동일한 크레딧 카운터를 사용하고; 또는
    제1 및 제2 패킷이 다른 목적지로 전송되는 경우 제1 패킷에 대해 제1 크레딧 카운터를 사용하고 제2 패킷에 대해 제2 크레딧 카운터를 사용하는 것을 특징으로 하는 프로세서.
  4. 선행하는 항들 중 적어도 하나에 있어서,
    상기 제어 논리 회로는 다른 목적지로의 다수의 패킷의 동시 전송을 제어하기 위한 복수의 크레딧 카운터를 포함하는 것을 특징으로 하는 프로세서.
  5. 제2항 내지 제4항 중 적어도 하나에 있어서,
    상기 크레딧 카운터 각각은 임의의 특정 목적지로의 전송을 제어하도록 영구적으로 할당되지 않는 것을 특징으로 하는 프로세서.
  6. 선행하는 항들 중 적어도 하나에 있어서,
    상기 프로세서는 이미지 프로세서이고, 상기 제1 및 제2 패킷은 데이터 이미지 라인을 포함하는 것을 특징으로 하는 프로세서.
  7. 선행하는 항들 중 적어도 하나에 있어서,
    상기 제1 및 제2 패킷의 데이터 유닛은,
    상기 송신기에 의해 전송된 후 및 데이터 유닛이 처리 코어들 중 다른 하나 이상에 의해 처리되기 전에 프로세서의 메모리 회로에 의해 큐잉되는 것을 특징으로 하는 프로세서.
  8. 제6항 또는 제7항에 있어서,
    상기 이미지 프로세서는 2 차원 시프트 레지스터 어레이에 연결된 실행 레인의 어레이를 포함하는 것을 특징으로 하는 프로세서.
  9. 제6항 내지 제8항 중 적어도 하나에 있어서,
    상기 이미지 프로세서는 이미지 데이터의 스텐실을 처리하기 위한 다수의 스텐실 프로세서를 포함하는 것을 특징으로 하는 프로세서.
  10. 제9항의 프로세서는 중첩 스텐실에서 동작하도록 구성되는 것을 특징으로 하는 프로세서.
  11. 선행하는 항들 중 적어도 하나에 있어서,
    실행 레인 어레이 외부에 레지스터들의 "할로(halo)"가 존재하도록 실행 레인 어레이보다 넓은 치수를 갖는 시프트 레지스터 구조를 갖는 데이터 계산 유닛을 포함하거나 연결되는 것을 특징으로 하는 프로세서.
  12. 컴퓨팅 시스템으로서,
    복수의 범용 처리 코어;
    시스템 메모리;
    시스템 메모리와 범용 처리 코어 사이에 연결된 메모리 제어기;
    이미지 프로세서를 포함하고, 상기 이미지 프로세서는,
    a) 네트워크,
    b) 네트워크에 연결된 복수의 이미지 처리 코어,
    c) 네트워크에 연결된 송신기 회로를 포함하고, 상기 송신기 회로는 처리 코어들 중 하나에 의해 생성된 출력 데이터를 네트워크로 전송하고, 상기 송신기 회로는 송신기 회로가 출력 데이터의 이전의 제1 패킷의 전송을 완료하기 전에 송신기 회로가 출력 데이터의 제2 패킷의 전송 요청을 전송하게 하는 제어 논리 회로를 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  13. 제12항에 있어서,
    상기 요청은,
    제2 패킷이 동일한 목적지로 전송될 경우 제1 패킷이 전송중인 동일한 목적지로 전송되거나; 또는,
    제2 패킷이 다른 목적지로 전송될 경우 다른 목적지로 전송되는 것을 특징으로 하는 컴퓨팅 시스템.
  14. 제12항 또는 제13항에 있어서,
    상기 제어 논리 회로는,
    제1 및 제2 패킷이 동일한 목적지로 전송되는 경우 제1 및 제2 패킷에 대해 동일한 크레딧 카운터를 사용하고; 또는
    제1 및 제2 패킷이 다른 목적지로 전송되는 경우 제1 패킷에 대해 제1 크레딧 카운터를 사용하고 제2 패킷에 대해 제2 크레딧 카운터를 사용하는 것을 특징으로 하는 컴퓨팅 시스템.
  15. 제12항 내지 제14항 중 적어도 하나에 있어서,
    상기 제어 논리 회로는 다른 목적지로의 다수의 패킷의 동시 전송을 제어하기 위한 복수의 크레딧 카운터를 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  16. 제12항 내지 제15항 중 적어도 하나에 있어서,
    상기 크레딧 카운터 각각은 임의의 특정 목적지로의 전송을 제어하도록 영구적으로 할당되지 않는 것을 특징으로 하는 컴퓨팅 시스템.
  17. 제12항 내지 제16항 중 적어도 하나에 있어서,
    상기 제1 및 제2 패킷은 데이터 이미지 라인을 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  18. 제12항 내지 제17항 중 적어도 하나에 있어서,
    상기 제1 및 제2 패킷의 데이터 유닛은,
    상기 송신기에 의해 전송된 후 및 데이터 유닛이 처리 코어들 중 다른 하나 이상에 의해 처리되기 전에 프로세서의 메모리 회로에 의해 큐잉되는 것을 특징으로 하는 컴퓨팅 시스템.
  19. 제12항 내지 제18항 중 적어도 하나에 있어서,
    상기 이미지 프로세서는 2 차원 시프트 레지스터 어레이에 연결된 실행 레인의 어레이를 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  20. 제12항 내지 제19항 중 적어도 하나에 있어서,
    상기 이미지 프로세서는 이미지 데이터의 처리 스텐실을 처리하기 위한 다수의 스텐실 프로세서를 포함하는 것을 특징으로 하는 컴퓨팅 시스템.
  21. 제20항의 컴퓨팅 시스템은 중첩 스텐실에서 동작하도록 구성되는 것을 특징으로 하는 컴퓨팅 시스템.
  22. 제12항 내지 제21항 중 적어도 하나에 있어서,
    실행 레인 어레이 외부에 레지스터들의 "할로(halo)"가 존재하도록 실행 레인 어레이보다 더 넓은 치수를 갖는 시프트 레지스터 구조를 갖는 데이터 계산 유닛을 포함하거나 연결되는 것을 특징으로 하는 컴퓨팅 시스템.
  23. 프로세서에 의해 수행되는 방법으로서,
    처리 코어의 출력 데이터를 생성하기 위해 프로세서의 처리 코어상에서 프로그램 코드를 처리하는 단계와;
    상기 프로세서 내의 네트워크에 연결된 송신기 회로에 의해, 송신기 회로가 이전의 제1 패킷의 전송을 완료하기 전에 제2 패킷에 대한 전송 요청을 전송하는 단계와, 상기 제2 패킷은 처리 코어에 의해 생성된 제2 출력 데이터를 포함하고, 상기 제1 패킷은 처리 코어에 의해 생성된 제1 출력 데이터를 포함하고;
    상기 네트워크에 연결된 프로세서의 하나 이상의 다른 처리 코어로 제1 출력 데이터 및 제2 출력 데이터를 처리하는 단계를 포함하는 것을 특징으로 하는 프로세서에 의해 수행되는 방법.
  24. 제23항에 있어서,
    상기 송신기 회로에 의해 제1 출력 데이터를 전송 한 후 및 하나 이상의 처리 코어에 의해 제1 출력 데이터를 처리하기 전에 제1 출력 데이터를 큐잉하는 단계를 더 포함하는 것을 특징으로 하는 프로세서에 의해 수행되는 방법.
  25. 제23항 또는 제24항에 있어서,
    상기 큐잉 단계는 네트워크에 연결된 버퍼에 의해 이미지 데이터 라인들을 큐잉하는 단계를 포함하는 것을 특징으로 하는 프로세서에 의해 수행되는 방법.
  26. 제23항 내지 제25항 중 적어도 하나에 있어서,
    상기 제1 패킷의 전송에 관여하면서 제2 패킷의 전송에 관여하는 송신기 회로를 더 포함하고, 상기 제2 패킷은 제1 패킷과 다른 목적지로 전송되는 것을 특징으로 하는 프로세서에 의해 수행되는 방법.
  27. 제23항 내지 제26항 중 적어도 하나에 있어서,
    상기 제1 및 제2 패킷이 동일한 목적지로 전송되는 경우 송신기로부터 제1 및 제2 패킷의 전송을 제어하기 위해 동일한 크레딧 카운터를 사용하는 단계를 더 포함하는 것을 특징으로 하는 프로세서에 의해 수행되는 방법.
  28. 제23항 내지 제27항 중 적어도 하나에 있어서,
    상기 송신기로부터 제3 패킷의 전송을 제어하기 위해 동일한 크레딧 카운터를 사용하는 단계를 더 포함하고, 상기 제3 패킷은 제1 및 제2 패킷의 전송이 발생할 때 이외의 시간 기간 동안 제1 및 제2 패킷과는 다른 목적지로 전송되는 것을 특징으로 하는 프로세서에 의해 수행되는 방법.
  29. 제23항 내지 제28항 중 적어도 하나에 있어서,
    상기 이미지 프로세서는 2 차원 시프트 레지스터 어레이에 연결된 실행 레인 어레이를 포함하는 것을 특징으로 하는 프로세서에 의해 수행되는 방법.
  30. 제23항 내지 제29항 중 적어도 하나에 있어서,
    상기 이미지 프로세서는 이미지 데이터의 스텐실을 처리하기 위한 다수의 스텐실 프로세서를 포함하는 것을 특징으로 하는 프로세서에 의해 수행되는 방법.
  31. 제30항의 방법은 중첩 스텐실에서 동작하도록 구성되는 것을 특징으로 하는 프로세서에 의해 수행되는 방법.
  32. 제23항 내지 제31항 중 적어도 하나에 있어서,
    실행 레인 어레이 외부에 레지스터들의 "할로(halo)"가 존재하도록 실행 레인 어레이보다 더 넓은 치수를 갖는 시프트 레지스터 구조를 갖는 데이터 계산 유닛을 포함하거나 연결되는 것을 특징으로 하는 프로세서에 의해 수행되는 방법.
KR1020197031167A 2017-05-15 2018-01-05 고 처리율의 내부 통신 프로토콜을 구비한 이미지 프로세서 KR102284078B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/595,242 US10872393B2 (en) 2017-05-15 2017-05-15 Image processor with high throughput internal communication protocol
US15/595,242 2017-05-15
PCT/US2018/012521 WO2018212793A1 (en) 2017-05-15 2018-01-05 Image processor with high throughput internal communication protocol

Publications (2)

Publication Number Publication Date
KR20190133028A true KR20190133028A (ko) 2019-11-29
KR102284078B1 KR102284078B1 (ko) 2021-07-30

Family

ID=61094589

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020197031167A KR102284078B1 (ko) 2017-05-15 2018-01-05 고 처리율의 내부 통신 프로토콜을 구비한 이미지 프로세서

Country Status (7)

Country Link
US (1) US10872393B2 (ko)
EP (1) EP3625755A1 (ko)
JP (1) JP7073403B2 (ko)
KR (1) KR102284078B1 (ko)
CN (1) CN110574068B (ko)
TW (1) TWI718359B (ko)
WO (1) WO2018212793A1 (ko)

Families Citing this family (1)

* 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

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101312905B1 (ko) * 2004-04-29 2013-09-30 마이크로소프트 코포레이션 네트워크 증폭 공격 완화 방법
US20150067433A1 (en) * 2013-09-03 2015-03-05 Mahesh Wagh Reducing Latency OF Unified Memory Transactions

Family Cites Families (17)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11203192A (ja) * 1998-01-16 1999-07-30 Sony Corp 並列プロセッサおよび演算処理方法
US7453878B1 (en) * 2000-07-21 2008-11-18 Silicon Graphics, Inc. System and method for ordering of data transferred over multiple channels
US7478811B2 (en) 2004-08-02 2009-01-20 Garrett Johnson Wave driven gaming apparatus
US7793074B1 (en) * 2006-04-14 2010-09-07 Tilera Corporation Directing data in a parallel processing environment
WO2008005629A2 (en) * 2006-05-26 2008-01-10 Riverbed Technology, Inc. Throttling of predictive acks in an accelerated network communication system
US8478834B2 (en) * 2007-07-12 2013-07-02 International Business Machines Corporation Low latency, high bandwidth data communications between compute nodes in a parallel computer
JP5316131B2 (ja) 2009-03-18 2013-10-16 株式会社リコー データ転送システム及びデータ転送方法
JP2010218415A (ja) 2009-03-18 2010-09-30 Olympus Corp ハードウエアスイッチ及び分散処理システム
US8700877B2 (en) 2009-09-25 2014-04-15 Nvidia Corporation Address mapping for a parallel thread processor
US20110249744A1 (en) * 2010-04-12 2011-10-13 Neil Bailey Method and System for Video Processing Utilizing N Scalar Cores and a Single Vector Core
US9021237B2 (en) * 2011-12-20 2015-04-28 International Business Machines Corporation Low latency variable transfer network communicating variable written to source processing core variable register allocated to destination thread to destination processing core variable register allocated to source thread
JP5966561B2 (ja) * 2012-04-20 2016-08-10 富士通株式会社 通信装置および通信方法
US20160188519A1 (en) * 2014-12-27 2016-06-30 Intel Corporation Method, apparatus, system for embedded stream lanes in a high-performance interconnect
US9965824B2 (en) 2015-04-23 2018-05-08 Google Llc Architecture for high performance, power efficient, programmable image processing
US9792044B2 (en) * 2016-02-12 2017-10-17 Oracle International Corporation Decompression history buffer read/write pipelines
US10437616B2 (en) * 2016-12-31 2019-10-08 Intel Corporation Method, apparatus, system for optimized work submission to an accelerator work queue
US10764209B2 (en) * 2017-03-28 2020-09-01 Mellanox Technologies Tlv Ltd. Providing a snapshot of buffer content in a network element using egress mirroring

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101312905B1 (ko) * 2004-04-29 2013-09-30 마이크로소프트 코포레이션 네트워크 증폭 공격 완화 방법
US20150067433A1 (en) * 2013-09-03 2015-03-05 Mahesh Wagh Reducing Latency OF Unified Memory Transactions

Also Published As

Publication number Publication date
CN110574068A (zh) 2019-12-13
JP2020519996A (ja) 2020-07-02
EP3625755A1 (en) 2020-03-25
WO2018212793A1 (en) 2018-11-22
US20180330465A1 (en) 2018-11-15
TW201901609A (zh) 2019-01-01
US10872393B2 (en) 2020-12-22
KR102284078B1 (ko) 2021-07-30
TWI718359B (zh) 2021-02-11
JP7073403B2 (ja) 2022-05-23
CN110574068B (zh) 2023-06-27

Similar Documents

Publication Publication Date Title
CN110300989B (zh) 可配置并且可编程的图像处理器单元
US11153464B2 (en) Two dimensional shift array for image processor
JP6571790B2 (ja) 高性能で、電力効率の良い、プログラマブルな画像処理のためのアーキテクチャ
JP2019507922A (ja) 画像プロセッサのためのコンパイラ管理メモリ
US10685423B2 (en) Determination of per line buffer unit memory allocation
US10998070B2 (en) Shift register with reduced wiring complexity
JP2019526849A (ja) 二次元画像プロセッサ上での統計演算
US10489199B2 (en) Program code transformations to improve image processor runtime efficiency
US11030005B2 (en) Configuration of application software on multi-core image processor
KR102284078B1 (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
GRNT Written decision to grant