KR20130141446A - 복수의 프로세싱 유닛들에서 온-칩 메모리를 사용하는 데이터 프로세싱 - Google Patents

복수의 프로세싱 유닛들에서 온-칩 메모리를 사용하는 데이터 프로세싱 Download PDF

Info

Publication number
KR20130141446A
KR20130141446A KR1020137004197A KR20137004197A KR20130141446A KR 20130141446 A KR20130141446 A KR 20130141446A KR 1020137004197 A KR1020137004197 A KR 1020137004197A KR 20137004197 A KR20137004197 A KR 20137004197A KR 20130141446 A KR20130141446 A KR 20130141446A
Authority
KR
South Korea
Prior art keywords
wavefront
output
data elements
memory
processing units
Prior art date
Application number
KR1020137004197A
Other languages
English (en)
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 KR20130141446A publication Critical patent/KR20130141446A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8007Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • 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/167Interprocessor communication using a common memory, e.g. mailbox
    • 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
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Multimedia (AREA)
  • Image Processing (AREA)
  • Image Input (AREA)

Abstract

복수의 프로세싱 유닛들에서 온-칩 로컬 메모리를 사용하여 프로세서에서의 데이터 프로세싱 성능을 향상시키는 방법이 개시된다. 일 실시예에 따르면, 복수의 프로세싱 유닛들을 사용하여 프로세서에서 데이터 요소들을 프로세싱하는 방법이 제공되며, 이 방법은, 프로세싱 유닛들 각각에서, 제 1 타입의 쓰레드를 갖는 제 1 웨이브프런트를 론칭시키고 이후 제 2 타입의 쓰레드를 갖는 제 2 웨이브프런트를 론칭시키는 단계와, 여기서 제 1 웨이브프런트는 오프-칩 공유 메모리로부터 데이터 요소들의 일부를 입력으로서 판독하고, 그리고 제 1 출력을 발생시키며; 제 1 출력을 각각의 프로세싱 유닛의 온-칩 로컬 메모리에 기입하는 단계와; 그리고 제 2 웨이브프런트에 의해 발생된 제 2 출력을 온-칩 로컬 메모리에 기입하는 단계를 포함하며, 여기서, 제 2 웨이브프런트에 대한 입력은 제 1 출력으로부터의 제1의 복수의 데이터 요소들을 포함한다. 대응하는 시스템 및 컴퓨터 프로그램물 실시예들이 또한 개시된다.

Description

