KR102502731B1 - 저전력 구조에서 데이터를 유지하기 위한 시스템 및 방법 - Google Patents

저전력 구조에서 데이터를 유지하기 위한 시스템 및 방법 Download PDF

Info

Publication number
KR102502731B1
KR102502731B1 KR1020180023041A KR20180023041A KR102502731B1 KR 102502731 B1 KR102502731 B1 KR 102502731B1 KR 1020180023041 A KR1020180023041 A KR 1020180023041A KR 20180023041 A KR20180023041 A KR 20180023041A KR 102502731 B1 KR102502731 B1 KR 102502731B1
Authority
KR
South Korea
Prior art keywords
register file
thread
file memory
threads
vector
Prior art date
Application number
KR1020180023041A
Other languages
English (en)
Other versions
KR20180117031A (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 KR20180117031A publication Critical patent/KR20180117031A/ko
Application granted granted Critical
Publication of KR102502731B1 publication Critical patent/KR102502731B1/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/22Microcontrol or microprogram arrangements
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30098Register arrangements
    • 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/30098Register arrangements
    • G06F9/3012Organisation of register space, e.g. banked or distributed register file
    • 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/3824Operand accessing
    • 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/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • 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]
    • 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/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/60Memory management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Multimedia (AREA)
  • Mathematical Physics (AREA)
  • Image Generation (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)

Abstract

그래픽 프로세싱 유닛은 레지스터 파일 메모리, PE(processing element), 및 LSU(load-store unit)를 포함할 수 있다. 레지스터 파일 메모리는 복수의 레지스터들을 포함할 수 있다. PE는 레지스터 파일 메모리와 연결되고 그래픽 어플리케이션의 스레드들의 벡터의 적어도 하나의 스레드를 처리한다. 스레드들의 각 벡터 내의 각 스레드는 비정지 방식으로 처리된다. PE는 적어도 하나의 스레드를 처리함으로써 생성되고 PE의 외부에 있는 제 1 정지 가능한 로직 유닛으로 라우팅되는 레지스터 파일 메모리 내의 복수의 레지스터들의 제 1 사전에 결정된 집합 내에 데이터를 저장한다. LSU는 레지스터 파일 메모리와 연결되고, LSU는 복수의 레지스터들의 제 1 사전에 결정된 집합 내에 데이터를 접근하고 제 1 정지 가능한 로직 유닛으로 라우팅한다.

Description

저전력 구조에서 데이터를 유지하기 위한 시스템 및 방법{SYSTEM AND METHOD FOR MAINTAINING DATA IN A LOW-POWER STRUCTURE}
본 명세서에 개시된 본 발명은 GPU(graphics processing unit)에 관한 것으로, 좀 더 자세하게는, 본 명세서에 개시된 본 발명은 저전력 구조에서 데이터를 유지하기 위한 시스템 및 방법에 관한 관한 것이다.
GPU(graphics processing unit)는 어플리케이션과 관련될 수 있는 그래픽(graphics) 프로그램을 실행한다. GPU는, 예를 들어, 쉐이더(shader) 프로그램(쉐이더)의 실행에 이용될 수 있는 범용의, 프로그래머블(programmable) 엔진을 포함할 수 있다. 통일된 GPU 구조 내에서 쉐이더 코어(core)로서 지칭될 수 있는 동일한 프로그램 가능한 엔진은 특정한 그래픽 구성을 위한 다수의 프로그램들 각각을 실행한다. 그래픽 프로그램들의 속성을 고려하면, GPU들은 병렬로 실행되는 스레드(thread)들의 큰 집합들을 갖는 고도의 병렬 머신(machine)들이다. 고도의 병렬 시스템은 시스템의 상이한 부분들 사이에서 대량의 데이터를 자주 옮긴다 - 상대적으로 많은 양의 전력을 소모하는 경향이 있는 동작(operation). 따라서, GPU가 휴대용 단말기(hand-held device)의 일부로 설계되면, 저전력 설계는 대단히 중요하게 된다.
본 발명은 상술한 기술적 과제를 해결하기 위한 것으로, 본 발명은 저전력 구조에서 데이터를 유지하기 위한 시스템 및 방법을 제공할 수 있다.
예시적인 실시 예는 레지스터 파일 메모리, PE(processing unit), 및 LSU(load-store unit)을 포함할 수 있는 GPU를 제공한다. 레지스터 파일 메모리는 복수의 레지스터들을 포함할 수 있다. PE는 레지스터 파일 메모리와 연결될 수 있고, PE는 그래픽 어플리케이션의 스레드들의 벡터의 적어도 하나의 스레드를 처리할 수 있고 스레드들의 벡터 내 각 스레드가 비정지 방식으로 처리되고, PE는 적어도 하나의 스레드를 처리함으로써 생성되고 PE 외부에 있는 제 1 정지 가능한 로직 유닛으로 라우팅되는 레지스터 파일 메모리 내 복수의 레지스터들의 제 1 사전에 결정된 집합 내의 데이터를 저장할 수 있다. LSU는 레지스터 파일 메모리와 연결될 수 있고, LSU는 복수의 레지스터들의 제 1 사전에 결정된 집합 내의 데이터를 접근할 수 있고 데이터를 제 1 정지 가능한 로직 유닛으로 라우팅할 수 있다. GPU는 LSU와 연결된 작업 지시 호퍼 메모리를 더 포함할 수 있고 작업 지시 호퍼 메모리는 PE에 의해 그래픽 어플리케이션의 스레드들의 벡터의 적어도 하나의 스레드의 프로세싱과 관련된 적어도 하나의 작업 지시 메시지를 저장할 수 있고, 적어도 하나의 작업 지시 메시지는 제 1 정지 가능한 로직 유닛으로 라우팅되는 데이터를 저장하는 복수의 레지스터들의 제 1 사전에 결정된 집합의 제 1 위치를 포함할 수 있다. 적어도 하나의 작업 지시 메시지는 제 1 정지 가능한 로직 유닛의 결과를 저장하는 위치를 나타내는 레지스터 파일 메모리의 복수의 레지스터들의 제 2 사전에 결정된 집합의 제 2 위치를 더 포함할 수 있다.
예시적인 실시 예는 PE, 명령 파이프라인 파서, 및 LSU를 포함할 수 있는 GPU를 제공한다. PE는 처리되는 그래픽 어플리케이션의 스레드들의 벡터의 적어도 하나의 스레드를 처리할 수 있고 스레드들의 벡터 내의 각 스레드는 비정지 방식으로 처리된다. 명령 파이프라인 파서는 그래픽 어플리케이션의 스레드들의 벡터의 상기 적어도 하나의 스레드의 명령이 데이터를 PE 외부에 있는 제 1 정지 가능한 로직 유닛으로 라우팅하는 연산을 포함하면 작업 지시 메시지를 생성할 수 있다. 작업 지시 메시지는 제 1 정지 가능한 로직 유닛으로 라우팅되는 PE에 의해 처리되는 데이터를 저장하는 제 1 위치를 포함할 수 있다. LSU는 작업 지시 메시지를 저장할 수 잇는 작업 지시 호퍼 메모리를 포함할 수 있다. LSU는 작업 지시 호퍼 메모리 내의 작업 지시 메시지를 수신하고 데이터를 제 1 위치에서 제 1 정지 가능한 로직 유닛으로 라우팅할 수 있다. PE는 복수의 레지스터들을 포함하는 레지스터 파일 메모리를 포함할 수 있고 데이터가 저장되는 제 1 위치는 레지스터 파일 메모리 내의 복수의 레지스터들의 제 1 집합을 포함할 수 있다. 작업 지시 메시지는 제 1 정지 가능한 로직 유닛의 결과를 저장하는 위치를 나타내는 레지스터 파일 메모리 내의 복수의 레지스터들의 제 2 사전에 결정된 집합의 제 2 위치를 더 포함할 수 있다.
일 예시적인 실시 예는 그래픽 어플리케이션을 처리하는 방법을 제공한다. 방법은: 그래픽 어플리케이션의 스레드들의 벡터의 적어도 하나의 스레드를 처리함으로써 PE에서 데이터를 생성하는 단계, 그리고 데이터는 비정지 프로세스의 외부에 있는 정지 가능한 프로세스로 라우팅될 수 있고; 레지스터 파일 메모리 내의 복수의 레지스터들의 제 1 사전에 결정된 집합 내에 데이터를 저장하는 단계, 레지스터 파일 메모리는 PE에 연결될 수 있고; 레지스터 파일 메모리에 연결된 LSU에 의해 복수의 레지스터들의 제 1 사전에 결정된 집합 내에 저장된 데이터를 접근하는 단계; 그리고 LSU에 의해 접근된 데이터를 정지 가능한 프로세스로 라우팅하는 단계를 포함할 수 있다. 방법은: 명령 파이프라인 파서에 의해 그래픽 어플리케이션의 벡터의 적어도 하나의 스레드의 명령이 데이터를 정지 가능한 프로세스로 라우팅하는 연산을 포함하면 작업 지시 메시지를 생성하는 단계를 더 포함할 수 있고, 작업 지시 메시지는 정지 가능한 프로세스로 라우팅되는 데이터를 저장하는 복수의 레지스터들의 제 1 사전에 결정된 집합의 제 1 위치를 포함할 수 있다. 작업 지시 메시지는 정지 가능한 프로세스의 결과를 저장하는 위치를 나타내는 레지스터 파일 메모리 내의 복수의 레지스터들의 제 2 사전에 결정된 집합의 제 2 위치를 더 포함할 수 있다.
예시적인 실시 예는 그래픽 어플리케이션을 처리하는 방법을 제공한다. 방법은: 명령 파이프라인 파서에서 그래픽 어플리케이션의 명령이 데이터를 정지 가능한 프로세스로 라우팅하는 연산을 포함하면 작업 지시 메시지를 생성하는 단계, 그래픽 어플리케이션은 스레드들의 적어도 하나의 벡터를 포함할 수 있고 각 스레드는 비정지 프로세스로 처리되고, 그리고 작업 지시 메시지는 명령이 실행됨으로써 생성되는 데이터를 저장하는 제 1 위치를 포함하고; LSU의 작업 지시 호퍼 메모리 내에 작업 지시 메시지를 저장하는 단계; 비정지 프로세스에서 그래픽 어플리케이션의 스레드들의 벡터의 적어도 하나의 스레드에 대한 명령을 실행함으로써 PE 내에 데이터를 생성하는 단계, 생성된 데이터는 정지 가능한 프로세스로 라우팅될 수 있고; 레지스터 파일 메모리 내의 복수의 레지스터들의 제 1 사전에 결정된 집합 내에 데이터를 저장하는 단계, 복수의 레지스터들의 제 1 사전에 결정된 집합은 제 1 위치에 대응하고, 레지스터 파일 메모리는 PE와 연결될 수 있고; LSU에 의해 복수의 레지스터들의 제 1 사전에 결정된 집합 내에 저장된 데이터를 접근하는 단계; 및 LSU에 의해 접근된 데이터를 정지 프로세스로 라우팅하는 단계를 포함할 수 있다.
본 발명의 실시 예에 따른 GPU 시스템에 의하면, 잠재적으로 알려지지 않거나 알 수 없는 대기시간(latency)을 포함할 수 있는 비정지 주요 프로세스의 모든 양상들은 비정지 프로세스의 외부에서 실행될 수 있고, 그렇게 함으로써 비정지 방식으로 잠재적으로 알려지지 않거나 알 수 없는 대기시간이 효과적으로 처리될 수 있다.
이하의 부분에서, 본 명세서에서 개시된 본 발명의 양상들은 도면들에 도시된 예시적인 실시 예들을 참조하여 설명될 것이다.
도 1은 본 명세서에 개시된 본 발명에 따른 GPU 시스템의 예시적인 실시 예를 도시한다.
도 2는 공간 차원에서 8개 스레드들 및 시간 차원에서 4개 스레드들로서 구성된 SIMT(single-instruction-multiple-thread) 그룹핑(grouping)을 포함하는 워프의 예시적인 실시 예를 도시한다.
도 3은 본 명세서에 개시된 본 발명에 따른 방출 버퍼의 예시적인 실시 예를 도시한다.
도 4는 예시적인 방출 버퍼(400)가 TCBUF 관련된 명령의 처리의 일부로서 사용되는지를 판별할 때 명령 파이프라인 파서의 상부가 예시적인 TCBUF 명령을 검사할 수 있는 예시적인 필드를 도시한다.
도 5는 본 명세서에 개시된 본 발명에 따라 PE 및 LSU 사이의 예시적인 메모리 상호 작용의 순서도를 도시한다.
이하의 상세한 설명에서, 다양한 상세한 설명들은 본 개시의 완전한 이해를 제공하기 위하여 제시된다. 그러나 이러한 상세한 설명 없이도 개시된 양상들이 당업자에 의해 용이하게 구현될 수 있음은 잘 이해될 것이다. 다른 예들에서, 잘 알려진 방법들, 절차들, 구성들, 및 회로들은 본 명세서에 개시된 본 발명을 모호하게 하지 않기 위해 상세히 설명되지 않는다.
본 상세한 설명 전체에 걸쳐 "일 실시 예" 또는 "실시 예"로의 참조는 실시 예와 관련되어 설명된 특정한 특징, 구조, 또는 특성이 본 명세서에 개시된 적어도 하나의 실시 예에 포함될 수 있다는 것을 의미한다. 따라서, 본 상세한 설명 전체에 걸쳐 다양한 장소들에서의 "일 실시 예에서" 또는 "실시 예에서" 또는 "일 실시 예에 따라" (또는 유사한 의미를 갖는 다른 구절들) 구절들의 출현들은 모두 반드시 동일한 실시 예를 지칭하는 것이 아닐 수 있다. 또한, 특정한 특징들, 구조들, 또는 특성들은 하나 이상의 실시 예들에서 임의의 적합한 방식으로 결합될 수 있다. 이와 관련하여, 본 명세서에서 사용된 바와 같이, "예시적인" 단어는 "예시, 실례, 또는 도시를 제공함"을 의미한다. "예시적인" 것으로서 본 명세서에 설명된 임의의 실시 예는 다른 실시 예보다 반드시 선호되거나 유리한 것으로 해석되어서는 안된다. 또한, 본 명세서의 문맥에 따라, 단수의 용어는 해당 복수의 형태들을 포함할 수 있고, 복수의 용어는 해당 단수의 형태를 포함 할 수 있다. 본 명세서에 도시되고 논의된 (구성 요소 도해들을 포함하는) 다양한 도면들은 단지 예시적인 목적을 위한 것이고, 실제 척도로 그려진 것은 아니라는 점에 유의해야 한다. 유사하게, 다양한 파형들 및 타이밍도들이 단지 예시적인 목적을 위해 도시된다. 예를 들어, 일부 요소들의 치수들은 명확성을 위해 다른 요소들에 비해 과장될 수 있다. 또한, 적절하게 고려되는 경우, 참조 번호들은 대응하는 및/또는 유사한 요소들을 나타내기 위해 도면들 사이에서 반복되었다.
본 명세서에서 사용된 용어는 단지 특정한 예시적인 실시 예들을 설명하기 위한 것이고, 청구된 본 발명을 한정하려고 의도되는 것은 아니다. 본 명세서에서 사용된 바와 같이, 단수의 형태들은 문맥이 명백하게 다르게 지시하지 않는 한 복수의 형태를 포함하는 것으로 의도된다. "포함" 및/또는 "포함하는" 용어들은, 상세한 설명에서 사용될 때, 명시된 특징들, 정수들, 단계들, 연산들, 요소들, 및/또는 구성 요소들의 존재를 명시하나, 하나 이상의 다른 특징들, 정수들, 단계들, 연산들, 요소들, 및/또는 구성 요소들, 및/또는 그들의 그룹들의 존재 또는 추가를 불가능하게 하지 않는 것이 더 이해될 것이다. 본 명세서에서 사용된 "제 1", "제 2" 등의 용어들은 선행하는 명사들의 라벨(label)들로 사용되고, 그렇게 명백하게 정의되지 않는 한 임의의 유형의 순서(예를 들어, 공간적, 시간적, 논리적 등)를 암시하지 않는다. 또한, 동일하거나 또는 유사한 기능을 갖는 부분들, 구성 요소들, 블록들, 회로들, 유닛들, 또는 모듈들을 지칭하기 위해 둘 이상의 도면들에 걸쳐 동일한 참조 번호들이 사용될 수 있다. 그러나, 이러한 사용은 도시의 간소화 및 논의의 용이함을 위해서만 위한 것이다; 이는 그러한 구성 요소들 또는 유닛들의 구성 또는 구조적 세부 사항이 모든 실시 예들에 걸쳐 동일한 것을 의미하지 않거나 또는 이러한 공통으로 참조된 부분들/모듈들이 본 명세서에 개시된 특정한 실시 예들의 교시들을 구현하는 유일한 방법이라는 것을 의미하지는 않는다.
다르게 정의되지 않는 한, 본 명세서에서 사용된 (기술적인 그리고 과학적인 용어들을 포함하는) 모든 용어들은 본 발명이 속한 기술 분야의 당업자에 의해 일반적으로 이해되는 동일한 의미를 갖는다. 예를 들어, 본 명세서에서 사용된 “mod”는 “모듈로(modulo)”를 의미한다. 일반적으로 사용되는 사전들에 정의된 용어들은 관련 기술의 문맥에서 그들의 의미와 일치하는 의미를 갖는 것으로서 해석되어야 하며 그리고 본 명세서에서 명백하게 정의되지 않는 한 이상화되거나 또는 지나지게 형식적인 뜻으로 해석되지 않아야 할 것이 더 이해될 것이다.
본 명세서에서 사용된 대로, “모듈(module)” 용어는 제공하도록 모듈과 관련되어 본 명세서에서 설명된 기능을 제공하도록 구성된 소프트웨어, 펌웨어(firmware), 및/또는 하드웨어의 임의의 조합을 나타낸다. “소프트웨어” 용어는, 본 명세서에서 설명된 임의의 구현에 적용된 대로, 소프트웨어 패키지(software package), 코드, 및/또는 명령 집합 도는 명령들로서 구현될 수 있다. “하드웨어” 용어는, 본 명세서에서 설명된 임의의 구현에 적용된 대로, 예를 들어, 개별의 혹은 임의의 조합의, 하드와이어드 회로(hardwired circuitry), 프로그래머블 회로(programmable circuitry), 상태-머신 회로(state-machine circuitry), 및/또는 프로그래머블 회로에 의해 실행되는 명령들을 저장하는 펌웨어를 포함할 수 있다. 모듈들은, 집합적으로 또는 개별적으로, 소프트웨어, 펌웨어, 및/또는 집적 회로(integrated circuit; IC), 시스템 온 칩(system on-chip; SoC) 등과 같으나 이에 제한되지 않는 더 큰 시스템의 일부를 형성하는 하드웨어로서 구현될 수 있다.
본 명세서에서 개시된 본 발명은 스키드 버퍼들(skid buffers)및/또는 가능할 수 있는(enablable) 플립-플롭들(flip-flops)을 사용하지 않고 비정지(non-stalling; 여기서, “비정지” 용어는 “비정체”, “비지연”, “비스톨링” 등으로도 지칭될 수 있음) 주요 프로세스(process)를 실행하는 PE(processing element)를 포함하는 GPU 시스템을 제공한다. 잠재적으로 알려지지 않거나 알 수 없는 대기시간(latency)을 포함할 수 있는 비정지 주요 프로세스의 모든 양상들은 비정지 프로세스의 외부에서 실행될 수 있고, 그렇게 함으로써 비정지 방식으로 잠재적으로 알려지지 않거나 알 수 없는 대기시간을 효과적으로 처리한다.
[0002] 일 실시 예에 있어서, GPU 시스템은 상대적으로 큰 SRAM(static random access memory)를 통해 잠재적으로 정지되는(stalling) 두 번째 프로세스(혹은 보조 프로세스)와 함께 데이터를 교환하는 비정지 중심 엔진(non-stalling central engine)을 포함할 수 있다. 비정지 중심 엔진은 비정지 주요 프로세스가 SRAM 내에서 데이터를 생성하고 저장할 수 있도록 동적으로 SRAM을 어드레싱(addressing)하는 PE를 포함할 수 있다. 잠재적으로 정지되는 두 번째 프로세스는 SRAM에 접근하여 알려지지 않거나 알 수 없는 대기시간을 갖는 동작들을 위한 저장된 데이터에 대해 추가적인 기능들을 수행할 수 있다. 따라서, 본 명세서에 개시된 GPU 시스템의 효율적인 저장 구조는 비정지 주요 프로세스 내의 동작들을 이행하는데 사용될 수 있는 입력들을 허용하나, 그러나 두 번째 프로세스가 잠재적으로 정지 가능한 양상들을 완료할 수 있는 이러한 시간까지 저장 구조 내에서 생성되고 유지될 수 있는 정지 가능한 양상들을 가질 수 있다.
추가로, PE의 비정지 특성들은 정지하는 파이프라인을 포함하는 종래의 그래픽 PE에 비해 PE가 더 적은 칩 면적을 사용하고 더 적은 전력을 소모하도록 구성되게 한다. 즉, SRAM을 통해 데이터를 교환하는 비정지 주요 프로세스의 구성은 최소한의 저장 공간을 사용하는 상대적으로 저전력인 GPU 시스템을 제공한다. SRAM과 같은 저장소를 제조하는데 사용되는 현재 기술은, 종래의 GPU들에서 사용될 수 있는 플립-플롭들과 같은 저장소를 제조하는 것과 비교하여, 면적 및 전력 측면에서 좀 더 효과적인 상대적으로 큰 SRAM을 허용한다. 추가로, 본 명세서에 개시된 대로, 더 적은 수의 상대적으로 큰 SRAM들을 사용하는 것은 더 많은 수의 상대적으로 작은 SRAM들을 사용하는 것에 비해 비용 효율이 더 높은데 이는 내부 SRAM 구조들이 더 많은 수의 상대적으로 작은 SRAM들보다 더 적은 수의 상대적으로 큰 SRAM들에 걸쳐서 더 효율적으로 분할될 수 있기 때문이다.
일 실시 예에 있어서, PE는, 본 명세서에서 벡터 레지스터 파일(vector resister file; vRF)로 지칭되고, PE에 의해 실행되는 비정지 프로세스에 의해 방출되는(emit) 데이터를 보유(hold)할 수 있는, 상대적으로 큰 SRAM과 연결될 수 있다. 데이터는 ISA(instruction set architecture)의 명시적 방출 명령에 응답하여 비정지 프로세스로부터 방출될 수 있거나 또는 데이터가 PE를 떠나도록 야기할 수 있는 임의의 다른 명령의 일부로서 암시적으로 방출될 수 있다. 방출되는 특정한 데이터는 vRF의 일부인 인식 가능한 방출 버퍼(emit buffer) 내에 포함될 수 있다. 프로그래밍 관점에서 보면, 방출 버퍼를 사용하는 것은 명시적 명령 슬롯(slot)이 사용되지 않으므로 효율적일 수 있고, 그렇게 함으로써 추가 프로그램 페치(fetch) 에너지 및 대기시간과 관련된 오버헤드(overhead)를 제거하고, 프로그램 저장 공간이 감소한다.
일 실시 예에 있어서, GPU 시스템은 비정지 방식으로 동작할 수 있는 쉐이더 코어 엔진(shader core engine) 그리고 데이터 입출력을 위해 플립-플롭 뱅크들(banks)을 사용하지 않고 비정지 쉐이더 코어 엔진의 외부에서 정지할 수 있고 실행될 수 있는 임의의 동작들을 제공할 수 있다. 쉐이더 코어 엔진은 코어 내 동작들이 항상 동일한 개수의 사이클들을 사용하도록 구성될 수 있다. 쉐이더 코어 엔진에 의해 처리되는 모든 큰 데이터는 SRAM 기반의 레지스터 파일들 내에 남아 있고 그리고 특정한 레지스터 파일의 관리는 컴파일(compile) 시간에서의 레지스터 파일 구성의 다양한 최적화들을 수행할 수 있는 쉐이더-프로그램 컴파일러(shader-program compiler), 및 동작 동안 레지스터들에 대한 정확한 주소들을 제공할 수 있는 하나 이상의 런타임 시퀀서들(run-time sequencer)의 조합일 수 있다. SRAM 기반 레지스터 파일들을 통한 데이터의 교환은 유연할 수 있고 SRAM 기반 레지스터 파일들 내의 레지스터 파일 할당과 관련되는 최소한의 컴파일러 지식을 포함할 수 있다. 그래서, 메시지 내의 모든 확장된 부분들을 포함하는 전체 큰 데이터 메시지를 옮기는 것과 대조적으로, 본 명세서에서 개시된 본 발명은 작은 설명, 또는 작업 지시가 정지 가능한 엔진으로 전송되는 큰 메시지의 부분들을 찾을 위치를 나타내는 (값에 의한 것 보다는(by-value)) 참조 호출(call-by-reference) 프로세스를 기본적으로 제공한다.
그래픽 어플리케이션에 의해 제시되는 정확한 순서로 쉐이더 프로그램의 모든 명령들을 명시적으로 실행하는 대신에, 본 명세서에 개시된 본 발명은 동작들(현대 GPU의 범용 프로세서 부분에서의 컴파일된 명령들)이 순서대로 실행되도록 허용하거나 또는 동작의 임의의 양상이 알 수 없는 대기시간 양상을 포함하면(예를 들어, 일부 외부 리소스(resource)에 의존) 추후 처리를 위해 동작이 대기열(queue)에 배치되게 야기할 수 있다. 따라서, 본 명세서에서 개시된 본 발명은 메모리 입출력(즉, 텍스처(texture) 및 속성 페치들) 및 코어 외부의 다른 그래픽 동작들과 같은, 대기열 내에 배치된 동작들을 처리하는 정지 가능한 보조 프로세싱 유닛을 효율적인 비정지 코어에 제공하는 작은 집합의 명령들을 위한 효율적인 디커플링(decoupling) 기술을 제공한다. 명령 동작들이 어플리케이션이 제공하는 순서로 물리적으로 실행되지 않지만, 명령 동작들은 정지할 수 있는 명령들이 분리된 대기열들에서 실행되는 순서대로 논리적으로 남아있다.
본 명세서에서 개시된 GPU 시스템의 일 실시 예에 있어서, 쉐이더를 위한 범용 프로세싱은 하나 이상의 PE 클러스터들(PE clusters; PECs)로 그룹화될 수 있는 하나 이상의 PE들에 의해 수행될 수 있다. 본 명세서에서 사용되는 PE는 비정지 방식으로 명령 스트림들(streams)을 실행할 수 있는 일반 프로세서를 나타낸다. 본 명세서에서 사용되는 PEC는 병렬 프로세싱 어레이를 형성하는 다수의 PE들을 나타낸다. 일 실시 예에 있어서, PEC당 4개 PE들이 있을 수 있다. 다른 실시 예에 있어서, PEC당 PE들의 개수는 PEC당 4개 PE들과 상이할 수 있다. 각 사이클에 대해, PE는 스레드들의 집합 내의 각 스레드, 또는 워프(warp) 상에서 동일한 명령을 처리한다. 고성능을 위해, PE는 다중 스레드 머신(multiple-thread machine)일 수 있다. 일 실시 예에 있어서, PE는 SIMT(single-instruction-multiple-thread) 엔진일 수 있다.
본 명세서에서 사용되는 스레드는 명령들을 실행할 수 있는 제어의 지점을 나타낸다. 본 명세서에서 사용되는 트레이스(trace)는 비정지 연속적인 순서대로 실행되는 명령들의 집합을 나타낸다. 트레이스는 실행하기 위한 하나 이상의 사이클들을 사용할 수 있다. 예를 들어, 하나의 사이클은 트레이스 내의 각 명령으로 지정될 수 있다. 각 스레드의 활성 상태는 실행 마스크(execution mask) 내의 해당 비트에 의해 제어될 수 있다. 본 명세서에서 사용되는 워프는 복수의 스레드들의 집합이고, 워프는 사이클 내에서 실행되는 모든 스레드들을 나타낼 수 있다.
PE 상에서 실행되는 프로그램은 하나 이상의 트레이스들을 포함할 수 있고 LSU(load-store unit)와 같은 외부 정지 가능한 유닛을 사용할 수 있다. 본 명세서에서 사용되는 LSU는 로드들(loads), 저장들(stores)과 같은 정지 가능한 동작들 그리고 텍스처 접근들(texture accesses) 또는 수치연산 보조프로세서들(math co-processors) 등과 같은 공유된 리소스들의 사용과 같으나 이에 한정되지는 않는 다른 잠재적으로 정지 가능한 연산들을 처리하는 프로세싱 유닛을 나타낸다. 하나 이상의 LSU들은 각 PEC와 관련될 수 있다.
도 1은 본 명세서에 개시된 본 발명에 따른 GPU 시스템(100)의 예시적인 실시 예를 도시한다. GPU 시스템(100)은 컨트롤러 유닛(controller unit, 101), PEC(102), GPU 시스템(100)의 다른 유닛들(103), 및 PEC(102)와 다른 유닛들(103) 사이의 통신 구조(communication fabric, 104)를 포함할 수 있다. 컨트롤러 유닛(101)은 PEC(102) 및 다른 유닛들(103)과 연결되어 GPU 시스템(100)의 동작에 대한 전반적인 제어를 제공할 수 있다. 다른 유닛들(103)은 텍스처 유닛(texture unit), 레스터라이저 유닛(rasterizer unit), 이미지 버퍼 유닛, 선험적 연산 유닛(transcendental operation unit), 공유된 메모리, 수치연산 보조프로세서 유닛(math co-processor unit), 레벨 1 캐시, 보간 속성 유닛(interpolating attribute unit), 및 네트워크 온 칩(network on chip; NoC)과 같으나, 이에 제한되지는 않는, 정지 가능한 유닛들을 포함할 수 있다.
PEC(102)는 작업 벡터 생성자(work vector constructor, 105), 하나 이상의 PE들(106), 하나 이상의 LSU들(107), 및 시퀀서(sequencer, 108)를 포함할 수 있다. PEC(102)는 임의의 개수의 PE들(106)을 포함할 수 있으나, 도 1에 도시된 대로, PEC(102)는 4개 PE들(106)을 포함할 수 있다. 상대적인 프로세싱 요구들에 따라, 하나의 LSU(107)는 다수의 PE들(106)을 제공할 수 있고, 그렇게 함으로써 전체 면적 및 저장 요구들을 감소시킨다. PEC(102)는 임의의 개수의 LSU들(107)을 포함할 수 있으나, 도 1에 도시된 예시적인 실시 예에서, PEC(102)의 2개 PE들(106)은 하나의 LSU(107)를 사용할 수 있다. 작업 벡터 생성자(105), PE들(106), LSU들(107), 및 시퀀서(108) 중 하나 이상이 모듈들로서 구현될 수 있다.
각 PE(106)는 벡터 레지스터 파일(vector register file; vRF, 109) 및 스칼라 레지스터 파일(scalar register file; sRF, 110)을 포함할 수 있다. 본 명세서에서 사용되는 vRF는 스레드 당 저장소를 제공함으로써 PE(106)를 지원하는 상대적으로 큰 메모리를 나타내고, PE(106) 및 PE(106)와 관련된 LSU(107)에 의해 일반적으로 접근 가능할 수 있다. 본 명세서에서 사용되는 sRF는 스레드 실행 마스크들과 같으나, 이에 제한되지는 않는, 스칼라 데이터 저장소를 제공함으로써 PE(106)를 지원하는 메모리를 나타낸다. 일반적으로 vRF(109)는 sRF(110)보다 훨씬 더 클 수 있다. 추가로, vRF(109) 및 sRF(110)는 워프가 리소스들을 기다릴 수 있어서 하나 이상의 워프들이 계속 진행할 수 없으면 효율을 최대화하기 위해 PE(106) 상에서 실행되는 복수의 워프들 사이의 전환을 허용하는 충분한 저장소를 제공하도록 구성될 수 있다. 일 실시 예에서, vRF(109) 및 sRF(110)는 SRAM으로부터 형성될 수 있다.
작업 벡터 생성자(105)는 하나 이상의 PE들(106) 및 시퀀서(108)와 연결된다. 작업 벡터 생성자(105)는 PEC(102)에 의해 처리되는 스레드들에 들어가는 작업 아이템들을 모으도록 동작한다. 그래픽 맥락에서, 작업 아이템들은 작업될 픽셀들 또는 정점들(vertices)을 포함할 수 있으나, 이에 제한되지는 않는다.
시퀀서(108)는 명령이 정지 가능한 양상을 포함하는지 판별하기 위해 PEC(102)에 의해 실행되는 프로그램 명령들을 분석하는 로직을 포함할 수 있는 TotIP 파서(top of the instruction pipeline parser, 108a; 또는 명령 파이프라인 파서의 상부, 여기서 파서는 분석기로도 지칭될 수 있음)를 포함할 수 있고, 그렇다면, TotIP 파서(108a)는 본 명세서에서 작업 지시(work order)로서 지칭되고 LSU(107) 내 작업 지시 호퍼(work-order hopper, 111) 내에 저장될 수 있는 메시지를 생성한다. 본 명세서에서 사용되는 작업 지시는 (vRF(109) 및/또는 sRF(110) 내의) 방출 버퍼의 위치 및 방출 버퍼 내 데이터 상에서 수행될 수 있는 하나 이상의 동작들(즉, 데이터 처리(data manipulation))을 포함할 수 있는 명령 패킷(packet)일 수 있다.
PE(106)는 워프의 스레드들 각각이 정지 가능하지 않은 워프를 형성하는 복수의 스레드들을 처리하도록 동작할 수 있다. PE(106)가 창안할 수 있는 많은 메시지들은 GPU 시스템(100)의 스레드 병렬 속성으로 인해 클 수 있다. 따라서, PE(106)는 대량의 대용량의 데이터 생산자일 수 있고 관련된 LSU(107)는 큰 데이터를 라우팅(routing)할 수 있고, 몇몇 경우들에서, 데이터가 캐시로 및/또는 캐시로부터 접근 효율성들을 향상시키기 위해 합쳐질 수 있는 로드 또는 저장을 위해 주소들의 어레이를 포함할 수 있는 것과 같이, 데이터 “인 플라이트(in flight)” 상에서 동작할 수 있다. PE(106) 및 LSU(107) 사이의 상호 작용은 본질적으로 대량의 데이터를 전송하고 저장하는 에너지 및 오버헤드 측면에서의 비용을 최소화할 수 있도록 vRF(109) 및 sRF(110)를 통할 수 있다. PE(106)에 의해 생성되는 큰 데이터는 다른 유닛(103)에 의해 사용될 수 있을 때까지 일부 vRF(109) 및/또는 sRF(110)에 남아 있다. LSU(107)은 PE들(106)의 vRF들로의 전용 인터페이스를 포함할 수 있고, 그리고/또는 PE SRAM으로의 읽기/쓰기 접근 포트들을 사이클 스틸(cycle steal)할 수 있다.
워프는 공간 차원 및 시간 차원에서 스레드들을 관리하도록 구성될 수 있다. 도 2는 공간 차원에서 8개 스레드들 및 시간 차원에서 4개 스레드들로서 구성된 32개 스레드들(201)의 SIMT 그룹핑(grouping)을 포함하는 워프(200)의 예시적인 실시 예를 도시한다. 4개 사이클들에 걸쳐 병렬로 동작하는 8개 스레드들은 도 2에 도시된 시간/공간을 걸쳐 32개 단위의 작업을 완수한다. 8개 폭의 특성의 실행은 PE들(106)의 8개 레인(lane)들, 즉 병렬의 8개 산술 논리 유닛들(arithmetic logic units)에 의해 처리될 수 있다. 시간 차원에서 4개 스레드들은 계산 단위 파이프라인에서 4개 시스템-클럭 비트들(beats)로서 관리될 수 있다. 4개 비트(beat) 구성은 본 명세서에서 Pass로서 지칭될 수 있다. 본 명세서에서 개시된 본 발명은 임의의 개수의 워프들 및 vRF(109) 및 sRF(110) 내 임의의 개수의 레지스터 파일들을 지원할 수 있음이 이해되어야 한다.
워프 내의 각 스레드는 스레드가 처리되는 독립적인 리소스들 및 데이터를 가질 수 있고, 따라서 특히 데이터가 부동 소수점 값들이면 워프에 대한 스레드 데이터의 양이 커질 수 있다. 예를 들어, 32개 32-비트(bit) 값들은 명령이 스레드의 임의의 데이터를 호출할 때마다 1k-비트의 데이터를 형성한다. 넓은 폭의 워프는 PE(106)의 내부 그리고 외부 유닛과 통신할 때의, 즉, 도 1의 다른 유닛(103)의 동작들에 사용될 수 있다.
도 1을 다시 참조하면, PE(106)와 LSU(107) 사이의, 즉, 데이터를 생성하는 PE(106) 및 데이터 상에서 라우팅하고 동작하는 LSU(107) 사이의 작업(labor)의 분할에 더해, 데이터가 생성되는 시점과 데이터가 LSU(107)에 의해 처리되는 시점 사이에 지연이 있을 수 있다. LSU(107)가 PEC(102)의 다른 PE(106)로 순간 점유되거나, 또는 그 반대로 다른 유닛(103)으로부터의 응답을 기다려서 지연되면, 지연은 거의 0에서 상당히 긴 시간까지일 수 있다. LSU(107) 내 큰 버퍼를 갖는 대신에, PE에서 생성된(PE-produced) 큰 데이터는 PE(106)의 vRF(109) 내에서 논리적으로 형성된 서브 버퍼 내에서 유지될 수 있다. 이러한 서브 버퍼는 본 명세서에서 방출 버퍼(300, 도 3)로서 지칭될 수 있다. 방출 버퍼(300)는 ISA 내의 명시적 방출 명령 때문에 또는 암시적으로 데이터를 PE(106)에서 떠나도록 야기하는 임의의 다른 명령의 일부 때문이든, PE(106)에 의해 방출되는 데이터를 보유할 수 있다. PE(106)는 방출 버퍼(300)에 쓰는 위치와 LSU(107)가 방출 버퍼(300)로부터 읽을 수 있는 위치를 계산할 수 있다.
LSU(107)는 PE(106)로부터 PE(106)의 외부에 있는 시스템(100)의 나머지로의 데이터의 분배를 관리한다. 일 실시 예에 있어서, LSU(107)는 본 명세서에서 작업 지시 호퍼(100)로서 지칭되는 가변 깊이의 대기열(variable-depth queue)을 포함할 수 있다. 본 명세서에서 사용되는 작업 지시 호퍼는 비정지 엔진(즉, PE들(106))에서 GPU 시스템(100)의 정지 가능한 엔진 부분으로 작업 지시들을 전달하는데 사용될 수 있는 입력 대기열 구조를 나타낸다. 일 실시 예에 있어서, 작업 지시 호퍼(111)의 깊이는 16으로 설정될 수 있다. 다른 실시 예들에 있어서, 작업 지시 호퍼(111)의 깊이는 16과 상이할 수 있다.
작업 지시 호퍼(111)는 vRF(109)보다 더 작은 저장소일 수 있으나, 주 PE 실행 엔진에 부정적으로 영향을 미치지 않으면서 작업 지시 명령들의 백그라운드(background) 실행을 지원할 수 있다. 작업 지시 호퍼(111)의 실제 차원들은 완전히 유연할 수 있다. TotIP(108a)에 의해 쓰여지는 작업 지시들은 LSU(107)의 작업 지시 호퍼(111)로 배치되고 도착 순서대로 처리될 수 있으나, 유발되는 PE 명령들과는 비동기적으로 처리될 수 있다. 즉, LSU(107)는 작업 지시들이 작업 지시 호퍼(111) 내에서 대기열로 정리되는 것과 동일한 순서로 작업 지시 호퍼(111) 내의 작업 지시들을 처리할 수 있다. 그렇지 않으면, LSU(107)는 하나 이상의 PE(106)를 제공할 수 있으면, LSU(107)는 순차 순환 대기 방식(round-robin) 또는 다음으로 제공하는 어느 작업 지시/PE를 선택하는 중재 방식을 이용할 수 있다.
LSU(107)를 포함하는 프로세스의 일부는 명령을 분석하고 작업 지시를 LSU(107) 내의 작업 지시 호퍼(111)로 전송하는 시퀀서(108) 내 TotIP 파서(108a)와 함께 시작한다. 일 실시 예에 있어서, 시퀀서(108)에서 LSU(107)의 작업 지시 호퍼(111)로의 경로 내 대기시간은 작업 지시에 의해 작업될 데이터를 생성하는 PE(106)가 포함하는 임의의 연산들이 이용 가능할 수 있도록 충분히 길 수 있다.
표 1은 vRF(109) 및/또는 sRF(110) 내의 데이터를 처리하는데 사용될 수 있는 최소한의 정보를 제공하는 예시적인 4개 필드 32 비트 작업 지시의 일 실시 예를 제공한다. 표 1은 32 비트 작업 지시의 예시적인 구성을 제시한다. 첫 번째 필드([31:24] 비트들)는 작업 지시를 선택하거나 식별하는데 사용될 수 있고 다음 [23:15] 비트들은 한정자들(modifiers)을 작업 지시로 제공할 수 있다. 그 다음 [14:7] 및 [6:0] 필드들은 PE의 vRF 및 sRF 내의 데이터를 각각 접근하는데 사용될 수 있다. LSU(107)에 의한 작업 지시의 처리 동안에, 마스크들 및 다른 데이터는, 예를 들어, 적절히 작업 지시를 실행하고 작업 지시의 결과들을 적절한 레지스터 파일(들)로 되돌려주는데 필요할 수 있다.
[31:24] 8 비트 작업 지시 유형
[23:15] 9 비트 작업 지시 특정한 필드
[14:7] 8 비트 vRF 위치
[6:0] 7 비트 sRF 위치
도 3은 본 명세서에 개시된 본 발명에 따른 방출 버퍼(300)의 예시적인 실시 예를 도시한다. 방출 버퍼(300)는 PE(106)의 vRF(109)를 형성하는 레지스터들의 집합 내에 위치하는 연속적인 레지스터 위치들일 수 있고 워프에 할당된다. PE(106)에 대한 vRF(109)는 특정한 워프를 위해 특정한 vRF 공간이 어디에 위치하는지를 나타내는 WARPid.RFbase 레지스터에 포함되는 정보에 기초하여 공간들의 집합으로 나누어질 수 있다. WARPid.RFbase 레지스터는 시퀀서(108) 내에서 유지될 수 있다. 일 실시 예에 있어서, 시퀀서(108)가 제어하는 PE당 이들 레지스터들 각각의 사본이 있다. 따라서, vRF(109)는 복수의 방출 버퍼들(300)을 포함하도록 구성될 수 있다. 특정한 방출 버퍼(300)는, 예를 들어, WARPid.RFbase 레지스터의 내용(contents)에 WARPid.EMITbase 레지스터의 내용을 더한 것에 기초하여 위치될 수 있고 접근될 수 있다. WARPid.EMITbase 레지스터는 시퀀서(108) 내에서 유지될 수 있다. 엔트리들이 방출 버퍼에 더해지는 대로 (TotIP 파서(108a)에 의해 판별된 대로), 시퀀서(108)는 WARPid.EMITbase 레지스터를 증가시킨다. 일 실시 예에서, 방출 버퍼(300)의 수명은 트레이스의 길이와 동일할 수 있다. 따라서, 방출 버퍼(300) 내의 데이터는 하나의 트레이스 내에서 생성되고 소비될 수 있다.
도 3에 도시된 바와 같이, vRF(109)는 하나 이상의 워프들 각각에 할당되는 레지스터들(R0, R1, …)의 배열을 포함한다. 도 3에 단지 워프들(301a-301c)만이 도시되었으나, vRF(109)는 임의의 개수의 워프들을 포함할 수 있는 것이 이해되어야 한다. 각 워프(301)는, 예를 들어, 32개 스레드들을 포함하도록 구성될 수 있으며, 이는 도 2에 도시된 예시적은 워프와 유사할 수 있다.
방출 버퍼(300) 내의 데이터는 LSU(107)의 작업 지시 호퍼(111)로 전송되는 작업 지시와 직접적으로 연관된다. 좀 더 구체적으로, 방출 버퍼(109) 내의 데이터는 PE(106)에 의해 방출되는 큰 벡터 값들을 포함할 수 있고, 해당 작업 지시는 방출 버퍼(300) 내의 데이터와 관련되는 특정한 요청을 포함할 수 있다. 예를 들어, 쉐이더 프로그램의 명령들을 실행하는 동안에, PE(106)에서 정지 가능한 유닛(103)으로 전달되는 데이터가 있으면, 전달되는 데이터는 PE(106)에 대한 vRF(109) 내의 방출 버퍼(300)에 넣어질 수 있다(deposit). 방출 버퍼로 방출되는 데이터를 야기하는 ISA 레벨 명령들의 정확한 리스트는 설계 시점, 즉, 합성(synthesis) 시점에서 판별될 수 있거나, 런타임 유지 표(run-time maintained table)에서 표로 작성될 수 있다. 예시적인 명령들의 리스트는 표 2로 제공된다. 어느 경우에나, 런타임 동안, 예를 들어, 명령이 시퀀서(108) 내의 TotIP 파서(108a)에 의해 분석될 때마다 명령이 PE(106) 내에서 완전히 실행되었는지 또는 명령이 또한 추가의 정지 가능한 프로세싱을 위한 LSU(107) 내의 대기열로 정리될 수 있는 명령의 부분을 포함할 수 있는지를 판별할 수 있다.
도 3은 트레이스 실행이 예를 들어, 텍스처 좌표(coordinate) 버퍼, 64비트 주소를 사용하는 출력 메모리 접근, 및 출력 레지스터(o#)로의 상이한 두 개 쓰기들을 명시하는 명령을 실행하는 예시적인 상황을 도시할 수 있다. 본 명세서에서 사용된 텍스처 좌표 버퍼(texturecoordinate buffer;TCBUF)는 텍스처 좌표들을 수신하고 저장하는데 사용될 수 있는 원거리 저장 요소(즉, vRF에서 떨어진)를 나타낸다. 도 3에서 실행되는 트레이스는 방출 버퍼(300)의 첫 번째 엔트리에 배치되는 R1 × R2 곱을 야기할 수 있는 FMUL TCBUF2, R1, R2 와 같은 명령을 또한 포함할 수 있다. FMUL 명령 내 TCBUF 목적지의 아래 첨자 “2”는 LSU(107)의 작업 지시 호퍼(111)로 전송될 수 있는 작업 지시의 일부일 수 있다. LSU(107)가 작업 지시를 수행하면, LSU(107)는 방출 버퍼(300)의 위치에 접근하기 위해 vRF(109)로의 요청을 생성하고 그리고, 예를 들어, 연산이 텍스처 좌표 버퍼 로드(load) 연산이고 그리고 접근되는 TEX.TA.TCBUF가 숫자 2인 것을 나타내는 TEX.TA.TCBUF(즉, 텍스처 유닛 내 어드레싱 서브 모듈 내 텍스처 좌표 버퍼)를 명시하는 태그(tag)와 함께, TEX.TA.TCBUF로 쓰여지는 데이터의 벡터는 방출 버퍼(109)로서 식별된 vRF(109) 내의 위치에서 사용 가능하다. “로드” 또는 “저장” 동작으로서의 동작에 대한 참조는 제공되는 유닛 또는 메모리에 관한 것임에 유의해야 한다. 즉, LSU(107) 또는 PE(106)의 관점에서, 동작은 저장 동작으로서 간주될 수 있지만, 텍스트 버퍼 유닛 엔티티(test bufferunit entity)로 들어가는 쓰기는 “TCBUF 로드”와 같은 “로드”로 지칭된다.
도 3에 도시된 예시적인 상황을 계속하면, 이후의 트레이스의 명령들에서, 64비트 주소를 사용하는 메모리 접근이 있을 수 있다. 이것은 PE(106)에 의해 방출 버퍼(300)로 쓰여지는 두 개 32비트 주소 부분들을 야기할 수 있다. 큰 벡터 데이터(즉, 주소들)은 vRF(108) 내에서 유지되고, 그리고 LSU(107)가 LSU(107)의 작업 지시 호퍼(111) 내의 작업 지시들에 기초하여 vRF(109)로의 요청함에 따라 이 메모리 연산은 LSU(107)로 전달될 수 있다.
이후에도 여전히 트레이스 내에, 출력 레지스터들(즉, o#), 예를 들어, 도 3에 도시된 특정한 상황으로 이어지는 명령 FADD O3, R14, R6을 참조하는 명령들이 있을 수 있다. 방출 버퍼(300)는 o[3]로 쓰여지는 벡터 값을 포함할 수 있고, 작업 지시는 상수 “3”을 갖는다. 그 후에, 두 번째 출력 레지스터 쓰기가 발생하고 두 번째 벡터는 방출 버퍼(300)에 쓰여질 수 있고 상응하여, 두 번째 o# 작업 지시는 LSU(107)의 작업 지시 호퍼(111)로 전송된다. 현재 쉐이더 유형의 쉐이더 프로그램은 PEC.WSQ.TotIP 레지스터에 의해 표시될 수 있다. PEC.WSQ.TotIP 레지스터는 시퀀서(108) 내에 위치할 수 있다. 쉐이더 유형은 다른 목적들 중, o# 연산을 어떻게 처리할지 구별하는데 사용될 수 있다. 출력 레지스터 쓰기가 공유된 메모리를 위한 것인 경우 o#이 프론트 엔드(front-end) 쉐이더를 위한 것인지 여부 또는 출력 레지스터 쓰기가 레스터라이저 서브 시스템을 위한 것인 경우 o#이 픽셀 쉐이더를 위한 것인지 여부는 LSU(107)로 전송되는 작업 지시 내에서 또한 표시될 수 있다.
표 2는 방출 버퍼(300)와 관련된 동작들을 포함할 수 있는 텍스처 좌표 버퍼로 쓰는 경우와 같은, ISA 명령들 (또는 변형 명령들)의 예시적인 리스트를 제공한다. 표 2는 예시적인 명령들 및 방출 버퍼 동작들을 포함하는 명령 변형들을 제공한다. 표 2에서 “명시 형태”라는 제목의 두 번째 열은 방출 버퍼(300)가 특정한 명령에 사용될 수 있는지 여부를 판별하기 위해 시퀀서(109)가 TotIP 파서(108a)에 의해 검사될 수 있는 필드(들)이 무엇인지 나타낸다. 몇몇 경우들에 대해, 명령 연산 코드(opcode)의 검사는 충분할 수 있지만, 다른 경우들에서 판별이 더 검증될 수 있다.
명령 명시 형태 주석 (Notes)
TCBUF ISA 명령의 목적지 필드 TCBUF를 명시
SAMPLE ISA 명령 SAMPLE ISA 명령 조우
SFU ISA 명령들 1/x, 1/sqrt(x), sin(x), cos(x), log2(x), exp2(x) 중 어느 것
F*.64 한정자들을 갖는 ISA 명령 2배 정밀도 부동 소수점 연산들
IMUL ISA 명령 정수 곱셈은 PEC.RCU.DPU에 의해 처리
o# (FE) ISA 명령의 목적지 필드 프론트 엔드 쉐이더 출력 레지스터는 공유된 레지스터로 쓰기
o# (PS) ISA 명령의 목적지 필드 픽셀 쉐이더 출력 레지스터는 레스터 서브 시스템으로 쓰기
LD (L1C) 한정자들을 갖는 ISA 명령 캐시 가능한 저장소에서 로드
ST (L1C) 한정자들을 갖는 ISA 명령 캐시 가능한 저장소로 저장
LD (SM) 한정자들을 갖는 ISA 명령 계산 쉐이더와 같이 공유된 메모리로부터 로드
ST (SM) 한정자들을 갖는 ISA 명령 계산 쉐이더와 같이 공유된 메모리로 저장
ATOMIC (L1C (Level 1 cache)) 한정자들을 갖는 ISA 명령 캐시 가능한 저장으로의 ATOMIC 연산들
ATOMIC (SM) 한정자들을 갖는 ISA 명령 공유된 메모리로의 ATOMIC 연산들
Attribute load 한정자들을 갖는 ISA 명령 Vertex 쉐이더에 대한 속성 로드
CLD ISA 명령 Vertex 속성 어드레스 생성기를 통해 상수 로드 명령 처리
EMIT ISA 명령 방출 버퍼를 채우기 위한 범용 메커니즘, 디버그 또는 버그 해결을 위한 용도로도 가능.
INTERP_* ISA 명령들 IPA 당김(pull)
IMGLDA ISA 명령 [이미지] 로드 주소
IMGLD ISA 명령 이미지 로드
IMGST ISA 명령 이미지 저장
표 2의 두 번째 열로부터, 명령이 방출 버퍼 동작을 포함하는지 여부를 검출하는 것은 주/부 연산 코드 이상의 비트를 디코딩(decoding)하는 것을 포함할 수 있고 명령어 내 추가 필드들이 검사될 필요가 있을 수 있다. 예를 들어, 2배 정밀도 부동 소수점 연산(double-precision floating point operation)만이 방출 버퍼 동작들을 유발하므로 2배 정밀도 부동 소수점 연산은 단일정밀도 부동 소수점 연산(single-precision floating-point operation)과 구별될 수 있고, 반면에 단일정밀도 부동 소수점 연산은 시퀀서(108)에 의한 어떠한 추가 동작들 없이 그리고 LSU(107)에 의한 어떠한 상호 작용 없이 PE(106) 내에서 계산될 수 있다. 2배 정밀도 또는 단일정밀도 부동 소수점 연산들을 구별하는 것은 명령의 정밀 유형 필드를 검사하는 것을 포함할 수 있다.
TotIP 파서(108a)가 표 2에 나타난 경우들을 어떻게 검출하는지의 추가 세부 사항은 표 3에서 제공된다. 표 3은 방출 버퍼를 유발하는 시나리오들을 식별하기 위한 추가 세부 사항을 제공한다. 표 3의 맨 오른쪽에 있는 2개 열들은 각각 특정한 명령이 처리될 때 방출 버퍼(300)에서 소비되는 벡터 및 스칼라 레지스터들의 개수를 일 실시 예로 나타낸다. 도 4는 예시적인 방출 버퍼(400)가 TCBUF 관련된 명령의 처리의 일부로서 사용되는지를 판별할 때 TotIP 파서(108a)가 예시적인 TCBUF 명령을 검사할 수 있는 예시적인 필드(401)를 도시한다.
명령 방출 버퍼 경우를 검출하기 위해 검사하는 필드들 취할 동작들 vRF 개수 sRF
개수
TCBUF load ISA의 목적지 필드는 TCBUF를 지정: WSQ.TotIP는 sRF 및 vRF 위치들을 PEC.PE로 제공하고, 작업 지시를 LSU로 전송. 0/1 1
SAMPLE ISA 명령 WSQ.TotIP는 sRF 위치를 PEC.PE로 제공하고, 작업 지시를 LSU로 전송. 0/0 2
SFU.RCP/RSQ/LOG2/EXP2 한정자를 갖는 ISA 명령들 WSQ.TotIP는 sRF 및 vRF 위치들을 PEC.PE로 제공하고, 작업 지시를 LSU로 전송. 0/1
또는 1/0
1
SFU.SIN/COS 한정자를 갖는 ISA 명령들 사전 처리들 0/1 1
FMTC.64 한정자를 갖는 ISA 명령(일진 64비트 연산) WSQ.TotIP는 두 개 vRF 값들을 절대값으로 변환하고 이들을 작업 지시 내의 PEC.LSU로 전송. 방출 버퍼 연산은 없음. (피연산자들은 소스 피연산자 및 목적지.) 2/0 1
FMUL.64 한정자를 갖는 ISA 명령(이진 64비트 연산) WSQ.TotIP는 세 개 vRF 값들을 절대값으로 변환하고 이들을 작업 지시 내의 PEC.LSU로 전송. 방출 버퍼 연산은 없음. 4/0 1
FMAD.64 한정자를 갖는 ISA 명령(삼진 64비트 연산) WSQ.TotIP는 네 개 vRF 값들을 절대값으로 변환하고 이들을 작업 지시 내의 PEC.LSU로 전송. 방출 버퍼 연산은 없음. 6/0 1
IMUL ISA 명령
o# (FE) ISA 명령의 목적지 필드. PEC.WSQ는 쉐이더 트레이스(Shader a Trace)가 속한 유형을 알고 o# 지정자를 검출 (목적지의 MS비트들 == 2'b01) WSQ.TotIP는 <너무 복잡하고 이 IDF의 범위를 넘어서 본 명세서에 포함될> 설명을 따름. 0/1 1
o# (PS) ISA 명령의 목적지 필드(프론트 엔드 쉐이더와 동일) WSQ.TotIP는 <너무 복잡하고 이 IDF의 범위를 넘어서 본 명세서에 포함될> 알고리즘을 따름. 가변
LD (L1C) 한정자들을 갖는 ISA 명령―ISA CFS 참조 WSQ.TotIP는 주소에 대한 방출 버퍼의 공간을 예약 0/1 1
ST (L1C) 한정자들을 갖는 ISA 명령―ISA CFS 참조 WSQ.TotIP는 주소에 대한 방출 버퍼의 공간을 예약 1/1 1
LD (SM) 한정자들을 갖는 ISA 명령―ISA CFS 참조 WSQ.TotIP는 주소에 대한 방출 버퍼의 공간을 예약 0/1 1
ST (SM) 한정자들을 갖는 ISA 명령―ISA CFS 참조 WSQ.TotIP는 주소에 대한 방출 버퍼의 공간을 예약 1/1 1
ATOMIC (L1C) 한정자들을 갖는 ISA 명령―ISA CFS 참조 1/1
또는
2/1
1
ATOMIC (SM) 한정자들을 갖는 ISA 명령―ISA CFS 참조 1
Attribute load 한정자들을 갖는 ISA 명령―ISA CFS 참조
CLD ISA 명령 일정한 로드 2/0 1
EMIT ISA 명령 EMIT 버퍼에 데이터를 입력하고 일반 메시지를 LSU로 전송. 디버그 및 다른 명령들 내의 임의의 문제들을 위한 해결책으로 사용됨. 0/1
INTERP_* ISA 명령 WSQ.TotIP는 명령을 BFI(bit-field insertion)로 모핑(morphing)하기 위해 EMIT 버퍼, PEC.PE를 예약 0/1
LDA 해당 없음 로드/저장 연산을 제안할 수 있는 이름에도 불구하고, LDA(Load Address)는 PEC.PE 내에서 완벽하게 수행됨. 0/0 0
IMGLDA 3개 서브 경우들 IMGLDA/IMGLD/IMGST 중 구별하기 위한 한정자들을 갖는 ISA 명령 WSQ.TotIP는 sRF 위치를 PEC.PE로 제공, 작업 지시를 LSU로 전송. (WSQ로의 SAMPLE 명령처럼 보임) PEC.LSU는 이후 같은 sRF 위치를 재사용하여 i# 리소스에서 검색되고 후속 IMGLD 명령에 필요한 포맷 변환 정보를 저장. 명령은 한번 계산된 주소들이 저장될 vRF 위치를 명시. 2/0 1
IMGLD 0/0 1
IMGST 0/1 1
타이밍의 이유들로 인해, TotIP 파서(108a)는 명령들을 PE(106)로 전송하기 전에 트레이스 내의 어떠한 명령들도 수정하지 않을 수 있으나, 대신에 적절하면 PE(106)가 명령의 목적지 필드 비트들 대신에 파이프라인 내에서 나중에 사용할 수 있는 대체 목적지 필드 비트들을 제공할 수 있다.
표 3에 나타난 vRF 및 sRF 엔트리들의 개수를 판별하기 위한 일반 규칙들은 다음의 고려 사항들을 포함한다. 방출 버퍼의 할당을 위해, 두 개의 EmitVrf 및 EmitSrf 카운터들이 있을 수 있고, 가까운 명령에 따라 소스 또는 목적지 벡터 당 0, 1, 또는 2 vRF 엔트리들이 할당될 수 있다. vRF 할당 포인터는 할당된 vRF 엔트리들의 개수만큼 감소할 수 있다. 4개 sRF 엔트리들은 헤더, 실행 마스크, 및 다양한 다른 필드들을 포함하도록 할당될 수 있다. 각 sRF 엔트리의 정확한 차원들, 그리고 현재 엔트리들의 개수는 설계 고려 사항에 의해 좌우될 수 있다. 첫 번째 sRF 블록은 S63..S60으로부터 할당될 수 있고, 4개의 단위로 하향 연장된다. 명령의 완료 시, 작업 지시는 TotIP 파서(108a)에서 LSU(107)의 작업 지시 호퍼(111)로 전달될 수 있다. LSU는 sRF 및 vRF 엔트리들을 읽을 수 있다. 다른 실시 예에 있어서, 벡터 및 스칼라 레지스터 파일들로의 어드레싱은 하향 카운팅(counting)을 진행할 수 있고, 따라서 트레이스의 시작에서, EmitVrf는 vRFSize - 1 일 수 있고, EmitSrf는 60..63일 수 있다. vRF 공간은 방출 버퍼 내의 엔트리들로서 사용되지 않는 경우, 컴파일러는 할당되지 않은 공간을 사용하여 영구 데이터를 보유할 수 있고, 그렇게 함으로써 GPU 시스템(100)에 필요한 총 메모리 공간을 줄일 수 있다.
방출 버퍼는 sRF 내 저장된 헤더들의 개수에 의해 근본적으로 제한될 수 있다. 일 실시 예에서, 8개 sRF 헤더들이 허용될 수 있다. 컴파일러는 헤더들에 의해 덮어 쓰여질 sRF 엔트리들 내에 영구 데이터를 두지 않음으로써 더 많은 헤더들을 사용할 수 있다. 특히, 2배 정밀도 단위로 전송될 수 잇는 예시적인 명령 FMAD.64는 단지 하나의 sRF 헤더만을 사용할 수 있으나, 각 vRF는 32비트 엔트리들의 벡터인 3개 64비트 피연산자들을 제공하기 위해 6개 vRF 엔트리들을 사용할 수 있고, 따라서 피연산자들을 형성하기 위해 쌍으로 사용된다. 소비되는 sRF 헤더들의 최대 개수는 ISA 명령 당 하나일 수 있다.
방출 버퍼는 원거리 유닛{선험적, 2배 정밀도, 텍스처 주소 계산들, …}을 위해 피연산자들을 제공할 수 있다. 원거리 연산은 하나 또는 두 개의 피연산자들을 각각 포함하는 sin(x) 또는 A*B와 같은, 하나 이상의 피연산자들이 필요할 수 있다. “동적” 소스 피연산자들은 방출 버퍼 내에 새로이 할당된 엔트리들로 복사될 수 있다. 동작 피연산자는 스칼라 레지스터, 상수 스크래치(scratch) 레지스터, 방출 버퍼 위치로 이동될 수 있는 즉각적인 값(ISA 레벨의 즉각적인 값을 저장하는 것과 같은) 또는 전달된 값(즉, 중간 단계로서 vRF에 저장되지 않고 직접적으로 사용될 수 있는 이전 명령의 출력); 또는 로컬 임시 레지스터로부터 올 수 있는 피연산자일 수 있다. 이러한 각 피연산자는 방출 버퍼 엔트리를 소비할 수 있다. 방출 버퍼 엔트리는 방출 버퍼 내의 하나 {Q, H, S} 또는 두 개 {D} 벡터들을 차지할 수 있다. 본 명세서에 사용된 대로, 첫 글자들 Q, H, S, 및 D는 쿼터(quarter), 하프(half), 싱글(single), 및 더블(double) 폭을 각각 나타내고 8비트, 16비트, 32비트, 그리고 64비트 양들을 각각 나타낸다.
일 실시 예에 있어서, 방출 버퍼를 사용하는 각 명령은 헤더로서 역할을 하는 하나의 방출 버퍼 헤더(4개 sRF 엔트리들)를 소비할 수 있다. 명령이 원거리 유닛 내에서 계산될 수 있으면, vRF 소스 피연산자는 방출 버퍼를 차지하지 않으나, 그들의 원래 위치(들)에서 직접적으로 접근될 수 있다. 이러한 방출 버퍼 내의 비엔트리(non-entry)는 예를 들면, 실행 마스크 등을 위한 헤더의 역할을 하는 4개 sRF 엔트리들을 여전히 소비할 수 있다. 명령이 방출 버퍼를 통해 결과를 전달하면, 결과는 비원거리 계산 명령에 의해 생성될 수 있으므로, 따라서 소스 방출 유닛 사용 및 목적지 방출 유닛 사용들은 직교할 수 있다(orthogonal). 명령이 방출 버퍼를 통해 결과를 전달하면, 방출 버퍼 엔트리에 하나 또는 두 개 vRF 엔트리들 및 네 개 sRF 엔트리들이 할당될 수 있다. 계산된 결과는 할당된 엔트리 내에 배치될 수 있다. 스칼라 레지스터 파일은 LSU(107)가 데이터를 적절한 시점에 목표가 된 기능 유닛으로 전송하도록 설정될 수 있다.
도 5는 본 명세서에 개시된 본 발명에 따라 PE(106) 및 LSU(107) 사이의 예시적인 메모리 상호 작용의 순서도(500)를 도시한다. 도 5의 단계(501)에서, TotIP 파서(108a, 도 1)는 예를 들어, 실행되고 있는 쉐이더 프로그램의 명령 스트림(stream)의 일부인 명령을 분석하고, 명령의 동작의 일부로서 명령이 시스템의 비정지 프로세스에만 또는 시스템의 비정지 프로세스 및 정지 가능한 프로세스 모두로 전달되어야 하는지를 판별한다. 이 예시에서, TotIP 파서(108a)는 명령이 비정지 프로세스 및 정지 가능한 프로세스 모두로 전달되어야 하는 것으로 판별하고, 단계(502)에서, 실행을 위해 vRF(109)로의 쓰기와 같은 명령은 PE(106)로 전송되고, 단계(503)에서 작업 지시가 LSU(107)의 작업 지시 호퍼(111)로 전송된다. 작업 지시는 명령에 의해 동작될 방출 버퍼의 위치와 관련된 정보를 포함할 수 있다. 저장 연산을 제외한 모든 연산들에 필수적일 수 있는 관련된 반환 값을 가질 수 있는 임의의 연산을 위해, 작업 지시 호퍼(111) 내의 작업 지시는 또한 데이터가 되돌아갈 곳, 즉, PE의 vRF(109) 내의 데이터가 되돌아갈 곳에 관한 작은 포인터를 또한 포함할 수 있다.
작업 지시를 형성하는 동작의 일부는 또한 PE(106)의 일부 기능을 포함할 수 있다. LSU(107)의 작업 지시 호퍼(111)로 입력되는 작업 지시를 야기할 수 있는 명령들의 예시들은 로드, 그러나 이에 한정되지는 않는, 메모리로부터의 로드, 메모리로의 저장, 원자(atomic) 메모리 연산, 데이터를 텍스처 좌표 버퍼로 보내기, 필터링(filtering)된 텍스처 샘플을 요청하기, 선험적 연산, 로그(log) 및 안티로그(antilog) 함수들, 역수, 역수 제곱근, 속성 보간기로부터의 읽기, 및 2배 정밀도 연산들을 포함할 수 있다. 일부 연산들은 텍스처 및 속성 보간기를 참조하는 연산들과 같은, 그래픽 특정일 수 있으나, 비정지 PEC(102) 외부에 있을 수 있는 임의의 정지 가능한 유닛(103)은 작업 지시 호퍼 내의 작업 지시를 통해 접근될 수 있음이 이해되어야 한다.
예를 들어, 레지스터(R2) 내의 값의 사인(sine)을 계산하고 결과를 레지스터(R3)에 배치하는데 사용될 수 잇는 SIN R3, R2 명령을 고려한다. 선험적 연산들과 같은, 연산들은 예를 들어, 정지 가능한 타이밍 프로필(profile)을 제시하는 공유된 수치연산 보조프로세서(즉, 유닛(103))의 PE(106) 외부에서 수행될 수 있다. TotIP 파서(108a)는 SIN 연산을 디코딩하고 작업 지시를 생성하고 동시에 PE(106)로 지시를 제공한다. PE(106)는 피연산자 범위 감소와 같은, 임의의 로컬 프로세싱에 책임이 있을 수 있고, 또한 선험적 연산들의 벡터가 수행될 때 보조 프로세서에 의해 사용될 수 있는 관련 있는 정보를 저장하는 데에도 책임이 있을 수 있다. GPU 아키텍처(100)의 고도의 병렬 특성은 PE가 동작하는 스레드들의 전체 벡터에 대해 SIN 명령이 주어지는 것을 제공한다. 따라서, PE(106), LSU(107), 및 선험적 유닛(미도시, 103) 모두는 SIN 명령이 조우된 시점에서 실제로 특정한 벡터 상태에 접근할 수 있어야 한다. 이것은 어느 스레드들이 활성화되었는지 또는 그렇지 않은지를 나타내는데 사용될 수 있는 마스크들, 레지스터 재명명(renaming)과 같은 기능들에 대한 임의의 가상화 포인터들, 및 임의의 다른 모드들(즉, 정밀, 포맷 변환, 등)과 같은 필드들을 포함하되, 이에 한정되지는 않는, 다른 정보를 포함한다. 모든 필드들은 LSU(107) 내 대기열에 저장되기에 비싸고 다루기 힘든 대량의 데이터를 형성한다. 대신에, 작은 포인터는 벌크 데이터(bulk data)가 제자리에서 유지되는 PE(106) 내의 vRF(109) 및 sRF(110)의 큰 로컬 저장소로의 참조로서 유지된다.
이후 단계(504)에서, LSU(107)는 작업 지시 호퍼(111) 내에서 작업 지시들을 처리하고 단계(505)에서 PE(106)의 vRF(109) 및/또는 sRF(11) 내의 데이터에 접근한다. 특정한 연산들은 1진법일 수 있고 단일 메모리 접근을 포함할 수 있는 반면에 ATOMIC 비교 및 교체(swap) 연산과 같은 다른 연산들은 3개 피연산자들 및 해당 개수의 접근들을 포함할 수 있다. 일 실시 예에서, 각 피연산자의 사이즈가 1024비트(32개 32비트 피연산자들)일 수 있어도 피연산자들은 8비트 값을 이용하여 작업 지시 내에서 참조될 수 있고, 그러므로 면적 및 전력 소모의 절감은 상당히 클 수 있다.
LSU(107)에 의해 동작되는 vRF(109) 및/또는 sRF(110) 내에 저장된 데이터는 단계(506)에서 접근될 수 있고 단계(507)에서 명령에 따라 추가 처리를 위해 분석되고, 포맷되고 및/또는 목적지 유닛(103)으로 라우팅(혹은 전송)됨으로써 처리될 수 있다. 처리가 단계(507)에서 완료되면, 단계(508)에서 의존성 클리어 메시지(dependency clear message)가 TotIP 파서(180a)로 전송된다. 단계(507)에서, 유닛(103)이 접근되어야 하면, 접근 유형은 단계(509)에서 판별된다. 접근이 쓰기이면, 단계(510)에서, 쓰기가 실행된다. 접근이 읽기이면, 단계(511)에서 읽기가 실행되고, 단계(513)에서 vRF(109) 내의 저장을 위해 단계(512)에서 포맷된다.
다른 예로서, 컴퓨터 그래픽에서 표준 동작일 수 있는 텍스처 맵(texture map)에 접근하기 위한 준비의 일부로서 텍스처 좌표 버퍼에 데이터를 쓰는 PE(106) 내에서 실행되는 예시적인 쉐이더 프로그램을 고려한다. 텍스처 유닛(103)은 다양한 프로세싱 엔진들 간에 공유될 수 있는 주 서브 시스템일 수 있고 정지할 수 있으므로, 알 수 없는 대기시간들을 제공할 수 있다. 그러므로, 텍스처 유닛은 비정지 PE(106)에 대한 외부 유닛으로서 LSU(107)를 통해 접근될 수 있다. 텍스처 좌표 버퍼에 접근하는 것은 다음의 시퀀스를 포함할 수 있다. TotIP 파서(108a)는 TCBUF로의 참조를 디코딩할 수 있고, 방출 버퍼 주소를 PE(106)로 제공할 수 있고, LSU(107)의 작업 지시 호퍼(111) so에 저장될 작업 지시를 생성할 수 있다. PE(106)는 텍스처 유닛(103)으로 라우팅될 데이터를 계산하고 TotIP 파서(108a)에 의해 제공된 방출 버퍼 어드레스에 대응하는 레지스터들 내에 데이터를 저장한다. LSU(107)는 작업 지시를 수신하고 처리하고, 그리고 텍스처 유닛(103)으로 데이터를 쓰기 위해 vRF(109) 내에 방출 버퍼로의 읽기 요청을 한다. 텍스처 유닛(103)는 데이터를 수신하고 데이터를 텍스처 유닛(103)의 메모리에 쓴다.
일 실시 예에 있어서, 텍스처 좌표 버퍼로의 쓰기들은 명령들 내의 특정한 TCBUFn 목적지 필드를 이용하여 쉐이더 프로그램 내에서 코딩(coding)될 수 있다. 예를 들어, 예시적인 명령 FMUL TCBUF R1, R2은 컴파일러에 의한 소프트웨어 제어에 따라 텍스처 버퍼(TCBUF)로의 로드를 초기화하도록 동작할 수 있다. 런타임에서(혹은 실행 시), 명령들은 분석될 수 있고 특정한 TCBUFn 목적지 필드의 존재가 검출될 수 있다. 응답으로, TotIP 파서(108a)는 명령 내의 TCBUF가 PE(106)의 vRF(109) 내의 실제 위치, 즉, 방출 버퍼(300) 내의 다음의 사용 가능한 공간으로 교체되어야 하는지를 판별할 수 있다. 추가로, 이 위치에 대응하는 작업 지시는 LSU(107)의 작업 지시 호퍼(111)로 입력될 수 있다. PE(106)는 Remit이 간단한 예시적인 계산 Remit = WARPid.EMITbase[7:0]에 의해 채워질 수 있는 값인 FMUL Remit R1, R2와 같은 수정된 명령을 수신할 수 있다. 추가로, TotIP 파서(108a)는 또한 실행 마스크가 저장될 수 있음을 나타내는 한 쌍의 신호들과 sRF(11) 내에 실행 마스크가 저장되는 주소를 PE(106)에 제공할 수 있다. TotIP 파서(108)는 데이터를 TCBUF로 움직이기 위한 연산 코드를 포함할 수 있고 TCBUF에 대한 어드레스를 공급할 수 있는 LSU(107)에 대한 작업 지시를 생성할 수 있다.
본 예시에서, 작업 지시 처리 동안, LSU(107)가 텍스처 유닛(103)에 접근하면(즉, 텍스처 유닛(103)이 임의의 주어진 순간에서 사용 가능하거나 그렇지 않고 변화하는 대기시간들 및 처리량들을 제공할 수 있다), LSU(107)는 LSU(107)가 32개 32비트 fp32 워드들 또는 64개 16비트 fp16 하프-워드들 중 어느 하나; 그리고 기능적으로 정확하고 비활성 스레드들에 대한 TCBUF 값들을 업데이트하지 않음으로써 전력을 절감할 수 있는 활성 스레드들로만 처리를 제한하기 위해 텍스처 유닛에 의해 사용될 수 있는 실행 마스크 비트들을 포함하는 (일 실시 예에서, 256 비트들/사이클로서) 1024비트들의 데이터를 제공하는 메시지를 전송할 수 있다.
이 특정한 예시의 시퀀스는 PE의 관점에서 쓰기 전용 동작이다. 쉐이더 프로그램은 텍스처 좌표 버퍼로 쓰여지고, PE(106) 내의 비정지 시퀀스 외부의 어느 시간에, 이 동작은 완료된다. 이후, 쉐이더 프로그램이 텍스처 유닛으로부터 읽을 수 있을 때, 새로운 작업 지시가 생성되어 읽기를 요청할 수 있고 vRF(109)로 되돌아온 데이터가 쓰여질 주소를 제공할 수 있다.
당업자가 인식 할 수 있는 바와 같이, 본 명세서에서 설명된 혁신적인 개념들은 광범위한 어플리케이션들에 걸쳐 수정되고 변경될 수 있다. 따라서, 청구된 주제의 범위는 전술한 임의의 특정 예시적인 교시들에 제한되어서는 안되며, 대신에 다음의 청구 범위에 의해 정의된다.
100: GPU 시스템

Claims (25)

  1. 복수의 레지스터들을 포함하는 레지스터 파일 메모리;
    상기 레지스터 파일 메모리와 연결되고, 그래픽 어플리케이션의 비정지 방식으로 각각 처리되는 스레드(thread)들의 벡터의 적어도 하나의 스레드를 처리하고, 상기 레지스터 파일 메모리에 저장되고 있는 스레드들의 상기 벡터의 상기 적어도 하나의 스레드를 처리하는 PE(processing element)에 의해 사용되는 제 1 데이터 집합을 처리하고, 그리고 상기 적어도 하나의 스레드를 처리함으로써 생성되고 PE의 외부에 있는 제 1 정지 가능한(stallable) 로직 유닛으로 라우팅(routing)되는 상기 레지스터 파일 메모리의 상기 복수의 레지스터들의 제 1 사전에 결정된 집합 내에 제 2 데이터 집합을 저장하는 PE(processing element); 및
    상기 레지스터 파일 메모리와 연결되고, 상기 복수의 레지스터들의 상기 제 1 사전에 결정된 집합 내의 상기 제 2 데이터 집합을 접근하고, 상기 제 2 데이터 집합을 상기 제 1 정지 가능한 로직 유닛으로 라우팅하는 LSU(load-store unit)를 포함하되,
    상기 제 1 데이터 집합은 상기 레지스터 파일 메모리에 저장된 나머지 스레드들의 상기 벡터의 상기 적어도 하나의 스레드를 처리하는 상기 PE에 의해 사용되는 GPU(graphics processing unit).
  2. 제 1 항에 있어서,
    상기 LSU에 연결되고, 상기 PE에 의한 상기 그래픽 어플리케이션의 스레드들의 상기 벡터의 상기 적어도 하나의 스레드의 처리와 관련된 적어도 하나의 작업 지시 메시지를 저장할 수 있는 작업 지시 호퍼(work-order hopper)를 더 포함하되,
    상기 적어도 하나의 작업 지시 메시지는 상기 비정지 방식으로 처리되고, 정지 방식으로 처리되는 명령에 기반하고, 상기 제 1 정지 가능한 로직 유닛으로 라우팅되는 상기 제 2 데이터 집합을 저장하는 상기 복수의 레지스터들의 상기 제 1 사전에 결정된 집합의 제 1 위치를 포함하는 GPU.
  3. 제 2 항에 있어서,
    상기 적어도 하나의 작업 지시 메시지는 상기 제 1 정지 가능한 로직 유닛의 결과를 어디에 저장할지 나타내는 상기 레지스터 파일 메모리 내의 상기 복수의 레지스터들의 제 2 사전에 결정된 집합의 제 2 위치를 더 포함하는 GPU.
  4. 제 2 항에 있어서,
    상기 그래픽 어플리케이션의 스레드들의 상기 벡터의 상기 적어도 하나의 스레드의 명령이 상기 적어도 하나의 스레드를 상기 비정지 방식으로 처리하는 것과, 상기 제 2 데이터 집합을 상기 제 1 정지 가능한 로직 유닛으로 라우팅하는 연산을 포함하면 상기 적어도 하나의 작업 지시 메시지를 생성하는 명령 파이프라인 파서(parser)를 더 포함하는 GPU.
  5. 제 1 항에 있어서,
    상기 레지스터 파일 메모리는 벡터 레지스터 파일 메모리 및 스칼라 레지스터 파일 메모리를 포함하는 GPU.
  6. 제 1 항에 있어서,
    상기 PE는 상기 그래픽 어플리케이션의 스레드들의 복수의 벡터들 각각의 적어도 하나의 스레드를 더 처리하고, 스레드들의 각 벡터 내의 각 스레드는 비정지 방식으로 처리되는 GPU.
  7. 제 1 항에 있어서,
    복수의 레지스터 파일 메모리들, 복수의 PE들, 및 복수의 LSU들을 더 포함하고,
    상기 복수의 PE들의 각 PE는 해당 레지스터 파일 메모리에 연결되고, 상기 그래픽 어플리케이션의 스레드들의 대응하는 벡터의 적어도 하나의 스레드를 처리하고, 스레드들의 상기 대응하는 벡터 내 각 스레드는 비정지 방식으로 처리되고, 상기 해당 레지스터 파일 메모리에 저장되고 있는 스레드들의 상기 대응하는 벡터의 상기 적어도 하나의 스레드를 처리하는 각 PE에 의해 제 1 데이터 집합이 사용되고, 그리고 각 PE는 상기 PE에 대응하는 상기 레지스터 파일 메모리 내의 상기 복수의 레지스터들의 제 2 사전에 결정된 집합 내에 제 2 데이터 집합을 저장하고, 상기 제 2 데이터 집합은 스레드들의 상기 대응하는 벡터의 상기 적어도 하나의 스레드를 처리하는 상기 PE에 의해 생성되어 저장되고 상기 PE의 외부에 있는 제 2 정지 가능한 로직 유닛으로 라우팅되고; 그리고
    상기 복수의 LSU들의 각 LSU는 적어도 하나의 레지스터 파일 메모리에 연결되고, 각 LSU는 상기 LSU에 연결되고 상기 제 2 데이터 집합을 상기 제 2 정지 가능한 로직 유닛으로 라우팅하는 레지스터 파일 메모리 각각의 상기 복수의 레지스터들의 상기 제 2 사전에 결정된 집합 내 상기 제 2 데이터 집합을 접근하고,
    상기 제 1 데이터 집합은 상기 레지스터 파일 메모리에 저장된 상기 제 2 데이터 집합을 생성하기 위해 상기 PE에 의해 사용되는 GPU.
  8. 제 7 항에 있어서,
    상기 제 1 또는 상기 제 2 정지 가능한 로직 유닛은 텍스처 유닛, 레스터라이저(rasterizer) 유닛, 이미지 버퍼, 선험적 연산 유닛, 또는 수치연산 보조프로세서를 포함하는 GPU.
  9. 복수의 레지스터들을 포함하는 레지스터 파일 메모리;
    상기 레지스터 파일 메모리와 연결되고, 그래픽 어플리케이션의 비정지 방식으로 각각 처리되는 스레드들의 벡터의 적어도 하나의 스레드를 처리하고, 상기 레지스터 파일 메모리에 저장되고 있는 스레드들의 상기 벡터의 상기 적어도 하나의 스레드를 처리하는 PE(processing element)에 의해 사용되는 제 1 데이터 집합을 처리하는 PE(processing element);
    상기 그래픽 어플리케이션의 스레드들의 벡터의 상기 적어도 하나의 스레드의 명령이 상기 적어도 하나의 스레드를 상기 비정지 방식으로 처리하는 것과, 상기 적어도 하나의 스레드를 상기 비정지 방식으로 처리함으로써 생성되는 제 2 데이터 집합을 상기 PE의 외부에 있는 제 1 정지 가능한(stallable) 로직 유닛으로 라우팅(routing)하는 연산을 포함하면 상기 제 1 정지 가능한 로직 유닛으로 라우팅되는 상기 PE에 의해 처리되는 상기 제 2 데이터 집합이 저장되는 제 1 위치를 포함하는 작업 지시 메시지를 생성하는 명령 파이프라인 파서(parser); 및
    상기 작업 지시 메시지를 저장할 수 있고, 상기 작업 지시 호퍼(hopper) 메모리 내의 작업 지시 메시지를 수신하고, 그리고 상기 제 1 위치에서의 상기 제 2 데이터 집합을 상기 제 1 정지 가능한 로직 유닛으로 라우팅하는 LSU(load-store unit)를 포함하되,
    상기 제 1 데이터 집합은 상기 레지스터 파일 메모리에 저장된 나머지 스레드들의 상기 벡터의 상기 적어도 하나의 스레드를 처리하는 상기 PE에 의해 사용되는 GPU(graphics processing unit).
  10. 제 9 항에 있어서,
    상기 PE는 상기 그래픽 어플리케이션의 스레드들의 복수의 벡터들 각각의 적어도 하나의 스레드를 더 처리하고, 스레드들의 각 벡터 내 각 스레드는 비정지 방식으로 처리되는 GPU.
  11. 제 9 항에 있어서,
    상기 제 2 데이터 집합이 저장되는 상기 제 1 위치는 상기 레지스터 파일 메모리 내의 상기 복수의 레지스터들의 제 1 집합을 포함하는 GPU.
  12. 제 11 항에 있어서,
    상기 작업 지시 메시지는 상기 제 1 정지 가능한 로직 유닛의 결과를 저장하는 위치를 나타내는 상기 레지스터 파일 메모리 내의 상기 복수의 레지스터들의 제 2 사전에 결정된 집합의 제 2 위치를 포함하는 GPU.
  13. 제 11 항에 있어서,
    상기 레지스터 파일 메모리는 벡터 레지스터 파일 메모리 및 스칼라 레지스터 파일 메모리를 포함하는 GPU.
  14. 제 11 항에 있어서,
    복수의 레지스터 파일 메모리들, 복수의 PE들, 및 복수의 LSU들을 더 포함하되,
    상기 복수의 PE들의 각 PE는 해당 레지스터 파일 메모리에 연결되고, 상기 그래픽 어플리케이션의 스레드들의 대응하는 벡터의 적어도 하나의 스레드를 처리하고, 스레드들의 상기 대응하는 벡터 내 각 스레드는 비정지 방식으로 처리되고, 상기 해당 레지스터 파일 메모리에 저장되고 있는 스레드들의 상기 대응하는 벡터의 상기 적어도 하나의 스레드를 처리하는 각 PE에 의해 제 1 데이터 집합이 사용되고, 그리고 각 PE는 상기 PE에 대응하는 상기 레지스터 파일 메모리 내의 상기 복수의 레지스터들의 제 2 사전에 결정된 집합 내에 제 2 데이터 집합을 저장하고, 상기 제 2 데이터 집합은 스레드들의 상기 대응하는 벡터의 상기 적어도 하나의 스레드를 처리하는 상기 PE에 의해 생성되어 저장되고 상기 PE의 외부에 있는 제 2 정지 가능한 로직 유닛으로 라우팅되고; 그리고
    상기 복수의 LSU들의 각 LSU는 적어도 하나의 레지스터 파일 메모리에 연결되고, 각 LSU는 상기 LSU에 연결되고 상기 제 2 데이터 집합을 상기 제 2 정지 가능한 로직 유닛으로 라우팅하는 레지스터 파일 메모리 각각의 상기 복수의 레지스터들의 상기 제 2 사전에 결정된 집합 내 상기 제 2 데이터 집합을 접근하고,
    상기 제 1 데이터 집합은 상기 레지스터 파일 메모리에 저장된 상기 제 2 데이터 집합을 생성하기 위해 상기 PE에 의해 사용되는 GPU.
  15. 제 14 항에 있어서,
    상기 제 1 또는 상기 제 2 정지 가능한 로직 유닛은 텍스처 유닛, 레스터라이저(rasterizer) 유닛, 이미지 버퍼, 선험적 연산 유닛, 또는 수치연산 보조프로세서를 포함하는 GPU.
  16. 그래픽 어플리케이션을 처리하는 방법에 있어서:
    상기 그래픽 어플리케이션의 비정지 프로세스에서 각각 처리되는 스레드들의 벡터의 적어도 하나의 스레드를 처리함으로써 PE(processing element) 내에 제 1 데이터 집합을 생성하고, 레지스터 파일 메모리에 저장되고 있는 스레드들의 상기 벡터의 상기 적어도 하나의 스레드를 처리하는 상기 PE에 의해 사용되는 제 2 데이터 집합을 생성하는 단계;
    상기 PE에 연결된 레지스터 파일 메모리 내의 복수의 레지스터들의 제 1 사전에 결정된 집합 내에 상기 제 1 데이터 집합을 저장하는 단계;
    상기 레지스터 파일 메모리에 연결된 LSU(load-store unit)에 의해 상기 복수의 레지스터들의 상기 제 1 사전에 결정된 집합 내에 저장된 상기 제 1 데이터 집합을 접근하는 단계; 및
    상기 LSU에 의해 상기 제 1 데이터 집합을 상기 비정지 프로세스의 외부에 있는 정지 가능한 프로세스로 라우팅하는 단계를 포함하되,
    상기 제 1 데이터 집합은 상기 정지 가능한 프로세스로 라우팅되고, 상기 제 2 데이터 집합은 상기 레지스터 파일 메모리에 저장된 나머지 스레드들의 상기 벡터의 상기 적어도 하나의 스레드를 처리하는 상기 PE에 의해 사용되는 방법.
  17. 제 16 항에 있어서,
    상기 그래픽 어플리케이션의 상기 벡터의 상기 적어도 하나의 스레드의 명령이 상기 제 1 데이터 집합을 상기 정지 가능한 프로세스로 라우팅하는 연산을 포함하면 명령 파이프라인 파서(parser)에 의해 작업 지시 메시지를 생성하는 단계를 더 포함하되,
    상기 작업 지시 메시지는 상기 비정지 프로세스로 처리되고, 정지 방식으로 처리되는 명령에 기반하고, 상기 제 1 정지 가능한 로직 유닛으로 라우팅되는 상기 제 1 데이터 집합을 저장하는 상기 복수의 레지스터들의 상기 제 1 사전에 결정된 집합의 제 1 위치를 포함하는 방법.
  18. 제 17 항에 있어서,
    상기 작업 지시 메시지는 상기 정지 가능한 프로세스의 결과를 저장하는 위치를 나타내는 상기 레지스터 파일 메모리의 상기 복수의 레지스터들의 제 2 사전에 결정된 집합의 제 2 위치를 더 포함하는 방법.
  19. 제 16 항에 있어서,
    상기 레지스터 파일 메모리는 벡터 레지스터 파일 메모리 및 스칼라 레지스터 파일 메모리를 포함하는 방법.
  20. 제 16 항에 있어서,
    상기 그래픽 어플리케이션의 스레드들의 벡터의 상기 적어도 하나의 스레드를 처리하는 단계는 상기 그래픽 어플리케이션의 스레드들의 복수의 벡터들 각각의 적어도 하나의 스레드를 처리하는 단계를 포함하고, 스레드들의 각 벡터 내의 각 스레드는 비정지 프로세스로 처리되는 방법.
  21. 삭제
  22. 삭제
  23. 삭제
  24. 삭제
  25. 삭제
KR1020180023041A 2017-04-18 2018-02-26 저전력 구조에서 데이터를 유지하기 위한 시스템 및 방법 KR102502731B1 (ko)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201762486957P 2017-04-18 2017-04-18
US62/486,957 2017-04-18
US15/633,746 US10360034B2 (en) 2017-04-18 2017-06-26 System and method for maintaining data in a low-power structure
US15/633,746 2017-06-26

Publications (2)

Publication Number Publication Date
KR20180117031A KR20180117031A (ko) 2018-10-26
KR102502731B1 true KR102502731B1 (ko) 2023-02-22

Family

ID=63790035

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180023041A KR102502731B1 (ko) 2017-04-18 2018-02-26 저전력 구조에서 데이터를 유지하기 위한 시스템 및 방법

Country Status (4)

Country Link
US (1) US10360034B2 (ko)
KR (1) KR102502731B1 (ko)
CN (1) CN108734623B (ko)
TW (1) TWI764997B (ko)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10747711B2 (en) * 2018-03-20 2020-08-18 Arizona Board Of Regents On Behalf Of Northern Arizona University Dynamic hybridized positional notation instruction set computer architecture to enhance security
US11120603B2 (en) * 2019-06-18 2021-09-14 Samsung Electronics Co., Ltd. Heavy-weight/light-weight GPU shader core pair architecture
CN111124994B (zh) * 2019-11-29 2022-11-11 苏州浪潮智能科技有限公司 一种数据传输方法、装置、gpu及可读存储介质
KR20210092467A (ko) * 2020-01-16 2021-07-26 삼성전자주식회사 로컬 프로세서와 글로벌 프로세서를 포함하는 메모리 다이, 메모리 장치, 및 전자 장치
CN112199119B (zh) * 2020-10-21 2022-02-01 上海壁仞智能科技有限公司 向量运算装置
TWI819498B (zh) * 2022-02-18 2023-10-21 瑞昱半導體股份有限公司 記憶體共享電子電路系統以及能使用主機記憶體的外部裝置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5623650A (en) 1989-12-29 1997-04-22 Cray Research, Inc. Method of processing a sequence of conditional vector IF statements
US20060206692A1 (en) 2005-02-04 2006-09-14 Mips Technologies, Inc. Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor
US20160179542A1 (en) 2014-12-23 2016-06-23 Patrick P. Lai Instruction and logic to perform a fused single cycle increment-compare-jump

Family Cites Families (29)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2216307B (en) 1988-03-01 1992-08-26 Ardent Computer Corp Vector register file
WO1997013201A1 (en) 1995-10-06 1997-04-10 Advanced Micro Devices, Inc. Unified multi-function operation scheduler for out-of-order execution in a superscalar processor
US6895452B1 (en) 1997-06-04 2005-05-17 Marger Johnson & Mccollom, P.C. Tightly coupled and scalable memory and execution unit architecture
US6587941B1 (en) * 2000-02-04 2003-07-01 International Business Machines Corporation Processor with improved history file mechanism for restoring processor state after an exception
US6922414B1 (en) 2000-08-21 2005-07-26 Hewlett-Packard Development Company, L.P. Apparatus and method for dynamic command queue depth adjustment for storage area network nodes
US7251721B1 (en) 2001-11-05 2007-07-31 Verisilicon Holdings (Cayman Islands) Co. Ltd. Conditional link pointer register sets marking the beginning and end of a conditional instruction block where each set corresponds to a single stage of a pipeline that moves link pointers through each corresponding register of said register sets as instructions move through the pipeline
US7152152B2 (en) 2004-01-22 2006-12-19 International Business Machines Corporation Method of avoiding flush due to store queue full in a high frequency system with a stall mechanism and no reject mechanism
US7401206B2 (en) * 2004-06-30 2008-07-15 Sun Microsystems, Inc. Apparatus and method for fine-grained multithreading in a multipipelined processor core
US20080252652A1 (en) * 2007-04-13 2008-10-16 Guofang Jiao Programmable graphics processing element
US9250899B2 (en) * 2007-06-13 2016-02-02 International Business Machines Corporation Method and apparatus for spatial register partitioning with a multi-bit cell register file
US8174534B2 (en) * 2007-12-06 2012-05-08 Via Technologies, Inc. Shader processing systems and methods
US20090164758A1 (en) 2007-12-20 2009-06-25 Haertel Michael J System and Method for Performing Locked Operations
US8248422B2 (en) * 2008-01-18 2012-08-21 International Business Machines Corporation Efficient texture processing of pixel groups with SIMD execution unit
US7904700B2 (en) * 2008-03-10 2011-03-08 International Business Machines Corporation Processing unit incorporating special purpose register for use with instruction-based persistent vector multiplexer control
US9513905B2 (en) 2008-03-28 2016-12-06 Intel Corporation Vector instructions to enable efficient synchronization and parallel reduction operations
GB2470780B (en) 2009-06-05 2014-03-26 Advanced Risc Mach Ltd A data processing apparatus and method for performing a predetermined rearrangement operation
US8533438B2 (en) 2009-08-12 2013-09-10 Via Technologies, Inc. Store-to-load forwarding based on load/store address computation source information comparisons
US8514235B2 (en) * 2010-04-21 2013-08-20 Via Technologies, Inc. System and method for managing the computation of graphics shading operations
US9069664B2 (en) * 2010-09-24 2015-06-30 Nvidia Corporation Unified streaming multiprocessor memory
US8990602B2 (en) * 2010-12-21 2015-03-24 Intel Corporation Apparatus, method, and system for early deep sleep state exit of a processing element
CN103583040B (zh) * 2011-04-15 2017-03-15 欧朋软件爱尔兰有限责任公司 实时视频检测器
KR20130051821A (ko) 2011-11-10 2013-05-21 삼성전자주식회사 인터럽트 속도 지연이 개선된 코어 시스템 및 이의 벡터 레지스터 파일 데이터 전송방법
US9135077B2 (en) 2012-03-16 2015-09-15 Advanced Micro Devices, Inc. GPU compute optimization via wavefront reforming
US20150074353A1 (en) * 2013-09-06 2015-03-12 Futurewei Technologies, Inc. System and Method for an Asynchronous Processor with Multiple Threading
US9471307B2 (en) * 2014-01-03 2016-10-18 Nvidia Corporation System and processor that include an implementation of decoupled pipelines
US9817664B2 (en) * 2015-02-19 2017-11-14 Apple Inc. Register caching techniques for thread switches
US9804666B2 (en) * 2015-05-26 2017-10-31 Samsung Electronics Co., Ltd. Warp clustering
US10001822B2 (en) * 2015-09-22 2018-06-19 Intel Corporation Integrating a power arbiter in a processor
US10043232B1 (en) * 2017-04-09 2018-08-07 Intel Corporation Compute cluster preemption within a general-purpose graphics processing unit

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5623650A (en) 1989-12-29 1997-04-22 Cray Research, Inc. Method of processing a sequence of conditional vector IF statements
US20060206692A1 (en) 2005-02-04 2006-09-14 Mips Technologies, Inc. Instruction dispatch scheduler employing round-robin apparatus supporting multiple thread priorities for use in multithreading microprocessor
US20160179542A1 (en) 2014-12-23 2016-06-23 Patrick P. Lai Instruction and logic to perform a fused single cycle increment-compare-jump

Also Published As

Publication number Publication date
KR20180117031A (ko) 2018-10-26
CN108734623B (zh) 2023-11-28
US20180300131A1 (en) 2018-10-18
TWI764997B (zh) 2022-05-21
US10360034B2 (en) 2019-07-23
CN108734623A (zh) 2018-11-02
TW201903602A (zh) 2019-01-16

Similar Documents

Publication Publication Date Title
KR102502731B1 (ko) 저전력 구조에서 데이터를 유지하기 위한 시스템 및 방법
US20210397451A1 (en) Streaming engine with cache-like stream data storage and lifetime tracking
US11099933B2 (en) Streaming engine with error detection, correction and restart
US11573847B2 (en) Streaming engine with deferred exception reporting
KR101248318B1 (ko) 다수의 프로세서에 대한 다차원 스레드 그룹화
KR101239025B1 (ko) 다수의 프로세서들에서 데이터 병렬 컴퓨팅을 하기 위한 응용 프로그래밍 인터페이스들
US11604649B2 (en) Techniques for efficiently transferring data to a processor
US20130159628A1 (en) Methods and apparatus for source operand collector caching
US11068164B2 (en) Streaming engine with fetch ahead hysteresis
US8786618B2 (en) Shader program headers
US20200401526A1 (en) Streaming engine with early and late address and loop count registers to track architectural state
US11907717B2 (en) Techniques for efficiently transferring data to a processor
CN112749120A (zh) 将数据有效地传输至处理器的技术
KR20240025019A (ko) 니어 메모리 컴퓨팅을 사용한 복합 연산에 대한 원자성 제공
Liu et al. An Optimized GP-GPU Warp Scheduling Algorithm for Sparse Matrix-Vector Multiplication
US8669991B2 (en) Method macro expander
CN115526767A (zh) 指针解除引用技术

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