KR20130122657A - 범용 그래픽스 프로세싱 유닛에서의 컴퓨테이션 리소스 파이프라이닝 - Google Patents

범용 그래픽스 프로세싱 유닛에서의 컴퓨테이션 리소스 파이프라이닝 Download PDF

Info

Publication number
KR20130122657A
KR20130122657A KR1020137021380A KR20137021380A KR20130122657A KR 20130122657 A KR20130122657 A KR 20130122657A KR 1020137021380 A KR1020137021380 A KR 1020137021380A KR 20137021380 A KR20137021380 A KR 20137021380A KR 20130122657 A KR20130122657 A KR 20130122657A
Authority
KR
South Korea
Prior art keywords
parallel processing
data
local memory
processing units
memory buffers
Prior art date
Application number
KR1020137021380A
Other languages
English (en)
Other versions
KR101558069B1 (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 KR20130122657A publication Critical patent/KR20130122657A/ko
Application granted granted Critical
Publication of KR101558069B1 publication Critical patent/KR101558069B1/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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/173Interprocessor communication using an interconnection network, e.g. matrix, shuffle, pyramid, star, snowflake
    • G06F15/17306Intercommunication techniques
    • G06F15/17325Synchronisation; Hardware support therefor
    • 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

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Image Processing (AREA)
  • Image Generation (AREA)
  • Multi Processors (AREA)
  • Advance Control (AREA)
  • Image Input (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

본 개시물은 파이프라인 기반 애플리케이션들의 효율적인 프로세싱을 허용하기 위해 병렬 프로세싱 유닛들을 가진 범용 그래픽스 프로세싱 유닛 (GPGPU) 의 아키텍처를 확장하는 기법들을 설명한다. 그 기법들은 프로세싱 파이프라인의 스테이지들로서 동작하는 병렬 프로세싱 유닛들에 접속된 로컬 메모리 버퍼들을, 그 병렬 프로세싱 유닛들 간의 전송을 위한 데이터를 보유하도록 구성하는 것을 포함한다. 로컬 메모리 버퍼들은 병렬 프로세싱 유닛들 간에 온-칩, 저전력, 직접 데이터 전송을 허용한다. 로컬 메모리 버퍼들은 병렬 프로세싱 유닛들 간의 데이터의 전송을 가능하게 하기 위해 하드웨어 기반 데이터 플로우 제어 메커니즘들을 포함할 수도 있다. 이렇게 하여, 데이터는 사실상 병렬 프로세싱 유닛들을 일련의 파이프라인 스테이지들로 변환하여, 로컬 메모리 버퍼들을 통해 프로세싱 파이프라인에서 하나의 병렬 프로세싱 유닛으로부터 다음 병렬 프로세싱 유닛으로 직접 전달될 수도 있다.

Description

범용 그래픽스 프로세싱 유닛에서의 컴퓨테이션 리소스 파이프라이닝{COMPUTATIONAL RESOURCE PIPELINING IN GENERAL PURPOSE GRAPHICS PROCESSING UNIT}
본 개시물은 데이터를 프로세싱하는 것에 관한 것으로, 보다 구체적으로는, 범용 그래픽스 프로세싱 유닛 (GPGPU) 을 이용하여 데이터를 프로세싱하는 것에 관한 것이다.
범용 그래픽스 프로세싱 유닛 (general purpose graphics processing unit; GPGPU) 들은 본래 2D 및 3D 그래픽스를 프로세싱하도록 설계된 그래픽스 프로세싱 유닛들의 일반화된 버전들이다. GPGPU들은 GPU들의 고전력 병렬 프로세싱을 그래픽스 프로세싱을 넘어서 범용 데이터 프로세싱 애플리케이션들로 확장한다. 하나의 예로서, GPU 는 넌-그래픽적 컴퓨팅을 위해 그래픽스 프로세싱 유닛에 소정의 애플리케이션 액세스를 제공하는 OpenCL 사양에 따라 데이터를 프로세싱하도록 구성될 수도 있다. "OpenCL 사양, 버전 1.1" 은 2010년 6월에 발표되었으며, 이는 공개적으로 입수가능하다.
GPGPU들은 프로세싱 유닛들 간의 데이터 공유 또는 동기화를 허용하지 않는 고도 병렬 구조 (highly parallel structure) 로 배열된 프로그램가능 프로세싱 유닛들을 포함한다. 대신에, 개개의 프로세싱 유닛들은 단지 외부 메모리와 데이터 세트들을 교환한다. 이 구조로 인해, GPGPU들에 대한 애플리케이션들은 내재적으로 병렬인 애플리케이션들에 제한된다. GPGPU 아키텍처들은 그들이 파이프라인 기반 컴퓨테이션들의 효율적인 구현을 방지할 정도로 고도로 병렬화될 수도 있다. 이 제한은 각 프로세싱 스테이지에서 병렬 프로세싱을 이용하지만 스테이지들 간의 컴퓨테이션 리소스들의 파이프라이닝을 요구하는 2D 및 3D 그래픽스 프로세싱으로 확장된다.
본 개시물은 파이프라인 기반 애플리케이션들의 효율적인 프로세싱을 허용하기 위해 병렬 프로세싱 유닛들을 가진 범용 그래픽스 프로세싱 유닛 (GPGPU) 의 아키텍처를 확장하는 기법들을 설명한다. 예를 들어, 이 기법들은 프로세싱 파이프라인의 스테이지들로서 동작하는 병렬 프로세싱 유닛들에 접속된 로컬 메모리 버퍼들을, 그 병렬 프로세싱 유닛들 간의 전송을 위한 데이터를 보유하도록 구성하는 것을 포함할 수도 있다. 로컬 메모리 버퍼들은 병렬 프로세싱 유닛들 간에 온-칩, 저전력, 직접 데이터 전송을 허용한다. 로컬 메모리 버퍼들은 병렬 프로세싱 유닛들 간의 데이터의 전송을 가능하게 하기 위해 하드웨어 기반 데이터 플로우 제어 메커니즘들을 포함할 수도 있다. 이렇게 하여, 데이터는 사실상 병렬 프로세싱 유닛들을 일련의 파이프라인 스테이지들로 변환하여, 로컬 메모리 버퍼들을 통해 프로세싱 파이프라인에서 하나의 병렬 프로세싱 유닛으로부터 다음 병렬 프로세싱 유닛으로 직접 전달될 수도 있다. 로컬 메모리 버퍼들은 프로세싱 파이프라인에서의 병렬 프로세싱 유닛들 각각이 데이터를 취출 및/또는 저장하기 위해 시스템 메모리에 호출할 필요성을 감소 또는 제거함으로써 메모리 대역폭 사용량 (memory bandwidth usage) 을 상당히 감소시킬 수도 있다.
이 기법들은 일부 예들에서, 로컬 메모리 버퍼들 각각을, 그 버퍼가 이전 병렬 프로세싱 유닛으로부터 출력된 데이터를 보유하기 위해 요구되는 폭을 갖도록 구성하는 것을 포함할 수도 있다. 예를 들어, 로컬 메모리 버퍼들은 깊이를 폭과 교환하도록 구성가능한 하드웨어 기반 버퍼들일 수도 있다. 또한, 일부 예들에서, 기법들은 프로세싱 파이프라인 내에 데이터 시퀀스를 보존하기 위해 시퀀싱 배리어들을 실행하는 것을 포함할 수도 있다. 예를 들어, 데이터 세트의 데이터 스레드들의 시퀀스는 그 데이터 세트의 병렬 프로세싱 유닛으로의 진입 (entry) 시에 레코딩될 수도 있고, 데이터 세트가 프로세싱된 후, 데이터 세트의 데이터 스레드들은 레코딩된 것과 동일한 시퀀스로 병렬 프로세싱 유닛으로부터 릴리즈될 수도 있다.
하나의 예에서, 본 개시물은 프로세싱 파이프라인의 스테이지들로서 선택적으로 동작하도록 구성된 2 개 이상의 병렬 프로세싱 유닛들, 및 각각이 병렬 프로세싱 유닛들 중 2 개의 병렬 프로세싱 유닛들 간에 접속되어, 그 병렬 프로세싱 유닛들 간의 전송을 위한 데이터를 보유하도록 구성된, 하나 이상의 로컬 메모리 버퍼들을 포함하는 GPGPU 와 관련된다.
다른 예에서, 본 개시물은 GPGPU 로 데이터를 프로세싱하는 방법과 관련되며, 이 방법은 프로세싱 파이프라인의 스테이지들로서 선택적으로 동작하도록 2 개 이상의 병렬 프로세싱 유닛들을 구성하는 단계, 및 각각이 병렬 프로세싱 유닛들 중 2 개의 병렬 프로세싱 유닛들 간에 접속된 하나 이상의 로컬 메모리 버퍼들을, 그 병렬 프로세싱 유닛들 간의 전송을 위한 데이터를 보유하도록 구성하는 단계를 포함한다.
추가 예에서, 본 개시물은 프로세싱 파이프라인의 스테이지들로서 선택적으로 동작하도록 2 개 이상의 병렬 프로세싱 유닛들을 구성하는 수단, 및 각각이 병렬 프로세싱 유닛들 중 2 개의 병렬 프로세싱 유닛들 간에 접속된 하나 이상의 로컬 메모리 버퍼들을, 그 병렬 프로세싱 유닛들 간의 전송을 위한 데이터를 보유하도록 구성하는 수단을 포함하는 GPGPU 와 관련된다.
다른 예에서, 본 개시물은 GPGPU 로 데이터를 프로세싱하는 명령들을 포함하는 컴퓨터 판독가능 매체와 관련되며, 명령들은, 실행될 때, 프로그램가능 프로세서로 하여금, 프로세싱 파이프라인의 스테이지들로서 선택적으로 동작하도록 2 개 이상의 병렬 프로세싱 유닛들을 구성하게 하고, 각각이 병렬 프로세싱 유닛들 중 2 개의 병렬 프로세싱 유닛들 간에 접속된 하나 이상의 로컬 메모리 버퍼들을, 그 병렬 프로세싱 유닛들 간의 전송을 위한 데이터를 보유하도록 구성하게 한다.
하나 이상의 예들의 상세들은 첨부 도면들 및 이하 설명에서 기술된다. 다른 특징들, 목적들, 및 이점들은 그 설명 및 도면들로부터, 그리고 청구항들로부터 명백할 것이다.
도 1 은 프로세싱 파이프라인을 구현하도록 구성가능한 범용 그래픽스 프로세싱 유닛 (GPGPU) 을 포함하는 디바이스를 예시한 블록도이다.
도 2 는 병렬 프로세싱을 수행하도록 구성된 병렬 프로세싱 유닛들을 포함하는 종래의 GPGPU 를 예시한 블록도이다.
도 3 은 프로세싱 파이프라인을 구현하도록 구성된 병렬 프로세싱 유닛들 및 로컬 메모리 버퍼들을 포함하는 도 1 로부터의 GPGPU 의 하나의 예를 예시한 블록도이다.
도 4 는 프로세싱 파이프라인의 스테이지들로서 병렬 프로세싱 유닛들 간에 데이터를 전송하기 위해 병렬 프로세싱 유닛들에 접속된 로컬 메모리 버퍼들을 포함하는 GPGPU 의 일 예의 동작을 예시한 플로우 차트이다.
도 5 는 GPGPU 의 병렬 프로세싱 유닛들 및 로컬 메모리 버퍼들에 의해 구현된 프로세싱 파이프라인 내에 데이터 시퀀스를 보존하는 일 예의 동작을 예시한 플로우 차트이다.
본 개시물은 파이프라인 기반 애플리케이션들의 효율적인 프로세싱을 허용하기 위해 병렬 프로세싱 유닛들을 가진 범용 그래픽스 프로세싱 유닛 (general purpose graphics processing unit; GPGPU) 의 아키텍처를 확장하는 기법들을 설명한다. 구체적으로, 이 기법들은 프로세싱 파이프라인의 스테이지들로서 동작하는 병렬 프로세싱 유닛들에 접속된 로컬 메모리 버퍼들을, 병렬 프로세싱 유닛들 간의 전송을 위한 데이터를 보유하도록 구성하는 것을 포함한다. 로컬 메모리 버퍼들은 병렬 프로세싱 유닛들 간에 온-칩, 저전력, 직접 데이터 전송을 허용한다. 로컬 메모리 버퍼들은 병렬 프로세싱 유닛들 간의 데이터의 전송을 가능하게 하기 위해 하드웨어 기반 데이터 플로우 제어 메커니즘들을 포함할 수도 있다. 이렇게 하여, 데이터는 사실상 병렬 프로세싱 유닛들을 일련의 파이프라인 스테이지들로 변환하여, 로컬 메모리 버퍼들을 통해 프로세싱 파이프라인에서 하나의 병렬 프로세싱 유닛으로부터 다음 병렬 프로세싱 유닛으로 직접 전달될 수도 있다. 로컬 메모리 버퍼들은 프로세싱 파이프라인에서의 병렬 프로세싱 유닛들 각각이 데이터를 취출 및/또는 저장하기 위해 시스템 메모리에 호출할 필요성을 감소 또는 제거함으로써 메모리 대역폭 사용량 (memory bandwidth usage) 을 상당히 감소시킬 수도 있다.
도 1 은 프로세싱 파이프라인 (10) 을 구현하도록 구성가능한 범용 그래픽스 프로세싱 유닛 (general purpose graphics processing unit; GPGPU) (6) 을 포함하는 디바이스 (2) 를 예시한 블록도이다. 이하 더 상세히 설명하는 바와 같이, GPGPU (6) 의 프로세싱 파이프라인 (10) 은 프로세싱 파이프라인 (10) 을 구현하기 위해 프로세싱 파이프라인 (10) 의 스테이지들로서 동작하도록 구성된 2 개 이상의 병렬 프로세싱 유닛들 및 병렬 프로세싱 유닛들 간의 전송을 위한 데이터를 보유하도록 구성된 하나 이상의 로컬 메모리 버퍼들을 포함한다.
디바이스 (2) 는 데이터를 송신 및 수신하고, 다양한 데이터 프로세싱 애플리케이션들을 지원하며, 사용자에게의 제시 (presentation) 를 위해 프로세싱된 데이터를 출력하는 것이 가능하다. 디바이스 (2) 의 예들은, 모바일 무선 전화기들, 개인 휴대 정보 단말기 (PDA) 들, 비디오 게이밍 디바이스들, 비디오 게이밍 콘솔들, 비디오 회의 유닛들, 랩톱 컴퓨터들, 데스크톱 컴퓨터들, 태블릿 컴퓨터들, 텔레비전 셋톱 박스들, 디지털 레코딩 디바이스들, 디지털 미디어 플레이어들 등을 포함하지만, 이들에 제한되지는 않는다.
도 1 에 예시된 예에서, 디바이스 (2) 는 호스트 프로세서 (4), 프로세싱 파이프라인 (10) 을 가진 GPGPU (6), 디스플레이 (8), 스피커 (10), 디바이스 메모리 (12), 트랜시버 모듈 (14), 및 사용자 입력 디바이스 (16) 를 포함한다. 다른 경우들에서, 예를 들어, 디바이스 (2) 가 데스크톱 컴퓨터인 경우, 디스플레이 (8), 스피커 (10) 및/또는 사용자 인터페이스 (16) 는 디바이스 (2) 의 외부에 있을 수도 있다. 호스트 프로세서 (4) 및 GPGPU (6) 는 디지털 신호 프로세서 (digital signal processor; DSP) 들, 범용 마이크로프로세서, 주문형 집적 회로 (application specific integrated circuit; ASIC) 들, 필드 프로그램가능 게이트 어레이 (field programmable gate array; FPGA) 들, 또는 다른 등가의 집적 또는 이산 논리 회로를 포함할 수도 있다.
호스트 프로세서 (4) 는 하나 이상의 애플리케이션들을 실행할 수도 있다. 애플리케이션들의 예들은 웹 브라우저들, 이메일 애플리케이션들, 스프레드시트들, 비디오 게임들, 오디오 및 비디오 편집 애플리케이션들, 또는 디스플레이 (8) 및/또는 스피커 (10) 를 통한 사용자에게의 제시를 위해 시각 및/또는 오디오 출력을 생성하는 다른 애플리케이션들을 포함한다. GPGPU (6) 는 또한 하나 이상의 애플리케이션들을 실행할 수도 있다. GPGPU (6) 는 호스트 프로세서 (4) 에 의해 실행된 애플리케이션들의 지원 하에서 애플리케이션들을 실행할 수도 있다. 구체적으로, GPGPU (6) 는 디스플레이 (8) 및/또는 스피커 (10) 를 통한 사용자에게의 제시를 위한 데이터를 준비하기 위해 애플리케이션들을 실행할 수도 있다.
GPGPU (6) 는 그래픽스 프로세싱 유닛 (GPU) 의 고전력 병렬 프로세싱을 그래픽스 프로세싱을 넘어서 범용 데이터 프로세싱 애플리케이션들로 확장하는 GPU 의 일반화된 버전이다. 일 예로서, GPGPU (6) 는 넌-그래픽적 컴퓨팅을 위해 GPU 에 소정의 애플리케이션 액세스를 제공하는 OpenCL 사양에 따라 데이터를 프로세싱하도록 구성될 수도 있다. 도 2 에 대하여 이하 더 상세히 설명되는, 종래의 GPGPU들은 파이프라인 기반 애플리케이션들의 효율적인 구현을 방지하는 고도 병렬 구조 (highly parallel structure) 로 배열된 프로그램가능 프로세싱 유닛들을 포함한다. 이 제한은 각 프로세싱 스테이지에서 병렬 프로세싱을 이용하지만 스테이지들 간에 컴퓨테이션 리소스들의 파이프라이닝을 요구하는 2D 및 3D 그래픽스 프로세싱 애플리케이션들로 확장된다.
파이프라인 기반 애플리케이션들은, 애플리케이션을 위해 요구된 스테이지들의 수에 대해, 제 1 스테이지가 오리지널 데이터 세트를 프로세싱하도록 구성되고, 제 2 스테이지가 제 1 스테이지의 출력을 프로세싱하도록 구성되고, 제 3 스테이지가 제 3 스테이지의 출력을 프로세싱하도록 구성되며, 등등이 되도록 스테이지들에서 데이터 세트가 프로세싱되도록 요구한다. 파이프라인 기반 애플리케이션들의 가장 효율적인 구현은 프로세싱 파이프라인에서 하나의 스테이지로부터 다음 스테이지로 직접 데이터 세트들을 전달하는 것이다. 파이프라인 기반 애플리케이션들의 덜 효율적인 구현은 프로세싱 파이프라인에서의 각 스테이지가 오프-칩 메모리로부터 이전 스테이지에 의해 프로세싱된 데이터를 취출한 후, 프로세싱된 데이터를 다시 다음 스테이지를 위해 오프-칩 메모리에 저장하는 것이다. 이 덜 효율적인 구현은 데이터 세트가 프로세싱 파이프라인에서의 각 스테이지에 의해 정확한 시퀀스로 프로세싱되는 것을 보장하기 위해 시퀀싱 메커니즘들을 여전히 요구한다. 종래의 GPGPU들은 프로세싱 파이프라인들 또는 심지어는 파이프라인 기반 애플리케이션들을 수행하는데 필요한 시퀀싱 메커니즘들을 구현하도록 구성될 수 없다.
본 개시물에서의 기법들에 따르면, 그리고 종래의 GPGPU들과 달리, 일부 예들에서, GPGPU (6) 는 2D 및 3D 그래픽스 프로세싱 애플리케이션들을 포함하는 파이프라인 기반 애플리케이션들을 실행하도록 프로세싱 파이프라인 (10) 을 구현하도록 구성가능하다. 도 3 에 대하여 이하 더 상세히 설명하는 바와 같이, GPGPU (6) 의 프로세싱 파이프라인 (10) 은 프로세싱 파이프라인 (10) 을 구현하기 위해 프로세싱 파이프라인 (10) 의 스테이지들로서 동작하도록 구성된 2 개 이상의 병렬 프로세싱 유닛들 및 병렬 프로세싱 유닛들 간의 전송을 위한 데이터를 보유하도록 구성된 하나 이상의 로컬 메모리 버퍼들을 포함한다. 프로세싱 파이프라인 (10) 에 포함된 로컬 메모리 버퍼들은 병렬 프로세싱 유닛들 간에 온-칩, 저전력, 직접 데이터 전송을 허용한다. 이렇게 하여, 데이터는 사실상 병렬 프로세싱 유닛들을 일련의 파이프라인 스테이지들로 변환하여, 로컬 메모리 버퍼들을 통해 프로세싱 파이프라인 (10) 에서 하나의 병렬 프로세싱 유닛으로부터 다음 병렬 프로세싱 유닛으로 직접 전달될 수도 있다. 프로세싱 파이프라인 (10) 의 구현은 프로세싱 파이프라인 (10) 에서의 병렬 프로세싱 유닛들 각각이 데이터를 취출 및/또는 저장하기 위해 GPGPU (6) 로부터 오프-칩 로케이팅된 디바이스 메모리 (12) 에 호출할 필요성을 감소 또는 제거함으로써 메모리 대역폭 사용량을 상당히 감소시킬 수도 있다.
본 개시물의 기법들은 프로세싱 파이프라인 (10) 내의 로컬 메모리 버퍼들 각각을, 그 버퍼가 이전 병렬 프로세싱 유닛으로부터 출력된 데이터를 보유하기 위해 요구되는 폭을 갖도록 구성하는 것을 포함할 수도 있다. 예를 들어, 로컬 메모리 버퍼들은 깊이를 폭과 교환하도록 동작가능한 하드웨어 기반 버퍼들일 수도 있다. 또한, 기법들은 프로세싱 파이프라인 (10) 내에 데이터 시퀀스를 보존하기 위해 시퀀싱 배리어들을 실행하는 것을 포함한다. 예를 들어, 데이터 세트의 데이터 스레드들의 시퀀스는 데이터 세트의 프로세싱 파이프라인 (10) 내의 병렬 프로세싱 유닛으로의 진입 (entry) 시에 레코딩될 수도 있고, 데이터가 프로세싱된 후, 데이터 세트의 데이터 스레드들은 레코딩된 것과 동일한 시퀀스로 병렬 프로세싱 유닛으로부터 릴리즈될 수도 있다.
예를 들어, GPGPU (6) 가 프로세싱 파이프라인 (10) 을 구현하도록 구성되는 경우, GPGPU (6) 는 웹 브라우저, 이메일, 비디오 게임, 및 호스트 프로세서 (4) 에 의해 실행된 비디오 편집 애플리케이션들의 지원 하에서 파이프라인 기반 2D 및 3D 그래픽스 프로세싱 애플리케이션들을 실행할 수도 있다. 다른 예로서, GPGPU (6) 가 프로세싱 파이프라인 (10) 을 구현하도록 구성되지 않는 경우, GPGPU (6) 는 이미지 기반 검색 애플리케이션들, 이미지 디스크립터 생성/추출, 방사측정 이미지 조정들 (radiometric image adjustments), 오디오 프로세싱, 및 호스트 프로세서 (4) 에 의해 통상 수행되는 다른 동작들과 같이, 고도 병렬 구조에서 효율적으로 동작하는 애플리케이션들을 실행할 수도 있다.
일부 경우들에서, GPGPU (6) 는 파이프라인 기반 그래픽스 프로세싱 애플리케이션들의 지원 하에서 애플리케이션들을 실행할 수도 있다. 파이프라인 기반 그래픽스 프로세싱 애플리케이션들은 프로세싱 파이프라인 (10) 을 이용하는 GPGPU (6) 그 자체에 의해, 또는 디바이스 (2) 에 포함된 개별의 GPU 에 의해 실행될 수도 있다. 예를 들어, GPGPU (6) 는 이미지 특수 효과 애플리케이션들, GPU 파이프라인에 대한 정점들 생성 (vertices generation), 및 GPU 파이프라인으로부터 컬러 버퍼를 이용하는 그래픽스 포스트-프로세싱 애플리케이션들을 실행할 수도 있다.
디스플레이 (8) 및 스피커 (10) 양자는 디바이스 (2) 용 출력 디바이스들을 포함한다. 일부 경우들에서, 디스플레이 (8) 및 스피커 (10) 는 사용자에게 시각 및 오디오 양자의 출력을 제시하기 위해 함께 사용될 수도 있다. 다른 경우들에서, 디스플레이 (8) 및 스피커 (10) 는 사용자에게 출력을 제시하기 위해 개별적으로 사용될 수도 있다. 일 예로서, 디스플레이 (8) 는 액정 디스플레이 (LCD), 음극선관 (CRT) 디스플레이, 플라즈마 디스플레이, 또는 다른 타입의 디스플레이 디바이스를 포함할 수도 있다.
사용자 입력 디바이스 (16) 는 디바이스 (2) 용 하나 이상의 사용자 입력 디바이스들을 포함한다. 예를 들어, 사용자 입력 디바이스 (16) 는 트랙볼, 마우스, 키보드, 마이크로폰 및/또는 다른 타입의 입력 디바이스들을 포함할 수도 있다. 일부 예들에서, 사용자 입력 디바이스 (16) 는 터치 스크린을 포함할 수도 있고, 디스플레이 (8) 의 부분으로서 통합될 수도 있다. 사용자는 사용자 입력 디바이스 (16) 를 통해 호스트 프로세서 (4) 및/또는 GPGPU (6) 에 의해 실행될 하나 이상의 애플리케이션들을 선택할 수도 있다.
호스트 프로세서 (4) 는 트랜시버 모듈 (14) 을 통해 호스트 프로세서 (4) 및/또는 GPGPU (6) 에 의해 프로세싱될 데이터를 다운로드할 수도 있다. 호스트 프로세서 (4) 는 또한 트랜시버 모듈 (14) 을 통해 호스트 프로세서 (4) 및/또는 GPGPU (6) 에 의해 실행된 하나 이상의 애플리케이션들을 다운로드할 수도 있다. 트랜시버 모듈 (14) 은 디바이스 (2) 와 다른 디바이스 또는 네트워크 간의 무선 또는 유선 통신을 허용하기 위한 회로를 포함할 수도 있다. 트랜시버 모듈 (14) 은 변조기들, 복조기들, 증폭기들, 및 유선 또는 무선 통신을 위한 다른 이러한 회로를 포함할 수도 있다.
디바이스 메모리 (12) 는 호스트 프로세서 (4) 및/또는 GPGPU (6) 에 의해 프로세싱될 데이터를 저장할 수도 있고, 또한 호스트 프로세서 (4) 및/또는 GPGPU (6) 로부터 수신되는 프로세싱된 데이터를 저장할 수도 있다. 또한, 디바이스 메모리 (12) 는 호스트 프로세서 (4) 및/또는 GPGPU (6) 에 의해 실행된 하나 이상의 애플리케이션들을 저장할 수도 있다. 디바이스 메모리 (12) 는 하나 이상의 컴퓨터 판독가능 저장 매체를 포함할 수도 있다. 디바이스 메모리 (12) 의 예들은 랜덤 액세스 메모리 (RAM), 판독 전용 메모리 (ROM), 전기적으로 소거가능한 프로그램가능 판독 전용 메모리 (EEPROM), CD-ROM 또는 다른 광 디스크 저장, 자기 디스크 저장, 또는 다른 자기 저장 디바이스들, 플래시 메모리, 또는 명령들 또는 데이터 구조들의 형태로 원하는 프로그램 코드를 운반 또는 저장하는데 사용될 수 있고 컴퓨터 또는 프로세서에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만, 이들에 제한되지는 않는다.
도 2 는 병렬 프로세싱을 수행하도록 구성된 병렬 프로세싱 유닛들 (22A 내지 22D) 을 포함하는 종래의 GPGPU (18) 를 예시한 블록도이다. 일부 예들에서, GPGPU (18) 는 도 1 을 참조하여 상기 설명된 디바이스 (2) 와 실질적으로 유사한 디바이스 내에 포함될 수도 있다. GPGPU (18) 는 데이터 분배 유닛 (20), 병렬 프로세싱 유닛들 (22A 내지 22D) ("병렬 프로세싱 유닛들 (22)"), 및 병렬 프로세싱 유닛들 (22) 을 GPGPU (18) 외부에 있는 디바이스 메모리 (26) 에 접속하기 위한 버스 (24) 를 포함한다.
종래의 GPGPU (18) 는 본래 2D 및 3D 그래픽스를 프로세싱하도록 설계된 GPU 의 일반화된 버전이다. GPGPU (18) 는 GPU 의 고전력 병렬 프로세싱을 그래픽스 프로세싱을 넘어서 범용 프로세싱 애플리케이션들로 확장가능하다. 일 예로서, GPGPU (18) 는 OpenCL 사양에 따라 데이터를 프로세싱하도록 구성될 수도 있다. OpenCL 사양은 넌-그래픽적 컴퓨팅을 위해 GPU 에 소정의 애플리케이션 액세스를 제공한다. OpenCL 용어에서, 데이터 스레드들은 작업 아이템 (work item) 들로 지칭되고, 데이터 세트들은 작업 그룹들로 지칭되고, 프로세싱 유닛들은 컴퓨트 유닛 (compute unit) 들로 지칭되며, 프로세싱 유닛들의 컬렉션은 컴퓨트 그룹으로 지칭된다.
통상의 GPU 태스크는 고도 병렬이고, 주어진 프로세싱 유닛 내에서 프로세싱되는 데이터 세트의 데이터 스레드들 간에 어떠한 정보 교환도 요구하지 않는다. 예를 들어, 정점에 대해 컴퓨팅된 값들은 상이한 정점에 대해 컴퓨팅된 값들로부터 독립적이고, 픽셀에 대해 컴퓨팅된 값들은 상이한 픽셀에 대해 컴퓨팅된 값들로부터 독립적이다. GPU 의 병렬 본질을 모방하기 위하여, GPGPU (18) 는 고도 병렬 구조로 배열된 병렬 프로세싱 유닛들 (22) 을 포함하도록 설계된다.
GPGPU (18) 의 아키텍처는 병렬 프로세싱 유닛들 (22) 간에 데이터 공유 또는 동기화를 허용하지 않을 정도로 고도로 병렬이다. 동작 시에, 데이터 분배 유닛 (20) 은 디바이스 메모리 (26) 에 저장된 데이터를 병렬 프로세싱 유닛들 (22) 각각에 할당한다. 프로세싱 동안, 할당된 데이터 세트의 데이터 스레드들은 병렬 프로세싱 유닛들 (22) 각각 내에서 공유 및 동기화될 수도 있다. 그러나 상이한 데이터 세트들의 데이터 스레드들은 병렬 프로세싱 유닛들 (22) 간에 공유 또는 동기화될 수 없다. 대신에, 병렬 프로세싱 유닛들 (22) 각각은 단지 버스 (24) 를 통해 할당된 데이터 세트들을 디바이스 메모리 (26) 와 교환한다. 보다 구체적으로, 병렬 프로세싱 유닛들 (22) 각각은 버스 (24) 를 통해 디바이스 메모리 (26) 로부터 프로세싱하기 위해 할당된 데이터 세트들을 취출하고, 데이터 세트들을 프로세싱한 후, 프로세싱된 데이터 세트들을 다시 버스 (24) 를 통해 디바이스 메모리 (26) 에 저장한다.
GPGPU (18) 의 병렬 아키텍처는 병렬 프로세싱 유닛들 (22) 간의 파이프라인 기반 애플리케이션들의 효율적인 구현을 방지한다. 파이프라인 기반 애플리케이션들에서, 프로세싱 유닛들은 상이한 프로세싱 태스크들을 위해 하나의 스테이지로부터 다른 스테이지로 데이터가 이동할 수 있게 하기 위해 파이프라인에서 스테이지들로서 접속된다. GPGPU (18) 에서의 파이프라인 기반 애플리케이션들에 대한 제한은 각 프로세싱 스테이지에서 병렬 프로세싱을 이용하지만 스테이지들 간에 파이프라이닝을 요구하는 2D 및 3D 그래픽스 프로세싱 애플리케이션들로 확장된다.
따라서 GPGPU (18) 에 대한 애플리케이션들은 내재적으로 병렬인 애플리케이션들에 제한된다. 병렬 프로세싱 유닛들 (22) 각각은 산술 논리 유닛 (arithmetic logic unit; ALU) 들 또는 다른 구성가능한 논리 소자 (logic element) 들의 클러스터를 포함할 수도 있다. 따라서 병렬 프로세싱 유닛들 (22) 은 GPGPU (18) 에 의해 실행된 애플리케이션에 따라 상이한 동작들을 수행하도록 프로그램가능하거나 구성가능하다. GPGPU (18) 의 고도 병렬 구조에서 효율적으로 동작하는 애플리케이션들은 이미지 기반 검색 애플리케이션들, 이미지 디스크립터 생성/추출, 방사측정 이미지 조정들, 오디오 프로세싱, 디지털 신호 프로세서 (DSP) 에 의해 통상 수행되는 다른 동작들 등을 포함할 수도 있다. 또한, GPGPU (18) 에 의해 실행된 애플리케이션들은 이미지 특수 효과 생성, GPU 파이프라인에 대한 정점들 생성, 및 GPU 파이프라인으로부터 컬러 버퍼를 이용하는 그래픽스 포스트-프로세싱 동작들과 같이, 파이프라인 기반 그래픽스 프로세싱 애플리케이션들과의 상호작용을 요구할 수도 있다.
도 3 은 프로세싱 파이프라인 (10) 을 구현하도록 구성된 병렬 프로세싱 유닛들 (42A 내지 42D) 및 로컬 메모리 버퍼들 (44A 내지 44C) 을 포함하는, 도 1 로부터의 일 예시적인 GPGPU (6) 를 예시한 블록도이다. 다른 예들에서, GPGPU (6) 는 더 많거나 더 적은 병렬 프로세싱 유닛들 및 로컬 메모리 버퍼들을 포함할 수도 있다.
도 3 의 예에서, GPGPU (6) 는 데이터 분배 유닛 (40), 병렬 프로세싱 유닛들 (42A 내지 42D) ("병렬 프로세싱 유닛들 (42)"), 및 병렬 프로세싱 유닛들 (42) 을 GPGPU (6) 외부에 있는 (도 1 로부터의) 디바이스 메모리 (12) 에 접속하기 위한 버스 (46) 를 포함한다. 도 3 으로부터의 GPGPU (18) 와 같은 종래의 GPGPU 와 달리, GPGPU (6) 는 또한 병렬 프로세싱 유닛들 (42) 간에 접속된 로컬 메모리 버퍼들 (44A 내지 44C) ("로컬 메모리 버퍼들 (44)") 을 포함한다. 병렬 프로세싱 유닛들 (42) 과 병렬 프로세싱 유닛들 (42) 간에 접속된 로컬 메모리 버퍼들 (44) 의 조합은 프로세싱 파이프라인 (10) 으로 지칭될 수도 있다. GPGPU (6) 는 또한 제어 유닛 (30) 및 로컬 메모리 (38) 를 포함한다. 로컬 메모리 (38) 는 로컬 메모리 버퍼들 (44), 레지스터, 또는 GPGPU (6) 에 대한 데이터를 일시적으로 저장하는 캐시와 유사한 버퍼를 포함할 수도 있다. 제어 유닛 (30) 은 애플리케이션 프로그래밍 인터페이스 (application programming interface; API) 들 (32), 버퍼 관리자 (34), 및 시퀀스 관리자 (36) 를 포함한다.
로컬 메모리 버퍼들 (44) 은 병렬 프로세싱 유닛들 (42) 간의 데이터의 전송을 가능하게 하기 위해 하드웨어 기반 데이터 플로우 제어 메커니즘들을 포함할 수도 있다. 예를 들어, 로컬 메모리 버퍼들 (44) 은 하드웨어 기반 선입, 선출 (first-in, first-out; FIFO) 버퍼들 또는 후입, 선출 (last-in, first-out; LIFO) 버퍼들 또는 인덱싱된 버퍼들과 같은 다른 타입들의 하드웨어 기반 버퍼들을 포함할 수도 있다. 로컬 메모리 버퍼 (44A) 가 하드웨어 기반 FIFO 를 포함하는 경우에서, 예를 들어, 로컬 메모리 버퍼 (44A) 는 로컬 메모리 버퍼에 데이터를 기록할 공간이 있는 경우 병렬 프로세싱 유닛 (42A) 이 그 로컬 메모리 버퍼 (44A) 로 데이터를 전송하는 것을 허용하고, 그렇지 않다면 기록 요청을 스톨 (stall) 하는 데이터 플로우 제어 메커니즘들을 포함한다. 그 경우에, 로컬 메모리 버퍼 (44A) 는 또한 로컬 메모리 버퍼로부터 판독할 이용가능한 데이터가 있는 경우 병렬 프로세싱 유닛 (42B) 이 그 로컬 메모리 버퍼 (44A) 로부터 데이터를 수신하는 것을 허용하고, 그렇지 않다면 판독 요청을 스톨하는 데이터 플로우 제어 메커니즘들을 포함한다. 로컬 메모리 버퍼들 (44) 이 하드웨어 기반 데이터 플로우 제어 메커니즘들을 포함하는 경우, 덜 효율적인 소프트웨어 기반 데이터 플로우 제어들은 병렬 프로세싱 유닛 (42) 간의 데이터의 전송을 가능하게 하는데 필수적이지 않다.
로컬 메모리 버퍼들 (44) 은 병렬 프로세싱 유닛들 (42) 간에 온-칩, 저전력, 직접 데이터 전송을 허용한다. 로컬 메모리 버퍼들 (44) 은 그들이 GPGPU (6) 내에, 그리고 프로세싱 유닛들 (42) 과 동일한 칩 상에 로케이팅되기 때문에 "로컬" 이다. 이렇게 하여, 데이터는 로컬 메모리 버퍼들 (44) 을 통해 프로세싱 파이프라인 (10) 에서 병렬 프로세싱 유닛들 (42) 중 하나의 병렬 프로세싱 유닛으로부터 병렬 프로세싱 유닛들 (42) 중 다른 병렬 프로세싱 유닛으로 직접 전달될 수도 있다. 병렬 프로세싱 유닛들 (42) 은 GPGPU (6) 의 외부에 있거나 GPGPU (6) 로부터 오프-칩에 로케이팅되는 디바이스 메모리 (12) 를 이용하여 데이터를 반복적으로 취출 및 저장하도록 요구되지 않는다. 따라서, 로컬 메모리 버퍼들 (44) 은 병렬 프로세싱 유닛들 (42) 을 일련의 파이프라인 스테이지들로 변환하고, GPGPU (6) 내에 프로세싱 파이프라인 (10) 을 구현한다.
예시된 예에서, 로컬 메모리 버퍼들 (44) 각각은 프로세싱 파이프라인 (10) 이 완전히 직렬 파이프라인이 되도록 연속하는 순서로 병렬 프로세싱 유닛들 (42) 중 2 개의 병렬 프로세싱 유닛들 간에 직접 접속된다. 로컬 메모리 버퍼들 (44) 은 그들이 접속되는 2 개의 병렬 프로세싱 유닛들 (42) 에 의해서만 액세스가능하고 병렬 프로세싱 유닛들 (42) 중 임의의 것에 의해 어드레스가능한 버스가 아니라는 점에서 "직접" 접속된다. 예를 들어, 로컬 메모리 버퍼 (44A) 는 병렬 프로세싱 유닛들 (42A 및 42B) 간에 직접 접속되고, 로컬 메모리 버퍼 (44B) 는 병렬 프로세싱 유닛들 (42B 및 42C) 간에 직접 접속되며, 로컬 메모리 버퍼 (44C) 는 병렬 프로세싱 유닛들 (42C 및 42D) 간에 직접 접속된다.
다른 예들에서, 로컬 메모리 버퍼들 (44) 각각은 또한 병렬 프로세싱 유닛들 (42) 중 하나 이상에 직접 접속될 수도 있는데, 이는 연속하는 순서가 아니다. 이 경우에, 로컬 메모리 버퍼들 (44) 각각은 크로스-바 접속들을 통해 병렬 프로세싱 유닛들 (42) 중 임의의 것에 직접 접속될 수도 있다. 예를 들어, 로컬 메모리 버퍼 (44A) 는 병렬 프로세싱 유닛 (42A) 이 로컬 메모리 버퍼 (44A) 를 통해 병렬 프로세싱 유닛들 (42B 내지 42D) 중 임의의 것으로 데이터를 전송할 수도 있도록 크로스-바 접속을 통해 병렬 프로세싱 유닛들 (42) 각각에 직접 접속될 수도 있다. 크로스-바 접속들의 사용은 로컬 메모리 버퍼들 (44) 이 병렬 프로세싱 유닛들 (42) 에 더 광범위하게 액세스하게 하고, 완전히 직렬이 아닌 프로세싱 파이프라인들의 구현을 가능하게 한다.
프로세싱 파이프라인 (10) 이 완전히 직렬 파이프라인을 포함하는 예시된 예에서, 병렬 프로세싱 유닛들 (42) 은 단지 로컬 메모리 버퍼들 (44) 중 연속하는 하나에 데이터를 기록하기 위한 허가 (permission) 를 얻을 수도 있고, 단지 로컬 메모리 버퍼들 (44) 중 이전 하나로부터 데이터를 판독하기 위한 허가를 얻을 수도 있다. 예를 들어, 병렬 프로세싱 유닛 (42B) 은 단지 로컬 메모리 버퍼 (44A) 로부터 데이터를 판독가능하고, 단지 로컬 메모리 버퍼 (44B) 에 데이터를 기록가능할 수도 있다. 프로세싱 파이프라인이 크로스-바 접속들을 포함할 수도 있는 경우들에서, 병렬 프로세싱 유닛 (42) 은 로컬 메모리 버퍼들 (44) 중 임의의 것으로 판독과 기록 양자를 행하기 위한 허가를 얻을 수도 있다. 예를 들어, 병렬 프로세싱 유닛 (42B) 은 로컬 메모리 버퍼 (44A) 에 의해, 그리고 로컬 메모리 버퍼 (44B) 에 의해 데이터를 판독 및 기록가능할 수도 있다.
상기 설명한 바와 같이, 로컬 메모리 버퍼들 (44) 은 FIFO 버퍼들, LIFO 버퍼들, 또는 인덱싱된 버퍼들 중 적어도 하나를 포함할 수도 있다. 로컬 메모리 버퍼들 (44) 용으로 사용된 버퍼의 타입은 프로세싱 파이프라인 (10) 에서 요구된 하드웨어 기반 데이터 플로우 제어 메커니즘들의 타입에 의존할 수도 있다. 로컬 메모리 버퍼들 (44) 용으로 사용된 버퍼의 타입은 또한, 로컬 메모리 버퍼들 (44) 이 일-대-일 접속들 또는 크로스-바 접속들을 통해 병렬 프로세싱 유닛들 (42) 에 접속되는지 여부에 의존할 수도 있다. 또한, 크로스-바 접속들이 사용되는 경우, 제어 유닛 (30) 의 버퍼 관리자 (34) 는 병렬 프로세싱 유닛 (42) 이 주어진 시간에 어느 로컬 메모리 버퍼 (44) 를 액세스중인지를 관리하기 위해 일부 메모리 제어를 수행할 필요가 있을 수도 있다.
상기 설명한 바와 같이, 로컬 메모리 버퍼들 (44) 은 일-대-일 또는 크로스-바 접속들 중 어느 하나를 통해 병렬 프로세싱 유닛들 (42) 중 적어도 2 개의 병렬 프로세싱 유닛들 간에 직접 접속될 수도 있다. 그러나, 로컬 메모리 버퍼들 (44) 은 병렬 프로세싱 유닛들 (42) 에 의해 어드레스가능한 버스가 아닐 수도 있다. 이렇게 하여, 로컬 메모리 버퍼들 (44) 을 위한 지정된 메모리 제어기가 필수적이지 않을 수도 있다. 구체적으로, 메모리 제어기는 버스를 통해 로컬 메모리 버퍼들 (44) 에 대한 판독 및 기록 커맨드들을 프로세싱할 필요가 없다.
로컬 메모리 버퍼들 (44) 은 병렬 프로세싱 유닛들 (42) 각각이 데이터를 취출 및/또는 저장하기 위해 버스 (46) 를 통해 디바이스 메모리 (12) 에 호출할 필요성을 감소 또는 제거함으로써 메모리 대역폭 사용량을 상당히 감소시킬 수도 있다. 동작 시에, 병렬 프로세싱 유닛 (42A) 은, 프로세싱 파이프라인 (10) 의 제 1 프로세싱 유닛으로서, 버스 (46) 를 통해 디바이스 메모리 (12) 로부터 오리지널 데이터 세트를 취출한다. 데이터 세트는 데이터 분배 유닛 (40) 에 의해 병렬 프로세싱 유닛 (42A) 에 할당될 수도 있다. 또한, 병렬 프로세싱 유닛 (42D) 은, 프로세싱 파이프라인 (10) 의 최종 프로세싱 유닛으로서, 버스 (46) 를 통해 디바이스 메모리 (12) 에 포스트-파이프라인 데이터 세트를 저장한다. 병렬 프로세싱 유닛들 (42B 및 42C) 은, 프로세싱 파이프라인 (10) 의 중간 프로세싱 유닛들로서, 로컬 메모리 버퍼들 (44) 들 중 하나를 통해 병렬 프로세싱 유닛들 (42) 중 이전 하나로부터 데이터 세트를 수신하고, 그 데이터 세트를 로컬 메모리 버퍼들 (44) 중 하나를 통해 병렬 프로세싱 유닛 (42) 의 후속 병렬 프로세싱 유닛으로 전송한다. 따라서, 중간 프로세싱 유닛들은 데이터를 취출 및/또는 저장하기 위해 디바이스 메모리 (12) 와 상호작용하도록 요구되지 않는다. 일부 경우들에서, 중간 프로세싱 유닛들은 프로세싱 파이프라인 (10) 의 특정 스테이지를 수행하기 위하여 디바이스 메모리로부터 보조 데이터 (supplemental data) 를 취출할 수도 있다. 그러나, 프로세싱을 위한 메인 데이터 세트는 로컬 메모리 버퍼들 (44) 을 통해 프로세싱 파이프라인 (10) 을 따라 직접 전달된다.
상기 설명한 바와 같이, GPGPU (6) 는 GPU 의 고전력 병렬 프로세싱을 그래픽스 프로세싱을 넘어서 범용 데이터 프로세싱 애플리케이션들로 확장하는 GPU 의 일반화된 버전이다. 일 예로서, GPGPU (6) 는 넌-그래픽적 컴퓨팅을 위해 그래픽스 프로세싱 유닛에 소정의 애플리케이션 액세스를 제공하는 OpenCL 사양에 따라 데이터를 프로세싱하도록 구성될 수도 있다. OpenCL 용어에서, 데이터 스레드들은 작업 아이템들로 지칭되고, 데이터 세트들은 작업 그룹들로 지칭되고, 프로세싱 유닛들은 컴퓨트 유닛들로 지칭되며, 프로세싱 유닛들의 컬렉션은 컴퓨트 그룹으로 지칭된다.
본 개시물의 기법들에 따르면, GPGPU (6) 는 2D 및 3D 그래픽스 프로세싱 애플리케이션들을 포함하는, 파이프라인 기반 애플리케이션들을 실행하기 위해 프로세싱 파이프라인 (10) 을 구현하도록 구성가능하다. 보다 구체적으로, GPGPU (6) 의 제어 유닛 (30) 은 프로세싱 파이프라인의 스테이지들로서 동작하도록 병렬 프로세싱 유닛들 (42) 을 구성한다. 제어 유닛 (30) 은 또한, 병렬 프로세싱 유닛들 (42) 간에 접속된 로컬 메모리 버퍼들 (44) 을, 그 병렬 프로세싱 유닛들 (42) 간의 전송을 위한 데이터를 보유하도록 구성한다.
병렬 프로세싱 유닛들 (42) 은 GPGPU (6) 에 의해 실행된 애플리케이션에 따라 상이한 동작들을 수행하도록 프로그램가능 또는 구성가능할 수도 있다. 제어 유닛 (30) 은 애플리케이션에 따라 동작하도록 병렬 프로세싱 유닛들 (42) 각각을 구성할 수도 있다. 예를 들어, 병렬 프로세싱 유닛들 (22) 각각은 산술 논리 유닛 (ALU) 들 또는 다른 구성가능한 논리 소자들의 클러스터를 포함할 수도 있다.
로컬 메모리 버퍼들 (44) 은 또한 GPGPU (6) 에 의해 실행된 애플리케이션에 따라 병렬 프로세싱 유닛들 (42) 로부터 출력된 상이한 타입들의 데이터를 보유하도록 프로그램가능 또는 구성가능할 수도 있다. 예를 들어, 로컬 메모리 버퍼들 (44) 은 하드웨어 기반 버퍼들을 포함할 수도 있지만, 구성가능한 양태들의 세트를 포함할 수도 있다. 구성가능한 양태들 중 하나는 병렬 프로세싱 유닛들 (42) 로부터 출력된 상이한 타입들의 데이터를 수용하기 위한 로컬 메모리 버퍼들 (44) 의 폭일 수도 있다. 예를 들어, 로컬 메모리 버퍼들 (44) 은 깊이를 폭과 교환하도록 구성가능할 수도 있다. 제어 유닛 (30) 의 버퍼 관리자 (34) 는 로컬 메모리 버퍼들 (44) 각각이 병렬 프로세싱 유닛들 (42) 중 이전 것으로부터 출력된 데이터를 보유하기 위해 요구되는 폭을 결정할 수도 있다. 버퍼 관리자 (34) 는 병렬 프로세싱 유닛들 (42) 각각으로부터 출력된 데이터의 타입을 알고 있고, 따라서 데이터를 보유하도록 로컬 메모리 버퍼들 (44) 각각에 의해 요구되는 폭들을 알고 있을 수도 있다. 버퍼 관리자 (34) 는 그 후 결정된 폭을 갖도록 로컬 메모리 버퍼들 (44) 각각을 구성할 수도 있다.
일단 병렬 프로세싱 유닛들 (42) 및 로컬 메모리 버퍼들 (44) 이 GPGPU (6) 내에 프로세싱 파이프라인 (10) 을 구현하도록 구성되면, 병렬 프로세싱 유닛들 (42) 은 로컬 메모리 버퍼들 (44) 을 통해 데이터를 전송할 수도 있다. 제어 유닛 (30) 은 로컬 메모리 버퍼들 (44) 로 데이터를 전송하도록 병렬 프로세싱 유닛들 (42) 중 하나 이상을 구성하고, 로컬 메모리 버퍼들 (44) 로부터 데이터를 수신하도록 병렬 프로세싱 유닛들 (44) 중 하나 이상을 구성할 수도 있다. 예를 들어, 제어 유닛 (30) 은 로컬 메모리 버퍼들 (44A, 44B 및 44C) 로 각각 데이터를 전송하도록 병렬 프로세싱 유닛들 (42A, 42B 및 42C) 을 구성할 수도 있다. 제어 유닛 (30) 은 또한 로컬 메모리 버퍼들 (44A, 44B 및 44C) 로부터 각각 데이터를 수신하도록 병렬 프로세싱 유닛들 (42B, 42C 및 42D) 을 구성할 수도 있다.
하드웨어 기반 플로우 제어 메커니즘들을 가진 로컬 메모리 버퍼들 (44) 은 새로운 API들 (32) 을 도입함으로써, OpenCL 표준과 같은 GPGPU 표준을 이용하여 노출될 수도 있다. 예를 들어, 제어 유닛 (30) 은 API들 (32) 중 하나 이상을 실행하여, 로컬 메모리 버퍼들 (44) 각각을 위해 요구되는 폭을 결정하고, 결정된 폭을 가진 로컬 메모리 버퍼들 (44) 각각을 구성하며, 로컬 메모리 버퍼들 (44) 각각의 깊이를 결정할 수도 있다. 또한, 제어 유닛 (30) 은 API들 (32) 중 하나 이상을 실행하여, 로컬 메모리 버퍼들 (44) 로 데이터를 전송하고 로컬 메모리 버퍼들 (44) 로부터 데이터를 수신하도록 병렬 프로세싱 유닛들 (42) 을 구성할 수도 있다. 로컬 메모리 버퍼들 (44) 에 포함된 하드웨어 기반 데이터 플로우 제어 메커니즘들은 병렬 프로세싱 유닛들 (42) 이 임의의 추가적인 소프트웨어 기반 데이터 플로우 제어들 없이 로컬 메모리 버퍼들 (44) 로 데이터를 전송하고 로컬 메모리 버퍼들 (44) 로부터 데이터를 수신하는 것을 허용한다.
또한, GPGPU (6) 의 제어 유닛 (30) 은 병렬 프로세싱 유닛들 (42) 중 하나 이상 내에 데이터 시퀀스를 보존함으로써 프로세싱 파이프라인 (10) 내에 데이터 시퀀스를 보존할 수도 있다. GPGPU (6) 에 의해 실행된 파이프라인 기반 애플리케이션들, 구체적으로는 3D 그래픽스 애플리케이션들은 프로세싱 파이프라인 (10) 내에서 소정의 시퀀스로 데이터가 프로세싱되도록 요구할 수도 있다. 데이터가 프로세싱 파이프라인의 각 스테이지에서 프로세싱되는 경우, 데이터는 조건부 (conditionals), 캐시 히트 (cache hits) 또는 미스 (misses) 등과 같은 실행 이슈들로 인해 시퀀스를 변경할 수도 있다. 제어 유닛 (30) 의 시퀀스 관리자 (36) 는 병렬 프로세싱 유닛들 (42) 의 적어도 일부 내에 데이터 시퀀스를 보존하기 위해 시퀀싱 배리어들을 실행할 수도 있다. 시퀀싱 배리어들은 프로세싱 파이프라인 (10) 내의 프로세싱 속도를 둔화시킬 수도 있기 때문에, 시퀀스 관리자 (36) 는 단지 정확한 프로세싱을 위한 데이터 시퀀스 보존을 요구하는 그 병렬 프로세싱 유닛들 (42) 에서만 시퀀싱 배리어들을 실행할 수도 있다.
시퀀스 관리자 (36) 에 의해 실행된 시퀀싱 배리어들은 시퀀스-결정 카운터 (sequence-determining counter; SDC) 및 시퀀스-강행 배리어 (sequence-enforcing barrier; SEB) 를 포함할 수도 있다. 예를 들어, 시퀀싱 배리어들은 SDC 및 SEB 에 대한 OpenCL C 언어에 새로운 함수 호출들을 부가함으로써, Open CL 표준과 같은 GPGPU 표준을 이용하여 노출될 수도 있다.
시퀀스 관리자 (36) 는 병렬 프로세싱 유닛들 (42) 중 임의의 하나로의 데이터 세트의 진입 시에 SDC 를 실행할 수도 있다. 시퀀스 관리자 (36) 는 그 후 로컬 메모리 (38) 내에 수신된 데이터 세트의 데이터 스레드들의 시퀀스를 레코딩함으로써 SDC 동작을 수행한다. 예를 들어, 시퀀스 관리자 (36) 는 데이터 스레드들이 디바이스 메모리 (12) 로부터 수신되는 순서로 데이터 세트의 각 데이터 스레드의 인덱스를 레코딩할 수도 있다.
시퀀스 관리자 (36) 는 병렬 프로세싱 유닛들 (42) 중 하나로부터의 데이터 세트의 퇴출 (exit) 시에 SEB 를 실행할 수도 있다. 시퀀스 관리자 (36) 는 그 후 SDC 에 의해 레코딩된 것과 동일한 시퀀스로 병렬 프로세싱 유닛들 (42) 중 하나로부터 데이터 세트의 데이터 스레드들을 릴리즈함으로써 SEB 동작을 수행한다. 예를 들어, 시퀀스 관리자 (36) 는 로컬 메모리 (38) 에 레코딩된 데이터 스레드 인덱스들에 액세스하고, 각 데이터 스레드를 그 인덱스가 레코딩되었던 순서에 따라 릴리즈할 수도 있다. 이렇게 하여, 데이터 세트의 데이터 스레드들은 데이터 세트의 데이터 스레드들이 병렬 프로세싱 유닛들 (42) 중 현재 병렬 프로세싱 유닛에 진입한 것과 동일한 순서로 병렬 프로세싱 유닛들 (42) 중 후속 병렬 프로세싱 유닛에 진입할 것이다.
하나의 예에서, 제어 유닛 (30) 은 파이프라인 기반 3D 그래픽스 프로세싱 애플리케이션을 실행하도록 GPGPU (6) 를 구성할 수도 있다. 그 경우에, 제어 유닛 (30) 은 3D 그래픽스 프로세싱 파이프라인의 스테이지들로서 동작하도록 병렬 프로세싱 유닛들 (42) 을 구성할 수도 있다. 예를 들어, 제어 유닛 (30) 은 정점 셰이더 (vertex shader) 로서 동작하도록 병렬 프로세싱 유닛 (42A) 을 구성하고, 삼각형 래스터라이저 (triangle rasterizer) 로서 동작하도록 병렬 프로세싱 유닛 (42B) 을 구성하고, 프래그먼트 셰이더 (fragment shader) 로서 동작하도록 병렬 프로세싱 유닛 (42C) 을 구성하며, 픽셀 블렌더 (pixel blender) 로서 동작하도록 병렬 프로세싱 유닛 (42D) 을 구성할 수도 있다.
제어 유닛 (30) 은 또한, 3D 그래픽스 프로세싱 파이프라인 (10) 을 구현하기 위해 병렬 프로세싱 유닛들 (42) 간의 전송을 위한 데이터를 보유하도록 하드웨어 기반 데이터 플로우 제어 메커니즘들을 가진 로컬 메모리 버퍼들 (44) 을 구성할 수도 있다. 예를 들어, 제어 유닛 (30) 은 정점 셰이더로서 동작하는 병렬 프로세싱 유닛 (42A) 과 삼각형 래스터라이저로서 동작하는 병렬 프로세싱 유닛 (42B) 간의 전송을 위한 포스트-정점 셰이더 정점 데이터를 보유하도록 로컬 메모리 버퍼 (44A) 를 구성할 수도 있다. 제어 유닛 (30) 은 삼각형 래스터라이저로서 동작하는 병렬 프로세싱 유닛 (42B) 과 프래그먼트 셰이더로서 동작하는 병렬 프로세싱 유닛 (42C) 간의 전송을 위한 프리-프래그먼트 셰이더 픽셀 데이터를 보유하도록 로컬 메모리 버퍼 (44B) 를 구성할 수도 있다. 마지막으로, 제어 유닛 (30) 은 프래그먼트 셰이더로서 동작하는 병렬 프로세싱 유닛 (42C) 과 픽셀 블렌더로서 동작하는 병렬 프로세싱 유닛 (42D) 간의 전송을 위한 포스트-프래그먼트 셰이더 픽셀 값들을 보유하도록 로컬 메모리 버퍼 (44C) 를 구성할 수도 있다.
3D 그래픽스 프로세싱 애플리케이션들의 실행 시에, 데이터 분배 유닛 (40) 은 정점 셰이더로서 동작하는 병렬 프로세싱 유닛 (42A) 에 오리지널 정점 데이터 세트를 할당할 수도 있다. 병렬 프로세싱 유닛 (42A) 은 그 할당된 오리지널 정점 데이터 세트를 버스 (46) 를 통해 디바이스 메모리 (12) 로부터 취출한다. 데이터 세트의 진입 시에, 시퀀스 관리자 (36) 는 정점 데이터의 시퀀스를 레코딩하기 위해 SDC 를 실행한다. 병렬 프로세싱 유닛 (42A) 은 그 후 정점 셰이딩 동작을 수행하고, 포스트-정점 셰이더 정점 데이터를 로컬 메모리 버퍼 (44A) 로 전송한다. 병렬 프로세싱 유닛 (42A) 으로부터의 데이터 세트의 퇴출 시에, 시퀀스 관리자 (36) 는 SDC 에 의해 레코딩된 것과 동일한 시퀀스로 정점 데이터를 릴리즈하기 위해 SEB 를 실행한다. 이렇게 하여, 정점 데이터는 정점 데이터가 정점 셰이더로서 동작하는 병렬 프로세싱 유닛 (42A) 에 진입한 것과 동일한 순서로, 삼각형 래스터라이저로서 동작하는 병렬 프로세싱 유닛 (42B) 에 도달할 것이다.
삼각형 래스터라이저로서 동작하는 병렬 프로세싱 유닛 (42B) 은 로컬 메모리 버퍼 (44A) 로부터 포스트-정점 셰이더 정점 데이터를 수신한다. 일부 경우들에서, 병렬 프로세싱 유닛 (42B) 은 또한 삼각형 래스터라이징 동작을 수행하기 위하여 버스 (46) 를 통해 디바이스 메모리 (12) 로부터 보조 데이터를 취출할 수도 있다. 병렬 프로세싱 유닛 (42B) 은 그 후 삼각형 래스터라이징 동작을 수행하고, 프리-프래그먼트 셰이더 픽셀 데이터를 로컬 메모리 버퍼 (44B) 로 전송한다. 일부 예들에서, 시퀀스 관리자 (36) 는 병렬 프로세싱 유닛 (42B) 으로의 정점 데이터의 진입 시에 SDC 를 실행하고, 병렬 프로세싱 유닛 (42B) 으로부터의 픽셀 데이터의 퇴출 시에 SEB 를 실행하여 데이터 시퀀스를 보존할 수도 있다. 다른 예들에서, 시퀀싱 배리어들은 필수적이지 않을 수도 있으며, 따라서 병렬 프로세싱 유닛 (42B) 에 대해 실행되지 않을 수도 있다.
프래그먼트 셰이더로서 동작하는 병렬 프로세싱 유닛 (42C) 은 로컬 메모리 버퍼 (44B) 로부터 프리-프래그먼트 셰이더 픽셀 데이터를 수신한다. 데이터 세트의 진입 시에, 시퀀스 관리자 (36) 는 픽셀 데이터의 시퀀스를 레코딩하기 위해 SDC 를 실행한다. 일부 경우들에서, 병렬 프로세싱 유닛 (42C) 은 또한, 프래그먼트 셰이더 동작을 수행하기 위하여 버스 (46) 를 통해 디바이스 메모리 (12) 로부터 보조 데이터를 취출할 수도 있다. 병렬 프로세싱 유닛 (42C) 은 그 후 프래그먼트 셰이딩 동작을 수행하고, 포스트-프래그먼트 셰이더 픽셀 값들을 로컬 메모리 버퍼 (44C) 로 전송한다. 병렬 프로세싱 유닛 (42C) 으로부터의 데이터 세트의 퇴출 시에, 시퀀스 관리자 (36) 는 SDC 에 의해 레코딩된 것과 동일한 시퀀스로 픽셀 데이터를 릴리즈하기 위해 SEB 를 실행한다. 이렇게 하여, 픽셀 데이터는 픽셀 데이터가 프래그먼트 셰이더로서 동작하는 병렬 프로세싱 유닛 (42C) 에 진입한 것과 동일한 순서로, 픽셀 블렌더로서 동작하는 병렬 프로세싱 유닛 (42D) 에 도달할 것이다.
픽셀 블렌더로서 동작하는 병렬 프로세싱 유닛 (42D) 은 로컬 메모리 버퍼 (44C) 로부터 포스트-프래그먼트 셰이더 픽셀 값들을 수신한다. 병렬 프로세싱 유닛 (44D) 은 그 후 픽셀 블렌딩 동작을 수행하고, 버스 (46) 를 통해 디바이스 메모리 (12) 에 포스트-파이프라인 데이터 세트를 저장한다. 일부 예들에서, 시퀀스 관리자 (36) 는 병렬 프로세싱 유닛 (42D) 으로의 픽셀 데이터의 진입 시에 SDC 를 실행하고, 병렬 프로세싱 유닛 (42D) 으로부터의 이미지 데이터의 퇴출 시에 SEB 를 실행하여 데이터 시퀀스를 보존할 수도 있다. 다른 예들에서, 시퀀싱 배리어들은 필수적이 아닐 수도 있으며, 따라서 병렬 프로세싱 유닛 (42D) 에 대해 실행되지 않을 수도 있다. 3D 그래픽스 프로세싱 애플리케이션의 상기 설명된 예는 단지 예시적일 뿐이며, 개시된 기법들은 GPGPU (6) 에서 다양한 파이프라인 기반 애플리케이션들을 실행하는데 이용될 수도 있다.
도 4 는 프로세싱 파이프라인 (10) 의 스테이지들로서 병렬 프로세싱 유닛들 간에 데이터를 전송하기 위해 병렬 프로세싱 유닛들 (42) 에 접속된 로컬 메모리 버퍼들 (44) 을 포함하는 GPGPU (6) 의 일 예의 동작을 예시한 플로우 차트이다. 예시된 동작은 도 3 으로부터의 GPGPU (6) 를 참조하여 설명된다.
GPGPU (6) 의 제어 유닛 (30) 은 프로세싱 파이프라인 (10) 의 스테이지들로서 동작하도록 병렬 프로세싱 유닛들 (42) 을 구성한다 (50). 예를 들어, 제어 유닛 (30) 은 3D 그래픽스 프로세싱 파이프라인의 스테이지로서 동작하도록 병렬 프로세싱 유닛들 (42) 을 구성할 수도 있다. 그 예에서, 제어 유닛 (30) 은 정점 셰이더로서 동작하도록 병렬 프로세싱 유닛 (42A) 을 구성하고, 삼각형 래스터라이저로서 동작하도록 병렬 프로세싱 유닛 (42B) 을 구성하고, 프래그먼트 셰이더로서 동작하도록 병렬 프로세싱 유닛 (42C) 을 구성하며, 픽셀 블렌더로서 동작하도록 병렬 프로세싱 유닛 (42D) 을 구성할 수도 있다.
제어 유닛 (30) 은 또한 사실상 병렬 프로세싱 유닛들 (42) 을 프로세싱 파이프라인 (10) 으로 변환하여, 병렬 프로세싱 유닛들 (42) 간의 전송을 위한 데이터를 보유하도록 로컬 메모리 버퍼들 (44) 을 구성한다 (52). 로컬 메모리 버퍼들 (44) 은 병렬 프로세싱 유닛들 (42) 간의 데이터의 전송을 가능하게 하기 위해 하드웨어 기반 데이터 플로우 제어 메커니즘들을 포함할 수도 있다. 예를 들어, 로컬 메모리 버퍼들 (44) 은 하드웨어 기반 FIFO들, LIFO들, 또는 인덱싱된 버퍼들을 포함할 수도 있다. 로컬 메모리 버퍼들 (44) 은 병렬 프로세싱 유닛들 (42) 중 적어도 2 개의 병렬 프로세싱 유닛들 간에 직접 접속될 수도 있다. 예를 들어, 3D 그래픽스 프로세싱 파이프라인의 경우에, 로컬 메모리 버퍼 (44A) 는 정점 셰이더로서 동작하는 병렬 프로세싱 유닛 (42A) 과 삼각형 래스터라이저로서 동작하는 병렬 프로세싱 유닛 (42B) 간에 직접 접속되고, 포스트-정점 셰이더 정점 데이터를 보유하도록 구성될 수도 있다. 로컬 메모리 버퍼 (44B) 는 삼각형 래스터라이저로서 동작하는 병렬 프로세싱 유닛 (32B) 과 프래그먼트 셰이더로서 동작하는 병렬 프로세싱 유닛 (42C) 간에 직접 접속되고, 프리-프래그먼트 셰이더 픽셀 데이터를 보유하도록 구성될 수도 있다. 마지막으로, 로컬 메모리 버퍼 (44C) 는 프래그먼트 셰이더로서 동작하는 병렬 프로세싱 유닛 (42C) 과 픽셀 블렌더로서 동작하는 병렬 프로세싱 유닛 (42D) 간에 직접 접속되고, 포스트-프래그먼트 셰이더 픽셀 값들을 보유하도록 구성될 수도 있다.
또한, 제어 유닛 (30) 의 버퍼 관리자 (34) 는 로컬 메모리 버퍼들 (44) 각각이 병렬 프로세싱 유닛들 (42) 중 이전 병렬 프로세싱 유닛으로부터 출력된 데이터를 보유하기 위해 요구되는 폭을 결정할 수도 있다 (54). 버퍼 관리자 (34) 는 병렬 프로세싱 유닛들 (42) 각각으로부터 출력된 데이터의 타입을 알고 있고, 따라서 데이터를 보유하도록 로컬 메모리 버퍼들 (44) 각각에 의해 요구되는 폭들을 알고 있을 수도 있다. 버퍼 관리자 (34) 는 그 후 결정된 폭을 갖도록 로컬 메모리 버퍼들 (44) 각각을 구성할 수도 있다 (56). 일부 경우들에서, 로컬 메모리 버퍼들 (44) 은 하드웨어 기반일 수도 있지만, 구성가능한 양태들의 세트를 포함할 수도 있다. 예를 들어, 로컬 메모리 버퍼들 (44) 은 깊이를 폭과 교환하도록 구성가능할 수도 있다.
예를 들어, 버퍼 관리자 (34) 는 정점 셰이더로서 동작하는 병렬 프로세싱 유닛 (42A) 이 포스트-정점 셰이더 정점 데이터를 출력하는 것을 알고 있고, 포스트-정점 셰이더 정점 데이터를 보유하기 위해 요구되는 폭을 갖도록 로컬 메모리 버퍼 (44A) 를 구성할 수도 있다. 버퍼 관리자 (34) 는 또한 삼각형 래스터라이저로서 동작하는 병렬 프로세싱 유닛 (42B) 이 프리-프래그먼트 셰이더 픽셀 데이터를 출력하는 것을 알고 있고, 프리-프래그먼트 셰이더 픽셀 데이터를 보유하기 위해 요구되는 폭을 갖도록 로컬 메모리 버퍼 (44B) 를 구성할 수도 있다. 더욱이, 버퍼 관리자 (34) 는 프래그먼트 셰이더로서 동작하는 병렬 프로세싱 유닛 (42C) 이 포스트-프래그먼트 셰이더 픽셀 값들을 출력하는 것을 알고 있고, 포스트-프래그먼트 셰이더 픽셀 값들을 보유하기 위해 요구되는 폭을 갖도록 로컬 메모리 버퍼 (44C) 를 구성할 수도 있다.
일단 병렬 프로세싱 유닛들 (42) 및 로컬 메모리 버퍼들 (44) 이 GPGPU (6) 내에서 프로세싱 파이프라인 (10) 을 구현하도록 구성되면, 병렬 프로세싱 유닛들 (42) 은 로컬 메모리 버퍼들 (44) 을 통해 서로 간에 데이터를 전송할 수도 있다 (58). 보다 구체적으로, 제어 유닛 (30) 은 로컬 메모리 버퍼들 (44) 로 데이터를 전송하도록 병렬 프로세싱 유닛들 (42) 중 하나 이상을 구성하고, 로컬 메모리 버퍼들 (44) 로부터 데이터를 수신하도록 병렬 프로세싱 유닛들 (44) 중 하나 이상을 구성할 수도 있다. 예를 들어, 제어 유닛 (30) 은 로컬 메모리 버퍼들 (44A, 44B 및 44C) 로 각각 데이터를 전송하도록 병렬 프로세싱 유닛들 (42A, 42B 및 42C) 을 구성할 수도 있다. 제어 유닛 (30) 은 또한, 로컬 메모리 버퍼들 (44A, 44B 및 44C) 로부터 각각 데이터를 수신하도록 병렬 프로세싱 유닛들 (42B, 42C 및 42D) 을 구성할 수도 있다.
도 5 는 GPGPU (6) 의 병렬 프로세싱 유닛들 (42) 및 로컬 메모리 버퍼들 (44) 에 의해 구현된 프로세싱 파이프라인 내에 데이터 시퀀스를 보존하는 일 예의 동작을 예시한 플로우 차트이다. GPGPU (6) 의 제어 유닛 (30) 은 병렬 프로세싱 유닛들 (42) 중 하나 이상 내에 데이터 시퀀스를 보존함으로써 프로세싱 파이프라인 내에 데이터 시퀀스를 보존할 수도 있다. 예시된 동작은 도 3 으로부터의 GPGPU (6) 의 병렬 프로세싱 유닛 (42A) 을 참조하여 설명된다. 유사한 동작이 다른 병렬 프로세싱 유닛들 (42) 중 임의의 것에 대해 수행될 수도 있다.
일 예로서, 병렬 프로세싱 유닛들 (42) 및 로컬 메모리 버퍼들 (44) 은 3D 그래픽스 프로세싱 파이프라인을 구현하도록 구성될 수도 있다. 그 예에서, 병렬 프로세싱 유닛 (42A) 은 정점 셰이더로서 동작하도록 구성될 수도 있고, 병렬 프로세싱 유닛 (42B) 은 삼각형 래스터라이저로서 동작하도록 구성될 수도 있고, 병렬 프로세싱 유닛 (42C) 은 프래그먼트 셰이더로서 동작하도록 구성될 수도 있으며, 병렬 프로세싱 유닛 (42D) 은 픽셀 블렌더로서 동작하도록 구성될 수도 있다.
프로세싱 파이프라인 (10) 의 스테이지, 예를 들어, 정점 셰이더로서 동작하도록 구성된 병렬 프로세싱 유닛 (42A) 은 프로세싱을 위한 데이터 세트를 수신한다 (62). 예를 들어, 데이터 분배 유닛 (40) 은 병렬 프로세싱 유닛 (42A) 에 정점 데이터의 데이터 세트를 할당할 수도 있고, 병렬 프로세싱 유닛 (42A) 은 버스 (46) 를 통해 디바이스 메모리 (12) 로부터 할당된 데이터 세트를 수신할 수도 있다. 병렬 프로세싱 유닛 (42A) 으로의 데이터 세트의 진입 시에, 제어 유닛 (30) 의 시퀀스 관리자 (36) 는 시퀀스-결정 카운터 (sequence-determining counter; SDC) 를 실행한다 (64). SDC 에 따라, 시퀀스 관리자 (36) 는 로컬 메모리 (38) 내에 수신된 데이터 세트의 데이터 스레드들의 시퀀스를 레코딩한다 (66). 예를 들어, 시퀀스 관리자 (36) 는 데이터 스레드들이 디바이스 메모리 (12) 로부터 수신되는 순서로 데이터 세트의 각 데이터 스레드의 인덱스를 레코딩할 수도 있다.
정점 셰이더로서 동작하도록 구성된 병렬 프로세싱 유닛 (42A) 은 그 후 데이터 세트를 프로세싱하여 포스트-정점 셰이더 정점 데이터를 생성한다 (68). 상기 설명한 바와 같이, 병렬 프로세싱 유닛 (42A) 은 삼각형 래스터라이저로서 동작하도록 구성된 병렬 프로세싱 유닛 (42B) 으로 데이터 세트를 전송하기 위하여 로컬 메모리 버퍼 (44A) 로 포스트-정점 셰이더 정점 데이터를 전송하도록 구성될 수도 있다. 병렬 프로세싱 유닛 (42A) 으로부터의 데이터 세트의 퇴출 시에, 시퀀스 관리자 (36) 는 시퀀스-강행 배리어 (sequence-enforcing barrier; SEB) 를 실행한다 (70). SEB 에 따라, 시퀀스 관리자 (36) 는 SDC 에 의해 레코딩된 것과 동일한 시퀀스로 병렬 프로세싱 유닛 (42A) 으로부터 데이터 세트의 데이터 스레드들을 릴리즈한다 (72). 예를 들어, 시퀀스 관리자 (36) 는 로컬 메모리 (38) 에 레코딩된 데이터 스레드 인덱스들에 액세스하고, 그 인덱스가 레코딩되었던 순서에 따라 각 데이터 스레드를 릴리즈할 수도 있다. 이렇게 하여, 정점들은, 그 정점들이 정점 셰이더로서 동작하도록 구성된 병렬 프로세싱 유닛 (42A) 에 진입한 것과 동일한 순서로 삼각형 래스터라이저로서 동작하도록 구성된 병렬 프로세싱 유닛 (42B) 에 진입할 것이다.
하나 이상의 예들에서, 상기 설명된 기능들은 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 임의의 조합으로 구현될 수도 있다. 소프트웨어로 구현된다면, 그 기능들 또는 동작들은 비일시적인 (non-transitory) 컴퓨터 판독가능 매체 상에 하나 이상의 명령들 또는 코드로서 저장되고 하드웨어 기반 프로세싱 유닛에 의해 실행될 수도 있다. 컴퓨터 판독가능 매체는 유형의 매체, 이를 테면 데이터 저장 매체, 또는 예를 들어, 통신 프로토콜에 따라, 일 장소로부터 다른 장소로의 컴퓨터 프로그램의 전송을 용이하게 하는 임의의 매체를 포함하는 통신 매체에 대응하는, 컴퓨터 판독가능 저장 매체를 포함할 수도 있다. 이 방식으로, 컴퓨터 판독가능 매체는 일반적으로 (1) 비일시적인 유형의 컴퓨터 판독가능 저장 매체 또는 (2) 신호 또는 반송파와 같은 통신 매체에 대응할 수도 있다. 데이터 저장 매체는 본 개시물에 설명된 기법들의 구현을 위한 명령들, 코드 및/또는 데이터 구조들을 취출하기 위해 하나 이상의 컴퓨터들 또는 하나 이상의 프로세서들에 의해 액세스될 수 있는 임의의 이용가능한 매체일 수도 있다. 컴퓨터 프로그램 제품은 컴퓨터 판독가능 매체를 포함할 수도 있다.
제한이 아닌 일 예로, 이러한 컴퓨터 판독가능 매체는 비일시적 매체, 이를 테면 RAM, ROM, EEPROM, CD-ROM 또는 다른 광 디스크 저장, 자기 디스크 저장, 또는 다른 자기 저장 디바이스들, 플래시 메모리, 또는 명령들 또는 데이터 구조들의 형태로 원하는 프로그램 코드를 운반 또는 저장하는데 사용될 수 있고 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함할 수 있다. 또한, 임의의 접속이 적절히 컴퓨터 판독가능 매체라 불리게 된다. 예를 들어, 명령들이 동축 케이블, 광섬유 케이블, 트위스티드 페어, 디지털 가입자 회선 (DSL), 또는 적외선, 무선 및 마이크로파와 같은 무선 기술들을 이용하여 웹사이트, 서버 또는 다른 원격 소스로부터 송신된다면, 매체의 정의에는, 동축 케이블, 광섬유 케이블, 트위스티드 페어, DSL, 또는 적외선, 무선 및 마이크로파와 같은 무선 기술들이 포함된다. 그러나, 컴퓨터 판독가능 저장 매체 및 데이터 저장 매체는 접속들, 반송파들, 신호들 또는 다른 일시적 매체를 포함하지 않고, 대신 비일시적, 유형의 저장 매체와 관련되는 것으로 이해되어야 한다. 디스크 (disk) 및 디스크 (disc) 는, 여기에 사용한 바와 같이, 콤팩트 디스크 (CD), 레이저 디스크, 광 디스크, 디지털 다기능 디스크 (DVD), 플로피 디스크 및 블루-레이 디스크를 포함하며, 여기서 디스크 (disk) 는 보통 데이터를 자기적으로 재생시키는 한편, 디스크 (disc) 는 레이저를 이용하여 데이터를 광학적으로 재생시킨다. 상기의 조합들이 또한 컴퓨터 판독가능 매체의 범위 내에 포함되어야 한다.
명령들은 하나 이상의 프로세서들, 이를 테면 하나 이상의 DSP들, 범용 마이크로프로세서들, ASIC들, FPGA들, 또는 다른 등가의 집적 또는 이산 논리 회로에 의해 실행될 수도 있다. 따라서, 용어 "프로세서" 는, 여기에 사용한 바와 같이, 임의의 전술한 구조 또는 여기에 설명된 기법들의 구현에 적합한 임의의 다른 구조를 지칭할 수도 있다. 또한, 일부 예들에서, 여기에 설명된 기능성은 인코딩 및 디코딩하기 위해 구성된 전용 하드웨어 및/또는 소프트웨어 모듈들 내에 제공되거나, 또는 결합된 코덱에 통합될 수도 있다. 또한, 그 기법들은 하나 이상의 회로들 또는 논리 소자들 내에 완전히 구현될 수 있다.
본 개시물의 기법들은 무선 핸드셋, 집적 회로 (IC) 또는 IC들의 세트 (예를 들어, 칩 세트) 를 포함하는, 매우 다양한 디바이스들 또는 장치들에서 구현될 수도 있다. 다양한 컴포넌트들, 모듈들 또는 유닛들은 개시된 기법들을 수행하도록 구성된 디바이스들의 기능적 양태들을 강조하기 위해 본 개시물에서 설명되지만, 반드시 상이한 하드웨어 유닛들에 의한 실현을 요구하지는 않는다. 오히려, 상기 설명한 바와 같이, 다양한 유닛들은 코덱 하드웨어 유닛에 결합되거나, 또는 적합한 소프트웨어 및/또는 펌웨어와 함께, 상기 설명한 바와 같은 하나 이상의 프로세서들을 포함하는, 상호동작적인 하드웨어 유닛들의 컬렉션에 의해 제공될 수도 있다.
다양한 예들이 설명되어 있다. 이들 및 다른 예들은 다음의 특허청구의 범위 내에 있다.

Claims (50)

  1. 범용 그래픽스 프로세싱 유닛 (general purpose graphics processing unit; GPGPU) 으로서,
    프로세싱 파이프라인의 스테이지들로서 선택적으로 동작하도록 구성된 2 개 이상의 병렬 프로세싱 유닛들; 및
    각각이 상기 병렬 프로세싱 유닛들 중 적어도 2 개의 병렬 프로세싱 유닛들 간에 접속되어, 상기 병렬 프로세싱 유닛들 간의 전송을 위한 데이터를 보유하도록 구성된, 하나 이상의 로컬 메모리 버퍼들을 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  2. 제 1 항에 있어서,
    상기 하나 이상의 로컬 메모리 버퍼들 각각은 상기 프로세싱 파이프라인에서 상기 병렬 프로세싱 유닛들 중 상기 적어도 2 개의 병렬 프로세싱 유닛들 간에 직접 접속되는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  3. 제 1 항에 있어서,
    상기 하나 이상의 로컬 메모리 버퍼들은 상기 병렬 프로세싱 유닛들 간의 상기 데이터의 전송을 가능하게 하기 위해 하드웨어 기반 데이터 플로우 제어 메커니즘들을 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  4. 제 1 항에 있어서,
    상기 하나 이상의 로컬 메모리 버퍼들은 하드웨어 기반 선입, 선출 버퍼 (first-in, first-out buffer; FIFO) 들, 후입, 선출 버퍼 (last-in, first-out buffer; LIFO) 들, 또는 인덱싱된 버퍼들 중 적어도 하나를 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  5. 제 1 항에 있어서,
    상기 하나 이상의 로컬 메모리 버퍼들로 데이터를 전송하도록 상기 병렬 프로세싱 유닛들 중 하나 이상의 병렬 프로세싱 유닛들을 구성하고, 상기 하나 이상의 로컬 메모리 버퍼들로부터 데이터를 수신하도록 상기 병렬 프로세싱 유닛들 중 하나 이상의 병렬 프로세싱 유닛들을 구성하도록 구성된 제어 유닛을 더 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  6. 제 5 항에 있어서,
    상기 제어 유닛은 하나 이상의 애플리케이션 프로그래밍 인터페이스 (application programming interface; API) 들을 실행하여, 상기 로컬 메모리 버퍼들로 데이터를 전송하고 상기 로컬 메모리 버퍼들로부터 데이터를 수신하도록 상기 병렬 프로세싱 유닛들을 구성하도록 구성되는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  7. 제 1 항에 있어서,
    상기 로컬 메모리 버퍼들 각각이 상기 프로세싱 파이프라인에서 이전 프로세싱 유닛으로부터 출력된 데이터를 보유하는데 필요한 폭을 결정하고, 결정된 상기 폭을 갖도록 상기 로컬 메모리 버퍼들 각각을 구성하도록 구성된 제어 유닛을 더 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  8. 제 7 항에 있어서,
    상기 제어 유닛은 하나 이상의 애플리케이션 프로그래밍 인터페이스 (API) 들을 실행하여, 상기 로컬 메모리 버퍼들 각각에 대한 상기 폭을 결정하고, 결정된 상기 폭을 가진 상기 로컬 메모리 버퍼들 각각을 구성하며, 상기 로컬 메모리 버퍼들 각각의 깊이를 결정하도록 구성되는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  9. 제 7 항에 있어서,
    상기 로컬 메모리 버퍼들 각각은 깊이를 폭과 교환하도록 구성가능한, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  10. 제 1 항에 있어서,
    상기 프로세싱 파이프라인 내에 데이터 시퀀스를 보존하는 제어 유닛을 더 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  11. 제 10 항에 있어서,
    상기 제어 유닛은 :
    상기 병렬 프로세싱 유닛들 중 적어도 하나의 병렬 프로세싱 유닛으로의 데이터 세트의 진입 (entry) 시에 시퀀스-결정 카운터 (sequence-determining counter) 를 실행하여 상기 데이터 세트의 데이터 스레드들의 시퀀스를 레코딩하고;
    상기 병렬 프로세싱 유닛들 중 상기 적어도 하나의 병렬 프로세싱 유닛으로부터의 상기 데이터 세트의 퇴출 (exit) 시에 시퀀스-강행 배리어 (sequence-enforcing barrier) 를 실행하여 상기 시퀀스-결정 카운터에 의해 레코딩된 것과 동일한 시퀀스로 상기 병렬 프로세싱 유닛으로부터 상기 데이터 세트의 상기 데이터 스레드들을 릴리즈하도록 구성되는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  12. 제 1 항에 있어서,
    상기 병렬 프로세싱 유닛들 중 하나의 병렬 프로세싱 유닛은 상기 프로세싱 파이프라인의 제 1 스테이지로서 동작하고 디바이스 메모리로부터 오리지널 데이터 세트를 취출하도록 구성되는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  13. 제 1 항에 있어서,
    상기 병렬 프로세싱 유닛들 중 하나의 병렬 프로세싱 유닛은 상기 프로세싱 파이프라인의 최종 스테이지로서 동작하고 디바이스 메모리에 파이프라인 프로세싱된 데이터 세트를 저장하도록 구성되는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  14. 제 1 항에 있어서,
    상기 병렬 프로세싱 유닛들 중 적어도 하나의 병렬 프로세싱 유닛은 상기 프로세싱 파이프라인의 중간 스테이지로서 동작하고, 상기 로컬 메모리 버퍼들 중 하나의 로컬 메모리 버퍼를 통해 상기 프로세싱 파이프라인에서 상기 병렬 프로세싱 유닛들 중 이전 병렬 프로세싱 유닛으로부터 데이터 세트를 수신하며, 상기 로컬 메모리 버퍼들 중 다른 로컬 메모리 버퍼를 통해 상기 프로세싱 파이프라인에서 상기 병렬 프로세싱 유닛들 중 후속 병렬 프로세싱 유닛으로 상기 데이터 세트를 전송하도록 구성되는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  15. 제 14 항에 있어서,
    상기 병렬 프로세싱 유닛들 중 상기 적어도 하나의 병렬 프로세싱 유닛은 상기 데이터 세트를 프로세싱하기 위해 디바이스 메모리로부터 보조 데이터를 취출하도록 구성되는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  16. 범용 그래픽스 프로세싱 유닛 (general purpose graphics processing unit; GPGPU) 으로 데이터를 프로세싱하는 방법으로서,
    프로세싱 파이프라인의 스테이지들로서 선택적으로 동작하도록 2 개 이상의 병렬 프로세싱 유닛들을 구성하는 단계; 및
    상기 병렬 프로세싱 유닛들 간의 전송을 위한 데이터를 보유하도록, 각각이 상기 병렬 프로세싱 유닛들 중 적어도 2 개의 병렬 프로세싱 유닛들 간에 접속된, 하나 이상의 로컬 메모리 버퍼들을 구성하는 단계를 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU) 으로 데이터를 프로세싱하는 방법.
  17. 제 16 항에 있어서,
    상기 로컬 메모리 버퍼들 각각은 상기 프로세싱 파이프라인에서 상기 병렬 프로세싱 유닛들 중 상기 적어도 2 개의 병렬 프로세싱 유닛들 간에 직접 접속되는, 범용 그래픽스 프로세싱 유닛 (GPGPU) 으로 데이터를 프로세싱하는 방법.
  18. 제 16 항에 있어서,
    상기 하나 이상의 로컬 메모리 버퍼들은 상기 병렬 프로세싱 유닛들 간의 상기 데이터의 전송을 가능하게 하기 위해 하드웨어 기반 데이터 플로우 제어 메커니즘들을 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU) 으로 데이터를 프로세싱하는 방법.
  19. 제 16 항에 있어서,
    상기 하나 이상의 로컬 메모리 버퍼들은 하드웨어 기반 선입, 선출 버퍼 (first-in, first-out buffer; FIFO) 들, 후입, 선출 버퍼 (last-in, first-out buffer; LIFO) 들, 또는 인덱싱된 버퍼들 중 적어도 하나를 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU) 으로 데이터를 프로세싱하는 방법.
  20. 제 16 항에 있어서,
    상기 하나 이상의 로컬 메모리 버퍼들로 데이터를 전송하도록 상기 병렬 프로세싱 유닛들 중 하나 이상의 병렬 프로세싱 유닛들을 구성하는 단계; 및
    상기 하나 이상의 로컬 메모리 버퍼들로부터 데이터를 수신하도록 상기 병렬 프로세싱 유닛들 중 하나 이상의 병렬 프로세싱 유닛들을 구성하는 단계를 더 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU) 으로 데이터를 프로세싱하는 방법.
  21. 제 20 항에 있어서,
    상기 하나 이상의 병렬 프로세싱 유닛들을 구성하는 단계는, 하나 이상의 애플리케이션 프로그래밍 인터페이스 (application programming interface; API) 들을 실행하여, 상기 로컬 메모리 버퍼들로 데이터를 전송하고 상기 로컬 메모리 버퍼들로부터 데이터를 수신하도록 상기 병렬 프로세싱 유닛들을 구성하는 단계를 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU) 으로 데이터를 프로세싱하는 방법.
  22. 제 16 항에 있어서,
    상기 하나 이상의 로컬 메모리 버퍼들을 구성하는 단계는 :
    상기 로컬 메모리 버퍼들 각각이 상기 프로세싱 파이프라인에서 이전 프로세싱 유닛으로부터 출력된 데이터를 보유하는데 필요한 폭을 결정하는 단계; 및
    결정된 상기 폭을 갖도록 상기 로컬 메모리 버퍼들 각각을 구성하는 단계를 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU) 으로 데이터를 프로세싱하는 방법.
  23. 제 22 항에 있어서,
    상기 하나 이상의 로컬 메모리 버퍼들을 구성하는 단계는, 하나 이상의 애플리케이션 프로그래밍 인터페이스 (API) 들을 실행하여, 상기 로컬 메모리 버퍼들 각각에 대한 상기 폭을 결정하고, 결정된 상기 폭을 가진 상기 로컬 메모리 버퍼들 각각을 구성하며, 상기 로컬 메모리 버퍼들 각각의 깊이를 결정하는 단계를 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU) 으로 데이터를 프로세싱하는 방법.
  24. 제 22 항에 있어서,
    상기 로컬 메모리 버퍼들 각각은 깊이를 폭과 교환하도록 구성가능한, 범용 그래픽스 프로세싱 유닛 (GPGPU) 으로 데이터를 프로세싱하는 방법.
  25. 제 16 항에 있어서,
    상기 프로세싱 파이프라인 내에 데이터 시퀀스를 보존하는 단계를 더 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU) 으로 데이터를 프로세싱하는 방법.
  26. 제 25 항에 있어서,
    상기 데이터 시퀀스를 보존하는 단계는 :
    상기 병렬 프로세싱 유닛들 중 적어도 하나의 병렬 프로세싱 유닛으로의 데이터 세트의 진입 (entry) 시에 시퀀스-결정 카운터 (sequence-determining counter) 를 실행하여 상기 데이터 세트의 데이터 스레드들의 시퀀스를 레코딩하는 단계; 및
    상기 병렬 프로세싱 유닛들 중 상기 적어도 하나의 병렬 프로세싱 유닛으로부터의 상기 데이터 세트의 퇴출 (exit) 시에 시퀀스-강행 배리어 (sequence-enforcing barrier) 를 실행하여 상기 시퀀스-결정 카운터에 의해 레코딩된 것과 동일한 시퀀스로 상기 병렬 프로세싱 유닛으로부터 상기 데이터 세트의 상기 데이터 스레드들을 릴리즈하는 단계를 더 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU) 으로 데이터를 프로세싱하는 방법.
  27. 제 16 항에 있어서,
    상기 2 개 이상의 병렬 프로세싱 유닛들을 구성하는 단계는, 상기 프로세싱 파이프라인의 제 1 스테이지로서 동작하고 디바이스 메모리로부터 오리지널 데이터 세트를 취출하도록 상기 병렬 프로세싱 유닛들 중 하나의 병렬 프로세싱 유닛을 구성하는 단계를 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU) 으로 데이터를 프로세싱하는 방법.
  28. 제 16 항에 있어서,
    상기 2 개 이상의 병렬 프로세싱 유닛들을 구성하는 단계는, 상기 프로세싱 파이프라인의 최종 스테이지로서 동작하고 디바이스 메모리에 파이프라인 프로세싱된 데이터 세트를 저장하도록 상기 병렬 프로세싱 유닛들 중 하나의 병렬 프로세싱 유닛을 구성하는 단계를 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU) 으로 데이터를 프로세싱하는 방법.
  29. 제 16 항에 있어서,
    상기 2 개 이상의 병렬 프로세싱 유닛들을 구성하는 단계는, 상기 프로세싱 파이프라인의 중간 스테이지로서 동작하고, 상기 로컬 메모리 버퍼들 중 하나의 로컬 메모리 버퍼를 통해 상기 프로세싱 파이프라인에서 상기 병렬 프로세싱 유닛들 중 이전 병렬 프로세싱 유닛으로부터 데이터 세트를 수신하며, 상기 로컬 메모리 버퍼들 중 다른 로컬 메모리 버퍼를 통해 상기 프로세싱 파이프라인에서 상기 병렬 프로세싱 유닛들 중 후속 병렬 프로세싱 유닛으로 상기 데이터 세트를 전송하도록 상기 병렬 프로세싱 유닛들 중 적어도 하나의 병렬 프로세싱 유닛을 구성하는 단계를 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU) 으로 데이터를 프로세싱하는 방법.
  30. 제 29 항에 있어서,
    상기 병렬 프로세싱 유닛들 중 적어도 하나의 병렬 프로세싱 유닛을 구성하는 단계는, 상기 데이터 세트를 프로세싱하기 위해 디바이스 메모리로부터 보조 데이터를 취출하도록 상기 병렬 프로세싱 유닛들 중 상기 적어도 하나의 병렬 프로세싱 유닛을 구성하는 단계를 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU) 으로 데이터를 프로세싱하는 방법.
  31. 범용 그래픽스 프로세싱 유닛 (general purpose graphics processing unit; GPGPU) 으로서,
    프로세싱 파이프라인의 스테이지들로서 선택적으로 동작하도록 2 개 이상의 병렬 프로세싱 유닛들을 구성하는 수단; 및
    상기 병렬 프로세싱 유닛들 간의 전송을 위한 데이터를 보유하도록, 각각이 상기 병렬 프로세싱 유닛들 중 적어도 2 개의 병렬 프로세싱 유닛들 간에 접속된, 하나 이상의 로컬 메모리 버퍼들을 구성하는 수단을 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  32. 제 31 항에 있어서,
    상기 로컬 메모리 버퍼들 각각은 상기 프로세싱 파이프라인에서 상기 병렬 프로세싱 유닛들 중 상기 적어도 2 개의 병렬 프로세싱 유닛들 간에 직접 접속되는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  33. 제 31 항에 있어서,
    상기 하나 이상의 로컬 메모리 버퍼들은 상기 병렬 프로세싱 유닛들 간의 상기 데이터의 전송을 가능하게 하기 위해 하드웨어 기반 데이터 플로우 제어 메커니즘들을 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  34. 제 31 항에 있어서,
    상기 하나 이상의 로컬 메모리 버퍼들로 데이터를 전송하도록 상기 병렬 프로세싱 유닛들 중 하나 이상의 병렬 프로세싱 유닛들을 구성하는 수단; 및
    상기 하나 이상의 로컬 메모리 버퍼들로부터 데이터를 수신하도록 상기 병렬 프로세싱 유닛들 중 하나 이상의 병렬 프로세싱 유닛들을 구성하는 수단을 더 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  35. 제 34 항에 있어서,
    하나 이상의 애플리케이션 프로그래밍 인터페이스 (application programming interface; API) 들을 실행하여, 상기 로컬 메모리 버퍼들로 데이터를 전송하고 상기 로컬 메모리 버퍼들로부터 데이터를 수신하도록 상기 병렬 프로세싱 유닛들을 구성하는 수단을 더 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  36. 제 31 항에 있어서,
    상기 로컬 메모리 버퍼들 각각이 상기 프로세싱 파이프라인에서 이전 프로세싱 유닛으로부터 출력된 데이터를 보유하는데 필요한 폭을 결정하는 수단; 및
    결정된 상기 폭을 갖도록 상기 로컬 메모리 버퍼들 각각을 구성하는 수단을 더 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  37. 제 36 항에 있어서,
    하나 이상의 애플리케이션 프로그래밍 인터페이스 (API) 들을 실행하여, 상기 로컬 메모리 버퍼들 각각에 대한 상기 폭을 결정하고, 결정된 상기 폭을 가진 상기 로컬 메모리 버퍼들 각각을 구성하며, 상기 로컬 메모리 버퍼들 각각의 깊이를 결정하는 것을 더 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  38. 제 36 항에 있어서,
    상기 로컬 메모리 버퍼들 각각은 깊이를 폭과 교환하도록 구성가능한, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  39. 제 31 항에 있어서,
    상기 프로세싱 파이프라인 내에 데이터 시퀀스를 보존하는 수단을 더 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  40. 제 39 항에 있어서,
    상기 병렬 프로세싱 유닛들 중 적어도 하나의 병렬 프로세싱 유닛으로의 데이터 세트의 진입 (entry) 시에 시퀀스-결정 카운터 (sequence-determining counter) 를 실행하여 상기 데이터 세트의 데이터 스레드들의 시퀀스를 레코딩하는 수단; 및
    상기 병렬 프로세싱 유닛들 중 상기 적어도 하나의 병렬 프로세싱 유닛으로부터의 상기 데이터 세트의 퇴출 (exit) 시에 시퀀스-강행 배리어 (sequence-enforcing barrier) 를 실행하여 상기 시퀀스-결정 카운터에 의해 레코딩된 것과 동일한 시퀀스로 상기 병렬 프로세싱 유닛으로부터 상기 데이터 세트의 상기 데이터 스레드들을 릴리즈하는 수단을 더 포함하는, 범용 그래픽스 프로세싱 유닛 (GPGPU).
  41. 범용 그래픽스 프로세싱 유닛 (general purpose graphics processing unit; GPGPU) 으로 데이터를 프로세싱하기 위한 명령들을 포함하는 컴퓨터 판독가능 매체로서,
    상기 명령들은, 실행될 때, 프로그램가능 프로세서로 하여금 :
    프로세싱 파이프라인의 스테이지들로서 선택적으로 동작하도록 2 개 이상의 병렬 프로세싱 유닛들을 구성하게 하고;
    상기 병렬 프로세싱 유닛들 간의 전송을 위한 데이터를 보유하도록, 각각이 상기 병렬 프로세싱 유닛들 중 적어도 2 개의 병렬 프로세싱 유닛들 간에 접속된, 하나 이상의 로컬 메모리 버퍼들을 구성하게 하는, 컴퓨터 판독가능 매체.
  42. 제 41 항에 있어서,
    상기 로컬 메모리 버퍼들 각각은 상기 프로세싱 파이프라인에서 상기 병렬 프로세싱 유닛들 중 상기 적어도 2 개의 병렬 프로세싱 유닛들 간에 직접 접속되는, 컴퓨터 판독가능 매체.
  43. 제 41 항에 있어서,
    상기 하나 이상의 로컬 메모리 버퍼들은 상기 병렬 프로세싱 유닛들 간의 상기 데이터의 전송을 가능하게 하기 위해 하드웨어 기반 데이터 플로우 제어 메커니즘들을 포함하는, 컴퓨터 판독가능 매체.
  44. 제 41 항에 있어서,
    상기 프로그램가능 프로세서로 하여금 :
    상기 하나 이상의 로컬 메모리 버퍼들로 데이터를 전송하도록 상기 병렬 프로세싱 유닛들 중 하나 이상의 병렬 프로세싱 유닛들을 구성하게 하고;
    상기 하나 이상의 로컬 메모리 버퍼들로부터 데이터를 수신하도록 상기 병렬 프로세싱 유닛들 중 하나 이상의 병렬 프로세싱 유닛들을 구성하게 하는 명령들을 더 포함하는, 컴퓨터 판독가능 매체.
  45. 제 44 항에 있어서,
    상기 프로그램가능 프로세서로 하여금, 하나 이상의 애플리케이션 프로그래밍 인터페이스 (application programming interface; API) 들을 실행하여, 상기 로컬 메모리 버퍼들로 데이터를 전송하고 상기 로컬 메모리 버퍼들로부터 데이터를 수신하도록 상기 병렬 프로세싱 유닛들을 구성하게 하는 명령들을 더 포함하는, 컴퓨터 판독가능 매체.
  46. 제 41 항에 있어서,
    상기 프로그램가능 프로세서로 하여금 :
    상기 로컬 메모리 버퍼들 각각이 상기 프로세싱 파이프라인에서 이전 프로세싱 유닛으로부터 출력된 데이터를 보유하는데 필요한 폭을 결정하게 하고;
    결정된 상기 폭을 갖도록 상기 로컬 메모리 버퍼들 각각을 구성하게 하는 명령들을 더 포함하는, 컴퓨터 판독가능 매체.
  47. 제 46 항에 있어서,
    상기 프로그램가능 프로세서로 하여금, 하나 이상의 애플리케이션 프로그래밍 인터페이스 (API) 들을 실행하여, 상기 로컬 메모리 버퍼들 각각에 대한 상기 폭을 결정하고, 결정된 상기 폭을 가진 상기 로컬 메모리 버퍼들 각각을 구성하며, 상기 로컬 메모리 버퍼들 각각의 깊이를 결정하게 하는 명령들을 더 포함하는, 컴퓨터 판독가능 매체.
  48. 제 46 항에 있어서,
    상기 로컬 메모리 버퍼들 각각은 깊이를 폭과 교환하도록 구성가능한, 컴퓨터 판독가능 매체.
  49. 제 41 항에 있어서,
    상기 프로그램가능 프로세서로 하여금, 상기 프로세싱 파이프라인 내에 데이터 시퀀스를 보존하게 하는 명령들을 더 포함하는, 컴퓨터 판독가능 매체.
  50. 제 49 항에 있어서,
    상기 프로그램가능 프로세서로 하여금 :
    상기 병렬 프로세싱 유닛들 중 적어도 하나의 병렬 프로세싱 유닛으로의 데이터 세트의 진입 (entry) 시에 시퀀스-결정 카운터 (sequence-determining counter) 를 실행하여 상기 데이터 세트의 데이터 스레드들의 시퀀스를 레코딩하게 하고;
    상기 병렬 프로세싱 유닛들 중 상기 적어도 하나의 병렬 프로세싱 유닛으로부터의 상기 데이터 세트의 퇴출 (exit) 시에 시퀀스-강행 배리어 (sequence-enforcing barrier) 를 실행하여 상기 시퀀스-결정 카운터에 의해 레코딩된 것과 동일한 시퀀스로 상기 병렬 프로세싱 유닛으로부터 상기 데이터 세트의 상기 데이터 스레드들을 릴리즈하게 하는 명령들을 더 포함하는, 컴퓨터 판독가능 매체.
KR1020137021380A 2011-01-14 2012-01-13 범용 그래픽스 프로세싱 유닛에서의 컴퓨테이션 리소스 파이프라이닝 KR101558069B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/007,333 2011-01-14
US13/007,333 US9804995B2 (en) 2011-01-14 2011-01-14 Computational resource pipelining in general purpose graphics processing unit
PCT/US2012/021344 WO2012097316A1 (en) 2011-01-14 2012-01-13 Computational resource pipelining in general purpose graphics processing unit

Publications (2)

Publication Number Publication Date
KR20130122657A true KR20130122657A (ko) 2013-11-07
KR101558069B1 KR101558069B1 (ko) 2015-10-06

Family

ID=45615047

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137021380A KR101558069B1 (ko) 2011-01-14 2012-01-13 범용 그래픽스 프로세싱 유닛에서의 컴퓨테이션 리소스 파이프라이닝

Country Status (8)

Country Link
US (1) US9804995B2 (ko)
EP (2) EP3557434B1 (ko)
JP (2) JP5996554B2 (ko)
KR (1) KR101558069B1 (ko)
CN (1) CN103348320B (ko)
ES (2) ES2873896T3 (ko)
HU (1) HUE045952T2 (ko)
WO (1) WO2012097316A1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9336557B2 (en) * 2012-05-02 2016-05-10 Apple Inc. Apparatus and methods for processing of media signals
CN103064657B (zh) * 2012-12-26 2016-09-28 深圳中微电科技有限公司 单个处理器上实现多应用并行处理的方法及装置
US20140232733A1 (en) * 2013-02-19 2014-08-21 Jason Caulkins Graphics Processing Unit Pre-Caching
DE102013224702A1 (de) * 2013-12-03 2015-06-03 Robert Bosch Gmbh Steuergerät für ein Kraftfahrzeug
CN103888771A (zh) * 2013-12-30 2014-06-25 中山大学深圳研究院 基于gpgpu技术的并行视频图像处理方法
US9928564B2 (en) * 2014-06-26 2018-03-27 Intel Corporation Efficient hardware mechanism to ensure shared resource data coherency across draw calls
KR102222752B1 (ko) 2014-08-01 2021-03-04 삼성전자주식회사 프로세서의 동적 전압 주파수 스케일링 방법
US9697580B2 (en) * 2014-11-10 2017-07-04 Qualcomm Incorporated Dynamic pipeline for graphics processing
EP3065051A1 (en) 2015-03-05 2016-09-07 Ingo Josopait Flow control for language-embedded programming in general-purpose computing on graphics processing units
CN105653243B (zh) * 2015-12-23 2018-03-30 北京大学 一种通用图形处理器多任务并发执行的任务派发方法
CN108563519B (zh) * 2018-04-17 2023-06-09 长沙景美集成电路设计有限公司 基于gpgpu中的2d桌面块拷贝填充操作的实现
CN111881078B (zh) * 2020-07-17 2022-04-19 上海芷锐电子科技有限公司 基于gpgpu芯片的多用户通用计算处理方法和系统
US20220334890A1 (en) * 2021-04-14 2022-10-20 Nvidia Corporation Application programming interface to indicate increased resource usage

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4751671A (en) * 1983-02-14 1988-06-14 Prime Computer, Inc. Size configurable data storage system
US4807183A (en) * 1985-09-27 1989-02-21 Carnegie-Mellon University Programmable interconnection chip for computer system functional modules
WO1991017507A1 (en) * 1990-05-07 1991-11-14 Mitsubishi Denki Kabushiki Kaisha Parallel data processing system
JPH0683578A (ja) 1992-03-13 1994-03-25 Internatl Business Mach Corp <Ibm> 処理システム、及びデータスループット制御方法
JPH06282447A (ja) 1993-03-29 1994-10-07 Mitsubishi Electric Corp 待ち行列管理方式
JPH11328100A (ja) 1998-05-13 1999-11-30 Sony Corp ディジタル信号処理装置
EP1346279A1 (en) 2000-12-07 2003-09-24 Koninklijke Philips Electronics N.V. Digital signal processing apparatus
DE60204189T2 (de) * 2001-06-29 2006-02-02 Stmicroelectronics Pvt. Ltd. FPGA mit zumindest zwei unterschiedlichen und unabhängig konfigurierbaren Speicherstrukturen
US6919736B1 (en) * 2002-07-12 2005-07-19 Lattice Semiconductor Corporation Field programmable gate array having embedded memory with configurable depth and width
US7389006B2 (en) 2004-05-14 2008-06-17 Nvidia Corporation Auto software configurable register address space for low power programmable processor
US7369078B2 (en) * 2004-08-16 2008-05-06 National Instruments Corporation Flexible converter interface for use in analog-to-digital and digital-to-analog systems
US7555607B2 (en) * 2005-11-10 2009-06-30 Hewlett-Packard Development Company, L.P. Program thread syncronization for instruction cachelines
JP4795138B2 (ja) 2006-06-29 2011-10-19 富士ゼロックス株式会社 画像処理装置及びプログラム
US7725688B1 (en) 2006-09-05 2010-05-25 Nvidia Corporation System and method for storing states used to configure a processing pipeline in a graphics processing unit
US20080109795A1 (en) * 2006-11-02 2008-05-08 Nvidia Corporation C/c++ language extensions for general-purpose graphics processing unit
US20100079454A1 (en) 2008-09-29 2010-04-01 Legakis Justin S Single Pass Tessellation
JP2010244096A (ja) 2009-04-01 2010-10-28 Seiko Epson Corp データ処理装置、印刷システムおよびプログラム
JP2010287110A (ja) 2009-06-12 2010-12-24 Nec Personal Products Co Ltd 情報処理装置、情報処理方法、プログラム及び記録媒体
US8817031B2 (en) * 2009-10-02 2014-08-26 Nvidia Corporation Distributed stream output in a parallel processing unit

Also Published As

Publication number Publication date
CN103348320B (zh) 2017-06-23
EP2663921A1 (en) 2013-11-20
CN103348320A (zh) 2013-10-09
US20120185671A1 (en) 2012-07-19
KR101558069B1 (ko) 2015-10-06
ES2873896T3 (es) 2021-11-04
JP6062506B2 (ja) 2017-01-18
US9804995B2 (en) 2017-10-31
EP3557434A1 (en) 2019-10-23
ES2749883T3 (es) 2020-03-24
JP5996554B2 (ja) 2016-09-21
JP2014505946A (ja) 2014-03-06
JP2016006657A (ja) 2016-01-14
HUE045952T2 (hu) 2020-02-28
WO2012097316A1 (en) 2012-07-19
EP2663921B1 (en) 2019-07-24
EP3557434B1 (en) 2021-02-17

Similar Documents

Publication Publication Date Title
US9804995B2 (en) Computational resource pipelining in general purpose graphics processing unit
KR101707289B1 (ko) 그래픽 병렬 처리 유닛에 대한 버퍼 관리
US10013731B2 (en) Maximizing parallel processing in graphics processors
EP2820540B1 (en) Execution model for heterogeneous cpu-gpu computing
JP6374038B2 (ja) ドローコールにわたる共有リソースデータコヒーレンシを確実にするための効率的なハードウェアメカニズム
WO2017107118A1 (en) Facilitating efficient communication and data processing across clusters of computing machines in heterogeneous computing environment
CN105321142A (zh) 经由计算流水线进行的采样、错误管理和/或上下文切换
JP5908957B2 (ja) ショートループアトミックアクセス
US9779696B2 (en) Serialized access to graphics resources
US11763419B2 (en) GPR optimization in a GPU based on a GPR release mechanism
US9542233B1 (en) Managing a free list of resources to decrease control complexity and reduce power consumption
CN110825439B (zh) 信息处理方法和处理器
US9747104B2 (en) Utilizing pipeline registers as intermediate storage
US20150103084A1 (en) Supporting atomic operations as post-synchronization operations in graphics processing architectures
WO2017160385A1 (en) Fast access and use of common data values relating to applications in parallel computing environments

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: 20180628

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20190624

Year of fee payment: 5