복수의 프로세싱 유닛들에서 온-칩 메모리를 사용하는 데이터 프로세싱{DATA PROCESSING USING ON-CHIP MEMORY IN MULTIPLE PROCESSING UNITS}
본 발명은 프로세서의 데이터 프로세싱 성능을 향상시키는 것에 관한 것이다.
복수의 프로세싱 유닛들을 구비한 프로세서들은 다수의 데이터 요소(data element)들을 병렬로 프로세싱할 때 종종 사용된다. 예를 들어, 복수의 단일 명령 다중 데이터(Single Instruction Multiple Data, SIMD) 프로세싱 유닛들을 포함하는 그래픽 프로세서(GPU)는 다수의 그래픽 데이터 요소들을 병렬로 프로세싱할 수 있다. 많은 경우에 있어서, 데이터 요소들은 최종 출력이 획득될 때까지 개별 쓰레드(thread)들의 시퀀스에 의해 프로세싱된다. 예를 들어, GPU에서, 버텍스 쉐이더(vertex shaders), 지오메트릭 쉐이더(geometric shaders) 및 픽셀 쉐이더(pixel shaders)를 포함하는 서로 다른 타입의 쓰레드들의 시퀀스는, 최종 출력이 디스플레이에 렌더링될 준비가 될 때까지 순차적으로 데이터 아이템들의 세트에 작용할 수 있다.
다양한 스테이지(stage)들에서 데이터 요소들을 프로세싱하기 위해 복수의 개별적 타입의 쓰레드들을 가짐으로써 파이프라인잉(pipelining)이 가능하게 되고, 이에 따라 처리량(throughput)을 증가시킬 수 있다. 데이터 요소들의 세트를 프로세싱하는 시퀀스의 각각의 개별 쓰레드는 공유 메모리(shared memory)로부터 그 입력을 획득하고, 해당 데이터가 후속 쓰레드에 의해 판독될 수 있는 곳으로부터 공유 메모리로 그 출력을 기입한다. 공유 메모리에서의 메모리 액세스는, 일반적으로, 다수의 클럭 싸이클(clock cycle)들을 소비한다. 동시 쓰레드(simultaneous thread)들의 수가 증감함에 따라, 메모리 액세스로 인한 지연(delay)들이 또한 증가할 수 있다. 다수의 쓰레드들을 병렬로 실행시키는 복수의 개별 프로세싱 유닛들을 구비한 종래의 프로세서들에서, 메모리 액세스 지연들은 전체 프로세싱 속도를 크게 감속시킬 수 있다.
따라서, 필요한 것은, 데이터 아이템들의 세트를 프로세싱하는 프로그램들의 시퀀스에 의해 메모리 액세스를 위해 소비되는 시간을 감소시킴으로써, 복수의 프로세싱 유닛들을 갖는 프로세서들의 데이터 프로세싱 성능을 향상시키는 방법 및 시스템이다.
복수의 프로세싱 유닛들에서 온-칩 로컬 메모리(on-chip local memory)를 사용하여 프로세서에서의 데이터 프로세싱 성능을 향상시키는 방법 및 장치가 개시된다. 일 실시예에 따르면, 복수의 프로세싱 유닛들을 사용하여 프로세서에서 데이터 요소들을 프로세싱하는 방법이 제공되며, 이 방법은, 상기 프로세싱 유닛들 각각에서, 제 1 타입의 쓰레드를 갖는 제 1 웨이브프런트(wavefront)를 론칭(launching)시키고 이후 제 2 타입의 쓰레드를 갖는 제 2 웨이브프런트를 론칭시키는 단계와, 여기서 제 1 웨이브프런트는 오프-칩 공유 메모리(off-chip shared memory)로부터 데이터 요소들의 일부를 입력으로서 판독하고, 그리고 제 1 출력을 발생시키며; 제 1 출력을 각각의 프로세싱 유닛의 온-칩 로컬 메모리(on-chip local memory)에 기입하는 단계와; 그리고 제 2 웨이브프런트에 의해 발생된 제 2 출력을 온-칩 로컬 메모리에 기입하는 단계를 포함하며, 여기서, 제 2 웨이브프런트에 대한 입력은 제 1 출력으로부터의 제1의 복수의 데이터 요소들을 포함한다.
또 다른 실시예는 시스템이며, 상기 시스템은, 복수의 프로세싱 유닛들을 포함하는 프로세서와, 여기서 각각의 프로세싱 유닛은 온-칩 로컬 메모리를 포함하고; 상기 프로세싱 유닛들에 결합되어 복수의 입력 데이터 요소들을 저장하도록 구성된 오프-칩 공유 메모리와; 웨이브프런트 디스패치 모듈(wavefront dispatch module)과; 그리고 웨이브프런트 실행 모듈(wavefront execution module)을 포함한다. 웨이브프런트 디스패치 모듈은, 상기 복수의 프로세싱 유닛들 각각에서, 제 1 타입의 쓰레드를 포함하는 제 1 웨이브프런트를 론칭시키고 이후 제 2 타입의 쓰레드를 포함하는 제 2 웨이브프런트를 론칭시키도록 구성되고, 여기서 제 1 웨이브프런트는 오프-칩 공유 메모리로부터 데이터 요소들의 일부를 판독하도록 구성된다. 웨이브프런트 실행 모듈은, 제 1 출력을 각각의 프로세싱 유닛의 온-칩 로컬 메모리에 기입하도록 구성되고 아울러 제 2 웨이브프런트에 의해 발생된 제 2 출력을 온-칩 로컬 메모리에 기입하도록 구성되며, 여기서 제 2 웨이브프런트에 대한 입력은 제 1 출력으로부터의 제1의 복수의 데이터 요소들을 포함한다.
또 다른 실시예는 컴퓨터 판독가능 매체를 포함하는 유형의 컴퓨터 프로그램물이며, 컴퓨터 판독가능 매체에는 컴퓨터 프로그램 로직이 기록되어 있고, 컴퓨터 프로그램 로직은 복수의 프로세싱 유닛들을 포함하는 프로세서로 하여금, 상기 프로세싱 유닛들 각각에서, 제 1 타입의 쓰레드를 포함하는 제 1 웨이브프런트를 론칭시키고 이후 제 2 타입의 쓰레드를 포함하는 제 2 웨이브프런트를 론칭시키도록 하고, 여기서 제 1 웨이브프런트는 오프-칩 공유 메모리로부터 데이터 요소들의 일부를 입력으로서 판독하고, 그리고 제 1 출력을 발생시키며; 제 1 출력을 각각의 프로세싱 유닛의 온-칩 로컬 메모리에 기입하도록 하고; 그리고 제 2 웨이브프런트에 의해 발생된 제 2 출력을 온-칩 로컬 메모리에 기입하도록 하며, 여기서 제 2 웨이브프런트에 대한 입력은 제 1 출력으로부터의 제1의 복수의 데이터 요소들을 포함한다.
첨부되는 도면을 참조하여 본 발명의 추가 실시예, 특징 및 장점뿐만 아니라 본 발명의 다양한 실시예의 구조 및 동작이 아래에서 상세히 설명된다.
첨부되는 도면(본 명세서에 통합되어 본 명세서의 일부를 형성함)은, 앞서 제시된 일반적인 설명 및 아래에서 제시되는 실시예의 상세한 설명과 함께 본 발명의 실시예들을 예시하고, 본 발명의 원리를 설명하는 역할을 한다.
도 1은 본 발명의 실시예에 따른, 데이터 프로세싱 디바이스를 나타낸 도면이다.
도 2는 본 발명의 실시예에 따른, 복수의 프로세싱 유닛들을 구비한 프로세서에서 데이터를 프로세싱하는 예시적인 방법을 나타낸 도면이다.
도 3은 본 발명의 실시예에 따른, 복수의 프로세싱 유닛들을 구비한 프로세서에서 제 1 웨이브프런트를 실행시키는 예시적인 방법을 나타낸 도면이다.
도 4는 본 발명의 실시예에 따른, 복수의 프로세서들을 구비한 프로세서에서 제 2 웨이브프런트를 실행시키는 예시적인 방법을 나타낸 도면이다.
도 5는 본 발명의 실시예에 따른, 쓰레드 웨이브프런트들의 할당을 결정하는 방법을 나타낸 도면이다.
본 발명이 본 명세서에서 특정 애플리케이션들을 위한 예시적 실시예들로 설명되지만, 본 발명이 이러한 것에만 한정되는 것이 아님을 이해해야 한다. 본 명세서에서 제공되는 가르침에 접근할 수 있는 본 발명의 기술분야에서 숙련된 자들은, 본 발명의 범위 내에서 아울러 본 발명이 중요한 용도로 사용되는 다른 분야에서의 추가적인 수정예, 응용예, 및 실시예를 알 수 있을 것이다.
본 발명의 실시예들은, 복수의 프로세싱 유닛들이 공유 메모리에 동시에 액세스하는 임의의 컴퓨터 시스템 혹은 컴퓨팅 디바이스에서 사용될 수 있다. 예를 들어, 비한정적 의미로, 본 발명의 실시예들은, 컴퓨터, 게임 플랫폼(game platforms), 엔터테인먼트 플랫폼(entertainment platforms), PDA(Personal Digital Assistants), 모바일 컴퓨팅 디바이스(mobile computing devices), 텔레비젼, 및 비디오 플랫폼을 포함할 수 있다.
예를 들어 복수의 프로세서들을 구비하는 대부분의 현대 컴퓨터 시스템들은 멀티-프로세싱(multi-processing)을 수행할 수 있는바, 여기서 복수의 프로세서들은, 예를 들어, 복수의 중앙 처리 장치(Central Processing Unit, CPU)들, 그래픽 프로세서 유닛(Graphics Processor Unit, GPU)들, 및 다른 제어기들, 예컨대, 메모리 제어기들, 및/또는 다이렉트 메모리 액세스(Direct Memory Access, DMA) 제어기들과 같은 것을 포함하는데(하지만 이러한 것에만 한정되는 것은 아님), 이들은 프로세서로부터 프로세싱의 일부를 오프로드(offload)한다. 또한, 많은 그래픽 프로세싱 디바이스들에서는, 예를 들어, 복수의 데이터 스트림(data stream)들이 동시에 프로세싱되도록 함으로써 상당량의 병렬 프로세싱이 가능하게 된다.
이러한 멀티-프로세싱 및 병렬 프로세싱은, 시스템의 속도 및 효율을 크게 증가시키지만, 경합(즉, 다수의 디바이스들 및/또는 프로세스들이 동일 시스템 리소스들에 동시에 액세스하거나 사용하려는 것)으로 인한 문제를 포함하는 다수의 문제들을 일으킨다. 예를 들어, 많은 디바이스들 및/또는 프로세스들은 자신의 프로세싱을 수행하기 위해 공유 메모리에 액세스할 필요가 있다. 그러나, 공유 메모리에 대한 인터페이스의 개수가, 액세스를 위한 동시 요청 모두를 지원하기에 적합하지 않을 수 있기 때문에, 경합이 일어나고, 그리고 자신의 프로세싱을 계속하기 위해 공유 메모리에 대한 액세스를 요청하는 하나 이상의 시스템 디바이스들 및/또는 프로세스들은 지연될 수 있다.
그래픽 프로세싱 디바이스에서, 예를 들어, 버텍스 쉐이더, 지오메트릭 쉐이더 및 픽셀 쉐이더와 같은 다양한 타입의 프로세스들은, 메모리에 저장된 그래픽 오브젝트들(graphics object)(즉, 버텍스 데이터, 픽셀 데이터)을 판독, 기입, 조작 및/또는 프로세싱하기 위해 메모리에 대한 액세스를 요구한다. 예를 들어, 각각의 쉐이더는 자신의 프로세싱 싸이클의 입력 판독 스테이지 및 출력 기입 스테이지에서 공유 메모리에 액세스할 수 있다. 버텍스 쉐이더, 지오메트릭 쉐이더 및 픽셀 쉐이더를 포함하는 그래픽 파이프라인(graphics pipeline)은, 임의의 소정 시간에 서로 다른 프로세싱 스테이지들에서 쉐이더의 각각의 타입이 데이터 요소들의 세트들을 프로세싱하는 것이 동시에 일어나도록 함으로써, 메모리 액세스 지연들 중 일부 지연으로부터 시스템을 보호한다. 그래픽 파이프라인의 일부에서 메모리 내의 데이터 액세스시 지연의 증가가 일어나는 경우, 이것은 시스템 동작의 전체적인 속도 저하를 일으킬 수 있고, 그리고/또는 메모리 액세스 지연이 들어 나지 않도록 충분한 동시 프로세싱이 가능하게 하기 위한 파이프라인 제어를 더 복잡하게 할 수 있다.
각각의 유닛이 다수의 쓰레드들을 동시에 실행시킬 수 있는 복수의 프로세싱 유닛들, 예를 들어, 복수의 단일 명령 다중 데이터(Single Istruction Multiple Data, SIMD) 프로세싱 유닛들 혹은 복수의 다른 산술 및 로직 유닛(Arithmetic and Logic Unit, ALU)을 가진 디바이스들에서, 공유 메모리에 실질적으로 동시에 액세스하는 복수의 프로세싱 디바이스들과 각각의 프로세싱 디바이스에서의 복수의 쓰레드들로 인해, 경합 지연은 악화될 수 있다. 예를 들어, 복수의 SIMD 프로세싱 유닛들을 갖는 그래픽 프로세싱 디바이스들에서, 픽셀 데이터의 세트는 "쓰레드 그룹들"의 시퀀스에 의해 프로세싱된다. 각각의 프로세싱 유닛에는 쓰레드들의 웨이브프런트가 할당된다. 쓰레드들의 "웨이브프런트"는 쓰레드 그룹 중 하나 이상의 쓰레드들이다. 웨이브프런트 내에서의 쓰레드들에 의한 동시 액세스 요청들로 인해, 뿐만 아니라 다른 프로세싱 유닛들에서 실행되는 다른 웨이브프런트들로 인해, 메모리 액세스를 위한 경합이 증가할 수 있다.
본 발명의 실시예들은 각각의 프로세싱 유닛들에 국한되는 온-칩 메모리를 사용하여, 후속 쓰레드들에 의한 입력들로서 사용될 다양한 쓰레드들의 출력들을 저장하고, 그럼으로써 오프-칩 메모리에 대한 트래픽(traffic)을 감소시킬 수 있다. 온-칩 로컬 메모리는, 비용 및 칩 레이아웃(chip layout)을 포함하는 여러 가지 이유로 인해, 오프-칩 공유 메모리에 비해 크기가 작다. 따라서, 온-칩 로컬 메모리의 효율적 사용이 필요하다. 본 발명의 실시예들은 프로세서로 하여금, 다양한 인자들(예를 들어, 각각의 프로세싱 유닛들에서 프로세싱되는 데이터 요소들 및 각각의 프로세싱 유닛에서의 온-칩 로컬 메모리의 이용가능성과 같은 것)에 근거하여 복수의 프로세싱 유닛들 간에 각각의 쓰레드 웨이브들(thread waves)을 배분하도록 한다. 본 발명의 실시예들은, 프로세싱 유닛에서 실행되는 연속적인 쓰레드들이, 오프-칩 메모리가 아닌, 온-칩 메모리로부터 그들의 입력을 판독하게 하고 온-칩 로컬 메모리에 그들의 출력을 기입하게 할 수 있다. 프로세싱 유닛들의 오프-칩 메모리에 대한 트래픽을 감소시킴으로써, 본 발명의 실시예들은 시스템의 속도 및 효율을 향상시키며, 더 짧은 파이프라인이 가능하게 함으로써 시스템 복잡도를 감소시킬 수 있다.
도 1은 본 발명의 실시예에 따른 컴퓨터 시스템(100)을 예시한다. 컴퓨터 시스템(100)은 제어 프로세서(101), 그래픽 프로세싱 디바이스(102), 공유 메모리(103), 및 통신 기반구조(104)를 포함한다. 다양한 다른 컴포넌트들, 예를 들어, 디스플레이, 메모리 제어기들, 디바이스 제어기들, 등과 같은 것이 컴퓨터 시스템(100) 내에 또한, 포함될 수 있다. 제어 프로세서(101)는 중앙 처리 장치(CPU), 현장 프로그래밍가능 게이트 어레이(Field Programmable Gate Arrays, FPGA), 애플리케이션 특정 집적 회로(Application Specific Integrated Circuit, ASIC), 디지털 신호 프로세서(Digital Signal Processor, DSP) 등과 같은 하나 이상의 프로세서들을 포함할 수 있다. 제어 프로세서(101)는 컴퓨터 시스템(100)의 전체 동작을 제어한다.
공유 메모리(103)는, 예를 들어, 랜덤 액세스 메모리(Random Access Memory, RAM) 혹은 동적 랜덤 액세스 메모리(Dynamic Random Access Memory, DRAM)와 같은 하나 이상의 메모리 유닛들을 포함할 수 있다. (때때로 제어 데이터를 포함하는) 디스플레이 데이터, 특히 픽셀 데이터가 공유 메모리(103)에 저장된다. 본 명세서에서와 같은 그래픽 프로세싱 디바이스에 있어서, 공유 메모리(103)는, 프레임과 관련된 데이터가 유지되는 곳인 프레임 버퍼 영역(frame buffer area)을 포함할 수 있다. 공유 메모리(103)에 대한 액세스는 하나 이상의 메모리 제어기들(미도시)에 의해 조정될 수 있다. 비디오 재생 디바이스와 같은 외부 디바이스를 사용하여 컴퓨터 시스템(100)에 입력되거나 혹은 컴퓨터 시스템(100) 내에서 발생되는 디스플레이 데이터는 공유 메모리(103)에 저장될 수 있다. 공유 메모리(103)에 저장되는 디스플레이 데이터는, 이 데이터를 조작 및/또는 프로세싱하는 그래픽 프로세싱 디바이스(102)의 컴포넌트들에 액세스되고, 이후 그 조작 및/또는 프로세싱된 디스플레이 데이터는 예를 들어, 디스플레이(미도시)와 같은 또 다른 디바이스에 전송된다. 디스플레이는, 액정 디스플레이(Liquid Crystal Display, LCD), 음극선관(Cathode Ray Tube, CRT) 디스플레이, 혹은 임의의 다른 타입의 디바이스를 포함할 수 있다. 본 발명의 일부 실시예들에서, 디스플레이 및 디스플레이를 위해 필요한 컴포넌트들(예를 들어, 디스플레이 제어기와 같은 것)의 일부는 컴퓨터 시스템(100) 외부에 있을 수 있다. 통신 기반구조(104)는 하나 이상의 디바이스 상호연결들, 예를 들어, 주변 장치 상호연결 확장형(Peripheral Component Interconnect Extended, PCI-E), 이더넷(Ethernet), 파이어와이어(Firewire), 범용 직렬 버스(Universal Serial Bus, USB) 등과 같은 것을 포함한다. 통신 기반구조(101)는 또한, 그래픽 프로세싱 디바이스(102)를 디스플레이에 연결시키기 위한 하나 이상의 데이터 전송 표준들을 포함할 수 있는바, 이러한 데이터 전송 표준들은 예를 들어, 임베디드 디스플레이포트(embedded DisplayPort, eDP), 저전압 디스플레이 표준(Low Voltage Display Standard, LVDS), 디지털 비디오 인터페이스(Digital Video Interface, DVI), 혹은 고선명 멀티미디어 인터페이스(High Definition Multimedia Interface, HDMI)와 같은 것이다(하지만 이러한 것에만 한정되는 것은 아님).
본 발명의 실시예에 따른, 그래픽 프로세싱 디바이스(102)는 복수의 프로세싱 유닛들을 포함하며, 각각의 프로세싱 유닛은 자기 자신의 로컬 메모리 저장소(예컨대, 온-칩 로컬 메모리)를 갖는다. 그래픽 프로세싱 디바이스(102)는 또한, 메모리(103)에 대한 트래픽이 상당량 감소되도록, 병렬 실행 쓰레드 시퀀스들을 복수의 프로세싱 유닛들에 배치하는 로직을 포함한다. 본 발명의 실시예에 따른, 그래픽 프로세싱 디바이스(102)은, 그래픽 프로세싱 유닛(Graphics Processing Unit, GPU), 범용 그래픽 프로세싱 유닛(General Purpose Graphics Processing Unit, GPGPU), 혹은 다른 프로세싱 디바이스일 수 있다. 본 발명의 실시예에 따른, 그래픽 프로세싱 디바이스(102)는, 커맨드 프로세서(105), 쉐이더 코어(shader core)(106), 버텍스 그룹화기 및 테셀레이터(Vertex Grouper and Tesselator, VGT)(107), 시퀀서(sequencer)(SQ)(108), 쉐이더 파이프라인 보간기(Shader Pipeline Interpolator, SPI)(109), 파라미터 캐시(parameter cache)(110)(이것은 또한 쉐이더 익스포트(shader export)(SX)로서 지칭됨), 그래픽 프로세싱 디바이스 내부 상호연결(113), 웨이브프런트 디스패치 모듈(130), 및 웨이브프런트 실행 모듈(132)을 포함한다. 다른 컴포넌트들, 예를 들어, 스캔 컨버터(scan converters), 메모리 캐시(memory caches), 프리미티브 어셈블러(primitive assemblers), (쉐이더 코어(106) 내에서 실행되는 프로세스들에 의한 공유 메모리(103) 액세스를 조정하는) 메모리 제어기, (쉐이더 코어(106)에 의해 프로세싱된 데이터의 렌더링 및 디스플레이를 조정하는) 디스플레이 제어기와 같은 것이, 비록 도 1에 도시되지는 않았지만, 그래픽 프로세싱 디바이스(102) 내에 포함될 수 있다.
커맨드 프로세서(105)는 그래픽 프로세싱 디바이스(102)에서의 실행을 위한 명령들을 제어 프로세서(101)로부터 수신할 수 있다. 커맨드 프로세서(105)는, 제어 프로세서(101)로부터 수신된 커맨드들을 해석함과 아울러 적절한 명령들을 컴포넌트들(106, 107, 108, 및 109)과 같은 그래픽 프로세싱 디바이스(102)의 실행 컴포넌트들에 발행하도록 동작한다. 예를 들어, 특정 이미지를 디스플레이 상에 렌더링하기 위한 명령을 수신하는 경우, 커맨드 프로세서(103)는 컴포넌트들(106, 107, 108, 및 109)로 하여금 그 이미지를 렌더링하도록 하는 하나 이상의 명령들을 발행한다. 일 실시예에서, 커맨드 프로세서는, 이미지 렌더링을 위해서 버텍스들의 세트를 프로세싱하기 위해, 쓰레드 그룹들의 시퀀스(예를 들어, 버텍스 쉐이더들, 지오메트릭 쉐이더들, 및 픽셀 쉐이더들을 포함하는 시퀀스)를 개시시키기 위한 명령들을 발행할 수 있다. 예를 들어, 시스템 메모리(103)로부터의 버텍스 데이터는 프로세싱 유닛들에 의해 액세스가능한 범용 레지스터들에 전달될 수 있고, 그 다음에, 버텍스 데이터는 쉐이더 코어(106)에서 쉐이더들의 시퀀스를 사용하여 프로세싱될 수 있다.
쉐이더 코어(106)는 쉐이더 프로그램들(예를 들어, 버텍스 쉐이더들, 지오메트릭 쉐이더들, 및 픽셀 쉐이더들) 및 다른 연산 집약적인 프로그램들(compute intensive programs)과 같은 명령들을 실행시키도록 구성된 복수의 프로세싱 유닛들을 포함한다. 쉐이더 코어(106) 내의 각각의 프로세싱 유닛(112)은, 웨이브프런트로서 알려진 복수의 쓰레드들을 동시에 실행시키도록 구성된다. 웨이브프런트의 최대 크기는 변경가능하다. 각각의 프로세싱 유닛(112)은 온-칩 로컬 메모리(113)에 결합된다. 온-칩 로컬 메모리는, 정적 랜덤 액세스 메모리(Static Random Access Memory, SRAM) 및 임베디드 동적 랜덤 액세스 메모리(Eembedded Dynamic Random Access Memory, EDRAM)와 같은 임의 타입의 동적 메모리일 수 있고, 그 크기 및 성능은 다양한 비용 및 성능 고려사항들에 근거하여 결정될 수 있다. 일 실시예에서, 각각의 프로세싱 유닛(113)은 각각의 프로세싱 유닛의 전용 메모리로서 구성된다. 본 발명의 실시예에 따르면, 각각의 프로세싱 유닛 내에서 실행되는 쓰레드들만이 온-칩 로컬 메모리에 액세스하기 때문에, 프로세싱 유닛 내에서 실행되는 쓰레드에 의한 온-칩 로컬 메모리 액세스는 상당히 적은 경합을 갖는다.
VGT(107)는 다음과 같은 주된 태스크(task)들을 수행하는바, 즉, VGT(107)는 메모리로부터 버텍스 인덱스들(vertex indices)을 패치(fetch)하고, 어떤 버텍스들이 이미 프로세싱되었고 따라서 프로세싱될 필요가 없는지를 결정하는 것과 같은 버텍스 인덱스 재사용 결정을 수행하고, 콰드 프리미티브들(quad primitives) 및 폴리곤 프리미티브들(polygon primitives)을 트라이앵글 프리미티브들(triangle primitives)로 변환하고, 그리고 프리미티브 테셀레이션(primitive tessellation)을 위해 테셀레이션 팩터들(tessellation factors)을 계산한다. 본 발명의 실시예들에서, VGT는 또한, 각각의 웨이브프런트들의 각각의 쓰레드에 대한 온-칩 로컬 메모리에서의 오프셋(offset)들을 제공할 수 있으며, 다양한 쉐이더들로부터 출력된 각각의 버텍스 및/또는 프리미티브가 어느 온-칩 로컬 메모리에 위치하는지를 추적할 수 있다.
SQ(108)는 VGT(107)로부터 버텍스 벡터 데이터(vertex vector data)를 수신하고 스캔 컨버터로부터 픽셀 벡터 데이터(pixel vector data)를 수신한다. SQ(108)는, SPI(109), 쉐이더 코어(106), 및 쉐이더 익스포트(110)에 대한 1차 제어기이다. SQ(108)는, 버텍스 벡터 및 픽셀 벡터 연산, 버텍스 및 픽셀 쉐이더 입력 데이터 관리, 익스포트 리소스들(export resources)에 대한 메모리 할당, 복수의 SIMD들 및 리소스 타입들에 대한 쓰레드 중재(thread arbitration), 쉐이더 프로세서들에 대한 제어 흐름 및 ALU 실행, 쉐이더 및 콘스탄트 어드레싱(shader and constant addressing), 그리고 다른 제어 기능들을 관리한다.
SPI(109)는, 입력 데이터를 결정하여 쉐이더 코어(106) 내의 프로세싱 유닛들에 로딩하기 위한 입력 스테이징 저장 및 사전프로세싱 로직(input staging storage and preprocessing logic)을 포함한다. 픽셀당 데이터를 생성하기 위해, 일련의 보간기들이, 예를 들어, 본 발명의 기술분야에서 알려진 방식으로 픽셀 쉐이더들에 대한 픽셀당 데이터를 생성하기 위한 스캔 컨버터의 제공된 무게중심 좌표(barycentric coordinates)로 프리미티브당 버텍스 데이터를 보간한다. 본 발명의 실시예들에서, SPI는 또한, 웨이브프런트들의 크기를 결정할 수 있고, 그리고 각각의 웨이브프런트가 실행을 위해 어디로 디스패치될지를 결정할 수 있다.
SX(110)는 버텍스 파라미터들을 포함하는 데이터를 보유하기 위한 온-칩 버퍼이다. 일 실시예에 따르면, 버텍스 쉐이더들 및/또는 픽셀 쉐이더들의 출력은, 프레임 버퍼 혹은 다른 오프-칩 메모리로 익스포트되기 전에 SX에 저장될 수 있다.
본 발명의 실시예에 따른, 웨이브프런트 디스패치 모듈(130)은, 쓰레드들의 웨이브프런트들의 시퀀스들을 프로세싱 유닛들(112)에 할당하도록 구성된다. 웨이브프런트 디스패치 모듈(130)은, 예를 들어, 각각의 프로세싱 유닛의 로컬 메모리 내에서 이용가능한 메모리, 각각의 프로세싱 유닛으로 디스패치될 쓰레드 웨이브프런트들의 시퀀스, 그리고 각각의 프로세싱 유닛으로 디스패치된 웨이브프런트의 크기를 결정하는 로직을 포함할 수 있다.
본 발명의 실시예에 따른, 웨이브프런트 실행 모듈(132)은, 복수의 프로세싱 유닛들(112) 내에서 각각의 웨이브프런트의 로직을 실행시키도록 구성된다. 웨이브프런트 실행 모듈(132)은, 예를 들어, 버텍스 쉐이더들, 지오메트릭 쉐이더들, 및 픽셀 쉐이더들의 서로 다른 웨이브프런트들을 프로세싱 유닛들(112) 내에서 실행시킴과 아울러 각각의 온-칩 로컬 메모리(113) 내에 쉐이더들 각각으로부터의 중간 결과들을 저장하여 그래픽 프로세싱 파이프라인의 전체 프로세싱 속도를 높이는 로직을 포함할 수 있다.
데이터 증폭 모듈(133)은, 입력 데이터보다 큰 출력 데이터 요소 세트를 생성하기 위해 입력 데이터 요소들을 증폭 혹은 감폭하는 로직을 포함한다. 일 실시예에 따르면, 데이터 증폭 모듈(133)은 지오메트릭 증폭을 위한 로직을 포함한다. 데이터 증폭은, 일반적으로, 상대적으로 단순한 입력 데이터 세트들로부터 복합적인 데이터 세트들을 발생시키는 것을 말한다. 데이터 증폭은, 입력 데이터 세트보다 더 많은 개수, 혹은 더 적은 개수, 혹은 동일한 개수의 데이터 요소들을 갖는 출력 데이터 세트가 생성되게 할 수 있다.
일 실시예에 따른, 쉐이더 프로그램들(134)은, 제 1 쉐이더 프로그램, 제 2 쉐이더 프로그램, 및 제 3 쉐이더 프로그램을 포함한다. 프로세싱 유닛들(112)은, 각각의 웨이브프런트가 제 1 쉐이더 프로그램, 제 2 쉐이더 프로그램, 및 제 3 쉐이더 프로그램을 복수 개 포함하고 있는 웨이브프런트들의 시퀀스들을 실행시킨다. 본 발명의 실시예에 따르면, 제 1 쉐이더 프로그램은 버텍스 쉐이더를 포함하고, 제 2 쉐이더 프로그램은 지오메트릭 쉐이더(Geometry Shader, GS)를 포함하고, 그리고 제 3 쉐이더 프로그램은 픽셀 쉐이더, 컴퓨트 쉐이더(compute shader), 등을 포함한다.
버텍스 쉐이더들(Vertex Shaders, VS)은 버텍스들을 판독하고, 이들을 프로세싱하며, 그 결과를 메모리에 출력한다. 이것은 새로운 프리미티브들을 도입하지 않는다. GS가 활성화될 때, 버텍스 쉐이더는 일 타입의 익스포트 쉐이더(Export Shader, ES)로서 지칭될 수 있다. 버텍스 쉐이더는 페치 서브루틴(Fetch Subroutine, FS)을 호출할 수 있고, 페치 서브루틴(FS)은, 버텍스 프로그램의 일부로서, 실행 목적으로, 취급되는 버텍스 데이터를 페치하기 위한 특별한 글로벌 프로그램(global program)이다. 종래 시스템에서, VS 출력은, 지오메트릭 쉐이더(GS)의 활성화 여부에 따라, 시스템 메모리 내의 버퍼로 향하게 되거나 혹은 파라미터 캐시 및 포지션 버퍼(position buffer)로 향하게 된다. 본 발명의 실시예들에서, VS의 출력은 GS가 실행되고 있는 프로세싱 유닛의 온-칩 로컬 메모리로 향하게 된다.
지오메트릭 쉐이더들(GS)은 전형적으로 VS 출력으로부터 프리미티브들을 판독하고, 그리고 각각의 입력 프리미티브에 대해 하나 이상의 프리미티브들을 출력으로서 기입한다. GS가 활성화될 때, 종래 시스템들에서, GS는 다이렉트 메모리 액세스(DMA) 카피 프로그램이 오프-칩 시스템 메모리에 대한 판독/기입을 위해 활성화될 것을 요구한다. 종래 시스템들에서, GS는 VS에 의해 생성된 오프-칩 메모리 버퍼로부터의 복수의 버텍스들을 동시에 판독할 수 있고, 가변수의 프리미티브들을 제 2 메모리 버퍼에 출력한다. 본 발명의 실시예들에 따르면, GS는 입력을 판독하여 출력을 GS가 실행되고 있는 프로세싱 유닛의 온-칩 로컬 메모리에 기입하도록 구성된다.
종래 시스템들에서, 픽셀 쉐이더(Pixel Shader, PS) 혹은 프래그먼트 쉐이더(Fragment Shader)는, 예를 들어, 파라미터 캐시, 파라미터 캐시와 관련된 포지션 버퍼들, 시스템 메모리, 및 VGT를 포함하는 다양한 위치들로부터 입력을 판독한다. PS는 개개의 픽셀 콰드들(2x2 어레이로 정렬된 4개의 픽셀-데이터 요소들)을 프로세싱하고, 그리고 하나 이상의 프레임 버퍼들을 포함할 수 있는 하나 이상의 메모리 버퍼들에 출력을 기입한다. 본 발명의 실시예들에서, PS는, GS가 실행되는 프로세싱 유닛의 온-칩 로컬 메모리 내에서 GS에 의해 생성 및 저장된 데이터를 입력으로서 판독하도록 구성된다.
모듈들(130-134)을 특정하는 프로세싱 로직은 C, C++, 혹은 어셈블리(Assembly)와 같은 프로그래밍 언어를 사용하여 구현될 수 있다. 또 다른 실시예에서, 모듈들(130-134) 중 하나 이상의 모듈의 로직 명령들은, 본 명세서에서 설명되는 바와 같은 본 발명의 실시형태들을 구현하는 하드웨어 디바이스들을 발생시키기 위해서 마스크워크(maskworks)/포토마스크(photomasks)의 생성을 통해 제조 공정을 궁극적으로 구성할 수 있도록 하는, 베리로그(Verilog), RTL, 넷리스트(netlists)와 같은 하드웨어 기술 언어(Hardware Description Language)로 특정될 수 있다. 이러한 프로세싱 로직 및/또는 로직 명령들은, 자기 디스크, 광학 디스크(예를 들어, CD-ROM, DVD-ROM과 같은 것), 플래시 디스크, 등을 포함하는 임의의 알려진 컴퓨터 판독가능 매체에 수록될 수 있다.
도 2는 본 발명의 실시예에 따른, 복수의 프로세싱 유닛들을 포함하는 프로세서에서의 데이터 프로세싱을 나타내는 흐름도(200)이다. 본 발명의 실시예들에 따르면, 데이터는 쓰레드 웨이브프런트들의 시퀀스에 의해 프로세싱되는바, 여기서 쓰레드들의 시퀀스에 대한 입력은 오프-칩 메모리 시스템 메모리로부터 판독되고, 쓰레드들의 시퀀스의 출력도 오프-칩 메모리에 저장되지만, 중간 결과들은 각각의 프로세싱 유닛들과 관련된 온-칩 로컬 메모리들에 저장된다.
단계(202)에서는, 각각의 프로세싱 유닛에서 프로세싱될 수 있는 입력 데이터 요소들의 개수가 결정된다. 일 실시예에 따르면, 입력 데이터의 프로세싱을 위해 요구되는 메모리의 크기를 결정하기 위해 입력 데이터 및 쉐이더 프로그램들이 분석된다. 예를 들어, 쓰레드의 각각의 제 1 타입(예를 들어, 버텍스 쉐이더)의 출력의 크기 및 쓰레드의 각각의 제 2 타입(예를 들어, 지오메트릭 쉐이더)의 출력의 크기가 결정될 수 있다. 입력 데이터 요소들은, 예를 들어, 이미지 렌더링에서 사용될 버텍스 데이터일 수 있다. 일 실시예에 따르면, 버텍스 쉐이더 프로세싱은 새로운 데이터 요소들을 생성하지 않으며, 따라서 버텍스 쉐이더의 출력은 실질적으로 입력과 동일한 크기를 갖는다. 일 실시예에 따르면, 지오메트릭 쉐이더는 지오메트릭 증폭을 수행할 수 있고, 이에 따라 입력 데이터 요소들이 증배되어 실질적으로 입력보다 크기가 더 큰 출력이 생성되게 된다. 지오메트릭 증폭은 또한, 실질적으로 입력보다 더 작은 크기를 갖는 출력이 생성되게 하거나 혹은 실질적으로 입력과 동일한 크기를 갖는 출력이 생성되게 할 수 있다. 일 실시예에 따르면, VGT는 각각의 입력 버텍스에 대해 얼마나 많은 출력 버텍스들이 GS에 의해 발생되는지를 결정한다. 복수의 프로세싱 유닛들 각각에서 프로세싱될 수 있는 입력 버텍스 데이터의 최대양은, 제 1 타입 및 제 2 타입의 복수의 쓰레드들의 출력들을 저장하기 위해 요구되는 메모리 및 온-칩 로컬 메모리의 크기에 적어도 부분적으로 근거하여, 결정될 수 있다.
단계(204)에서, 웨이브프런트들이 구성된다. 일 실시예에 따르면, 각각의 프로세싱 유닛의 온-칩 로컬 메모리 내에 제 1 타입 및 제 2 타입의 쓰레드들의 출력들을 저장하기 위한 메모리 요건들에 근거하여, 쓰레드의 각각의 타입의 쓰레드의 최대양이 결정될 수 있다. 예를 들어, 복수의 입력 데이터 요소들을 프로세싱하기 위한 버텍스 쉐이더 쓰레드들, 지오메트릭 쉐이더 쓰레드들, 및 픽셀 쉐이더 쓰레드들의 최대 개수가, 단계(202)에서 결정된 메모리 요건들에 근거하여 결정될 수 있다. 일 실시예에 따르면, SPI는 프로세싱을 위해 어떤 버텍스들(및 이에 따른, 어떤 쓰레드들)이 어느 프로세싱 유닛들에 할당될지를 결정한다.
단계(206)에서, 각각의 제 1 웨이브프런트들은 프로세싱 유닛들에 디스패치된다. 제 1 웨이브프런트는 제 1 타입의 쓰레드들을 포함한다. 일 실시예에 따르면, 제 1 웨이브프런트는 복수의 버텍스 쉐이더들을 포함한다. 각각의 제 1 웨이브프런트에는 온-칩 로컬 메모리에 출력을 기입하기 위한 베이스 어드레스(base address)가 제공된다. 일 실시예에 따르면, SPI는 각각의 제 1 웨이브프런트에 대한 베이스 어드레스를 SQ에 제공한다. 일 실시예에서, VGT 혹은 다른 로직 컴포넌트는, 온-칩 로컬 메모리에서 판독 혹은 기입을 행하기 위한 오프셋들을 웨이브프런트에서의 각각의 쓰레드에 제공할 수 있다.
단계(208)에서, 제 1 웨이브프런트들 각각은 오프-칩 메모리로부터 입력을 판독한다. 일 실시예에 따르면, 각각의 제 1 웨이브프런트는, 프로세싱될 데이터(예를 들어, 버텍스들과 같은 것)를 검색하기 위해 메모리 제어기를 통해 시스템 메모리에 액세스한다. 각각의 제 1 웨이브프런트에 의해 프로세싱될 버텍스들은 사전에 식별될 수 있고, 그리고 해당 데이터의 메모리 내에서의 어드레스는 예를 들어 VGT 내에서 각각의 제 1 웨이브프런트들에 제공될 수 있다. 시스템 메모리에 대한 액세스 및 시스템 메모리로부터 데이터 요소들의 판독은, 앞서 설명된 경합 문제로 인해, 상대적으로 많은 수의 클럭 싸이클들을 소비할 수 있다. 각각의 제 1 웨이브프런트 내의 각각의 쓰레드는, 온-칩 로컬 메모리로부터 자신의 입력 버텍스들을 판독하기 위한 베이스 어드레스를 결정한다. 각각의 쓰레드에 대한 각각의 베이스 어드레스는, 예를 들어, 각각의 웨이브프런트 내에서 쓰레드를 식별시키는 순차적 쓰레드 식별자, 하나의 쓰레드를 위한 입력에 의해 점유된 메모리 공간을 나타내는 스텝 크기(step size), 및 해당하는 제 1 웨이브프런트에 할당된 입력 버텍스들의 블록에 대한 베이스 어드레스들에 근거하여 계산될 수 있다.
단계(210)에서, 제 1 웨이브프런트들 각각은 각각의 프로세싱 유닛에서 실행된다. 일 실시예에 따르면, 단계(210)에서, 버텍스 쉐이더 프로세싱이 일어난다. 단계(210)에서, 제 1 웨이브프런트에서의 각각의 쓰레드는 온-칩 로컬 메모리에서의 자신의 베이스 출력 어드레스를 계산할 수 있다. 각각의 쓰레드에 대한 베이스 출력 어드레스는, 예를 들어, 각각의 웨이브프런트 내에서 쓰레드를 식별시키는 순차적 쓰레드 식별자, 각각의 웨이브프런트에 대한 베이스 출력 어드레스, 및 각각의 쓰레드를 위한 메모리 공간을 나타내는 스텝 크기에 근거하여 계산될 수 있다. 또 다른 실시예에서, 제 1 웨이브프런트에서의 각각의 쓰레드는 자신의 출력 베이스 어드레스를, 대응하는 제 1 웨이브프런트에 대한 베이스 출력 어드레스와, 그리고 쓰레드가 디스패치될 때 제공되는 오프셋에 근거하여 계산할 수 있다.
단계(212)에서, 제 1 웨이브프런트들 각각의 출력은 각각의 온-칩 로컬 메모리에 기입된다. 일 실시예에 따르면, 각각의 제 1 웨이브프런트에서의 쓰레드들 각각의 출력은 각각의 온-칩 로컬 메모리에 기입된다. 웨이브프런트에서의 각각의 쓰레드는, 자신의 출력을 단계(210)에서 결정된 각각의 출력 어드레스에 기입할 수 있다.
단계(214)에서, 각각의 제 1 웨이브프런트들의 완료가 결정된다. 일 실시예에 따르면, 제 1 웨이브프런트에서의 각각의 쓰레드는, 쓰레드의 프로세싱 완료를 시스템의 하나 이상의 다른 컴포넌트들에게 표시하기 위해, 온-칩 로컬 메모리, 시스템 메모리, 범용 레지스터에서 플래그(flag)를 세팅(setting)할 수 있거나, 임의의 다른 방식으로 신호를 어써트(assert)할 수 있다. 제 1 웨이브프런트들에 의한 프로세싱의 완료를 표시하는 플래그 및/또는 신호는, 제 1 웨이브프런트의 다른 쓰레드 웨이브프런트들로의 출력에 대한 액세스를 제공하기 위해, 시스템의 컴포넌트들에 의해 모니터링될 수 있다.
단계(216)에서, 제 2 웨이브프런트가 디스패치된다. 비록 도 2에서 단계(216)는 단계(214) 다음에 있지만, 다른 실시예들에서, 단계(216)는 단계(214) 이전에 수행될 수 있음에 유의해야 한다. 예를 들어, 프로세싱 유닛에서 쓰레드 웨이브프런트들을 파이프라인잉 할 때, 쓰레드 웨이브프런트들은 하나 이상의 사전에 디스패치된 웨이브프런트들의 완료 이전에 디스패치된다. 제 2 웨이브프런트는 제 2 타입의 쓰레드들을 포함한다. 일 실시예에 따르면, 제 2 웨이브프런트는 복수의 지오메트릭 쉐이더 쓰레드들을 포함한다. 각각의 제 2 웨이브프런트에는, 온-칩 로컬 메모리로부터 자신의 입력을 판독하기 위한 베이스 어드레스와, 그리고 온-칩 로컬 메모리에 자신의 출력을 기입하기 위한 베이스 어드레스가 제공된다. 일 실시예에 따르면, 각각의 제 2 웨이브프런트에 대해, SPI는, 입력의 판독 및 출력의 기입을 각각 행하기 위한 로컬 메모리에서의 베이스 어드레스들을 SQ에 제공한다. SPI는 또한 각각의 쓰레드 웨이브프런트의 웨이브 식별자를 추적할 수 있고, 해당하는 프로세싱 유닛에 이미 할당된 제 1 웨이브프런트들 및 데이터의 요건들에 따라, 각각의 제 2 웨이브프런트들이 프로세싱 유닛들에 할당되도록 보장할 수 있다. VGT는, 버텍스들과, 그리고 각각의 버텍스들이 할당된 프로세싱 유닛들을 추적할 수 있다. VGT는 또한 버텍스들 간의 연결들을 추적할 수 있어, 지오메트릭 쉐이더 쓰레드들에는 그 각각의 프리미티브들에 대응하는 모든 버텍스들이 제공될 수 있게 된다.
단계(218)에서, 제 2 웨이브프런트 쓰레드 각각은 온-칩 로컬 메모리로부터 자신의 입력을 판독한다. 각각의 프로세싱 유닛들에 국한되는 온-칩 메모리에 대한 액세스는 시스템 메모리에 대한 액세스보다 상대적으로 빠르다. 각각의 제 2 웨이브프런트 내에서의 각각의 타입은 온-칩 로컬 메모리로부터 입력 데이터를 판독하기 위한 베이스 어드레스를 결정한다. 각각의 쓰레드에 대한 각각의 베이스 어드레스들은, 예를 들어, 각각의 웨이브프런트 내에서 쓰레드를 식별시키는 순차적 쓰레드 식별자, 하나의 쓰레드를 위한 입력에 의해 점유된 메모리 공간을 나타내는 스텝 크기, 및 해당하는 제 2 웨이브프런트에 할당된 입력 버텍스들의 블록에 대한 베이스 어드레스에 근거하여 계산될 수 있다.
단계(220)에서, 제 2 웨이브프런트들 각각은 각각의 프로세싱 유닛에서 실행된다. 일 실시예에 따르면, 단계(220)에서, 지오메트릭 쉐이더 프로세싱이 일어난다. 단계(220)에서, 제 2 웨이브프런트에서의 각각의 쓰레드는 온-칩 로컬 메모리에서의 자신의 베이스 출력 어드레스를 계산할 수 있다. 각각의 쓰레드에 대한 베이스 출력 어드레스는, 예를 들어, 각각의 웨이브프런트 내에서 쓰레드를 식별시키는 순차적 쓰레드 식별자, 각각의 웨이브프런트에 대한 베이스 출력 어드레스, 및 각각의 쓰레드를 위한 메모리 공간을 나타내는 스텝 크기에 근거하여 계산될 수 있다. 또 다른 실시예에서, 제 2 웨이브프런트에서의 각각의 쓰레드는 자신의 출력 베이스 어드레스를, 대응하는 제 2 웨이브프런트에 대한 베이스 출력 어드레스와, 그리고 쓰레드가 디스패치될 때 제공되는 오프셋에 근거하여 계산할 수 있다.
단계(222)에서, 제 2 웨이브프런트들의 쓰레드들 각각에 의해 판독된 입력 데이터 요소들은 증폭된다. 일 실시예에 따르면, 지오메트릭 쉐이더 쓰레드들 각각은 지오메트릭 증폭을 일으키는 프로세싱을 수행한다.
단계(224)에서, 제 2 웨이브프런트들 각각의 출력은 각각의 온-칩 로컬 메모리에 기입된다. 일 실시예에 따르면, 각각의 제 2 웨이브프런트에서의 쓰레드들 각각의 출력은 각각의 온-칩 로컬 메모리에 기입된다. 웨이브프런트에서의 각각의 쓰레드는, 자신의 출력을 단계(216)에서 결정된 각각의 출력 어드레스에 기입할 수 있다.
단계(226)에서, 각각의 제 2 웨이브프런트들의 완료가 결정된다. 일 실시예에 따르면, 제 2 웨이브프런트에서의 각각의 쓰레드는, 쓰레드의 프로세싱 완료를 시스템의 하나 이상의 다른 컴포넌트들에게 표시하기 위해, 온-칩 로컬 메모리, 시스템 메모리, 범용 레지스터에서 플래그를 세팅할 수 있거나, 임의의 다른 방식으로 신호를 어써트할 수 있다. 제 2 웨이브프런트들에 의한 프로세싱의 완료를 표시하는 플래그 및/또는 신호는, 제 2 웨이브프런트의 다른 쓰레드 웨이브프런트들로의 출력에 대한 액세스를 제공하기 위해, 시스템의 컴포넌트들에 의해 모니터링될 수 있다. 제 2 웨이브프런트의 완료시, 일 실시예에서, 대응하는 제 1 웨이브프런트의 출력에 의해 점유된 온-칩 로컬 메모리는 할당해제되어 이용가능하게 될 수 있다.
단계(228)에서, 제 3 웨이브프런트가 디스패치된다. 제 3 웨이브프런트는 제 3 타입의 쓰레드들을 포함한다. 일 실시예에 따르면, 제 3 웨이브프런트는 복수의 픽셀 쉐이더 쓰레드들을 포함한다. 각각의 제 3 웨이브프런트에는, 온-칩 로컬 메모리로부터 자신의 입력을 판독하기 위한 베이스 어드레스가 제공된다. 일 실시예에 따르면, 각각의 제 3 웨이브프런트에 대해, SPI는, 입력의 판독 및 출력의 기입을 각각 행하기 위한 로컬 메모리에서의 베이스 어드레스들을 SQ에 제공한다. SPI는 또한 각각의 쓰레드 웨이브프런트의 웨이브 식별자를 추적할 수 있고, 해당하는 프로세싱 유닛에 이미 할당된 제 3 웨이브프런트들 및 데이터의 요건들에 따라, 각각의 제 3 웨이브프런트들이 프로세싱 유닛들에 할당되도록 보장할 수 있다.
단계(230)에서, 제 3 웨이브프런트 쓰레드들 각각은 온-칩 로컬 메모리로부터 자신의 입력을 판독한다. 각각의 제 3 웨이브프런트 내에서의 각각의 타입은 온-칩 로컬 메모리로부터 입력 데이터를 판독하기 위한 베이스 어드레스를 결정한다. 각각의 쓰레드에 대한 각각의 베이스 어드레스들은, 예를 들어, 각각의 웨이브프런트 내에서 쓰레드를 식별시키는 순차적 쓰레드 식별자, 하나의 쓰레드를 위한 입력에 의해 점유된 메모리 공간을 나타내는 스텝 크기, 및 해당하는 제 3 웨이브프런트에 할당된 입력 버텍스들의 블록에 대한 베이스 어드레스에 근거하여 계산될 수 있다.
단계(232)에서, 제 3 웨이브프런트들 각각은 각각의 프로세싱 유닛에서 실행된다. 일 실시예에 따르면, 단계(232)에서, 픽셀 쉐이더 프로세싱이 일어난다.
단계(234)에서, 제 3 웨이브프런트들 각각의 출력이 각각의 온-칩 로컬 메모리, 시스템 메모리, 혹은 다른 곳에 기입된다. 제 3 웨이브프런트의 완료시, 일 실시예에서, 대응하는 제 2 웨이브프런트의 출력에 의해 점유된 온-칩 로컬 메모리는 할당해제되어 이용가능하게 될 수 있다.
하나 이상의 추가적인 프로세싱 단계들이 애플리케이션에 따라 방법(200) 내에 포함될 수 있다. 일 실시예에 따르면, 제 1 웨이브프런트, 제 2 웨이브프런트, 및 제 3 웨이브프런트는, 그래픽 프로세싱 파이프라인을 생성하여 픽셀 데이터를 프로세싱하고 이미지를 디스플레이에 렌더링하도록 론칭되는, 버텍스 쉐이더들 및 지오메트릭 쉐이더들을 포함한다. 웨이브프런트들의 다양한 타입의 순서는 특정 애플리케이션에 따라 달라짐에 유의해야 한다. 또한, 일 실시예에 따르면, 제 3 웨이브프런트는 픽셀 쉐이더들 및/또는 다른 쉐이더들, 예컨대 컴퓨트 쉐이더들 및 카피 쉐이더들과 같은 것을 포함할 수 있다. 예를 들어, 카피 쉐이더는 데이터를 압축(compact)할 수 있고, 그리고/또는 글로벌 메모리들에 기입할 수 있다. 하나 이상의 쓰레드 웨이브프런트들의 출력을 프로세싱 유닛과 관련된 온-칩 로컬 메모리에 기입함으로써, 본 발명의 실시예들은 메모리 액세스에 대한 경합으로 인해 발생하는 지연들을 크게 감소시킨다.
도 3은 본 발명의 실시예에 따른, 단계(206)를 구현하는 방법(302-306)의 흐름도이다. 단계(302)에서, 각각의 제 1 웨이브프런트에서의 쓰레드들의 개수가 결정된다. 이것은, 다양한 인자들, 예를 들어, 프로세싱을 위해 이용가능한 데이터 요소들, 프로세싱 유닛들의 개수, 각각의 프로세싱 유닛 상에서 동시에 실행될 수 있는 쓰레드들의 최대 개수, 및 각각의 프로세싱 유닛들과 관련된 각각의 온-칩 로컬 메모리들에서 이용가능한 메모리의 양과 같은 것(하지만 이러한 것에만 한정되는 것은 아님)에 근거하여 결정될 수 있다.
단계(304)에서, 제 1 웨이브프런트의 각각의 쓰레드에 의해 저장될 수 있는 출력의 크기가 결정된다. 이러한 결정은, 프로그램 명령들 및/또는 입력 데이터의 크기에 근거하는 사전에 구성된 파라미터들 혹은 동적으로 결정된 파라미터들에 기반을 둘 수 있다. 일 실시예에 따르면, 제 1 웨이브프런트의 각각의 쓰레드에 의해 저장될 수 있는 출력의 크기(이것은 또한 본 명세서에서 제 1 웨이브프런트의 스텝 크기로서 지칭됨)는, 제 1 웨이브프런트를 론칭시킬 때 혹은 제 1 웨이브프런트의 실행 동안 정적으로 혹은 동적으로 결정될 수 있다.
단계(306)에서, 각각의 쓰레드에는, 자신의 각각의 출력을 기입하기 위한, 그 대응하는 프로세싱 유닛과 관련된 온-칩 로컬 메모리에서의 오프셋이 제공된다. 이러한 오프셋은, 각각의 웨이브프런트 내에서 쓰레드를 식별시키는 순차적 쓰레드 식별자, 각각의 웨이브프런트에 대한 베이스 출력 어드레스, 및 각각의 쓰레드를 위한 메모리 공간을 나타내는 스텝 크기에 근거하여 결정될 수 있다. 프로세싱 동안, 각각의 쓰레드는, 자신의 출력이 기입돼야만 하는 로컬 메모리에서의 실제 오프셋을, 쓰레드 디스패치시 제공되는 오프셋, 웨이브프런트에 대한 베이스 출력 어드레스, 및 쓰레드들의 스텝 크기에 근거하여, 결정할 수 있다.
도 4는 본 발명의 실시예에 따른, 단계(216)를 구현하는 방법(402-406)을 나타낸 흐름도이다. 단계(402)에서, 제 2 웨이브프런트의 쓰레드들에 대한 스텝 크기가 결정된다. 이러한 스텝 크기는, 제 2 웨이브프런트의 프로그래밍 명령들, 최대 스텝 크기를 특정하는 사전에 구성된 파라미터, 사전에 구성된 파라미터와 프로그래밍 명령들의 조합, 혹은 유사한 방법에 근거하여 결정될 수 있다. 일 실시예에 따르면, 이러한 스텝 크기는, 제 2 웨이브프런트의 각각의 쓰레드들에 의해 판독되는 입력 데이터의 데이터 증폭(예를 들어, 지오메트릭 쉐이더에 의한 지오메트릭 증폭과 같은 것)을 수용하도록 결정돼야 한다.
단계(404)에서, 각각의 제 2 웨이브프런트들의 각각의 쓰레드에는, 자신의 입력을 판독하기 위한 온-칩 로컬 메모리에서의 위치를 결정하는 판독 오프셋이 제공될 수 있다. 각각의 쓰레드는 실제 판독 오프셋을, 예를 들어, 실행 동안, 판독 오프셋, 각각의 웨이브프런트에 대한 베이스 판독 오프셋, 및 대응하는 제 1 웨이브프런트의 쓰레드들의 스텝 크기에 근거하여, 결정할 수 있다.
단계(406)에서, 각각의 제 2 웨이브프런트들의 각각의 쓰레드에는 온-칩 로컬 메모리에서의 기입 오프셋이 제공될 수 있다. 각각의 쓰레드는 실제 기입 오프셋을, 예를 들어, 실행 동안, 기입 오프셋, 각각의 웨이브프런트에 대한 베이스 기입 오프셋, 및 제 2 웨이브프런트의 쓰레드들의 스텝 크기에 근거하여, 결정할 수 있다.
도 5는 프로세싱 유닛들 각각에서 프로세싱될 데이터 요소들을 결정하는 방법(502-506)을 나타낸 흐름도이다. 단계(502)에서는, 각각의 프로세싱 유닛의 온-칩 로컬 메모리에 저장될 제 1 웨이브프런트의 출력의 크기가 추정된다. 일 실시예에 따르면, 이러한 출력의 크기는, 복수의 버텍스 쉐이더 쓰레드들에 의해 프로세싱될 버텍스들의 개수에 근거하여 결정된다. 각각의 프로세싱 유닛 내에서 프로세싱될 버텍스들의 개수는, 예를 들어, 프로세싱될 버텍스들의 총 개수, 버텍스들의 프로세싱을 위해 이용가능한 프로세싱 유닛들의 개수, 각각의 프로세싱 유닛에 대해 이용가능한 온-칩 로컬 메모리의 양, 및 각각의 입력 버텍스에 적용된 프로세싱과 같은 것(하지만 이러한 것에만 한정되는 것은 아님)에 근거하여 결정될 수 있다. 일 실시예에 따르면, 각각의 버텍스 쉐이더는, 입력으로서 판독되는 버텍스들의 개수와 동일한 개수의 버텍스들을 출력한다.
단계(504)에서, 각각의 프로세싱 유닛의 온-칩 로컬 메모리에 저장될 제 2 웨이브프런트의 출력의 크기가 추정된다. 일 실시예에 따르면, 제 2 웨이브프런트의 출력의 크기는, 제 2 웨이브프런트의 각각의 쓰레드들에 의해 수행되는 입력 데이터의 증폭에 적어도 부분적으로 근거하여 추정된다. 예를 들어, 지오메트릭 쉐이더에 의한 프로세싱은 지오메트릭 증폭에 의해 입력 프리미티브들의 개수와는 다른 개수의 출력 프리미티브들이 생성되게 할 수 있다. 데이터 증폭(혹은 지오메트릭 증폭)의 크기는, 사전에 구성된 파라미터 및/또는 각각의 쓰레드들에서의 프로그래밍 명령들의 실시형태들에 근거하여 결정될 수 있다.
단계(506)에서, 각각의 프로세서와 관련된 이용가능한 온-칩 로컬 메모리의 요구된 크기는 제 1 웨이브프런트와 제 2 웨이브프런트의 출력들의 크기를 합산함으로써 결정된다. 본 발명의 실시예에 따르면, 각각의 프로세싱 유닛의 온-칩 로컬 메모리는 적어도 제 1 웨이브프런트와 제 2 웨이브프런트의 출력 크기들을 합한 양만큼의 이용가능한 메모리를 가질 필요가 있다. 각각의 프로세싱 유닛에서 프로세싱될 버텍스들의 개수는, 제 1 웨이브프런트와 제 2 웨이브프런트의 출력들의 합 및 이용가능한 온-칩 로컬 메모리의 양에 근거하여 결정될 수 있다.
결론(Conclusion)
본 명세서의 개요 및 요약 부분은, 본 발명의 발명자(들)에 의해 고려되는 바와 같은 본 발명의 하나 이상의 예시적 실시예(그러나 모든 예시적 실시예는 아님)를 설명할 수 있는바, 따라서 어느 경우에 있어서도, 본 명세서에 첨부되는 특허청구범위 및 본 발명을 한정하도록 의도되지 않았다.
본 발명은 특정 기능들 및 이들의 관계의 구현을 나타내는 기능적 빌딩 블록들의 도움을 받아 앞서 설명되었다. 이러한 기능적 빌딩 블록들의 범위는 설명의 편의를 위해 본 명세서에서 임의적으로 정의되었다. 특정 기능들 및 이들의 관계가 적절하게 수행되는 한 다른 범위가 정의될 수 있다.
특정 실시예들의 앞서의 설명은, 본 발명의 일반적 성질을 매우 충분히 개시하고 있어, 다른 사람들은, 본 발명의 기술분야에서 숙련된 자의 지식 범위 내에 있는 지식을 적용함으로써, 과도한 실험 없이, 본 발명의 전체적 개념으로부터 벗어남이 없이, 다양한 애플리케이션에 대해 이러한 특정 실시예들을 쉽게 수정 및/또는 조정할 수 있다. 따라서, 이러한 조정 및 수정은, 본 명세서에서 제공되는 가르침 및 지침에 근거하여, 본 명세서에서 개시되는 실시예들의 등가물의 의미 및 범위 내에 있게 된다. 본 명세서에서의 어구 혹은 용어는 한정의 목적이 아닌 설명의 목적으로 사용되었고, 이에 따라 본 명세서에서의 용어 혹은 어구는 본 명세서의 가르침 및 지침을 고려하여 숙련된 당업자에 의해 해석돼야 하는 그러한 것임을 이해해야 한다.
본 발명의 범위 및 영역은 앞서 설명된 예시적 실시예들 중 어느 하나에 의해 한정돼서는 안 되며, 단지 다음의 특허청구범위 및 그 등가물에 따라서만 정의돼야 한다.

Claims (20)

  1. 복수의 프로세싱 유닛(processing unit)들을 사용하여 프로세서에서 데이터 요소(data element)들을 프로세싱하는 방법으로서,
    상기 프로세싱 유닛들 각각에서, 제 1 타입의 쓰레드(thread)를 포함하는 제 1 웨이브프런트(wavefront)를 론칭(launching)시키고 이후 제 2 타입의 쓰레드를 포함하는 제 2 웨이브프런트를 론칭시키는 단계와, 여기서 상기 제 1 웨이브프런트는 오프-칩 공유 메모리(off-chip shared memory)로부터 데이터 요소들의 일부를 입력으로서 판독하고, 그리고 제 1 출력을 발생시키며;
    상기 제 1 출력을 상기 프로세싱 유닛들 각각의 온-칩 로컬 메모리(on-chip local memory)에 기입하는 단계와; 그리고
    상기 제 2 웨이브프런트에 의해 발생된 제 2 출력을 상기 온-칩 로컬 메모리에 기입하는 단계를 포함하여 구성되며,
    상기 제 2 웨이브프런트에 대한 입력은 상기 제 1 출력으로부터의 제1의 복수의 데이터 요소들을 포함하는 것을 특징으로 하는 데이터 요소들을 프로세싱하는 방법.
  2. 제1항에 있어서,
    상기 제 2 출력을 발생시키기 위해 상기 제 2 웨이브프런트를 이용하여 상기 제1의 복수의 데이터 요소들을 프로세싱하는 단계를 더 포함하며, 상기 제 2 출력에서의 데이터 요소들의 개수는 상기 제1의 복수의 데이터 요소들의 개수와는 실질적으로 다른 것을 특징으로 하는 데이터 요소들을 프로세싱하는 방법.
  3. 제2항에 있어서,
    상기 제 2 출력에서의 데이터 요소들의 개수는 동적으로 결정되는 것을 특징으로 하는 데이터 요소들을 프로세싱하는 방법.
  4. 제2항에 있어서,
    상기 제 2 웨이브프런트는 하나 이상의 지오메트릭 쉐이더 쓰레드들(geometric shader threads)을 포함하는 것을 특징으로 하는 데이터 요소들을 프로세싱하는 방법.
  5. 제4항에 있어서,
    상기 제 2 출력은 상기 제 1 출력의 지오메트릭 증폭(geometry amplification)에 의해 발생되는 것을 특징으로 하는 데이터 요소들을 프로세싱하는 방법.
  6. 제1항에 있어서,
    제 1 프로세싱 유닛에서 제 3 웨이브프런트를 실행시키고 이후 상기 제 2 웨이브프런트를 실행시키는 단계를 더 포함하며, 상기 제 3 웨이브프런트는 상기 온-칩 로컬 메모리로부터 상기 제 2 출력을 판독하는 것을 특징으로 하는 데이터 요소들을 프로세싱하는 방법.
  7. 제1항에 있어서,
    상기 프로세싱 유닛들 각각을 위해, 적어도 상기 온-칩 로컬 메모리에서 이용가능한 메모리에 근거하여 프로세싱될 상기 데이터 요소들의 개수를 결정하는 단계와; 그리고
    상기 프로세싱 유닛들 각각을 위해, 상기 결정된 개수에 근거하여 상기 제 1 웨이브프런트 및 상기 제 2 웨이브프런트의 크기를 정하는 단계를 더 포함하는 것을 특징으로 하는 데이터 요소들을 프로세싱하는 방법.
  8. 제7항에 있어서,
    상기 결정하는 단계는,
    상기 제 1 출력의 메모리 크기를 추정하는 단계;
    상기 제 2 출력의 메모리 크기를 추정하는 단계; 그리고
    상기 제 1 출력 및 상기 제 2 출력의 상기 추정된 메모리 크기들을 사용하여 필요한 온-칩 메모리 크기를 계산하는 단계를 포함하는 것을 특징으로 하는 데이터 요소들을 프로세싱하는 방법.
  9. 제1항에 있어서,
    상기 론칭시키는 단계는,
    상기 제 1 웨이브프런트를 실행시키는 단계;
    상기 제 1 웨이브프런트의 완료를 검출하는 단계; 그리고
    상기 검출 이후 상기 제 2 웨이브프런트에 의해 상기 제 1 출력을 판독하는 단계를 포함하는 것을 특징으로 하는 데이터 요소들을 프로세싱하는 방법.
  10. 제9항에 있어서,
    상기 제 1 웨이브프런트를 실행시키는 단계는,
    상기 제 1 웨이브프런트의 각각의 쓰레드들에 대한 출력의 크기를 결정하는 단계; 그리고
    상기 온-칩 로컬 메모리로의 출력을 위한 오프셋(offset)을 상기 제 1 웨이브프런트의 각각의 쓰레드들 각각에 제공하는 단계를 포함하는 것을 특징으로 하는 데이터 요소들을 프로세싱하는 방법.
  11. 제9항에 있어서,
    상기 론칭시키는 단계는,
    상기 제 2 웨이브프런트의 각각의 쓰레드들에 대한 출력의 크기를 결정하는 단계;
    상기 제 1 출력으로부터의 판독을 위한 상기 온-칩 로컬 메모리에서의 오프셋을 상기 제 2 웨이브프런트의 각각의 쓰레드들에 제공하는 단계; 그리고
    상기 제 2 출력의 각각의 부분의 기입을 위한 상기 온-칩 로컬 메모리에서의 오프셋을 상기 제 2 웨이브프런트의 각각의 쓰레드에 제공하는 단계를 더 포함하는 것을 특징으로 하는 데이터 요소들을 프로세싱하는 방법.
  12. 제11항에 있어서,
    상기 제 2 웨이브프런트의 각각의 쓰레드들에 대한 출력의 크기는 소정의 지오메트릭 증폭 파라미터(geometry amplification parameter)에 근거하는 것을 특징으로 하는 데이터 요소들을 프로세싱하는 방법.
  13. 제1항에 있어서,
    상기 복수의 프로세싱 유닛들 각각은 단일 명령 다중 데이터(Single Instruction Multiple Data, SIMD) 프로세서인 것을 특징으로 하는 데이터 요소들을 프로세싱하는 방법.
  14. 제1항에 있어서,
    상기 온-칩 로컬 메모리는 대응하는 각각의 프로세싱 유닛에서 실행되는 쓰레드들에 대해서만 액세스가능한 것을 특징으로 하는 데이터 요소들을 프로세싱하는 방법.
  15. 제1항에 있어서,
    상기 제 1 웨이브프런트와 상기 제 2 웨이브프런트는, 버텍스 쉐이더 쓰레드들(vertex shader threads)과 지오메트릭 쉐이더 쓰레드들(geometric shader threads) 각각을 포함하는 것을 특징으로 하는 데이터 요소들을 프로세싱하는 방법.
  16. 시스템으로서,
    복수의 프로세싱 유닛들을 포함하는 프로세서와, 여기서 상기 프로세싱 유닛들 각각은 온-칩 로컬 메모리를 포함하고;
    상기 프로세싱 유닛들에 결합되어 복수의 입력 데이터 요소들을 저장하도록 되어 있는 오프-칩 공유 메모리와;
    상기 프로세서에 결합되는 웨이브프런트 디스패치 모듈(wavefront dispatch module)과; 그리고
    상기 프로세서에 결합되는 웨이브프런트 실행 모듈(wavefront execution module)을 포함하여 구성되며,
    상기 웨이브프런트 디스패치 모듈은,
    상기 복수의 프로세싱 유닛들 각각에서, 제 1 타입의 쓰레드를 포함하는 제 1 웨이브프런트를 론칭시키고 이후 제 2 타입의 쓰레드를 포함하는 제 2 웨이브프런트를 론칭시키도록 되어 있고, 여기서 상기 제 1 웨이브프런트는 오프-칩 공유 메모리로부터 데이터 요소들의 일부를 판독하도록 되어 있으며,
    상기 웨이브프런트 실행 모듈은,
    상기 제 1 출력을 상기 프로세싱 유닛들 각각의 온-칩 로컬 메모리에 기입하고; 그리고
    상기 제 2 웨이브프런트에 의해 발생된 제 2 출력을 상기 온-칩 로컬 메모리에 기입하도록 되어 있으며, 여기서 상기 제 2 웨이브프런트에 대한 입력은 상기 제 1 출력으로부터의 제1의 복수의 데이터 요소들을 포함하는 것을 특징으로 하는 시스템.
  17. 제16항에 있어서,
    상기 웨이브프런트 실행 모듈은 또한,
    상기 제 2 출력을 발생시키기 위해 상기 제 2 웨이브프런트를 이용하여 상기 제1의 복수의 데이터 요소들을 프로세싱하도록 되어 있고, 상기 제 2 출력에서의 데이터 요소들의 개수는 상기 제1의 복수의 데이터 요소들의 개수와는 실질적으로 다른 것을 특징으로 하는 시스템.
  18. 제17항에 있어서,
    상기 제 2 출력은 상기 제 1 출력의 지오메트릭 증폭에 의해 발생되는 것을 특징으로 하는 시스템.
  19. 제18항에 있어서,
    상기 제 1 웨이브프런트와 상기 제 2 웨이브프런트는, 버텍스 쉐이더 쓰레드들과 지오메트릭 쉐이더 쓰레드들을 각각 포함하는 것을 특징으로 하는 시스템.
  20. 컴퓨터 판독가능 매체를 포함하는 유형의 컴퓨터 프로그램물로서,
    상기 컴퓨터 판독가능 매체에는 컴퓨터 프로그램 로직(computer program logic)이 기록되어 있고, 상기 컴퓨터 프로그램 로직은 복수의 프로세싱 유닛들을 포함하는 프로세서로 하여금,
    상기 프로세싱 유닛들 각각에서, 제 1 타입의 쓰레드를 포함하는 제 1 웨이브프런트를 론칭시키고 이후 제 2 타입의 쓰레드를 포함하는 제 2 웨이브프런트를 론칭시키도록 하고, 여기서 상기 제 1 웨이브프런트는 오프-칩 공유 메모리로부터 데이터 요소들의 일부를 입력으로서 판독하고, 그리고 제 1 출력을 발생시키며;
    상기 제 1 출력을 상기 프로세싱 유닛들 각각의 온-칩 로컬 메모리에 기입하도록 하고; 그리고
    상기 제 2 웨이브프런트에 의해 발생된 제 2 출력을 상기 온-칩 로컬 메모리에 기입하도록 하며,
    여기서 상기 제 2 웨이브프런트에 대한 입력은 상기 제 1 출력으로부터의 제1의 복수의 데이터 요소들을 포함하는 것을 특징으로 하는 컴퓨터 프로그램물.
KR1020137004197A 2010-07-19 2011-07-19 복수의 프로세싱 유닛들에서 온-칩 메모리를 사용하는 데이터 프로세싱 KR20130141446A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US36570910P 2010-07-19 2010-07-19
US61/365,709 2010-07-19
PCT/US2011/044552 WO2012012440A1 (en) 2010-07-19 2011-07-19 Data processing using on-chip memory in multiple processing units

Publications (1)

Publication Number Publication Date
KR20130141446A true KR20130141446A (ko) 2013-12-26

Family

ID=44628932

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137004197A KR20130141446A (ko) 2010-07-19 2011-07-19 복수의 프로세싱 유닛들에서 온-칩 메모리를 사용하는 데이터 프로세싱

Country Status (6)

Country Link
US (1) US20120017062A1 (ko)
EP (1) EP2596470A1 (ko)
JP (1) JP2013541748A (ko)
KR (1) KR20130141446A (ko)
CN (1) CN103003838A (ko)
WO (1) WO2012012440A1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018128328A3 (ko) * 2017-01-05 2018-08-30 주식회사 아이리시스 생체 정보를 처리하는 회로 모듈 및 이를 포함하는 생체 정보 처리 장치
KR20200063238A (ko) * 2017-10-26 2020-06-04 어드밴스드 마이크로 디바이시즈, 인코포레이티드 동적 리소스 할당으로 웨이브 생성 제어 방법

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9619855B2 (en) * 2011-11-18 2017-04-11 Intel Corporation Scalable geometry processing within a checkerboard multi-GPU configuration
US10217270B2 (en) 2011-11-18 2019-02-26 Intel Corporation Scalable geometry processing within a checkerboard multi-GPU configuration
US9256915B2 (en) * 2012-01-27 2016-02-09 Qualcomm Incorporated Graphics processing unit buffer management
US10474584B2 (en) 2012-04-30 2019-11-12 Hewlett Packard Enterprise Development Lp Storing cache metadata separately from integrated circuit containing cache controller
KR101499124B1 (ko) * 2013-01-24 2015-03-05 한남대학교 산학협력단 공유 메모리를 이용한 영상 처리 방법 및 장치
KR101596332B1 (ko) * 2013-01-24 2016-02-22 전자부품연구원 G―esa를 적용한 영상 처리 시스템 및 방법
US9720842B2 (en) * 2013-02-20 2017-08-01 Nvidia Corporation Adaptive multilevel binning to improve hierarchical caching
GB2524063B (en) 2014-03-13 2020-07-01 Advanced Risc Mach Ltd Data processing apparatus for executing an access instruction for N threads
US10360652B2 (en) * 2014-06-13 2019-07-23 Advanced Micro Devices, Inc. Wavefront resource virtualization
US20160260246A1 (en) * 2015-03-02 2016-09-08 Advanced Micro Devices, Inc. Providing asynchronous display shader functionality on a shared shader core
GB2536211B (en) * 2015-03-04 2021-06-16 Advanced Risc Mach Ltd An apparatus and method for executing a plurality of threads
CN104932985A (zh) * 2015-06-26 2015-09-23 季锦诚 一种基于eDRAM的GPGPU寄存器文件系统
GB2540543B (en) * 2015-07-20 2020-03-11 Advanced Risc Mach Ltd Graphics processing
GB2553597A (en) * 2016-09-07 2018-03-14 Cisco Tech Inc Multimedia processing in IP networks
US10395424B2 (en) * 2016-12-22 2019-08-27 Advanced Micro Devices, Inc. Method and apparatus of copying data to remote memory
US10474822B2 (en) * 2017-10-08 2019-11-12 Qsigma, Inc. Simultaneous multi-processor (SiMulPro) apparatus, simultaneous transmit and receive (STAR) apparatus, DRAM interface apparatus, and associated methods
CN108153190B (zh) * 2017-12-20 2020-05-05 新大陆数字技术股份有限公司 一种人工智能微处理器
US10922258B2 (en) * 2017-12-22 2021-02-16 Alibaba Group Holding Limited Centralized-distributed mixed organization of shared memory for neural network processing
US10679316B2 (en) * 2018-06-13 2020-06-09 Advanced Micro Devices, Inc. Single pass prefix sum in a vertex shader
US11010862B1 (en) * 2019-11-14 2021-05-18 Advanced Micro Devices, Inc. Reduced bandwidth tessellation factors
US11210757B2 (en) * 2019-12-13 2021-12-28 Advanced Micro Devices, Inc. GPU packet aggregation system
US11822956B2 (en) * 2020-12-28 2023-11-21 Advanced Micro Devices (Shanghai) Co., Ltd. Adaptive thread group dispatch
US20230094115A1 (en) * 2021-09-29 2023-03-30 Advanced Micro Devices, Inc. Load multiple primitives per thread in a graphics pipeline

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6088044A (en) * 1998-05-29 2000-07-11 International Business Machines Corporation Method for parallelizing software graphics geometry pipeline rendering
GB2374443B (en) * 2001-02-14 2005-06-08 Clearspeed Technology Ltd Data processing architectures
US6947047B1 (en) * 2001-09-20 2005-09-20 Nvidia Corporation Method and system for programmable pipelined graphics processing with branching instructions
US7222343B2 (en) * 2003-01-16 2007-05-22 International Business Machines Corporation Dynamic allocation of computer resources based on thread type
US7015913B1 (en) * 2003-06-27 2006-03-21 Nvidia Corporation Method and apparatus for multithreaded processing of data in a programmable graphics processor
US8259111B2 (en) * 2008-05-30 2012-09-04 Advanced Micro Devices, Inc. Merged shader for primitive amplification
WO2009145917A1 (en) * 2008-05-30 2009-12-03 Advanced Micro Devices, Inc. Local and global data share
US20100079454A1 (en) * 2008-09-29 2010-04-01 Legakis Justin S Single Pass Tessellation
US8711159B2 (en) * 2009-02-23 2014-04-29 Microsoft Corporation VGPU: a real time GPU emulator
US8627329B2 (en) * 2010-06-24 2014-01-07 International Business Machines Corporation Multithreaded physics engine with predictive load balancing

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2018128328A3 (ko) * 2017-01-05 2018-08-30 주식회사 아이리시스 생체 정보를 처리하는 회로 모듈 및 이를 포함하는 생체 정보 처리 장치
KR20200063238A (ko) * 2017-10-26 2020-06-04 어드밴스드 마이크로 디바이시즈, 인코포레이티드 동적 리소스 할당으로 웨이브 생성 제어 방법

