KR20220100891A - 산술 논리 장치 레지스터 시퀀싱 - Google Patents

산술 논리 장치 레지스터 시퀀싱 Download PDF

Info

Publication number
KR20220100891A
KR20220100891A KR1020227017671A KR20227017671A KR20220100891A KR 20220100891 A KR20220100891 A KR 20220100891A KR 1020227017671 A KR1020227017671 A KR 1020227017671A KR 20227017671 A KR20227017671 A KR 20227017671A KR 20220100891 A KR20220100891 A KR 20220100891A
Authority
KR
South Korea
Prior art keywords
operand
registers
operands
execution
cycle
Prior art date
Application number
KR1020227017671A
Other languages
English (en)
Other versions
KR102644951B1 (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 KR20220100891A publication Critical patent/KR20220100891A/ko
Application granted granted Critical
Publication of KR102644951B1 publication Critical patent/KR102644951B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • 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
    • G06F9/30014Arithmetic instructions with variable precision
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • 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
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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, 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Abstract

그래픽 처리 장치(GPU)[100]는 피연산자 레지스터 세트에 피연산자[106]의 제공을 시퀀싱하여, GPU가 처리 사이에 피연산자 레지스터들 중 적어도 하나를 공유하도록 한다. GPU는 배정밀도 연산들을 수행하도록 구성된 ALU들[116] 중 적어도 하나를 갖는 복수의 산술 논리 장치들(ALU들)[108]을 포함한다. GPU는 단정밀도 피연산자들을 저장하도록 구성된 피연산자 레지스터 세트를 더 포함한다. 배정밀도 연산들을 요청하는 복수의 실행 스레드들에 대해, GPU는 해당 피연산자들을 피연산자 레지스터들에 저장한다. 복수의 실행 사이클들에 걸쳐, GPU는 피연산자 레지스터 세트로부터 지정된 배정밀도 피연산자 레지스터로 피연산자들의 전송을 시퀀스한다. 각 실행 사이클 동안, 배정밀도 ALU는 배정밀도 피연산자 레지스터에 저장된 피연산자를 사용하여 배정밀도 연산을 실행한다.

Description

산술 논리 장치 레지스터 시퀀싱
프로세서는 프로세서를 대신하여 지정된 동작들을 수행하도록 특별히 설계되고 구성된 하나 이상의 처리 장치들을 사용한다. 예를 들어, 일부 프로세서들은 그래픽 및 벡터 처리 동작들을 수행하기 위해 그래픽 처리 장치(GPU)를 사용한다. 프로세서의 중앙 처리 장치(CPU)는 GPU에 명령들을 제공하고, GPU의 명령 프로세서(CP)는 명령들을 하나 이상의 연산들로 디코딩한다. 하나 이상의 산술 논리 장치들(ALU)과 같은 GPU의 실행 장치들은 그래픽 및 벡터 처리 동작들을 수행하는 동작들을 실행한다. ALU들은 피연산자 레지스터들을 사용하여 처리를 위한 피연산자들을 저장한다. 특히, 스레드가 GPU에서 실행될 때 스레드는 피연산자를 피연산자 레지스터에 저장하고 연산 코드 또는 기타 제어 정보를 ALU에 제공하여 ALU가 피연산자를 사용하여 실행하는 수학적 연산을 제어한다. 많은 수의 피연산자 레지스터들을 사용하면 GPU가 비교적 많은 수의 스레드들을 동시에 실행을 지원할 수 있다. 그러나, 이러한 많은 수의 피연산자 레지스터들은 전력 및 회로 영역을 포함하여 많은 양의 처리 리소스들을 소비한다.
본 개시는 첨부된 도면들을 참조함으로써 더 잘 이해될 수 있으며, 그 많은 특징들 및 이점들이 당업자에게 명백해질 수 있다. 다른 도면에서 동일한 참조 부호를 사용하는 것은 유사하거나 동일한 항목을 나타낸다.
도 1은 일부 실시예들에 따른 하나의 피연산자 레지스터 세트에서 다른 피연산자 레지스터 세트로 피연산자의 제공은 시퀀싱하도록 구성된 그래픽 처리 장치(GPU)의 블록도이다.
도 2는 일부 실시예들에 따른 도 1의 GPU의 레지스터에 피연산자의 제공을 예시하는 블록도이다.
도 3은 일부 실시예들에 따른 도 1의 GPU의 피연산자 레지스터들 및 해당 ALU들의 구성을 예시하는 블록도이다.
도 4는 일부 실시예들에 따른 도 3의 피연산자 레지스터들에서 피연산자 제공의 예시적인 시퀀싱의 일부를 예시하는 블록도이다.
도 5는 일부 실시예들에 따른 도 4의 예시적인 시퀀싱의 또 다른 일부를 예시하는 블록도이다.
도 6은 일부 실시예들에 따른 도 4의 예시적인 시퀀싱의 또 다른 일부를 예시하는 블록도이다.
도 7은 일부 실시예들에 따른 도 5의 예시적인 시퀀싱의 또 다른 일부를 예시하는 블록도이다.
도 1 내지 7은 그래픽 처리 장치(GPU)가 피연산자 레지스터 세트에 피연산자의 제공을 시퀀싱하여, GPU가 처리 사이에 피연산자 레지스터들 중 적어도 하나를 공유하도록 하는 기술을 예시한다. GPU는 복수의 산술 논리 장치들(ALU들) 중 적어도 하나가 배정밀도 연산들을 수행하도록 구성된 복수의 ALU들을 포함한다. GPU는 단정밀도(single precision) 피연산자들을 저장하도록 구성된 피연산자 레지스터 세트를 더 포함한다. 배정밀도 연산들을 요청하는 복수의 실행 스레드들에 대해, GPU는 해당 피연산자들을 피연산자 레지스터들에 저장한다. 복수의 실행 사이클들에 걸쳐, GPU는 피연산자 레지스터 세트로부터 지정된 배정밀도 피연산자 레지스터로 피연산자들의 전송을 시퀀스한다. 각 실행 사이클 동안, 배정밀도 ALU는 배정밀도 피연산자 레지스터에 저장된 피연산자를 사용하여 배정밀도 연산을 실행한다. 이러한 방식으로 레지스터들 사이에 피연산자들을 순차적으로 제공함으로써, GPU는 다수의 처리 블록들(예를 들어, 다수의 벡터 셰이더(shader) 프로세서)이 배정밀도 피연산자 레지스터를 공유할 수 있게 하여, 피연산자 레지스터들에 의해 소비되는 회로 영역과 전력을 줄인다.
도 1은 일부 실시예들에 따른 배정밀도 수학적 연산들을 위한 피연산자 제공의 시퀀싱을 지원하는 GPU(100)를 예시한다. 설명을 위해, GPU(100)는 전자 장치를 대신하여 태스크들을 수행하기 위해 명령어 세트(예를 들어, 컴퓨터 프로그램들)을 실행하는 프로세서의 일부라고 가정한다. 따라서, 다른 실시예들에서 GPU(100)는 데스크탑 컴퓨터, 랩탑 컴퓨터, 서버, 태블릿, 스마트폰, 게임 콘솔 등과 같은 전자 장치의 일부이다. 또한, GPU(100)를 포함하는 프로세서는 명령어 세트를 실행하는 중앙 처리 장치(CPU)를 포함한다고 가정한다.
GPU(100)는 CPU를 대신하여 지정된 동작들을 수행하도록 설계 및 제조된다. 특히, GPU(100)는 CPU를 대신하여 그래픽 및 벡터 처리 동작들을 수행한다. 예를 들어, 일부 실시예들에서, 명령어들을 실행하는 과정에서, CPU는 그래픽 및 벡터 처리 동작들과 관련된 명령들을 생성한다. CPU는 명령들을 GPU(100)에서 실행하기 위한 명령어 세트로 디코딩하기 위해 명령 프로세서(도시되지 않음)를 사용하는 GPU(100)에 명령을 제공한다.
명령어들의 실행을 용이하게 하기 위해, GPU(100)는, 각각의 SIMD 블록이 대응하는 연산 스레드를 실행하도록 구성된, 하나 이상의 단일 명령어 다수의 데이터(Single Instruction Multiple Data; SIMD) 블록들과 같은 복수의 계산 장치들을 포함한다. 일부 실시예들에서, GPU의 명령 프로세서는 CPU로부터 수신된 명령들을 디코딩하고, 명령들에 기초하여, SIMD 블록들에서 실행될 스레드 세트들을 생성 및 스케줄링한다. 각각의 SIMD 블록은 복수의 벡터 셰이더 프로세서들(VSP들)(예를 들어, VSP들(102, 103, 104))를 포함한다. 일부 실시예들에서, 각 SIMD 블록은 4개의 서로 다른 VSP들을 포함하므로, 4개의 서로 다른 스레드들의 동시 실행을 지원한다. 따라서, 각 계산 장치가 4개의 SIMD 블록들을 포함하고, 각 SIMD 블록이 4개의 VSP들을 포함한다고 가정하면, 각 계산 장치는 16개의 스레드들의 동시 실행을 지원한다.
실행 동안, 스레드들은 해당 피연산자드을 사용하여 실행하기 위한 수학적 연산들을 생성한다. 수학적 연산들의 실행을 지원하기 위해, GPU(100)는 피연산자 레지스터(예를 들어, 피연산자 레지스터(111, 112)) 세트(106) 및 ALU(108)(예를 들어, ALU들(114, 116)) 세트를 포함한다. 피연산자 레지스터들(106)은 수학적 연산들을 위한 피연산자들을 저장하고 ALU들(108)은 저장된 피연산자들을 사용하여 수학적 연산들을 실행한다. 특히, 수학적 연산을 실행하기 위해, 스레드는 아래에 추가로 설명되는 바와 같이 피연산자 레지스터들(106) 중 하나에 대응하는 피연산자를 저장하고, ALU들(108) 중 하나에 제어 정보(도시되지 않음)를 제공한다. 제어 정보에 기초하여, ALU는 저장된 피연산자를 사용하여 수학적 연산을 실행하고 스레드에 의해 검색하기 위해 결과 레지스터(도시되지 않음)에 결과를 저장한다.
설명의 명료함을 위해, 피연산자 레지스터들(106) 각각이 본원에서 단일 블록으로서 예시된다는 것이 이해될 것이다. 그러나, 일부 실시예들에서, 피연산자 레지스터들(106) 각각은 다수의 피연산자들을 저장한다. ALU(114)에 대한 피연산자들을 저장하는 피연산자 레지스터(111)를 도시하는 일 예가 도 2에 예시되어 있다. 도시된 실시예에서, 피연산자 레지스터(111)는 대응하는 스레드에 대해 각각 "A", "B" 및 "C"로 지정된 3개의 피연산자들을 저장한다.
도 1로 다시 돌아가서, 도면은 VSP들(102 내지 104) 사이에서 공유되는 피연산자 레지스터들(106) 및 ALU들(108)을 예시한다는 것이 이해될 것이다. 그러나, 다른 실시예들에서, 피연산자 레지스터들(106) 중 하나 이상 또는 ALU들(108) 중 하나 이상은 개별 VSP에 전용된다. 따라서, 예를 들어, 일부 실시예들에서, 피연산자 레지스터들(106)의 서브셋은 VSP(102)에 할당되고 피연산자 레지스터들의 다른 서브셋은 VSP(103)에 할당되어, 각 VSP가 다른 VSP에 할당된 피연산자 레지스터를 사용할 수 없도록 한다. 마찬가지로, 일부 실시예들에서, ALU들(108)의 서브셋은 VSP(102)에 할당되고 ALU들(108)의 다른 서브셋은 VSP(103)에 할당되어, 각 VSP가 다른 VSP에 할당된 ALU에 수학적 연산들을 할당할 수 없도록 한다.
일부 실시예들에서, 실행 스레드에 의해 생성된 다른 수학적 연산들 중 적어도 일부는 대응되는 피연산자의 정밀도 레벨을 나타내는 서로 다른 정밀도와 연관된다. 예를 들어, 일부 실시예들에서, 실행 스레드는 단정밀도 피연산자들보다 두 배 큰 배정밀도 피연산자들(즉, 배정밀도 연산들에 사용되는 피연산자들)을 사용하여 단정밀도 수학적 연산들 및 배정밀도 수학적 연산들을 생성한다. 피연산자 레지스터들(106)의 서브셋 각각은 단정밀도 피연산자들을 저장하도록 사이징되는 반면, 피연산자 레지스터들(106)의 다른 서브셋 각각은 배정밀도 피연산자들을 저장하도록 사이징된다. 일부 실시예들에서, 그리고 아래에 더 상세하게 설명된 바와 같이, 피연산자 레지스터들(106)의 단정밀도 피연산자 레지스터들은 배정밀도 피연산자들의 일부를 저장하는 반면, 이러한 연산자들은 ALU들(108) 중 하나 이상에 의한 처리를 대기한다.
ALU들(108)의 서브셋 각각은 해당 정밀도의 피연산자들을 사용하여 대응하는 정밀도에서 수학적 연산들을 실행하기 위한 회로부를 포함한다. 따라서, 예를 들어, ALU(114)는 (단정밀도 피연산자들을 사용하여) 정밀도 수학적 연산들을 실행하기 위한 회로부를 포함하고 ALU(116)는 (배정밀도 피연산자들을 사용하여) 배정밀도 연산들을 실행하기 위한 회로부를 포함한다. 일부 실시예들에서, GPU(100)에서 실행되는 스레드들은 비교적 많은 수의 단정밀도 연산들을 요청하고 상대적으로 적은 수의 배정밀도 연산들을 요청할 것으로 예상된다. 따라서, ALU들(108)은 더 많은 수의 단정밀도 ALU들과 더 적은 수의 배정밀도 ALU들을 포함한다. 또한, 피연산자 레지스터들(106)은 더 많은 수의 단정밀도 피연산자 레지스터들과 배정밀도 피연산자들을 저장하는 더 적은 수의 피연산자 레지스터들을 포함한다. 일부 실시예들에 따른 일 예가 도 3에 예시되어 있다. 도시된 예에서, ALU들(108)은 15개의 단정밀도(SP) ALU들과 하나의 배정밀도 ALU를 포함한다. 피연산자 레지스터들(106)은 배정밀도 ALU(116)에 대한 배정밀도 피연산자들을 저장하는 한 쌍의 피연산자 레지스터들, 지정된 피연산자 레지스터들(321 및 322)을 갖는 복수의 단정밀도 피연산자 레지스터들을 포함한다. 일부 실시예들에서, 피연산자 레지스터(321)는 배정밀도 피연산자의 "상위" 또는 최상위 비트를 저장하고 피연산자 레지스터(322)는 배정밀도 피연산자의 "하위" 또는 최하위 비트를 저장한다. 일부 실시예들에서, 다른 시간에 레지스터들(321 및 322)은 또한 SP ALU들 중 하나 이상에 대한 단정밀도 피연산자들을 저장한다. 즉, 실행중인 주어진 산술 연산의 정밀도에 따라,레지스터들(321 및 322)은 하나 이상의 SP ALU들(예를 들어, SP ALU(323))에 의한 처리를 위한 단정밀도 피연산자들을 저장하거나, DP ALU(116)에 의해 처리를 위한 배정밀도 세트를 함께 저장한다.
상기에 언급된 바와 같이, 많은 경우에, GPU(100)는 비교적 많은 수의 단정밀도 연산을 실행하고 비교적 적은 수의 배정밀도 연산을 실행할 것으로 예상된다. 따라서, 각 실행 스레드에 대해 전용 배정밀도 레지스터 세트를 갖는 비용을 절약하기 위해, GPU(100)는 레지스터들(321 및 322)에 배정밀도 피연산자들의 시퀀싱을 제어하는 피연산자 시퀀스 제어 모듈(110)을 포함한다. 설명하기 위해, 일부 실시예들에서, 적어도 피연산자 레지스터들의 서브셋이 연결되고, 피연산자 시퀀스 제어 모듈(110)로부터의 제어 시그널링에 응답하여, 제어 신호를 수신하는 각 피연산자 레지스터는 저장된 데이터를 다른 피연산자 레지스터로 전송한다. 피연산자 레지스터들 사이에서 데이터 전송을 제어함으로써, 피연산자 시퀀스 제어 모듈(110)은 상대적으로 적은 수의 피연산자 레지스터들 및 배정밀도 ALU 회로부를 사용하는 동안 복수의 실행 사이클에 걸쳐 복수의 스레드들에 대한 배정밀도 연산들의 실행을 스케줄링함으로써 GPU(100)의 리소스들을 보존한다. 일부 실시예들에서, 피연산자 시퀀스 제어 모듈(110)은 VSP들(102 내지 104)에서 스레드들의 실행을 스케줄링하는 GPU(100)의 스케줄러(도시되지 않음)의 일부이다.
도 4 내지 도 7은 일부 실시예들에 따라 레지스터들(321 및 322)에 배정밀도 피연산자들의 제공을 시퀀싱하는 GPU(100)의 일 예를 함께 예시한다. 도 4 내지 도 7의 예는 GPU(100)의 복수의 실행 사이클들을 예시한다. 일부 실시예들에서, 각 실행 사이클은 GPU(100)의 동작들을 동기화하는데 사용되는 클록(도시되지 않음)의 단일 클록 사이클에 대응한다. 다른 실시예들에서, 각 실행 사이클은 다수의 클록 사이클들에 해당한다. 도 4 내지 7의 예의 목적을 위해, VSP들(102 내지 104)은 집합적으로 동시에 16개의 스레드들을 실행하는 것으로 가정되며, 그 각각은 DP ALU(116)에서 실행될 배정밀도 산술 연산을 필요로 한다. 동작들을 실행하기 위해, GPU는 피연산자 레지스터들(106)의 피연산자 레지스터들(430 내지 439) 뿐만 아니라 피연산자 레지스터들(321 및 322)을 사용한다. 일부 실시예들에서, 피연산자 레지스터들(321, 322, 및 430 내지 439) 각각은 단일 실행 사이클 동안 피연산자 레지스터로부터 데이터가 판독되고 그에 데이터가 기입되도록 독립적인 판독 및 기입 포트들을 포함한다고 가정한다.
예의 목적을 위해, 각 실행 스레드가 DP ALU(116)에서 처리를 위한 하나의 배정밀도 피연산자 세트를 제공한다고 가정한다. 아래에 추가로 설명되는 바와 같이, 각 스레드는 두 부분, 즉 배정밀도 피연산자의 최하위 비트를 나타내는 하위 부분과 배정밀도 피연산자의 최상위 비트를 나타내는 상위 부분으로 해당 배정밀도 피연산자들을 제공한다. 따라서, 각 배정밀도 피연산자가 64비트라고 가정하면, 피연산자의 상위 부분은 피연산자의 최상위 32비트이고 피연산자의 하위 부분은 피연산자의 최하위 32비트이다.
도 4는 일부 실시예들에 따라, 사이클0 및 사이클1로 지정된 예의 처음 2개의 실행 사이클들을 예시한다. 사이클0 동안, GPU(100)의 스케줄러는 스레드 0, 4, 8 및 12의 실행을 스케줄링하여 이러한 스레드들(각각 0L, 4L, 8L 및 12L로 지정됨)에 대한 배정밀도 피연산자들의 하위 부분이 피연산자 레지스터들로 판독되도록 한다. 특히, 하위 부분 피연산자(4L)는 피연산자 레지스터(430)에 저장되고, 하위 부분 피연산자(0L)는 피연산자 레지스터(433)에 저장되며, 하위 부분 피연산자(8L)는 피연산자 레지스터(434)에 저장되고, 하위 부분 피연산자(12L)는 피연산자 레지스터(437)에 저장된다.. 적어도 일부 실시예들에서, 스레드 0, 4, 8 및 12 각각은 GPU(100)의 다른 VSP에서 실행된다.
사이클1 동안, 피연산자 시퀀스 제어 모듈(110)은 피연산자 레지스터들 사이에서 데이터를 전송하기 위한 제어 시그널링을 제공한다. 특히, 피연산자(0L)는 피연산자 레지스터(433)에서 피연산자 레지스터(321)로 전송되고, 피연산자(8L)는 피연산자 레지스터(434)에서 피연산자 레지스터(433)로 전송되며, 피연산자(12L)는 피연산자 레지스터(437)에서 피연산자 레지스터(434)로 전송된다.
추가로, 사이클1 동안, 스레드 0, 4, 8 및 12(각각 0H, 4H, 8H 및 12H로 지정됨)에 대한 배정밀도 피연산자들의 상위 부분은 피연산자 레지스터들의 서브셋으로 판독된다. 특히, 상위 부분 피연산자(4H)는 피연산자 레지스터(432)에 저장되고, 상위 부분 피연산자(0H)는 피연산자 레지스터(322)에 저장되며, 상위 부분 피연산자(8H)는 피연산자 레지스터(436)에 저장되고, 상위 부분 피연산자(12H)는 피연산자 레지스터(439)에 저장된다.
사이클1 동안, 0L 및 0H 피연산자들은 피연산자 레지스터들(321 및 322)에 저장되고 따라서 DP ALU(116)에 의해 처리될 준비가 된다. 따라서, 사이클1 동안, DP ALU(116)는 0L 및 0H 피연산자들을 사용하여 스레드 0에 의해 요청된 배정밀도 연산을 시작한다. 특히, DP ALU(116)는 0L 및 0H 피연산자들에 기초하여 A, B 및 C 피연산자들의 상위 및 하위 부분들을 연결하고 배정밀도 연산을 위해 결과 A, B 및 C 피연산자들을 사용한다.
도 5는 일부 실시예들에 따른 예시적인 시퀀싱 동작의 다음 2개의 사이클들(사이클2 및 사이클3로 지정됨)을 예시한다. 사이클2 동안, 피연산자 시퀀스 제어 모듈(110)은 피연산자 레지스터들 사이에서 데이터를 추가로 전송하기 위한 제어 시그널링을 제공한다. 특히, 피연산자(4L)는 피연산자 레지스터(430)에서 피연산자 레지스터(433)로 전송되고, 피연산자(8L)는 피연산자 레지스터(433)에서 피연산자 레지스터(321)로 전송되며, 피연산자(8H)는 피연산자 레지스터(436)에서 피연산자 레지스터(322)로 전송되고, 피연산자(12H)는 피연산자 레지스터(439)에서 피연산자 레지스터(436)로 전송된다. 따라서, 사이클2 동안, 8L 및 8H 피연산자들은 피연산자 레지스터들(321 및 322)에 저장된다. 따라서, 사이클2 동안, DP ALU(116)는 8L 및 8H 피연산자들을 사용하여 스레드 8에 의해 요청된 배정밀도 연산을 시작한다.
사이클3 동안, 이전 두 사이클과 마찬가지로, 피연산자 시퀀스 제어 모듈(110)은 피연산자 레지스터들 사이에서 데이터를 추가로 전송하기 위한 제어 시그널링을 제공한다. 특히, 피연산자(4L)는 피연산자 레지스터(433)에서 피연산자 레지스터(321)로 전송되고, 피연산자(4H)는 피연산자 레지스터(432)에서 피연산자 레지스터(322)로 전송되며, 피연산자(12L)는 피연산자 레지스터(434)에서 피연산자 레지스터(433)로 전송된다. 따라서, 사이클3 동안, 4L 및 4H 피연산자들은 피연산자 레지스터들(321 및 322)에 저장되고, DP ALU(116)는 4L 및 4H 피연산자들을 사용하여 스레드 4에 의해 요청된 배정밀도 연산을 시작한다.
도 6은 일부 실시예들에 따른 예시적인 시퀀싱 동작의 다음 2개의 사이클들(사이클4 및 사이클5로 지정됨)을 예시한다. 사이클4 동안, 피연산자 시퀀스 제어 모듈(110)은 피연산자 레지스터들 사이에서 초기 피연산자 세트의 마지막을 전송하기 위한 제어 시그널링을 제공한다. 특히, 피연산자(12H)는 피연산자 레지스터(436)에서 피연산자 레지스터(322)로 전송되고, 피연산자(12L)는 피연산자 레지스터(433)에서 피연산자 레지스터(321)로 전송된다. 따라서, 사이클4 동안, 12L 및 12H 피연산자들은 피연산자 레지스터들(321 및 322)에 저장된다. 따라서, 사이클4 동안, DP ALU(116)는 12L 및 12H 피연산자들을 사용하여 스레드 12에 의해 요청된 배정밀도 연산을 시작한다.
추가로, 사이클4 동안, 처리를 위한 다음 피연산자 세트는 피연산자 레지스터들에 저장된다. 예시된 바와 같이, 스레드 5, 1, 9 및 13(각각 5L, 1L, 9L 및 13L로 지정됨)에 대한 배정밀도 피연산자들의 하위 부분은 피연산자 레지스터들로 판독된다. 특히, 피연산자(5L)는 피연산자 레지스터(430)에 저장되고, 피연산자(1L)는 피연산자 레지스터(433)에 저장되며, 피연산자(9L)는 피연산자 레지스터(434)에 저장되고, 피연산자(13L)는 피연산자 레지스터(437)에 저장된다.
사이클5로 돌아가서, 피연산자 시퀀스 제어 모듈(110)은 피연산자 레지스터들 사이에서 데이터를 전송하기 위한 제어 시그널링을 제공하여, 피연산자(1L)는 피연산자 레지스터(433)에서 피연산자 레지스터(321)로 전송되고, 피연산자(9L)는 피연산자 레지스터(434)에서 피연산자 레지스터(433)로 전송되며, 피연산자(13L)는 피연산자 레지스터(437)에서 피연산자 레지스터(434)로 전송되도록 한다.
추가로, 사이클5 동안, 스레드 5, 1, 9 및 13(각각 5H, 1H, 9H 및 13H로 지정됨)에 대한 배정밀도 피연산자들의 상위 부분은 피연산자 레지스터들의 서브셋으로 판독된다. 특히, 피연산자(5H)는 피연산자 레지스터(432)에 저장되고, 피연산자(1H)는 피연산자 레지스터(322)에 저장되며, 피연산자(9H)는 피연산자 레지스터(436)에 저장되고, 피연산자(13H)는 피연산자 레지스터(439)에 저장된다. 따라서, 사이클5 동안, 1L 및 1H 피연산자들은 피연산자 레지스터들(321 및 322)에 저장되고 따라서 DP ALU(116)에 의해 처리될 준비가 된다. 따라서, 사이클5 동안, DP ALU(116)는 1L 및 1H 피연산자들을 사용하여 스레드 1에 의해 요청된 배정밀도 연산을 시작한다.
도 7은 일부 실시예들에 따른 예시적인 시퀀싱 동작의 다음 3개의 사이클들(사이클6, 사이클7 및 사이클8로 지정됨)을 예시한다. 사이클6 동안, 피연산자 시퀀스 제어 모듈(110)은 피연산자 레지스터들 사이에서 데이터를 추가로 전송하기 위한 제어 시그널링을 제공한다. 특히, 피연산자(5L)는 피연산자 레지스터(430)에서 피연산자 레지스터(433)로 전송되고, 피연산자(9L)는 피연산자 레지스터(433)에서 피연산자 레지스터(321)로 전송되며, 피연산자(9H)는 피연산자 레지스터(436)에서 피연산자 레지스터(322)로 전송되고, 피연산자(13)는 피연산자 레지스터(439)에서 피연산자 레지스터(436)로 전송된다. 따라서, 사이클6 동안, 9L 및 9H 피연산자들은 피연산자 레지스터들(321 및 322)에 저장된다. 따라서, 사이클6 동안, DP ALU(116)는 9L 및 9H 피연산자들을 사용하여 스레드 9에 의해 요청된 배정밀도 연산을 시작한다.
사이클7로 돌아가서, 피연산자 시퀀스 제어 모듈(110)은 피연산자 레지스터들 사이에서 데이터를 추가로 전송하기 위한 제어 시그널링을 제공한다. 특히, 피연산자(5L)는 피연산자 레지스터(433)에서 피연산자 레지스터(321)로 전송되고, 피연산자(5H)는 피연산자 레지스터(432)에서 피연산자 레지스터(322)로 전송되며, 피연산자(13L)는 피연산자 레지스터(434)에서 피연산자 레지스터(433)로 전송된다. 따라서, 사이클7 동안, 5L 및 5H 피연산자들은 피연산자 레지스터들(321 및 322)에 저장되고, DP ALU(116)는 5L 및 5H 피연산자들을 사용하여 스레드 5에 의해 요청된 배정밀도 연산을 시작한다.
사이클8로 돌아가서, 피연산자 시퀀스 제어 모듈(110)은 피연산자 레지스터들 사이에서 제2 피연산자 세트의 마지막을 전송하기 위한 제어 시그널링을 제공한다. 특히, 피연산자(13H)는 피연산자 레지스터(436)에서 피연산자 레지스터(322)로 전송되고, 피연산자(12L)는 피연산자 레지스터(433)에서 피연산자 레지스터(321)로 전송된다. 따라서, 사이클8 동안, 13L 및 13H 피연산자들은 피연산자 레지스터들(321 및 322)에 저장된다. 따라서, 사이클8 동안, DP ALU(116)는 13L 및 13H 피연산자들을 사용하여 스레드 13에 의해 요청된 배정밀도 연산을 시작한다.
추가로, 사이클8 동안, 처리를 위한 다음 피연산자 세트는 피연산자 레지스터들에 저장된다. 예시된 바와 같이, 스레드 6, 2, 10 및 14(각각 6L, 2L, 9L 및 14L로 지정됨)에 대한 배정밀도 피연산자들의 하위 부분은 피연산자 레지스터들로 판독된다. 특히, 피연산자(6L)는 피연산자 레지스터(430)에 저장되고, 피연산자(2L)는 피연산자 레지스터(433)에 저장되며, 피연산자(10L)는 피연산자 레지스터(434)에 저장되고, 피연산자(14L)는 피연산자 레지스터(437)에 저장된다.
일부 실시예들에서, GPU(100)는 스레드 2, 3, 6, 7, 10, 11, 14 및 15를 포함하는 나머지 스레드들에 대한 피연산자들을 처리하기 위해 예시된 사이클0 내지 사이클8과 유사한 방식으로 피연산자 레지스터들에 및 그들 사이에 피연산자들의 제공을 계속 시퀀싱한다. 따라서, GPU(100)는 VSP들(102 내지104) 사이에서 공유되는 배정밀도 피연산자 레지스터의 단일 세트를 사용하여 동시에 실행되는 16개 스레드들 각각에 대한 배정밀도 연산들의 실행을 지원한다. 따라서, GPU(100)는 상대적으로 적은 피연산자 레지스터 세트로 배정밀도 연산들을 지원할 수 있으므로, 면적 및 전력과 같은 프로세서 리소스들을 보존할 수 있다.
일부 실시예들에서, 방법은, 처리 장치에서 실행하는 복수의 스레드들에 대해, 제1 산술 논리 장치(ALU)에서 처리를 위한 복수의 피연산자들을 수신하는 단계; 복수의 레지스터들에 복수의 피연산자들을 저장하는 단계; 및 복수의 실행 사이클들에 걸쳐, ALU에서 처리를 위해 복수의 레지스터들로부터 제1 피연산자 레지스터로 복수의 피연산자들의 제공을 시퀀싱하는 단계를 포함한다. 일 양태에서, 시퀀싱하는 단계는, 제1 실행 사이클 동안, 제1 피연산자 레지스터에 복수의 피연산자들 중 제1 피연산자의 제1 부분을 저장하는 단계; 및 제2 실행 사이클 동안, 복수의 피연산자들 중 제2 피연산자의 제1 부분을 복수의 레지스터들 중 제1 레지스터로부터 제1 피연산자 레지스터로 전송하는 단계를 포함한다. 다른 양태에서, 시퀀싱하는 단계는, 제1 실행 사이클 동안, 복수의 레지스터들 중 제2 레지스터에 제1 피연산자의 제2 부분을 저장하는 단계; 및 제2 실행 사이클 동안, ALU에서 처리를 위해 제1 피연산자의 제2 부분을 제2 피연산자 레지스터로 전송하는 단계를 더 포함한다.
또 다른 양태에서, 방법은 제2 실행 사이클 동안, ALU에서 제1 및 제2 피연산자 레지스터들로부터 제1 피연산자를 판독하는 단계를 포함한다. 또 다른 양태에서, 제1 피연산자는 배정밀도 피연산자이고, 복수의 레지스터들 각각은 단정밀도 피연산자들을 저장하도록 구성된다. 또 다른 양태에서, 시퀀싱하는 단계는 제2 실행 사이클 동안, 제3 피연산자의 제1 부분을 복수의 레지스터들 중 제2 레지스터로부터 복수의 레지스터들 중 제1 레지스터로 전송하는 단계를 더 포함한다. 또 다른 양태에서, 시퀀싱하는 단계는 제3 실행 사이클 동안, 제3 피연산자의 제1 부분을 복수의 레지스터들 중 제1 레지스터로부터 제1 피연산자 레지스터로 전송하는 단계를 더 포함한다. 또 다른 양태에서, 시퀀싱하는 단계는 제2 실행 사이클 동안, 제4 피연산자의 제1 부분을 복수의 레지스터들 중 제3 레지스터로부터 복수의 레지스터들 중 제2 레지스터로 전송하는 단계를 더 포함한다.
일부 실시예들에서, 프로세서는, 산술 논리 장치(ALU)를 포함하는 처리 장치로서, 처리 장치는 대응하는 복수의 스레드들을 실행하고, 복수의 스레드들이 ALU에서 처리하기 위한 복수의 피연산자들을 생성하도록 실행하는, 상기 처리 장치; 복수의 피연산자들을 저장하도록 구성된 복수의 레지스터들; 및 복수의 실행 사이클들에 걸쳐, ALU에서 처리를 위한 복수의 레지스터들로부터 제1 피연산자 레지스터로의 복수의 피연산자들의 제공을 시퀀싱하도록 구성된 시퀀스 제어 모듈을 포함한다. 일 양태에서, 시퀀싱하는 단계는, 제1 실행 사이클 동안, 제1 피연산자 레지스터에 복수의 피연산자들 중 제1 피연산자의 제1 부분을 저장하는 단계; 및 제2 실행 사이클 동안, 복수의 피연산자들 중 제2 피연산자의 제1 부분을 복수의 레지스터들 중 제1 레지스터로부터 제1 피연산자 레지스터로 전송하는 단계를 포함한다.
일 양태에서, 시퀀싱하는 단계는, 제1 실행 사이클 동안, 복수의 레지스터들 중 제2 레지스터에 제1 피연산자의 제2 부분을 저장하는 단계; 및 제2 실행 사이클 동안, ALU에서 처리를 위해 제1 피연산자의 제2 부분을 제2 피연산자 레지스터로 전송하는 단계를 더 포함한다. 또 다른 양태에서, ALU는, 제2 실행 사이클 동안, 처리하기 위해 제1 및 제2 피연산자 레지스터들로부터 제1 피연산자를 판독하도록 구성된다. 또 다른 양태에서, 제1 피연산자는 배정밀도 피연산자이고, 복수의 레지스터들 각각은 단정밀도 피연산자들을 저장하도록 구성된다.
일 양태에서, 시퀀싱하는 단계는 제2 실행 사이클 동안, 제3 피연산자의 제1 부분을 복수의 레지스터들 중 제2 레지스터로부터 복수의 레지스터들 중 제1 레지스터로 전송하는 단계를 더 포함한다. 또 다른 양태에서, 시퀀싱하는 단계는 제3 실행 사이클 동안, 제3 피연산자의 제1 부분을 복수의 레지스터들 중 제1 레지스터로부터 제1 피연산자 레지스터로 전송하는 단계를 더 포함한다. 또 다른 양태에서, 시퀀싱하는 단계는 제2 실행 사이클 동안, 제4 피연산자의 제1 부분을 복수의 레지스터들 중 제3 레지스터로부터 복수의 레지스터들 중 제2 레지스터로 전송하는 단계를 더 포함한다.
일부 실시예들에서, 그래픽 처리 장치(GPU)는, 대응하는 복수의 스레드들을 실행하는 복수의 셰이더 프로세서들로서, 복수의 스레드들은 복수의 피연산자들을 생성하도록 실행하는, 상기 복수의 셰이더 프로세서들; 산술 논리 장치(ALU); 복수의 피연산자들을 저장하도록 구성된 복수의 레지스터들; 및 복수의 실행 사이클들에 걸쳐, ALU에서 처리를 위해 복수의 레지스터들로부터 제1 피연산자 레지스터로의 복수의 피연산자들의 제공을 시퀀싱하도록 구성된 시퀀스 제어 모듈을 포함한다. 일 양태에서, 시퀀싱하는 단계는, 제1 실행 사이클 동안, 제1 피연산자 레지스터에 복수의 피연산자들 중 제1 피연산자의 제1 부분을 저장하는 단계; 및 제2 실행 사이클 동안, 복수의 피연산자들 중 제2 피연산자의 제1 부분을 복수의 레지스터들 중 제1 레지스터로부터 제1 피연산자 레지스터로 전송하는 단계를 포함한다. 다른 양태에서, 시퀀싱하는 단계는, 제1 실행 사이클 동안, 복수의 레지스터들 중 제2 레지스터에 제1 피연산자의 제2 부분을 저장하는 단계; 및 제2 실행 사이클 동안, ALU에서 처리를 위해 제1 피연산자의 제2 부분을 제2 피연산자 레지스터로 전송하는 단계를 더 포함한다. 또 다른 양태에서, ALU는, 제2 실행 사이클 동안, 처리하기 위해 제1 및 제2 피연산자 레지스터들로부터 제1 피연산자를 판독하도록 구성된다.
일부 실시예들에서, 위에서 설명된 기술들의 특정 양태들은 소프트웨어를 실행하는 처리 시스템의 하나 이상의 프로세서들에 의해 구현된다. 소프트웨어는 비일시적 컴퓨터 판독 가능 저장 매체에 저장되거나 유형적으로 구현되는 하나 이상의 실행 가능한 명령어 세트들을 포함한다. 소프트웨어는 하나 이상의 프로세서들에 의해 실행 시, 위에서 설명된 기술들 중 하나 이상의 양태들을 수행하도록 하나 이상의 프로세서들을 조작하는 명령어들 및 특정 데이터를 포함한다. 비일시적 컴퓨터 판독 가능 저장 매체는 예를 들어, 자기 또는 광 디스크 저장 장치, 플래시 메모리와 같은 솔리드 스테이트 저장 장치, 캐시, 랜덤 액세스 메모리(RAM) 또는 기타 비휘발성 메모리 장치 또는 장치들 등 중 하나 이상을 포함한다. 다른 실시예들에서, 비일시적 컴퓨터 판독 가능 저장 매체에 저장된 실행 가능한 명령어들은 소스 코드, 어셈블리 언어 코드, 객체 코드, 또는 하나 이상의 프로세서들에 의해 해석되거나 아니면 실행 가능한 기타 명령어 형식일 수 있다.
일반적인 설명에서 상술한 모든 활동들 또는 요소들이 필요한 것은 아니며, 특정 활동 또는 장치의 일부가 필요하지 않을 수 있으며, 설명된 것들 외에 하나 이상의 추가 활동들이 수행될 수 있거나, 또는 요소들이 포함될 수 있음에 유의한다. 또한, 활동들이 나열되는 순서가 반드시 수행되는 순서는 아니다. 또한, 개념들은 특정 실시예들을 참조하여 설명되었다. 그러나, 당업자는 이하의 청구 범위에 기재된 본 개시의 범위를 벗어나지 않고 다양한 수정들 및 변경들이 이루어질 수 있음을 이해한다. 따라서, 명세서 및 도면들은 제한적인 의미라기 보다는 예시적인 것으로 간주되어야 하며, 이러한 모든 수정들은 본 개시의 범위 내에 포함되는 것으로 의도된다.
이점들, 다른 장점들 및 문제들에 대한 해결책들이 특정 실시예들과 관련하여 상기에 설명되었다. 그러나, 이점들, 장점들, 문제에 대한 해결책들 및 이점, 장점 또는 채결책을 발생시키거나 더 두드러지게 만들 수 있는 임의의 특징(들)은 일부 또는 모든 청구항들의 중요하거나, 요구되거나 또는 필수 특징으로 해석되어서는 안된다. 더욱이, 위에 개시된 특정 실시예는 단지 예시적인 것이며, 개시된 주제는 본 명세서의 교시의 이점을 갖는 당업자에게 명백하게 상이하지만 동등한 방식으로 수정 및 실시될 수 있다. 아래의 청구범위에 기술된 것 외에는, 본원에 도시된 구성 또는 설계의 세부사항에 제한을 두지 않는다. 따라서, 위에 개시된 특정 실시예들은 변경되거나 수정될 수 있으며, 이러한 모든 변형들은 개시된 주제의 범위 내에서 고려된다는 것이 명백하다. 따라서, 본원에서 추구하는 보호는 아래의 청구범위에 명시된 바와 같다.

Claims (20)

  1. 방법에 있어서,
    처리 장치에서 실행되는 복수의 스레드들에 대해, 산술 논리 장치(ALU)에서 처리를 위해 복수의 피연산자들을 수신하는 단계;
    복수의 레지스터들에 상기 복수의 피연산자들을 저장하는 단계; 및
    복수의 실행 사이클들에 걸쳐, 상기 ALU에서 처리를 위해 상기 복수의 레지스터들로부터 제1 피연산자 레지스터로 상기 복수의 피연산자들의 제공을 시퀀싱하는 단계를 포함하는, 방법.
  2. 제1항에 있어서, 상기 시퀀싱하는 단계는,
    제1 실행 사이클 동안, 상기 제1 피연산자 레지스터에 상기 복수의 피연산자들 중 제1 피연산자의 제1 부분을 저장하는 단계; 및
    제2 실행 사이클 동안, 상기 복수의 레지스터들 중 제1 레지스터로부터 상기 제1 피연산자 레지스터로 상기 복수의 피연산자들 중 제2 피연산자의 제1 부분을 전송하는 단계를 포함하는, 방법.
  3. 제2항에 있어서, 상기 시퀀싱하는 단계는,
    상기 제1 실행 사이클 동안, 상기 복수의 레지스터들 중 제2 레지스터에 상기 제1 피연산자의 제2 부분을 저장하는 단계; 및
    상기 제2 실행 사이클 동안, 상기 ALU에서 처리를 위해 상기 제1 피연산자의 상기 제2 부분을 제2 피연산자로 전송하는 단계를 더 포함하는, 방법.
  4. 제3항에 있어서,
    상기 제2 실행 사이클 동안, 상기 ALU에서 상기 제1 및 제2 피연산자 레지스터들로부터 상기 제1 피연산자를 판독하는 단계를 더 포함하는, 방법.
  5. 제4항에 있어서, 상기 제1 피연산자는 배정밀도 피연산자이고, 상기 복수의 레지스터들 각각은 단정밀도 피연산자들을 저장하도록 구성되는, 방법.
  6. 제2항에 있어서, 상기 시퀀싱하는 단계는,
    상기 제2 실행 사이클 동안, 제3 피연산자의 제1 부분을 상기 복수의 레지스터들 중 제2 레지스터로부터 상기 복수의 레지스터들 중 상기 제1 레지스터로 전송하는 단계를 더 포함하는, 방법.
  7. 제6항에 있어서, 상기 시퀀싱하는 단계는,
    제3 실행 사이클 동안, 상기 제3 피연산자의 상기 제1 부분을 상기 복수의 레지스터들 중 상기 제1 레지스터로부터 상기 제1 피연산자 레지스터로 전송하는 단계를 더 포함하는, 방법.
  8. 제6항에 있어서, 상기 시퀀싱하는 단계는,
    상기 제2 실행 사이클 동안, 제4 피연산자의 제1 부분을 상기 복수의 레지스터들 중 제3 레지스터로부터 상기 복수의 레지스터들 중 상기 제2 레지스터로 전송하는 단계를 더 포함하는, 방법.
  9. 프로세서에 있어서,
    산술 논리 장치(ALU)를 포함하는 처리 장치로서, 상기 처리 장치는 대응되는 복수의 스레드들을 실행하고, 상기 복수의 스레드들은 상기 ALU에서 처리를 위해 복수의 피연산자들을 생성하도록 실행하는, 상기 처리 장치;
    상기 복수의 피연산자들을 저장하도록 구성된 복수의 레지스터들; 및
    복수의 실행 사이클들에 걸쳐, 상기 ALU에서 처리를 위해 상기 복수의 레지스터들로부터 제1 피연산자 레지스터로의 상기 복수의 피연산자들의 제공을 시퀀싱하도록 구성된 시퀀스 제어 모듈을 포함하는, 프로세서.
  10. 제9항에 있어서, 상기 시퀀싱하는 단계는,
    제1 실행 사이클 동안, 상기 제1 피연산자 레지스터에 상기 복수의 피연산자들 중 제1 피연산자의 제1 부분을 저장하는 단계; 및
    제2 실행 사이클 동안, 상기 복수의 레지스터들 중 제1 레지스터로부터 상기 제1 피연산자 레지스터로 상기 복수의 피연산자들 중 제2 피연산자의 제1 부분을 전송하는 단계를 포함하는, 프로세서.
  11. 제10항에 있어서, 상기 시퀀싱하는 단계는,
    상기 제1 실행 사이클 동안, 상기 복수의 레지스터들 중 제2 레지스터에 상기 제1 피연산자의 제2 부분을 저장하는 단계; 및
    상기 제2 실행 사이클 동안, 상기 ALU에서 처리를 위해 상기 제1 피연산자의 상기 제2 부분을 제2 피연산자로 전송하는 단계를 더 포함하는, 프로세서.
  12. 제11항에 있어서, 상기 ALU는,
    상기 제2 실행 사이클 동안, 처리를 위해 상기 제1 및 제2 피연산자 레지스터들로부터 상기 제1 피연산자를 판독하도록 구성된, 프로세서.
  13. 제12항에 있어서, 상기 제1 피연산자는 배정밀도 피연산자이고, 상기 복수의 레지스터들 각각은 단정밀도 피연산자들을 저장하도록 구성되는, 프로세서.
  14. 제10항에 있어서, 상기 시퀀싱하는 단계는,
    상기 제2 실행 사이클 동안, 제3 피연산자의 제1 부분을 상기 복수의 레지스터들 중 제2 레지스터로부터 상기 복수의 레지스터들 중 상기 제1 레지스터로 전송하는 단계를 더 포함하는, 프로세서.
  15. 제14항에 있어서, 상기 시퀀싱하는 단계는,
    제3 실행 사이클 동안, 상기 제3 피연산자의 상기 제1 부분을 상기 복수의 레지스터들 중 상기 제1 레지스터로부터 상기 제1 피연산자 레지스터로 전송하는 단계를 더 포함하는, 프로세서.
  16. 제14항에 있어서, 상기 시퀀싱하는 단계는,
    상기 제2 실행 사이클 동안, 제4 피연산자의 제1 부분을 상기 복수의 레지스터들 중 제3 레지스터로부터 상기 복수의 레지스터들 중 상기 제2 레지스터로 전송하는 단계를 더 포함하는, 프로세서.
  17. 그래픽 처리 장치(GPU)에 있어서,
    대응되는 복수의 스레드들을 실행하는 복수의 셰이더 프로세서들로서, 상기 복수의 스레드들은 복수의 피연산자들을 생성하도록 실행되는, 상기 복수의 셰이더 프로세서들;
    산술 논리 장치(ALU);
    상기 복수의 피연산자들을 저장하도록 구성된 복수의 레지스터들; 및
    복수의 실행 사이클들에 걸쳐, 상기 ALU에서 처리를 위해 상기 복수의 레지스터들로부터 제1 피연산자 레지스터로의 상기 복수의 피연산자들의 제공을 시퀀싱하도록 구성된 시퀀스 제어 모듈을 포함하는, GPU.
  18. 제17항에 있어서, 상기 시퀀싱하는 단계는,
    제1 실행 사이클 동안, 상기 제1 피연산자 레지스터에 상기 복수의 피연산자들 중 제1 피연산자의 제1 부분을 저장하는 단계; 및
    제2 실행 사이클 동안, 상기 복수의 레지스터들 중 제1 레지스터로부터 상기 제1 피연산자 레지스터로 상기 복수의 피연산자들 중 제2 피연산자의 제1 부분을 전송하는 단계를 포함하는, GPU.
  19. 제18항에 있어서, 상기 시퀀싱하는 단계는,
    상기 제1 실행 사이클 동안, 상기 복수의 레지스터들 중 제2 레지스터에 상기 제1 피연산자의 제2 부분을 저장하는 단계; 및
    상기 제2 실행 사이클 동안, 상기 ALU에서 처리를 위해 상기 제1 피연산자의 상기 제2 부분을 제2 피연산자로 전송하는 단계를 더 포함하는, GPU.
  20. 제19항에 있어서, 상기 ALU는,
    상기 제2 실행 사이클 동안, 처리를 위해 상기 제1 및 제2 피연산자 레지스터들로부터 상기 제1 피연산자를 판독하도록 구성된, GPU.
KR1020227017671A 2019-11-26 2020-11-24 산술 논리 장치 레지스터 시퀀싱 KR102644951B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/696,108 US11237827B2 (en) 2019-11-26 2019-11-26 Arithemetic logic unit register sequencing
US16/696,108 2019-11-26
PCT/US2020/061977 WO2021108384A1 (en) 2019-11-26 2020-11-24 Arithemetic logic unit register sequencing

Publications (2)

Publication Number Publication Date
KR20220100891A true KR20220100891A (ko) 2022-07-18
KR102644951B1 KR102644951B1 (ko) 2024-03-08

Family

ID=75971278

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227017671A KR102644951B1 (ko) 2019-11-26 2020-11-24 산술 논리 장치 레지스터 시퀀싱

Country Status (6)

Country Link
US (2) US11237827B2 (ko)
EP (1) EP4066105A4 (ko)
JP (1) JP2023502574A (ko)
KR (1) KR102644951B1 (ko)
CN (1) CN114868110A (ko)
WO (1) WO2021108384A1 (ko)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160110511A (ko) * 2014-03-26 2016-09-21 인텔 코포레이션 3 소스 피연산자 부동 소수점 가산 프로세서, 방법, 시스템, 및 명령어
KR20170097617A (ko) * 2014-12-23 2017-08-28 인텔 코포레이션 명령어 흐름을 최적화하기 위한 체크를 수행하는 장치 및 방법
KR20170097618A (ko) * 2014-12-23 2017-08-28 인텔 코포레이션 큰 정수 산술 연산을 수행하기 위한 방법 및 장치

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3389379A (en) * 1965-10-05 1968-06-18 Sperry Rand Corp Floating point system: single and double precision conversions
US5901316A (en) * 1996-07-01 1999-05-04 Sun Microsystems, Inc. Float register spill cache method, system, and computer program product
US5909572A (en) 1996-12-02 1999-06-01 Compaq Computer Corp. System and method for conditionally moving an operand from a source register to a destination register
US7028170B2 (en) * 2000-03-08 2006-04-11 Sun Microsystems, Inc. Processing architecture having a compare capability
US8239439B2 (en) 2007-12-13 2012-08-07 International Business Machines Corporation Method and apparatus implementing a minimal area consumption multiple addend floating point summation function in a vector microprocessor
EP2352082B1 (en) * 2008-10-14 2018-11-28 National University Corporation Nara Institute of Science and Technology Data processing device for performing a plurality of calculation processes in parallel
US8458444B2 (en) * 2009-04-22 2013-06-04 Oracle America, Inc. Apparatus and method for handling dependency conditions between floating-point instructions
US8533435B2 (en) 2009-09-24 2013-09-10 Nvidia Corporation Reordering operands assigned to each one of read request ports concurrently accessing multibank register file to avoid bank conflict
US9823928B2 (en) 2011-09-30 2017-11-21 Qualcomm Incorporated FIFO load instruction
US9508112B2 (en) * 2013-07-31 2016-11-29 Apple Inc. Multi-threaded GPU pipeline
US10754651B2 (en) * 2018-06-29 2020-08-25 Intel Corporation Register bank conflict reduction for multi-threaded processor

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20160110511A (ko) * 2014-03-26 2016-09-21 인텔 코포레이션 3 소스 피연산자 부동 소수점 가산 프로세서, 방법, 시스템, 및 명령어
KR20170097617A (ko) * 2014-12-23 2017-08-28 인텔 코포레이션 명령어 흐름을 최적화하기 위한 체크를 수행하는 장치 및 방법
KR20170097618A (ko) * 2014-12-23 2017-08-28 인텔 코포레이션 큰 정수 산술 연산을 수행하기 위한 방법 및 장치

Also Published As

Publication number Publication date
US11789732B2 (en) 2023-10-17
EP4066105A1 (en) 2022-10-05
EP4066105A4 (en) 2023-11-22
KR102644951B1 (ko) 2024-03-08
US20210157581A1 (en) 2021-05-27
CN114868110A (zh) 2022-08-05
US11237827B2 (en) 2022-02-01
WO2021108384A1 (en) 2021-06-03
US20220171621A1 (en) 2022-06-02
JP2023502574A (ja) 2023-01-25

Similar Documents

Publication Publication Date Title
US8639882B2 (en) Methods and apparatus for source operand collector caching
US10007527B2 (en) Uniform load processing for parallel thread sub-sets
US9830156B2 (en) Temporal SIMT execution optimization through elimination of redundant operations
KR102526619B1 (ko) 지속적인 컴퓨팅을 위한 저 전력 및 저 대기시간 gpu 코프로세서
US10037228B2 (en) Efficient memory virtualization in multi-threaded processing units
US9798548B2 (en) Methods and apparatus for scheduling instructions using pre-decode data
EP2480979B1 (en) Unanimous branch instructions in a parallel thread processor
US10255228B2 (en) System and method for performing shaped memory access operations
US8099584B2 (en) Methods for scalably exploiting parallelism in a parallel processing system
US10169091B2 (en) Efficient memory virtualization in multi-threaded processing units
US20080109795A1 (en) C/c++ language extensions for general-purpose graphics processing unit
US10346212B2 (en) Approach for a configurable phase-based priority scheduler
US20130198760A1 (en) Automatic dependent task launch
US8572355B2 (en) Support for non-local returns in parallel thread SIMD engine
US9069609B2 (en) Scheduling and execution of compute tasks
US20130166882A1 (en) Methods and apparatus for scheduling instructions without instruction decode
US9626191B2 (en) Shaped register file reads
US9798544B2 (en) Reordering buffer for memory access locality
CN114610394B (zh) 指令调度的方法、处理电路和电子设备
US10152328B2 (en) Systems and methods for voting among parallel threads
US8413151B1 (en) Selective thread spawning within a multi-threaded processing system
US10146736B2 (en) Presenting pipelines of multicore processors as separate processor cores to a programming framework
KR102644951B1 (ko) 산술 논리 장치 레지스터 시퀀싱
WO2022121275A1 (zh) 处理器、多线程处理方法、电子设备以及存储介质

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant