KR20230160893A - Select and run wavefront - Google Patents
Select and run wavefront Download PDFInfo
- Publication number
- KR20230160893A KR20230160893A KR1020237036512A KR20237036512A KR20230160893A KR 20230160893 A KR20230160893 A KR 20230160893A KR 1020237036512 A KR1020237036512 A KR 1020237036512A KR 20237036512 A KR20237036512 A KR 20237036512A KR 20230160893 A KR20230160893 A KR 20230160893A
- Authority
- KR
- South Korea
- Prior art keywords
- instructions
- instruction
- sufficient
- execution
- identifying
- Prior art date
Links
- 238000012545 processing Methods 0.000 claims abstract description 78
- 238000000034 method Methods 0.000 claims abstract description 29
- 230000004044 response Effects 0.000 claims abstract description 12
- 238000010586 diagram Methods 0.000 description 9
- 230000009466 transformation Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 7
- 239000011159 matrix material Substances 0.000 description 6
- 238000000844 transformation Methods 0.000 description 6
- 238000012546 transfer Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 238000009877 rendering Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000009977 dual effect Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000011144 upstream manufacturing Methods 0.000 description 2
- 241001522296 Erithacus rubecula Species 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000000295 complement effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 239000012530 fluid Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 239000002245 particle Substances 0.000 description 1
- 238000004088 simulation Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
- G06F9/30152—Determining start or end of instruction; determining instruction length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline, look ahead using instruction pipelines
- G06F9/3869—Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
- G06F9/3889—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
Abstract
파면들을 실행하기 위한 기술들이 제공된다. 기술들은 실행을 위해 명령어들을 발행하기 위한 제1 시간에, 처리 레인 내에서 명령어들의 제1 세트를 함께 실행하기에 충분한 처리 자원들이 존재한다고 식별하는 것을 포함한, 제1 식별을 수행하는 것; 제1 식별에 응답하여, 명령어들의 제1 세트를 함께 실행하는 것; 실행을 위해 명령어들을 발행하기 위한 제2 시간에, 처리 레인 내에서 함께 실행하기 위해 충분한 처리 자원들이 존재하는 명령어들이 이용가능하지 않다고 식별하는 것을 포함한, 제2 식별을 수행하는 것; 및 제2 식별에 응답하여, 명령어를 임의의 다른 명령어와는 독립적으로 실행하는 것을 포함한다.Techniques for implementing wavefronts are provided. The techniques include performing a first identification, including identifying that sufficient processing resources exist to jointly execute the first set of instructions within a processing lane at a first time to issue instructions for execution; In response to the first identification, executing a first set of instructions together; At a second time for issuing instructions for execution, performing a second identification, including identifying that instructions for which there are sufficient processing resources for execution together within the processing lane are not available; and in response to the second identification, executing the instruction independently of any other instructions.
Description
본 출원은 2021년 3월 31일자로 출원된, 발명의 명칭이 "파면 선택 및 실행(WAVEFRONT SELECTION AND EXECUTION)"인, 계류 중인 미국 정규 특허 출원 제17/219,775호의 이익을 주장하며, 이 특허 출원의 전체 내용은 이에 의해 본 명세서에 참고로 포함된다.This application claims the benefit of pending U.S. regular patent application Ser. No. 17/219,775, entitled “WAVEFRONT SELECTION AND EXECUTION,” filed March 31, 2021. The entire contents of are hereby incorporated by reference.
그래픽 처리 유닛들은 셰이더 프로그램들을 고도의 병렬 방식으로 실행하는 병렬 처리 요소들을 포함한다. 셰이더 프로그램들의 실행 효율에 대한 개선들이 끊임없이 이루어지고 있다.Graphics processing units contain parallel processing elements that execute shader programs in a highly parallel manner. Improvements to the execution efficiency of shader programs are constantly being made.
첨부 도면들과 관련하여 예로서 주어지는 다음의 설명으로부터 더 상세한 이해가 이루어질 수 있다.
도 1은 본 개시의 하나 이상의 특징이 구현될 수 있는 예시적인 디바이스의 블록도이다.
도 2는 추가적인 세부 사항을 예시하는, 도 1의 디바이스의 블록도이다.
도 3은 예에 따른, 그래픽 처리 파이프라인을 예시하는 블록도이다.
도 4는 예에 따른, SIMD 유닛의 세부 사항들을 예시한다.
도 5는 예에 따른, 명령어들을 실행하기 위한 방법의 흐름도이다.A more detailed understanding may be obtained from the following description given by way of example in conjunction with the accompanying drawings.
1 is a block diagram of an example device in which one or more features of the present disclosure may be implemented.
Figure 2 is a block diagram of the device of Figure 1, illustrating additional details.
3 is a block diagram illustrating a graphics processing pipeline, according to an example.
4 illustrates details of a SIMD unit, according to an example.
5 is a flow diagram of a method for executing instructions, according to an example.
파면들을 실행하기 위한 기술들이 제공된다. 기술들은 실행을 위해 명령어들을 발행하기 위한 제1 시간에, 처리 레인 내에서 명령어들의 제1 세트를 함께 실행하기에 충분한 처리 자원들이 존재한다고 식별하는 것을 포함한, 제1 식별을 수행하는 것; 제1 식별에 응답하여, 명령어들의 제1 세트를 함께 실행하는 것; 실행을 위해 명령어들을 발행하기 위한 제2 시간에, 처리 레인 내에서 함께 실행하기 위해 충분한 처리 자원들이 존재하는 명령어들이 이용가능하지 않다고 식별하는 것을 포함한, 제2 식별을 수행하는 것; 및 제2 식별에 응답하여, 명령어를 임의의 다른 명령어와는 독립적으로 실행하는 것을 포함한다.Techniques for implementing wavefronts are provided. The techniques include performing a first identification, including identifying that sufficient processing resources exist to jointly execute the first set of instructions within a processing lane at a first time to issue instructions for execution; In response to the first identification, executing a first set of instructions together; At a second time for issuing instructions for execution, performing a second identification, including identifying that instructions for which there are sufficient processing resources for execution together within the processing lane are not available; and in response to the second identification, executing the instruction independently of any other instructions.
도 1은 본 개시의 하나 이상의 특징이 구현될 수 있는 예시적인 디바이스(100)의 블록도이다. 디바이스(100)는 예를 들어, 컴퓨터, 게이밍 디바이스, 핸드헬드 디바이스, 셋톱 박스, 텔레비전, 모바일 폰, 또는 태블릿 컴퓨터를 포함할 수 있다. 디바이스(100)는 프로세서(102), 메모리(104), 저장소(106), 하나 이상의 입력 디바이스(108), 및 하나 이상의 출력 디바이스(110)를 포함한다. 디바이스(100)는 또한 선택적으로 입력 드라이버(112) 및 출력 드라이버(114)를 포함할 수 있다. 디바이스(100)는 도 1에 도시되지 않은 추가적인 컴포넌트를 포함할 수 있다는 것이 이해된다.1 is a block diagram of an
다양한 대안들에서, 프로세서(102)는 중앙 처리 유닛(CPU), 그래픽 처리 유닛(GPU), 동일 다이 상에 위치된 CPU 및 GPU, 또는 하나 이상의 프로세서 코어를 포함하며, 여기서 각각의 프로세서 코어는 CPU 또는 GPU일 수 있다. 다양한 대안들에서, 메모리(104)는 프로세서(102)와 동일한 다이 상에 위치되거나, 프로세서(102)와는 별도로 위치된다. 메모리(104)는 휘발성 또는 비휘발성 메모리, 예를 들어 RAM(RAM), 동적 RAM, 또는 캐시를 포함한다.In various alternatives,
저장소(106)는 고정 또는 이동식 저장소, 예를 들어 하드 디스크 드라이브, 솔리드 스테이트 드라이브, 광 디스크, 또는 플래시 드라이브를 포함한다. 입력 디바이스들(108)은, 제한 없이, 키보드, 키패드, 터치 스크린, 터치 패드, 검출기, 마이크로폰, 가속도계, 자이로스코프, 바이오메트릭 스캐너, 또는 네트워크 접속(예를 들어, 무선 IEEE 802 신호들의 송신 및/또는 수신을 위한 무선 근거리 통신망 카드)을 포함한다. 출력 디바이스들(110)은, 제한 없이, 디스플레이, 스피커, 프린터, 햅틱 피드백 디바이스, 하나 이상의 발광체, 안테나, 또는 네트워크 접속(예를 들어, 무선 IEEE 802 신호들의 송신 및/또는 수신을 위한 무선 근거리 통신망 카드)을 포함한다.
입력 드라이버(112)는 프로세서(102) 및 입력 디바이스들(108)과 통신하고, 프로세서(102)가 입력 디바이스들(108)로부터 입력을 수신하도록 허용한다. 출력 드라이버(114)는 프로세서(102) 및 출력 디바이스들(110)과 통신하고, 프로세서(102)가 출력 디바이스들(110)에 출력을 전송하도록 허용한다. 입력 드라이버(112) 및 출력 드라이버(114)는 선택적인 컴포넌트들이며, 입력 드라이버(112) 및 출력 드라이버(114)가 존재하지 않더라도 디바이스(100)는 동일한 방식으로 동작할 것임에 유의한다. 출력 드라이버(116)는 디스플레이 디바이스(118)에 결합된 가속 처리 디바이스("APD")(116)를 포함한다. APD는 프로세서(102)로부터 컴퓨트 커맨드들 및 그래픽 렌더링 커맨드들을 수신하고, 이러한 컴퓨트 및 그래픽 렌더링 커맨드들을 처리하고, 픽셀 출력을 디스플레이를 위해 디스플레이 디바이스(118)에 제공한다. 아래에서 더 상세히 설명되는 바와 같이, APD(116)는 "SIMD"(single-instruction-multiple-data) 패러다임에 따라 계산을 수행하기 위해 하나 이상의 병렬 처리 유닛을 포함한다. 따라서, 다양한 기능이 본 명세서에서 APD(116)에 의해 또는 그와 관련하여 수행되는 것으로 설명되지만, 다양한 대안에서, APD(116)에 의해 수행되는 것으로 설명된 기능은 추가적으로 또는 대안적으로 호스트 프로세서(예를 들어, 프로세서(102))에 의해 구동되지 않고 디스플레이 디바이스(118)에 그래픽 출력을 제공하는 유사한 능력을 갖는 다른 컴퓨팅 디바이스들에 의해 수행된다. 예를 들어, SIMD 패러다임에 따라 처리 태스크들을 수행하는 임의의 처리 시스템이 본 명세서에서 설명된 기능을 수행할 수 있는 것이 고려된다. 대안적으로, SIMD 패러다임에 따라 처리 태스크들을 수행하지 않는 컴퓨팅 시스템이 본 명세서에서 설명된 기능을 수행하는 것이 고려된다.
도 2는 APD(116)에서의 처리 태스크들의 실행과 관련된 추가적인 세부 사항들을 예시하는, 디바이스(100)의 블록도이다. 프로세서(102)는, 시스템 메모리(104)에, 프로세서(102)에 의한 실행을 위한 하나 이상의 제어 로직 모듈을 유지한다. 제어 로직 모듈은 운영 체제(120), 드라이버(122), 및 애플리케이션들(126)을 포함한다. 이러한 제어 로직 모듈들은 프로세서(102) 및 APD(116)의 동작의 다양한 특징들을 제어한다. 예를 들어, 운영 체제(120)는 하드웨어와 직접 통신하고, 프로세서(102) 상에서 실행되는 다른 소프트웨어에 대한 인터페이스를 하드웨어에 제공한다. 드라이버(122)는, 예를 들어, APD(116)의 다양한 기능에 액세스하기 위해 프로세서(102) 상에서 실행되는 소프트웨어(예를 들어, 애플리케이션들(126))에 "API"(application programming interface)를 제공함으로써 APD(116)의 동작을 제어한다. 드라이버(122)는 또한 APD(116)의 처리 컴포넌트들(예컨대, 아래에서 더 상세히 논의되는 SIMD 유닛들(138))에 의한 실행을 위한 프로그램들을 컴파일하는 JIT(just-in-time) 컴파일러를 포함한다.2 is a block diagram of
APD(116)는 병렬 처리에 적합할 수 있는 그래픽 연산 및 비-그래픽 연산과 같은 선택된 기능에 대한 커맨드 및 프로그램을 실행한다. APD(116)는 픽셀 연산, 지오메트리 계산과 같은 그래픽 파이프라인 연산을 실행하는 데, 그리고 프로세서(102)로부터 수신된 커맨드에 기초하여 이미지를 디스플레이 디바이스(118)에 렌더링하는 데 사용될 수 있다. APD(116)는 또한 프로세서(102)로부터 수신된 커맨드에 기초하여, 비디오, 물리 시뮬레이션, 계산 유체 역학, 또는 다른 태스크와 같은, 그래픽 연산과 직접 관련되지 않은 컴퓨트 처리 동작을 실행한다.APD 116 executes commands and programs for selected functions, such as graphical operations and non-graphical operations that may be suitable for parallel processing. APD 116 may be used to perform graphics pipeline operations, such as pixel operations, geometry calculations, and render images to display
APD(116)는 SIMD 패러다임에 따라 병렬 방식으로 프로세서(102)의 요청으로 동작을 수행하는 하나 이상의 SIMD 유닛(138)을 포함하는 컴퓨트 유닛(132)을 포함한다. SIMD 패러다임은 다수의 처리 요소가 단일 프로그램 제어 흐름 유닛 및 프로그램 카운터를 공유하고 이에 따라 동일한 프로그램을 실행하지만 상이한 데이터로 그 프로그램을 실행할 수 있는 패러다임이다. 일례에서, 각각의 SIMD 유닛(138)은 16개의 레인을 포함하며, 여기서 각각의 레인은 SIMD 유닛(138) 내의 다른 레인과 동일한 시간에 동일한 명령어를 실행하지만 상이한 데이터로 그 명령어를 실행할 수 있다. 레인들은 모든 레인들이 주어진 명령어를 실행할 필요는 없는 경우 예측으로 스위치 오프될 수 있다. 예측은 또한 프로그램을 분기 제어 흐름으로 실행하는 데 사용될 수 있다. 더 구체적으로, 제어 흐름이 개별 레인에 의해 수행되는 계산들에 기초하는 조건부 분기들 또는 다른 명령어들을 갖는 프로그램들에 대해, 현재 실행되고 있지 않은 제어 흐름 경로들에 대응하는 레인들의 예측, 및 상이한 제어 흐름 경로들의 직렬 실행은 임의적인 제어 흐름을 가능하게 한다.APD 116 includes a
컴퓨트 유닛(132)에서의 실행의 기본 단위는 작업-항목이다. 각각의 작업-항목은 특정 레인에서 병렬로 실행될 프로그램의 단일 인스턴스화를 나타낸다. 작업-항목들은 단일 SIMD 처리 유닛(138) 상에서 "파면"으로서 동시에 실행될 수 있다. 하나 이상의 파면이 동일 프로그램을 실행하도록 지정된 작업-항목들의 집합을 포함하는 "작업 그룹"에 포함된다. 작업 그룹은 작업 그룹을 구성하는 파면들 각각을 실행함으로써 실행될 수 있다. 대안들에서, 파면들은 단일 SIMD 유닛(138) 상에서 순차적으로, 또는 상이한 SIMD 유닛들(138) 상에서 부분적으로 또는 완전히 병렬로 실행된다.The basic unit of execution in
커맨드 프로세서(136)는 상이한 컴퓨트 유닛들(132) 및 SIMD 유닛들(138) 상에서 다양한 작업 그룹들을 스케줄링하는 것과 관련된 동작들을 수행한다. 일반적으로, 커맨드 프로세서(136)는 프로세서(102)와 같은 엔티티로부터 커맨드들을 수신하며, 여기서 커맨드들은 그래픽 렌더링, 범용 셰이더의 실행 등과 같은 태스크들을 수행하도록 APD(116)에 지시한다.
컴퓨트 유닛(132)에 의해 제공되는 병렬성은 픽셀 값 계산, 정점 변환, 및 다른 그래픽 연산과 같은 그래픽 관련 연산에 적합하다. 따라서 몇몇 경우에, 프로세서(102)로부터 그래픽 처리 커맨드를 수신하는 그래픽 파이프라인(134)이 계산 태스크들을 병렬 실행을 위해 컴퓨트 유닛들(132)에 제공한다.The parallelism provided by
컴퓨트 유닛(132)은 또한 그래픽과 관련되지 않은, 또는 그래픽 파이프라인(134)의 "정상" 동작의 일부로서 수행되지 않는 계산 태스크(예를 들어, 그래픽 파이프라인(134)의 동작을 위해 수행되는 처리를 보완하기 위해 수행되는 커스텀 동작)를 수행하는 데 사용된다. 프로세서(102) 상에서 실행되는 애플리케이션(126) 또는 다른 소프트웨어는 그러한 계산 태스크들을 정의하는 프로그램들을 실행을 위해 APD(116)로 송신한다.
도 3은 도 2에 예시된 그래픽 처리 파이프라인(134)의 추가적인 세부 사항들을 도시하는 블록도이다. 그래픽 처리 파이프라인(134)은, 각각 특정 기능을 수행하는 스테이지들을 포함한다. 스테이지들은 그래픽 처리 파이프라인(134)의 기능의 세분을 나타낸다. 각각의 스테이지는 프로그래밍 가능한 처리 유닛(202)에서 실행되는 셰이더 프로그램으로서 부분적으로 또는 전체적으로 구현되거나, 프로그래밍 가능한 처리 유닛(202) 외부의 고정 기능, 프로그래밍 가능하지 않은 하드웨어로서 부분적으로 또는 전체적으로 구현된다.FIG. 3 is a block diagram illustrating additional details of the
입력 어셈블러 스테이지(302)는 유저-필드 버퍼(user-filled buffer)(예를 들어, 애플리케이션(126)과 같은, 프로세서(102)에 의해 실행되는 소프트웨어의 요청으로 채워지는 버퍼)로부터 프리미티브 데이터를 판독하고, 파이프라인의 나머지에 의한 사용을 위해 데이터를 프리미티브로 어셈블링한다. 입력 어셈블러 스테이지(302)는 유저-필드 버퍼에 포함된 프리미티브 데이터에 기초하여 상이한 유형들의 프리미티브들을 생성할 수 있다. 입력 어셈블러 스테이지(302)는 파이프라인의 나머지에 의한 사용을 위해 어셈블링된 프리미티브를 포맷한다.
정점 셰이더 스테이지(304)는 입력 어셈블러 스테이지(302)에 의해 어셈블링된 프리미티브의 정점을 처리한다. 정점 셰이더 스테이지(304)는 변환, 스키닝(skinning), 모핑(morphing) 및 정점별 라이팅(per-vertex lighting)과 같은 다양한 정점별 연산을 수행한다. 변환 연산은 정점의 좌표를 변환하기 위한 다양한 연산을 포함한다. 이러한 연산은 모델링 변환, 뷰잉 변환, 투영 변환, 원근 분할, 및 뷰포트 변환 중 하나 이상을 포함한다. 여기서, 그러한 변환은 변환이 수행되는 정점의 좌표 또는 "위치"를 수정하는 것으로 간주된다. 정점 셰이더 스테이지(304)의 다른 연산은 좌표 이외의 속성을 수정한다.
정점 셰이더 스테이지(304)는 하나 이상의 컴퓨트 유닛(132) 상에서 실행될 정점 셰이더 프로그램으로서 부분적으로 또는 전체적으로 구현된다. 정점 셰이더 프로그램은 프로세서(102)에 의해 제공되고, 컴퓨터 프로그래머에 의해 미리 작성된 프로그램에 기초한다. 드라이버(122)는 그러한 컴퓨터 프로그램을 컴퓨트 유닛(132) 내에서의 실행에 적합한 포맷을 갖는 정점 셰이더 프로그램을 생성하도록 컴파일한다.
헐 셰이더 스테이지(306), 테셀레이터 스테이지(308), 및 도메인 셰이더 스테이지(310)는, 프리미티브를 세분화함으로써 단순한 프리미티브를 보다 복잡한 프리미티브로 변환하는 테셀레이션을 구현하기 위해 함께 작동한다. 헐 셰이더 스테이지(306)는 입력 프리미티브에 기초하여 테셀레이션을 위한 패치를 생성한다. 테셀레이터 스테이지(308)는 패치를 위한 한 세트의 샘플들을 생성한다. 도메인 셰이더 스테이지(310)는 패치를 위한 샘플들에 대응하는 정점들에 대한 정점 위치들을 계산한다. 헐 셰이더 스테이지(306) 및 도메인 셰이더 스테이지(310)는 프로그래밍 가능한 처리 유닛(202) 상에서 실행될 셰이더 프로그램으로서 구현될 수 있다.The
지오메트리 셰이더 스테이지(312)는 프리미티브 단위로 정점 연산을 수행한다. 포인트 스프린트 확장, 동적 입자 시스템 연산, 퍼-핀(fur-fin) 생성, 섀도우 볼륨 생성, 단일 패스 렌더-투-큐브맵, 프리미티브별 머티리얼 스와핑, 및 프리미티브별 머티리얼 셋업과 같은 연산을 포함한, 다양한 상이한 유형의 연산들이 지오메트리 셰이더 스테이지(312)에 의해 수행될 수 있다. 몇몇 경우에, 프로그래밍 가능한 처리 유닛(202) 상에서 실행되는 셰이더 프로그램이 지오메트리 셰이더 스테이지(312)에 대한 연산을 수행한다.The
래스터라이저 스테이지(314)는 단순한 프리미티브 및 생성된 업스트림을 수신하고 래스터화한다. 래스터화는 어느 스크린 픽셀(또는 서브-픽셀 샘플)이 특정 프리미티브에 의해 커버되는지를 결정하는 것을 포함한다. 래스터화는 고정 기능 하드웨어에 의해 수행된다.
픽셀 셰이더 스테이지(316)는 업스트림에서 생성된 프리미티브 및 래스터화의 결과에 기초하여 스크린 픽셀에 대한 출력 값을 계산한다. 픽셀 셰이더 스테이지(316)는 텍스처 메모리로부터의 텍스처를 적용할 수 있다. 픽셀 셰이더 스테이지(316)에 대한 연산은 프로그래밍 가능한 처리 유닛(202) 상에서 실행되는 셰이더 프로그램에 의해 수행된다.
출력 합병 스테이지(318)는 픽셀 셰이더 스테이지(316)로부터의 출력을 수신하고 이러한 출력들을 합병하여, z-테스트 및 알파 블렌딩과 같은 연산을 수행하여 스크린 픽셀에 대한 최종 컬러를 결정한다.The
그래픽 처리 파이프라인(134)이 APD(116) 내에 포함되는 것으로 예시되어 있지만, 그래픽 처리 파이프라인(134)을 포함하지 않는(그러나 범용 컴퓨트 셰이더 프로그램들과 같은 셰이더 프로그램들을 실행하는 컴퓨트 유닛들(132)을 포함하는) APD(116)의 구현들이 본 개시에 의해 고려된다는 것이 이해되어야 한다.Although
본 명세서의 다른 곳에서 설명되는 바와 같이, 파면들은 복수의 작업-항목을 포함한다. SIMD 유닛들(138)은 SIMD 유닛(138)의 레인들에 걸쳐 락스텝(lockstep)으로 함께 파면의 작업-항목들을 실행함으로써 파면들을 실행한다. SIMD 유닛들(138)은 다수의 실행 인스턴스(작업-항목)에 대해 동일한 명령어 흐름 회로부(예를 들어, 명령어 페치 및 명령어 포인터 조정 회로부)를 이용함으로써 효율적인 방식으로 고도의 병렬 실행을 용이하게 한다. 각각의 레인은 하나의 작업-항목에 대한 데이터에 대해 하나의 명령어 인스턴스를 실행하기 위한 기능 하드웨어(예를 들어, 덧셈, 뺄셈, 곱셈, 나눗셈, 행렬 곱셈, 초월 함수, 및 다른 함수와 같은, APD(116)의 명령어 세트 아키텍처의 명령어들을 수행하기 위한 산술 로직 유닛 및 다른 회로부)를 구비한다.As explained elsewhere herein, wavefronts include multiple work-items.
레인당 하나의 작업-항목에 대해 이러한 명령어 유형들 모두를 실행하기 위한 하드웨어는, 소정 조건들이 충족되는 경우, 동시에 레인당 다수의 작업-항목에 대해 명령어들을 함께 실행하기에 충분하다. 예를 들어, SIMD 유닛들(138)은 각각의 작업-항목에 대해 행렬 곱셈 연산을 수행할 수 있기 때문에, 그리고 행렬 곱셈은 비교적 많은 수의 곱셈-덧셈 연산을 포함하기 때문에, SIMD 유닛들(138)은 곱셈, 덧셈 또는 융합-곱셈-덧셈 명령어들과 같은 다수의 "단순한" 명령어들을 그러한 기능 하드웨어가 그렇게 많지 않은 명령어들보다 더 높은 레이트로 실행하기 위한 하드웨어를 갖는다. 몇몇 명령어들에 대한 증가된 실행 레이트가 몇몇 경우들에서 달성될 수 있지만, SIMD 유닛들(138)의 하드웨어는 무조건적으로 "정상" 실행 레이트만을 지원하기에 충분하다. 다시 말해서, 레지스터 파일 대역폭 관련 제한들과 같은 다른 이유들로 인해 실행 레이트에 대한 제한들이 존재한다. 그럼에도 불구하고, 본 개시의 SIMD 유닛(138)은 다수의 상황에서 더 높은 레이트로 명령어들을 실행하려고 시도한다.The hardware to execute all of these instruction types on one work-item per lane is sufficient to execute the instructions together on multiple work-items per lane simultaneously, if certain conditions are met. For example, because
위에서 설명된 높아진 실행 레이트는 때때로 본 명세서에서 "증가된 실행 레이트"로 지칭된다. 실행 레이트를 증가시키는 기술을 수행함이 없는 명령어들의 실행은 때때로 본 명세서에서 "정상 실행 레이트"로 수행되는 것으로 일컬어진다. 하나의 구현에서, 증가된 실행 레이트와 정상 실행 레이트 사이의 구별되는 특징은, 증가된 실행 레이트에서는, 각각의 레인이 다수의 명령어들을 실행하는 반면, 정상 실행 레이트에서는, 각각의 레인이 하나의 명령어를 실행한다는 것이다. 증가된 실행 레이트로 각각의 레인에서 실행되는 다수의 명령어가 상이한 파면들로부터 오는 것이 가능하다. 대안적으로, 다수의 명령어가 동일 파면으로부터 오는 것이 가능하다. 예를 들어, 프로그램 순서에서의 다음 명령어가 프로그램 순서에서의 그 명령어 뒤의, 그리고 동일 파면으로부터의 명령어와 함께 실행되는 것이 가능하다.The increased execution rate described above is sometimes referred to herein as “increased execution rate.” Execution of instructions without performing a technique to increase execution rate is sometimes referred to herein as being performed at a "normal execution rate." In one implementation, the distinguishing characteristic between increased and normal execution rates is that, at the increased execution rate, each lane executes multiple instructions, whereas at the normal execution rate, each lane executes one instruction. is to execute. The increased execution rate makes it possible for multiple instructions executing on each lane to come from different wavefronts. Alternatively, it is possible for multiple instructions to come from the same wavefront. For example, it is possible for the next instruction in the program sequence to be executed along with the instruction after that instruction in the program sequence and from the same wavefront.
도 4는 예에 따른, SIMD 유닛(138)의 세부 사항들을 예시한다. 몇몇 예들에서, SIMD 유닛(138)의 예시된 블록들(예를 들어, 중재기(404), 기능 유닛들(406), 벡터 레지스터 파일(412), 또는 스칼라 레지스터 파일(414)) 각각은 본 명세서에 설명된 동작을 수행하도록 구성된 하드-와이어드 회로부로 구현가능하다. 다른 실시예들에서, SIMD 유닛(138)의 예시된 블록들 중 일부 또는 전부는 프로세서 상에서 실행되는 소프트웨어, 또는 소프트웨어와 하드웨어 회로부의 조합으로서 구현된다.4 illustrates details of
도 4의 SIMD 유닛(138)은 기능 유닛들(406), 중재기(404), 벡터 레지스터 파일(412), 및 스칼라 레지스터 파일(414)을 포함한다. 중재기(404)는 실행을 위해 하나 이상의 미결 작업 그룹(402)으로부터 하나 이상의 미결 명령어(403)를 선택하도록 구성된다. 각각의 미결 파면(402)은 실행을 위해 SIMD 유닛(138)에 할당되는 파면이다. 다양한 예들에서, 이러한 할당은 컴퓨트 유닛(132) 내의 스케줄러에 의해 또는 상세히 설명되지 않은 다른 스케줄러에 의해 수행된다. 몇몇 구현들에서, SIMD 유닛(138)은 레이턴시 은닉 목적으로 "과잉 구독(oversubscription)"된다. 용어 "과잉 구독"은 SIMD 유닛(138)에 할당되는 여러 작업 그룹이 있고, SIMD 유닛(138)이 이러한 할당된 작업 그룹들 각각을 동시에 실행하기에 충분한 하드웨어(예컨대, 기능 유닛들(406))를 갖고 있지 않다는 것을 의미한다. 따라서, SIMD 유닛(138)은 상이한 작업 그룹들로부터의 명령어들의 스케줄링을 교대로 한다. 레이턴시 은닉은 메모리 액세스가 완료되기를 기다리거나 긴 명령어들이 완료되기를 기다리는 것과 같은, 다양한 이유로 인해 작업 그룹들이 때때로 정지하기 때문에 발생한다.
각각의 미결 작업 그룹(402)은 기능 유닛들(406)에 의해 실행될 명령어들을 나타내는 하나 이상의 미결 명령어(403)를 갖는다. 몇몇 예들에서, 미결 명령어들(403)은 프로그램 순서에서 다음 명령어를 포함한다. 몇몇 예들에서, 미결 명령어들(403)은 하나 이상의 작업 그룹(402)에 대한 하나 초과의 명령어를 포함한다. 예에서, 미결 명령어들(403)은 프로그램 순서에서 다음 명령어 및 프로그램 순서에서 그 명령어 뒤의 다음 명령어를 포함한다.Each pending
중재기(404)는 미결 명령어들(403)을 검사하고, 명령어들을 정상 실행 레이트로 발행할지 또는 증가된 실행 레이트로 발행할지를 결정한다. 본 명세서의 다른 곳에서 언급되는 바와 같이, 기능 유닛들(406)은 일반적으로 적어도 정상 실행 레이트로 명령어들을 실행하기에 충분한 자원들을 갖는다. 그러나, 기능 유닛들(406)은 모든 상황에서 증가된 실행 레이트로 명령어들을 실행하기에 충분한 자원들을 갖지는 않는다. 다음의 적어도 2개의 자원이 때때로 실행을 정상 실행 레이트로 제한한다: 레지스터 파일 대역폭 및 기능 유닛 실행 자원들. 레지스터 파일 대역폭과 관련하여, 미결 명령어들(403)이 레지스터 파일들에 대해 존재하는 것보다 더 많은 대역폭을 요구하는 성질을 갖는 것이 가능하다. 그러한 상황에서, SIMD 유닛(138)은 증가된 실행 레이트로 동작할 수 없고, 정상 실행 레이트로 동작한다. 기능 유닛 실행 자원들과 관련하여, 기능 유닛들(406)에 존재하는 실행 자원들이 너무 적은 것으로 인해 함께 실행될 수 있는 미결 명령어들(403)이 없는 것이 가능하다. 그러한 상황에서, SIMD 유닛(138)은 정상 실행 레이트로 실행한다. 적어도 2개의 미결 명령어(403)를 함께 실행하기에 충분한 자원이 있는 경우, SIMD 유닛(138)은 증가된 실행 레이트로 실행한다. 용어 "함께 실행한다"는 기능 유닛들(406)이, 함께 실행되지 않으면, 상이한 클록 사이클(들)에서 수행될 다수의 명령어에 대한 연산들을 동일한 클록 사이클(들)에서 수행한다는 것을 의미한다. 예에서, 명령어가 덧셈 명령어인 경우, 2개의 명령어를 함께 실행하는 것은 단일 클록 사이클에서 각각의 명령어에 대한 덧셈 연산을 수행하는 것을 의미한다. 이러한 예에서, 2개의 명령어를 함께 실행하는 것은 2개의 명령어를 함께 실행하지 않는 것과는 대조적인데, 여기서 2개의 상이한 명령어에 대한 덧셈 연산들은 상이한 클록 사이클들에서 수행된다. 명령어들은 파이프라인화되며, 이는 명령어 실행이 다수의 하위 연산들을 포함하고, 다수의 하위 연산들 각각이 하나 이상의 클록 사이클에서 수행된다는 것을 의미한다는 점에 유의해야 한다. 명령어들을 함께 실행하기 위해, SIMD 유닛(138)의 레인은 동일한 사이클(들)에서 상이한 명령어들에 대한 다수의 하위 연산들을 실행할 수 있다.Arbiter 404 examines outstanding instructions 403 and determines whether to issue the instructions at the normal execution rate or at an increased execution rate. As noted elsewhere herein, functional units 406 generally have sufficient resources to execute instructions at least at a normal execution rate. However, functional units 406 do not have sufficient resources to execute instructions at an increased execution rate in all situations. At least two resources sometimes limit execution to the normal execution rate: register file bandwidth and functional unit execution resources. With regard to register file bandwidth, it is possible that outstanding instructions 403 may be of a nature requiring more bandwidth than exists for the register files. In such a situation,
본 명세서의 다른 곳에서 설명되는 바와 같이, SIMD 유닛들(138)이 더 높은 실행 레이트로 실행할 수 있는 한 가지 이유는, 몇몇 명령어들이 복잡하고 다수의 "단순한" 기능 유닛들을 요구하기 때문에 다수의 명령어들을 함께 실행하기에 충분한 기능 유닛들(406)이 존재하기 때문이다. 따라서 몇몇 예들에서, 명령어들을 함께 실행하는 것은 동일한 클록 사이클(들)에서 다수의 명령어들을 실행하는 것을 의미하며, 여기서 적어도 하나의 그러한 명령어는 다른 사이클들에서 복잡한 명령어에 의해 사용되는 "단순한" 기능 유닛을 사용하는 "단순한" 명령어이다. 예에서, 2개의 덧셈 명령어가 함께 실행되고, 적어도 하나의 그러한 덧셈 명령어는 상이한 시간에 실행되는 행렬 곱셈 명령어에 대해 사용되는 덧셈기를 사용한다.As explained elsewhere herein, one
전술된 바와 같이, 기능 유닛들의 수는 때때로 다수의 명령어가 함께 실행될 수 있는지 여부를 제한한다. 보다 구체적으로, 레인들은 명령어 세트 아키텍처에서 모든 명령어의 다수의 인스턴스를 실행하기 위한 중복 하드웨어를 포함하지 않기 때문에, SIMD 유닛(138)은 소정 유형의 명령어 조합들을 함께 실행할 수 없다. 구체적으로, SIMD 유닛(138)은 그 명령어를 실행하는 데 요구되는 기능 유닛들의 2개의 인스턴스가 기능 유닛들(406)에 존재하지 않는 명령어의 2개의 인스턴스를 함께 실행할 수 없다. 그러나, 그렇게 하기에 충분한 기능 유닛들이 존재하는 경우 매우 단순한 유형의 하나의 명령어 및 더 복잡한 유형의 다른 명령어가 함께 실행되는 것이 때때로 가능하다. 예에서, 덧셈, 곱셈, 및 융합-덧셈-곱셈 명령어들이 함께 실행될 수 있다. 단순한 명령어들의 다른 예는 단순한 수학 명령어들(예를 들어, 뺄셈), 비트 조작 명령어들(예를 들어, 비트별 AND, OR, XOR, 시프트 등), 또는 다른 명령어들을 포함한다. 몇몇 "공동-실행가능한 복잡한 명령어들"은 다수의 그러한 명령어들이 함께 실행되기에 충분한 하드웨어가 존재하지 않는 명령어들이다. 따라서, 중재기(404)는 함께 실행하기 위해 다수의 그러한 명령어들을 선택하지 않는다. 그러나, SIMD 유닛(138)은 단순한 명령어와 함께 공동-실행가능한 복잡한 명령어들을 실행하기에 충분한 하드웨어를 갖는다. 따라서, 중재기는 단순한 명령어와 함께 실행하기 위해 공동-실행가능한 복잡한 명령어를 선택하도록 허용된다. 마지막으로, 몇몇 "비-공동-실행가능한 복잡한 명령어들"은 단순한 명령어들과 함께 실행가능하기 위해 너무 많은 사이클을 소비하거나 너무 많은 기능 유닛들(406)을 소비한다. 따라서, SIMD 유닛(138)은 임의의 다른 명령어들과 함께 비-공동-실행가능한 복잡한 명령어들을 결코 실행하지 않는다.As mentioned above, the number of functional units sometimes limits whether multiple instructions can be executed together. More specifically, because the lanes do not contain redundant hardware to execute multiple instances of every instruction in an instruction set architecture,
도 4에서, 기능 유닛들(406)은 단순한 기능 유닛들(408) 및 복잡한 명령어들(410)을 위한 추가적인 로직을 포함한다. 단순한 기능 유닛들(408)은 단순한 명령어들을 실행하기 위한 기능 유닛들이다. 다양한 예들에서, 단순한 기능 유닛들(408)은 덧셈기들, 곱셈기들, 비트별 조작 명령어들 등을 포함한다. 복잡한 명령어들(410)을 위한 추가적인 로직은 공동-실행가능한 복잡한 명령어들을 위한 그리고 비-공동-실행가능한 복잡한 명령어들을 위한 하드웨어를 포함한다. 단순한 기능 유닛들(408)은 단순한 명령어들과 복잡한 명령어들(410)을 위한 추가적인 로직의 적어도 일부 사이에서 공유된다. 예를 들어, 덧셈기들 및 곱셈기들이 덧셈 및 곱셈 명령어들뿐만 아니라, 곱셈 및 덧셈을 사용하는 더 복잡한 명령어들을 위해 사용된다.In Figure 4, functional units 406 include simple
위에서 언급된 바와 같이, 중재기(404)는 미결 명령어들(403)이 레지스터 파일 대역폭 내에 맞는 레지스터 액세스 요건을 갖는 상황에서 실행을 위해 그러한 미결 명령어들(403)을 선택할 수 있다. 몇몇 예들에서, 레지스터 파일 대역폭은 레지스터 파일 포트들에서 이용가능한 대역폭을 지칭한다. 레지스터 파일 포트는 기능 유닛들(406)이 레지스터의 내용에 액세스할 수 있게 하는 인터페이스이며, 제한된 수의 레지스터 파일 포트가 존재한다. 예에서, 벡터 레지스터 파일(412)은 4개의 포트를 가지며, 이들 각각은 64 비트와 같은 클록 사이클당 소정 수의 비트를 제공할 수 있다. 중재기(404)가 벡터 레지스터 파일(412)의 대역폭 내에 맞는 다수의 미결 명령어들(403)을 찾을 수 없는 경우, 중재기(404)는 SIMD 유닛(138)이 정상 실행 레이트로 실행하여야 한다고 결정한다. 함께 실행할 모든 명령어들의 모든 피연산자에 액세스하기에 충분한 대역폭이 존재하는 경우 다수의 명령어들은 대역폭 "내에 맞는다".As mentioned above, arbiter 404 may select outstanding instructions 403 for execution in situations where the outstanding instructions 403 have register access requirements that fit within the register file bandwidth. In some examples, register file bandwidth refers to the bandwidth available at register file ports. A register file port is an interface that allows functional units 406 to access the contents of a register, and there is a limited number of register file ports. In the example, vector register file 412 has four ports, each of which can provide a certain number of bits per clock cycle, such as 64 bits. If the arbiter 404 cannot find a number of outstanding instructions 403 that fit within the bandwidth of the vector register file 412, the arbiter 404 determines that the
레지스터 파일 대역폭은, 몇몇 예들에서, 각각이 자신의 독립적인 대역폭을 갖는, 상이한 유형들의 레지스터 파일들이 존재한다는 사실에 의해 더욱 확장된다. 예에서, SIMD 유닛(138)은 벡터 레지스터 파일(412) 및 스칼라 레지스터 파일(414)을 포함한다. 벡터 레지스터 파일(412)은 벡터 레지스터 파일 포트들을 갖고, 스칼라 레지스터 파일(414)은 스칼라 레지스터 파일 포트들을 갖는다. 벡터 레지스터 파일 포트들은 스칼라 레지스터 파일 포트들과는 독립적으로 액세스된다. 따라서, 이용가능한 대역폭은 동일한 레지스터 파일에 액세스하는 명령어들의 세트들에 비해 상이한 레지스터 파일들에 액세스하는 명령어들의 세트들에 대해 증가한다. 예에서, 제1 명령어가 3개의 벡터 레지스터 파일 레지스터에 액세스하고, 제2 명령어가 2개의 벡터 레지스터 파일 레지스터 및 하나의 스칼라 레지스터 파일 레지스터에 액세스한다. 제3 명령어가 3개의 벡터 레지스터 파일 레지스터에 액세스한다. 제1 및 제2 명령어들은 제1 및 제3 또는 제2 및 제3 명령어들보다 레지스터 파일 대역폭 충돌을 겪을 가능성이 적다.Register file bandwidth is further expanded by the fact that, in some examples, there are different types of register files, each with its own independent bandwidth. In the example,
몇몇 예들에서, 명령어들은 피연산자들이 어느 "슬롯"에 있는지에 기초하여 레지스터 파일들 내의 피연산자들에 액세스한다. 보다 구체적으로, 명령어들은 특정 순서로 레지스터들을 참조한다. 이 순서에서의 레지스터의 장소는 슬롯을 정의한다. 몇몇 구현들에서, 명령어에 대한 레지스터들은 상이한 클록 사이클들에서 액세스되며, 레지스터들이 액세스되는 특정 사이클은 레지스터의 슬롯에 의존한다. 몇몇 구현들에서, 함께 실행되는 명령어들은 동일한 클록 사이클(들)에서 동일한 슬롯의 피연산자들에 액세스한다. 예에서, 함께 실행되는 2개의 명령어가 동일한 클록 사이클에서 제1 슬롯의 레지스터들에 액세스한다. 따라서, 2개의 명령어의 각각의 슬롯의 레지스터들에 액세스하기에 충분한 대역폭이 있는 경우, 그러한 2개의 명령어는 함께 실행될 수 있고, 충분한 대역폭이 없는 경우, 2개의 명령어는 함께 실행될 수 없다. 예에서, 2개의 명령어들은 그들의 제1 슬롯 내의 2개의 벡터 레지스터에 액세스한다. 벡터 레지스터 파일(412)이 제1 슬롯에 대한 클록 사이클에서 이러한 2개의 액세스를 충족시키기에 충분한 대역폭을 갖는 경우, 중재기(404)는 이러한 2개의 명령어를 함께 실행하도록 스케줄링할 수 있고, 만약 그렇지 않은 경우, 중재기(404)는 이러한 2개의 명령어를 함께 실행하도록 스케줄링할 수 없다.In some examples, instructions access operands within register files based on which “slot” the operands are in. More specifically, instructions reference registers in a specific order. The place of a register in this order defines a slot. In some implementations, registers for an instruction are accessed in different clock cycles, and the particular cycle in which registers are accessed depends on the register's slot. In some implementations, instructions executed together access operands in the same slot in the same clock cycle(s). In an example, two instructions executed together access registers in the first slot in the same clock cycle. Therefore, if there is sufficient bandwidth to access the registers of the two instructions' respective slots, those two instructions can be executed together, and if there is not enough bandwidth, the two instructions cannot be executed together. In the example, two instructions access two vector registers in their first slot. If vector register file 412 has sufficient bandwidth to satisfy these two accesses in the clock cycle for the first slot, arbiter 404 may schedule these two instructions to execute together; Otherwise, arbiter 404 cannot schedule these two instructions to be executed together.
중재기(404)가 2개의 명령어에 대한 레지스터 액세스가 이용가능한 레지스터 액세스 대역폭에 맞는지를 결정할 때 고려하는 다수의 태양이 있다. 하나의 태양은 명령어들에 의해 요구되는 대역폭의 양과 그러한 대역폭이 이용가능한지 여부 사이의 비교를 포함한다. 일례에서, 소정 수의 레지스터 파일 포트가 레지스터 액세스에 대해 이용가능하다. 각각의 포트는 클록 사이클당 소정 수의 비트에 대한 액세스를 제공할 수 있으며, 레지스터들에 대한 액세스는 소정 수의 그러한 비트를 요구한다. 예에서, 제1 명령어가 3개의 32 비트 벡터 레지스터에 액세스하고, 제2 명령어가 하나의 64 비트 벡터 레지스터 및 2개의 32 비트 레지스터에 액세스한다. 이 예에서, 벡터 레지스터 파일(412)에 대한 3개의 포트가 있으며, 각각은 64 비트의 대역폭을 제공한다. 이 경우에, 요구되는 비트들의 양(5 x 32 + 64 = 224)은 이용가능한 비트들의 수(192)보다 크고, 따라서 그러한 명령어들은 함께 실행될 수 없다. 다른 예에서, 제1 명령어가 2개의 32 비트 레지스터에 액세스하고 제2 명령어가 3개의 32 비트 레지스터에 액세스한다. 이 예에서, 다른 충돌이 존재하지 않는다면, 명령어들은 함께 실행될 수 있다.There are a number of aspects that arbiter 404 considers when determining whether the register accesses for two instructions fit within the available register access bandwidth. One aspect involves a comparison between the amount of bandwidth required by instructions and whether such bandwidth is available. In one example, a certain number of register file ports are available for register access. Each port can provide access to a certain number of bits per clock cycle, and access to registers requires a certain number of such bits. In the example, a first instruction accesses three 32-bit vector registers, and a second instruction accesses one 64-bit vector register and two 32-bit registers. In this example, there are three ports to the vector register file 412, each providing 64 bits of bandwidth. In this case, the amount of bits required (5 x 32 + 64 = 224) is greater than the number of bits available (192), so those instructions cannot be executed together. In another example, a first instruction accesses two 32-bit registers and a second instruction accesses three 32-bit registers. In this example, the instructions can be executed together if no other conflicts exist.
몇몇 구현들에서, 포트들은 단일 또는 이중 데이터 레이트를 제공할 수 있다. 이러한 구현들에서, 포트의 각각의 "절반"은 레지스터 파일의 상이한 뱅크에 액세스할 수 있다. 벡터 레지스터 파일의 뱅크는 상이한 뱅크에 할당된 레지스터들과 상호 배타적인 레지스터들의 세트를 포함하는 레지스터 파일의 일부이다. 포트는 포트에 대한 데이터가 2개의 상이한 뱅크로부터 소싱되는 경우에 레지스터 파일의 레지스터들에 대한 액세스의 향상된 레이트를 제공할 수 있다. 예에서, 홀수 레지스터들이 하나의 뱅크에 있고 짝수 레지스터들이 다른 뱅크에 있다. 따라서, 명령어들에 대한 레지스터 액세스들을 위해 대역폭이 이용가능한지 여부를 고려할 때, 중재기(404)는 액세스되는 레지스터들이 상이한 뱅크들에서 발견되는지 여부를 고려하며, 이는 이용가능한 대역폭을 증가시키거나 제한할 수 있다.In some implementations, ports may provide single or dual data rates. In these implementations, each “half” of the port can access a different bank of the register file. A bank of a vector register file is a portion of a register file that contains a set of mutually exclusive registers with registers assigned to different banks. A port can provide an improved rate of access to registers in a register file when data for the port is sourced from two different banks. In the example, the odd registers are in one bank and the even registers are in the other bank. Accordingly, when considering whether bandwidth is available for register accesses for instructions, arbiter 404 considers whether the registers being accessed are found in different banks, which may increase or limit the available bandwidth. You can.
다른 태양은 액세스되는 레지스터들의 레지스터 파일 유형들을 포함한다. 구체적으로, 위에서 설명된 바와 같이, 상이한 유형들의 레지스터 파일들은 그들 자신의 독립적인 대역폭을 갖는다. 예에서, 벡터 레지스터 파일(412)은, 각각 64 비트에 액세스할 수 있는, 3개의 포트를 갖고, 스칼라 레지스터 파일(414)이 또한, 각각 64 비트에 액세스할 수 있는, 3개의 포트를 갖는다. 따라서, 2개의 명령어가 벡터 레지스터와 스칼라 레지스터의 혼합을 갖는 경우, 중재기(404)는 벡터 레지스터 파일(412) 및 스칼라 레지스터 파일(414) 둘 모두에 걸쳐 충분한 대역폭이 있는지를 고려한다.Another aspect includes register file types of the registers being accessed. Specifically, as described above, different types of register files have their own independent bandwidth. In the example, vector register file 412 has three ports, each capable of accessing 64 bits, and scalar register file 414 also has three ports, each capable of accessing 64 bits. Accordingly, if two instructions have a mix of vector and scalar registers, arbiter 404 considers whether there is sufficient bandwidth across both vector register file 412 and scalar register file 414.
다른 태양은, 레지스터 파일(들)을 통해 직접 액세스되기 위해 필요한 대역폭의 양을 감소시키기 위해, 레지스터 파일 이외의 엔티티들로부터 레지스터 값들이 액세스될 수 있는지 여부를 포함한다. 몇몇 그러한 엔티티들은 SIMD 유닛(138) 실행 파이프라인 내의 전달 회로부, 피연산자 캐시, 또는 다른 피연산자 또는 명령어로서 사용되는 레지스터 값을 포함한다. 전달 회로부는 실행 파이프라인에서 발생하는 데이터 위험을 보상하는 회로부이다. 데이터 위험은 파이프라인 내의 하나의 명령어가 파이프라인 내의 다른 명령어에 의해 판독되는 레지스터에 기입하는 상황이다. 그러한 다른 명령어가 레지스터 파일로부터 레지스터의 값을 페치할 경우, 이것은 제1 명령어에 의해 생성된 값이 파일에 기입되기 전에 발생할 수 있으며, 다른 명령어가 스테일 데이터를 판독할 수 있다. 전달 회로부는 기입될 값들을 명령어에 제공함으로써 이것이 발생하는 것을 방지한다. 이러한 전달 회로부는 레지스터 파일의 대역폭을 차지하지 않는다. 따라서, 값 전달이 이러한 방식으로 발생하는 경우, 레지스터 파일의 대역폭은 효과적으로 증가된다. (예를 들어, 명령어가 파이프라인에 의해 실행되는 데 걸리는 사이클들의 수 내에서) 프로그램 순서에서 함께 가깝게 실행되는 명령어들은 종종 전달된 데이터를 사용한다. 피연산자 캐시들은 레지스터 값들을 캐싱한다. 명령어가 그러한 피연산자 캐시들로부터 값들을 획득할 수 있는 경우, 이것은 유효 레지스터 파일 대역폭을 증가시킨다. 레지스터 값들은 복제될 수 있으며, 이는 레지스터 값이 하나 이상의 명령어에 걸쳐 2회 이상 사용될 수 있음을 의미한다. 이 경우에, 하나의 액세스만이 레지스터 파일 대역폭을 소비한다.Another aspect includes whether register values can be accessed from entities other than the register file(s), to reduce the amount of bandwidth required to be accessed directly through the register file(s). Some such entities include transfer circuitry within the
요약하면, 중재기(404)는 2개의 명령어를 실행하기에 충분한 기능 유닛들(406)이 있는 상황에서, 그리고 충분한 레지스터 파일 대역폭이 있는 상황에서 병렬로 실행하기 위해 그러한 2개의(또는 그 초과의) 명령어를 선택할 수 있다. 2개의 명령어가 명령어 유형들을 가져서 각각의 레인이 둘 모두의 그러한 유형들을 함께 실행하기 위한 기능 유닛들(406)을 포함하는 경우에 충분한 기능 유닛들(406)이 있다. 2개의 명령어에 의해 액세스되는 피연산자들이 이용가능한 레지스터 파일 대역폭 내에 맞는 경우에 충분한 레지스터 파일 대역폭이 있다.In summary, the arbiter 404 can configure two (or more) instructions for execution in parallel in situations where there are sufficient functional units 406 to execute two instructions, and where there is sufficient register file bandwidth. ) You can select a command. There are enough functional units 406 if two instructions have instruction types such that each lane contains functional units 406 to execute both those types together. There is sufficient register file bandwidth if the operands accessed by two instructions fit within the available register file bandwidth.
주기적으로(예를 들어, 클록 사이클마다, 또는 중재기(404)가 실행을 위해 명령어들을 스케줄링할 준비가 될 때마다), 중재기(404)는 어느 명령어(들)를 실행할지 그리고 다수의 명령어들이 함께 실행될 수 있는지에 관한 결정을 행한다. 중재기(404)는 미결 명령어들(403)의 하나 이상의 조합을 고려하고, 그러한 하나 이상의 조합이 함께 실행될 수 있기 위해 본 명세서에 제시된 기준들을 충족시키는지를 결정한다. 그러한 조합들은 "적격 조합들"로 지칭된다. 중재기(404)는 그러한 조합이 존재하는 상황에서 함께 실행할 하나의 그러한 조합을 선택하고, 명령어들의 그러한 조합이 함께 실행되게 한다. 중재기(404)는 그러한 조합이 존재하지 않는 경우 명령어들의 어떠한 조합도 함께 실행되게 하지 않으며, 그 경우에, 하나의 명령어가 실행되게 한다. 다양한 예들에서, 중재기(404)는, 우선순위 할당 동작에 의해 결정된 바와 같은, 최고 우선순위를 갖는 적격 조합을 선택한다. 우선순위는 라운드 로빈 실행을 용이하게 하는 우선순위, 순방향 진행을 행하는 것을 돕는 우선순위, 또는 임의의 다른 기술적으로 실현가능한 방식으로 결정되는 우선순위와 같은, 임의의 기술적으로 실현가능한 방식으로 결정된다. 몇몇 예들에서, 최고 우선순위를 갖는 명령어가 임의의 다른 명령어와 함께 공동-실행가능하지 않지만 우선순위를 갖는 경우, 중재기(404)는 단독 실행을 위해 그 명령어를 선택한다.Periodically (e.g., per clock cycle, or whenever arbiter 404 is ready to schedule instructions for execution), arbiter 404 determines which instruction(s) to execute and a number of instructions. A decision is made as to whether they can be implemented together. Arbiter 404 considers one or more combinations of pending instructions 403 and determines whether such one or more combinations meet the criteria set forth herein to be able to be executed together. Such combinations are referred to as “Eligible Combinations.” The arbiter 404 selects one such combination to be executed together in situations where such combinations exist, and causes such combinations of instructions to be executed together. Arbiter 404 does not cause any combination of instructions to be executed together if no such combination exists, in which case it causes one instruction to be executed. In various examples, arbiter 404 selects the eligible combination with the highest priority, as determined by a priority assignment operation. The priority is determined in any technically feasible manner, such as a priority that facilitates round robin execution, a priority that helps effect forward progress, or a priority determined in any other technically feasible manner. In some examples, if an instruction with the highest priority is not co-executable with any other instruction but does have priority, arbiter 404 selects that instruction for standalone execution.
도 5는 예에 따른, 명령어들을 실행하기 위한 방법(500)의 흐름도이다. 도 1 내지 도 4의 시스템과 관련하여 설명되었지만, 당업자는 임의의 기술적으로 실현가능한 순서로 방법(500)의 단계들을 수행하도록 구성된 임의의 시스템이 본 개시의 범위에 속한다는 것을 인식할 것이다.5 is a flow diagram of a
단계 502에서, 중재기(404)는 실행을 위해 명령어들을 발행하기 위한 제1 시간에서 동작하고 있다. 중재기(404)는, 새로운 명령어들에 대해 자원들이 이용가능한 한, 다양한 시간에, 예컨대 사이클마다 실행을 위해 명령어들을 선택한다는 것이 이해되어야 한다. 중재기(404)는 명령어들의 제1 세트를 함께 실행하기에 충분한 처리 자원들이 존재함을 식별한다. 몇몇 예들에서, 명령어들을 함께 실행하는 것은 명령어들 각각에 대한 적어도 하나의 연산이 동일한 사이클(들)에서 SIMD 유닛(138)의 동일한 레인으로 수행되는 것을 의미한다. 몇몇 예들에서, 명령어들을 함께 실행하는 것은 명령어들 중 적어도 하나의 명령어의 적어도 하나의 연산이 복잡한 명령어들에 대해 사용되는 하드웨어(예를 들어, 행렬 곱셈 또는 다른 더 복잡한 명령어들에 대해 사용될 덧셈기들 중 하나)로 수행되는 것을 의미한다. 몇몇 예들에서, 명령어들을 함께 실행하는 것은 명령어들의 실행 레이트가 명령어들의 "정상" 실행 레이트를 넘어 증가되는 것을 의미한다. 몇몇 예들에서, 정상 실행 레이트는 각각의 명령어에 대한 레지스터 대역폭 및/또는 기능 유닛들에 대한 충돌이 있을지라도 명령어들이 실행될 수 있는 레이트이다. 몇몇 예들에서, 정상 실행 레이트는 (데이터가 메모리로부터 페치되기를 기다리는 것과 같은) 정지할 다른 이유가 없다고 가정하여 SIMD 유닛(138)의 하나의 레인이 실행을 보장하기에 충분한 하드웨어를 갖는 레이트이다. 몇몇 예들에서, 정상 실행 레이트는 단일 레이트 실행 레이트이고, 증가된 실행 레이트는 이중 실행 레이트이다. 몇몇 예들에서, 함께 실행될 명령어들은 상이한 파면들로부터의 것들이고, 다른 예들에서, 함께 실행될 명령어들은 동일한 파면으로부터의 것들이다. 함께 실행될 명령어들이 상이한 파면들로부터의 것들인 예들에서, 이러한 명령어들을 함께 실행하는 것은 명령어들이 함께 실행될 수 없는 경우 단지 하나의 파면으로부터의 연산들이 진행될 것과 동일한 시간에 2개의 파면에 대한 연산들이 진행될 수 있게 한다. 예에서, 명령어들을 함께 실행될 수 있는 경우, 2개의 파면 각각에 대한 하나의 명령어는 사이클마다(또는 소정 수의 사이클마다) 완료될 수 있는 반면, 그러한 명령어들을 함께 실행할 수 없다면, 단지 하나의 파면으로부터의 명령어가 사이클마다(또는 소정 수의 사이클마다) 완료될 수 있다.At
단계 502는 명령어들을 함께 실행하기에 충분한 처리 자원들이 있음을 식별하는 것을 포함한다. 몇몇 예들에서, 그러한 처리 자원들은 레지스터 파일 대역폭 및 기능 유닛들을 포함한다. 몇몇 예들에서, 각각의 레인은 명령어 유형들의 소정 조합들을 함께 실행하기에 충분한 기능 유닛들(406)을 갖지만, 명령어 유형들의 다른 조합들에 대해서는 그렇지 않다. 예에서, 행렬 곱셈과 같은 복잡한 명령어들은 덧셈기들 및 곱셈기들과 같은 다수의 소정 유형들의 기능 유닛들을 요구한다. 게다가, 각각의 레인은 각각의 명령어 유형을 실행할 수 있기 때문에, 각각의 레인은 이러한 상이한 기능 유닛들의 적어도 하나의 사본을 포함한다. 따라서, 각각의 레인은 단순한 덧셈 또는 곱셈 연산들과 같은 더 단순한 명령어들을 수행하기 위한 기능 유닛들의 다수의 사본을 포함한다. 따라서, 일례에서, 명령어들이 그러한 명령어들을 실행하기 위한 기능 유닛들의 적어도 하나의 사본이 존재하는 유형의 것인 경우에 2개의 명령어에 대해 충분한 처리 자원들이 존재한다.Step 502 includes identifying that there are sufficient processing resources to execute the instructions together. In some examples, such processing resources include register file bandwidth and functional units. In some examples, each lane has enough functional units 406 to execute together certain combinations of instruction types, but not for other combinations of instruction types. In an example, complex instructions such as matrix multiplication require multiple types of functional units such as adders and multipliers. Moreover, since each lane can execute a respective instruction type, each lane contains at least one copy of these different functional units. Accordingly, each lane contains multiple copies of functional units for performing simpler instructions such as simple addition or multiplication operations. Thus, in one example, there are sufficient processing resources for two instructions if the instructions are of a type for which there is at least one copy of the functional units for executing those instructions.
몇몇 예들에서, 레지스터 파일 대역폭은 벡터 레지스터 파일(412) 및 스칼라 레지스터 파일(414)과 같은 하나 이상의 레지스터 파일에 대한 대역폭을 포함한다. 몇몇 예들에서, 명령어들은 지정된 피연산자들에 기초하여 레지스터 파일 대역폭을 소비한다. 보다 구체적으로, 명령어들은 레지스터 이름에 의해 피연산자들을 지정할 수 있다. 또한, 이러한 피연산자들은 암시적으로 또는 명시적으로 전송될 필요가 있는 데이터의 양을 포함한다. 일례에서, 피연산자들은 32 비트 피연산자 또는 64 비트 피연산자이다. 중재기(404)는 다수의 명령어들에 대해 지정된 데이터의 양이 지정된 레지스터들에 대한 이용가능 대역폭보다 적은 경우 레지스터 파일 대역폭이 충분하다고 결정한다. 다양한 예들에서, 벡터 레지스터 파일(412)과 스칼라 레지스터 파일(414)은 독립적인 대역폭을 가지며, 이는 벡터 레지스터 파일(412)에 대한 액세스가 스칼라 레지스터 파일(414)의 대역폭을 소비하지 않고, 스칼라 레지스터 파일(414)에 대한 액세스가 벡터 레지스터 파일(412)에 대한 대역폭을 소비하지 않음을 의미한다. 또한, SIMD 유닛(138)이 캐시 또는 전달 회로부와 같은 상이한 위치로부터 피연산자들에 액세스할 수 있는 것과 같은 다른 이유로 소정의 레지스터 액세스가 대역폭을 소비하지 않는 것이 가능하다. (문자 그대로의 값들과 같은) 레지스터들을 참조하지 않는 피연산자들은 레지스터 파일 대역폭을 소비하지 않는다. 몇몇 예들에서, 레지스터 파일 액세스에 대한 제한들이 있다. 예를 들어, 몇몇 예들에서, 전체 대역폭에 액세스하기 위해, 액세스들은 레지스터 파일들의 2개(또는 그 초과)의 상이한 뱅크에 대한 것이어야 한다. 몇몇 예들에서, 모든 뱅크가 사용되는 경우 최대 대역폭이 액세스 가능하고, 레지스터 액세스들이 특정 뱅크로 편향되는 경우 대역폭은 제한된다. 예에서, 벡터 레지스터 파일(412)은 2개의 뱅크를 포함한다. 게다가, 2개의 명령어에 대한 레지스터 액세스들은 전체 대역폭을 이용하고, 뱅크들 간에 균등하게 분산된다. 그러한 상황에서, 명령어들을 함께 실행하기에 충분한 대역폭이 있다. 다른 예에서, 2개의 명령어에 대한 레지스터 액세스들은 전체 대역폭을 이용하지만, 하나의 뱅크로 심하게 편향된다. 그러한 예에서, 명령어들을 함께 실행하기에 충분한 대역폭이 없다.In some examples, register file bandwidth includes bandwidth for one or more register files, such as vector register file 412 and scalar register file 414. In some examples, instructions consume register file bandwidth based on the specified operands. More specifically, instructions can specify operands by register names. Additionally, these operands implicitly or explicitly contain the amount of data that needs to be transferred. In one example, the operands are 32-bit operands or 64-bit operands. Arbiter 404 determines that the register file bandwidth is sufficient if the amount of data specified for a number of instructions is less than the available bandwidth for the specified registers. In various examples, vector register file 412 and scalar register file 414 have independent bandwidths, such that accesses to vector register file 412 do not consume bandwidth of scalar register file 414, and accesses to scalar register file 414 do not consume bandwidth of scalar register file 414. This means that access to file 414 does not consume bandwidth to vector register file 412. Additionally, it is possible that some register accesses do not consume bandwidth for other reasons, such as
단계 502는 명령어들을 함께 실행하기에 충분한 기능 유닛들이 있다는 것뿐만 아니라, 명령어들을 함께 실행하기에 충분한 레지스터 대역폭이 있다고 결정하는 것을 포함한다. 단계 504에서, 이러한 결정에 응답하여, 중재기(404)는 함께 실행하기 위한 명령어의 제1 세트를 발행한다. 몇몇 구현들에서, 동작 동안, 중재기(404)는 때때로 함께 실행하기에 적합한 2개 이상의 명령어 세트 중에서 선택한다는 것이 이해되어야 한다. 몇몇 예들에서, 이러한 선택은 우선순위 메커니즘에 기초하여 발생한다.Step 502 includes determining that there are sufficient functional units to execute the instructions together, as well as that there is sufficient register bandwidth to execute the instructions together. At
단계 506에서, 중재기(404)는 함께 실행하기 위한 기준들을 충족시키는 명령어들의 세트가 없다고 결정한다. 일례에서, 이러한 결정은 (예를 들어, 너무 많은 기능 유닛(406)을 사용하는 것으로 인해) 임의의 다른 명령어와 함께 실행될 수 없는 명령어가 최고 우선순위를 갖기 때문에(따라서 실행되어야 하기 때문에) 발생한다. 다른 예들에서, 이러한 결정은 중재기(404)가 단계 502와 관련하여 설명된 기준들을 충족시키는 어떠한 명령어 세트도 찾을 수 없기 때문에 발생한다. 단계 508에서, 단계 506의 결정에 응답하여, 중재기(404)는 다수의 명령어들을 함께 발행하는 대신에 하나의 명령어를 발행한다.At
중재기(404)가 실행을 위해 명령어들을 발행하기 위해 방법(500)의 단계들을 연속적으로 수행한다는 것이 이해되어야 한다. 게다가, 방법(500)은 중재기(404)가 함께 실행하기 위한 명령어들을 선택하는 하나의 반복, 및 중재기(404)가 어떠한 다른 명령어와도 함께 실행하기 위한 것이 아닌 명령어를 선택하는 하나의 반복을 포함하지만, 이러한 특정 패턴은 단지 예시적인 것이며, 중재기(404)는 런타임 상황들이 보증하는 바에 따라 함께 실행하기 위한 또는 함께 실행하기 위한 것이 아닌 명령어들을 자유롭게 선택한다는 것이 이해되어야 한다.It should be understood that arbiter 404 sequentially performs the steps of
본 명세서의 개시 내용에 기초하여 많은 변형이 가능하다는 것이 이해되어야 한다. 특징부들 및 요소들이 특정 조합으로 전술되지만, 각각의 특징부 또는 요소는 다른 특징부들 및 요소들 없이 단독으로, 또는 다른 특징부들 및 요소들과 함께 또는 이들 없이 다양한 조합으로 사용될 수 있다.It should be understood that many modifications are possible based on the disclosure herein. Although features and elements are described above in specific combinations, each feature or element may be used alone, without other features and elements, or in various combinations with or without other features and elements.
도면에 예시된 그리고/또는 본 명세서에서 설명된 다양한 기능 유닛들(프로세서(102), 입력 드라이버(112), 입력 디바이스들(108), 출력 드라이버(114), 출력 디바이스들(110), 가속 처리 디바이스(116), 커맨드 프로세서(136), 그래픽 처리 파이프라인(134), 컴퓨트 유닛들(132), SIMD 유닛들(138), 시스템(400), 또는 레지스터 할당기(402)를 포함하지만, 이로 제한되지 않음)은 범용 컴퓨터, 프로세서, 또는 프로세서 코어로서, 또는 프로그램, 소프트웨어, 또는 펌웨어로서 구현되고, 비일시적 컴퓨터 판독가능 매체에 또는 다른 매체에 저장되고, 범용 컴퓨터, 프로세서, 또는 프로세서 코어에 의해 실행가능할 수 있다. 제공된 방법은 범용 컴퓨터, 프로세서, 또는 프로세서 코어로 구현될 수 있다. 적합한 프로세서는, 예로서, 범용 프로세서, 특수 목적 프로세서, 종래의 프로세서, DSP(digital signal processor), 복수의 마이크로프로세서, DSP 코어와 연관된 하나 이상의 마이크로프로세서, 컨트롤러, 마이크로컨트롤러, ASIC(Application Specific Integrated Circuit), FPGA(Field Programmable Gate Array) 회로, 임의의 다른 유형의 IC(integrated circuit), 및/또는 상태 기계를 포함한다. 그러한 프로세서들은 처리된 HDL(hardware description language) 명령어 및 네트리스트(netlist)를 포함하는 다른 중개 데이터의 결과를 이용하여 제조 프로세스를 구성함으로써 제조될 수 있다(그러한 명령어는 컴퓨터 판독가능 매체에 저장될 수 있음). 그러한 처리의 결과는 이어서 본 개시의 특징부를 구현하는 프로세서를 제조하기 위해 반도체 제조 프로세스에 사용되는 마스크워크(maskwork)일 수 있다.Various functional units illustrated in the figures and/or described herein (
본 명세서에서 제공된 방법 또는 흐름도는 범용 컴퓨터 또는 프로세서에 의한 실행을 위해 비일시적 컴퓨터 판독가능 저장 매체에 통합된 컴퓨터 프로그램, 소프트웨어, 또는 펌웨어로 구현될 수 있다. 비일시적 컴퓨터 판독가능 저장 매체의 예는 ROM(read only memory), RAM(random access memory), 레지스터, 캐시 메모리, 반도체 메모리 디바이스, 자기 매체, 예컨대 내부 하드 디스크 및 이동식 디스크, 광자기 매체, 및 광 매체, 예컨대 CD-ROM 디스크, 및 DVD(digital versatile disk)를 포함한다.The methods or flow diagrams provided herein may be implemented as a computer program, software, or firmware incorporated into a non-transitory computer-readable storage medium for execution by a general-purpose computer or processor. Examples of non-transitory computer-readable storage media include read only memory (ROM), random access memory (RAM), registers, cache memory, semiconductor memory devices, magnetic media such as internal hard disks and removable disks, magneto-optical media, and optical media. Includes media such as CD-ROM disks, and digital versatile disks (DVDs).
Claims (20)
실행을 위해 명령어들을 발행하기 위한 제1 시간에, 처리 레인 내에서 명령어들의 제1 세트를 함께 실행하기에 충분한 처리 자원들이 존재한다고 식별하는 것을 포함한, 제1 식별을 수행하는 단계;
상기 제1 식별에 응답하여, 상기 명령어들의 제1 세트를 함께 실행하는 단계;
실행을 위해 명령어들을 발행하기 위한 제2 시간에, 처리 레인 내에서 함께 실행하기 위해 충분한 처리 자원들이 존재하는 명령어들이 이용가능하지 않다고 식별하는 것을 포함한, 제2 식별을 수행하는 단계;
상기 제2 식별에 응답하여, 명령어를 임의의 다른 명령어와는 독립적으로 실행하는 단계를 포함하는, 방법.As a method,
At a first time to issue instructions for execution, performing a first identification, including identifying that sufficient processing resources exist within a processing lane to jointly execute the first set of instructions;
In response to the first identification, executing the first set of instructions together;
At a second time for issuing instructions for execution, performing a second identification, including identifying that instructions for which there are sufficient processing resources for execution together within a processing lane are not available;
In response to the second identification, executing an instruction independently of any other instructions.
명령어들을 저장하도록 구성된 메모리; 및
처리 유닛을 포함하며, 상기 처리 유닛은,
실행을 위해 상기 메모리로부터 획득된 명령어들을 발행하기 위한 제1 시간에, 처리 레인 내에서 명령어들의 제1 세트를 함께 실행하기에 충분한 처리 자원들이 존재한다고 식별하는 것을 포함한, 제1 식별을 수행하고,
상기 제1 식별에 응답하여, 상기 명령어들의 제1 세트를 함께 실행하고,
실행을 위해 상기 메모리로부터 획득된 명령어들을 발행하기 위한 제2 시간에, 상기 처리 레인 내에서 함께 실행하기 위해 충분한 처리 자원들이 존재하는 명령어들이 이용가능하지 않다고 식별하는 것을 포함한, 제2 식별을 수행하고,
상기 제2 식별에 응답하여, 명령어를 임의의 다른 명령어와는 독립적으로 실행하도록 구성되는, 컴퓨트 유닛.As a compute unit,
a memory configured to store instructions; and
A processing unit comprising:
At a first time to issue instructions obtained from the memory for execution, perform a first identification, including identifying that sufficient processing resources exist within a processing lane to jointly execute the first set of instructions;
In response to the first identification, jointly executing the first set of instructions;
At a second time to issue instructions obtained from the memory for execution, perform a second identification, including identifying that instructions for which there are sufficient processing resources for execution together within the processing lane are not available; ,
In response to the second identification, the compute unit is configured to execute an instruction independently of any other instructions.
복수의 컴퓨트 유닛들을 포함하며, 각각의 컴퓨트 유닛은,
명령어들을 저장하도록 구성된 메모리, 및
처리 유닛을 포함하며, 상기 처리 유닛은,
실행을 위해 상기 메모리로부터 획득된 명령어들을 발행하기 위한 제1 시간에, 처리 레인 내에서 명령어들의 제1 세트를 함께 실행하기에 충분한 처리 자원들이 존재한다고 식별하는 것을 포함한, 제1 식별을 수행하고,
상기 제1 식별에 응답하여, 상기 명령어들의 제1 세트를 함께 실행하고,
실행을 위해 상기 메모리로부터 획득된 명령어들을 발행하기 위한 제2 시간에, 상기 처리 레인 내에서 함께 실행하기 위해 충분한 처리 자원들이 존재하는 명령어들이 이용가능하지 않다고 식별하는 것을 포함한, 제2 식별을 수행하고,
상기 제2 식별에 응답하여, 명령어를 임의의 다른 명령어와는 독립적으로 실행하도록 구성되는, 가속 처리 디바이스.As an accelerated processing device,
It includes a plurality of compute units, each compute unit having:
a memory configured to store instructions, and
A processing unit comprising:
At a first time to issue instructions obtained from the memory for execution, perform a first identification, including identifying that sufficient processing resources exist within a processing lane to jointly execute the first set of instructions;
In response to the first identification, jointly executing the first set of instructions;
At a second time to issue instructions obtained from the memory for execution, perform a second identification, including identifying that instructions for which there are sufficient processing resources for execution together within the processing lane are not available; ,
In response to the second identification, the accelerated processing device is configured to execute an instruction independently of any other instructions.
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/219,775 US11656877B2 (en) | 2021-03-31 | 2021-03-31 | Wavefront selection and execution |
US17/219,775 | 2021-03-31 | ||
PCT/US2022/018558 WO2022211962A1 (en) | 2021-03-31 | 2022-03-02 | Wavefront selection and execution |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20230160893A true KR20230160893A (en) | 2023-11-24 |
Family
ID=83449761
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020237036512A KR20230160893A (en) | 2021-03-31 | 2022-03-02 | Select and run wavefront |
Country Status (6)
Country | Link |
---|---|
US (2) | US11656877B2 (en) |
EP (1) | EP4315061A1 (en) |
JP (1) | JP2024511764A (en) |
KR (1) | KR20230160893A (en) |
CN (1) | CN117099081A (en) |
WO (1) | WO2022211962A1 (en) |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5488729A (en) | 1991-05-15 | 1996-01-30 | Ross Technology, Inc. | Central processing unit architecture with symmetric instruction scheduling to achieve multiple instruction launch and execution |
GB2469822B (en) | 2009-04-28 | 2011-04-20 | Imagination Tech Ltd | Method and apparatus for scheduling the issue of instructions in a multithreaded microprocessor |
US9600279B2 (en) * | 2012-07-26 | 2017-03-21 | Verisilicon Holdings Co., Ltd. | Circuit and method for searching a data array and single-instruction, multiple-data processing unit incorporating the same |
US11106462B2 (en) * | 2019-05-24 | 2021-08-31 | Texas Instruments Incorporated | Method and apparatus for vector sorting |
US10055229B2 (en) * | 2016-01-21 | 2018-08-21 | Arm Limited | Controlling processing of instructions in a processing pipeline |
US10460513B2 (en) | 2016-09-22 | 2019-10-29 | Advanced Micro Devices, Inc. | Combined world-space pipeline shader stages |
US10261835B2 (en) | 2017-03-21 | 2019-04-16 | Arm Limited | Hardware thread scheduling |
WO2018219440A1 (en) | 2017-05-31 | 2018-12-06 | Huawei Technologies Co., Ltd. | System and method for dynamic determination of a number of parallel threads for a request |
US11314516B2 (en) * | 2018-01-19 | 2022-04-26 | Marvell Asia Pte, Ltd. | Issuing instructions based on resource conflict constraints in microprocessor |
US11055895B2 (en) * | 2019-08-29 | 2021-07-06 | Advanced Micro Devices, Inc. | Shader merge for reduced divergence |
-
2021
- 2021-03-31 US US17/219,775 patent/US11656877B2/en active Active
-
2022
- 2022-03-02 WO PCT/US2022/018558 patent/WO2022211962A1/en active Application Filing
- 2022-03-02 EP EP22781826.7A patent/EP4315061A1/en active Pending
- 2022-03-02 KR KR1020237036512A patent/KR20230160893A/en unknown
- 2022-03-02 JP JP2023557708A patent/JP2024511764A/en active Pending
- 2022-03-02 CN CN202280026170.XA patent/CN117099081A/en active Pending
-
2023
- 2023-04-28 US US18/309,536 patent/US20230266975A1/en active Pending
Also Published As
Publication number | Publication date |
---|---|
US20230266975A1 (en) | 2023-08-24 |
US20220318021A1 (en) | 2022-10-06 |
WO2022211962A1 (en) | 2022-10-06 |
CN117099081A (en) | 2023-11-21 |
US11656877B2 (en) | 2023-05-23 |
JP2024511764A (en) | 2024-03-15 |
EP4315061A1 (en) | 2024-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20180321938A1 (en) | Generalized acceleration of matrix multiply accumulate operations | |
US11004258B2 (en) | Combined world-space pipeline shader stages | |
KR102459322B1 (en) | Primitive culling using compute shaders that compile automatically | |
CA2721396A1 (en) | Programmable streaming processor with mixed precision instruction execution | |
US10643369B2 (en) | Compiler-assisted techniques for memory use reduction in graphics pipeline | |
US20210026686A1 (en) | Chiplet-integrated machine learning accelerators | |
US20200159581A1 (en) | Variable latency request arbitration | |
US20210374607A1 (en) | Stacked dies for machine learning accelerator | |
US11656877B2 (en) | Wavefront selection and execution | |
US11276135B2 (en) | Parallel data transfer to increase bandwidth for accelerated processing devices | |
WO2024001699A1 (en) | Method for processing shader input data, and graphics processing apparatus |