Also Published As

Publication number Publication date
EP2596470A1 (en) 2013-05-29
US20120017062A1 (en) 2012-01-19
JP2013541748A (ja) 2013-11-14
CN103003838A (zh) 2013-03-27
WO2012012440A1 (en) 2012-01-26

Similar Documents

Publication Publication Date Title
KR20130141446A (ko) 복수의 프로세싱 유닛들에서 온-칩 메모리를 사용하는 데이터 프로세싱
KR101661720B1 (ko) 복수의 셰이더 엔진들을 구비한 처리 유닛
JP5240588B2 (ja) デッドロックを起こさないパイプライン処理のためのシステム及び方法
KR101707289B1 (ko) 그래픽 병렬 처리 유닛에 대한 버퍼 관리
US9256623B2 (en) System, method, and computer program product for scheduling tasks associated with continuation thread blocks
US9799094B1 (en) Per-instance preamble for graphics processing
US9996386B2 (en) Mid-thread pre-emption with software assisted context switch
US9477482B2 (en) System, method, and computer program product for implementing multi-cycle register file bypass
EP2791910A1 (en) Graphics processing unit with command processor
US11829439B2 (en) Methods and apparatus to perform matrix multiplication in a streaming processor
US20180232846A1 (en) Dynamic shader instruction nullification for graphics processing
US9471307B2 (en) System and processor that include an implementation of decoupled pipelines
EP3161817B1 (en) Load scheme for shared register in gpu
KR102495792B1 (ko) 가변 파면 크기
US9632783B2 (en) Operand conflict resolution for reduced port general purpose register
KR101973924B1 (ko) 그래픽스 프로세싱을 위한 퍼-쉐이더 프리앰블
US9477480B2 (en) System and processor for implementing interruptible batches of instructions
US20230097097A1 (en) Graphics primitives and positions through memory buffers
US10114650B2 (en) Pessimistic dependency handling based on storage regions
US9378139B2 (en) System, method, and computer program product for low latency scheduling and launch of memory defined tasks
KR20210135415A (ko) 피드백 입력을 갖는 시스토릭 어레이를 이용한 확장 가능한 희소 매트릭스 곱셈 가속
KR20170007742A (ko) 중간 스토리지로서 파이프라인 레지스터들의 활용
US11062680B2 (en) Raster order view
US11790478B2 (en) Methods and apparatus for mapping source location for input data to a graphics processing unit
JP2023552789A (ja) 算術論理演算ユニット用のソフトウェアベースの命令スコアボード

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid