KR101639852B1 - 그래픽 프로세싱을 위한 픽셀 값 압축 - Google Patents

그래픽 프로세싱을 위한 픽셀 값 압축 Download PDF

Info

Publication number
KR101639852B1
KR101639852B1 KR1020137030011A KR20137030011A KR101639852B1 KR 101639852 B1 KR101639852 B1 KR 101639852B1 KR 1020137030011 A KR1020137030011 A KR 1020137030011A KR 20137030011 A KR20137030011 A KR 20137030011A KR 101639852 B1 KR101639852 B1 KR 101639852B1
Authority
KR
South Korea
Prior art keywords
pixels
gpu
pixel values
buffer
processing unit
Prior art date
Application number
KR1020137030011A
Other languages
English (en)
Other versions
KR20140006061A (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 KR20140006061A publication Critical patent/KR20140006061A/ko
Application granted granted Critical
Publication of KR101639852B1 publication Critical patent/KR101639852B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformations in the plane of the image
    • G06T3/40Scaling of whole images or parts thereof, e.g. expanding or contracting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0038System on Chip

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Graphics (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Image Input (AREA)

Abstract

일반적으로, 본 개시물의 양태들은 가변 데이터 레이트 프로세싱을 위해 그래픽 프로세싱 유닛 (GPU) 의 고정된 데이터 레이트 프로세싱의 효율적인 사용을 위한 예의 기법들을 설명한다. 예를 들어, GPU 는 GPU 에 의해 프로세싱된 이미지 내의 픽셀들에 대한 픽셀 값들을 수신하는 픽셀 값 프로세싱 유닛에 커플링될 수도 있다. 픽셀 값 프로세싱 유닛은, 픽셀 값들이 추가 프로세싱을 요구하는 픽셀들에 대한 것인지 여부를 결정하고, 버퍼에 추가 프로세싱이 요구되는 픽셀들에 대한 픽셀 값들을 저장할 수도 있다.

Description

그래픽 프로세싱을 위한 픽셀 값 압축{PIXEL VALUE COMPACTION FOR GRAPHICS PROCESSING}
본 개시물은 픽셀 값들의 효율적인 저장에 관한 것으로, 보다 구체적으로, 그래픽 프로세싱 유닛 (GPU) 에서의 프로세싱을 위한 픽셀 값들의 효율적인 저장에 관한 것이다.
그래픽 프로세싱 유닛 (graphics processing unit; GPU) 은 그래픽 애플리케이션들을 위해 픽셀 프로세싱을 제공한다. 일부 예들에서, GPU 는 병렬 프로세싱 동작들을 지원하도록 구성될 수도 있다. GPU 는 스크린 상의 디스플레이를 위해 픽셀들의 직사각형 그리드를 발생할 수도 있다. GPU 는 스크린 상에 디스플레이될 픽셀들에 대한 픽셀 값들을 발생하기 위해 셰이딩 (shading), 컬링 (culling), 블렌딩 (blending), 일루미네이팅 (illuminating) 등등과 같은 기능들을 수행할 수도 있다. GPU 에 의한 병렬 프로세싱은 디스플레이될 픽셀들의 퀵 렌더링 (quick rendering) 을 위해 효율적인 프로세싱을 조장할 수도 있다.
본 개시물은 GPU 에 의해 이용되는 버퍼에서의 효율적인 프로세싱 및 효율적인 저장을 위해 데이터를 압축하기 위한 기법들을 설명한다. 버퍼는 2 개의 예들로서, 프레임 버퍼 또는 디스플레이 버퍼일 수도 있다. 그래픽 프로세싱 유닛 (GPU) 은 버퍼로의 출력을 위한 픽셀 값들의 출력 스트림을 발생하여 스크린을 구동하거나 또는 하나 이상의 이미지 기반 컴퓨팅 애플리케이션들을 지원할 수도 있다. 출력 스트림은 GPU 에 의한 후속 프로세싱에 필요할 수도 있는 픽셀들에 대한 픽셀 값은 물론, GPU 에 의한 후속 프로세싱에 필요하지 않은 픽셀들에 대한 픽셀 값들을 포함할 수도 있다.
일부 예들에서, 픽셀 값 프로세싱 유닛은 GPU 로부터 출력 스트림을 수신할 수도 있다. 픽셀 값 프로세싱 유닛은 버퍼에 후속 프로세싱에 필요할 수도 있는 픽셀들에 대한 픽셀 값들을 효율적으로 저장하도록 구성될 수도 있다. 픽셀 값 프로세싱 유닛은 버퍼에 후속 프로세싱에 필요하지 않을 수도 있는 픽셀들에 대한 픽셀 값들을 저장하지 않도록 구성될 수도 있다.
더 상세히 설명한 바와 같이, 픽셀 값 프로세싱 유닛은 고정된 데이터 레이트 프로세싱을 위해 구성된 GPU 가 가변 데이터 레이트 프로세싱을 위해 그 고정된 데이터 레이트 프로세싱을 효율적으로 이용하는 것을 허용할 수도 있다. 그러나, 본 개시물의 양태들은 단지 GPU들을 고정된 데이터 레이트 프로세싱하는 것에 제한되는 것으로 간주되지 않아야 한다.
하나의 예에서, 본 개시물은, 그래픽 프로세싱 유닛 (GPU) 에 커플링되고 GPU 의 외부에 있는 픽셀 값 프로세싱 유닛에 의해, GPU 로부터, GPU 에 의해 프로세싱된 이미지 내의 하나 이상의 픽셀들에 대한 픽셀 값들을 포함하는 출력 스트림을 수신하는 단계를 포함하는 방법을 설명한다. 이 방법은 또한, 픽셀 값 프로세싱 유닛에 의해, 출력 스트림 내의 픽셀 값들이 GPU 에 의한 추가 프로세싱을 요구하는 픽셀들에 대한 것인지 여부를 결정하는 단계를 포함한다. 이 방법은, 픽셀 값 프로세싱 유닛의 외부에 있고 픽셀 값 프로세싱 유닛에 커플링되는 버퍼에, GPU 에 의한 추가 프로세싱을 요구하는 픽셀들에 대한 픽셀 값들을 저장하는 단계를 더 포함한다.
다른 예에서, 본 개시물은, 이미지를 프로세싱하여 프로세싱된 이미지 내의 하나 이상의 픽셀들에 대한 픽셀 값들을 포함하는 출력 스트림을 발생하도록 구성된 그래픽 프로세싱 유닛 (GPU), 및 버퍼를 포함하는 장치를 설명한다. 이 장치는 또한, GPU 의 외부에 있고, GPU 및 버퍼에 커플링되며, 출력 스트림 내의 픽셀 값들이 GPU 에 의한 추가 프로세싱을 요구하는 픽셀들에 대한 것인지 여부를 결정하고, 버퍼에 GPU 에 의한 추가 프로세싱을 요구하는 픽셀들에 대한 픽셀 값들을 저장하도록 구성된 픽셀 값 프로세싱 유닛을 포함한다.
다른 예에서, 본 개시물은 그래픽 프로세싱 유닛 (GPU), 버퍼, 및 GPU 의 외부에 있고 GPU 및 버퍼에 커플링되는 픽셀 값 프로세싱 유닛을 포함하는 장치를 설명한다. 픽셀 값 프로세싱 유닛은 GPU 로부터, GPU 에 의해 프로세싱된 이미지 내의 하나 이상의 픽셀들에 대한 픽셀 값들을 포함하는 출력 스트림을 수신하는 수단, 출력 스트림 내의 픽셀 값들이 GPU 에 의한 추가 프로세싱을 요구하는 픽셀들에 대한 것인지 여부를 결정하는 수단, 및 버퍼에, GPU 에 의한 추가 프로세싱을 요구하는 픽셀들에 대한 픽셀 값들을 저장하는 수단을 포함한다.
다른 예에서, 본 개시물은, 픽셀 값 프로세싱 유닛으로 하여금, 그래픽 프로세싱 유닛 (GPU) 에 커플링되고 GPU 의 외부에 있는 픽셀 값 프로세싱 유닛에 의해, GPU 로부터, GPU 에 의해 프로세싱된 이미지 내의 하나 이상의 픽셀들에 대한 픽셀 값들을 포함하는 출력 스트림을 수신하도록 하는 명령들을 포함하는 비일시적 컴퓨터 판독가능 저장 매체를 설명한다. 명령들은 또한, 픽셀 값 프로세싱 유닛으로 하여금, 출력 스트림 내의 픽셀 값들이 추가 프로세싱을 요구하는 픽셀들에 대한 것인지 여부를 결정하도록 하고, 픽셀 값 프로세싱 유닛 및 GPU 의 외부에 있고 픽셀 값 프로세싱 유닛에 커플링되는 버퍼에, 추가 프로세싱을 요구하는 픽셀들에 대한 픽셀 값들을 저장하도록 한다.
하나 이상의 예들의 상세들은 이하의 설명 및 첨부 도면들에서 기술된다. 다른 특징들, 목적들, 및 이점들은 설명 및 도면들로부터, 그리고 특허청구항들로부터 명백해질 것이다.
도 1 은 픽셀 값 저장 시스템에서의 그래픽 프로세싱 유닛 (GPU) 을 예시하는 블록도이다.
도 2a 는 추가 상세로 도 1 의 그래픽 프로세싱 유닛 (GPU) 의 하나의 예를 예시하는 블록도이다.
도 2b 는 추가 상세로 도 1 의 그래픽 프로세싱 유닛 (GPU) 의 다른 예를 예시하는 블록도이다.
도 3 은 추가 상세로 도 1 의 픽셀 값 프로세싱 유닛의 일 예를 예시하는 블록도이다.
도 4a 는 버퍼에 저장될 이미지 내의 픽셀들을 예시하는 그래픽도이다.
도 4b, 도 4c, 및 도 4d 는 도 1 의 버퍼의 하나의 예의 저장 로케이션들에 저장된 픽셀 값들을 예시하는 그래픽도들이다.
도 5 는 본 개시물의 양태들을 구현하도록 구성될 수도 있는 디바이스를 예시하는 블록도이다.
도 6 은 픽셀 값 프로세싱 유닛의 일 예의 동작을 예시하는 플로우차트이다.
도 7 은 픽셀 값 프로세싱 유닛의 다른 예의 동작을 예시하는 플로우차트이다.
도 8 은 픽셀 값 프로세싱 유닛의 다른 예의 동작을 예시하는 플로우차트이다.
본 개시물의 양태들은 주로 고정된 데이터 레이트 프로세싱을 위해 설계될 수도 있는 그래픽 프로세싱 유닛 (GPU) 상에서의 가변 데이터 레이트 프로세싱을 간소화하기 위한 기법들과 관련된다. 그래픽 애플리케이션은 스크린 상의 디스플레이를 위해 픽셀들의 직사각형 그리드인 이미지로 표현된 시각적 콘텐츠 (visual content) 를 생성한다. 스크린 상에 디스플레이될 픽셀들의 수는 비교적 클 수도 있으며, 하나의 예에서, 예를 들어, 640×480, 또는 307,200 픽셀들일 수도 있다.
GPU 는 픽셀들의 대부분 또는 모두가 프로세싱될 것이고 이러한 픽셀들이 만약 동일하지 않다면, 유사한 동작들을 요구하는 것을 가정하여 다중 레벨들의 병렬 프로세싱을 이용하여 이러한 큰 수의 픽셀들을 효율적으로 프로세싱하도록 설계될 수도 있다. 본 개시물에서 사용한 바와 같이, 어구 "고정된 데이터 레이트 프로세싱 (fixed data rate processing)" 은 일반적으로 스크린 상에 디스플레이될 이미지 내의 픽셀들의 모두 또는 대부분의 GPU 프로세싱과 관련 있을 수도 있다. 예를 들어, 이미지가 스크린을 둘러싸고 스크린이 640×480 픽셀들, 즉, 307,200 픽셀들을 포함하는 것을 가정한다. 이 예에서, GPU 는 640×480 픽셀들을 포함하는 스크린 상의 모든 307,200 픽셀들에 대한 픽셀 값들을 프로세싱해야 할 것이다.
더 상세히 설명한 바와 같이, 일부 그래픽 애플리케이션들의 경우, GPU 는 이미지 내의 픽셀들 모두를 프로세싱할 필요가 없을 수도 있고, 단지 선택한 몇몇 픽셀들만을 프로세싱해야 할 수도 있다. 본 개시물에서 사용한 바와 같이, 어구 "가변 데이터 레이트 프로세싱 (variable data rate processing)" 은 일반적으로 픽셀들 모두 대신에, 이미지 내의 선택한 몇몇 픽셀들의 프로세싱을 요구하는 GPU 프로세싱과 관련 있을 수도 있다. 예를 들어, 일부 그래픽 애플리케이션들의 경우, GPU 는 처음에 이미지 내의 픽셀들의 모두 또는 대부분을 프로세싱해야 할 수도 있다. 그 후, 후속 프로세싱 패스 (pass) 들을 위해, GPU 는 이미지 내의 선택한 몇몇 픽셀들을 프로세싱해야 할 수도 있다.
GPU 의 병렬 프로세싱 기능성은, 대개의 경우에는, GPU 가 이미지 내의 픽셀들 모두를 프로세싱할 수도 있기 때문에 고정된 데이터 레이트 프로세싱에 매우 적합할 수도 있다. 즉, 고정된 데이터 레이트 프로세싱은, GPU 가 프로세싱할 픽셀들의 수가 일반적으로는 각각의 프로세싱 패스에서 고정되는 경우들로서 간주될 수도 있다. 따라서, GPU 는 고정된 데이터 레이트 프로세싱을 위해 설계될 수도 있다. 그러나, 이러한 고정된 데이터 레이트 프로세싱은, 이미지 내의 픽셀들 모두가 아닌, 이미지 내의 픽셀들의 선택한 몇몇이 프로세싱될 때 효율적인 프로세싱을 조장하지 않을 수도 있다. 예를 들어, 특정 그래픽 애플리케이션의 경우, 307,200 픽셀들 중 단지 3,072 픽셀들만이 프로세싱되어야 한다는 것을 가정한다. 이 예에서는, 고정된 데이터 레이트 프로세싱으로 인해, GPU 는 선택한 몇몇 픽셀들, 예를 들어, 3,702 픽셀들이 아닌, 307,200 픽셀들 모두를 프로세싱할 수도 있다.
본 개시물은 예를 들어, 가변 데이터 레이트 프로세싱을 제공하기 위해, 단지 선택한 몇몇 픽셀들 (즉, 이미지 내의 모든 픽셀들보다 적은 픽셀들의 서브세트) 만이 프로세싱되어야 하는 경우라도 GPU 가 그 고정된 데이터 레이트 프로세싱 구조 및 기능성을 효율적으로 이용하는 것을 허용할 수도 있는 픽셀 값 프로세싱 유닛을 설명한다. 픽셀 값 프로세싱 유닛은 픽셀 값 압축 유닛으로 지칭될 수도 있다. 픽셀 값 압축 유닛, 예를 들어, 픽셀 값 프로세싱 유닛은 GPU 에 커플링될 수도 있고, GPU 로부터 출력 데이터 스트림을 수신할 수도 있다. GPU 로부터의 출력 데이터 스트림은 추가 프로세싱을 요구할 수도 있는 픽셀들에 대한 픽셀 값들을 포함할 수도 있고, 추가 프로세싱을 요구하지 않을 수도 있는 픽셀들에 대한 픽셀 값들을 포함할 수도 있다. 추가 프로세싱을 요구하지 않을 수도 있는 픽셀들에 대한 픽셀 값들은, 이하 설명한 바와 같이 GPU 가 공간 불변 특징 변환 (Spatial Invariant Feature Transform; SIFT) 을 구현할 때 하나의 예로서, 널 값 (null value) 들일 수도 있다.
픽셀 값 압축 유닛은 픽셀 값들이 추가 프로세싱을 요구할 수도 있는 픽셀들에 대한 것인지, 그리고 픽셀 값들이 추가 프로세싱을 요구하지 않을 수도 있는 픽셀들에 대한 것인지를 결정할 수도 있다. 예를 들어, 픽셀 값 압축 유닛은 픽셀 값들이 추가 프로세싱을 요구할 수도 있는 픽셀들에 대한 것인지, 그리고 픽셀 값들이 추가 프로세싱을 요구하지 않을 수도 있는 픽셀들에 대한 것인지를 결정하기 위해 컬러 값들 또는 좌표 값들을 평가할 수도 있다. 그 결정에 기초하여, 픽셀 값 압축 유닛은 2 개의 예들로서 프레임 버퍼 또는 디스플레이 버퍼와 같은 버퍼 내에 추가 프로세싱이 요구될 수도 있는 픽셀들에 대한 픽셀 값들을 저장할 수도 있고, 프레임 버퍼 또는 디스플레이 버퍼 내에 추가 프로세싱이 요구되지 않을 수도 있는 픽셀들에 대한 픽셀 값들을 저장하지 않을 수도 있다. 예를 들어, 픽셀 값 압축 유닛은, 버퍼에, GPU 에 의한 추가 프로세싱을 요구하는 픽셀들에 대한 픽셀 값들을 저장하고, GPU 에 의한 추가 프로세싱을 요구하지 않는 픽셀들을 폐기할 수도 있다.
GPU 는 그 후 추가 프로세싱을 요구하지 않는 픽셀들에 대한 픽셀 값들을 포함하는 픽셀 값들 모두가 아닌 추가 프로세싱을 요구하는 픽셀들에 대한 픽셀 값들을 취출할 수도 있다. 이 방식으로, GPU 는 추가 프로세싱을 요구하지 않는 픽셀들의 프로세싱에 대해 컴퓨테이션 리소스들을 낭비하지 않고 추가 프로세싱을 요구하는 픽셀들을 프로세싱할 수도 있다. 즉, 픽셀 값 압축 유닛은 GPU 가 프로세싱해야 하는 픽셀들의 수를 동적으로 감소시키기 때문에, GPU 는 픽셀들 모두에 대한 픽셀 값들이 아닌, 선택한 몇몇 픽셀들에 대한 픽셀 값들에 대해 그 고정된 데이터 레이트 프로세싱을 이용할 수도 있다.
도 1 은 픽셀 값 저장 시스템 (10) 에서의 그래픽 프로세싱 유닛 (GPU) (12) 을 예시하는 블록도이다. 픽셀 값 저장 시스템 (10) 은 도 6 에 더 상세히 예시한 바와 같이, 디바이스의 일부일 수도 있다. 픽셀 값 저장 시스템 (10) 은 GPU (12), 픽셀 값 프로세싱 유닛 (16), 및 버퍼 (18) 를 포함할 수도 있다. 픽셀 값 프로세싱 유닛 (16) 은 픽셀 값 압축 유닛으로 지칭될 수도 있다. 버퍼 (18) 의 예들은, 프레임 버퍼 및 디스플레이 버퍼를 포함하지만, 이들에 제한되지는 않는다.
GPU (12) 는 스크린 상의 이미지들을 렌더링하도록 구성될 수도 있다. 예를 들어, 프로세서 (미도시) 는 스크린 상에 디스플레이될 이미지를 발생하는 그래픽 애플리케이션을 실행할 수도 있다. 이미지는 복수의 픽셀들을 포함할 수도 있다. 프로세서는 이미지를 복수의 다각형들로 분할하고 그 다각형들의 정점들에 대한 좌표들을 결정할 수도 있다. 프로세서는 또한, 루미넌스 값들, 컬러 값들, 또는 다각형들에 대한 다른 이러한 픽셀 값들과 같은 정점들에 대한 다양한 다른 속성들을 결정할 수도 있다.
GPU (12) 는 이미지 내의 픽셀들에 대한 픽셀 값들을 수신하고 그 픽셀 값들을 프로세싱하여 스크린 상의 이미지를 렌더링할 수도 있다. GPU (12) 의 예들은 디지털 신호 프로세서 (DSP), 범용 마이크로프로세서, 주문형 집적 회로 (ASIC), 필드 프로그램가능 로직 어레이 (FPGA), 또는 다른 등가의 통합된 또는 별개의 로직 회로를 포함하지만, 이들에 제한되지는 않는다. 일부 예들에서, GPU (12) 는 픽셀 값들을 이용하여 이미지를 렌더링하는 그래픽 파이프라인 (graphics pipeline) 을 구현할 수도 있다. 그래픽 파이프라인은 GPU (12) 상에서 실행하는 소프트웨어, GPU (12) 상에서 실행하는 펌웨어, GPU (12) 상에 형성된 하나 이상의 하드웨어 유닛들, 또는 이들의 조합으로서 구현될 수도 있다.
그래픽 파이프라인은 다중 컴포넌트들을 포함할 수도 있다. 예를 들어, GPU (12) 의 그래픽 파이프라인은, 정점 데이터를 취출하고 그 정점들의 좌표들을 다른 좌표계로 변환하고, 정점들에 대한 라이트 값 (light value) 들을 계산하는 정점 셰이더 (vertex shader) 를 포함할 수도 있다. GPU (12) 의 그래픽 파이프라인은 또한, 다각형 내의 픽셀들의 깊이 (z) 를 결정하는 프리미티브 어셈블러 (primitive assembler) 를 포함할 수도 있다. GPU (12) 의 그래픽 파이프라인은 또한, 다각형들 내의 픽셀들을 그 픽셀들이 후속하여 다른 픽셀들에 의해 차단된다면 추가 프로세싱으로부터 제거하는 조기 깊이 테스트 엔진 (early depth test engine) 을 포함할 수도 있다. GPU (12) 의 그래픽 파이프라인은 또한, 다각형의 정점들에 대한 컬러 값들에 기초하여 다각형 내의 픽셀들에 대한 컬러 값들을 보간하는 픽셀 셰이더 (pixel shader) 를 포함할 수도 있다.
그래픽 파이프라인의 다양한 컴포넌트들은 예시를 목적으로 제공되며, 제한하는 것으로 간주되지 않아야 한다. 대안의 예들에서, 그래픽 파이프라인은 상기 설명된 것들보다 더 많은 컴포넌트들을 포함할 수도 있다. 그래픽 파이프라인은 또한 상기 설명된 것들보다 더 적은 컴포넌트들을 포함할 수도 있다. GPU (12) 의 예들은 도 2a 및 도 2b 에서 추가 상세로 예시된다.
GPU (12) 는 그 병렬 프로세싱으로 상기 예의 기능들을 수행가능할 수도 있다. 일부 경우들에서는, 비교적 큰 수의 픽셀들일 수도 있는 이미지 내의 픽셀들의 모두 또는 대부분은 프로세싱되어야 하며, 병렬 프로세싱은 GPU (12) 가 그 픽셀들을 빨리 그리고 효율적으로 프로세싱하는 것을 허용할 수도 있다. GPU (12) 가 이미지 내의 픽셀들의 모두 또는 대부분을 프로세싱하는 예들은, 이미지 내의 프로세싱될 픽셀들의 수가 일반적으로 고정될 수도 있기 때문에 "고정된 데이터 레이트 프로세싱" 으로 지칭될 수도 있다. 대부분의 그래픽 애플리케이션들은 이미지 내의 픽셀들의 모두 또는 대부분을 프로세싱할 것을 GPU (12) 에 요구하기 때문에, GPU (12) 는 고정된 데이터 레이트 프로세싱을 구현하도록 설계될 수도 있다.
그러나, 일부 그래픽 애플리케이션들의 경우, GPU (12) 는 이미지 내의 픽셀들의 모두 또는 대부분을 프로세싱할 필요가 없을 수도 있다. 이들 그래픽 애플리케이션들의 경우에는, GPU (12) 는 이미지 내의 선택한 몇몇 픽셀들을 프로세싱해야 할 수도 있다. GPU (12) 가 이미지 내의 선택한 몇몇 픽셀들을 프로세싱하는 예들은, 프로세싱될 픽셀들의 수가 고정되지 않고 가변할 수도 있기 때문에 "가변 데이터 레이트 프로세싱" 으로 지칭될 수도 있다. GPU (12) 의 고정된 데이터 레이트 프로세싱 본질로 인해, GPU (12) 는 가변 데이터 레이트 프로세싱에서 효율적이지 않을 수도 있다. 예를 들어, GPU (12) 는 그것만으로, 이미지 내의 선택한 몇몇 픽셀들이 프로세싱되어야 하는 경우라도 이미지 내의 픽셀들 모두를 프로세싱할 수도 있다. 따라서, 이미지 내의 픽셀들의 모두 또는 대부분에 대해 프로세싱을 요구하지 않고, 선택한 몇몇 픽셀들에 대해 프로세싱을 요구하는 그래픽 애플리케이션의 경우, GPU (12) 는 그것만으로, 이러한 그래픽 애플리케이션을 위해 픽셀들을 프로세싱하는데 있어서 효율적이지 않을 수도 있다.
예를 들어, D 개의 픽셀들이 있고, 각각의 픽셀이 A 개의 프로세싱 사이클들을 요구한다면, 고정된 레이트 프로세싱 방식에 따라 GPU (12) 에 의해 수행된 픽셀-사이클들의 총 수는 A*D 로서 표현될 수도 있다. D 개의 픽셀들의 대략 1% 가 추가 프로세싱을 요구하고, 이들 픽셀들 각각이 B 개의 프로세싱 사이클들을 요구한다면, GPU (12) 의 효율 손실은 (0.01+1.01*(B/A)) 로서 표현될 수도 있다. 이 효율 손실은, GPU (12) 가 추가 프로세싱을 요구하는 그 픽셀들만을 프로세싱한 경우의 GPU (12) 의 효율과 비교한, GPU (12) 가 픽셀들 모두를 프로세싱한 경우의 GPU (12) 의 효율의 비교이다. D 개의 픽셀들의 1% 가 이미지 내에 랜덤으로 그리고 예비로 위치된다면, GPU (12) 의 효율 손실은 추가 증폭될 수도 있다.
상기 나타낸 바와 같이 픽셀 값 압축 유닛으로 지칭될 수도 있는 픽셀 값 프로세싱 유닛 (16) 은, 단지 선택한 몇몇 픽셀들만이 프로세싱되어야 하는 경우라도 GPU (12) 가 그 고정된 데이터 레이트 프로세싱을 효율적으로 이용하는 것을 허용할 수도 있으며, 이로써 가변 데이터 레이트 프로세싱을 지원할 수도 있다. 픽셀 값 프로세싱 유닛 (16) 은 고정된-기능 하드웨어 유닛일 수도 있다. 픽셀 값 프로세싱 유닛 (16) 은 GPU (12) 에 커플링될 수도 있고, GPU (12) 로부터 출력 스트림 (14) 을 수신할 수도 있다. 출력 스트림 (14) 은 단지 추가 프로세싱을 요구하는 픽셀들에 대한 픽셀 값들, 또는 추가 프로세싱을 요구하는 픽셀들과 추가 프로세싱을 요구하지 않는 픽셀들 양자에 대한 픽셀 값들을 포함할 수도 있다.
픽셀 값 프로세싱 유닛 (16) 은 출력 스트림 (14) 내의 픽셀 값들이 추가 프로세싱을 요구하는 픽셀들에 대한 픽셀 값들인지, 그리고 출력 스트림 (14) 내의 픽셀 값들이 추가 프로세싱을 요구하지 않는 픽셀들에 대한 픽셀 값들인지를 결정할 수도 있다. 일부 예들에서, 픽셀 값 프로세싱 유닛 (16) 은 버퍼 (18) 에 추가 프로세싱을 요구하는 픽셀들에 대한 픽셀 값들을 저장할 수도 있고, 버퍼 (18) 에 추가 프로세싱을 요구하지 않는 픽셀들에 대한 픽셀 값들을 저장하지 않을 수도 있다.
버퍼 (18) 는 저장 로케이션들의 2 차원 어레이를 포함할 수도 있다. 일부 예들에서, 버퍼 (18) 내의 저장 로케이션들의 수는 이미지를 디스플레이하는 스크린 상의 픽셀들의 수와 실질적으로 유사할 수도 있다. 예를 들어, 스크린이 640×480 픽셀들을 포함한다면, 버퍼 (18) 는 640×480 저장 로케이션들을 포함할 수도 있다. 그러나, 본 개시물의 예들은 이렇게 제한되지는 않는다. 일부 예들에서, 버퍼 (18) 내의 저장 로케이션들의 수는 스크린 상의 픽셀들의 수보다 더 크거나 또는 더 작을 수도 있다.
일부 예들에서, 픽셀 값 프로세싱 유닛 (16) 은 버퍼 (18) 의 인접한 저장 로케이션들 내에 추가 프로세싱을 요구하는 픽셀들에 대한 픽셀 값들을 저장할 수도 있다. 버퍼 (18) 의 인접한 저장 로케이션들은 인접한 로우들 또는 컬럼들, 또는 인접한 블록들일 수도 있다. 예를 들어, 픽셀 값 프로세싱 유닛 (16) 은 프로세서 (미도시) 로부터 저장 모드 선택을 수신할 수도 있다. 저장 모드 선택은, 픽셀 값 프로세싱 유닛 (16) 이 버퍼 (18) 의 인접한 로우들 또는 컬럼들, 또는 인접한 블록들 내에 추가 프로세싱을 요구하는 픽셀들에 대한 픽셀 값들을 저장해야하는지 여부를 표시할 수도 있다.
GPU (12) 는 추가 프로세싱을 위해 버퍼 (18) 에 저장된 픽셀 값들을 취출할 수도 있다. 예를 들어, 픽셀 값 프로세싱 유닛 (16) 은 GPU (12) 에 버퍼 (18) 에 저장된 픽셀 값들의 수를 표시할 수도 있다. GPU (12) 는, 그 표시에 기초하여, 추가 프로세싱을 위해 버퍼 (18) 에 저장된 픽셀 값들의 수를 취출할 수도 있다. 이 방식으로, GPU (12) 는 추가 프로세싱을 요구하지 않는 픽셀들에 대한 픽셀 값들을 불필요하게 프로세싱하지 않을 수도 있고, 추가 프로세싱을 요구하는 픽셀들에 대한 선택한 몇몇 픽셀 값들을 프로세싱할 수도 있다.
예시를 목적으로, 다음은 이해의 용이함을 위해 제공된 픽셀 값 저장 시스템 (10) 의 일 예의 구현이다. 그러나, 본 개시물의 양태들은 다음의 예에 제한되는 것으로 간주되지 않아야 한다.
일부 예들에서, GPU (12) 는 소위 시각적 검색을 지원하는 이미지 기반 컴퓨팅 애플리케이션과 같은 이미지 인식 애플리케이션에서 이용될 수도 있다. 예를 들어, GPU (12) 는 모바일 디바이스의 일부일 수도 있다. GPU (12) 는 이미지, 이를 테면 제품 (product) 의 이미지를 수신하고, 특징 디스크립터 (feature descriptor) 들로 지칭된, 이미지의 특징들을 추출할 수도 있다. 모바일 디바이스는 특징 디스크립터들을 네트워크를 통해 하나 이상의 서버들에 송신할 수도 있다. 하나 이상의 서버들은 특징 디스크립터들을 데이터베이스 내의 이미지들의 특징들과 비교할 수도 있다. 그 비교에 기초하여, 하나 이상의 서버들은 매칭 이미지의 에스티메이션 (estimation) 을 송신하고, 이미지로 디스플레이된 콘텐츠들에 대해, 네트워크 링크, 이를 테면 웹 페이지를 송신하거나, 또는 다른 적절한 정보를 송신할 수도 있다. 대안의 예에서는, 서버가 아닌 모바일 디바이스가 매칭 이미지의 에스티메이션을 발견하기 위해 특징 디스크립터들을 다운로드된 데이터베이스 내의 이미지들의 특징들과 비교할 수도 있다.
이미지의 특징들을 추출하기 위해, GPU (12) 는 스케일 불변 특징 변환 (Scale Invariant Feature Transform; SIFT) 을 구현할 수도 있다. SIFT 는 스케일 스테이지, 키포인트 픽셀 로케이션 스테이지, 및 키포인트 픽셀 디스크립터 스테이지를 포함하는 3 개의 스테이지들을 포함한다. 일반적으로, SIFT 는 이미지의 특징들을 식별하는 것, 및 이미지 인식에 사용되는 식별된 특징들에 대한 특징 디스크립터들을 발생하는 것을 포함한다. 식별된 특징들은 이미지 내의 관심 포인트들일 수도 있다. 식별된 특징들은 이하 더 상세히 설명되는 바와 같이 키포인트 픽셀들에 대응할 수도 있다.
스케일 스테이지 및 키포인트 픽셀 로케이션 스테이지에서, GPU (12) 는 키포인트 픽셀들을 식별하기 위해 이미지 내의 어느 픽셀이나 프로세싱하는 것으로 시작할 수도 있다. 이들 스테이지들에 대해, GPU (12) 의 고정된 데이터 레이트 프로세싱은 효율적인 픽셀 프로세싱을 조장할 수도 있다. 그 후, 키포인트 픽셀 디스크립터 스테이지에 대해, GPU (12) 는 이미지 내의 모든 픽셀을 프로세싱할 필요가 없을 수도 있다. 오히려, GPU (12) 는 SIFT 에 대한 키포인트 특징 디스크립터들을 정의하기 위해 이미지 내의 선택한 몇몇 픽셀들을 프로세싱해야 할 수도 있다. 더 상세히 설명한 바와 같이, 픽셀 값 프로세싱 유닛 (16) 은 버퍼 (18) 에 키포인트 픽셀 디스크립터 스테이지에서의 후속 프로세싱에 필요한 선택한 몇몇 픽셀들에 대한 픽셀 값들을 저장할 수도 있고, 추가 프로세싱을 필요로 하지 않는, 예를 들어 키포인트 픽셀 디스크립터들, 예를 들어, 특징 디스크립터들을 정의하기 위해 추가 프로세싱을 필요로 하지 않는 픽셀들에 대한 픽셀 값들을 저장하지 않을 수도 있다. 이 방식으로, GPU (12) 는 추가적인 프로세싱이 요구되지 않을 수도 있는 픽셀들을 포함하는 픽셀들 모두를 프로세싱하는 대신에, 추가 프로세싱을 요구하고 이미지의 픽셀들 모두보다 적은 이들 선택한 몇몇 픽셀들을 프로세싱할 수도 있다.
SIFT 알고리즘에 따르면, 스케일 스테이지에서, GPU (12) 는 수신된 이미지 내의 픽셀들에 대한 픽셀 값들을 프로세싱하여 이미지에 대한 스케일 공간을 발생할 수도 있다. 스케일 공간은 그 이미지의 다중 프로세싱된 버전들을 포함할 수도 있으며, 여기서 이미지의 각각의 프로세싱된 버전은 스케일된 이미지일 수도 있다. 하나의 예로서, 이미지의 프로세싱된 버전들은 이미지의 필터링된 버전들을 포함할 수도 있다. 예를 들어, GPU (12) 는 6 개의 로우 패스 필터들로 이미지를 필터링할 수도 있으며, 여기서 각각의 필터는 상이한 로우 패스 대역폭을 가진 필터이다. 이미지를 6 개의 로우 패스 필터들로 필터링함으로써, GPU 는 6 개의 로우 패스 피터링된 이미지들, 예를 들어, 로우 패스 필터 이미지 1 내지 로우 패스 필터 이미지 6 을 발생할 수도 있다. 6 개의 로우 패스 필터들의 이용은 예시를 목적으로 제공된다. 대안의 예들에서, GPU (12) 는 6 개의 필터들보다 더 많거나 또는 더 적은 필터들을 이용할 수도 있다.
다른 예로서, 이미지의 프로세싱된 버전들은 이미지의 필터링된 및 공간적으로 다운샘플링된 버전들을 포함할 수도 있다. 예를 들어, GPU (12) 는 또한 일부 예들에서, 6 개의 로우 패스 필터링된 이미지들 각각을 공간적으로 다운샘플링할 수도 있다. 이미지의 공간적 다운샘플링은 이미지 내의 픽셀들의 수를 감소시키기 위해 픽셀들을 블렌딩하는 것을 포함한다. 예를 들어, 2 의 팩터만큼 공간적으로 다운샘플링하기 위해, GPU (12) 는 감소된 해상도로 2 개의 픽셀들을 단일 픽셀 또는 다중 픽셀들로 블렌딩할 수도 있다. 이 방식으로, GPU (12) 는 2 의 팩터만큼 픽셀들의 총 수를 감소시킬 수도 있다.
GPU (12) 가 이미지를 로우 패스 필터링하고 로우 패스 필터링된 이미지를 다운샘플링하는 예들에서, 로우 패스 필터링되고 다운샘플링된 이미지는 스케일링된 이미지로 지칭될 수도 있다. GPU (12) 가 이미지를 로우 패스 필터링하지만 로우 패스 필터링된 이미지를 다운샘플링하지 않는 예들에서, 로우 패스 필터링된 이미지는 스케일링된 이미지로 지칭될 수도 있다. 따라서, 상기 예에서, GPU (12) 는 6 개의 스케일링된 이미지들, 예를 들어, 스케일링된 이미지 1 내지 스케일링된 이미지 6 을 발생할 수도 있다. 스케일링된 이미지들은 이미지의 단지 필터링되거나, 또는 필터링되고 다운샘플링된 버전들에 제한되는 것으로 간주되지 않아야 한다. 일반적으로, GPU (12) 는 다른 프로세싱 기법들을 이용하여 스케일링된 이미지들을 발생할 수도 있다.
SIFT 알고리즘에 따르면, 키포인트 픽셀 로케이션 스테이지에서, GPU (12) 는 스케일링된 이미지들의 쌍들 간의 차이를 결정할 수도 있다. GPU (12) 는 스케일링된 이미지들의 쌍들 간의 차이에 기초하여 차이 이미지 (difference image) 를 발생할 수도 있다. GPU (12) 는, GPU (12) 가 가우시안 차이 기법이 아닌 다른 기법들을 이용할 수도 있지만, 가우시안 차이 기법을 이용하여, 픽셀 단위 기준으로, 스케일링된 이미지들의 쌍들 간의 차이를 결정할 수도 있다. 예를 들어, GPU (12) 는 픽셀 단위 기준으로, 스케일링된 이미지 1 과 스케일링된 이미지 2 간의 가우시안 차이를 결정하여 차이 이미지 1 을 발생할 수도 있다. GPU (12) 는 픽셀 단위 기준으로, 스케일링된 이미지 2 와 스케일링된 이미지 3 간의 가우시안 차이를 결정하여 차이 이미지 2 를 발생할 수도 있으며, 등등이다. 예를 들어, GPU (12) 는 픽셀 단위 기준으로, 스케일링된 이미지 5 와 스케일링된 이미지 6 간의 가우시안 차이를 결정하여 차이 이미지 5 를 발생할 수도 있다.
차이 이미지들, 예를 들어, 차이 이미지들 1 내지 5 에 기초하여, GPU (12) 는 키포인트 픽셀들을 식별할 수도 있다. 하나의 예로서, GPU (12) 는 차이 이미지 1 내의 3×3 픽셀들의 블록 및 차이 이미지들 2 및 3 내의 공동 배치된 블록들을 선택할 수도 있다. GPU (12) 는 그 후 차이 이미지의 하나 내의 픽셀들에 대한 픽셀 값들, 예를 들어, 루미넌스 (루마) 값을 다른 픽셀들 모두의 픽셀 값들과 비교할 수도 있다. 예를 들어, GPU (12) 는 총 26 번의 비교 동안, 차이 이미지 2 의 픽셀들의 3×3 블록 내의 중심 픽셀에 대한 루마 값을 차이 이미지 2 의 픽셀들의 3×3 블록 내의 다른 픽셀들 및 차이 이미지들 1 및 3 내의 공동 배치된 블록들 내의 픽셀들의 루마 값들과 비교할 수도 있다. 중심 픽셀의 루마 값이 최대 값 또는 최소 값이라면, 3×3 블록의 픽셀들 간에, GPU (12) 는 중심 픽셀을 키포인트 픽셀로서 식별할 수도 있다. GPU (12) 는 차이 이미지 2 내의 키포인트 픽셀들을 식별하기 위해 차이 이미지 2 를 가로지른 픽셀들의 다중 3×3 블록에 대해 차이 이미지들 1, 2 및 3 내의 픽셀들 모두에 대한 비교를 반복적으로 수행할 수도 있다.
키포인트 픽셀들은 차이 이미지들 2, 3, 및 4 의 픽셀들 내에 랜덤으로 그리고 드물게 파퓰레이팅되어 위치될 수도 있다. 예를 들어, 차이 이미지들 2, 3, 및 4 내의 키포인트 픽셀들의 수는 차이 이미지들 2, 3, 및 4 내의 픽셀들의 총 수의 작은 비율일 수도 있다. 일부 경우들에서, 차이 이미지들 2, 3, 및 4 의 키포인트 픽셀들은 각각 차이 이미지들 2, 3, 및 4 의 총 픽셀들의 1% 미만을 구성할 수도 있다.
GPU (12) 는 키포인트 픽셀들을 포함하는 차이 이미지들, 예를 들어, 차이 이미지들 2, 3, 및 4 각각에 대한 픽셀 값들의 출력 스트림을 (14) 을 픽셀 값 프로세싱 유닛 (16) 에 송신할 수도 있다. GPU (12) 가 픽셀 값 프로세싱 유닛 (16) 에 송신하는 출력 스트림들 (14) 의 타입들의 예들이 다수 존재할 수도 있다. 일반적으로, GPU (12) 는 출력 스트림 (14) 내의 픽셀 값들이 키포인트 픽셀들에 속한다는 것을 나타내기 위해 임의의 기법을 이용할 수도 있다. 하나의 예로서, 출력 스트림 (14) 은 키포인트 픽셀들에 대한 차이 이미지들 2, 3, 및 4 내의 좌표 값들의 출력 스트림일 수도 있다. 다른 예로서, 출력 스트림 (14) 은 차이 이미지들 2, 3, 및 4 내의 키포인트 픽셀들에 대한, 컬러 값들, 예를 들어, 루마 값들 및/또는 적색-녹색-청색 (RGB) 값들의 출력 스트림일 수도 있다. 이들 예들에서, GPU (12) 는 넌-키포인트 픽셀들에 대한 좌표 값들 또는 컬러 값들을 출력하지 않을 수도 있고, 또는 넌-키포인트 픽셀들에 대한 좌표 값들 또는 컬러 값들에 대해 널 값을 출력할 수도 있다. 또 다른 예에서, 출력 스트림 (14) 은 키포인트 픽셀들의 픽셀 값의 히스토그램 값들을 포함하는 출력 스트림일 수도 있다. 이 예에서, GPU (12) 는 넌-키포인트 픽셀들의 픽셀 값들의 히스토그램 값들을 출력하지 않을 수도 있고, 또는 넌-키포인트 픽셀들의 히스토그램 값들에 대해 널 값을 출력할 수도 있다.
이 예에서, 픽셀 값 프로세싱 유닛 (16) 은 예를 들어, 출력 스트림 (14) 내의 픽셀 값들을 평가함으로써, 출력 스트림 (14) 내의 수신된 픽셀 값들이 키포인트 픽셀들에 대한 것인지 또는 넌-키포인트 픽셀들에 대한 것인지 여부를 결정할 수도 있다. 예를 들어, 픽셀 값이 널 값이라면, 픽셀 값 프로세싱 유닛 (16) 은 픽셀 값이 넌-키포인트 픽셀에 대한 좌표 값이 아니라고 결정할 수도 있다. 픽셀 값이 넌-널 값이라면, 픽셀 값 프로세싱 유닛 (16) 은 픽셀 값이 키포인트 픽셀에 대한 좌표 값이라고 결정할 수도 있다.
픽셀 값 프로세싱 유닛 (16) 은 그 후 버퍼 (18) 에 키포인트 픽셀들에 대한 픽셀 값들을 저장하고, 버퍼 (18) 에 넌-키포인트 픽셀들에 대한 픽셀 값들을 저장하지 않을 수도 있다. 이 저장 접근법은 추가 프로세싱으로부터 넌-키포인트 픽셀들을 제거하여, 픽셀 값 압축을 초래할 수도 있다. 본 개시물에서 사용한 바와 같이, 픽셀 값 압축은 프로세싱되어야 하는 픽셀들의 수의 감소를 표시할 수도 있으며, 여기서 압축 후에 버퍼 (18) 에 남아있는 픽셀들의 수는 오리지널 이미지 내의 픽셀들의 수보다 실질적으로 작을 수도 있다. 일부 예들에서, 픽셀들의 수는 GPU (12) 에 의한 각각의 프로세싱 사이클의 처음의 픽셀들의 수에 비해 계속해서 감소될 수도 있다.
GPU (12) 는 그 후 키포인트 디스크립터 스테이지와 같은 후속 프로세싱 스테이지들을 위해 버퍼 (18) 에 저장된 키포인트 픽셀들에 대한 픽셀 값들을 취출할 수도 있다. 키포인트 디스크립터 스테이지는 키포인트들 개선 (refinement) 및 디스크립터들 발생을 포함할 수도 있다. 키포인트들 개선은 GPU (12) 가 각각의 키포인트 근방에 있을 수도 있는 차이 이미지들 내의 픽셀들의 3 차원 공간 기울기들을 계산할 수도 있는 알고리즘을 포함할 수도 있다. 이 방식으로, GPU (12) 는 각각의 키포인트 근방의 픽셀들로부터의 좌표들을 픽셀 해상도로부터 서브-픽셀 해상도로 보간할 수도 있다. 디스크립터들 발생은 GPU (12) 가 키포인트 로케이션에서의 프라이머리 공간 기울기는 물론 각각의 키포인트 로케이션 주위의 3 차원 영역들에 대한 공간 기울들의 히스토그램을 계산할 수도 있는 알고리즘을 포함할 수도 있다.
이미지의 픽셀 값들의 히스토그램으로서 간주될 수도 있는 공간 기울기들의 히스토그램은 키포인트 특징 디스크립터들의 하나의 예일 수도 있다. 일부 예들에서, GPU (12) 는 또한 버퍼 (18) 에 픽셀 값들의 히스토그램을 저장할 수도 있다. 예를 들어, GPU (12) 는 출력 스트림 (14) 의 일부로서 픽셀 값들의 히스토그램을 픽셀 값 프로세싱 유닛 (16) 에 송신할 수도 있다. 픽셀 값 프로세싱 유닛 (16) 은 픽셀 값들의 히스토그램을 임계값과 비교할 수도 있다. 픽셀 값들의 히스토그램이 임계값보다 더 크다면, 픽셀 값 프로세싱 유닛 (16) 은 버퍼 (18) 에 이러한 픽셀 값들의 히스토그램을 저장할 수도 있다. 그러나, 픽셀 값들의 히스토그램이 임계값보다 더 작다면, 픽셀 값 프로세싱 유닛 (16) 은 버퍼 (18) 에 이러한 픽셀 값들의 히스토그램을 저장하지 않을 수도 있다.
일부 예들에서, 픽셀 값 프로세싱 유닛 (16) 은 픽셀 값들이 버퍼 (18) 에 저장되는 키포인트 픽셀들의 수를 카운트할 수도 있다. 픽셀 값 프로세싱 유닛 (16) 은 픽셀 값들이 버퍼 (18) 에 저장되는 키포인트 픽셀들의 수를 표시하는 카운터 값을 GPU (12) 에 출력할 수도 있다. 이 방식으로, GPU (12) 는 버퍼 (18) 로부터 얼마나 많은 픽셀 값들을 취출할지를 알 수도 있고, 단지 그 픽셀 값들만을 취출할 수도 있다. 더 상세히 설명한 바와 같이, 픽셀 값 프로세싱 유닛 (16) 은 버퍼 (18) 의 인접한 저장 로케이션들에 픽셀 값들을 저장할 수도 있다.
본 개시물에 설명된 기법들은, 일부 예들에서, 전송 지연, 컴퓨테이션 사이클들의 증가나 동기화의 요구 없이 픽셀 값 압축을 허용할 수도 있다. 예를 들어, 크로노스 그룹 (Khronos Group) 에 의해 개발된, 예를 들어 오픈 지엘 (Open Graphics Library) (OpenGLTM) 사양, OpenGL ES 2.0 은 GPU 가 드물게 파퓰레이팅된 키포인트 픽셀들에 대한 로케이션들을 포함하는 데이터 맵을 중앙 프로세싱 유닛 (CPU) 으로 전송하는 기법을 허용한다. CPU 는 그 후 키포인트 픽셀들에 대한 픽셀 값들을 훨씬 더 작은 사이즈의 조밀한 데이터 맵으로 압축하고, 그 데이터 맵을 후속 프로세싱을 위해 GPU 로 전송한다.
이러한 접근법은, OpenGL ES 2.0 사양에서 허용한 바와 같이, CPU 와 GPU 간의 픽셀 값들의 백앤포스 (back and forth) 전송으로 인해 데이터 전송 지연을 증가시킬 수도 있다. 픽셀 값 프로세싱 유닛 (16) 은 픽셀 값 프로세싱 유닛 (16) 이 키포인트 픽셀들에 대한 픽셀 값들을 다시 GPU (12) 로 전송할 필요가 없을 수도 있기 때문에 이러한 전송 지연을 감소시킬 수도 있다. 또한, OpenGL ES 2.0 접근법에서, CPU 는 키포인트 픽셀들에 대해 픽셀 값 압축을 수행하기 위해 다중 CPU 컴퓨테이션 사이클들을 요구할 수도 있으며, 이는 프로세싱 비효율적일 수도 있다. 픽셀 값 프로세싱 유닛 (16) 은 임의의 컴퓨테이션 사이클의 추가 없이 픽셀 값들을 압축가능할 수도 있다. 예를 들어, 픽셀 값 프로세싱 유닛 (16) 은 하나의 비제한적인 예로서, 단일 컴퓨테이션 사이클 내의 픽셀 값들을 압축가능할 수도 있다. 더욱이, OpenGL ES 2.0 접근법에서, GPU 와 CPU 는 CPU 가 GPU 로부터 데이터 맵을 수신할 준비가 되어 있도록 동기화를 요구할 수도 있으며, 그 역도 또한 마찬가지이다. 픽셀 값 프로세싱 유닛 (16) 은 GPU (12) 와의 임의의 동기화를 요구하지 않을 수도 있다. 예를 들어, GPU (12) 는 픽셀 값 프로세싱 유닛 (16) 이 출력 스트림 (14) 을 수신할 준비가 되어 있다는 것을 우선 보장하지 않고 그 프로세싱을 완료할 때 출력 스트림 (14) 을 발생할 수도 있다.
예를 들어, 일부 예들에서, 픽셀 값 프로세싱 유닛 (16) 은 본 개시물에 설명된 것들과 같은 제한된 기능들을 수행하도록 구성될 수도 있다. 이들 예들에서, 픽셀 값 프로세싱 유닛 (16) 은 설명된 것들과는 임의의 다른 태스크들을 스케줄링할 필요가 없을 수도 있다. 픽셀 값 프로세싱 유닛 (16) 은 계속해서 출력 스트림 (14) 을 수신할 준비가 되어 있을 수도 있고, 그것이 출력 스트림을 수신할 수 있는 특정 시간들을 스케줄링할 필요가 없다. 예를 들어, GPU (12) 의 관점에서는, GPU (12) 가 출력 스트림 (14) 을 버퍼 (18) 로 출력하고 있다는 것을 생각할 수도 있다. 픽셀 값 프로세싱 유닛 (16) 은 픽셀 값들을 압축하는 중간 유닛으로서 기능할 수도 있다. 그러나, GPU (12) 는 픽셀 값 프로세싱 유닛 (16) 의 이러한 기능성에 대해 알고 있지 않을 수도 있고, 그것이 그 프로세싱을 완료할 때 출력 스트림 (14) 을 출력할 수도 있다.
본 개시물에 설명된 기법들은 또한 프로그래밍 복잡성의 증가 없이 픽셀 값 압축을 허용할 수도 있다. 예를 들어, 크로노스 그룹 (Khronos Group) 에 의해 또한 개발된 오픈 씨엘 (0pen Computing Language) (OpenCLTM) 사양은 OpenCL 사양에 따라 정의된 프로그램 커널들을 변경하고, 키포인트 픽셀들에 대한 픽셀 값들을 시퀀싱하며, 그 시퀀스를 프레임 버퍼 내의 연속되는 저장 로케이션들로 출력하기 위한 기법을 허용한다.
OpenCL 사양에 의해 제안된 접근법은 GPU 상에서 실행하는 프로그램 커널들의 복잡성을 증가시킬 수도 있고, 커널들 간의 동기화를 위해 실행 오버헤드를 요구할 수도 있다. 픽셀 값 프로세싱 유닛 (16) 은 픽셀 값 프로세싱 유닛 (16) 이 GPU (12) 의 외부에 있는 외부 하드웨어일 수도 있기 때문에 GPU (12) 상에서 실행하는 프로그램 커널들의 복잡성의 증가 없이 픽셀 값 압축이 가능할 수도 있다. 또한, 픽셀 값 프로세싱 유닛 (16) 은 GPU (12) 상에서 실행하는 프로그램 커널들 간에 임의의 추가적인 동기화를 요구하지 않을 수도 있다.
일부 예들에서, 픽셀 값 프로세싱 유닛 (16) 은 버퍼 (18) 에 선형 형태 또는 블록 형태로 적절한 픽셀 값들을 저장할 수도 있다. 픽셀 값 프로세싱 유닛 (16) 은 GPU (12) 의 특정 하드웨어 또는 GPU (12) 상에서 실행하는 소프트웨어에 기초하여 버퍼 (18) 에 선형 형태 또는 블록 형태로 픽셀 값들을 저장할 수도 있다. 예를 들어, GPU (12) 가 OpenGL ES 2.0 에 대해 그래픽 파이프라인을 구현하도록 구성된다면, 각각의 픽셀 값은 그 픽셀 값을 표현하는 4 개까지의 채널들을 포함할 수도 있다. 이 예에서, 픽셀 값 프로세싱 유닛 (16) 은 애플리케이션들의 필요성에 따른 플렉시빌리티에 대한 4 개의 채널들 중 하나 이상에 기초하여, 픽셀들을 압축, 예를 들어, 픽셀 값들이 버퍼 (18) 에 저장되어야 하는지를 결정할 수도 있다.
더욱이, 전술한 예들은, 픽셀 값 프로세싱 유닛 (16) 이 픽셀 값들을 임계값, 이를 테면 프로그램가능한 임계값과 비교함으로써 픽셀 값들이 버퍼 (18) 에 저장되어야 하는지를 결정한다는 것을 설명하지만, 본 개시물의 양태들은 이렇게 제한되지는 않는다. 일부 대안의 예들에서, 픽셀 값 프로세싱 유닛 (16) 은 픽셀 값들이 버퍼 (18) 에 저장되어야 하는지 여부를 결정하기 위해 에너지에 대한 픽셀 값들의 제곱, 기울기들에 대한 프로그램가능한 스페이싱의 픽셀 쌍들의 차이, 및 히스토그램을 포함한 다른 통계치들 등을 프로그램가능한 임계값들과 비교할 수도 있다.
도 2a 는 추가 상세로 도 1 의 GPU (12) 의 하나의 예를 예시하는 블록도이다. GPU (12) 는, 도 2a 에 예시한 바와 같이, 2008년 4월 24일자로 릴리즈되었고 공개적으로 입수가능한 OpenGL ES 2.0 사양에서 설명된 것과 유사한 그래픽 파이프라인을 구현할 수도 있다. 도 2a 에 예시한 바와 같이, GPU (12) 는 셰이더 코어 (20) 를 포함한다. 셰이더 코어 (20) 는 하나 이상의 하드웨어 유닛들, 하드웨어 유닛들 상에서 실행하는 소프트웨어 모듈들, 또는 이들의 조합으로서 구현될 수도 있다. 도 2a 에 예시한 바와 같이, 셰이더 코어 (20) 는 정점 셰이더 (22), 프리미티브 어셈블리 유닛 (24), 래스터라이저 (26), 프래그먼트 셰이더 (28), 깊이 스텐실 (depth stencil) 유닛 (30), 컬러 블렌드 유닛 (32), 및 디더 (dither) 유닛 (34) 을 포함한다. 일반적으로, 셰이더 코어 (20) 의 이들 유닛들은 OpenGL ES 2.0 사양에서 이러한 컴포넌트들에 보통 기인한 것들과 유사한 기능들을 수행할 수도 있다. 셰이더 코어 (36) 의 이들 유닛들은 예시를 목적으로 제공되며, 제한하는 것으로 간주되지 않아야 한다. 셰이더 코어 (36) 는 도 2a 에 예시된 것들보다 더 많거나 또는 더 적은 유닛들을 포함할 수도 있다.
프로세서 (미도시), 이를 테면 GPU (12) 의 외부의 CPU 는 스크린 상에 디스플레이될 이미지를 발생할 수도 있다. 프로세서는 하나의 예로서, 삼각형들과 같은 다각형들일 수도 있는 복수의 프리미티브들로 이미지를 분할하는 프리미티브 프로세싱 유닛을 포함할 수도 있다. 프리미티브 프로세싱 유닛은 또한 프리미티브들의 정점들에 대한 정점 좌표들, 및 그 정점들에 대한 픽셀 값들을 결정할 수도 있다. 프리미티브 프로세싱 유닛은 프리미티브들의 정점들의 좌표들 및 픽셀 값들을 GPU (12) 에 송신할 수도 있다.
정점 셰이더 (22) 는 수신된 픽셀 값들에 기초하여 정점들에 대한 라이트 값들을 계산할 수도 있다. 프리미티브 어셈블리 유닛 (24) 은 정점들의 좌표들에 기초하여 프리미티브들에 대한 선형 방정식 (linear equation) 들의 계수들을 컴퓨팅할 수도 있다. 래스터라이저 (26) 는, 이미지가 디스플레이될 스크린의 좌표들로 정점 좌표들을 변환한다. 래스터라이저 (26) 는 또한 프리미티브들 내의 픽셀들의 좌표들을 컴퓨팅할 수도 있다.
프래그먼트 셰이더 (28) 는 프리미티브들 내의 픽셀들에 대한, 픽셀 값들, 이를 테면 컬러 값들 및 깊이 값들을 컴퓨팅할 수도 있다. 깊이 스텐실 유닛 (30) 은, 픽셀이 다른 픽셀에 의해 차단되는지 여부를 결정하기 위해 프래그먼트 셰이더 (28) 로부터의 깊이 값들을 이용할 수도 있고, 픽셀이 완전히 차단된다면, 추가 프로세싱으로부터 그 픽셀을 제거할 수도 있다. 컬러 블렌드 유닛 (32) 은 상이한 픽셀들의 컬러를 함께 블렌딩할 수도 있다. 디더 유닛 (34) 은 픽셀들의 컬러 깊이를 증가시켜 프로세싱 동안의 상세의 손실을 다룰 수도 있다.
도 2a 의 예에서, 셰이더 코어 (20) 의 디더 유닛 (34) 의 결과의 출력은 출력 스트림 (14) 일 수도 있다. 이 예에서, 출력 스트림 (14) 은, 스크린 상에 픽셀들이 디스플레이될 장소의 좌표들과 같은 픽셀 값들, 픽셀들의 컬러 값들, 및 다른 이러한 픽셀 값들을 포함할 수도 있다. 출력 스트림 (14) 내의 픽셀 값들은 이미지 내의 연속되는 픽셀들에 대한 것일 수도 있다. 예를 들어, 래스터 (raster) 방식으로, 제 1 픽셀 값은 이미지의 상부-좌측 코너에 위치된 픽셀에 대한 것일 수도 있고, 제 2 픽셀 값은 이미지의 상부-좌측 코너의 바로 오른쪽에 위치된 픽셀에 대한 것일 수도 있으며, 등등이다.
픽셀 값 프로세싱 유닛 (16) 은 출력 스트림 (14) 을 수신하고, 특정 픽셀에 대한 픽셀 값들이 버퍼 (18) 에 저장되어야 하는지 여부를 결정할 수도 있다. 예를 들어, 특정 픽셀에 대한 컬러 값이 제로라면, 픽셀 값 프로세싱 유닛 (14) 은, 그 픽셀에 대한 픽셀 값들이 버퍼 (18) 에 저장되지 않아야 한다고 결정할 수도 있다. 픽셀 값 프로세싱 유닛 (16) 이 특정 픽셀에 대한 픽셀 값들이 버퍼 (18) 에 저장되어야 하는지 여부를 결정할 수도 있는 다른 기준이 존재할 수도 있다.
그 결정에 기초하여, 픽셀 값 프로세싱 유닛 (16) 은 버퍼 (18) 에 저장되어야 하는 픽셀들에 대한 픽셀 값들을 저장할 수도 있다. 일부 예들에서, 픽셀 값 프로세싱 유닛 (16) 은 버퍼 (18) 의 인접한 저장 로케이션들에 픽셀 값들을 저장할 수도 있다. 하나의 예로서, 픽셀 값 프로세싱 유닛 (16) 은 버퍼 (18) 의 인접한 로우들 또는 컬럼들에 픽셀 값들을 저장할 수도 있다. 다른 예로서, 픽셀 값 프로세싱 유닛 (16) 은 버퍼 (18) 의 인접한 블록들에 픽셀 값들을 저장할 수도 있다.
도 2b 는 추가 상세로 도 1 의 GPU (12) 의 다른 예를 예시하는 블록도이다. 도 2b 에 예시한 바와 같이, GPU (12) 는 태스크 분배 제어 유닛 (36), 태스크 분배 유닛 (38), 하나 이상의 병렬 셰이더 코어들 (40A 내지 40N) (셰이더 코어들 (40) 로 통칭됨), 및 태스크 통합 (task consolidation) 유닛 (42) 을 포함할 수도 있다. 태스크 분배 제어 유닛 (36), 태스크 분배 유닛 (38), 셰이더 코어들 (40), 및 태스크 통합 유닛 (42) 은 하나 이상의 하드웨어 유닛들, 하드웨어 유닛들 상에서 실행하는 소프트웨어 모듈들, 또는 이들의 조합으로서 구현될 수도 있다.
일부 예들에서, 셰이더 코어들 (40) 은 셰이더 코어 (20) (도 2a) 와 실질적으로 유사할 수도 있다. 예를 들어, 셰이더 코어들 (40) 중 각각의 셰이더 코어는 그래픽 파이프라인에서 셰이더 코어 (20) 의 유닛들 중 하나 이상을 구현할 수도 있다. 대안의 예들에서, 셰이더 코어들 (40) 은 상기 설명된 스케일 불변 특징 변환 (SIFT) 과 같은 다른 기능들을 구현할 수도 있다. 일부 다른 예들에서, 셰이더 코어들 (40) 은 도 2a 에 예시된 그래픽 파이프라인을 구현할 뿐만 아니라 SIFT 와 같은 다른 기능들을 수행할 수도 있다.
도 2b 의 예에서, CPU 와 같은 프로세서 (미도시) 는 이미지를 블록들로 분할하고, 블록들 각각에 대해 수행될 태스크들을 할당할 수도 있다. 프로세서는 태스크 정보를 태스크 분배 제어 유닛 (36) 에 송신할 수도 있다. 태스크 정보는 프로세서가 이미지를 블록들, 이를 테면 이미지 내의 블록들의 좌표들로 분할한 방식을 표시한다. 프로세서는 또한 태스크 데이터를 태스크 분배 유닛 (38) 에 송신할 수도 있다. 태스크 데이터는 이미지의 블록들 각각에 대해 어떤 태스크들이 수행되어야 하는지를 표시할 수도 있다.
태스크 분배 유닛 (38) 은 태스크 분배 제어 유닛 (36) 으로부터 태스크 정보를 수신할 수도 있다. 프로세서로부터의 태스크 데이터 및 태스크 분배 제어 유닛 (36) 으로부터의 태스크 정보에 기초하여, 태스크 분배 유닛 (38) 은 태스크들을 수행하기 위해 셰이더 코어들 (40) 중 각각의 셰이더 코어를 할당할 수도 있다. 예를 들어, 수행될 태스크의 타입 및 태스크를 수행하기 위한 셰이더 코어들 (40) 중 각각의 셰이더 코어의 이용가능성에 기초하여, 태스크 분배 유닛 (38) 은 다양한 셰이더 코어들 (40) 이 태스크들을 수행하는 시간들을 스케줄링할 수도 있다.
셰이더 코어들 (40) 중 각각의 셰이더 코어는 그들의 할당된 태스크들을 수행하고 그들의 태스크들의 결과들을 태스크 통합 유닛 (42) 으로 출력할 수도 있다. 셰이더 코어들 (40) 중 각각의 셰이더 코어로부터의 결과들은 이미지 내의 다양한 픽셀들에 대한 픽셀 값들일 수도 있다. 태스크 통합 유닛 (42) 은 셰이더 코어들 (40) 에 의해 수행된 태스크들의 결과들을 단일 출력 스트림에 통합할 수도 있다. 태스크 통합 유닛 (42) 에 의해 발생된 단일 출력 스트림은 출력 스트림 (14) 일 수도 있다. 예를 들어, 상기 설명한 바와 같이, 출력 스트림 (14) 은 픽셀 값들, 이를 테면 픽셀들의 좌표들, 루마 값들, 컬러 값들, 및 다른 이러한 픽셀 값들을 포함할 수도 있다.
도 2a 에 예시된 예와 유사하게, 픽셀 값 프로세싱 유닛 (16) 은 출력 스트림 (14) 을 수신하고, 특정 픽셀에 대한 픽셀 값들이 버퍼 (18) 에 저장되어야 하는지 여부를 결정할 수도 있다. 그 결정에 기초하여, 일부 예들에서, 픽셀 값 프로세싱 유닛 (16) 은 버퍼 (18) 의 인접한 로우들 또는 컬럼들, 또는 버퍼 (18) 의 인접한 블록들 중 어느 하나에 저장되어야 하는 픽셀 값들을 저장할 수도 있다.
도 3 은 추가 상세로 도 1 의 픽셀 값 프로세싱 유닛 (16) 의 일 예를 예시하는 블록도이다. 일부 예들에서, 픽셀 값 프로세싱 유닛 (16) 은 고정된-기능 하드웨어 유닛일 수도 있고, 압축 유닛으로 지칭될 수도 있다. 어구 "고정된-기능 하드웨어 유닛 (fixed-function hardware unit)" 은 픽셀 값 프로세싱 유닛 (16) 이 픽셀 값 프로세싱 유닛 (16) 에 부여된 기능들을 수행하고 다른 기능들은 수행하지 않도록 설계될 수도 있다는 것을 의미한다. 픽셀 값 프로세싱 유닛 (16) 은 하나 이상의 회로들 또는 로직 엘리먼트들에서, GPU (12) 및 버퍼 (18) 의 외부에 상주하는 스탠드 얼론 통합된 또는 별개의 로직 회로로서 구현될 수도 있다. 예를 들어, 픽셀 값 프로세싱 유닛 (16) 은 디지털 신호 프로세서 (DSP), 주문형 집적 회로 (ASIC), 필드 프로그램가능 게이트 어레이 (FPGA), 또는 GPU (12) 및 버퍼 (18) 의 외부에 있고 양자에 커플링되는 다른 등가의 통합된 또는 별개의 로직 회로일 수도 있다. 픽셀 값 프로세싱 유닛 (16) 이 DSP, ASIC, 또는 FPGA 인 일부 예들에서, DSP, ASIC, 또는 FPGA 는 픽셀 값 프로세싱 유닛 (16) 에 부여된 기능들을 수행하도록 설계되고 임의의 다른 기능들을 수행하도록 설계되지 않을 수도 있다.
픽셀 값 프로세싱 유닛 (16) 은 픽셀 값 프로세서 (44), 카운터 (46), 및 어드레스 발생기 (48) 를 포함할 수도 있다. 픽셀 값 프로세서 (44) 는 GPU (12) 로부터 출력 스트림 (14) 을 수신할 수도 있다. 설명한 바와 같이, 출력 스트림 (14) 은 GPU (12) 에 의해 프로세싱된 이미지 내의 픽셀들에 대한 픽셀 값들을 포함할 수도 있다. 하나의 예로서, 픽셀 값들은 상기 설명한 바와 같이, GPU (12) 가 SIFT 를 구현하는 예들에서, 키포인트 픽셀들에 대한 또는 키포인트 픽셀들과 넌-키포인트 픽셀들에 대한 픽셀 값들일 수도 있다. 다른 예로서, 픽셀 값들은 그래픽 파이프라인에서 프로세싱된 픽셀들에 대한 것일 수도 있다. 출력 스트림 (14) 내의 픽셀들에 대한 픽셀 값들은 GPU (12) 에 의해 프로세싱되는 이미지에 드물게 그리고 랜덤으로 위치되는 픽셀들에 대한 것일 수도 있다.
출력 스트림 (14) 내에는 다양한 타입들의 픽셀 값들이 존재할 수도 있다. 예를 들어, 픽셀 값들은 스크린 상에 디스플레이될 이미지 내의 픽셀들의 좌표 값들을 포함할 수도 있다. 픽셀 값들은 또한 픽셀들의 컬러 값들을 포함할 수도 있다. 일부 예들에서, 픽셀 값들은 애플리케이션들의 필요성에 따라, 좌표들, 에너지 값 등일 수도 있다. 또한, 일부 예들에서, 픽셀 값들은 상기 설명한 바와 같이, 키포인트 특징 디스크립터들의 일부로서 계산된 픽셀 값들의 히스토그램일 수도 있다.
픽셀 값 프로세서 (44) 는 출력 스트림 (14) 을 수신할 수도 있고, 픽셀들에 대한 수신된 픽셀 값들의 각각에 대해, 각각의 픽셀에 대한 픽셀 값들을 보유할지 또는 폐기할지 여부를 결정할 수도 있다. 픽셀에 대한 픽셀 값들이 보유될 예정이라면, 픽셀 값 프로세서 (44) 는 보유된 픽셀에 대한 픽셀 값들을 저장을 위해 버퍼 (18) 에 송신할 수도 있다. 이하 설명되는 바와 같이, 픽셀 값 프로세서 (44) 는 어드레스 발생기 (48) 에 의해 결정된 버퍼 (18) 내의 로케이션에 보유된 픽셀에 대한 픽셀 값들을 저장할 수도 있다. 일부 예들에서, 픽셀 값 프로세서 (44) 가 픽셀에 대한 픽셀 값들이 폐기될 예정이라고 결정한다면, 픽셀 값 프로세서 (44) 는 추가 프로세싱으로부터 그 픽셀 값들을 제거할 수도 있다.
픽셀 값 프로세서 (44) 는 픽셀에 대한 픽셀 값들을 보유할지 또는 폐기할지 여부를 결정하기 위해 다양한 기준을 이용할 수도 있다. 예를 들어, SIFT 에서, 픽셀 값 프로세서 (44) 는 버퍼 (18) 에 키포인트 픽셀들에 대한 픽셀 값들을 저장하고, 버퍼 (18) 에 넌-키포인트 픽셀들에 대한 픽셀 값들을 저장하지 않을 수도 있다. SIFT 에서, 넌-키포인트 픽셀들에 대한, 좌표 값들 또는 컬러 값들을 포함하는, 픽셀 값들은 GPU (12) 의 프로세싱에 기초하여 널 값 또는 제로 값일 수도 있고, 키포인트 픽셀들에 대해서는 널 값 또는 제로 값이 아닌 다른 값일 수도 있다. 이 예에서, 픽셀 값 프로세서 (44) 는 그 픽셀에 대한 수신된 픽셀 값이 널 값 또는 제로 값이라면 픽셀이 넌-키포인트 픽셀이라고 결정할 수도 있고, 그 픽셀에 대한 수신된 픽셀 값이 널 값 또는 제로 값이 아니라면 픽셀이 키포인트 픽셀이라고 결정할 수도 있다.
다른 예로서, 픽셀 값 프로세서 (44) 는 픽셀의 컬러 값의 루미넌스를 결정할 수도 있다. 그 픽셀의 루미넌트가 임계 루미넌스보다 더 크다면, 픽셀 값 프로세서 (44) 는 그 픽셀에 대한 픽셀 값들이 저장되어야 한다고 결정할 수도 있다. 그 픽셀의 루미넌스가 임계 루미넌트보다 더 작거나 또는 동일하다면, 픽셀 값 프로세서 (44) 는 그 픽셀에 대한 픽셀 값들이 저장되지 않아야 한다고 결정할 수도 있다.
SIFT 예나 그래픽 파이프라인 예 중 어느 하나에서, 출력 스트림 (14) 은 픽셀들에 대한 픽셀 값들을 미리 결정된 순서로 포함할 수도 있다. 하나의 예로서, 제 1 수신된 픽셀 값은 GPU (12) 에 의해 프로세싱된 이미지의 상부-좌측 픽셀에 대한 픽셀 값들일 수도 있고, 제 2 수신된 픽셀 값은 상부-좌측 픽셀의 우측에 있는 픽셀에 대한 픽셀 값일 수도 있으며, 등등이다. 이 예에서, 픽셀 값 프로세서 (44) 는 픽셀 값 프로세싱 유닛 (16) 이 출력 스트림 (14) 내의 픽셀 값들을 수신하는 순서에 기초하여 픽셀 값들이 어느 픽셀에 속하는지를 결정할 수도 있다. 이 방식으로, 픽셀 값 프로세서 (44) 는 픽셀들이 추가 프로세싱을 위해 보유되는지, 그리고 픽셀들이 추가 프로세싱으로부터 폐기되는지에 대해 알고 있을 수도 있다.
버퍼 (18) 에 픽셀에 대한 픽셀 값들을 저장할지 또는 그 픽셀 값들을 저장하지 않을지 여부를 결정하기 위해 픽셀 값 프로세서 (44) 에 의해 이용되는 상기 예의 기법들은 예시를 목적으로 제공되며, 제한하는 것으로 간주되지 않아야 한다. 픽셀 값 프로세서 (44) 는 버퍼 (18) 에 픽셀에 대한 픽셀 값들을 저장할지 또는 그 픽셀 값들을 저장하지 않을지 여부를 결정하기 위해 상기 설명된 예들에 더하여 또는 그 예들 대신에 기준을 이용할 수도 있다.
특정 픽셀에 대한 픽셀 값들이 버퍼 (18) 에 저장되어야 한다고 결정한 후에, 픽셀 값 프로세서 (44) 는 그 픽셀에 대한 픽셀 값들을 저장을 위해 프레임 (18) 에 송신, 즉 그 픽셀 값들을 버퍼 (18) 에 기입할 수도 있다. 또한, 어드레스 발생기 (48) 는 그 픽셀에 대한 픽셀 값들이 저장되어야 하는 버퍼 (18) 내의 로케이션을 결정할 수도 있다.
도 4b 내지 도 4d 에 추가 상세로 예시한 바와 같이, 버퍼 (18) 는 저장 로케이션들의 2 차원 어레이일 수도 있다. 일부 예들에서, 버퍼 (18) 내의 저장 로케이션들의 수는 스크린 상의 픽셀들의 수와 실질적으로 유사할 수도 있다. 예를 들어, 스크린이 640×480 픽셀들을 포함한다면, 버퍼 (18) 는 640×480 저장 로케이션들을 포함할 수도 있다. 그러나, 일부 예들에서, 버퍼 (18) 내의 저장 로케이션들의 수는 스크린 상의 픽셀들의 수보다 더 크거나 또는 더 작을 수도 있다.
어드레스 발생기 (48) 는 버퍼 (18) 내의 저장 어드레스들이 인접하도록 저장 어드레스들을 발생할 수도 있다. 어드레스 발생기 (48) 는 저장 모드 선택에 기초하여 적어도 2 개의 상이한 모드들에서 동작할 수도 있다. 저장 모드 선택은 어드레스 발생기 (48) 가 선형 모드에서 동작해야 하는지 또는 블록 모드에서 동작해야 하는지 여부를 표시할 수도 있다.
선형 모드에서, 어드레스 발생기 (48) 는 버퍼 (18) 내의 인접한 로우들 또는 컬럼들에 저장될 픽셀들에 대한 픽셀 값들에 대해 버퍼 (18) 내의 저장 로케이션들에 대한 어드레스들을 발생할 수도 있다. 블록 모드에서, 어드레스 발생기 (48) 는 버퍼 (18) 내의 인접한 블록들에 저장될 픽셀들에 대한 픽셀 값들에 대해 버퍼 (18) 내의 저장 로케이션들에 대한 어드레스들을 발생할 수도 있다. 예를 들어, 버퍼 (18) 는 8×8 저장 로케이션들을 포함한다는 것을 가정한다. 이 예에서, 버퍼 (18) 는 4 개의 4×4 인접한 저장 로케이션들로 분할될 수도 있다. 블록 모드에서, 어드레스 발생기 (48) 는 제 1 16 개의 픽셀 값들이 저장 로케이션들의 제 1 4×4 블록에 저장되고, 제 2 16 개의 픽셀 값들이 저장 로케이션들의 제 2 4×4 블록에 저장되며, 등등이 되도록 픽셀 값들이 저장될 픽셀들에 대한 어드레스들을 발생할 수도 있다.
픽셀 값 프로세서 (44) 는 어드레스 발생기 (48) 에 의해 정의된 어드레스들에서의 버퍼 (18) 내에, 픽셀들에 대한 픽셀 값들, 예를 들어, 3 개의 예들로서, 좌표 값들, 컬러 값들, 히스토그램 값들을 저장할 수도 있다. 예를 들어, 제 1 픽셀에 대해, 어드레스 발생기 (48) 는 (1, 1) 이 될 버퍼 (18) 내의 어드레스를 발생할 수도 있다. 픽셀 값 프로세서 (44) 는 버퍼 (18) 내의 로케이션 (1, 1) 에 제 1 픽셀에 대한 픽셀 값들을 저장할 수도 있다. 제 2 픽셀에 대해, 어드레스 발생기 (48) 는 (1, 2) 가 될 버퍼 (18) 내의 어드레스를 발생할 수도 있다. 픽셀 값 프로세서 (44) 는 버퍼 (18) 내의 로케이션 (1, 2) 에 제 2 픽셀에 대한 픽셀 값들을 저장할 수도 있으며, 등등이다.
도 3 에 예시한 바와 같이, 픽셀 값 프로세싱 유닛 (16) 은 또한 카운터 (46) 를 포함할 수도 있다. 카운터 (46) 는 픽셀 값들이 버퍼 (18) 에 저장되는 픽셀들의 수를 카운트할 수도 있다. 예를 들어, 상기 설명한 바와 같이, GPU (12) 가 각각의 차이 이미지, 예를 들어, 차이 이미지들 2, 3, 및 4 에 대해, SIFT 를 지원하기 위해 특징 디스크립터 프로세싱을 구현하는 경우, 카운터 (46) 는 버퍼 (18) 에 저장된 픽셀들의 수를 카운트할 수도 있다.
카운터 (46) 는 픽셀 값들이 버퍼 (18) 에 저장되는 픽셀들의 수를 GPU (12) 에 송신할 수도 있다. 카운터 (46) 의 카운트에 기초하여, GPU (12) 는 버퍼 (18) 로부터 얼마나 많은 픽셀 값들이 취출되어야 하는지에 대해 알고 있을 수도 있다. 일부 예들에서, 제 1 프로세싱 패스에 대해, GPU (12) 는 버퍼 (18) 의 상부-좌측 저장 로케이션으로부터 픽셀 값들을 취출하고 있고, 카운터 (46) 에 의해 표시된 픽셀 값들의 수를 취출하기 위해 래스터 방식으로 이동할 수도 있다. GPU (12) 는 버퍼 (18) 내의 저장 로케이션이 GPU (12) 가 제 1 패스에서 데이터를 취출한 마지막 저장 로케이션이었다는 것을 알 수도 있다. 그 후, 후속 패스에 대해, GPU (12) 는 버퍼 (18) 내의 다음 저장 로케이션으로부터 픽셀 값들을 취출할 수도 있다.
이 방식으로, GPU (12) 는 가변 데이터 레이트 프로세싱의 경우에도 그 고정된 데이터 레이트 프로세싱을 효율적으로 이용할 수도 있다. 예를 들어, 픽셀 값 프로세싱 유닛 (16) 없이, GPU (12) 는 반드시 모든 픽셀들에 대해 추가 프로세싱이 요구되는 것은 아니지만, 버퍼 (18) 내의 모든 단일 픽셀에 대한 픽셀 값들을 저장할 것이다. 그 후, 추가 프로세싱을 위해, GPU (12) 는 저장된 픽셀 값들 모두를 취출하고, 픽셀 값들 각각을 평가하며, 추가 프로세싱이 필요한지 여부를 결정할 것이다. 픽셀들 모두의 이러한 평가는 컴퓨테이션적으로 비효율적일 수도 있다. 예를 들어, 픽셀들의 1% 미만이 추가 프로세싱을 요구한다면, GPU (12) 는 어떠한 추가 프로세싱도 요구하지 않는 픽셀들의 99% 에 대해 컴퓨테이션 리소스들을 낭비할 수도 있다.
GPU (12) 와 버퍼 (18) 간을 커플링한 픽셀 값 프로세싱 유닛 (16) 으로, 추가 프로세싱이 요구되지 않는 픽셀들은 버퍼 (18) 에 저장되지 않을 수도 있다. 대신에, 픽셀 값 프로세싱 유닛 (16) 은 추가 프로세싱이 요구되지 않는 이러한 픽셀들을 폐기할 수도 있다. 카운터 (46) 는 취출할 픽셀 값들이 얼마나 많은지를 GPU (12) 에 표시할 것이며, GPU (12) 는 그 후 카운터 (46) 에 의해 표시된 픽셀 값들의 수를 취출할 것이다. 이 방식으로, GPU (12) 는 어떠한 추가 프로세싱도 요구하지 않는 픽셀들에 대한 픽셀 값들을 평가하여 컴퓨테이션 리소스들을 낭비하지 않을 수도 있다. 또한, GPU (12) 는 카운터 (46) 에 의해 표시된 픽셀들의 수를 프로세싱한 후 그 프로세싱을 종료가능할 수도 있다.
픽셀 값 프로세싱 유닛 (16) 은 또한 단일 컴퓨테이션 사이클 내에 픽셀 값들이 보유되어야 하는지 또는 픽셀 값들이 폐기되어야 하는지를 결정가능할 수도 있다. 예를 들어, 픽셀 값 프로세싱 유닛 (16) 은 픽셀 값들의 임의의 피드백을 요구하지 않을 수도 있고 또는 프로세서 스케줄링을 요구하지 않을 수도 있다. 예를 들어, 픽셀 값 프로세싱 유닛 (16) 은 저장될 출력 스트림 (14) 내의 픽셀 값들이 픽셀 값 프로세싱 유닛 (16) 과 GPU (12) 간의 임의의 동기화 없이 단일 패스에서, GPU (12) 로부터 버퍼 (18) 에 이르는 것을 허용하거나, 또는 픽셀 값들의 다중 프로세싱을 요구할 수도 있다.
더욱이, 픽셀 값 프로세싱 유닛 (16) 은 GPU (12) 상에서 실행하는 소프트웨어 코드에 대한 광범위한 변경 없이 GPU (12) 가 가변 데이터 레이트 프로세싱을 위해 그 고정된 데이터 레이트 프로세싱을 이용하는 것을 허용할 수도 있다. 예를 들어, 픽셀 값 압축을 수행하기 위해 GPU (12) 상에서 실행하는 소프트웨어 코드를 변경하는 것은 복잡하고 GPU (12) 상에서 실행하는 상이한 명령들 간에 스케줄링을 요구할 수도 있다. 픽셀 값 프로세싱 유닛 (16) 에 의해, GPU (12) 상에서 실행하는 명령들에 대한 복잡한 변화들, 또는 GPU (12) 상에서 실행하는 명령들의 스케줄링에 대한 임의의 변화가 요구되지 않을 수도 있다. 즉, 픽셀 값 프로세싱 유닛 (16) 은 GPU (12) 프로그래밍에 대해 투명할 수도 있고, GPU (12) 에 대해 제로 런-타임 오버헤드를 요구할 수도 있으며, GPU (12) 와 동작하도록 쉽게 구성될 수도 있다.
더욱이, 픽셀 값 프로세싱 유닛 (16) 은 상이한 사이즈 이미지들에 대해 픽셀 값 압축을 지원가능할 수도 있다. 픽셀 값 프로세싱 유닛 (16) 은 다른 애플리케이션들에 대해서도 유용할 수도 있으며, 이는 GPU (12) 의 성능을 더욱 향상시킬 수도 있다.
본 개시물에 설명된 예의 구현들의 일부에서, GPU (12) 는 버퍼 (18) 를 반복적으로 클리어할 필요가 없을 수도 있다. 예를 들어, GPU (12) 가 출력 스트림 (14) 을 발생하기 위해 SIFT 를 구현하는 경우, 픽셀 값 프로세서 (44) 는 버퍼 (18) 내에 제 1 차이 이미지로부터 키포인트 픽셀들에 대한 픽셀 값들을 저장할 수도 있다. 그 후, 버퍼 (18) 를 클리어하지 않고, 픽셀 값 프로세서 (44) 는 버퍼 (18) 내에 제 2 차이 이미지로부터 키포인트 픽셀들에 대한 픽셀 값들을 저장할 수도 있으며, 등등이다. 이 예에서, GPU (12) 는 카운터 (46) 의 카운트에 기초하여, 키포인트 픽셀들이 제 1 차이 이미지에 속하는지, 그리고 키포인트 픽셀들이 제 2 차이 이미지에 속하는지를 식별가능할 수도 있다. 효율적인 전력 이용 및 프로세싱은 버퍼 (18) 가 클리어되어야 하는 횟수를 감소시킴으로써 조장될 수도 있다.
도 4a 는 버퍼 (18) 에 저장될 이미지 내의 픽셀들을 예시하는 그래픽도이다. 도 4b, 도 4c, 및 도 4d 는 버퍼 (18) 의 하나의 예의 저장 로케이션들에 저장된 픽셀 값들을 예시하는 그래픽도들이다. 도 4a 에 예시된 예에서, 이미지 (50) 는 GPU (12) 에 의해 프로세싱된 이미지일 수도 있고, (0, 0) 에 위치된 픽셀에서 시작하여 (7, 7) 에 위치된 픽셀까지 64 픽셀들을 포함할 수도 있다. 이 예에서, 이미지 (50) 가 디스플레이될 스크린은 또한 64 픽셀들을 포함한다는 것을 가정한다.
도 4a 에서, 그레이 스케일 내의 픽셀들은 버퍼 (18) 에 저장될 픽셀들이다. 예를 들어, 이미지 (50) 내의 (1, 1) 에 위치된 픽셀에 대한 픽셀 값은 1 일 수도 있고; 이미지 (50) 내의 (6, 2) 에 위치된 픽셀에 대한 픽셀 값은 2 일 수도 있고; 이미지 (50) 내의 (5, 4) 에 위치된 픽셀에 대한 픽셀 값은 3 일 수도 있으며; 이미지 (50) 내의 (0, 7) 에 위치된 픽셀에 대한 픽셀 값은 4 일 수도 있다. 모든 다른 픽셀들에 대한 픽셀 값들은 널 값일 수도 있다.
픽셀 값 프로세싱 유닛 (16) 은 출력 스트림 (14) 의 형태로 이미지 (50) 의 픽셀 값들을 수신할 수도 있다. 이 예에서, 출력 스트림 (14) 내의 제 1 픽셀 값은 이미지 (50) 내의 (0, 0) 에 위치된 픽셀에 대한 픽셀 값일 수도 있다. 출력 스트림 (14) 내의 제 2 픽셀 값은 이미지 (50) 내의 (1, 0) 에 위치된 픽셀에 대한 픽셀 값일 수도 있으며, 등등이다. 이 예에서, (7, 0) 에 위치된 픽셀 다음의 픽셀에 대한 픽셀 값은 (1, 0) 에 위치된 픽셀에 대한 픽셀 값일 수도 있으며, 등등이다.
이 예에서, 픽셀 값 프로세서 (44) 는, 단지 (1, 1), (6, 2), (5, 4), 및 (0, 7) 에 위치된 픽셀들에 대한 픽셀 값들만이 버퍼 (18) 에 저장되어야 한다고 결정할 수도 있는데, 그 이유는 이들 픽셀들에 대한 픽셀 값들이 널 값이 아니고, 모든 다른 픽셀들에 대한 픽셀 값들이 널 값들이기 때문이다. 또한, 이 예에서, 픽셀 값 프로세서 (44) 가 픽셀의 픽셀 값들이 저장되어야 한다고 결정한 후, 카운터 (46) 는 그 카운터를 증분시킬 수도 있다. 이 예에서, 출력 스트림 (14) 의 결과로, 카운터 (46) 는 버퍼 (18) 가 이 패스에서 4 개의 픽셀들을 저장했다는 것을 GPU (12) 에 표시할 수도 있다. 이 방식으로, GPU (12) 는 얼마나 많은 픽셀 값들을 후속 프로세싱을 위해 버퍼 (18) 로부터 취출해야 하는지에 대해 알고 있을 수도 있다.
버퍼 (18) 에 저장될 픽셀 값들에 대해, 어드레스 발생기 (48) 는 픽셀 값들이 버퍼 (18) 에 저장되어야 하는 장소에 대한 로케이션을 결정할 수도 있다. 상기 설명한 바와 같이, 어드레스 발생기 (48) 는 어드레스 발생기 (48) 가 선형 모드에서 동작중인지 또는 블록 모드에서 동작중인지 여부에 기초하여 픽셀 값들이 저장되어야 하는 어드레스를 결정할 수도 있다. 어느 동작 모드에서나, 카운터 (46) 는 픽셀 값들이 버퍼 (18) 에 저장되는 픽셀들의 수를 카운트할 수도 있다.
도 4b 및 도 4c 는 어드레스 발생기 (48) 가 선형 모드에서 동작중인 경우 버퍼 (18) 에의 픽셀 값들의 저장을 예시한다. 예를 들어, 선형 모드에서, 어드레스 발생기 (48) 는 버퍼 (18) 의 컬럼 또는 로우 내의 인접한 저장 로케이션들에 대한 버퍼 (18) 내의 어드레스들을 발생할 수도 있다. 예를 들어, 도 4b 의 예에서, 어드레스 발생기 (48) 는 로우 (R1) 내의 인접한 저장 로케이션들에 저장될 픽셀 값들에 대한 어드레스들을 발생한다. 도 4c 의 예에서, 어드레스 발생기 (48) 는 컬럼 (C1) 내의 인접한 저장 로케이션들에 저장될 픽셀 값들에 대한 어드레스들을 발생한다. 픽셀 값 프로세서 (44) 는 어드레스 발생기 (48) 에 의해 발생된 어드레스에 기초하여 인접한 로우들 또는 컬럼들에 픽셀 값들을 저장할 수도 있다.
도 4d 는 어드레스 발생기 (48) 가 블록 모드에서 동작중인 경우 버퍼 (18) 에의 픽셀 값들의 저장을 예시한다. 블록 모드에서, 버퍼 (18) 는 각각이 적어도 하나의 로우 및 적어도 하나의 컬럼을 포함하는 복수의 블록들로 분할되는 것으로 간주될 수도 있다. 예를 들어, 도 4d 의 예에서, 버퍼 (18) 는 16 개의 블록들로 분할될 수도 있으며, 여기서 각각의 블록은 2×2 저장 로케이션들을 포함한다. 이 예에서, 어드레스 발생기 (48) 는 제 1 4 개의 픽셀 값들을 저장하기 위해 로우 (R1 및 R2) 의 제 1 2 개의 저장 로케이션, 및 컬럼 (C1 및 C2) 의 제 1 2 개의 저장 로케이션을 포함하는 저장 로케이션들에 대한 어드레스들을 발생할 수도 있다. 도 4d 에 예시한 바와 같이, 픽셀 값 프로세서 (44) 는 로우 (R1) 및 로우 (R2) 의 제 1 2 개의 저장 로케이션들, 및 컬럼 (C1) 및 컬럼 (C2) 의 제 1 2 개의 저장 로케이션들을 포함하는 버퍼 (18) 의 제 1 블록 내에 픽셀 값들을 저장할 수도 있다.
도 5 는 본 개시물의 양태들을 구현하도록 구성될 수도 있는 디바이스 (52) 를 예시하는 블록도이다. 디바이스 (52) 의 예들은, 무선 통신 디바이스들, 모바일 무선 전화기들, 개인 휴대 정보 단말기 (PDA) 들, 비디오 디스플레이들에 커플링된 비디오 게이밍 콘솔들, 모바일 비디오 화상회의 유닛들, 랩톱 컴퓨터들, 데스크톱 컴퓨터들, 태블릿 컴퓨터들, 텔레비전 셋-톱 박스들, 통합된 미디어 디코더들을 가진 텔레비전들, 디지털 미디어 플레이어들, 휴대용 게이밍 디바이스들 등을 포함하지만, 이들에 제한되지는 않는다. 디바이스 (52) 는 그래픽 프로세싱 유닛 (GPU) (12), 픽셀 값 프로세싱 유닛 (16), 버퍼 (18), 프로세서 (54), 스크린 (56), 저장 디바이스 (58), 트랜시버 모듈 (60), 사용자 인터페이스 (62), 및 카메라 (64) 를 포함할 수도 있다.
디바이스 (52) 는 명료함을 위해 도 5 에 도시되지 않은 추가적인 모듈들 또는 유닛들을 포함할 수도 있다. 예를 들어, 디바이스 (52) 는 디바이스 (52) 가 모바일 무선 전화기인 예들에서 전화 통신들을 실시하기 위한, 어느 것도 도 5 에 도시되지 않은 스피커 및 마이크로폰, 또는 디바이스 (52) 가 미디어 플레이어인 경우 스피커를 포함할 수도 있다. 더욱이, 디바이스 (52) 에 도시된 다양한 모듈들 및 유닛들은 디바이스 (52) 의 모든 예에서 필수적이지 않을 수도 있다. 예를 들어, 스크린 (56) 및 사용자 인터페이스 (62) 는 일부 예들에서는 디바이스 (52) 의 외부에 있을 수도 있다. 또한, 일부 예들에서, 카메라 (64) 는 필요하지 않을 수도 있고, 또는 디바이스 (52) 의 외부에 있을 수도 있다.
도 5 의 GPU (12), 픽셀 값 프로세싱 유닛 (16), 및 버퍼 (18) 는 도 1 내지 도 4 에 예시한 바와 같은 GPU (12), 픽셀 값 프로세싱 유닛 (16), 및 버퍼 (18) 와 실질적으로 유사할 수도 있다. 예를 들어, 도 5 의 GPU (12), 픽셀 값 프로세싱 유닛 (16), 및 버퍼 (18) 는 도 1 내지 도 4 에 대해 상기 설명된 것들과 실질적으로 유사한 기능들을 수행할 수도 있다.
프로세서 (54) 는 하나 이상의 애플리케이션들을 실행할 수도 있다. 프로세서 (54) 에 의해 실행된 애플리케이션들의 일부 예들은 웹 브라우저들, 이-메일 애플리케이션들, 스프레드시트들, 비디오 게임들, 또는 디스플레이를 위해 뷰잉가능한 콘텐츠를 발생하는 다른 애플리케이션들을 포함하지만, 이들에 제한되지는 않는다. 프로세서 (54) 에 의해 실행된 애플리케이션들의 다른 예는 이미지 인식 애플리케이션을 포함한다.
예를 들어, 디바이스 (52) 의 사용자는 카메라 (64) 로 이미지의 사진을 찍을 수도 있다. 사용자는 그 후 프로세서 (54) 에 의해 이미지 인식 애플리케이션을 실행할 수도 있다. 프로세서 (54) 는 카메라 (64) 에 의해 찍힌 이미지를 GPU (12) 에 제공하고, GPU (12) 로 하여금, SIFT 를 수행하여 이미지로부터 특징들을 추출하도록 할 수도 있다. 프로세서 (54) 는 그 후 트랜시버 모듈 (60) 로 하여금, 추출된 특징들을 하나 이상의 서버들에 송신하도록 할 수도 있다. 하나 이상의 서버들은 추출된 특징들을 데이터베이스 내의 이미지들의 특징들과 비교할 수도 있다.
그 비교에 기초하여, 하나 이상의 서버들은 트랜시버 모듈 (60) 에 이미지로 디스플레이된 콘텐츠들에 대해, 매칭 이미지의 에스티메이션을 송신하거나 또는 웹 페이지와 같은 네트워크 링크를 송신할 수도 있으며, 결국 매칭 이미지의 에스티메이션 또는 웹 페이지를 프로세서 (54) 에 제공한다. 대안의 예에서는, 서버가 아닌 프로세서 (54) 가 매칭 이미지의 에스티메이션을 발견하기 위해 다운로드된 데이터베이스 내의 이미지들의 특징들과 추출된 이미지들을 비교할 수도 있다. 프로세서 (54) 는 그 후 매칭 이미지의 에스티메이션 또는 웹 페이지를 스크린 (56) 을 통해 사용자에게 디스플레이할 수도 있다.
프로세서 (54) 에 의해 실행된 애플리케이션들에 대한 명령들은 저장 디바이스 (58) 내에 저장될 수도 있다. 일부 경우들에서, 프로세서 (54) 는 트랜시버 모듈 (60) 을 통해 하나 이상의 애플리케이션들을 다운로드할 수도 있다. 프로세서 (54) 는 사용자 인터페이스 (62) 를 통한 사용자에 의한 선택에 기초하여 하나 이상의 애플리케이션들을 실행할 수도 있다. 일부 예들에서, 프로세서 (54) 는 사용자 상호작용 없이 하나 이상의 애플리케이션들을 실행할 수도 있다.
프로세서 (54) 는 또한 상기 설명된 프로세서에 부여된 기능들을 수행할 수도 있다. 예를 들어, 프로세서 (54) 는 픽셀 값 프로세싱 유닛 (16) 의 동작 모드를 선택할 수도 있다. 예를 들어, 상기 설명한 바와 같이, 픽셀 값 프로세싱 유닛 (16) 의 어드레스 발생기 (48) 는 인접한 로우들 또는 컬럼들, 예를 들어 선형 모드에 있거나, 또는 인접한 블록들, 예를 들어, 블록 모드에 있는 버퍼 (18) 내의 로케이션들에 대한 어드레스들을 발생할 수도 있다. 프로세서 (54) 는 어드레스 발생기 (48) 에 선형 모드나 또는 블록 모드에서 동작할 것을 명령할 수도 있다.
다른 예로서, 프로세서 (54) 는 스크린 (56) 상에 디스플레이될 이미지를 발생할 수도 있다. 예를 들어, 프로세서 (54) 는 실행중인 애플리케이션에 기초하여 이미지를 발생할 수도 있다. 프로세서 (54) 는 또한 도 2a 에 대하여 상기 설명한 바와 같이, 이미지를 복수의 프리미티브들로 분할하고 그 프리미티브들의 정점들에 대한 정점 좌표들을 결정하며, 정점들에 대한 픽셀 값들을 결정하는 프리미티브 프로세싱 유닛을 포함할 수도 있다. 또 다른 예로서, 프로세서 (54) 는 도 2b 에 대하여 상기 설명한 바와 같이, 이미지를 블록들로 분할하고, 블록들 각각에 대해 수행될 태스크들을 할당하며, 태스크 정보 및 태스크 데이터를 GPU (12) 에 송신할 수도 있다.
프로세서 (54) 의 예들은, DSP, 범용 마이크로프로세서, ASIC, FPGA, 또는 별개의 로직 회로에 통합된 다른 등가물을 포함하지만, 이들에 제한되지는 않는다. 저장 디바이스 (58) 는 하나 이상의 컴퓨터 판독가능 저장 매체를 포함할 수도 있다. 저장 디바이스 (58) 의 예들은 랜덤 액세스 메모리 (RAM), 판독 전용 메모리 (ROM), 전기적으로 소거가능한 프로그램가능 판독 전용 메모리 (EEPROM), CD-ROM 또는 다른 광 디스크 저장, 자기 디스크 저장, 또는 다른 자기 저장 디바이스들, 플래시 메모리, 또는 원하는 프로그램 코드를 명령들 또는 데이터 구조들의 형태로 운반 또는 저장하는데 사용될 수 있고 컴퓨터 또는 프로세서에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만, 이들에 제한되지는 않는다.
일부 양태들에서, 저장 디바이스 (58) 는 프로세서 (54) 및/또는 픽셀 값 프로세싱 유닛 (16) 으로 하여금, 본 개시물에서 프로세서 (54) 및 픽셀 값 프로세싱 유닛 (16) 에 부여된 기능들을 수행하도록 하는 명령들을 포함할 수도 있다. 따라서, 저장 디바이스 (58) 는 픽셀 값 프로세싱 유닛 (16) 으로 하여금, 다양한 기능들을 수행하도록 하는 명령들을 포함하는 컴퓨터 판독가능 저장 매체일 수도 있다.
저장 디바이스 (58) 는 일부 예들에서, 비일시적 저장 매체로 간주될 수도 있다. 용어 "비일시적 (non-transitory)" 은 저장 매체가 캐리어파 또는 전파된 신호로 구현되지 않는다는 것을 표시할 수도 있다. 그러나, 용어 "비일시적" 은 저장 디바이스 (58) 가 이동가능하지 않다는 것을 의미하는 것으로 해석되지 않아야 한다. 하나의 예로서, 저장 디바이스 (58) 는 디바이스 (52) 로부터 제거되고, 다른 디바이스로 이동될 수도 있다. 다른 예로서, 저장 디바이스 (58) 와 실질적으로 유사한 저장 디바이스가 디바이스 (52) 내에 삽입될 수도 있다. 소정의 예들에서, 비일시적 저장 매체는 (예를 들어, RAM 내에) 시간의 경과에 따라 변할 수 있는 데이터를 저장할 수도 있다.
사용자 인터페이스 (62) 의 예들은, 트랙볼, 마우스, 키보드, 및 다른 타입들의 입력 디바이스들을 포함하지만, 이들에 제한되지는 않는다. 사용자 인터페이스 (62) 는 또한 터치 스크린일 수도 있고, 스크린 (56) 의 일부로서 통합될 수도 있다. 트랜시버 모듈 (60) 은 디바이스 (52) 와 다른 디바이스 또는 네트워크 간에 무선 또는 유선 통신을 허용하기 위한 회로를 포함할 수도 있다. 트랜시버 모듈 (60) 은 변조기들, 복조기들, 증폭기들 및 유선 또는 무선 통신을 위한 다른 이러한 회로를 포함할 수도 있다. 카메라 (64) 는 이미지를 찍을 수 있는 임의의 타입의 카메라일 수도 있다. 카메라 (64) 는 디바이스 (52) 내에 형성될 수도 있고, 또는 디바이스 (52) 의 외부에 있고 디바이스 (52) 에 커플링될 수도 있다.
스크린 (56) 은 액정 디스플레이 (LCD), 음극선관 (CRT) 디스플레이, 유기 발광 다이오드 (OLED) 디스플레이, 플라즈마 디스플레이, 또는 다른 타입의 디스플레이 디바이스를 포함할 수도 있다. 스크린 (56) 은 2 차원 (2D) 픽셀 어레이에 수평으로 그리고 수직으로 배열된 복수의 픽셀들을 포함한다. 예를 들어, 스크린 (56) 은 수평으로 그리고 수직으로 배열된 640×480 픽셀들을 포함할 수도 있다.
도 6 은 픽셀 값 프로세싱 유닛 (16) 의 일 예의 동작을 예시하는 플로우차트이다. 단지 예시를 목적으로, 도 1 내지 도 4 가 참조된다.
픽셀 값 프로세싱 유닛 (16) 은 GPU (12) 로부터, GPU (12) 에 의해 프로세싱된 이미지 내의 하나 이상의 픽셀들에 대한 픽셀 값들을 포함하는 출력 스트림을 수신할 수도 있다 (66). 예를 들어, GPU (12) 는 프로세싱된 이미지 내의 하나 이상의 픽셀들에 대한 픽셀 값들을 포함하는 출력 스트림 (14) 을 발생하기 위해 이미지를 그래픽 프로세싱할 수도 있다. 예를 들어, GPU (12) 는 출력 스트림 (14) 을 발생하기 위해 도 2a 에 예시한 바와 같이 그래픽 파이프라인을 구현할 수도 있다. 다른 예로서, GPU (12) 는 상기 설명한 바와 같이 SIFT 를 구현할 수도 있다.
SIFT 에서, GPU (12) 는 프로세서 (54) 로부터 이미지를 수신할 수도 있다. GPU (12) 는 그 후 수신된 이미지를 상이한 로우 패스 대역폭들을 가진 로우 패스 필터들로 로우 패스 필터링하여 이미지의 스케일링된 버전들을 발생할 수도 있다. 일부 예에서, GPU (12) 는 이미지를 로우 패스 필터링하고 결과의 이미지들을 다운샘플링하여 이미지의 스케일링된 버전들을 발생할 수도 있다.
GPU (12) 는 그 후 이미지의 스케일링된 버전들 내의 키포인트 픽셀들을 식별할 수도 있다. 예를 들어, GPU (12) 는 이미지들의 스케일링된 버전의 쌍들 간의 차이를 결정할 수도 있다. GPU (12) 는 그 후 차이 이미지들 중 적어도 3 개의 공동 배치된 블록들 내의 루마 픽셀 값이 최대 루마 값이거나 또는 최소 루마 값 중 어느 하나인 픽셀들을 위치시킬 수도 있다. 최대 루마 값 또는 최소 루마 값을 가진 픽셀들은 키포인트 픽셀들일 수도 있다.
GPU (12) 의 외부에 있고 GPU (12) 에 커플링될 수도 있는 픽셀 값 프로세싱 유닛 (16) 은, 출력 스트림 (14) 내의 픽셀 값들이 추가 프로세싱을 요구하는 픽셀들에 대한 것인지 여부를 결정할 수도 있다 (68). 픽셀 값 프로세싱 유닛 (16) 은, 출력 스트림 (14) 내의 픽셀 값들이 추가 프로세싱을 요구하는 픽셀들에 대한 것인지 여부를 결정하기 위해 다양한 기준을 이용할 수도 있다. 예를 들어, SIFT 에서, 넌-키포인트 픽셀들에 대한 픽셀 값들은 널 값 또는 제로 값일 수도 있고, 키포인트 픽셀들에 대해서는 널 값 또는 제로 값이 아닌 다른 값일 수도 있다. 이 예에서, 픽셀 값 프로세싱 유닛 (16) 은 값들이 널 값 또는 제로 값이 아닌 픽셀들이 추가 프로세싱을 요구하는 픽셀들, 예를 들어, 키포인트 픽셀들일 수도 있다고 결정할 수도 있다. 일부 예들에서, 추가 프로세싱을 요구하지 않는 픽셀들에 대해, 픽셀 값 프로세싱 유닛 (16) 은 추가 프로세싱으로부터 그 픽셀들을 제거할 수도 있다.
버퍼 (18) 에 또한 커플링될 수도 있는 픽셀 값 프로세싱 유닛 (16) 은, 버퍼 (18) 에 추가 프로세싱을 요구하는 픽셀들에 대한 픽셀 값들을 저장할 수도 있다 (70). 예를 들어, 픽셀 값 프로세싱 유닛 (16) 은 추가 프로세싱이 요구되는 픽셀들에 대한 픽셀 값들을 저장하기 위한 장소에 대한 버퍼 (18) 내의 어드레스들을 발생할 수도 있다. 픽셀 값 프로세싱 유닛 (16) 은 그 후 어드레스들이 발생된 어드레스들에 대응하는 버퍼 (18) 의 저장 로케이션들에 추가 프로세싱을 요구하는 픽셀들에 대한 픽셀 값들을 저장할 수도 있다.
또한, 일부 예들에서, 픽셀 값 프로세싱 유닛 (16) 은 픽셀 값들이 추가 프로세싱을 요구하는 픽셀들에 대한 것인지 여부를 결정하고, 픽셀 값 프로세싱 유닛 (16) 의 단일 컴퓨테이션 패스 내에 이러한 픽셀 값들을 저장할 수도 있다. 예를 들어, 픽셀 값 프로세싱 유닛 (16) 은 픽셀 값 프로세싱 유닛 (16) 을 통하여 피드백하기 위해 픽셀 값들 중 임의의 값을 요구하지 않을 수도 있고, GPU (12) 로부터 버퍼 (18) 까지 직접 경로를 제공할 수도 있다. 또한, 픽셀 값 프로세싱 유닛 (16) 은 GPU (12) 와의 임의의 동기화를 요구하지 않을 수도 있다. 예를 들어, GPU (12) 는 GPU (12) 가 막 출력 스트림 (14) 을 송신하려고 한다는 것을 픽셀 값 프로세싱 유닛 (16) 에 표시할 필요 없이 출력 스트림 (14) 을 픽셀 값 프로세싱 유닛 (16) 에 송신가능할 수도 있다.
도 7 은 픽셀 값 프로세싱 유닛 (16) 의 다른 예의 동작을 예시하는 플로우차트이다. 단지 예시를 목적으로, 도 3 및 도 5 를 참조하게 된다.
픽셀 값 프로세싱 유닛 (16) 의 어드레스 발생기 (48) 는 프로세서 (54) 와 같은 프로세서로부터 동작 모드를 선택할 수도 있다 (72). 어드레스 발생기 (48) 는 그 후 수신된 동작 모드에 기초하여 추가 프로세싱을 요구하는 픽셀들에 대한 픽셀 값들이 버퍼 (18) 에 저장되는 어드레스들을 발생할 수도 있다.
예를 들어, 수신된 동작 모드는 선형 모드 및 블록 모드 중 적어도 하나의 모드일 수도 있다. 수신된 동작 모드가 선형 모드인 경우들에서, 어드레스 발생기 (48) 는 버퍼의 인접한 로우들 또는 컬럼들 내의 어드레스들을 발생할 수도 있다 (74). 수신된 동작 모드가 블록 모드인 경우들에서, 어드레스 발생기 (48) 는 버퍼 (18) 의 인접한 블록들 내의 어드레스들을 발생할 수도 있다 (76).
도 8 은 픽셀 값 프로세싱 유닛 (16) 의 다른 예의 동작을 예시하는 플로우차트이다. 단지 예시를 목적으로, 도 3 을 참조하게 된다.
카운터 (46) 는 버퍼 (18) 에 저장된 픽셀들의 수를 카운트할 수도 있다 (78). 예를 들어, 픽셀 값 프로세서 (44) 가 픽셀에 대한 픽셀 값들이 저장되어야 한다고 결정한 후, 카운터 (46) 는 픽셀에 대한 픽셀 값들이 버퍼 (18) 에 저장된다는 것을 표시하기 위해 카운터를 증분시킬 수도 있다. 카운터 (46) 는 픽셀 값들이 버퍼 (18) 에 저장되는 모든 픽셀에 대해 이 단계를 반복할 수도 있다.
GPU (12) 는 그 카운트에 기초하여 버퍼 (18) 에 저장된 픽셀 값들을 취출할 수도 있다 (80). 예를 들어, 카운터 (46) 는 현재 프로세싱 패스에서 버퍼 (18) 에 얼마나 많은 픽셀들이 저장되었는지를 표시할 수도 있다. GPU (12) 는 그 후 버퍼 (18) 에 저장된 픽셀들의 수에 대해 알고 있을 수도 있고, 추가 프로세싱을 요구하는 그 픽셀들에 대해서만 픽셀 값들을 취출할 수도 있다.
GPU (12) 는 그 후 취출된 픽셀 값들을 추가 프로세싱할 수도 있다 (82). 이 방식으로, GPU (12) 는 가변 데이터 레이트 프로세싱의 경우에도 그 고정된 데이터 레이트 프로세싱을 이용가능할 수도 있다. 이 예에서, GPU (12) 는 단지 추가 프로세싱을 요구하는 픽셀들에 대한 픽셀 값들만을 취출하고 추가 프로세싱을 요구하지 않는 픽셀들에 대한 픽셀 값들은 취출하지 않을 수도 있기 때문에, GPU (12) 는 추가 프로세싱을 요구하지 않는 픽셀들에 대한 픽셀 값들을 평가하여 컴퓨테이션 리소스들을 낭비하지 않을 수도 있다.
하나 이상의 예들에서, 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현된다면, 그 기능들은 비일시적 컴퓨터 판독가능 매체를 포함하는 제조품 (article of manufacture) 상에 하나 이상의 명령들 또는 코드로서 저장될 수도 있다. 컴퓨터 판독가능 매체는 컴퓨터 데이터 저장 매체를 포함할 수도 있다. 데이터 저장 디바이스는 본 개시물에 설명된 기법들의 구현을 위해 명령들, 코드 및/또는 데이터 구조들을 취출하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 이용가능한 매체일 수도 있다. 제한이 아닌 일 예로, 이러한 컴퓨터 판독가능 매체는 RAM ROM, EEPROM, CD-ROM 또는 다른 광 디스크 저장, 자기 디스크 저장, 또는 다른 자기 저장 디바이스들, 플래시 메모리, 또는 원하는 프로그램 코드를 명령들 또는 데이터 구조들의 형태로 운반 또는 저장하는데 사용될 수 있고 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 디스크 (disk) 및 디스크 (disc) 는, 여기에 사용한 바와 같이, 콤팩트 디스크 (CD), 레이저 디스크, 광 디스크, 디지털 다기능 디스크 (DVD), 플로피 디스크 및 블루-레이 디스크를 포함하며, 여기서 디스크 (disk) 들은 보통 데이터를 자기적으로 재생시키는 한편, 디스크 (disc) 들은 레이저를 이용하여 데이터를 광학적으로 재생시킨다. 상기의 조합들이 또한 컴퓨터 판독가능 매체의 범위 내에 포함되어야 한다.
코드는 하나 이상의 프로세서들, 이를 테면 하나 이상의 DSP들, 범용 마이크로프로세서들, ASIC들, FPGA들, 또는 다른 등가의 통합된 또는 별개의 로직 회로에 의해 실행될 수도 있다. 또한, 일부 예들에서, 여기에 설명된 기능성은 전용 하드웨어 및/또는 소프트웨어 모듈 내에 제공될 수도 있다. 또한, 그 기법들은 하나 이상의 회로들 또는 로직 엘리먼트들로 완전히 구현될 수 있다.
본 개시물의 기법들은 무선 핸드셋, 집적 회로 (IC), 또는 IC들의 세트 (예를 들어, 칩 세트) 를 포함하여, 광범위의 디바이스들 또는 장치들에서 구현될 수도 있다. 다양한 컴포넌트들, 모듈들, 또는 유닛들은 상기 개시된 기법들을 수행하도록 구성된 디바이스들의 기능적 양태들을 강조하기 위해 본 개시물에 설명되지만, 반드시 상이한 하드웨어 유닛들에 의한 실현을 요구하는 것은 아니다. 오히려, 상기 설명한 바와 같이, 다양한 유닛들은 하드웨어 유닛에 결합될 수도 있고 또는 적합한 소프트웨어 및/또는 펌웨어와 함께, 상기 설명한 바와 같은 하나 이상의 프로세서들을 포함하여, 상호운용적 하드웨어 유닛들의 컬렉션에 의해 제공될 수도 있다.
다양한 예들이 설명되어 있다. 이들 및 다른 예들은 다음의 특허청구의 범위 내에 있다.

Claims (42)

  1. 그래픽 프로세싱 유닛 (GPU) 에 커플링되고 상기 GPU 의 외부에 있는 고정된-기능 픽셀 값 프로세싱 유닛에 의해, 상기 GPU 로부터, 상기 GPU 에 의해 프로세싱된 이미지 내의 하나 이상의 픽셀들에 대한 픽셀 값들을 포함하는 출력 스트림을 수신하는 단계로서, 상기 고정된-기능 픽셀 값 프로세싱 유닛은 상기 GPU 로부터 상기 출력 스트림을 계속해서 수신할 준비가 되어 있고 상기 출력 스트림을 스케줄링하지 않고 프로세싱하는, 상기 출력 스트림을 수신하는 단계;
    상기 고정된-기능 픽셀 값 프로세싱 유닛에 의해, 상기 출력 스트림 내의 상기 픽셀 값들을 평가하는 단계;
    상기 고정된-기능 픽셀 값 프로세싱 유닛에 의해, 상기 출력 스트림 내의 상기 픽셀 값들의 평가에 기초하여, 어느 픽셀들이 상기 GPU 에 의한 추가 프로세싱을 요구하는지를 결정하는 단계; 및
    상기 고정된-기능 픽셀 값 프로세싱 유닛의 외부에 있고 상기 고정된-기능 픽셀 값 프로세싱 유닛에 커플링되는 버퍼에, 상기 GPU 에 의한 추가 프로세싱을 요구하는 상기 픽셀들에 대한 상기 픽셀 값들을 저장하는 단계를 포함하고,
    어느 픽셀들이 상기 GPU 에 의한 추가 프로세싱을 요구하는지를 결정하는 단계는, 상기 고정된-기능 픽셀 값 프로세싱 유닛의 단일 컴퓨테이션 사이클에서 그리고 상기 고정된-기능 픽셀 값 프로세싱 유닛과 상기 GPU 간의 동기화 없이, 어느 픽셀들이 상기 GPU 에 의한 추가 프로세싱을 요구하는지를 결정하는 단계를 포함하는, 방법.
  2. 삭제
  3. 제 1 항에 있어서,
    추가 프로세싱을 요구하는 것으로 결정된 상기 픽셀들에 대한 상기 픽셀 값들에 대한 상기 버퍼 내의 어드레스들을 발생하는 단계를 더 포함하며,
    상기 추가 프로세싱을 요구하는 상기 픽셀들에 대한 상기 픽셀 값들을 저장하는 단계는, 상기 버퍼의 발생된 상기 어드레스들에 추가 프로세싱을 요구하는 상기 픽셀들에 대한 상기 픽셀 값들을 저장하는 단계를 포함하는, 방법.
  4. 제 3 항에 있어서,
    동작 모드를 수신하는 단계를 더 포함하며,
    상기 버퍼 내의 어드레스들을 발생하는 단계는, 수신된 상기 동작 모드에 기초하여 상기 버퍼 내의 어드레스들을 발생하는 단계를 포함하는, 방법.
  5. 제 4 항에 있어서,
    상기 동작 모드는 선형 모드 및 블록 모드 중 적어도 하나를 포함하며,
    상기 버퍼 내의 어드레스들을 발생하는 단계는, 상기 동작 모드가 상기 선형 모드를 포함할 때 상기 버퍼의 인접한 로우들 또는 컬럼들 내의 어드레스들을 발생하는 단계를 포함하고,
    상기 버퍼 내의 어드레스들을 발생하는 단계는, 상기 동작 모드가 상기 블록 모드를 포함할 때 상기 버퍼의 인접한 블록들 내의 어드레스들을 발생하는 단계를 포함하는, 방법.
  6. 제 1 항에 있어서,
    픽셀 값들이 상기 버퍼에 저장되는 픽셀들의 수를 카운트하는 단계;
    카운트된 상기 픽셀들의 수에 기초하여 추가 프로세싱을 요구하는 상기 픽셀들에 대한 상기 픽셀 값들을 취출하는 단계; 및
    추가 프로세싱을 요구하는 상기 픽셀들에 대한 취출된 상기 픽셀 값들을 프로세싱하는 단계를 더 포함하는, 방법.
  7. 제 1 항에 있어서,
    상기 이미지의 스케일링된 버전들을 발생하는 단계; 및
    상기 이미지의 상기 스케일링된 버전들에 기초하여 키포인트 픽셀들을 식별하는 단계를 더 포함하며,
    어느 픽셀들이 추가 프로세싱을 요구하는지를 결정하는 단계는, 식별된 상기 키포인트 픽셀들이 추가 프로세싱을 요구한다고 결정하는 단계를 포함하고,
    상기 추가 프로세싱을 요구하는 상기 픽셀들에 대한 상기 픽셀 값들을 저장하는 단계는, 상기 버퍼에 식별된 상기 키포인트 픽셀들에 대한 상기 픽셀 값들을 저장하는 단계를 포함하는, 방법.
  8. 제 1 항에 있어서,
    상기 픽셀 값들은 좌표 값들 및 컬러 값들 중 적어도 하나를 포함하는, 방법.
  9. 제 1 항에 있어서,
    추가 프로세싱을 요구하지 않는 픽셀들에 대한 픽셀 값들을 추가 프로세싱으로부터 제거하는 단계를 더 포함하는, 방법.
  10. 제 1 항에 있어서,
    상기 GPU 에 의한 추가 프로세싱을 요구하지 않는 픽셀들에 대한 픽셀 값들을 상기 버퍼에 저장하지 않는 단계를 더 포함하는, 방법.
  11. 이미지를 프로세싱하여 프로세싱된 상기 이미지 내의 하나 이상의 픽셀들에 대한 픽셀 값들을 포함하는 출력 스트림을 발생하도록 구성된 그래픽 프로세싱 유닛 (GPU);
    버퍼; 및
    상기 GPU 의 외부에 있고, 상기 GPU 및 상기 버퍼에 커플링되는 고정된-기능 픽셀 값 프로세싱 유닛을 포함하고,
    상기 고정된-기능 픽셀 값 프로세싱 유닛은 :
    상기 출력 스트림을 수신하고;
    상기 출력 스트림 내의 상기 픽셀 값들의 평가에 기초하여, 어느 픽셀들이 상기 GPU 에 의한 추가 프로세싱을 요구하는지를 결정하고; 그리고
    상기 버퍼에 상기 GPU 에 의한 추가 프로세싱을 요구하는 상기 픽셀들에 대한 상기 픽셀 값들을 저장하도록 구성되고,
    상기 고정된-기능 픽셀 값 프로세싱 유닛은, 상기 GPU 로부터 상기 출력 스트림을 계속해서 수신할 준비가 되어 있고 상기 출력 스트림을 스케줄링하지 않고 프로세싱하고,
    상기 고정된-기능 픽셀 값 프로세싱 유닛은, 상기 고정된-기능 픽셀 값 프로세싱 유닛의 단일 컴퓨테이션 사이클에서 그리고 상기 고정된-기능 픽셀 값 프로세싱 유닛과 상기 GPU 간의 동기화 없이, 어느 픽셀들이 상기 GPU 에 의한 추가 프로세싱을 요구하는지를 결정하도록 구성되는, 장치.
  12. 삭제
  13. 제 11 항에 있어서,
    상기 고정된-기능 픽셀 값 프로세싱 유닛은 또한, 추가 프로세싱을 요구하는 것으로 결정된 상기 픽셀들에 대한 상기 픽셀 값들에 대한 상기 버퍼 내의 어드레스들을 발생하도록 구성되며,
    상기 고정된-기능 픽셀 값 프로세싱 유닛은 상기 버퍼의 발생된 상기 어드레스들에 프로세싱을 요구하는 상기 픽셀들에 대한 상기 픽셀 값들을 저장하는, 장치.
  14. 제 13 항에 있어서,
    상기 고정된-기능 픽셀 값 프로세싱 유닛은 또한, 동작 모드를 수신하도록 구성되며,
    상기 고정된-기능 픽셀 값 프로세싱 유닛은 수신된 상기 동작 모드에 기초하여 상기 버퍼 내의 상기 어드레스들을 발생하는, 장치.
  15. 제 14 항에 있어서,
    상기 동작 모드는 선형 모드 및 블록 모드 중 적어도 하나를 포함하며,
    상기 고정된-기능 픽셀 값 프로세싱 유닛은, 상기 동작 모드가 상기 선형 모드를 포함할 때 상기 버퍼의 인접한 로우들 또는 컬럼들 내의 어드레스들을 발생하고, 상기 동작 모드가 상기 블록 모드를 포함할 때 상기 버퍼의 인접한 블록들 내의 어드레스들을 발생하는, 장치.
  16. 제 11 항에 있어서,
    상기 고정된-기능 픽셀 값 프로세싱 유닛은 또한, 픽셀 값들이 상기 버퍼에 저장되는 픽셀들의 수를 카운트하도록 구성되며,
    상기 GPU 는 카운트된 상기 픽셀들의 수에 기초하여 상기 버퍼로부터 추가 프로세싱을 요구하는 상기 픽셀들에 대한 상기 픽셀 값들을 취출하고,
    상기 GPU 는 추가 프로세싱을 요구하는 상기 픽셀들에 대한 취출된 상기 픽셀 값들을 프로세싱하는, 장치.
  17. 제 11 항에 있어서,
    상기 GPU 는 또한, 상기 이미지의 스케일링된 버전들을 발생하고, 상기 이미지의 상기 스케일링된 버전들에 기초하여 키포인트 픽셀들을 식별하도록 구성되며,
    상기 고정된-기능 픽셀 값 프로세싱 유닛은, 식별된 상기 키포인트 픽셀들이 추가 프로세싱을 요구한다고 결정하고, 상기 버퍼에 식별된 상기 키포인트 픽셀들에 대한 상기 픽셀 값들을 저장하는, 장치.
  18. 제 11 항에 있어서,
    상기 픽셀 값들은 좌표 값들 및 컬러 값들 중 적어도 하나를 포함하는, 장치.
  19. 제 11 항에 있어서,
    상기 고정된-기능 픽셀 값 프로세싱 유닛은 또한, 추가 프로세싱을 요구하지 않는 픽셀들에 대한 픽셀 값들을 추가 프로세싱으로부터 제거하도록 구성되는, 장치.
  20. 제 11 항에 있어서,
    상기 고정된-기능 픽셀 값 프로세싱 유닛은, 단지 상기 출력 스트림 내의 상기 픽셀 값들을 평가하고, 어느 픽셀들이 추가 프로세싱을 요구하는지를 결정하고, 상기 버퍼에 추가 프로세싱을 요구하는 상기 픽셀들에 대한 상기 픽셀 값들을 저장하고, 추가 프로세싱을 요구하는 것으로 결정된 상기 픽셀들에 대한 상기 픽셀 값들에 대한 상기 버퍼 내의 어드레스들을 발생하며, 픽셀 값들이 상기 버퍼에 저장되는 픽셀들의 수를 카운트하도록 구성되는, 장치.
  21. 제 11 항에 있어서,
    상기 고정된-기능 픽셀 값 프로세싱 유닛은 또한, 상기 GPU 에 의한 추가 프로세싱을 요구하지 않는 픽셀들에 대한 픽셀 값들을 상기 버퍼에 저장하지 않도록 구성되는, 장치.
  22. 제 11 항에 있어서,
    상기 장치는 무선 통신 디바이스를 포함하는, 장치.
  23. 그래픽 프로세싱 유닛 (GPU);
    버퍼; 및
    상기 GPU 의 외부에 있고 상기 GPU 및 상기 버퍼에 커플링되는 고정된-기능 픽셀 값 프로세싱 유닛을 포함하며,
    상기 고정된-기능 픽셀 값 프로세싱 유닛은 :
    상기 GPU 로부터, 상기 GPU 에 의해 프로세싱된 이미지 내의 하나 이상의 픽셀들에 대한 픽셀 값들을 포함하는 출력 스트림을 수신하는 수단으로서, 상기 고정된-기능 픽셀 값 프로세싱 유닛의 상기 수신하는 수단은 상기 GPU 로부터 상기 출력 스트림을 계속해서 수신할 준비가 되어 있고 상기 출력 스트림을 스케줄링하지 않고 프로세싱하는, 상기 출력 스트림을 수신하는 수단;
    상기 출력 스트림 내의 상기 픽셀 값들을 평가하는 수단;
    상기 출력 스트림 내의 상기 픽셀 값들의 평가에 기초하여, 어느 픽셀들이 상기 GPU 에 의한 추가 프로세싱을 요구하는지를 결정하는 수단; 및
    상기 버퍼에, 상기 GPU 에 의한 추가 프로세싱을 요구하는 상기 픽셀들에 대한 상기 픽셀 값들을 저장하는 수단을 포함하고,
    상기 결정하는 수단은, 상기 고정된-기능 픽셀 값 프로세싱 유닛의 단일 컴퓨테이션 사이클에서 그리고 상기 고정된-기능 픽셀 값 프로세싱 유닛과 상기 GPU 간의 동기화 없이, 어느 픽셀들이 상기 GPU 에 의한 추가 프로세싱을 요구하는지를 결정하는, 장치.
  24. 삭제
  25. 제 23 항에 있어서,
    추가 프로세싱을 요구하는 것으로 결정된 상기 픽셀들에 대한 상기 픽셀 값들에 대한 상기 버퍼 내의 어드레스들을 발생하는 수단을 더 포함하며,
    상기 추가 프로세싱을 요구하는 상기 픽셀들에 대한 상기 픽셀 값들을 저장하는 수단은, 상기 버퍼의 발생된 상기 어드레스들에 추가 프로세싱을 요구하는 상기 픽셀들에 대한 상기 픽셀 값들을 저장하는 수단을 포함하는, 장치.
  26. 제 25 항에 있어서,
    동작 모드를 수신하는 수단을 더 포함하며,
    상기 버퍼 내의 어드레스들을 발생하는 수단은, 수신된 상기 동작 모드에 기초하여 상기 버퍼 내의 어드레스들을 발생하는 수단을 포함하는, 장치.
  27. 제 26 항에 있어서,
    상기 동작 모드는 선형 모드 및 블록 모드 중 적어도 하나를 포함하며,
    상기 버퍼 내의 어드레스들을 발생하는 수단은, 상기 동작 모드가 상기 선형 모드를 포함할 때 상기 버퍼의 인접한 로우들 또는 컬럼들 내의 어드레스들을 발생하는 수단을 포함하고,
    상기 버퍼 내의 어드레스들을 발생하는 수단은, 상기 동작 모드가 상기 블록 모드를 포함할 때 상기 버퍼의 인접한 블록들 내의 어드레스들을 발생하는 수단을 포함하는, 장치.
  28. 제 23 항에 있어서,
    픽셀 값들이 상기 버퍼에 저장되는 픽셀들의 수를 카운트하는 수단;
    카운트된 상기 픽셀들의 수에 기초하여 추가 프로세싱을 요구하는 상기 픽셀들에 대한 상기 픽셀 값들을 취출하는 수단; 및
    추가 프로세싱을 요구하는 상기 픽셀들에 대한 취출된 상기 픽셀 값들을 프로세싱하는 수단을 더 포함하는, 장치.
  29. 제 23 항에 있어서,
    상기 이미지의 스케일링된 버전들을 발생하는 수단; 및
    상기 이미지의 상기 스케일링된 버전들에 기초하여 키포인트 픽셀들을 식별하는 수단을 더 포함하며,
    어느 픽셀들이 추가 프로세싱을 요구하는지를 결정하는 수단은, 식별된 상기 키포인트 픽셀들이 추가 프로세싱을 요구한다고 결정하는 수단을 포함하고,
    상기 추가 프로세싱을 요구하는 상기 픽셀들에 대한 상기 픽셀 값들을 저장하는 수단은, 상기 버퍼에 식별된 상기 키포인트 픽셀들에 대한 상기 픽셀 값들을 저장하는 수단을 포함하는, 장치.
  30. 제 23 항에 있어서,
    상기 픽셀 값들은 좌표 값들 및 컬러 값들 중 적어도 하나를 포함하는, 장치.
  31. 제 23 항에 있어서,
    추가 프로세싱을 요구하지 않는 픽셀들에 대한 픽셀 값들을 추가 프로세싱으로부터 제거하는 수단을 더 포함하는, 장치.
  32. 제 23 항에 있어서,
    상기 GPU 에 의한 추가 프로세싱을 요구하지 않는 픽셀 값을 상기 버퍼에 저장하지 않는 수단을 더 포함하는, 장치.
  33. 제 23 항에 있어서,
    상기 장치는 무선 통신 디바이스를 포함하는, 장치.
  34. 삭제
  35. 삭제
  36. 삭제
  37. 삭제
  38. 삭제
  39. 삭제
  40. 삭제
  41. 삭제
  42. 삭제
KR1020137030011A 2011-04-13 2012-04-13 그래픽 프로세싱을 위한 픽셀 값 압축 KR101639852B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/085,855 US8854383B2 (en) 2011-04-13 2011-04-13 Pixel value compaction for graphics processing
US13/085,855 2011-04-13
PCT/US2012/033650 WO2012142505A2 (en) 2011-04-13 2012-04-13 Pixel value compaction for graphics processing

Publications (2)

Publication Number Publication Date
KR20140006061A KR20140006061A (ko) 2014-01-15
KR101639852B1 true KR101639852B1 (ko) 2016-07-14

Family

ID=46022696

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137030011A KR101639852B1 (ko) 2011-04-13 2012-04-13 그래픽 프로세싱을 위한 픽셀 값 압축

Country Status (6)

Country Link
US (1) US8854383B2 (ko)
EP (1) EP2697778B1 (ko)
JP (1) JP5714771B2 (ko)
KR (1) KR101639852B1 (ko)
CN (1) CN103460253B (ko)
WO (1) WO2012142505A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11336905B2 (en) 2019-01-14 2022-05-17 Samsung Electronics Co., Ltd. Storing index information for pixel combinations with similarity to a pixel to replace the pixel information

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140267327A1 (en) 2013-03-14 2014-09-18 Microsoft Corporation Graphics Processing using Multiple Primitives
US9292898B2 (en) * 2013-03-15 2016-03-22 Intel Corporation Conditional end of thread mechanism
US9612949B2 (en) * 2013-06-13 2017-04-04 Arm Limited Memory allocation in a multi-core processing system based on a threshold amount of memory
CN103400338A (zh) * 2013-07-25 2013-11-20 天津大学 嵌入式gpu中面积有效、功能复用的裁剪方法及模块
KR101569093B1 (ko) * 2013-08-13 2015-11-13 삼성에스디에스 주식회사 분산 시스템에서 데이터를 처리하는 방법
KR102276914B1 (ko) 2013-10-24 2021-07-13 삼성전자주식회사 비디오 인코딩 장치 그리고 이의 구동 방법
US9659341B2 (en) * 2014-06-25 2017-05-23 Qualcomm Incorporated Texture pipe as an image processing engine
US10853625B2 (en) 2015-03-21 2020-12-01 Mine One Gmbh Facial signature methods, systems and software
US10551913B2 (en) 2015-03-21 2020-02-04 Mine One Gmbh Virtual 3D methods, systems and software
US9830082B1 (en) 2015-09-08 2017-11-28 EMC IP Holding Company LLC Hybrid hyper-converged infrastructure and storage appliance
US9778865B1 (en) * 2015-09-08 2017-10-03 EMC IP Holding Company LLC Hyper-converged infrastructure based on server pairs
US9959661B2 (en) 2015-12-02 2018-05-01 Samsung Electronics Co., Ltd. Method and device for processing graphics data in graphics processing unit
KR102636101B1 (ko) * 2015-12-02 2024-02-13 삼성전자주식회사 Gpu에서 그래픽 데이터 처리 방법 및 장치
US10110846B2 (en) 2016-02-03 2018-10-23 Sharp Laboratories Of America, Inc. Computationally efficient frame rate conversion system
US11069021B2 (en) * 2016-07-02 2021-07-20 Intel Corporation Mechanism for providing multiple screen regions on a high resolution display
US10540318B2 (en) * 2017-04-09 2020-01-21 Intel Corporation Graphics processing integrated circuit package
US11055807B2 (en) 2017-06-12 2021-07-06 Apple Inc. Method and system for a transactional based display pipeline to interface with graphics processing units
CN108540534A (zh) * 2018-03-16 2018-09-14 青岛海信移动通信技术股份有限公司 一种终端全屏区域的确定方法及装置
US11074724B2 (en) * 2018-12-07 2021-07-27 Microsoft Technology Licensing Llc GPU calculation of signed distance fields
US11212425B2 (en) * 2019-09-16 2021-12-28 Gopro, Inc. Method and apparatus for partial correction of images

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090113303A1 (en) * 2007-10-31 2009-04-30 Microsoft Corporation Analyzing video game performance using non-intrusive capture and storage of run-time game data
US20090284538A1 (en) * 2008-05-16 2009-11-19 Asustek Computer Inc. Video streaming data processing method

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6310289A (ja) 1986-07-01 1988-01-16 Matsushita Electric Ind Co Ltd 画像生成装置
US4837563A (en) * 1987-02-12 1989-06-06 International Business Machine Corporation Graphics display system function circuit
JP3227086B2 (ja) * 1996-02-01 2001-11-12 基弘 栗須 テレビオンスクリーン表示装置
JP4399910B2 (ja) * 1998-09-10 2010-01-20 株式会社セガ ブレンディング処理を含む画像処理装置及びその方法
JP2004240910A (ja) * 2003-02-10 2004-08-26 Toshiba Corp 画像処理装置および画像処理方法
WO2004109595A2 (en) 2003-05-22 2004-12-16 Lee, Jin, H. Method for doubling resolution lcd display using line doubling and non-linear interpolation curve
US20040257374A1 (en) * 2003-06-18 2004-12-23 Mcgowan James William Method and apparatus for the efficient representation of block-based images
JP4637640B2 (ja) * 2005-05-16 2011-02-23 三菱電機株式会社 図形描画装置
KR100703709B1 (ko) * 2005-06-02 2007-04-06 삼성전자주식회사 그래픽스 처리장치와 처리방법, 및 그 기록 매체
JP5170961B2 (ja) 2006-02-01 2013-03-27 ソニー株式会社 画像処理システム、画像処理装置および方法、プログラム、並びに記録媒体
JP2007328581A (ja) * 2006-06-08 2007-12-20 Toshiba Corp 画像処理装置及びシェーダ装置
US20080030510A1 (en) * 2006-08-02 2008-02-07 Xgi Technology Inc. Multi-GPU rendering system
US7724260B2 (en) * 2006-08-25 2010-05-25 Honeywell International Inc. Method and system for image monitoring
GB0625455D0 (en) 2006-12-20 2007-01-31 Mitsubishi Electric Inf Tech Graph-based multiple panorama extraction from unordered image sets
US8203564B2 (en) * 2007-02-16 2012-06-19 Qualcomm Incorporated Efficient 2-D and 3-D graphics processing
JP5132419B2 (ja) * 2008-05-20 2013-01-30 富士フイルム株式会社 内視鏡システム及びオプション基板
US8233716B2 (en) * 2008-06-27 2012-07-31 Palo Alto Research Center Incorporated System and method for finding stable keypoints in a picture image using localized scale space properties
JP5151946B2 (ja) * 2008-12-09 2013-02-27 富士通株式会社 描画装置
US8436854B2 (en) * 2009-05-29 2013-05-07 Qualcomm Incorporated Graphics processing unit with deferred vertex shading

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090113303A1 (en) * 2007-10-31 2009-04-30 Microsoft Corporation Analyzing video game performance using non-intrusive capture and storage of run-time game data
US20090284538A1 (en) * 2008-05-16 2009-11-19 Asustek Computer Inc. Video streaming data processing method

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11336905B2 (en) 2019-01-14 2022-05-17 Samsung Electronics Co., Ltd. Storing index information for pixel combinations with similarity to a pixel to replace the pixel information

Also Published As

Publication number Publication date
JP5714771B2 (ja) 2015-05-07
WO2012142505A3 (en) 2013-01-03
KR20140006061A (ko) 2014-01-15
CN103460253A (zh) 2013-12-18
EP2697778B1 (en) 2018-09-26
US8854383B2 (en) 2014-10-07
JP2014515856A (ja) 2014-07-03
WO2012142505A2 (en) 2012-10-18
US20120262493A1 (en) 2012-10-18
CN103460253B (zh) 2016-08-24
EP2697778A2 (en) 2014-02-19

Similar Documents

Publication Publication Date Title
KR101639852B1 (ko) 그래픽 프로세싱을 위한 픽셀 값 압축
US9928642B2 (en) Using a geometry shader for variable input and output algorithms
KR102475212B1 (ko) 타일식 아키텍처들에서의 포비티드 렌더링
RU2677584C1 (ru) Использование межкадровой когерентности в архитектуре построения изображений с сортировкой примитивов на промежуточном этапе
US8866821B2 (en) Depth map movement tracking via optical flow and velocity prediction
US9013479B2 (en) Apparatus and method for tile-based rendering
US7483035B2 (en) Texture cache control using a data dependent slot selection scheme
TW200818054A (en) Tile based precision rasterization in graphics pipeline
CN104169974A (zh) 图形处理单元中基于可见性的状态更新
CN108322722B (zh) 基于增强现实的图像处理方法、装置及电子设备
CN109885407B (zh) 数据处理方法和装置、电子设备、存储介质
US8704842B1 (en) System and method for histogram computation using a graphics processing unit
KR20180056316A (ko) 타일-기반 렌더링을 수행하는 방법 및 장치
US20240185502A1 (en) Efficient real-time shadow rendering
TWI544780B (zh) 3d格式轉換系統和方法
US8786616B2 (en) Parallel processing for distance transforms
KR101499124B1 (ko) 공유 메모리를 이용한 영상 처리 방법 및 장치
JP2023530306A (ja) デルタトリプレットインデックス圧縮
CN117237502A (zh) 一种三维渲染方法、装置、设备及介质
JP2016527631A (ja) グラフィックス処理ユニットを用いたヒストグラム計算のシステム及び方法
CN115511886B (zh) 利用gpu实现远程目标统计的方法、装置及存储介质
US20230377086A1 (en) Pipeline delay elimination with parallel two level primitive batch binning
US20230298261A1 (en) Distributed visibility stream generation for coarse grain binning
JP2023518865A (ja) 機械学習される画像コンバートのためのシステムおよび方法
CN115619631A (zh) 图数据的处理方法、装置、电子设备及存储介质

Legal Events

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

Payment date: 20190624

Year of fee payment: 4