KR101609079B1 - 그래픽 프로세싱 유닛에서의 명령 선별 - Google Patents

그래픽 프로세싱 유닛에서의 명령 선별 Download PDF

Info

Publication number
KR101609079B1
KR101609079B1 KR1020147003584A KR20147003584A KR101609079B1 KR 101609079 B1 KR101609079 B1 KR 101609079B1 KR 1020147003584 A KR1020147003584 A KR 1020147003584A KR 20147003584 A KR20147003584 A KR 20147003584A KR 101609079 B1 KR101609079 B1 KR 101609079B1
Authority
KR
South Korea
Prior art keywords
gpu
kernels
work
kernel
workgroup
Prior art date
Application number
KR1020147003584A
Other languages
English (en)
Other versions
KR20140035522A (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 KR20140035522A publication Critical patent/KR20140035522A/ko
Application granted granted Critical
Publication of KR101609079B1 publication Critical patent/KR101609079B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues

Abstract

본 개시물의 양태들은 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 방법에 관한 것이다. 일부 양태에 따르면, 이 방법은, GPU 의 셰이더 프로세서에 의해 제 1 워크 아이템을 실행하는 단계를 포함하고, 제 1 워크 아이템은 입력 데이터를 프로세싱하기 위한 하나 이상의 명령들을 포함한다. 또한, 이 방법은, 제 1 워크 아이템의 결과에 기초하여 하나 이상의 값들을 발생시키는 단계를 포함하고, 하나 이상의 값들은 결과의 하나 이상의 특성들을 나타낸다. 또한, 이 방법은, 하나 이상의 값들에 기초하여 제 2 워크 아이템을 실행할지 여부를 결정하는 단계를 포함하고, 제 2 워크 아이템은, 입력 데이터를 프로세싱하기 위한, 제 1 워크 아이템의 하나 이상의 명령들과는 상이한 하나 이상의 명령들을 포함한다.

Description

그래픽 프로세싱 유닛에서의 명령 선별{INSTRUCTION CULLING IN GRAPHICS PROCESSING UNIT}
본 개시물의 양태들은 그래픽 프로세싱 유닛 (graphics processing unit; GPU) 을 이용하여 데이터를 프로세싱하는 것에 관한 것이다.
그래픽 프로세싱 디바이스들은 다양한 이미지 프로세싱 또는 다른 범용 프로세싱 애플리케이션들을 수행하도록 구현될 수도 있다. 예를 들어, 때때로 범용 그래픽 프로세싱 유닛 (general purpose graphics processing unit; GPGPU) 이라고 지칭되는 그래픽 프로세싱 유닛 (GPU) 은, 높은 정도의 병행성으로부터 이익을 얻는 애플리케이션들, 예컨대, 컬러 정정 알고리즘들, 안면 검출 알고리즘들, 패턴 인식 알고리즘들, 증강 현실 애플리케이션들, 다양한 알고리즘 애플리케이션들 (예를 들어, 웨이블릿 변환들, 푸리에 변환들 등), 또는 다양한 다른 애플리케이션들을 실행할 수도 있다.
일반적으로, GPU들은 GPU 에 상주하는 하나 이상의 셰이더 프로세서 (shader processor) 들을 이용하여 일련의 명령들을 프로세싱하도록 설계되고, 이러한 일련의 명령들은 셰이더 명령들이라고 지칭될 수도 있다. 일 예시적인 이미지 프로세싱 애플리케이션에서, 셰이더 명령들은 이미지를 형성하는 픽셀들에 대해 셰이더 프로세서들에 의해 수행되는 하나 이상의 수리적 동작들을 정의할 수도 있다. 셰이더 명령을 픽셀에 적용함으로써, 셰이더 명령에 의해 정의되는 수리적 동작에 따라 픽셀 값이 변경 또는 평가된다.
셰이더 명령들은 커널 (kernel) 이라고 알려진 셰이더 프로그램 코드로 조직화될 수도 있다. 커널은 GPU 에 의해 수행되는 기능 또는 태스크 (task) 를 정의할 수도 있다. 커널을 실행하기 위해, 그 프로그램 코드는 워크 아이템 (work item) 들 (예를 들어, GPU 에서의 워크의 기본 단위) 로 분할되고, 이 워크 아이템들은 하나 이상의 워크그룹 (workgroup) 들 (예를 들어, 워크 아이템들의 세트) 로 조직화된다.
일반적으로, 본 개시물의 양태들은, GPU 에 의한 실행을 위해 관련없는 셰이더 명령들을 식별하고, 그 관련없는 명령들이 실행되는 것을 방지하는 것에 관한 것이다. 그 관련없는 명령들이 실행되는 것을 방지하기 위해, 관련없는 명령들은, 이들이 실행되기 전에, 명령들의 세트로부터 "선별될 (culled)" 수도 있거나, 또는 삭제될 수도 있다. 일부 양태에 따르면, GPU 는 명령 선별을 수행하도록 선별 버퍼를 구현할 수도 있다. 예를 들어, 명령을 실행한 후에, GPU 는 후속 명령의 (예를 들어, 관련성 특성과 같은) 하나 이상의 특성들을 나타내는 하나 이상의 값들을 저장할 수도 있다. GPU 는 이 저장된 값들을 이용하여, 명령이 실행되기 전에 후속 명령을 삭제할지 여부를 결정할 수 있다.
하나의 예에서, 본 개시물의 양태들은 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 방법에 관한 것이다. 일부 양태에 따르면, 이 방법은, GPU 의 셰이더 프로세서에 의해 제 1 워크 아이템을 실행하는 단계를 포함하고, 제 1 워크 아이템은 입력 데이터를 프로세싱하기 위한 하나 이상의 명령들을 포함한다. 또한, 이 방법은, 제 1 워크 아이템의 결과에 기초하여 하나 이상의 값들을 발생시키는 단계를 포함하고, 하나 이상의 값들은 결과의 하나 이상의 특성들을 나타낸다. 또한, 이 방법은, 하나 이상의 값들에 기초하여 제 2 워크 아이템을 실행할지 여부를 결정하는 단계를 포함하고, 제 2 워크 아이템은, 입력 데이터를 프로세싱하기 위한, 제 1 워크 아이템의 하나 이상의 명령들과는 상이한 하나 이상의 명령들을 포함한다.
또 다른 예에서, 본 개시물의 양태들은, 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 장치에 관한 것이다. 이 장치는, 입력 데이터를 프로세싱하기 위한 하나 이상의 명령들을 포함하는 제 1 워크 아이템을 실행하고, 제 1 명령의 결과에 기초하여 하나 이상의 값들을 발생시키도록 구성된 셰이더 프로세서를 포함하고, 하나 이상의 값들은 결과의 하나 이상의 특성들을 나타낸다. 또한, 이 장치는, 하나 이상의 값들에 기초하여, 제 1 워크 아이템의 하나 이상의 명령들과는 상이한 하나 이상의 명령들을 포함하는 제 2 워크 아이템을 실행할지 여부를 결정하도록 구성된 선별 모듈을 포함한다.
또 다른 예에서, 본 개시물의 양태들은, 명령들로 인코딩되는 컴퓨터 판독가능 저장 매체에 관한 것으로, 이 명령들은, 컴퓨팅 디바이스의 하나 이상의 프로그램가능 프로세서들로 하여금, 제 1 워크 아이템을 실행하게 하는 것으로서, 제 1 워크 아이템은 입력 데이터를 프로세싱하기 위한 하나 이상의 명령들을 포함하는, 그 제 1 워크 아이템을 실행하게 하고, 제 1 워크 아이템의 결과에 기초하여 하나 이상의 값들을 발생시키게 하는 것으로서, 하나 이상의 값들은 결과의 하나 이상의 특성들을 나타내는, 그 하나 이상의 값들을 발생시키게 한다. 또한, 컴퓨터 판독가능 저장 매체는, 컴퓨팅 디바이스의 하나 이상의 프로그램가능 프로세서들로 하여금, 하나 이상의 값들에 기초하여 제 2 워크 아이템을 실행할지 여부를 결정하게 하는 명령들로 인코딩되고, 제 2 워크 아이템은, 입력 데이터를 프로세싱하기 위한, 제 1 워크 아이템과는 상이한 하나 이상의 명령들을 포함한다.
또 다른 예에서, 본 개시물의 양태들은, 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 장치에 관한 것이다. 이 장치는, 제 1 워크 아이템을 실행하는 수단을 포함하고, 제 1 워크 아이템은 입력 데이터를 프로세싱하기 위한 하나 이상의 명령들을 포함한다. 또한, 이 장치는, 제 1 워크 아이템의 결과에 기초하여 하나 이상의 값들을 발생시키는 수단을 포함하고, 하나 이상의 값들은 결과의 하나 이상의 특성들을 나타낸다. 또한, 이 장치는, 하나 이상의 값들에 기초하여 제 2 워크 아이템을 실행할지 여부를 결정하는 수단을 포함하고, 제 2 워크 아이템은, 입력 데이터를 프로세싱하기 위한, 제 1 워크 아이템과는 상이한 하나 이상의 명령들을 포함한다.
본 개시물의 하나 이상의 예들의 세부 사항들이 첨부 도면들 및 아래의 상세한 설명에 제시된다. 본 개시물의 다른 특징들, 목적들, 및 이점들은 상세한 설명 및 도면들로부터, 그리고 청구항들로부터 명백해질 것이다.
도 1 은, 본 개시물의 양태들에 따라 관련없는 명령들을 식별 및 선별하기 위한 기법들을 구현할 수도 있는 컴퓨팅 디바이스를 예시한 블록 다이어그램이다.
도 2 는, 본 개시물의 양태들에 따라 명령 선별을 위한 기법들을 수행하도록 구성될 수도 있는, 도 1 에 도시된 GPU 를 더 상세히 예시한 블록 다이어그램이다.
도 3 은, 본 개시물의 양태들에 따른, 워크그룹과 연관된 워크 아이템들의 그리드 (grid) 를 예시한 블록 다이어그램이다.
도 4 는, 본 개시물의 양태들에 따른, 3개의 커널들의 배열에서의 워크그룹들의 그리드들을 예시한 블록 다이어그램이다.
도 5a 는, 본 개시물의 양태들에 따른, 이미지를 프로세싱하기 위한 제 1 커널을 예시한 블록 다이어그램이다.
도 5b 는, 본 개시물의 양태들에 따른, 도 5a 에 도시된 이미지를 프로세싱하기 위한 제 2 커널에서의 명령 선별을 예시한 블록 다이어그램이다.
도 5c 는, 본 개시물의 양태들에 따른, 도 5a 에 도시된 이미지를 프로세싱하기 위한 제 3 커널에서의 명령 선별을 예시한 블록 다이어그램이다.
도 6 은, 본 개시물의 양태들에 따른, 명령들을 선별하는 방법을 예시한 플로우 차트이다.
도 7 은, 본 개시물의 양태들에 따른, 명령들을 선별하도록 구현될 수도 있는 명령 플로우를 예시한 플로우 차트이다.
본 개시물의 양태들은 일반적으로, 범용 그래픽 프로세싱 유닛 (general purpose graphics processing unit; "GPGPU") 으로서 구현될 수도 있는 그래픽 프로세싱 유닛 (graphics processing unit; "GPU") 의 효율을 증가시키는 것에 관한 것이다. 일반적으로, GPU 는, 계산들을 수행하기 위한 복수의 셰이더 프로세서 (shader processor; "SP") 들을 포함한다. 이 계산들은, (여기서 "커널 (kernel) 들" 이라고 지칭되는) 하나 이상의 셰이더 프로그램들을 포함하는 GPGPU 애플리케이션에서 구조화될 수도 있다. 커널들은, 다양한 입력 데이터를 분석 또는 변경하도록 구현될 수 있는 기능들을 정의한다. 예들로는, 비교적 큰 수치 데이터 세트들을 병렬로 프로세싱하기 위한 기능들을 포함한다. 이미지 프로세싱 맥락에서, 기능들은, 예를 들어, 컬러 정정 알고리즘들, 안면 검출 알고리즘들, 또는 증강 현실 애플리케이션들을 수행하기 위한 기능들을 포함할 수도 있다. 다른 예들로는, 변환 기능들, 광선 추적을 위한 기능들, 또는 다양한 다른 기능들을 포함한다.
커널들은, 워크그룹 (workgroup) 들로 그룹화될 수도 있는 개개의 워크 아이템 (work item) 들 (예를 들어, GPU 에서의 워크의 기본 단위) 로 이루어진다. GPU 가 이미지 (예를 들어, 비디오 데이터의 프레임, 컴퓨터-발생된 그래픽 이미지, 스틸 이미지 등) 를 프로세싱하도록 구현되는 예에서, 워크 아이템들은, 이미지의 픽셀들을 분석 또는 변경하기 위한 기능을 정의하는 하나 이상의 명령들을 포함할 수도 있다. 또한, 복수의 워크 아이템들은, 이미지의 픽셀들의 그룹을 분석 또는 변경하기 위한 워크그룹들 (예를 들어, 워크 아이템들의 세트) 로 조직화될 수 있다.
일부 애플리케이션은 동일한 입력 데이터에 대해 다수의 기능들을 수행하기 위한 다수의 커널들을 포함할 수도 있다. 또한, 다수의 커널들을 갖는 애플리케이션들은, 다른 커널들에 의존하는 일부 커널을 포함할 수도 있다. 예를 들어, 애플리케이션은 2개의 커널들을 포함할 수도 있는데, 제 2 커널은 제 1 커널의 결과들에 의존한다. 이에 따라, 일부 예에서, 커널의 결과들은 후속 커널의 결과들을 "관련없게" 만들 수도 있다. 여기에 설명되는 바와 같이, "관련없는 명령" 은 애플리케이션의 목적을 증진시키지 않는 명령일 수도 있다. 다르게 말하면, "관련없는" 명령은, 애플리케이션의 결과를 변경하지 않거나, 또는 애플리케이션의 결과를 고려하지 않는 명령일 수도 있다.
단순한 예에서, 애플리케이션은 데이터세트 [x, y, z] 에서 피처 (feature) 를 식별하기 위한 2개의 커널들을 포함한다. 제 1 커널 및 제 2 커널 각각은 3개의 명령들을 가지며, 이 명령들은, 각각 [x, y, z] 와 연관된 3개의 별개의 워크 아이템들에서 정의될 수도 있다. 이 3개의 명령들은, 이 피처가 명령을 실행하는 것으로 식별되는 경우에는 "참" 으로 평가하고 또는 이 피처가 명령을 실행하는 것으로 식별되지 않는 경우에는 "거짓" 으로 평가한다. 또한, 제 2 커널은 제 1 커널의 결과들에 의존한다. 예를 들어, 제 2 커널의 명령들이 "참" 으로 평가하는 제 1 커널의 명령들에 의존하도록, 양쪽 커널들의 명령들은 피처를 식별하기 위해 "참" 으로 평가해야 한다. 제 1 커널을 실행한 후에, GPU 는 원하는 피처가 "x" 및 "y" 에 포함될 수도 있지만 "z" 에는 포함되지 않을 수도 있는 것으로 결정한다. 그 후에, "z" 에 관련된 제 2 커널의 명령은 애플리케이션의 결과와 관련없다. 예를 들어, "z" 에 관련된 제 2 명령이 "참" 으로 평가하는 경우라도, 이 명령은 제 1 커널에게 이미 쓸모가 없기 때문에, "z" 에 관련된 제 2 명령은 애플리케이션의 결과를 고려하지 않는다. 제 1 커널에서 "z" 와 연관된 명령은 원하는 피처를 식별하지 않았다. 이러한 예시적인 애플리케이션에서, 제 2 커널은 개개의 관련없는 명령 (예를 들어, 워크 아이템) 을 포함하여, 이 커널의 오직 일 부분만이 관련없고 이 커널의 나머지가 결과와 관련될 수도 있다.
일부 상황에서, 2개 이상의 관련없는 명령을 갖는 커널은 "스파스 (sparse)" 한 것으로서 설명될 수도 있다. 예를 들어, "스파스" 커널은, 많은 관련없는 명령들에 의해 분리되는 관련있는 명령들을 포함할 수도 있다. 통상적으로, GPU 는, 명령의 관련성과 상관없이, 실행을 위해 모든 명령들 (예를 들어, 커널들의 워크 아이템들 및 워크그룹들) 을 셰이더 프로세서 (SP) 들에게 분배한다. 예를 들어, GPU 는 일반적으로 관련없는 명령들을 식별하는 메커니즘을 포함하지 않는다. 이에 따라, GPU 의 SP들은 통상적으로, 워크그룹 또는 워크 아이템의 관련성과 상관없이, 커널의 모든 워크그룹들 및 워크 아이템들을 실행해야 한다. GPU 의 SP들이 관련없는 명령들을 실행하는 것으로 차지되어 GPU 프로세싱 전력을 소모시키기 때문에, 스파스 커널들을 실행하는 것은 GPU 성능을 손상시킬 수도 있다.
본 개시물의 양태들은 적어도 일부의 관련없는 명령들의 실행을 피하는 것에 의해 GPU 의 SP들의 효율 및 활용을 증가시키는 것에 관한 것이다. 일부 예에서, GPU 는 관련없는 명령들을 식별하고, 그 관련없는 명령들이 GPU 의 SP들에 의해 프로세싱되는 것을 방지한다. 즉, GPU 는, 하나 이상의 개개의 명령들을 포함할 수도 있는 GPU 에서의 워크의 기본 단위 (예를 들어, 실행가능 코드) 인 관련없는 워크 아이템들을 식별할 수도 있고, 이 관련없는 워크 아이템들이 GPU 의 SP들에 의해 프로세싱되는 것을 방지할 수도 있다. 관련없는 워크 아이템들이 프로세싱되는 것을 방지하기 위해, GPU 는 그 관련없는 워크 아이템들이 실행되기 전에 관련없는 워크 아이템들을 "선별 (cull)", 또는 삭제할 수도 있다. 일부 양태에 따르면, GPU 는 선별을 수행하는 선별 버퍼를 구현할 수도 있다. 예를 들어, 선별 버퍼는 워크 아이템이 실행될 수 있기 전에 GPU 가 워크 아이템을 삭제할지 여부를 결정하기 위해 이용할 수 있는 하나 이상의 값들을 보유할 수도 있다.
일반적으로, 용어들 "워크 아이템" 및 "명령" 은 상호교환가능하게 사용될 수도 있다. 일반적으로, 본 개시물은, 명령을, 입력 데이터를 프로세싱하기 위한 기능의 적어도 일 부분으로서 설명한다. 일반적으로, 본 개시물은, 워크 아이템을, 하나 이상의 개개의 명령들을 포함할 수도 있는 GPU 에 대한 워크의 기본 단위 (예를 들어, 실행가능 코드의 기본 단위) 로서 지칭한다. 따라서, 용어 "워크 아이템" 은, 입력 데이터를 프로세싱하기 위한 기능을 정의하는 하나 이상의 명령들을 총칭적으로 지칭한다는 것을 이해해야 한다. 또한, "워크 아이템" 은 컴퓨트 유니파이드 디바이스 아키텍처 (Compute Unified Device Architecture) (NVIDIA Corporation 에 의해 개발된 "CUDA", 2010년 9월 17일자로 공개된 버전 3.2) 에서 "스레드" 로 지칭될 수도 있다.
GPU 는 실행을 위해 명령들을 조직화하여 이 명령들을 SP들에게 분배하기 전에 명령들의 세트로부터 관련없는 명령들을 선별할 수도 있다. 관련없는 명령들이 SP들에게 분배되어 SP들에 의해 프로세싱될 수 있기 전에 그 관련없는 명령들을 선별하는 것은, SP들이 관련없는 명령들을 실행하는 것으로 차지되지 않기 때문에, GPU 의 효율을 증가시키는 것을 도울 수도 있다. 또한, 관련없는 명령들의 선별시, GPU 는 관련없는 명령들을 조직화하고 분배하는 것을 위한 리소스들을 쓰지 않는다. 오히려, GPU 는 관련있는 명령들을 SP들에게 분배하는 것이 가능하여, 관련있는 명령들을 연속적으로 실행하는 것이 가능해진다.
본 개시물의 양태들에 따르면, GPU 는 명령 선별을 수행하도록 선별 버퍼를 구현할 수도 있다. 선별 버퍼는 실행된 명령의 특성을 나타내는 하나 이상의 값들을 저장할 수도 있다. 그 특성은 후속 명령이 관련있는지 또는 관련없는지 여부를 결정하기 위해 이용될 수 있다. 예를 들어, GPU 는 2개의 커널들을 갖는 애플리케이션을 실행할 수도 있다. 제 1 커널을 실행하는 동안, GPU 는 제 1 커널과 연관된 명령들의 결과들에 기초하여, 제 2 커널의 명령들이 관련있는지 여부를 나타내는 하나 이상의 값들을 선별 버퍼에 저장할 수도 있다. 제 2 커널의 하나 이상의 명령들이 관련있는 것이 아닌 경우, GPU 는 관련없는 명령들이 SP들에 의해 실행되는 것을 방지할 수도 있다. 예를 들어, 명령들을 조직화하여 이 명령들을 SP들에게 분배하는 것을 담당하는 GPU 의 컴포넌트는, 선별 버퍼에 저장된 값들에 기초하여, 관련없는 명령들을 선별할 수도 있다.
따라서, 일반적으로, 본 개시물의 기법들은 2개 이상의 커널을 이용하여 입력 데이터를 프로세싱하기 위한 애플리케이션을 실행하는 것을 포함한다. 제 1 커널의 워크 아이템들 및 워크그룹들의 실행시, GPU 는 제 2 커널의 워크 아이템들 및 워크그룹들이 관련있는지 여부를 나타내는 선별 버퍼 값들을 설정할 수도 있다. 즉, GPU 는, 제 1 커널의 결과들에 기초하여, 제 1 커널의 워크 아이템들 및 워크그룹들 각각의 동일한 입력 데이터와 연관된 제 2 커널의 각각의 워크 아이템들 및 워크그룹들이 관련있는지 여부를 나타내는 선별 버퍼 값들을 설정할 수도 있다. 따라서, 제 1 커널을 실행한 후에, GPU 는 선별 버퍼 값들을 활용하여 제 2 커널에서 관련없는 워크 아이템들 및 워크그룹들을 선별할 수도 있어서, 관련없는 워크 아이템들 및 워크그룹들이 실행되지 않도록 한다.
일부 예에서, 선별 버퍼는 애플리케이션의 모든 명령의 특성을 나타내는 하나 이상의 값들을 저장하도록 설계될 수도 있다. 예를 들어, 각 명령을 실행한 후에, GPU 는 명령이 관련있는지 또는 관련없는지 여부를 나타내는, 각 명령의 특성을 나타내는 선별 버퍼 값을 저장할 수도 있다. 또 다른 예에서, GPU 가 후속 명령이 관련없는 것으로 결정할 때에만 GPU 는 선별 버퍼 값을 저장할 수도 있다.
선별 버퍼는, 워크그룹의 특성을 나타내는 하나 이상의 값들뿐만 아니라, 워크그룹 내의 개개의 워크 아이템들의 특성을 나타내는 하나 이상의 값들을 저장하도록 설계될 수도 있다. 이에 따라, 선별 버퍼는 명령들이 워크그룹과 워크 아이템 레벨 양쪽에 대해 관련없는지 여부를 결정하기 위해 이용될 수 있다. 주어진 워크그룹의 워크 아이템들 모두가 이전에 실행된 커널에 의해 관련없는 것으로 렌더링되는 경우, GPU 는 전체 워크그룹을 선별할 수 있어서, 관련없는 워크그룹이 SP들에 의해 실행되지 않도록 한다. 대안적으로, 주어진 워크그룹의 워크 아이템들 중 오직 일부만이 이전에 실행된 커널에 의해 관련없는 것으로 렌더링되는 경우, GPU 는 개개의 워크 아이템들을 선별할 수 있어서, 관련없는 워크 아이템들이 SP들에 의해 실행되지 않도록 한다.
용어 "워크그룹" 은, 워크 아이템들의 미리 정의된 그룹과 같은, 명령들의 미리 정의된 그룹으로 총칭적으로 지칭한다는 것을 이해해야 한다. 또한, "워크그룹" 은 컴퓨트 유니파이드 디바이스 아키텍처 (Compute Unified Device Architecture) (NVIDIA Corporation 에 의해 개발된 "CUDA", 2010년 9월 17일자로 공개된 버전 3.2) 에서 "스레드 블록" 으로 지칭될 수도 있다.
본 개시물의 양태들은 여러 상이한 선별 버퍼 사이즈들 및 여러 상이한 선별 버퍼 능력들의 이용을 포함한다. 하나의 예에서, 선별 버퍼는 커널의 각 워크 아이템의 단일 특성을 나타내는 단일 바이너리 값 (예를 들어, 단일 저장 비트) 을 저장할 수도 있다. 이러한 예에서, GPU 는 선별 버퍼 값을 이용하여, 이전에 실행된 워크 아이템의 결과에 기초하여 워크 아이템이 관련있는지 또는 관련없는지 여부를 식별할 수도 있다.
단일 바이너리 값을 저장하는 선별 버퍼는, 선별 버퍼 구성의 단지 하나의 예이다. 또 다른 예에서, 선별 버퍼는 워크 아이템 당 2개 이상의 값을 저장할 수도 있다. 예를 들어, 선별 버퍼는 실행된 워크 아이템의 2개 이상의 특성에 대응하는 2개 이상의 값을 저장할 수도 있다. 비제한적인 이미지 프로세싱 예에서, GPU 는 픽셀 데이터의 적색 녹색 청색 (Red Green Blue; RGB) 특성들을 결정하기 위해 픽셀 데이터에 대한 워크 아이템을 실행할 수도 있다. 이에 따라, 선별 버퍼는 실행된 명령의 적색, 녹색, 및 청색 성분들에 대응하는 3개의 값들을 저장하도록 구현될 수도 있다. 이 예에서, GPU 는 선별 버퍼에 저장된 값들 중 임의의 값에 기초하여 명령들을 선별할 수도 있다. 이러한 선별 버퍼의 구성 (예를 들어, 사이즈 및 능력) 은 애플리케이션 및 GPU 의존적이라는 것을 이해해야 한다. 예를 들어, 일부 GPU 는 비교적 크고 다기능적인 선별 버퍼에 대해 비교적 많은 양의 메모리를 제공하도록 설계될 수도 있다. 다른 GPU들은 이러한 다기능 (versatility) 을 제공하는 것이 가능하지 않을 수도 있다. 이에 따라, 제공된 예들은 구현될 수도 있는 선별 버퍼들의 유일한 구성들이 아니라는 것을 이해해야 한다.
GPU 는 다양한 방법들로 선별 버퍼에 값들을 저장할 수도 있다. 하나의 예에서, SP 가 워크 아이템을 실행한 후에, SP 는 실행된 워크 아이템의 결과에 기초하여 하나 이상의 선별 버퍼 값들을 선별 버퍼에 기입할 수도 있다. 이 예에서, 또 다른 커널의 새로운 워크 아이템 (예를 들어, 동일한 입력 데이터와 연관된 워크 아이템) 을 실행한 후에, SP 는 선별 버퍼에 저장된 하나 이상의 선별 버퍼 값들을 판독하고 그 하나 이상의 선별 버퍼 값들을 새로운 워크 아이템의 실행에 의해 발생된 새로운 값과 비교함으로써 하나 이상의 선별 버퍼 값들을 업데이트할 수도 있다. 이 예에서, 저장된 값들을 새로운 워크 아이템의 실행에 의해 발생된 새로운 값과 비교하기 전에, 선별 버퍼에 저장된 하나 이상의 선별 버퍼 값들을 판독하는 것과 연관된 얼마간의 레이턴시 (latency) 가 있을 수도 있다.
또 다른 예에서, SP 가 워크 아이템을 실행한 후에, SP 는, 하나 이상의 선별 버퍼 값들을, 프로그램가능한 또는 고정된 기능 하드웨어에 제공할 수도 있고, 이러한 프로그램가능한 또는 고정된 기능 하드웨어는 하나 이상의 선별 버퍼 값들을 선별 버퍼에 기입한다. 예를 들어, 프로그램가능한 또는 고정된 기능 하드웨어는 워크 아이템의 실행시 SP 로부터 입력을 수신하도록 구성될 수도 있다. 프로그램가능한 또는 고정된 기능 하드웨어는 그 후에, 입력을 해석하고 그 입력에 대응하는 하나 이상의 값들을 선별 버퍼에 저장하도록 구현될 수 있다. 이 예에서, 프로그램가능한 또는 고정된 기능 하드웨어는, 선별 버퍼에 저장된 하나 이상의 값들을, 새로운 워크 아이템의 실행에 의해 발생된 새로운 값과 비교하는 것을 담당할 수도 있다. 프로그램가능한 또는 고정된 기능 하드웨어로 하여금 선별 버퍼 업데이트를 수행하게 하는 것은, SP 가 저장된 하나 이상의 선별 버퍼 값들을 판독할 필요가 없기 때문에, 레이턴시가 더 작아지게 할 수도 있다. 오히려, 프로그램가능한 또는 고정된 기능 하드웨어는 하나 이상의 선별 버퍼 값들을 판독하는 것을 담당할 것이다.
일부 양태에 따르면, 버퍼 값들은, 명령들을 순서화하여 이 명령들을 GPU 의 SP들에게 분배하는 것을 담당하는 GPU 의 컴포넌트에 의해 액세스 및 활용될 수도 있다. 예를 들어, 순서화 컴포넌트는 SP들에게의 분배를 위해 명령들을 준비하는 동안, 버퍼 값들을 판독하여 명령들을 삭제할 수도 있다. 이에 따라, 순서화 컴포넌트는 명령들을 SP들에게 분배하기 전에 명령들을 삭제할 수 있다. 일부 예에서, 순서화 컴포넌트는 워크그룹 및 워크 아이템 셋업과 분배 양쪽을 담당할 수도 있다. 순서화 컴포넌트는, 명령들을 SP 에게 분배하기 전에, 선별 버퍼에 저장된 값들을 판독하여 워크그룹과 워크 아이템 레벨 양쪽에 대한 명령들을 삭제할 수도 있다. 예를 들어, 순서화 모듈은 선별 버퍼에 저장된 값들을 판독하고, 이 값들에 기초하여 워크 아이템들의 전체 워크그룹이 관련없는 것으로 결정할 수도 있다. 또한, 순서화 모듈은 선별 버퍼에 저장된 값들을 판독하고, 이 값들에 기초하여 개개의 워크 아이템들이 관련없는 것으로 결정할 수도 있다.
일부 양태에 따르면, 애플리케이션은 명령 선별을 가능하게 하는 명령들을 포함할 수도 있다. 예를 들어, 애플리케이션은 선별 버퍼로 하여금 기능할 수 있게 하는 명령들을 포함할 수도 있다. 명령 선별을 가능하게 하기 위해, 애플리케이션의 실행된 명령들은, 결과뿐만 아니라, 그 결과의 특성을 나타내는 선별 버퍼에 저장되는 하나 이상의 값들 양쪽을 제공하고, 그 결과의 특성은 후속 명령의 관련성을 결정하기 위해 이용될 수 있다.
GPU 애플리케이션 프로그래밍은 통상적으로, 다수의 플랫폼들, 운용 시스템들, 및 하드웨어에서 실행할 수 있는 표준 소프트웨어 인터페이스를 제공하는 애플리케이션 프로그램 인터페이스 (application program interface; API) 를 이용하여 사용자 (예를 들어, 컴퓨터 프로그래머) 에 의해 수행된다. API들의 예들로는, 오픈 그래픽 라이브러리 (Open Graphics Library) ("OpenGL", 2010년 7월 26일자로 공개되고 공개적으로 입수가능한 버전 4.1), 컴퓨트 유니파이드 디바이스 아키텍처 (Compute Unified Device Architecture) (NVIDIA Corporation 에 의해 개발된 "CUDA", 2010년 9월 17일자로 공개된 버전 3.2), 및 DirectX (마이크로소프트사에 의해 개발됨, 2009년 10월 27일자로 공개된 버전 11) 를 포함한다. 일반적으로, API 는, 관련 하드웨어에 의해 실행되는 커맨드들의 미리 결정된, 표준화된 세트를 포함한다. API 커맨드들은, 사용자로 하여금, 하드웨어 컴포넌트들의 세부 사항들에 관한 사용자 지식 없이 커맨드들을 실행하라고 GPU 의 하드웨어 컴포넌트들에게 지시하게 한다.
본 개시물의 특정 양태들은, 사용자 (예를 들어, 컴퓨터 프로그래머) 로 하여금, 명령 선별을 정의 및 구현하게 하는 하나 이상의 API 커맨드들에 관한 것이다. 예를 들어, API 커맨드들은 또한, 사용자로 하여금, 명령을 실행한 후에 애플리케이션에 의해 발생되는 선별 버퍼 값들을 정의하게 할 수도 있다. 또한, API 커맨드들은 하나 이상의 선별 버퍼 값들을 지정된 선별 버퍼에 저장하라고 GPU 에게 지시할 수 있다. 또한, API 커맨드들은 명령들을 조직화하여 이 명령들을 SP들에게 분배하기 전에 선별 버퍼를 분석하라고 GPU 에게 지시할 수 있다. 이러한 커맨드들의 수신 및 실행시, GPU 는 하나 이상의 선별 버퍼 값들을 발생시켜 이 하나 이상의 선별 버퍼 값들을 선별 버퍼에 저장하고, 이 하나 이상의 선별 버퍼 값들이 SP들에게 분배되기 전에 관련없는 명령들을 선별한다.
여러 상이한 GPGPU 애플리케이션들은 관련없는 명령 선별로부터 이익을 얻을 수도 있다. 비제한적이고 단순화된 이미지 프로세싱 애플리케이션 (예를 들어, 안면 검출 애플리케이션) 은 다수의 커널들을 가질 수도 있는 애플리케이션의 일 예로서 제공되고, 하나의 커널은 또 다른 커널의 명령들을 관련없게 만드는 명령들을 갖는다. 일 예시적인 안면 검출 애플리케이션은 이미지 (예를 들어, 비디오 데이터의 프레임, 컴퓨터-발생된 그래픽 이미지, 스틸 이미지 등) 에 포함된 안면과 연관된 상이한 미리 정의된 피처들을 검출하기 위한 3개의 커널들을 포함한다.
이 예에서, 각각의 커널은 안면과 연관된 이미지의 픽셀들에서 특정 피처 (예를 들어, 컬러, 색조, 채도, 밝기, 또는 다른 속성들) 를 식별하도록 구현될 수도 있다. 이 예에 따르면, 커널들에 제시된 기준들 모두를 만족시키는 비디오 데이터의 프레임에서의 임의의 픽셀 또는 픽셀들의 그룹은 안면 후보이다. 또한, 이 예의 커널들은 더 보수적인 (conservative) 것으로부터 덜 보수적인 것으로 조직화된다.
예를 들어, 제 1 커널은 가능한 후보들을 배제시키는 것을 피하기 위해 많은 후보 안면 픽셀들을 식별할 수도 있다. 그러나, 제 2 및 제 3 커널들은 후보들의 수를 상당히 좁히기 위해 픽셀들이 후보 안면 픽셀들로서 간주되는 것을 배제시키는 것에 있어서 더 공격적일 수도 있다. 이 예에서, 각 커널이 실행된 후에 커널들의 부분들이 관련없게 된다. 예를 들어, 제 1 커널을 실행한 후에, 단지 어떤 픽셀들만이 후보 안면 픽셀들로서 식별되고, 나머지 픽셀들은 간주에서 배제된다. 이에 따라, 제 2 및 제 3 커널들에서 배제된 픽셀들과 연관된 임의의 명령들은 관련없는 것이다. 이러한 명령들은, 실행된 경우라도, 안면 후보를 식별하는 것에 기여하지 않는다.
제공된 안면 검출 예에서 커널들이 실행됨에 따라, 제 2 및 제 3 커널들이 스파스하게 된다. 예를 들어, 각 커널이 실행된 후에, 후속 커널들의 보다 많은 명령들이 관련없는 것으로 렌더링된다. 관련없는 명령들은, 이들이 안면을 찾는 것에 기여하지 않더라도, GPU 리소스들을 소모시킨다. 본 개시물의 양태들에 따르면, GPU 는 실행을 위해 관련없는 명령들이 SP들에게 분배되기 전에 관련없는 명령들을 삭제하도록 명령 선별을 구현할 수 있다. 이러한 방법으로, GPU 의 SP들이 관련없는 명령들을 실행하도록 구현하였기 때문에, GPU 효율이 증가된다.
제공된 안면 검출 예를 실행할 때, GPU 는 먼저 제 1 커널을 실행시켜 하나 이상의 선별 버퍼 값들을 발생시킬 수도 있다. 예를 들어, GPU 의 SP들은, 제 1 커널의 명령들을 실행하고, 그 실행된 제 1 커널의 명령들의 특성 (예를 들어, 후속 명령이 관련있는지 또는 관련없는지 여부) 을 나타내는 선별 버퍼 값들이 선별 버퍼에 채워질 수도 있다. 제 2 커널의 실행시, GPU 는 제 2 커널로부터의 관련없는 명령들을 식별 및 선별하기 위해 선별 버퍼에 저장된 값들을 활용할 수도 있다. 예를 들어, GPU 는, 실행을 위해 명령들이 SP들 (84) 에게 분배되기 전에, 선별 버퍼 (76) 에 저장된 값들을 판독하고 명령들을 선별할지 여부를 결정할 수도 있다. GPU 가 명령 선별을 완료한 후에, GPU 는 제 2 커널을 실행하고 선별 버퍼를 새로운 선별 버퍼 값들로 업데이트한다. GPU 는 그 후에 이 예시적인 프로세스를 반복하여 제 3 커널을 실행할 수도 있다.
이미지 프로세싱은 하나의 커널의 명령들이 또 다른 커널의 명령들을 관련없게 만들 수도 있는 단지 하나의 예이다. 다른 예들로는, 예를 들어, 증강 현실 애플리케이션들, 광선 추적, 및 패턴 인식을 포함한다. 일반적으로, GPU 는 다양한 입력 데이터에 대한 다양한 애플리케이션들을 수행하도록 구현될 수 있다. 커널들은 명령들을 조직화하기 위해 특정된 애플리케이션이며 단지 프레임워크만을 제공한다. 이에 따라, 관련없는 명령들을 선별한다는 개념은 다양한 다른 애플리케이션들에 대해 적용가능하다는 것을 이해해야 한다.
여기에 설명된 특정 예들 및 양태들은, 워크 아이템들 및 워크그룹들이 GPU 의 SP들에게 분배되기 전에, 상이한 커널들의 관련없는 워크 아이템들 및 워크그룹들을 식별 및 선별하는 것에 관한 것이다. 그러나, 커널/워크그룹/워크 아이템 서술은 GPGPU 애플리케이션 구조의 단지 하나의 예이다. 관련없는 워크 아이템들 및 워크그룹들을 식별하는 것, 및 워크 아이템 및 워크그룹 선별 값들을 발생시키는 것, 저장하는 것, 및 이용하는 것은, 단지 일 예로서 제공된다는 것을 이해해야 한다. 관련없는 명령들을 식별하는 것, 및 선별 버퍼 값들을 발생시키는 것, 저장하는 것, 및 이용하는 것에 관한 본 개시물의 양태들은 다른 GPU 애플리케이션 구조들에 적용될 수도 있다. 예를 들어, 다른 GPU 애플리케이션들은, 실행 동안 동일한 입력 데이터를 2회 이상 이용하는 명령들을 포함하는 단일의 비교적 보다 큰 "커널" 을 포함할 수도 있다. 이러한 예에서, 본 개시물의 양태들은 SP 효율을 최대화하기 위해 여전히 적용될 수도 있다. 동일한 입력 데이터에 관련된 관련없는 명령들은, 동일한 커널에 속하는 명령들에도 불구하고, 선별될 수도 있다.
도 1 은 워크 아이템들 및 워크그룹들과 같은 관련없는 명령들을 식별 및 선별하기 위한 기법들을 구현할 수도 있는 컴퓨팅 디바이스 (20) 을 예시한 블록 다이어그램이다. 도 1 에 도시된 바와 같이, 컴퓨팅 디바이스 (20) 는 호스트 프로세서 (24), 저장 디바이스 (28), 메모리 (32), 네트워크 모듈 (36), 사용자 인터페이스 (40), 및 디스플레이 (44) 를 포함한다. 또한, 컴퓨팅 디바이스 (20) 는 그래픽 프로세싱 유닛 (GPU) (48) 을 포함한다. 컴퓨팅 디바이스 (20) 는, 일부 예에서, 휴대용 컴퓨팅 디바이스 (예를 들어, 모바일 폰, 노트북, 랩톱, 태블릿 디바이스, 디지털 미디어 플레이어, 게이밍 디바이스, 또는 다른 휴대용 컴퓨팅 디바이스) 의 일부를 포함하거나 또는 그 일부일 수도 있다. 대안적으로, 컴퓨팅 디바이스 (20) 는 테스크톱 컴퓨터, 텔레비전, 텔레비전 셋톱 박스, 게이밍 콘솔 등과 같은 고정적인 컴퓨팅 디바이스로서 구성될 수도 있다.
도 1 의 예시된 컴퓨팅 디바이스 (20) 는, 단지 하나의 예이다. 관련없는 명령들을 식별 및 선별하기 위한 기법들은 다른 컴포넌트들을 갖는 다양한 다른 컴퓨팅 디바이스들에 의해 수행될 수도 있다. 일부 예에서, 컴퓨팅 디바이스 (20) 는 명료함을 위해 도 1 에 도시되지 않은 부가적인 컴포넌트들을 포함할 수도 있다. 예를 들어, 컴퓨팅 디바이스 (20) 는 컴퓨팅 디바이스 (20) 의 컴포넌트들 간의 데이터의 전송을 위해 하나 이상의 통신 브리지들을 포함할 수도 있다. 또한, 도 1 에 도시된 컴퓨팅 디바이스 (20) 의 컴포넌트들은 컴퓨팅 디바이스 (20) 의 모든 예에서 필요하지 않을 수도 있다. 예를 들어, 사용자 인터페이스 (40) 및 디스플레이 (44) 는 컴퓨팅 디바이스 (20) 가 데스크톱 컴퓨터인 경우 컴퓨팅 디바이스 (20) 의 외부에 있을 수도 있다.
호스트 프로세서 (24) 는 마이크로프로세서, 제어기, 디지털 신호 프로세서 (DSP), 주문형 집적 회로 (ASIC), 필드 프로그램가능 게이트 어레이 (FPGA), 또는 동등의 이산 또는 통합 로직 회로 중 임의의 하나 이상을 포함할 수도 있다. 부가적으로, 본 개시물에서, 호스트 프로세서 (24) 에 기인하는 기능들은, 소프트웨어, 펌웨어, 하드웨어 또는 임의의 이들의 조합으로서 구현될 수도 있다.
호스트 프로세서 (24) 는 컴퓨팅 디바이스 (20) 내의 실행을 위한 명령들을 프로세싱한다. 호스트 프로세서 (24) 는 저장 디바이스 (28) 에 저장된 명령들 또는 메모리 (32) 에 저장된 명령들을 프로세싱하는 것이 가능할 수도 있다. 예시적인 애플리케이션들은 가시가능한 이미지들을 프로세싱하는 것 (예를 들어, 미리 정의된 피처들에 대해 이미지들을 필터링하는 것, 이미지들을 분석하는 것 등) 을 위한 애플리케이션들을 포함한다. 호스트 프로세서 (24) 는 사용자 인터페이스 (40) 를 통한 사용자에 의한 선택에 기초하여 하나 이상의 애플리케이션들을 실행할 수도 있다. 일부 예에서, 호스트 프로세서 (24) 는 사용자 상호작용 없이 하나 이상의 애플리케이션들을 실행할 수도 있다.
본 개시물의 일부 양태들에 따르면, 그리고 GPU (48) 에 관해 아래에 더 상세히 설명되는 바와 같이, 호스트 프로세서 (24) 는 애플리케이션들을 수행하기 위해 GPU (48) 와 협력할 수도 있다. 예를 들어, 호스트 프로세서 (24) 는 애플리케이션의 실행을 초기화하고, 애플리케이션과 연관된 특정 프로세싱 기능들을 GPU (48) 에게 위임할 수도 있다. 일 예에서, 호스트 프로세서 (24) 는 이미지 프로세싱 애플리케이션의 실행을 초기화하고, 애플리케이션과 연관된 특정 프로세싱 기능들을 GPU (48) 에게 떠넘길 수도 있다.
저장 디바이스 (28) 는 하나 이상의 컴퓨터 판독가능 저장 매체를 포함할 수도 있다. 저장 디바이스 (28) 는 정보의 장기간 저장을 위해 구성될 수도 있다. 일부 예에서, 저장 디바이스 (28) 는 비휘발성 저장 엘리먼트들을 포함할 수도 있다. 이러한 비휘발성 저장 엘리먼트들의 예들로는, 자기 하드 디스크들, 광 디스크들, 플로피 디스크들, 플래시 메모리들, 또는 EPROM (electrically programmable memories) 또는 EEPROM (electrically erasable and programmable) 메모리들의 형태들을 포함할 수도 있다. 저장 디바이스 (28) 는, 일부 예에서, 비일시적 저장 매체로 간주될 수도 있다. 용어 "비일시적" 은 저장 매체가 반송파 또는 전파 신호로 구현되지 않음을 나타낼 수도 있다. 그러나, 용어 "비일시적" 은 저장 디바이스 (28) 가 비이동식이라는 것을 의미하는 것으로 해석되어서는 안된다. 하나의 예로서, 저장 디바이스 (28) 는 컴퓨팅 디바이스 (20) 로부터 삭제되어, 또 다른 디바이스에게 이동될 수도 있다. 또 다른 예로서, 저장 디바이스 (28) 와 실질적으로 유사한 저장 디바이스가 컴퓨팅 디바이스 (20) 에 삽입될 수도 있다.
저장 디바이스 (28) 는 호스트 프로세서 (24) 또는 GPU (48) 에 의한 하나 이상의 애플리케이션들의 실행을 위한 명령들을 저장할 수도 있다. 또한, 저장 디바이스 (28) 는 호스트 프로세서 (24) 또는 GPU (48) 에 의한 이용을 위한 데이터를 저장할 수도 있다. 예를 들어, 저장 디바이스 (28) 는 호스트 프로세서 (24) 또는 GPU (48) 에 의한 프로세싱을 위한 이미지 데이터를 저장할 수도 있다.
메모리 (32) 는 동작 동안 컴퓨팅 디바이스 (20) 내의 정보를 저장하도록 구성될 수도 있다. 일부 예에서, 메모리 (32) 는 일시적 메모리이고, 이는 메모리 (32) 의 주 목적이 장기간 저장이 아니라는 것을 의미한다. 메모리 (32) 는, 일부 예에서, 컴퓨터 판독가능 저장 매체로서 설명될 수도 있다. 이에 따라, 메모리 (32) 는 또한 시간이 지남에 따라 변할 수 있는 데이터의 저장에도 불구하고, "비일시적" 인 것으로 간주될 수도 있다. 또한, 메모리 (32) 는, 일부 예에서, 휘발성 메모리로서 설명될 수도 있고, 이는 컴퓨터가 턴 오프될 때 메모리 (32) 가 저장된 콘텐츠를 유지하지 않는다는 것을 의미한다. 휘발성 메모리들의 예들로는, RAM (random access memories), DRAM (dynamic random access memories), SRAM (static random access memories), 및 이 기술분야에 공지된 휘발성 메모리들의 다른 형태들을 포함한다.
일부 예에서, 메모리 (32) 는 호스트 프로세서 (24) 또는 GPU (48) 에 의한 실행을 위한 프로그램 명령들을 저장하는데 이용될 수도 있다. 메모리 (32) 는 프로그램 실행 동안 정보를 일시적으로 저장하기 위해 컴퓨팅 디바이스 (20) 에서 실행하는 소프트웨어 또는 애플리케이션들에 의해 이용될 수도 있다. 이와 같이, 메모리 (32) 는 호스트 프로세서 (24) 및 GPU (48) 와 같은 컴퓨팅 디바이스 (20) 의 다른 컴포넌트들에 의해 액세스될 수도 있다.
컴퓨팅 디바이스 (20) 는 네트워크 모듈 (36) 을 활용하여 하나 이상의 무선 네트워크들과 같은 하나 이상의 네트워크들을 통해 외부 디바이스들과 통신하도록 할 수도 있다. 네트워크 모듈 (36) 은 네트워크 인터페이스 카드, 예컨대, 이더넷 카드, 광 트랜시버, 무선 주파수 트랜시버, 또는 정보를 송수신할 수 있는 임의의 다른 타입의 디바이스일 수도 있다. 일부 예에서, 컴퓨팅 디바이스 (20) 는 네트워크 모듈 (36) 을 활용하여 서버, 모바일 폰, 또는 다른 네트워킹된 컴퓨팅 디바이스와 같은 외부 디바이스와 무선으로 통신할 수도 있다.
또한, 컴퓨팅 디바이스 (20) 는 사용자 인터페이스 (40) 를 포함한다. 사용자 인터페이스 (40) 의 예들로는, 트랙볼, 마우스, 키보드, 및 다른 타입들의 입력 디바이스들을 포함하지만, 이들로 제한되지 않는다. 또한, 사용자 인터페이스 (40) 는 디스플레이 (44) 의 일부로서 포함되는 터치-감응형 스크린을 포함할 수도 있다. 디스플레이 (44) 는 액정 디스플레이 (LCD), 유기 발광 다이오드 (OLED) 디스플레이, 플라즈마 디스플레이, 또는 또 다른 타입의 디스플레이 디바이스를 포함할 수도 있다.
컴퓨팅 디바이스 (20) 의 GPU (48) 는 GPU 애플리케이션들을 실행하기 위한 고정된 기능 및 프로그램가능한 컴포넌트들을 갖는 전용 하드웨어 유닛일 수도 있다. 또한, GPU (48) 는 DSP, 범용 마이크로프로세서, ASIC, FPGA, 또는 다른 동등의 통합 또는 이산 로직 회로를 포함할 수도 있다. 또한, GPU (48) 는, 도 2 에 관해 더 상세히 설명되는 바와 같이, 전용 메모리와 같은 다른 컴포넌트들을 포함할 수도 있다. 또한, 도 1 에 개별적인 컴포넌트들로 도시되지는 않았지만, 일부 예에서, GPU (48) 는 호스트 프로세서 (24) 의 부분으로서 형성될 수도 있다. GPU (48) 는 다양한 애플리케이션 프로그래밍 인터페이스 (API) 들에 따라 프로세싱 기법들을 활용하도록 구성될 수도 있다. 예를 들어, 사용자는 다수의 플랫폼들, 운용 시스템들, 및 하드웨어에서 실행할 수 있는 표준 소프트웨어 인터페이스를 이용하여 GPU (48) 에 의해 실행되도록 애플리케이션을 프로그래밍할 수도 있다. 일부 예에서, GPU (48) 는 OpenCL, CUDA, 또는 API들의 DirectX 콜렉션을 이용하여 발생된 애플리케이션들을 활용하도록 구성될 수도 있다.
일부 예에 따르면, GPU (48) 는 범용 그래픽 프로세싱 유닛 (GPGPU) 으로서 구현될 수 있다. 예를 들어, GPU (48) 는 호스트 프로세서 (24) 에 의해 전통적으로 수행되는 다양한 범용 컴퓨팅 기능들을 수행할 수도 있다. 예들로는, 비디오 디코딩 및 포스트 프로세싱 (post processing) (예를 들어, 디블로킹, 잡음 감소, 컬러 정정 등) 및 다른 애플리케이션 특정 이미지 프로세싱 기능들 (예를 들어, 안면 검출/인식, 패턴 인식, 웨이블릿 변환들 등) 을 포함하는 다양한 이미지 프로세싱 기능들을 포함한다. 일부 예에서, GPU (48) 는 애플리케이션들을 실행하도록 호스트 프로세서 (24) 와 협력할 수도 있다. 예를 들어, 호스트 프로세서 (24) 는 GPU (48) 에 의한 실행을 위한 명령들을 GPU (48) 에게 제공함으로써 특정 기능들을 GPU (48) 에게 떠넘길 수도 있다.
GPGPU 로서 구현된다면, GPU (48) 및 호스트 프로세서 (24) 는, 여기에서 커널들이라고 지칭되는, 하나 이상의 셰이더 프로그램들을 갖는 애플리케이션을 실행할 수도 있다. 애플리케이션의 각 커널은 특정 태스크 (task) 를 수행하기 위한 기능을 정의할 수 있고, 각 커널은 동일한 입력 데이터에 대해 실행될 수도 있다. 예를 들어, GPU (48) 및 호스트 프로세서 (24) 는 이미지에서 피처들을 식별하기 위한 복수의 커널들을 갖는 일 예시적인 이미지 프로세싱 애플리케이션을 실행할 수도 있고, 복수의 커널들 각각은 이미지 데이터에 대해 실행되어 피처들을 식별하도록 할 수도 있다. 또한, GPU (48) 는 다른 커널들의 결과들에 의존하는 커널들을 포함하는 애플리케이션들을 실행할 수도 있다. 이러한 예들에 있어서, 커널의 결과들은 후속 커널의 워크 아이템들 및 워크그룹들과 같은 후속 커널의 명령들을 "관련없게" 만들 수도 있다 (예를 들어, 애플리케이션의 목적을 증진시키지 않는 하나 이상의 명령들).
본 개시물의 일부 양태에 따르면, GPU (48) 는 관련없는 명령들이 실행되는 것을 방지함으로써 관련없는 명령들을 실행시키는 것을 피할 수도 있다. 예를 들어, 관련없는 명령들이 실행되는 것을 방지하기 위해, GPU (48) 는 이 관련없는 명령들이 실행되기 전에 명령들을 "선별" 또는 삭제할 수도 있다. 즉, GPU (48) 는, 관련없는 워크 아이템들 및/또는 워크그룹들을, 이들이 실행되기 전에 선별할 수도 있다. 상술된 바와 같이, 용어 "워크 아이템" 은, 입력 데이터를 프로세싱하기 위한 기능을 정의하는 하나 이상의 개개의 명령들을 포함할 수도 있는 GPU 에 대한 워크의 기본 단위를 포함한다. 또한, 용어 "워크그룹" 은, 워크 아이템들의 미리 정의된 그룹과 같은, 명령들의 미리 정의된 그룹을 총칭적으로 지칭한다.
이에 따라, 일반적으로, 본 개시물의 기법들은 2개 이상의 커널을 이용하여 입력 데이터를 프로세싱하기 위한 애플리케이션을 실행하는 것을 포함한다. 제 1 커널의 워크 아이템들 및 워크그룹들의 실행시, GPU (48) 는 제 2 커널의 워크 아이템들 및 워크그룹들이 관련있는지 여부를 나타내는 선별 버퍼 값들을 설정할 수도 있다. 즉, GPU (48) 는, 제 1 커널의 결과들에 기초하여, 제 1 커널의 워크 아이템들 및 워크그룹들 각각의 동일한 입력 데이터와 연관된 제 2 커널의 각각의 워크 아이템들 및 워크그룹들이 관련있는지 여부를 나타내는 선별 버퍼 값들을 설정할 수도 있다. 따라서, 제 1 커널을 실행한 후에, GPU (48) 는 선별 버퍼 값들을 활용하여 제 2 커널에서 관련없는 워크 아이템들 및 워크그룹들을 선별할 수도 있어서, 관련없는 워크 아이템들 및 워크그룹들이 실행되지 않도록 한다.
도 2 는, 명령 선별을 위한, 예컨대, 워크 아이템들 및 워크그룹들을 선별하기 위한 기법들을 수행하도록 구성될 수도 있는 GPU (48) 를 더 상세히 예시한 블록 다이어그램이다. 도 2 에 도시된 예에서, GPU (48) 는 GPU 메모리 (64), 및 선별 버퍼 (76) 및 선별 모듈 (cull module; 80) 을 갖는 시퀀서 모듈 (72) 을 포함한다. 또한, GPU (48) 는 셰이더 프로세서들 (84A 내지 84D) (총괄하여, "SP들" (84)) 을 포함한다.
도 2 는 명령 선별을 위한 기법들을 활용할 수 있는 GPU 의 단지 하나의 예로서 제공된다. 관련없는 명령들을 식별 및 선별하기 위한 기법들은 다른 컴포넌트들을 갖는 다양한 다른 GPU들에 의해 수행될 수도 있다. 예를 들어, 다른 예들에 있어서, GPU (48) 는 또한 이미지들을 분석 및 렌더링하는 것과 관련된 다양한 다른 모듈들, 예컨대, 래스터라이저 모듈 (rasterizer module), 텍스처 유닛들, 하나 이상의 버퍼들, 또는 다른 GPU 컴포넌트들을 포함할 수도 있다. 또한, GPU (48) 는 도 2 에 도시된 컴포넌트들보다 더 많거나 더 적은 컴포넌트들을 포함할 수도 있다. 예를 들어, GPU (48) 는 도 2 에 4개의 SP들 (84) 을 포함하는 것으로 도시되어 있다. 그러나, 다른 예들에 있어서, GPU (48) 는 도 2 에 도시된 SP들보다 더 많거나 더 적은 SP들 (84) 을 포함할 수도 있다.
GPU 메모리 (64) 는 GPU (48) 에 의해 프로세싱되는 명령들을 저장하기 위한 GPU (48) 내의 전용 메모리 모듈일 수도 있다. 일부 예에서, GPU 메모리 (64) 는 도 1 에 도시된 메모리 (32) 와 유사하다. 예를 들어, GPU 메모리 (64) 는 일시적 컴퓨터 판독가능 저장 매체일 수도 있다. GPU 메모리 (64) 의 예들로는, RAM (random access memories), DRAM (dynamic random access memories), SRAM (static random access memories), 및 이 기술분야에 공지된 메모리들의 다른 형태들을 포함한다. GPU (48) 가 또 다른 프로세서, 예컨대, 도 1 에 도시된 호스트 프로세서 (24) 의 부분으로서 형성되는 예들에 있어서, GPU 메모리 (64) 는 GPU (48) 이외의 컴포넌트들에 의해 액세스될 수도 있다.
GPU 메모리 (64) 는 GPU (48) 에 대한 글로벌 메모리로서 구성될 수도 있다. 예를 들어, GPU 메모리 (64) 는 동작 동안 GPU (48) 내의 명령들 및 정보 (예를 들어, GPU (48) 에 의한 프로세싱을 위한 이미지 데이터 및 명령들) 를 저장하도록 구성될 수도 있다. 또한, GPU 메모리 (64) 는 GPU (48) 에 의해 프로세싱된 데이터의 결과들을 저장하도록 구성될 수도 있다.
시퀀서 모듈 (72) 은 처음에, SP들 (84) 에 의한 프로세싱을 위한 명령들 및 데이터를 준비할 수도 있다. 예를 들어, 시퀀서 모듈 (72) 은, 도 1 에 도시된 호스트 프로세서 (24) 와 같은 호스트 프로세서, 또는 GPU 메모리 (64) 로부터 명령들 및 데이터를 수신하고, SP들 (84) 에 의해 프로세싱될 입력 데이터를 준비할 수도 있다. 일부 예에서, 시퀀서 모듈 (72) 은, GPU (48) 에 의해 수행되어야 하는 기능들을 정의한 명령들의 하나 이상의 커널들을 수신한다. 시퀀서 모듈 (72) 은 명령들을 워크 아이템들 (예를 들어, 워크의 기본 단위) 로 조직화하고, 워크 아이템들을 워크그룹들로 그룹화할 수도 있다.
또한, 시퀀서 모듈 (72) 은 GPU (48) 내의 명령 및 데이터 플로우를 제어하도록 구현될 수도 있다. 예를 들어, 시퀀서 모듈 (72) 은 실행을 위해 명령들 및 관련 데이터를 SP들 (84) 에게 라우팅할 수도 있다. 시퀀서 모듈 (72) 은 명령들 (예를 들어, 워크 아이템들 및 워크그룹들) 및 관련 입력 데이터를 SP들 (84) 에게 분배하기 위해 고정된 기능 및 프로그램가능한 컴포넌트들의 조합으로 이루어질 수도 있다. 본 개시물의 일부 양태에 따르면, 시퀀서 모듈 (72) 은 관련없는 명령들을 식별하고 그 관련없는 명령들이 GPU (48) 의 SP들 (84) 에 의해 프로세싱되는 것을 방지하기 위해 선별 모듈 (76) 및 선별 버퍼 (80) 를 포함한다. 즉, 시퀀서 모듈 (72) 은 관련없는 워크 아이템들 및 워크그룹들을 식별하고 그 관련없는 워크 아이템들 및 워크그룹들이 GPU (48) 의 SP들 (84) 에 의해 프로세싱되는 것을 방지하기 위해 선별 모듈 (76) 및 선별 버퍼 (80) 를 포함할 수도 있다.
도 2 에 도시된 예에서, SP들 (72) 각각은 스레드 셋업 모듈 (88A 내지 88D) (총괄하여, 스레드 셋업 모듈들 (88)) 뿐만 아니라 복수의 산술 로직 유닛 (arithmetic logic unit; "ALU") 들 (92A 내지 92D) (총괄하여, ALU들 (92)) 을 포함한다. SP들 (72) 이 지오메트리, 정점, 또는 픽셀 셰이딩 동작들을 수행하여 그래픽을 렌더링할 수 있다는 점에서, SP들 (72) 은 "단일화된 셰이더 프로세서들" 이라고 지칭될 수도 있다. 또한, SP들 (72) 은 GPGPU 애플리케이션의 명령들을 실행할 때 범용 계산들을 수행하는데 이용될 수 있다. 예를 들어, SP들 (72) 은 시퀀서 모듈 (76) 로부터 명령들을 수신하고 그 명령들을 실행할 수도 있다.
일부 예에서, SP들 (84) 의 스레드 셋업 모듈 (88) 은 시퀀서 모듈 (72) 로부터 명령들을 수신하고 ALU들 (92) 에 의한 실행을 위한 스레드들을 발생시키는 것을 담당한다. 예를 들어, 스레드 셋업 모듈 (88) 은 시퀀서 모듈 (72) 로부터 명령들 (예를 들어, 워크 아이템들의 워크그룹) 을 수신하고, 이 명령들을 일시적으로 저장하고, ALU들 (92) 에 의한 실행을 위해 스레드들, 즉, 워크 아이템들을 발생시키며, 이 스레드들을 ALU들 (92) 에게 분배할 수도 있다. 일부 양태에 따르면, 스레드 셋업 모듈 (88) 은 ALU들 (92) 로 하여금 2개 이상의 스레드를 병렬로 프로세싱하게 하도록 하는 방식으로 스레드들을 ALU들 (92) 에게 분배한다. GPU (48) 의 성능 및 효율은, 관련있는 스레드들 (예를 들어, 관련있는 명령들을 갖는 스레드들) 로 SP들 (84) 의 ALU들 (92) 을 연속적으로 차지함으로써 최대화될 수도 있다.
본 개시물의 일부 양태에 따르면, GPU (48) 는 "관련없는" 명령들 (예를 들어, 애플리케이션의 목적을 증진시키지 않는 명령) 을 식별하고 이 관련없는 명령들이 SP들 (84) 에 의해 프로세싱되는 것을 방지하도록 시퀀서 모듈 (72) 을 구현함으로써 효율을 증가시킬 수도 있다. 예를 들어, 관련없는 워크 아이템이 프로세싱되는 것을 방지하기 위해, 시퀀서 모듈 (72) 은 명령들을 SP들 (84) 에게 라우팅하기 전에 관련없는 워크 아이템들을 선별 또는 삭제할 수도 있다. 이에 따라, SP들 (84) 의 스레드 셋업 모듈 (88) 은 관련없는 워크 아이템들을 포함하는 스레드들을 발생시키지 않고, SP들 (84) 의 ALU들 (92) 은 관련없는 워크 아이템들을 실행시키는 것으로 차지되지 않는다.
시퀀서 모듈 (72) 은 명령 선별을 수행하도록 선별 버퍼 (76) 및 선별 모듈 (80) 을 구현할 수도 있다. 도 2 에 2개의 별개의 모듈들이 설명되고 나타내었지만, 일부 예에서, 선별 버퍼 (76) 및 선별 모듈 (80) 은 동일한 컴포넌트로 구현될 수도 있다. 또한, 일부 예에 따르면, 선별 버퍼 (76) 및 선별 모듈 (80) 은 별개의 컴포넌트들로서 구현되지 않을 수도 있다. 오히려, 일부 예에서, 선별 버퍼 (76) 및 선별 모듈 (80) 은 GPU (48) 의 다른 컴포넌트들에 통합될 수도 있다. 예를 들어, 선별 버퍼 (76) 는 GPU 메모리 (64) 의 파티션으로서 구현될 수도 있다. 또 다른 예에서, 선별 버퍼 (76) 는 GPU (48) 의 외부에 있는 메모리일 수도 있다. 대안적으로 또는 부가적으로, 선별 모듈 (80) 에 관해 설명된 명령 선별 기법들은 시퀀서 모듈 (72) 또는 SP들 (84) 에 통합될 수도 있다.
선별 버퍼 (76) 는 실행된 워크 아이템의 특성을 나타내는 하나 이상의 값들을 저장할 수도 있다. 이 특성은 후속 커널과 연관된 후속 워크 아이템이 관련있는지 또는 관련없는지 여부를 결정하기 위해 이용될 수 있다. 예를 들어, GPU (48) 는 2개의 커널들을 갖는 애플리케이션을 실행할 수도 있다. 제 1 커널을 실행한 후에, GPU (48) 는 제 1 커널의 결과들에 기초하여, 제 2 커널의 명령들이 관련있는지 여부를 나타내는 하나 이상의 값들을 선별 버퍼 (80) 에 저장할 수도 있다.
선별 버퍼 (76) 는 다양한 소스들로부터 선별 버퍼 값들을 정의하는 입력을 수신할 수도 있다. 하나의 예에서, SP들 (84) 중 하나, 예컨대, SP (84A) 가 워크 아이템을 실행한 후에, SP (84A) 는 실행된 워크 아이템의 결과에 기초하여 직접적으로 하나 이상의 선별 버퍼 값들을 선별 버퍼 (76) 에 기입할 수도 있다. 또 다른 예에서, 선별 버퍼 (76) 는, 상술된 바와 같이, 프로그램가능한 또는 고정된 기능 하드웨어로부터 선별 버퍼 값들을 수신할 수도 있다.
일부 양태에 따르면, 선별 버퍼 (76) 는 워크그룹의 특성을 나타내는 하나 이상의 값들뿐만 아니라, 워크그룹 내의 개개의 워크 아이템들의 특성을 나타내는 하나 이상의 값들을 저장하도록 설계될 수도 있다. 예를 들어, 주어진 워크그룹의 워크 아이템들 모두가 이전에 실행된 커널에 의해 관련없는 것으로 렌더링되는 경우, 선별 버퍼 (76) 는 특정 워크그룹의 워크 아이템들 모두가 관련없다는 것을 나타내는 워크그룹 선별 값을 저장할 수도 있다. 대안적으로 또는 부가적으로, 선별 버퍼 (76) 는 주어진 워크그룹의 워크 아이템들 중 오직 일부만이 이전에 실행된 커널에 의해 관련없는 것으로 렌더링된다는 것을 나타내는 하나 이상의 워크 아이템 선별 값들을 저장할 수도 있다. 이에 따라, 선별 버퍼 (76) 에 저장된 값들은 워크그룹 레벨과 워크 아이템 레벨 양쪽에 대한 (예를 들어, 명령의 관련성과 같은) 특성들을 결정하는데 이용될 수 있다.
선별 버퍼 (76) 는 보다 큰 용량들이 부가적인 능력들을 제공하는 여러 상이한 용량들을 가질 수도 있다. 하나의 예에서, 선별 버퍼 (76) 는 커널의 각 워크 아이템에 대한 단일 저장 비트를 포함할 수도 있다. 이 예에서, 단일 저장 비트는 커널의 각 워크 아이템의 단일 특성을 나타내는 바이너리 값을 저장하는데 이용될 수도 있다. GPU (48) 는 이러한 단일 특성을 이용하여, 이전에 실행된 워크 아이템의 결과에 기초하여 워크 아이템이 관련있는지 또는 관련없는지 여부를 식별할 수도 있다.
다른 예들에 있어서, 선별 버퍼 (76) 는 커널의 각 워크 아이템에 대한 단일 저장 비트보다 큰 것을 포함할 수도 있다. 예를 들어, 2개 이상의 값이 선별 버퍼 (76) 에 저장되어 커널의 각 워크 아이템의 다양한 특성들을 설명할 수도 있다. 비제한적인 이미지 프로세싱 예에서, GPU (48) 는 픽셀 데이터의 적색 녹색 청색 (RGB) 특성들을 결정하기 위해 픽셀 데이터에 대한 워크 아이템을 실행할 수도 있다. 이에 따라, 선별 버퍼 (76) 는 실행된 워크 아이템의 적색, 녹색, 및 청색 성분들에 대응하는 3개의 값들이 저장되게 하는 스토리지 (storage) 를 포함할 수도 있다. 이 예에서, GPU (48) 및 선별 모듈 (80) 은 선별 버퍼 (76) 에 저장된 값들 중 임의의 값에 기초하여 워크 아이템들을 선별할 수도 있다. 이러한 선별 버퍼 (76) 의 구성 (예를 들어, 용량 및 능력) 이 애플리케이션 및 GPU 의존적일 수도 있다는 것을 이해해야 한다. 예를 들어, 일부 GPU 는 비교적 크고 다기능적인 선별 버퍼에 대해 비교적 많은 양의 메모리를 제공하도록 설계될 수도 있다. 다른 GPU들은 이러한 다기능을 제공하는 것이 가능하지 않을 수도 있다. 이에 따라, 제공된 예들은 구현될 수도 있는 선별 버퍼들의 유일한 구성들이 아니라는 것을 이해해야 한다.
선별 모듈 (80) 은 선별 버퍼 (76) 에 저장된 값들에 액세스하고 선별 버퍼 (76) 에 저장된 값들에 기초하여 관련없는 명령들을 선별하는 것을 담당할 수도 있다. 일부 예에 따르면, 선별 모듈 (80) 은, 시퀀서 모듈 (72) 이 명령들을 준비하고 이 명령들을 SP들 (84) 에게 분배하기 전에, 선별 버퍼 (76) 에 저장된 값들에 액세스한다. 도 7 에 관해 더 상세히 설명되는 바와 같이, 선별 모듈 (80) 은 선별 버퍼 (76) 에 저장된 값들을 판독하고 워크 아이템과 워크그룹 레벨 양쪽에 대한 명령들을 선별할 수도 있다. 예를 들어, 선별 모듈 (80) 은 선별 버퍼 (76) 에 저장된 값들을 판독하고 이러한 값들에 기초하여 워크 아이템들의 전체 워크그룹이 관련없는 것으로 결정할 수도 있다. 또한, 선별 모듈 (80) 은 선별 버퍼 (76) 에 저장된 값들을 판독하고 이러한 값들에 기초하여 개개의 워크 아이템들이 관련없는 것으로 결정할 수도 있다. 선별 모듈 (80) 이 관련없는 명령들을 선별한 후에, 시퀀서 모듈 (72) 은 나머지 명령들을 준비하여 이 나머지 명령들을 SP들 (84) 에게 분배할 수 있다.
본 개시물의 양태들은 동일한 입력 데이터를 프로세싱하는 2개 이상의 커널을 갖는 애플리케이션을 실행할 때 관련없는 명령들을 선별하도록 선별 버퍼 (76) 및 선별 모듈 (80) 을 활용하는 GPU (48) 에 관한 것이다. 일 예에서, GPU (48) 는, 도 1 에 도시된 호스트 프로세서 (24) 와 같은 호스트 프로세서, 또는 다른 컴퓨팅 유닛으로부터 복수의 커널들을 정의하는 명령들 및 데이터를 수신한다. 커널들의 수신시, 시퀀서 모듈 (72) 은 처음에, SP들 (84) 에 의한 프로세싱을 위해 제 1 커널과 연관된 명령들 및 데이터를 준비할 수도 있다. 예를 들어, 시퀀서 모듈 (72) 은 제 1 커널의 명령들을 워크 아이템들 및 워크그룹들로 조직화할 수도 있다.
워크그룹들의 그리드 (grid) 들의 발생시, 시퀀서 모듈 (72) 의 선별 모듈 (80) 은 명령 선별을 수행할지 여부를 결정하라고 선별 버퍼 (76) 에게 질의할 수도 있다. 일부 예에 따르면, 일부 예에서, 실행된 명령들의 결과들에 기초하여 선별 버퍼 값들이 발생되기 때문에, 선별 모듈 (80) 은 명령들의 제 1 커널에 대한 명령 선별을 수행하지 않는다. 이에 따라, 선별 버퍼 (76) 는 제 1 커널의 실행 전에 비워진다. 시퀀서 모듈 (72) 은 제 1 커널과 연관된 명령들 (예를 들어, 워크그룹들 및 워크 아이템들) 을 SP들 (84) 에게 분배하도록 진행하고, 이 SP들 (84) 은 명령들을 실행한다.
SP들 (84) 이 제 1 커널의 명령들을 실행한 후에, SP들 (84) 은 선별 버퍼 (76) 에 선별 버퍼 값들이 채워지거나 또는 선별 버퍼 (76) 를 선별 버퍼 값들로 업데이트한다. 예를 들어, SP들 (84) 은 제 1 커널의 실행된 워크 아이템의 특성을 나타내는 하나 이상의 값들을 선별 버퍼 (76) 에 채울 수도 있다. 이러한 특성은 다음 커널과 연관된 후속 워크 아이템이 관련있는지 또는 관련없는지 여부를 결정하기 위해 이용될 수 있다.
GPU 는 그 후에 제 2 커널을 실행하는 것으로 계속될 수도 있다. 예를 들어, 시퀀서 모듈 (72) 은 제 2 커널과 연관된 워크그룹들의 하나 이상의 그리드들을 조직화함으로써 SP들 (84) 에 의한 프로세싱을 위한 제 2 커널과 연관된 명령들 및 데이터를 준비할 수도 있다. 선별 모듈 (80) 은 그 후에, 선별을 위한 명령들을 식별하라고 선별 버퍼 (76) 에게 질의한다. 예를 들어, 선별 모듈 (80) 은, 명령들이 시퀀서 모듈 (72) 에 의해 SP들 (84) 에게 분배되기 전에, 선별 버퍼 (76) 에 저장된 값들을 판독하고 명령들을 선별할지 여부를 결정한다. 일부 예에서, 선별 모듈 (80) 은 워크 아이템과 워크그룹 양쪽을 기초로 명령들을 선별한다. 선별 모듈 (80) 이 명령 선별을 완료한 후에, 시퀀서 모듈 (72) 은 명령들을 SP들 (84) 에게 분배하고, 이 SP들 (84) 은 이 명령들을 실행하여 선별 버퍼 (76) 의 값들을 업데이트한다. 이 예시적인 프로세스는 GPU (48) 가 모든 커널들을 실행할 때까지 반복될 수도 있다.
도 2 에 관해 설명된 예는 선별 버퍼 (76) 및 선별 모듈 (80) 을 이용하여 모든 명령 선별 (예를 들어, 워크 아이템 선별 및 워크그룹 선별) 을 수행하는 시퀀서 모듈 (72) 에 관한 것이다. 그러나, GPU (48) 의 다른 모듈들이 명령 선별을 담당하고 있을 수도 있고, 다른 모듈들이 선별 버퍼 (76) 와 상호작용할 수도 있다는 것을 이해해야 한다. 하나의 예에 따르면, SP들 (84) 의 스레드 셋업 모듈들 (88) 이 워크 아이템 선별을 담당하는 동안, 시퀀서 모듈 (72) 은 워크그룹 선별만을 오직 수행하는 것을 담당할 수도 있다. 예를 들어, 시퀀서 모듈 (72) 은, 상술된 바와 같이, 선별 버퍼 (76) 및 선별 모듈 (80) 을 이용하여 워크그룹 선별을 수행할 수도 있다. 워크그룹 선별을 수행한 후에, 시퀀서 모듈 (76) 은 나머지 워크그룹들 (예를 들어, 선별 후에 남은 워크그룹들) 을 SP들 (84) 에게 분배할 수도 있다. 이 예에서, 스레드 셋업 모듈들 (88) 은 워크 아이템 선별을 담당할 수도 있다. 예를 들어, 시퀀서 모듈 (72) 로부터 워크그룹을 수신한 후에, 스레드 셋업 모듈들 (88) 은 선별 버퍼 (76) 를 활용하여 워크 아이템 선별을 수행할 수도 있다. 일부 양태에 따르면, 스레드 셋업 모듈들 (88) 은 선별 버퍼 (76) 를 판독하고, 그 선별 버퍼 (76) 에 저장된 하나 이상의 값들에 기초하여 워크 아이템들을 선별할지 여부를 결정한다. 또한, 스레드 셋업 모듈들 (88) 은 선별 버퍼 (76) 에 저장된 선별 버퍼 값들에 기초하여 ALU들 (92) 에 의한 실행을 위한 스레드들을 조직화하기 전에 관련없는 워크 아이템들을 삭제할 수도 있다.
일부 양태에 따르면, GPU (48) 에서의 명령 선별을 가능하게 하기 위해, GPU (48) 는 명령 선별 커맨드들을 갖는 애플리케이션을 실행한다. 예를 들어, GPU (48) 는 명령 선별 커맨드들을 실행하여, 명령을 실행할 때, GPU (48) 가 결과뿐만 아니라, 그 결과의 특성을 나타내는 선별 버퍼 (76) 에 저장하기 위한 하나 이상의 값들 양쪽을 발생시키도록 한다. 또한, GPU (48) 는, 선별 모듈 (80) 로 하여금, 선별 버퍼 (76) 의 값들을 판독하여 명령 선별을 수행할 수 있게 하는 명령 선별 커맨드들을 실행할 수도 있다.
본 개시물의 특정 양태들은, 사용자 (예를 들어, 컴퓨터 프로그래머) 로 하여금, 명령 선별 커맨드들을 갖는 애플리케이션을 생성하게 하는 하나 이상의 API 커맨드들에 관한 것이다. 예를 들어, API 커맨드들은 또한, 하나 이상의 선별 버퍼 값들을 발생시켜 그 하나 이상의 선별 버퍼 값들을 선별 버퍼 (76) 와 같은 지정된 선별 버퍼에 저장하라고 GPU 에게 지시하기 위해 이용될 수 있다. 또한, API 커맨드들은 명령들을 조직화하여 이 명령들을 SP들 (84) 에게 분배하기 전에 선별 버퍼 값들을 분석할 뿐만 아니라, 이 값들에 기초하여 명령 선별을 수행하라고 GPU (48) 에게 지시할 수 있다. 예를 들어, API 커맨드들은 선별 버퍼 값들에 기초하여 관련있는 것이 아닌 명령들을 폐기하여 이 명령들이 GPU (48) 의 SP들 (84) 에게 분배되지 않도록 GPU (48) 에게 지시할 수 있다.
도 3 은 도 3 에 워크그룹 0 으로서 나타낸 워크그룹과 연관된 워크 아이템들의 그리드를 예시한 블록 다이어그램이다. 또 다시, 각 워크 아이템은 GPU 의 SP, 예컨대, GPU (48) 의 SP들 (84) 중 하나에 의해 실행될 수 있는 개개의 명령 (예를 들어, 워크의 기본 단위) 에 관한 것일 수도 있다. 단지 예시의 목적을 위해, 도 3 에 도시된 워크 아이템들은 도 2 에 도시된 예시적인 GPU (48) 에 대해 설명된다.
도 3 의 워크그룹 0 에 도시된 워크 아이템들과 같은 워크 아이템들은 SP들 (84) 에 의해 실행되기 전에 스레드들 (예를 들어, ALU들에 의한 효과적인 실행을 제공하는 구성에서 조직화되는 하나 이상의 명령들) 로 조직화될 수도 있다. 예를 들어, SP들 (84) 중 하나, 예컨대, SP (84A) 는 시퀀서 모듈 (72) 로부터 워크그룹 0 을 수신하고, 워크그룹 0 과 연관된 워크 아이템들을 이용하여 스레드들을 발생시키는 것에 의해 실행을 위한 워크그룹 0 을 준비할 수도 있다.
일부 예에 따르면, SP들 (84) 의 효율은 스레드들로 조직화되는 워크 아이템들의 관련성에 의해 영향을 받을 수도 있다. 예를 들어, 스레드들이 관련없는 워크 아이템들로 발생되고, SP들 (84) 이 그 관련없는 워크 아이템들을 실행하는 것으로 차지되는 경우, SP들 (84) 의 효율은 부정적으로 영향을 받을 수도 있다. 일부 예에서, 멀티-커널 프로그램의 워크그룹들은 이전에 실행된 명령들의 결과들에 기초하여 "스파스" 하게 될 수도 있다. 예를 들어, "스파스" 워크그룹은, 하나 이상의 관련없는 워크 아이템들에 의해 분리되는 관련있는 워크 아이템들을 포함할 수도 있다. 도 3 에 도시된 예에서, 이전에 실행된 명령에 의해 몇몇 워크 아이템들이 관련없는 것으로 렌더링되는 경우, 워크그룹 0 은 "스파스" 한 것으로 간주될 수도 있다.
본 개시물의 양태들은, 워크 아이템들이 스레드들로 조직화되기 전에, 관련없는 워크 아이템들을 식별하고, 그 관련없는 워크 아이템들을 삭제하는 것에 관한 것이다. 일부 예에서, 워크 아이템들은 SP들 (84) 로 분배되기 전에 선별될 수도 있다. 예를 들어, 선별 모듈 (80) 은 워크 아이템이 SP들 (84) 에게 분배되기 전에 워크 아이템을 선별할지 여부를 결정하기 위해 선별 버퍼 (76) 에 저장된 값들을 활용할 수도 있다. 일부 예에서, GPU (48) 는, 워크 아이템 선별을 수행하기 전에, 도 4 에 관해 설명되는 바와 같이, 워크그룹 선별을 수행할 수도 있다.
도 4 는 도 2 에 도시된 GPU (48) 와 같은 GPU 에 의해 실행될 수 있는 3개의 커널들 (예를 들어, 제 1 커널 (124), 제 2 커널 (128), 및 제 3 커널 (132)) 의 배열에서의 워크그룹들의 그리드들을 예시한 블록 다이어그램이다. 또 다시, 각 커널 (124 내지 132) 은 주어진 애플리케이션에 관한 특정 기능을 수행하기 위해 실행될 수도 있다. 일부 예에서, 커널들 (124 내지 132) 은 컬러 정정 알고리즘들, 안면 검출 알고리즘들, 패턴 인식 알고리즘들, 증강 현실 애플리케이션들, 다양한 알고리즘 애플리케이션들 (예를 들어, 웨이블릿 변환들, 푸리에 변환들 등), 또는 다양한 다른 애플리케이션들에 대한 기능들을 정의할 수도 있다. 단지 예시의 목적을 위해, 도 4 는 도 2 에 도시된 예시적인 GPU (48) 에 관해 설명된다.
도 4 에 도시된 워크그룹들의 그리드들이 시퀀서 모듈 (72) 에 의해 발생될 수도 있다. 예를 들어, 시퀀서 모듈 (72) 은 도 1 에 도시된 호스트 프로세서 (24) 와 같은 호스트 프로세서, 또는 GPU 메모리 (64) 로부터 명령들 및 데이터를 수신하고, 명령들을 워크그룹들의 그리드들로 조직화하는 것에 의해 실행을 위한 명령들을 준비할 수도 있다. 일부 예에서, 커널들 (124 내지 132) 각각의 워크그룹들은 동일한 입력 데이터에 관련된 것이다. 예를 들어, 커널 (124) 의 워크그룹 0 은, 커널 (128) 의 워크그룹 0 뿐만 아니라, 커널 (132) 의 워크그룹 0 과 동일한 입력 데이터와 연관된 명령들을 포함한다. 또한, GPU (48) 는 커널들 (124 내지 132) 을 연속하여 실행할 수도 있어서, 커널 (124) 이 커널 (128) 이전에 실행되고, 커널 (128) 이 커널 (132) 이전에 실행되도록 한다.
본 개시물의 일부 양태에 따르면, 하나의 커널의 하나 이상의 워크그룹들의 결과들은 또 다른 커널의 워크그룹들을 관련없는 것으로 렌더링할 수도 있다. 예를 들어, GPU (48) 는 커널 (124) 의 워크그룹 0 을 실행할 수도 있고, 커널 (124) 의 워크그룹 0 의 결과들은 커널 (128) 의 워크그룹 0 과 연관된 명령들을 관련없는 것으로 렌더링할 수도 있다. 커널 (128) 의 워크그룹 0 은, 워크그룹 0 과 연관된 명령들이 커널들 (124 내지 132) 의 끝까지 다다른 목표를 증진시키지 않는 경우 관련없는 것으로 간주될 수도 있다. 예를 들어, 일 예시적인 이미지 프로세싱 애플리케이션에서, 커널들 (124 내지 132) 의 하나의 끝까지 다다른 목표는, 이미지에서 인간의 안면을 식별하는 것일 수도 있다.
본 개시물의 양태들은 워크그룹들이 실행될 수 있기 전에 관련없는 워크그룹들을 선별 또는 삭제하도록 구현될 수도 있다. 상술된 예에서, GPU (48) 는 워크그룹 0 이 SP들 (84) 에게 분배될 수 있기 전에 관련없는 워크그룹 0 을 삭제할 수도 있다. 예를 들어, 선별 모듈 (80) 은, 워크그룹 0 이 SP들 (84) 에게 분배될 수 있기 전에, 워크그룹 0 이 관련없는 것으로 결정하고, 워크그룹 0 을 선별하기 위해 선별 버퍼 (76) 에 저장된 값들을 활용할 수도 있다.
언급된 바와 같이, 하나의 애플리케이션 특정 구현에 따르면, GPU (48) 는 도 5a 내지 도 5c 에 도시된 이미지와 같은 이미지에 대한 특정 태스크를 수행하도록 커널들 (124 내지 132) 을 실행할 수도 있다.
도 5a 내지 도 5c 는 3개의 커널들 (예를 들어, 도 5a 에 도시된 커널 (150), 도 5b 에 도시된 커널 (158), 및 도 5c 에 도시된 커널 (164)) 로 프로세싱되는 일 예시적인 이미지 (146) 를 예시한 블록 다이어그램들이다. 예를 들어, 커널들 (150, 158, 및 164) 각각은 이미지 (146) 와 연관된 이미지 데이터를 프로세싱하기 위한 명령들을 포함한다. 단지 예시의 목적을 위해, 도 5a 내지 도 5c 는 도 2 에 도시된 예시적인 GPU (48) 에 관해 설명된다.
도 5a 내지 도 5c 에 도시된 예에 따르면, 이미지 (146) 는, 1024개의 픽셀들을 포함하는, 정방형의 대략 16 메가바이트 (MB) 이미지이다. 각 커널 (150, 158, 및 164) 은 이미지의 특정 픽셀과 관련될 수도 있는 (예를 들어, 비교적 보다 작은 블록들로 나타내는) 워크 아이템들을 포함한다. 이에 따라, GPU (48) 가 워크 아이템을 실행할 때, 워크 아이템과 연관된 명령에 따라 이미지 (146) 의 대응하는 픽셀이 프로세싱 (예를 들어, 분석) 될 수도 있다.
또한, 각 커널 (150, 158, 및 164) 은 이미지 (146) 의 픽셀들의 특정 그룹과 관련된 명령들을 포함하는 (예를 들어, 비교적 보다 큰 블록들로 나타내는) 워크그룹들을 포함한다. 도 5a 내지 도 5c 에 대해 설명된 픽셀 데이터, 워크 아이템들, 및 워크그룹들 간의 관계들은 단지 가능한 명령 구조들의 일 예이다. 다른 예들에 있어서, 워크 아이템은 이미지 (146) 의 하나의 픽셀보다 많게 또는 적게 관련될 수도 있다.
하나의 비제한적인 예에 따르면, 커널들 (150, 158, 및 164) 은 이미지 (146) 에서 하나 이상의 인간 안면들을 검출하기 위한 안면 검출 애플리케이션의 부분으로서 구현된다. 이 예에서, 커널들 (150, 158, 및 164) 은 인간의 안면과 연관된 특정의 미리 결정된 속성들 (예를 들어, 컬러, 색조, 채도, 밝기, 또는 다른 속성들) 을 포함하는 픽셀들을 식별하도록 구현된다. GPU (48) 는 안면의 후보 픽셀들로서 커널들 (150, 158, 및 164) 에 제시된 기준들 모두를 만족시키는 이미지 (146) 에서의 임의의 픽셀 또는 픽셀들의 그룹을 식별할 수도 있다. 예를 들어, 픽셀이 커널 (150) 의 피처를 포함하지 않는 경우, 커널 (158) 및 커널 (164) 에서 이러한 픽셀과 연관된 명령들은 관련없는 것으로 렌더링된다.
도 5a 내지 도 5c 에 관해 더 상세히 도시 및 설명된 바와 같이, GPU (48) 가 커널들 (150, 158, 및 164) 각각을 실행함에 따라, 후속 커널들과 연관된 관련있는 명령들은 점점 "스파스" 하게 된다. 예를 들어, 각 커널이 실행된 후에, GPU (48) 가 안면 픽셀들의 미리 결정된 특성들을 포함하지 않는 보다 많은 픽셀들을 식별하기 때문에, 후속 커널들의 보다 많은 명령들이 관련없는 것으로 렌더링된다. 본 개시물의 양태들에 따르면, GPU (48) 는 실행을 위해 관련없는 명령들이 SP들 (84) 에게 분배되기 전에 관련없는 명령들을 삭제하도록 명령 선별을 구현할 수 있다. 이러한 방법으로, SP들 (84) 이 관련없는 명령들을 실행하는 것으로 차지되지 않기 때문에, GPU (48) 의 효율이 증가된다.
도 5a 는 이미지 (146) 를 프로세싱하기 위해 제 1 커널 (150) 을 예시한 블록 다이어그램이다. 도 5a 에 도시된 바와 같이, 제 1 커널은 워크그룹들 (154A 내지 154P) (총괄하여, 워크그룹들 (154)) 을 포함하고, 이 워크그룹들 각각은 복수의 워크 아이템들 (156) 을 포함한다. GPU (48) 는 워크그룹들 (154A 내지 154P) 과 연관된 워크 아이템들 (156) 모두를 실행함으로써 제 1 커널 (150) 을 실행할 수도 있다. 예를 들어, GPU (48) 는 도 1 에 도시된 호스트 프로세서 (24) 와 같은 호스트 프로세서, 또는 또 다른 컴퓨팅 유닛으로부터 제 1 커널 (150) 을 수신할 수도 있다. 제 1 커널 (150) 의 수신시, 시퀀서 모듈 (72) 은 제 1 커널 (150) 을 워크그룹들 (154) 로 조직화할 수도 있다.
시퀀서 모듈 (72) 은 그 후에, 워크그룹들 (154) 및 워크 아이템들 (156) 모두를 SP들 (84) 에게 분배하는 것으로 진행할 수도 있다. SP들 (84) 은 그 후에, 워크그룹들 (154) 및 관련 워크 아이템들 (156) 을 실행하고, 선별 버퍼 (76) 에 하나 이상의 선별 버퍼 값들이 채워진다. 선별 버퍼 값들은 제 1 커널 (150) 의 실행된 워크 아이템의 특성을 나타낼 수도 있다. 이 특성은 다음 커널과 연관된 후속 명령이 관련있는지 또는 관련없는지 여부를 결정하기 위해 이용될 수 있다. 예를 들어, 특정 워크 아이템의 결과가 특정 워크 아이템과 연관된 픽셀이 커널 (150) 의 원하는 미리 정의된 속성, 예컨대, 미리 정의된 컬러, 색조, 채도, 밝기 또는 다른 속성을 포함하지 않는 것으로 나타내는 경우, 명령을 실행하는 것을 담당하는 SP 는 픽셀과 연관된 후속 워크 아이템들이 관련없는 것을 나타내는 값을 선별 버퍼 (76) 에 저장할 수도 있다. 동일한 SP 가 전체 워크그룹을 실행하는 것을 담당하는 경우, SP 는 또한 전체 워크그룹과 연관된 픽셀들이 관련없는 것으로 나타낸 값을 선별 버퍼 (76) 에 저장할 수도 있다. GPU (48) 가 커널 (150) 을 실행하여 선별 버퍼 (76) 를 채운 후에, GPU (48) 는 도 5 에 도시된 바와 같은 커널 (158) 을 실행하는 것으로 진행할 수도 있다.
도 5b 는, 본 개시물의 양태들에 따른, 제 2 커널 (158) 에 대한 명령 선별을 예시한 블록 다이어그램이다. 본 개시물의 일부 양태에 따르면, 선별 이전에, 제 2 커널 (158) 은 본래, 도 5a 에 도시된 워크그룹들 (154A 내지 154P) 에 대응하는 워크그룹들 (160A 내지 160P) (총괄하여, 워크그룹들 (160)) 을 포함한다. 또한, 선별 이전에, 워크그룹들 (160) 각각은 본래, 도 5a 에 도시된 워크 아이템들 (156) 에 대응하는 워크 아이템들 (162) 의 전체 세트를 포함한다. 워크그룹들 (160) 및 워크 아이템들 (162) 은 도 5a 에 도시된 제 1 커널 (150) 과 동일한 입력 데이터, 즉, 이미지 (146) 에 대해 실행될 수도 있다.
도 5b 에 도시된 예에서, GPU (48) 는 제 2 커널 (158) 로부터의 관련없는 워크그룹들 (160) 및 워크 아이템들 (162) 에 대한 명령 선별을 수행한다. 예를 들어, 제 1 커널 (150) 을 실행한 후에, GPU (48) 는 커널 (150) 의 미리 결정된 속성을 포함하지 않는 다수의 픽셀들을 식별할 수도 있다. 이러한 픽셀들과 연관된 후속 워크그룹들 및 워크 아이템들은 이미지 (146) 에서 안면을 검출하는 것과 관련없는 것으로 간주될 수 있다. GPU (48) 는 관련없는 워크그룹들 및 워크 아이템들에 대한 명령 선별을 수행하기 위해 이용될 수도 있다.
본 개시물의 일부 양태에 따르면, GPU (48) 는 워크 아이템과 워크그룹 양쪽을 기초로 선별 버퍼 (76) 및 선별 모듈 (80) 을 구현함으로써 명령들을 선별한다. 예를 들어, 제 1 커널 (150) 을 실행한 후에, GPU (48) 는 워크그룹들 (154M 내지 154P) 의 위치에서의 픽셀들의 후속 명령들이 관련없는 것으로 결정할 수도 있다. 또한, GPU (48) 는 (도 5a 에 도시된) 워크그룹 (154H) 내의 특정 픽셀들에 대한 후속 명령들이 관련없는 것으로 결정할 수도 있다. 이에 따라, GPU (48) 는 워크그룹들 (160M 내지 160P) 및 특정 워크 아이템들 (162) 과 연관된 픽셀 데이터가 관련없는 것으로 나타내는 값들을 선별 버퍼 (76) 에 저장한다. 커널 (158) 의 실행시, GPU (48) 는 선별 모듈 (80) 을 이용하여 워크그룹들 (160M 내지 160P) 및 특정 워크 아이템들 (162) 을 선별할 수 있다.
선별 모듈 (80) 이 명령 선별을 완료한 후에, 시퀀서 모듈 (72) 은 나머지 명령들을 조직화하여 이 명령들을 SP들 (84) 에게 분배한다. 예를 들어, 일부 양태에 따르면, SP들 (84) 은, 이 명령들이, GPU 의존적일 수도 있는 ALU들 (92) 에게 병렬로 용이하게 분배되게 하는 방법으로 조직화되는 명령들을 수신하도록 구성된다. 이에 따라, 시퀀서 모듈 (72) 은 제 2 커널 (158) 과 연관된 명령들을 재조직화하여 분배 및 실행 프로세스들을 최적화할 수도 있다.
선별된 명령들의 세트를 수신한 후에, SP들 (84) 은 명령들을 실행한다. 또한, SP들 (84) 은 선별 버퍼 (76) 에서의 값을 업데이트할 수도 있다. 예를 들어, 특정 워크 아이템 (162) 의 결과가 특정 워크 아이템 (162) 과 연관된 픽셀이 커널 (158) 의 원하는 미리 정의된 속성을 포함하지 않는 것으로 나타내는 경우, 워크 아이템 (162) 을 실행하는 것을 담당하는 SP 는 이러한 픽셀과 연관된 후속 워크 아이템들이 관련없는 것으로 나타내는 값을 선별 버퍼 (76) 에 저장할 수도 있다. 동일한 SP 가 전체 워크그룹을 실행하는 것을 담당하는 경우, SP 는 또한 전체 워크그룹과 연관된 픽셀들이 관련없는 것으로 나타낸 값을 선별 버퍼 (76) 에 저장할 수도 있다. GPU (48) 가 커널 (158) 을 실행하고 선별 버퍼 (76) 를 채운 후에, GPU (48) 는 도 5c 에 도시된 바와 같은 커널 (164) 을 실행하는 것으로 진행할 수도 있다.
도 5c 는, 본 개시물의 양태들에 따른, 제 3 커널 (164) 에 대한 명령 선별을 예시한 블록 다이어그램이다. 본 개시물의 일부 양태에 따르면, 선별 이전에, 제 3 커널 (164) 은 본래, 도 5a 에 도시된 워크그룹들 (154A 내지 154P) 에 대응하는 워크그룹들 (166A 내지 166P) (총괄하여, 워크그룹들 (166)) 을 포함한다. 또한, 선별 이전에, 워크그룹들 (166) 각각은 본래, 도 5a 에 도시된 워크 아이템들 (156) 에 대응하는 워크 아이템들 (168) 의 전체 세트를 포함한다. 워크그룹들 (166) 및 워크 아이템들 (168) 은 도 5a 에 도시된 제 1 커널 (150) 및 도 5b 에 도시된 제 2 커널 (158) 과 동일한 입력 데이터, 즉, 이미지 (146) 에 대해 실행된다.
도 5c 에 도시된 바와 같이, GPU (48) 는 제 3 커널 (164) 을 실행하기 전에 명령 선별을 수행하여, GPU (48) 의 SP들 (84) 에 의한 프로세싱을 위한 명령들의 수를 더 감소시키도록 할 수도 있다. 예를 들어, 제 2 커널 (158) 을 실행한 후에, GPU (48) 는 워크그룹들 (158A, 158B, 158E, 158I, 및 158M 내지 158P) 의 위치들에서의 픽셀 데이터에 대한 후속 명령들이 관련없는 것으로 결정할 수도 있다. 또한, GPU (48) 는 (도 5b 에 도시된) 워크그룹 (158H) 내의 특정 픽셀 데이터에 대한 후속 명령들이 관련없는 것으로 결정할 수도 있다. 이에 따라, GPU (48) 는 워크그룹들 (166A, 166B, 166E, 166I, 및 166M 내지 166P) 및 특정 워크 아이템들 (168) 과 연관된 픽셀 데이터가 관련없는 것으로 나타내는, 선별 버퍼 (76) 에서의 값들을 업데이트한다. 커널 (164) 의 실행시, GPU (48) 는, 도 5b 에 관해 설명된 바와 같이, 선별 모듈 (80) 을 이용하여 워크그룹들 (166A, 166B, 166E, 166I, 및 166M 내지 166P) 및 특정 워크 아이템들 (168) 을 선별하고, 나머지 명령들을 실행할 수 있다.
도 5a 내지 도 5c 에 도시된 예가 예시하고 있는 바와 같이, 명령 선별은, 애플리케이션이 다른 명령들이 관련없는 것으로 렌더링하는 몇몇 명령들을 포함할 때, GPU 에 대한 연산들의 수를 크게 감소시킬 수도 있다. GPU 가 관련없는 명령들을 분배 및 실행하는 것으로 리소스들을 쓸 필요가 없기 때문에, 선별 명령들은 GPU 의 전체 효율을 증가시킬 수도 있다.
일반적으로, 도 5a 내지 도 5c 는 워크 아이템과 워크그룹 레벨 양쪽에 대한 명령들을 선별하는 GPU (48) 를 설명한다. 그러나, 다른 예들에 있어서, GPU (48) 는 워크 아이템 선별 또는 워크그룹 선별 중 어느 하나를 수행할 수도 있다. 또한, 도 5a 내지 도 5c 는 또한 커널 간을 기초로 하는 명령 선별을 설명한다. 예를 들어, GPU (48) 는 커널의 모든 워크그룹들 및 모든 워크 아이템들을 실행한 후에만 명령들을 선별할 수도 있다. 다른 예들에 있어서, GPU (48) 는 다른 간격들로 명령 선별을 수행할 수도 있다. 일부 양태에 따르면, GPU (48) 는, 어떤 방법으로든 이전에 실행된 또 다른 명령에 기초할 수도 있는, 명령의 실행 이전의 임의의 시간에 명령 선별을 수행할 수도 있다.
도 6 은, 본 개시물의 양태들에 따른, 명령들을 선별하는 방법 (200) 을 예시한 플로우 차트이다. 일부 예에서, 방법 (200) 은 도 2 에 도시된 GPU (48) 와 같은 GPU 에 의해 수행될 수도 있다. 이에 따라, 단지 예시의 목적을 위해, 방법 (200) 은 도 2 에 도시된 예시적인 GPU (48) 에 의해 수행되는 것으로 설명된다.
본 개시물의 양태들에 따르면, GPU (48) 는 하나 이상의 명령들의 실행 이후에 명령 선별을 수행한다. GPU (48) 는 처음에, 예를 들어, 도 1 에 도시된 호스트 프로세서 (24) 와 같은 호스트 프로세서로부터 하나 이상의 명령들을 수신한다. 예를 들어, 제 1 워크 아이템을 수신한 후에, GPU (48) 는 제 1 워크 아이템을 실행한다 (204). 일부 예에서, GPU (48) 는 시퀀서 모듈 (72) 을 이용하여 워크 아이템을 SP들 (84) 을 분배함으로써 제 1 워크 아이템을 실행할 수도 있다. SP들 (84) 은 그 후에, 실행을 위해 하나 이상의 하드웨어 스레드들을 구성하고 이 하드웨어 스레드들을 ALU들 (92) 에게 분배함으로써 워크 아이템을 실행할 수도 있다.
제 1 워크 아이템이 실행된 후에, GPU (48) 는 하나 이상의 선별 값들을 발생시킨다 (208). 선별 버퍼 값은 실행된 워크 아이템의 특성을 나타낼 수도 있다. 일부 예에서, 이 특성은 제 1 워크 아이템과 동일한 입력 데이터와 연관된 후속 워크 아이템이 관련있는지 또는 관련없는지 여부를 결정하기 위해 이용될 수 있다. 또 다시, 워크 아이템이 명령이 포함되는 애플리케이션의 목표 또는 목적을 증진시키지 않는 경우, 워크 아이템은 관련없는 것으로 간주될 수도 있다. 예를 들어, 도 5a 내지 도 5c 에 관해 설명된 안면 검출 예와 같은 이미지 프로세싱 맥락에서, 워크 아이템들이 이미지에서 안면을 식별하는 목적을 증진시키지 않는 경우 그 워크 아이템들은 관련없는 것으로 간주될 수도 있다.
하나의 예에서, 선별 버퍼 값은, 후속 워크 아이템이 관련있는지 또는 관련없는지 여부를 나타내는 단일 바이너리 값일 수도 있다. 다른 예들에 있어서, 2개 이상의 선별 버퍼 값이 단일 워크 아이템에 대해 저장될 수도 있다. 예를 들어, 2개 이상의 선별 버퍼 값이 단일 워크 아이템에 대해 저장될 수도 있고, 여기서 각각의 선별 버퍼 값은 실행된 워크 아이템의 상이한 특성에 대응한다. 비제한적인 이미지 프로세싱 예에서, GPU (48) 는 픽셀 데이터의 적색 녹색 청색 (RGB) 특성들을 결정하기 위해 픽셀 데이터에 대해 워크 아이템을 실행할 수도 있다. 이에 따라, 실행된 워크 아이템의 적색, 녹색, 및 청색 성분들에 대응하는 3개의 선별 버퍼 값들이 저장될 수도 있다. 이 예에서, GPU (48) 및 선별 모듈 (80) 은 선별 버퍼 (76) 에 저장된 값들 중 임의의 값에 기초하여 워크 아이템들을 선별할 수도 있다. 선별 버퍼 값을 발생시킨 후에, GPU (48) 는 선별 버퍼 (76) 와 같은 버퍼에 하나 이상의 선별 값들이 채워질 수도 있다 (212).
GPU (48) 는 그 후에, 또 다른 워크 아이템을 수신한다 (216). 일부 예에서, 제 2 워크 아이템은 제 1 워크 아이템에 의존하고, 제 1 워크 아이템과 동일한 입력 데이터와 연관된다. 예를 들어, 제 2 워크 아이템은, 제 1 워크 아이템의 결과가 특정의 미리 결정된 값, 또는 복수의 미리 결정된 값들 중 하나로 평가되는 경우에만 단지 관련있는 것일 수도 있다. 제 2 워크 아이템의 수신시, GPU (48) 는 제 2 워크 아이템과 연관된 선별 버퍼 값을 분석할 수도 있다 (220). 일부 양태에 따르면, GPU (48) 는 선별 버퍼 값들을 인덱싱하여, GPU (48) 가 제 2 워크 아이템이 동일한 입력 데이터에 대응하고 제 1 워크 아이템에 의존하는 것으로 식별할 수 있도록 한다. 이에 따라, GPU (48) 는 선별 버퍼 값에 기초하여 제 2 워크 아이템을 실행할지 여부를 결정할 수 있다 (224).
일부 예에 따르면, GPU (48) 가 선별 버퍼 값에 기초하여 제 2 워크 아이템이 관련있는 것으로 결정하는 경우 GPU (48) 는 제 2 워크 아이템을 실행할 수도 있다 (228). 제 2 워크 아이템을 실행한 후에, GPU (48) 는 제 2 워크 아이템의 결과의 특성을 나타내는 선별 값을 발생시킴으로써 프로세스를 반복하기 시작할 수도 있다 (단계 208). 대안적으로, GPU (48) 가 선별 버퍼 값에 기초하여 제 2 워크 아이템이 관련없는 것으로 결정하는 경우, GPU (48) 는 제 2 워크 아이템을 실행하지 않을 수도 있고, 제 2 워크 아이템을 폐기할 수도 있다 (232). GPU (48) 가 제 2 워크 아이템을 실행하지 않는 경우, GPU (48) 는 다음 워크 아이템을 수신하는 것으로 바로 진행할 수도 있다 (216).
도 6 의 방법은 워크 아이템을 기초로 하는 명령 선별을 설명한다. 예를 들어, 워크 아이템들이 개별적으로 실행되는 것으로 설명되는 것, 선별 값들이 개별적으로 발생되는 것으로 설명되는 것 등등이 있다. 그러나, 실제로 GPU 는 2개 이상의 명령을 병렬로 실행할 수도 있다는 것을 이해해야 한다. 이에 따라, 2개 이상의 값이 선별 버퍼 (76) 에 실질적으로 동시에 기입될 수도 있다. 또한, GPU 는 2개 이상의 선별 버퍼 값이 새로운 명령들에 실질적으로 동시에 관련되어 있는 것으로 이 2개 이상의 선별 버퍼 값을 분석할 수도 있다. 도 5a 내지 도 5c 에 관해 설명된 바와 같이, 일부 예에서, GPU (48) 는 특정 수의 명령들을 실행한 후에 (예를 들어, 명령들의 커널을 실행한 후에) 명령 선별을 실행할 수도 있고, 개개의 워크 아이템 또는 그룹 (예를 들어, 워크그룹) 을 기초로 명령 선별을 수행할 수도 있다.
도 7 은, 본 개시물의 양태들에 따른, 명령들을 선별하도록 구현될 수도 있는 명령 플로우 (250) 를 예시한 플로우 차트이다. 일부 예에서, 명령 플로우 (250) 는 도 2 에 도시된 GPU (48) 와 같은 GPU 에 의해 구현될 수도 있다. 이에 따라, 단지 예시의 목적을 위해, 명령 플로우 (250) 는 도 2 에 도시된 예시적인 GPU (48) 에 의해 구현되는 것으로 설명된다. 도 7 은 워크그룹과 워크 아이템 양쪽을 기초로 하는 명령 선별을 도시한 것이다. 그러나, GPU (48) 와 같은 GPU 는 워크그룹만을 기초로 하여, 또는 워크 아이템만을 기초로 하여 명령 선별을 수행할 수도 있다는 것을 이해해야 한다.
본 개시물의 양태들에 따르면, GPU (48) 는 명령들을 수신하고, 이 명령들을 하나 이상의 워크그룹들로 조직화한다 (254). 일부 예에서, GPU (48) 는, 명령들을, 도 4 에 도시된 워크그룹들의 그리드들과 같은, 워크그룹들의 하나 이상의 그리드들로 조직화할 수도 있다. 명령들이 워크그룹들로 조직화된 후에, GPU (48) 는 워크그룹 선별을 수행한다 (258). 예를 들어, GPU (48) 는 선별 버퍼 (76) 에 저장된 값들을 분석하고 이 값들을 워크그룹의 현재 세트에 관련시킴으로써 워크그룹 선별을 수행할 수도 있다. GPU (48) 는 GPU (48) 가 관련없는 명령들로 전체가 이루어진 것으로 식별한 임의의 워크그룹들을 선별할 수도 있다. 워크그룹들을 선별한 후에, GPU (48) 는 실행을 위한 워크그룹들을 셋업할 수도 있다 (262). 예를 들어, GPU (48) 는, 나머지 워크그룹들을, 그 워크그룹들이 SP들 (84) 로 분배되게 하는 구성으로 조직화할 수도 있다.
일부 예에서, GPU (48) 는 그 후에 워크 아이템 선별을 수행한다 (266). GPU (48) 는 워크그룹을 기초로 워크 아이템 선별을 수행할 수도 있다. 예를 들어, GPU (48) 는 선별 버퍼 (76) 에 저장된 값들을 분석하고, 이 값들을 워크그룹의 워크 아이템들에 한 번에 한 워크그룹씩 관련시킬 수도 있다. GPU (48) 는 GPU 가 (예를 들어, 선별 버퍼 값들에 따라) 관련없는 것으로 식별하는 임의의 워크 아이템들을 선별할 수도 있다. 워크 아이템들을 선별한 후에, GPU (48) 는 실행을 위한 워크 아이템들을 셋업할 수도 있다 (270). 예를 들어, GPU (48) 는, 나머지 워크 아이템들을, 워크그룹들이 스레드들로 형성되게 하고 SP들 (84) 에 의해 실행되게 하는 구성으로 조직화할 수도 있다.
그 다음에, GPU (48) 는 하나 이상의 워크그룹들 및 관련 워크 아이템들을 실행시킬 수도 있다 (274). 명령들을 실행한 후에, GPU (48) 는 후속 워크그룹들 및 워크 아이템들을 선별하기 위한 값들을 업데이트할 수도 있다 (278). 예를 들어, GPU (48) 는 실행된 명령들의 결과의 특성을 나타내는 값들로 선별 버퍼 (76) 를 업데이트할 수도 있다.
일반적으로, 본 개시물의 기법들은 2개 이상의 커널을 이용하여 입력 데이터를 프로세싱하기 위한 애플리케이션을 실행하는 것을 포함한다. 제 1 커널의 워크 아이템들 및 워크그룹들의 실행시, GPU 는 제 2 커널의 워크 아이템들 및 워크그룹들이 관련있는지 여부를 나타내는 선별 버퍼 값들을 설정할 수도 있다. 즉, GPU 는, 제 1 커널의 결과들에 기초하여, 제 1 커널의 워크 아이템들 및 워크그룹들 각각의 동일한 입력 데이터와 연관된 제 2 커널의 각각의 워크 아이템들 및 워크그룹들이 관련있는지 여부를 나타내는 선별 버퍼 값들을 설정할 수도 있다. 따라서, 제 1 커널을 실행한 후에, GPU (48) 는 선별 버퍼 값들을 활용하여 제 2 커널에서 관련없는 워크 아이템들 및 워크그룹들을 선별할 수도 있어서, 관련없는 워크 아이템들 및 워크그룹들이 실행되지 않도록 한다.
따라서, 본 개시물의 양태들은 일반적으로 명령 선별에 관한 것이다. 상기 도면들에 관해 설명된 예들 및 양태들은 단지 예들로서 제공된 것이라는 것을 이해해야 한다. 또한, 본 개시물의 양태들은 명령 선별을 수행하는 다른 방식들에 관한 것이다. 예를 들어, 명령 선별이 GPU 에 의해 전부 수행되는 것으로 설명되어 있지만, 또 다른 예에서, 명령은 컴퓨팅 컴포넌트들 또는 디바이스들의 조합에 의해 수행될 수도 있다. 하나의 예에서, 도 2 에 도시된 선별 모듈 (80) 및 선별 버퍼 (76) 와 같은 선별 모듈 및 선별 버퍼는, GPU 의 외부에 있는 컴포넌트로 구현될 수도 있다. 이 예에서, 중앙 프로세싱 유닛 또는 호스트 프로세서는, 명령들을 GPU 에 제공하기 전에, 선별 버퍼에 액세스하여 명령 선별을 구현할 수도 있다.
또한, 본 개시물의 양태들은 일반적으로, 관련없는 워크 아이템들 및 워크그룹들이 실행되기 전에, 그 관련없는 워크 아이템들 및 워크그룹들을 선별하는 것에 관한 것이라는 것을 이해해야 한다. 상술된 바와 같이, 용어 "워크 아이템" 은 일반적으로, 하나 이상의 개개의 명령들을 포함할 수도 있는, 입력 데이터를 프로세싱하기 위한 기능을 정의하는 하나 이상의 명령을 설명한다. 또한, "워크 아이템" 은 일부 아키텍처들에서 "스레드" 라고 지칭될 수도 있다. 또한, 용어 "워크그룹" 은 워크 아이템들의 미리 정의된 그룹을 총칭적으로 지칭한다는 것을 이해해야 한다. 또한, "워크그룹" 은 일부 아키텍처들에서 "스레드 블록" 이라고 지칭될 수도 있다.
하나 이상의 예들에서, 설명된 기능들은 하드웨어, 하드웨어에서 실행되는 소프트웨어, 하드웨어에서 실행되는 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 일부 예에서, 컴퓨터 판독가능 매체에 저장된 명령들은 하드웨어 컴포넌트들로 하여금 상술된 이들의 각각의 기능들을 수행하게 할 수도 있다. 컴퓨터 판독가능 매체는 컴퓨터 데이터 저장 매체를 포함할 수도 있다. 데이터 저장 매체는 본 개시물에서 설명된 기법들의 구현을 위해 명령들, 코드 및/또는 데이터 구조들을 취출하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 이용가능 매체일 수도 있다. 비제한적인 예로, 이러한 컴퓨터 판독가능 매체는 RAM, ROM, EEPROM, CD-ROM 또는 다른 광 디스크 저장, 자기 디스크 저장, 또는 다른 자기 저장 디바이스들, 플래시 메모리, 또는 원하는 프로그램 코드를 명령들 또는 데이터 구조들의 형태로 운반하거나 저장하는데 사용될 수도 있고 컴퓨터에 의해 액세스될 수도 있는 임의의 다른 매체를 포함할 수 있다. 또한, 상기의 조합들은 컴퓨터 판독가능 매체의 범위 내에 포함되어야 한다.
코드는, 하나 이상의 프로세서들, 예컨대, 하나 이상의 DSP들, 범용 마이크로프로세서들, ASIC들, FPGA들, 또는 다른 등가의 통합 또는 이산 로직 회로에 의해 실행될 수도 있다. 이에 따라, 용어 "프로세서" 는, 여기에 사용될 때 전술한 구조 중 임의의 구조 또는 여기에 설명된 기법들의 구현에 적합한 임의의 다른 구조를 지칭할 수도 있다. 또한, 일부 양태에서, 여기에 설명된 기능성은 인코딩 및 디코딩을 위해 구성되는 전용 하드웨어 및/또는 소프트웨어 모듈들 내에 제공되거나, 또는 결합된 코덱에 포함될 수도 있다. 또한, 이 기법들은 하나 이상의 회로들 또는 로직 엘리먼트들로 전적으로 구현될 수 있다.
본 개시물의 기법들은 무선 핸드셋, 집적 회로 (IC) 또는 IC들의 세트 (예를 들어, 칩 세트) 를 포함한, 매우 다양한 디바이스들 또는 장치들로 구현될 수도 있다. 개시된 기법들을 수행하도록 구성된 디바이스들의 기능적 양태들을 강조하기 위해 다양한 컴포넌트들, 모듈들, 또는 유닛들이 본 개시물에서 설명되지만, 상이한 하드웨어 유닛들에 의한 실현을 반드시 필요로 하지는 않는다. 오히려, 상술된 바와 같이, 다양한 유닛들이 적합한 소프트웨어 및/또는 펌웨어와 함께, 상술된 바와 같은 하나 이상의 프로세서들을 포함한, 상호작용하는 하드웨어 유닛들의 콜렉션으로 조합될 수도 있다.
본 개시물의 다양한 예들 및 양태들이 설명되었다. 이들 및 다른 예들 및 양태들은 다음 청구항들의 범위 내에 있다.

Claims (37)

  1. 그래픽 프로세싱 유닛 (graphics processing unit; GPU) 에 의해 데이터를 프로세싱하는 방법으로서,
    상기 GPU 의 하나 이상의 셰이더 프로세서들 (shader processors) 에 의해, 제 1 커널 및 연속하여 실행되는 하나 이상의 커널들을 포함하는 애플리케이션의 상기 제 1 커널의 제 1 워크 아이템 (work item) 을 실행하는 단계로서, 상기 제 1 워크 아이템은 입력 데이터를 프로세싱하기 위한 하나 이상의 명령들을 포함하는, 상기 제 1 워크 아이템을 실행하는 단계;
    상기 제 1 워크 아이템의 결과뿐만 아니라, 상기 제 1 커널의 상기 제 1 워크 아이템의 상기 결과에 기초한 하나 이상의 선별 값들 (cull values) 을 발생시키는 단계로서, 상기 하나 이상의 선별 값들은 상기 입력 데이터에 대한 상기 하나 이상의 커널들의 워크 아이템들을 실행할지 여부를 나타내는, 상기 발생시키는 단계; 및
    상기 하나 이상의 선별 값들이 상기 하나 이상의 커널들의 상기 워크 아이템들이 실행되지 않는 것을 나타내는 경우, 상기 하나 이상의 커널들의 상기 워크 아이템들을 실행하지 않을 것을 결정하고, 상기 워크 아이템들이 상기 하나 이상의 셰이더 프로세서들에 의해 실행되도록 스케줄링하기 전에 명령 스트림 (instruction stream) 으로부터 상기 하나 이상의 커널들의 상기 워크 아이템들을 삭제하는 단계
    를 포함하는, 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 방법.
  2. 삭제
  3. 삭제
  4. 제 1 항에 있어서,
    상기 하나 이상의 선별 값들을 버퍼에 저장하는 단계를 더 포함하고,
    상기 하나 이상의 커널들의 상기 워크 아이템들을 실행할지 여부를 결정하는 단계가 상기 버퍼에 저장된 상기 하나 이상의 선별 값들을 판독하는 단계를 포함하는, 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 방법.
  5. 삭제
  6. 제 4 항에 있어서,
    상기 하나 이상의 커널들의 상기 워크 아이템들을 실행하지 않을 것을 결정하고, 상기 하나 이상의 커널들의 상기 워크 아이템들을 삭제하는 단계 이후에,
    상기 GPU 의 셰이더 프로세서에 의해 상기 입력 데이터에 대한 상기 하나 이상의 커널들 중 제 2 커널의 제 2 워크 아이템을 실행하는 단계;
    상기 제 2 워크 아이템의 결과에 기초하여 상기 하나 이상의 선별 값들을 업데이트하는 단계로서, 상기 하나 이상의 선별 값들은 상기 입력 데이터에 대한 상기 하나 이상의 커널들의 후속하는 워크 아이템들을 실행할지 여부를 나타내는. 상기 업데이트하는 단계; 및
    업데이트된 상기 하나 이상의 선별 값들에 기초하여 상기 후속하는 워크 아이템들을 실행할지 여부를 결정하는 단계
    를 더 포함하는, 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 방법.
  7. 삭제
  8. 삭제
  9. 제 1 항에 있어서,
    상기 GPU 의 셰이더 프로세서에 의해 제 1 워크그룹 (workgroup) 을 실행하는 단계로서, 상기 제 1 워크그룹은 상기 제 1 커널과 연관되고, 상기 제 1 워크그룹은, 상기 입력 데이터를 프로세싱하기 위한, 상기 제 1 워크 아이템을 포함하는 복수의 명령들을 포함하는, 상기 제 1 워크그룹을 실행하는 단계;
    상기 제 1 워크그룹의 결과들에 기초하여 하나 이상의 워크그룹 선별 값들을 발생시키는 단계로서, 상기 하나 이상의 워크그룹 선별 값들은 상기 하나 이상의 커널들의 워크그룹들을 실행할지 여부를 나타내는, 상기 발생시키는 단계;
    상기 하나 이상의 워크그룹 선별 값들에 기초하여 상기 하나 이상의 커널들의 상기 워크그룹들을 실행할지 여부를 결정하는 단계
    를 더 포함하는, 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 방법.
  10. 그래픽 프로세싱 유닛 (graphics processing unit; GPU) 에 의해 데이터를 프로세싱하는 장치로서,
    하나 이상의 셰이더 프로세서들로서,
    제 1 커널 및 연속하여 실행되는 하나 이상의 커널들을 포함하는 애플리케이션의 상기 제 1 커널의 제 1 워크 아이템을 실행하도록, 그리고
    상기 제 1 워크 아이템의 결과뿐만 아니라, 상기 제 1 커널의 상기 제 1 워크 아이템의 상기 결과에 기초한 하나 이상의 선별 값들을 발생시키도록 구성되며,
    상기 제 1 워크 아이템은 입력 데이터를 프로세싱하기 위한 하나 이상의 명령들을 포함하고,
    상기 하나 이상의 선별 값들은 상기 입력 데이터에 대한 상기 하나 이상의 커널들의 워크 아이템들을 실행할지 여부를 나타내는, 상기 하나 이상의 셰이더 프로세서들; 및
    상기 하나 이상의 선별 값들이 상기 하나 이상의 커널들의 상기 워크 아이템들이 실행되지 않는 것을 나타내는 경우, 상기 하나 이상의 커널들의 상기 워크 아이템들을 실행하지 않을 것을 결정하고, 상기 워크 아이템들이 상기 하나 이상의 셰이더 프로세서에 의해 실행되도록 스케줄링하기 전에 명령 스트림으로부터 상기 하나 이상의 커널들의 상기 워크 아이템들을 삭제하도록 구성된 선별 모듈 (cull module)
    을 포함하는, 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 장치.
  11. 삭제
  12. 삭제
  13. 제 10 항에 있어서,
    상기 하나 이상의 선별 값들을 저장하도록 구성된 선별 버퍼를 더 포함하고,
    상기 선별 모듈은, 상기 선별 버퍼에 저장된 상기 하나 이상의 선별 값들을 판독함으로써 상기 하나 이상의 커널들의 상기 워크 아이템들을 실행할지 여부를 결정하도록 구성되는, 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 장치.
  14. 삭제
  15. 제 13 항에 있어서,
    상기 하나 이상의 셰이더 프로세서들은 또한,
    상기 하나 이상의 커널들 중 제 2 커널의 제 2 워크 아이템을 실행하고,
    상기 제 2 워크 아이템의 결과에 기초하여, 상기 입력 데이터에 대한 상기 하나 이상의 커널들의 후속하는 워크 아이템들을 실행할지 여부를 나타내는 상기 하나 이상의 선별 값들을 업데이트하며,
    업데이트된 상기 하나 이상의 선별 값들에 기초하여 상기 후속하는 워크 아이템을 실행할지 여부를 결정하도록 구성되는, 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 장치.
  16. 삭제
  17. 삭제
  18. 제 10 항에 있어서,
    상기 하나 이상의 셰이더 프로세서들은,
    상기 입력 데이터를 프로세싱하기 위한 상기 제 1 워크 아이템을 포함하는 복수의 명령들을 포함하며, 상기 제 1 커널과 연관된 제 1 워크그룹을 실행하고,
    상기 제 1 워크그룹의 결과들에 기초하여 상기 하나 이상의 커널들의 워크그룹들을 실행할지 여부를 나타내는 하나 이상의 워크그룹 선별 값들을 발생시키며,
    상기 하나 이상의 워크그룹 선별 값들에 기초하여 상기 하나 이상의 커널들의 상기 워크그룹들을 실행할지 여부를 결정하도록 구성되는, 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 장치.
  19. 제 10 항에 있어서,
    상기 하나 이상의 셰이더 프로세서들 및 선별 모듈은 휴대용 컴퓨팅 디바이스에 포함되는, 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 장치.
  20. 명령들로 인코딩되는 컴퓨터 판독가능 저장 매체로서,
    상기 명령들은, 컴퓨팅 디바이스의 하나 이상의 프로그램가능 프로세서들로 하여금,
    상기 컴퓨팅 디바이스의 GPU 의 하나 이상의 셰이더 프로세서들에 의해, 제 1 커널 및 연속하여 실행되는 하나 이상의 커널들을 포함하는 애플리케이션의 상기 제 1 커널의 제 1 워크 아이템을 실행하게 하는 것으로서, 상기 제 1 워크 아이템은 입력 데이터를 프로세싱하기 위한 하나 이상의 명령들을 포함하는, 상기 제 1 워크 아이템을 실행하게 하고;
    상기 제 1 워크 아이템의 결과뿐만 아니라, 상기 제 1 커널의 상기 제 1 워크 아이템의 상기 결과에 기초한 하나 이상의 선별 값들을 발생시키게 하는 것으로서, 상기 하나 이상의 선별 값들은 상기 입력 데이터에 대한 상기 하나 이상의 커널들의 워크 아이템들을 실행할지 여부를 나타내는, 상기 제 1 워크 아이템의 결과뿐만 아니라 상기 하나 이상의 선별 값들을 발생시키게 하며; 그리고
    상기 하나 이상의 선별 값들이 상기 하나 이상의 커널들의 상기 워크 아이템들이 실행되지 않는 것을 나타내는 경우, 상기 하나 이상의 커널들의 상기 워크 아이템들을 실행하지 않을 것을 결정하게 하고, 상기 워크 아이템들이 상기 하나 이상의 셰이더 프로세서들에 의해 실행되도록 스케줄링하기 전에 명령 스트림으로부터 상기 하나 이상의 커널들의 상기 워크 아이템들을 삭제하게 하는, 컴퓨터 판독가능 저장 매체.
  21. 삭제
  22. 삭제
  23. 제 20 항에 있어서,
    상기 컴퓨팅 디바이스의 하나 이상의 프로세서들로 하여금, 상기 하나 이상의 선별 값들을 버퍼에 저장하게 하는 명령들을 더 포함하고,
    상기 하나 이상의 커널들의 상기 워크 아이템들을 실행할지 여부를 결정하기 위해, 상기 명령들은 상기 하나 이상의 프로세서들로 하여금, 상기 버퍼에 저장된 상기 하나 이상의 선별 값들을 판독하게 하는, 컴퓨터 판독가능 저장 매체.
  24. 삭제
  25. 제 23 항에 있어서,
    상기 컴퓨팅 디바이스의 하나 이상의 프로세서들로 하여금,
    상기 GPU 의 셰이더 프로세서에 의해 상기 입력 데이터에 대한 상기 하나 이상의 커널들 중 제 2 커널의 제 2 워크 아이템을 실행하게 하고;
    상기 제 2 워크 아이템의 결과에 기초하여, 상기 입력 데이터에 대한 상기 하나 이상의 커널들의 후속하는 워크 아이템들을 실행할지 여부를 나타내는 상기 하나 이상의 선별 값들을 업데이트하게 하며;
    업데이트된 상기 하나 이상의 선별 값들에 기초하여 상기 후속하는 워크 아이템들을 실행할지 여부를 결정하게 하는
    명령들을 더 포함하는, 컴퓨터 판독가능 저장 매체.
  26. 삭제
  27. 삭제
  28. 제 20 항에 있어서,
    상기 컴퓨팅 디바이스의 하나 이상의 프로세서들로 하여금,
    GPU 의 셰이더 프로세서에 의해 제 1 워크그룹을 실행하게 하는 것으로서, 상기 제 1 워크그룹은 상기 제 1 커널과 연관되고, 상기 제 1 워크그룹은, 입력 데이터를 프로세싱하기 위한, 상기 제 1 워크 아이템을 포함하는 복수의 명령들을 포함하는, 상기 제 1 워크그룹을 실행하게 하고;
    상기 제 1 워크그룹의 결과들에 기초하여 하나 이상의 워크그룹 선별 값들을 발생시키게 하는 것으로서, 상기 하나 이상의 워크그룹 선별 값들은 상기 하나 이상의 커널들의 워크그룹들을 실행할지 여부를 나타내는, 상기 하나 이상의 워크그룹 선별 값들을 발생시키게 하며;
    상기 하나 이상의 워크그룹 선별 값들에 기초하여 상기 하나 이상의 커널들의 상기 워크그룹들을 실행할지 여부를 결정하게 하는
    명령들을 더 포함하는, 컴퓨터 판독가능 저장 매체.
  29. 그래픽 프로세싱 유닛 (graphics processing unit; GPU) 에 의해 데이터를 프로세싱하는 장치로서,
    상기 GPU 의 하나 이상의 셰이더 프로세서들에 의해, 제 1 커널 및 연속하여 실행되는 하나 이상의 커널들을 포함하는 애플리케이션의 상기 제 1 커널의 제 1 워크 아이템을 실행하는 수단으로서, 상기 제 1 워크 아이템은 입력 데이터를 프로세싱하기 위한 하나 이상의 명령들을 포함하는, 상기 제 1 워크 아이템을 실행하는 수단;
    상기 제 1 워크 아이템의 결과뿐만 아니라, 상기 제 1 커널의 상기 제 1 워크 아이템의 상기 결과에 기초한 하나 이상의 선별 값들을 발생시키는 수단으로서, 상기 하나 이상의 선별 값들은 상기 입력 데이터에 대한 상기 하나 이상의 커널들의 워크 아이템들을 실행할지 여부를 나타내는, 상기 발생시키는 수단; 및
    상기 하나 이상의 선별 값들이 상기 하나 이상의 커널들의 상기 워크 아이템들이 실행되지 않는 것을 나타내는 경우, 상기 하나 이상의 커널들의 상기 워크 아이템들을 실행하지 않을 것을 결정하고, 상기 워크 아이템들이 상기 하나 이상의 셰이더 프로세서들에 의해 실행되도록 스케줄링하기 전에 명령 스트림으로부터 상기 하나 이상의 커널들의 상기 워크 아이템들을 삭제하는 수단
    을 포함하는, 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 장치.
  30. 삭제
  31. 삭제
  32. 제 29 항에 있어서,
    상기 하나 이상의 선별 값들을 버퍼에 저장하는 수단을 더 포함하고,
    상기 하나 이상의 커널들의 상기 워크 아이템들을 실행할지 여부를 결정하는 수단이 상기 버퍼에 저장된 상기 하나 이상의 선별 값들을 판독하는 수단을 포함하는, 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 장치.
  33. 삭제
  34. 제 32 항에 있어서,
    상기 GPU 의 셰이더 프로세서에 의해 상기 입력 데이터에 대한 상기 하나 이상의 커널들 중 제 2 커널의 제 2 워크 아이템을 실행하는 수단;
    상기 제 2 워크 아이템의 결과에 기초하여 상기 하나 이상의 선별 값들을 업데이트하는 수단으로서, 상기 하나 이상의 선별 값들은 상기 입력 데이터에 대한 상기 하나 이상의 커널들의 후속하는 워크 아이템들을 실행할지 여부를 나타내는. 상기 업데이트하는 수단; 및
    업데이트된 상기 하나 이상의 선별 값들에 기초하여 상기 후속하는 워크 아이템들을 실행할지 여부를 결정하는 수단
    을 더 포함하는, 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 장치.
  35. 삭제
  36. 삭제
  37. 제 29 항에 있어서,
    상기 GPU 의 셰이더 프로세서에 의해 제 1 워크그룹을 실행하는 수단으로서, 상기 제 1 워크그룹은 상기 제 1 커널과 연관되고, 상기 제 1 워크그룹은, 입력 데이터를 프로세싱하기 위한, 상기 제 1 워크 아이템을 포함하는 복수의 명령들을 포함하는, 상기 제 1 워크그룹을 실행하는 수단;
    상기 제 1 워크그룹의 결과들에 기초하여 하나 이상의 워크그룹 선별 값들을 발생시키는 수단으로서, 상기 하나 이상의 워크그룹 선별 값들은 상기 하나 이상의 커널들의 워크그룹들을 실행할지 여부를 나타내는, 상기 하나 이상의 워크그룹 선별 값들을 발생시키는 수단; 및
    상기 하나 이상의 워크그룹 선별 값들에 기초하여 상기 하나 이상의 커널들의 상기 워크그룹들을 실행할지 여부를 결정하는 수단
    을 더 포함하는, 그래픽 프로세싱 유닛 (GPU) 에 의해 데이터를 프로세싱하는 장치.
KR1020147003584A 2011-07-12 2011-12-13 그래픽 프로세싱 유닛에서의 명령 선별 KR101609079B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/181,233 2011-07-12
US13/181,233 US9195501B2 (en) 2011-07-12 2011-07-12 Instruction culling in graphics processing unit
PCT/US2011/064600 WO2013009341A1 (en) 2011-07-12 2011-12-13 Instruction culling in graphics processing unit

Publications (2)

Publication Number Publication Date
KR20140035522A KR20140035522A (ko) 2014-03-21
KR101609079B1 true KR101609079B1 (ko) 2016-04-04

Family

ID=45470699

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020147003584A KR101609079B1 (ko) 2011-07-12 2011-12-13 그래픽 프로세싱 유닛에서의 명령 선별

Country Status (6)

Country Link
US (1) US9195501B2 (ko)
EP (1) EP2732370B1 (ko)
JP (1) JP5778343B2 (ko)
KR (1) KR101609079B1 (ko)
CN (1) CN103649917B (ko)
WO (1) WO2013009341A1 (ko)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9830163B2 (en) * 2012-06-08 2017-11-28 Advanced Micro Devices, Inc. Control flow in a heterogeneous computer system
US9286648B2 (en) * 2012-08-03 2016-03-15 Nadar Mariappan S Zero communication block partitioning
US9442706B2 (en) * 2014-05-30 2016-09-13 Apple Inc. Combining compute tasks for a graphics processing unit
KR102269271B1 (ko) * 2014-09-12 2021-06-28 삼성전자주식회사 오픈 컴퓨팅 언어 기반의 애플리케이션 실행 방법 및 장치
US10796397B2 (en) * 2015-06-12 2020-10-06 Intel Corporation Facilitating dynamic runtime transformation of graphics processing commands for improved graphics performance at computing devices
KR20180038793A (ko) * 2016-10-07 2018-04-17 삼성전자주식회사 영상 데이터 처리 방법 및 장치
US20180115496A1 (en) * 2016-10-21 2018-04-26 Advanced Micro Devices, Inc. Mechanisms to improve data locality for distributed gpus
US10269167B1 (en) 2018-05-21 2019-04-23 Apple Inc. Indirect command buffers for graphics processing
US11789982B2 (en) * 2020-09-23 2023-10-17 Electronic Arts Inc. Order independent data categorization, indication, and remediation across realtime datasets of live service environments
KR20220102339A (ko) * 2021-01-13 2022-07-20 삼성전자주식회사 전자 장치 및 전자 장치의 커널 모듈 로딩 방법

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060150161A1 (en) * 2004-12-30 2006-07-06 Board Of Control Of Michigan Technological University Methods and systems for ordering instructions using future values
US20090041357A1 (en) * 2005-07-27 2009-02-12 Toru Yonezawa Face image detecting device, face image detecting method, and face image detecting program
US20110115802A1 (en) * 2009-09-03 2011-05-19 Michael Mantor Processing Unit that Enables Asynchronous Task Dispatch
US20110142339A1 (en) * 2009-11-20 2011-06-16 Tripurari Singh Method and System for Compressive Color Image Sampling and Reconstruction

Family Cites Families (33)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5793386A (en) 1996-06-28 1998-08-11 S3 Incorporated Register set reordering for a graphics processor based upon the type of primitive to be rendered
US6742111B2 (en) * 1998-08-31 2004-05-25 Stmicroelectronics, Inc. Reservation stations to increase instruction level parallelism
US7162716B2 (en) * 2001-06-08 2007-01-09 Nvidia Corporation Software emulator for optimizing application-programmable vertex processing
JP3612294B2 (ja) * 2001-08-06 2005-01-19 松下電器産業株式会社 デバッグ方法およびデバッグ装置
US7015913B1 (en) * 2003-06-27 2006-03-21 Nvidia Corporation Method and apparatus for multithreaded processing of data in a programmable graphics processor
US7239322B2 (en) * 2003-09-29 2007-07-03 Ati Technologies Inc Multi-thread graphic processing system
US7426724B2 (en) * 2004-07-02 2008-09-16 Nvidia Corporation Optimized chaining of vertex and fragment programs
US8624906B2 (en) 2004-09-29 2014-01-07 Nvidia Corporation Method and system for non stalling pipeline instruction fetching from memory
US7765547B2 (en) * 2004-11-24 2010-07-27 Maxim Integrated Products, Inc. Hardware multithreading systems with state registers having thread profiling data
US7324113B1 (en) 2005-03-09 2008-01-29 Nvidia Corporation Perspective correction computation optimization
US7528843B1 (en) * 2005-08-05 2009-05-05 Nvidia Corporation Dynamic texture fetch cancellation
US7577826B2 (en) * 2006-01-30 2009-08-18 Sony Computer Entertainment Inc. Stall prediction thread management
US8345053B2 (en) * 2006-09-21 2013-01-01 Qualcomm Incorporated Graphics processors with parallel scheduling and execution of threads
US20080084424A1 (en) * 2006-10-09 2008-04-10 Silicon Integrated Systems Corp. Early retiring instruction mechanism, method for performing the same and pixel processing system thereof
US7844105B2 (en) * 2007-04-23 2010-11-30 Mitsubishi Electric Research Laboratories, Inc. Method and system for determining objects poses from range images
JP5059503B2 (ja) 2007-07-13 2012-10-24 花王株式会社 画像合成装置、画像合成方法及び画像合成プログラム
JP2009069921A (ja) * 2007-09-11 2009-04-02 Hitachi Ltd マルチプロセッサシステム
US8555266B2 (en) * 2007-11-13 2013-10-08 International Business Machines Corporation Managing variable assignments in a program
EP2141651B1 (en) 2008-04-08 2018-06-13 Avid Technology, Inc. Framework to integrate and abstract processing of multiple hardware domains, data types and format
US8633936B2 (en) 2008-04-21 2014-01-21 Qualcomm Incorporated Programmable streaming processor with mixed precision instruction execution
US9354944B2 (en) 2009-07-27 2016-05-31 Advanced Micro Devices, Inc. Mapping processing logic having data-parallel threads across processors
US20110055838A1 (en) * 2009-08-28 2011-03-03 Moyes William A Optimized thread scheduling via hardware performance monitoring
US8743131B2 (en) 2009-09-10 2014-06-03 Advanced Micro Devices, Inc. Course grain command buffer
US10360039B2 (en) * 2009-09-28 2019-07-23 Nvidia Corporation Predicted instruction execution in parallel processors with reduced per-thread state information including choosing a minimum or maximum of two operands based on a predicate value
US9348587B2 (en) * 2010-07-09 2016-05-24 Hyperion Core, Inc. Providing code sections for matrix of arithmetic logic units in a processor
US8583894B2 (en) * 2010-09-09 2013-11-12 Advanced Micro Devices Hybrid prefetch method and apparatus
US8549504B2 (en) * 2010-09-25 2013-10-01 Intel Corporation Apparatus, method, and system for providing a decision mechanism for conditional commits in an atomic region
US8782645B2 (en) * 2011-05-11 2014-07-15 Advanced Micro Devices, Inc. Automatic load balancing for heterogeneous cores
US8683468B2 (en) * 2011-05-16 2014-03-25 Advanced Micro Devices, Inc. Automatic kernel migration for heterogeneous cores
US9412193B2 (en) * 2011-06-01 2016-08-09 Apple Inc. Run-time optimized shader program
US20120331278A1 (en) * 2011-06-23 2012-12-27 Mauricio Breternitz Branch removal by data shuffling
US8756591B2 (en) * 2011-10-03 2014-06-17 International Business Machines Corporation Generating compiled code that indicates register liveness
US20140375658A1 (en) * 2013-06-25 2014-12-25 Ati Technologies Ulc Processor Core to Graphics Processor Task Scheduling and Execution

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060150161A1 (en) * 2004-12-30 2006-07-06 Board Of Control Of Michigan Technological University Methods and systems for ordering instructions using future values
US20090041357A1 (en) * 2005-07-27 2009-02-12 Toru Yonezawa Face image detecting device, face image detecting method, and face image detecting program
US20110115802A1 (en) * 2009-09-03 2011-05-19 Michael Mantor Processing Unit that Enables Asynchronous Task Dispatch
US20110142339A1 (en) * 2009-11-20 2011-06-16 Tripurari Singh Method and System for Compressive Color Image Sampling and Reconstruction

Also Published As

Publication number Publication date
CN103649917B (zh) 2018-05-29
EP2732370A1 (en) 2014-05-21
US9195501B2 (en) 2015-11-24
EP2732370B1 (en) 2018-08-01
KR20140035522A (ko) 2014-03-21
JP5778343B2 (ja) 2015-09-16
JP2014521167A (ja) 2014-08-25
WO2013009341A1 (en) 2013-01-17
CN103649917A (zh) 2014-03-19
US20130016110A1 (en) 2013-01-17

Similar Documents

Publication Publication Date Title
KR101609079B1 (ko) 그래픽 프로세싱 유닛에서의 명령 선별
KR101563098B1 (ko) 커맨드 프로세서를 갖는 그래픽 프로세싱 유닛
EP2721488B1 (en) Memory sharing in graphics processing unit
US9262797B2 (en) Multi-sample surface processing using one sample
EP2946364B1 (en) Rendering graphics data using visibility information
US9665975B2 (en) Shader program execution techniques for use in graphics processing
CN109154886B (zh) 用于处理数据的方法和设备
CN106575228A (zh) 图形处理中的渲染目标命令重新排序
US9665958B2 (en) System, method, and computer program product for redistributing a multi-sample processing workload between threads
US8212825B1 (en) System and method for geometry shading
KR102454893B1 (ko) 그래픽 프로세싱 장치 및 그래픽 프로세싱 장치의 동작 방법
CN103996216A (zh) 用于曲面细分和几何着色器的电力高效属性处置
US10114755B2 (en) System, method, and computer program product for warming a cache for a task launch
US10262391B2 (en) Graphics processing devices and graphics processing methods
US9286659B2 (en) Multi-sample surface processing using sample subsets
US10943323B2 (en) Data processing systems
US11790478B2 (en) Methods and apparatus for mapping source location for input data to a graphics processing unit

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
FPAY Annual fee payment

Payment date: 20190107

Year of fee payment: 4