KR20240032993A - 그래픽스 프로세서들에 대한 로직 슬롯 대 하드웨어 슬롯 맵핑 - Google Patents
그래픽스 프로세서들에 대한 로직 슬롯 대 하드웨어 슬롯 맵핑 Download PDFInfo
- Publication number
- KR20240032993A KR20240032993A KR1020247004578A KR20247004578A KR20240032993A KR 20240032993 A KR20240032993 A KR 20240032993A KR 1020247004578 A KR1020247004578 A KR 1020247004578A KR 20247004578 A KR20247004578 A KR 20247004578A KR 20240032993 A KR20240032993 A KR 20240032993A
- Authority
- KR
- South Korea
- Prior art keywords
- slots
- graphics
- logic
- slot
- circuitry
- Prior art date
Links
- 238000013507 mapping Methods 0.000 title claims description 77
- 238000000034 method Methods 0.000 claims abstract description 144
- 238000009826 distribution Methods 0.000 claims abstract description 143
- 230000015654 memory Effects 0.000 claims description 58
- 238000013461 design Methods 0.000 claims description 56
- 238000012545 processing Methods 0.000 claims description 50
- 239000012634 fragment Substances 0.000 claims description 28
- 238000003860 storage Methods 0.000 claims description 23
- 238000004519 manufacturing process Methods 0.000 claims description 22
- 239000004065 semiconductor Substances 0.000 claims description 17
- 238000011010 flushing procedure Methods 0.000 claims description 13
- 238000012546 transfer Methods 0.000 claims description 10
- 238000010586 diagram Methods 0.000 description 57
- 230000004044 response Effects 0.000 description 22
- 230000008569 process Effects 0.000 description 20
- 238000004891 communication Methods 0.000 description 19
- 230000006870 function Effects 0.000 description 19
- 239000004744 fabric Substances 0.000 description 18
- 230000008901 benefit Effects 0.000 description 17
- 230000007704 transition Effects 0.000 description 17
- 238000010801 machine learning Methods 0.000 description 9
- 238000009877 rendering Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 6
- 230000001419 dependent effect Effects 0.000 description 5
- 238000007726 management method Methods 0.000 description 5
- 239000000463 material Substances 0.000 description 5
- 230000008520 organization Effects 0.000 description 5
- 230000008685 targeting Effects 0.000 description 5
- 230000009471 action Effects 0.000 description 4
- 230000006399 behavior Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 238000012423 maintenance Methods 0.000 description 4
- 230000011664 signaling Effects 0.000 description 4
- 241001522296 Erithacus rubecula Species 0.000 description 3
- 230000001413 cellular effect Effects 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 230000036541 health Effects 0.000 description 3
- 238000012544 monitoring process Methods 0.000 description 3
- 238000013528 artificial neural network Methods 0.000 description 2
- 239000002184 metal Substances 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 230000002093 peripheral effect Effects 0.000 description 2
- 230000000717 retained effect Effects 0.000 description 2
- 238000005070 sampling Methods 0.000 description 2
- 238000012163 sequencing technique Methods 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 208000035473 Communicable disease Diseases 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000003190 augmentative effect Effects 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000003990 capacitor Substances 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000000151 deposition Methods 0.000 description 1
- 230000007613 environmental effect Effects 0.000 description 1
- 230000003203 everyday effect Effects 0.000 description 1
- 238000001914 filtration Methods 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 238000013467 fragmentation Methods 0.000 description 1
- 238000006062 fragmentation reaction Methods 0.000 description 1
- 239000011521 glass Substances 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 208000015181 infectious disease Diseases 0.000 description 1
- 230000000977 initiatory effect Effects 0.000 description 1
- 238000009434 installation Methods 0.000 description 1
- 230000000873 masking effect Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012806 monitoring device Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000002688 persistence Effects 0.000 description 1
- 238000012913 prioritisation Methods 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
- 230000002123 temporal effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012549 training Methods 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 230000001052 transient effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
-
- 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/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/60—Memory management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/28—Indexing scheme for image data processing or generation, in general involving image processing hardware
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Image Generation (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
개시된 기법들은 그래픽스 프로세서들에서의 작업 분배에 관한 것이다. 일부 실시예들에서, 장치는, 복수의 로직 슬롯들을 구현하는 회로부, 및 각각 다수의 분산형 하드웨어 슬롯들을 구현하는 그래픽스 프로세서 서브유닛들의 세트를 포함한다. 회로부는 그래픽스 작업의 제1 및 제2 세트들에 대한 상이한 분배 규칙들을 결정할 수 있고, 분배 규칙들에 기초하여 로직 슬롯들을 분산형 하드웨어 슬롯들에 맵핑할 수 있다. 다양한 실시예들에서, 개시된 기법들은 유리하게는, 다양한 크기들의 그래픽스 킥들을 위해 분산형 셰이더 프로세서들에 걸쳐 작업을 효율적으로 분배할 수 있다.
Description
기술분야
본 개시내용은 대체적으로 그래픽스 프로세서들에 관한 것으로, 더 구체적으로는, 다수의 복제된 프로세싱 요소들을 갖는 그래픽스 프로세서들에서 그래픽스 작업을 분배하기 위한 기법들에 관한 것이다.
배경기술
그들의 성장하는 계산 능력들을 고려하면, 그래픽스 프로세싱 유닛(graphics processing unit, GPU)들은 이제 대규모 작업부하들을 위해 광범위하게 사용되고 있다. 작업부하들은, 예를 들어, 정점 셰이더, 프래그먼트 셰이더, 및 계산 태스크들을 포함할 수 있다. 메탈(Metal) 및 OpenCL과 같은 API들은 소프트웨어 개발자들에게 그들의 애플리케이션들에 대한 GPU의 계산 전력에 액세스하기 위한 인터페이스를 제공한다. 최근에, 소프트웨어 개발자들은 그들의 애플리케이션들의 상당한 부분들을 GPU를 사용하는 것으로 이동시키고 있었다.
프로세스 기술들이 축소되고 GPU들이 더 강력해짐에 따라, 그들은 많은 수의 셰이더 코어들을 포함할 수 있다. 소프트웨어 또는 펌웨어는 "킥(kick)들"로 지칭되는, 수행될 작업의 유닛들을 제공할 수 있다 데이터 마스터 회로부(예컨대, 계산 데이터 마스터, 정점 데이터 마스터, 및 픽셀 데이터 마스터)는 이러한 킥들로부터의 작업을, 예컨대 통신 패브릭을 통해, 다수의 복제된 셰이더 코어들로 분배할 수 있다. 셰이더들의 수가 스케일링됨에 따라, 작업 분배 및 스케줄링 기법들은 성능 및 전력 소비에 실질적으로 영향을 줄 수 있다.
도 1a는 일부 실시예들에 따른, 예시적인 그래픽스 프로세싱 동작들의 개요를 예시하는 도면이다.
도 1b는 일부 실시예들에 따른, 예시적인 그래픽스 유닛을 예시하는 블록도이다.
도 2는 일부 실시예들에 따른, 분산형 하드웨어 슬롯들에 로직 슬롯들을 맵핑하도록 구성된 예시적인 일차 제어 회로부를 예시하는 블록도이다.
도 3은 일부 실시예들에 따른, 일차 제어 회로부 및 GPU 하드웨어 서브유닛들의 예시적인 그룹들을 예시하는 블록도이다.
도 4는 일부 실시예들에 따른, 분산형 하드웨어 슬롯들에 로직 슬롯들을 맵핑하기 위한 3개의 예시적인 분배 모드들을 예시하는 도면이다.
도 5는 일부 실시예들에 따른, 상이한 분배 모드들을 사용하여 분산형 하드웨어에 대한 다수의 로직 슬롯들의 예시적인 맵핑을 예시하는 도면이다.
도 6은 일부 실시예들에 따른, 일차 제어 회로부의 세부적인 예시적인 요소들을 예시하는 블록도이다.
도 7은 일부 실시예들에 따른, 예시적인 분산형 슬롯 상태들 및 커널 레지던시 정보를 예시하는 도면이다.
도 8은 일부 실시예들에 따른, 분산형 mGPU 하드웨어 슬롯들에 로직 슬롯들을 맵핑하기 위한 예시적인 방법을 예시하는 흐름도이다.
도 9는 일부 실시예들에 따른, 예시적인 소프트웨어 오버라이드 필드들을 예시하는 도면이다.
도 10a 내지 도 10c는 일부 실시예들에 따른, 상이한 예시적인 분배 모드들 동안의 하드웨어 슬롯 상태에 기초하여 하드웨어 슬롯들을 선택하기 위한 예시적인 기법들을 예시하는 흐름도이다.
도 11a는 일부 실시예들에 따른, 예시적인 로직 슬롯 홀드 상태 값들을 예시하는 도면이다.
도 11b는 일부 실시예들에 따른, 하드웨어 슬롯들을 갱생하기 위한 예시적인 기법들을 예시하는 흐름도이다.
도 12는 일부 실시예들에 따른, 예시적인 소프트웨어 제어형 하드웨어 슬롯 유지 절차를 예시하는 흐름도이다.
도 13은 일부 실시예들에 따른, 더 높은 우선순위 로직 슬롯들에 대한 mGPU 내의 예시적인 예약된 하드웨어 슬롯들을 예시하는 도면이다.
도 14a는 무조건부 필드를 인코딩하는 예시적인 캐시 플러시 무효화(cache flush invalidate, CFI) 커맨드를 예시하고, 도 14b는 일부 실시예들에 따른, 예시적인 플러시 제어 회로부를 예시한다.
도 15는 일부 실시예들에 따른, 그래픽스 작업의 세트에 의해 표시되는 예시적인 친화도 맵을 예시하는 블록도이다.
도 16은 일부 실시예들에 따른, 친화도 기반 스케줄링을 위한 예시적인 커널 워커 회로부를 예시하는 블록도이다.
도 17은 일부 실시예들에 따른, 소프트웨어 표시 친화도에 기초한 커널의 예시적인 반복을 예시하는 도면이다.
도 18은 일부 실시예들에 따른, 예시적인 작업 공유 제어 회로부를 예시하는 블록도이다.
도 19a는 종속성 추적 및 상태 회로부를 갖는 예시적인 로직 슬롯 관리자를 예시하는 블록도이고, 도 19b는 일부 실시예들에 따른, 예시적인 추적 및 상태 필드들을 예시한다.
도 20은 일부 실시예들에 따른, 킥슬롯 관리자에 대한 예시적인 레지스터 프리페치 버퍼를 예시하는 도면이다.
도 21은 일부 실시예들에 따른, 킥슬롯 관리자에 의해 핸들링되는 상단 슬롯에 대한 예시적인 상태 머신을 예시하는 도면이다.
도 22 내지 도 25는 일부 실시예들에 따른, 예시적인 방법들을 예시하는 흐름도들이다.
도 26은 일부 실시예들에 따른, 예시적인 컴퓨팅 디바이스를 예시하는 블록도이다.
도 27은 일부 실시예들에 따른, 개시된 시스템들 및 디바이스들의 예시적인 애플리케이션들을 예시하는 도면이다.
도 28은 일부 실시예들에 따른, 회로 설계 정보를 저장하는 예시적인 컴퓨터 판독가능 매체를 예시하는 블록도이다.
도 1b는 일부 실시예들에 따른, 예시적인 그래픽스 유닛을 예시하는 블록도이다.
도 2는 일부 실시예들에 따른, 분산형 하드웨어 슬롯들에 로직 슬롯들을 맵핑하도록 구성된 예시적인 일차 제어 회로부를 예시하는 블록도이다.
도 3은 일부 실시예들에 따른, 일차 제어 회로부 및 GPU 하드웨어 서브유닛들의 예시적인 그룹들을 예시하는 블록도이다.
도 4는 일부 실시예들에 따른, 분산형 하드웨어 슬롯들에 로직 슬롯들을 맵핑하기 위한 3개의 예시적인 분배 모드들을 예시하는 도면이다.
도 5는 일부 실시예들에 따른, 상이한 분배 모드들을 사용하여 분산형 하드웨어에 대한 다수의 로직 슬롯들의 예시적인 맵핑을 예시하는 도면이다.
도 6은 일부 실시예들에 따른, 일차 제어 회로부의 세부적인 예시적인 요소들을 예시하는 블록도이다.
도 7은 일부 실시예들에 따른, 예시적인 분산형 슬롯 상태들 및 커널 레지던시 정보를 예시하는 도면이다.
도 8은 일부 실시예들에 따른, 분산형 mGPU 하드웨어 슬롯들에 로직 슬롯들을 맵핑하기 위한 예시적인 방법을 예시하는 흐름도이다.
도 9는 일부 실시예들에 따른, 예시적인 소프트웨어 오버라이드 필드들을 예시하는 도면이다.
도 10a 내지 도 10c는 일부 실시예들에 따른, 상이한 예시적인 분배 모드들 동안의 하드웨어 슬롯 상태에 기초하여 하드웨어 슬롯들을 선택하기 위한 예시적인 기법들을 예시하는 흐름도이다.
도 11a는 일부 실시예들에 따른, 예시적인 로직 슬롯 홀드 상태 값들을 예시하는 도면이다.
도 11b는 일부 실시예들에 따른, 하드웨어 슬롯들을 갱생하기 위한 예시적인 기법들을 예시하는 흐름도이다.
도 12는 일부 실시예들에 따른, 예시적인 소프트웨어 제어형 하드웨어 슬롯 유지 절차를 예시하는 흐름도이다.
도 13은 일부 실시예들에 따른, 더 높은 우선순위 로직 슬롯들에 대한 mGPU 내의 예시적인 예약된 하드웨어 슬롯들을 예시하는 도면이다.
도 14a는 무조건부 필드를 인코딩하는 예시적인 캐시 플러시 무효화(cache flush invalidate, CFI) 커맨드를 예시하고, 도 14b는 일부 실시예들에 따른, 예시적인 플러시 제어 회로부를 예시한다.
도 15는 일부 실시예들에 따른, 그래픽스 작업의 세트에 의해 표시되는 예시적인 친화도 맵을 예시하는 블록도이다.
도 16은 일부 실시예들에 따른, 친화도 기반 스케줄링을 위한 예시적인 커널 워커 회로부를 예시하는 블록도이다.
도 17은 일부 실시예들에 따른, 소프트웨어 표시 친화도에 기초한 커널의 예시적인 반복을 예시하는 도면이다.
도 18은 일부 실시예들에 따른, 예시적인 작업 공유 제어 회로부를 예시하는 블록도이다.
도 19a는 종속성 추적 및 상태 회로부를 갖는 예시적인 로직 슬롯 관리자를 예시하는 블록도이고, 도 19b는 일부 실시예들에 따른, 예시적인 추적 및 상태 필드들을 예시한다.
도 20은 일부 실시예들에 따른, 킥슬롯 관리자에 대한 예시적인 레지스터 프리페치 버퍼를 예시하는 도면이다.
도 21은 일부 실시예들에 따른, 킥슬롯 관리자에 의해 핸들링되는 상단 슬롯에 대한 예시적인 상태 머신을 예시하는 도면이다.
도 22 내지 도 25는 일부 실시예들에 따른, 예시적인 방법들을 예시하는 흐름도들이다.
도 26은 일부 실시예들에 따른, 예시적인 컴퓨팅 디바이스를 예시하는 블록도이다.
도 27은 일부 실시예들에 따른, 개시된 시스템들 및 디바이스들의 예시적인 애플리케이션들을 예시하는 도면이다.
도 28은 일부 실시예들에 따른, 회로 설계 정보를 저장하는 예시적인 컴퓨터 판독가능 매체를 예시하는 블록도이다.
본 개시내용은 로직 킥슬롯들 및 로직 킥슬롯들로부터 분산형 하드웨어로의 작업의 분배에 관한 다양한 기법들을 포괄한다. 도 1a 및 도 1b는 그래픽스 프로세서들의 개요를 제공한다. 도 2 내지 도 8은 그래픽스 프로세싱을 위해 분산형 하드웨어 슬롯들에 로직 슬롯들을 맵핑하기 위한 기법들의 개요를 제공한다. 도 9는 맵핑에 영향을 줄 수 있는 예시적인 소프트웨어 오버라이드들을 도시한다. 도 10 내지 도 14는 분배 모드들을 시행하기 위한, 하드웨어 슬롯들을 갱생하기 위한, 하드웨어 슬롯들을 유지하기 위한, 로직 슬롯 우선순위를 제공하기 위한, 그리고 로직 슬롯 맵핑의 맥락에서 캐시 플러시 동작들을 핸들링하기 위한 예시적인 기법들을 도시한다. 도 15 내지 도 18은 친화도 기반 스케줄링을 위한 예시적인 기법들을 도시한다. 도 19 내지 도 21은, 소프트웨어와 인터페이싱하고 로직 슬롯들을 구성하는 킥슬롯 관리자를 도시한다. 나머지 도면들은 예시적인 방법들, 시스템들, 애플리케이션들 등을 도시한다. 다양한 실시예들에서, 개시된 기법들은 유리하게는, 하기에서 상세히 설명되는 바와 같이, 전통적인 기법들에 비해 그래픽스 프로세서들에 대한 성능을 개선하거나 전력 소비를 감소시킬 수 있다.
그래픽스 프로세싱 개요
도 1a를 참조하면, 그래픽스 데이터를 프로세싱하기 위한 예시적인 프로세싱 흐름(100)을 예시하는 흐름도가 도시된다. 일부 실시예들에서, 변환 및 조명 절차(110)는 정의된 광원 위치들, 반사율 등에 기초하여 애플리케이션으로부터 수신된 정점들에 대한 조명 정보를 프로세싱하는 것, 정점들을 다각형들(예를 들어, 삼각형들)로 어셈블링하는 것, 및 3차원 공간 내의 포지션에 기초하여 다각형들을 정확한 크기 및 배향으로 변환하는 것을 수반할 수 있다. 클립 절차(115)는 가시성 영역 외부에 있는 다각형들 또는 정점들을 폐기하는 것을 수반할 수 있다. 래스터화 절차(120)는 각각의 다각형 내의 프래그먼트들을 정의하는 것 및 예를 들어 다각형의 정점들의 텍스처 좌표들에 기초하여 각각의 프래그먼트에 대한 초기 색상 값들을 할당하는 것을 수반할 수 있다. 프래그먼트들은 이들이 중첩되는 픽셀들에 대한 속성들을 특정할 수 있지만, 실제 픽셀 속성들은 (예를 들어, 프레임 버퍼에서) 다수의 프래그먼트들을 결합하는 것, 하나 이상의 프래그먼트들을 무시하는 것(예를 들어, 그들이 다른 객체들에 의해 커버되면), 또는 둘 모두에 기초하여 결정될 수 있다. 셰이딩 절차(130)는 조명, 셰도우들, 범프 맵핑, 반투명도 등에 기초하여 픽셀 컴포넌트들을 변경하는 것을 수반할 수 있다. 셰이딩된 픽셀들은 프레임 버퍼(135)에서 어셈블링될 수 있다. 현대의 GPU들은 전형적으로 애플리케이션 개발자들에 의한 셰이딩 및 다른 프로세싱 절차들의 맞춤화를 허용하는 프로그래밍가능 셰이더들을 포함한다. 따라서, 다양한 실시예들에서, 도 1a의 예시적인 요소들은 다양한 순서들로 수행되거나, 병렬로 수행되거나, 또는 생략될 수 있다. 부가적인 프로세싱 절차들이 또한 구현될 수 있다.
이제, 도 1b를 참조하면, 일부 실시예들에 따라, 그래픽스 유닛(150)을 예시하는 단순화된 블록도가 도시된다. 예시된 실시예에서, 그래픽스 유닛(150)은 프로그래밍가능 셰이더(160), 정점 파이프(185), 프래그먼트 파이프(175), 텍스처 프로세싱 유닛(texture processing unit, TPU)(165), 이미지 기입 유닛(170), 및 메모리 인터페이스(180)를 포함한다. 일부 실시예들에서, 그래픽스 유닛(150)은, 프로그래밍가능 셰이더(160)를 사용하여 정점 및 프래그먼트 데이터 둘 모두를 프로세싱하도록 구성되며, 이는 다수의 실행 파이프라인들 또는 인스턴스들을 사용하여 그래픽스 데이터를 병렬로 프로세싱하도록 구성될 수 있다.
정점 파이프(185)는, 예시된 실시예에서, 정점 데이터를 프로세싱하도록 구성된 다양한 고정 기능 하드웨어(fixed-function hardware)를 포함할 수 있다. 정점 파이프(185)는 정점 프로세싱을 조정하기 위해 프로그래밍가능 셰이더(160)와 통신하도록 구성될 수 있다. 예시된 실시예에서, 정점 파이프(185)는 추가적인 프로세싱을 위해 프로세싱된 데이터를 프래그먼트 파이프(175) 또는 프로그래밍가능 셰이더(160)로 전송하도록 구성된다.
프래그먼트 파이프(175)는, 예시된 실시예에서, 픽셀 데이터를 프로세싱하도록 구성된 다양한 고정 기능 하드웨어를 포함할 수 있다. 프래그먼트 파이프(175)는 프래그먼트 프로세싱을 조정하기 위해 프로그래밍가능 셰이더(160)와 통신하도록 구성될 수 있다. 프래그먼트 파이프(175)는 정점 파이프(185) 또는 프로그래밍가능 셰이더(160)로부터의 다각형들에 대한 래스터화를 수행하여 프래그먼트 데이터를 생성하도록 구성될 수 있다. 정점 파이프(185) 및 프래그먼트 파이프(175)는 그래픽스 데이터에 액세스하기 위해 메모리 인터페이스(180)에 커플링될 수 있다(커플링은 도시되지 않음).
프로그래밍가능 셰이더(160)는, 예시된 실시예에서, 정점 파이프(185)로부터 정점 데이터를 그리고 프래그먼트 파이프(175) 및 TPU(165)로부터 프래그먼트 데이터를 수신하도록 구성된다. 프로그래밍가능 셰이더(160)는 정점 데이터의 다양한 변환들 및 조정들을 포함할 수 있는 정점 프로세싱 태스크들을 정점 데이터에 대해 수행하도록 구성될 수 있다. 프로그래밍가능 셰이더(160)는 또한, 예시된 실시예에서, 예를 들어 텍스처화 및 셰이딩과 같은 픽셀 데이터에 대해 프래그먼트 프로세싱 태스크들을 수행하도록 구성된다. 프로그래밍가능 셰이더(160)는 데이터를 병렬로 프로세싱하기 위한 다수의 실행 파이프라인들의 다수의 세트들을 포함할 수 있다.
일부 실시예들에서, 프로그래밍가능 셰이더는 하나 이상의 상이한 SIMD 그룹들을 병렬로 실행하도록 구성된 파이프라인들을 포함한다. 각각의 파이프라인은 주어진 클록 사이클에서 페치, 디코딩, 발행, 실행 등과 같은 동작들을 수행하도록 구성된 다양한 스테이지들을 포함할 수 있다. 프로세서 "파이프라인"의 개념은 잘 이해되고, 프로세서가 명령들에 대해 수행하는 "작업"을 다수의 스테이지들로 분할하는 개념을 지칭한다. 일부 실시예들에서, 명령 디코드, 디스패치, 실행(즉, 수행), 및 회수는 상이한 파이프라인 스테이지들의 예들일 수 있다. 요소들/부분들의 다양한 순서화들을 이용하여 많은 상이한 파이프라인 아키텍처들이 가능하다. 다양한 파이프라인 스테이지들은 하나 이상의 프로세서 클록 사이클들 동안 명령에 대해 그러한 단계들을 수행하고, 이어서, 추가적인 프로세싱을 위해 명령 또는 명령과 연관된 동작들을 다른 스테이지들에 전달한다.
용어 "SIMD 그룹"은 그의 잘 이해되는 의미에 따라 해석되도록 의도되는데, 이는, 프로세싱 하드웨어가 상이한 스레드들에 대해 상이한 입력 데이터를 사용하여 동일한 명령을 병렬로 프로세싱하는 스레드들의 세트를 포함한다. 다양한 유형들의 컴퓨터 프로세서들은 SIMD 명령들을 실행하도록 구성된 파이프라인들의 세트들을 포함할 수 있다. 예를 들어, 그래픽스 프로세서들은 종종, SIMD 방식으로 관련 스레드들의 세트에 대한 명령들을 실행하도록 구성된 프로그래밍가능 셰이더 코어(shader core)들을 포함한다. SIMD 그룹에 대해 사용될 수 있는 이름들의 다른 예들은, 파면, 클리크(clique) 또는 워프(warp)를 포함한다. SIMD 그룹은 컴퓨터의 병렬 프로세싱 능력들에 기초하여 다수의 SIMD 그룹들로 해체될 수 있는 더 큰 스레드 그룹의 일부일 수 있다. 일부 실시예들에서, 각각의 스레드는, 그 스레드에 대한 피연산자들을 페치하고 스레드들의 세트에 대한 다른 파이프라인들과 병렬로 특정된 동작들을 수행하는 하드웨어 파이프라인에 할당된다. 프로세서들은 다수의 별개의 SIMD 그룹들이 또한 병렬로 실행될 수 있도록 많은 수의 파이프라인들을 가질 수 있다는 것을 유의한다. 일부 실시예들에서, 각각의 스레드는, 예를 들어 레지스터 파일에 개인 피연산자 저장소를 갖는다. 따라서, 레지스터 파일로부터의 특정 레지스터의 판독은 SIMD 그룹 내의 각각의 스레드에 대한 레지스터의 버전을 제공할 수 있다.
일부 실시예들에서, 다수의 프로그래밍가능 셰이더 유닛들(160)이 GPU에 포함된다. 이러한 실시예들에서, 전역 제어 회로부는 작업을 GPU의 상이한 서브-부분들에 할당할 수 있으며, 이는 이어서, 셰이더 파이프라인들에 의해 프로세싱되도록 작업을 셰이더 코어들에 할당할 수 있다.
TPU(165)는, 예시된 실시예에서, 프로그래밍가능 셰이더(160)로부터의 프래그먼트 프로세싱 태스크들을 스케줄링하도록 구성된다. 일부 실시예들에서, TPU(165)는 텍스처 데이터를 프리페치하고 (예를 들어, 메모리 인터페이스(180)를 통해) 프로그래밍가능 셰이더(160)에 의한 추가적인 프로세싱을 위해 초기 색상들을 프래그먼트들에 할당하도록 구성된다. TPU(165)는, 예를 들어 정규화된 정수 포맷들 또는 부동 소수점 포맷들로 프래그먼트 컴포넌트들을 제공하도록 구성될 수 있다. 일부 실시예들에서, TPU(165)는 프로그래밍가능 셰이더(160) 내의 4개의 실행 파이프라인들의 그룹에 의해 프로세싱될 2x2 포맷인 4개의 그룹("프래그먼트 쿼드(fragment quad)")들로 프래그먼트들을 제공하도록 구성된다.
이미지 기입 유닛(IWU)(170)은, 일부 실시예들에서, 이미지의 프로세싱된 타일들을 저장하도록 구성되고, 렌더링된 이미지가 디스플레이를 위해 또는 저장을 위해 메모리에 전달되기 전에 그에 대한 동작들을 수행할 수 있다. 일부 실시예들에서, 그래픽스 유닛(150)은 타일 기반 지연 렌더링(tile-based deferred rendering, TBDR)을 수행하도록 구성된다. 타일 기반 렌더링에서, 스크린 공간의 상이한 부분들(예를 들어, 픽셀들의 정사각형들 또는 직사각형들)은 별개로 프로세싱될 수 있다. 메모리 인터페이스(180)는, 다양한 실시예들에서 다양한 메모리 계층들 중 하나 이상과의 통신을 용이하게 할 수 있다.
상기에서 논의된 바와 같이, 그래픽스 프로세서들은 전형적으로, 컴퓨팅 시스템에 의해 요청된 소정 그래픽스 프로세싱 동작들을 수행하도록 구성된 특화된 회로부를 포함한다. 이것은, 예를 들어, 고정 기능 정점 프로세싱 회로부(fixed-function vertex processing circuitry), 픽셀 프로세싱 회로부, 또는 텍스처 샘플링 회로부를 포함할 수 있다. 그래픽스 프로세서들은 또한, GPU 셰이더 코어들을 사용할 수 있지만 고정 기능 그래픽스 하드웨어를 사용하지 않을 수 있는 비-그래픽스 계산 태스크들을 실행할 수 있다. 하나의 예로서, 머신 학습 작업부하들(이들은 추론, 트레이닝, 또는 둘 모두를 포함할 수 있음)은 종종, 그들의 병렬 프로세싱 능력들 때문에 GPU들에 할당된다. 따라서, GPU에 의해 실행되는 계산 커널들은, GPU 셰이더들에 의해 실행될 머신 학습 모델들의 뉴럴 네트워크 층들 또는 다른 태양들을 구현하는 것과 같은 머신 학습 태스크들을 특정하는 프로그램 명령들을 포함할 수 있다. 일부 시나리오들에서, 비-그래픽스 작업부하들은 또한, 예컨대 원래 의도된 것 이외의 상이한 목적을 위해, 특화된 그래픽스 회로부를 활용할 수 있다.
또한, 그래픽스 프로세서들을 참조하여 본 명세서에서 논의된 다양한 회로부 및 기법들은 다른 실시예들에서 다른 유형들의 프로세서들에서 구현될 수 있다. 다른 유형들의 프로세서들은 특화된 병렬 프로세싱 능력들을 갖는 CPU들 또는 머신 학습 또는 인공 지능 가속기들과 같은 범용 프로세서들을 포함할 수 있다. 이러한 다른 유형들의 프로세서들은 그래픽스 명령들을 실행하도록 또는 그래픽스 동작들을 수행하도록 구성되지 않을 수 있다. 예를 들어, 다른 유형들의 프로세서들은 전형적인 GPU들에 포함된 고정 기능 하드웨어를 포함하지 않을 수 있다. 머신 학습 가속기들은 머신 학습 모델들의 뉴럴 네트워크 층들 또는 다른 양태들을 구현하는 것과 같은 소정 동작들을 위한 특화된 하드웨어를 포함할 수 있다. 일반적으로 말하면, 머신 학습 가속기들의 메모리 요건들, 계산 능력들, 전력 소비, 및 프로그래밍가능성 사이에 설계 트레이드오프들이 있을 수 있다. 따라서, 상이한 구현들이 상이한 성능 목표들에 초점을 맞출 수 있다. 개발자들은 주어진 머신 학습 애플리케이션에 대한 다수의 잠재적인 하드웨어 타깃들 중에서, 예컨대 포괄적 프로세서들, GPU들, 및 상이한 특화된 머신 학습 가속기들로부터 선택할 수 있다.
작업 분배 및 로직 슬롯들의 개요
도 2는 일부 실시예들에 따른, 예시적인 일차 제어 회로부 및 그래픽스 프로세서 서브유닛들을 예시하는 블록도이다. 예시된 실시예에서, 그래픽스 프로세서는 일차(210) 및 서브유닛들(220A 내지 220N)을 포함한다.
일차 제어 회로부(210)는, 예를 들어, 계산 데이터 마스터, 정점 데이터 마스터, 또는 픽셀 데이터 마스터일 수 있다. 따라서, 일부 실시예들에서, 그래픽스 프로세서는 서브유닛들의 동일한 세트에 상이한 유형들의 작업을 전송하는, 일차 제어 회로부(210)의 다수의 인스턴스들을 포함한다. 일차 제어 회로부(210)는 소프트웨어, 펌웨어, 또는 둘 모두로부터 인터페이스를 통해 킥들을 수신할 수 있다. 본 명세서에서 사용되는 바와 같이, 용어 "소프트웨어"는, 예를 들어, 실행가능 프로그램 명령들을 광범위하게 지칭하며, 펌웨어, 운영 체제들, 및 제3자 애플리케이션들을 포괄한다. 따라서, 본 명세서에서의 소프트웨어에 대한 다양한 언급들은 대안적으로 또는 추가적으로 펌웨어에 적용될 수 있다는 것이 이해되어야 한다. 일차 제어 회로부(210)는, 예시된 실시예에서, 로직 슬롯 대 분산형 하드웨어 슬롯 맵핑 제어 회로부(215)를 포함한다. 제어 회로부(215)는 (예컨대, 도 4를 참조하여 하기에서 논의되는 상이한 분배 모드들에 따라) 로직 슬롯들(이는 "킥슬롯들"로 지칭될 수 있음)로부터 그래픽스 프로세서의 전부 또는 일부분 상의 분산형 하드웨어 슬롯들로 작업을 분배할 수 있다.
다양한 회로부가 본 명세서에서, 로직 슬롯들을 제어하는 것으로서 설명된다. 용어 "로직"은 로직 슬롯에 대한 작업의 할당이 할당된 작업의 그래픽스 명령들을 실제로 어느 하드웨어가 실행할지를 암시하지 않는다는 것을 의미한다. 제어 회로부는, 로직 슬롯에 대한 정보를 유지하고 실제 실행을 위해 로직 슬롯으로부터의 작업을 하드웨어 슬롯들에 할당하는 하드웨어를 포함할 수 있다. 따라서, 로직 슬롯에 대한 초기 할당 시에, 작업의 세트를 실행할 하드웨어 슬롯들은 알려져 있지 않다. 하기에서 상세히 논의되는 바와 같이, 로직 슬롯들은, 특히 다수의 셰이더 코어들을 갖는 그래픽스 프로세서에서, 그래픽스 작업을 스케줄링할 때 성능 및 전력 소비의 관점에서 다양한 이점들을 제공할 수 있다.
그래픽스 데이터의 프레임을 렌더링하기 위해 다수의 "킥들"이 실행될 수 있다. 일부 실시예들에서, 킥은 실행될 다수의 스레드들을 포함할 수 있는(그리고 잠재적으로, 셰이더에 의해 수행되지 않는 다른 유형들의 그래픽스 작업을 포함할 수 있는) 단일 콘텍스트로부터의 작업 유닛이다. 킥은 (스레드들 자체에 의해 특정된 것 이외의) 스레드들 사이의 메모리 동기화, 스레드들 사이의 동시성, 또는 스레드들 사이의 개시 순서에 관한 어떠한 보장들도 제공하지 않을 수 있다. 일부 실시예들에서, 킥은 다른 킥의 결과들에 의존하는 것으로 식별될 수 있으며, 이는 하드웨어 메모리 코히어런시(coherency) 지원을 요구하지 않으면서 메모리 동기화를 허용할 수 있다. 전형적으로, 그래픽스 펌웨어 또는 하드웨어 프로그램 구성은 프로세싱을 위한 파이프라인(들)에 작업을 전송하기 전에 각각의 킥마다 등록한다. 종종, 일단 킥이 시작되었다면, 그것은 킥이 완료될 때까지(이 지점에서, 결과들이 계층구조 내의 다른 레벨에 기록될 수 있음) 소정 레벨을 넘어서 메모리 계층구조에 액세스하지 않는다. 주어진 킥에 대한 정보는, 대응하는 그래픽스 동작들을 완료하는 데 필요한 상태 정보, 실행할 셰이더 프로그램(들)의 위치, 버퍼 정보, 텍스처 데이터의 위치, 이용가능한 어드레스 공간들 등을 포함할 수 있다. 그래픽스 펌웨어 또는 하드웨어는, 예를 들어, 킥들을 스케줄링하고, 킥이 완료될 때 인터럽트를 검출할 수 있다. 일부 실시예들에서, 그래픽스 유닛의 부분들은 한번에 단일 킥에 대해 작동하도록 구성된다. 본 명세서에서 상세히 논의되는 바와 같이, 추적 슬롯들("상단 슬롯들"로도 지칭됨) 및 로직 킥슬롯들은 셰이더 하드웨어에 킥들을 할당하기 전에 킥들을 제어하는 데 사용될 수 있다. 킥은, 절차적 기하구조를 드로잉하기 위한 커맨드, 셰도우 샘플링 방법을 설정하기 위한 커맨드, 메시들을 드로잉하기 위한 커맨드, 텍스처를 검색하기 위한 커맨드, 생성 계산을 수행하기 위한 커맨드 등을 포함할 수 있는 하나 이상의 렌더링 커맨드들의 세트를 포함할 수 있다. 프레임의 렌더링 동안 다양한 스테이지들 중 하나에서 킥이 실행될 수 있다. 렌더링 스테이지들의 예들은 제한 없이, 카메라 렌더링, 광 렌더링, 투사, 텍스처링, 프래그먼트 셰이딩 등을 포함한다. 킥들은 예를 들어, 계산 작업, 정점 작업, 또는 픽셀 작업을 위해 스케줄링될 수 있다.
서브유닛들(220)은 일부 실시예들에서, GPU의 프로세싱 능력들을 증가시키기 위해 복제될 수 있는 스케일링 유닛들이다. 각각의 GPU 서브유닛(220)은 그래픽스 프로그램의 명령들을 독립적으로 프로세싱하는 것이 가능할 수 있다. 서브유닛들(220)은 예시된 실시예에서, 각자의 분산형 하드웨어 슬롯들(230)을 구현하는 회로부를 포함한다. 이러한 하드웨어 슬롯들은 본 명세서에서 "dSlot들"로도 지칭될 수 있다 각각의 서브유닛은 다수의 하드웨어 슬롯들(230)을 포함할 수 있다. 서브유닛들은 본 명세서에서 "mGPU들"로도 지칭될 수 있다 일부 실시예들에서, 일차 제어 회로부(210)는 로직 슬롯으로부터의 작업을 각각의 서브유닛(220)에서 최대 하나의 분산형 하드웨어 슬롯에 할당한다. 일부 실시예들에서, 각각의 서브유닛은 프래그먼트 생성기 회로부, 셰이더 프로그램들을 실행하도록 구성된 셰이더 코어 회로부, 메모리 시스템 회로부(이는 하나 이상의 데이터 캐시들 및 메모리 관리 유닛을 포함할 수 있음), 기하구조 프로세싱 회로부, 및 분산형 작업부하 분배 회로부(이는 일차 제어 회로부(210)와 조정하여 셰이더 파이프라인들에 작업을 분배할 수 있음)를 포함한다.
각각의 분산형 하드웨어 슬롯은 구성 레지스터들, 작업 큐, 큐에서 작업(예컨대, 계산 작업항목들의 배치(batch)들)을 통해 반복하도록 구성된 회로부, 콘텍스트 부하들/저장소들을 시퀀싱하기 위한 회로부, 및 작업 분배 추적 회로부를 포함하는, 할당된 킥들 또는 그의 일부분을 프로세싱하도록 구성된 다양한 회로부를 포함할 수 있다. 각각의 서브유닛(220)은 서브유닛 내의 분산형 슬롯들로부터 작업을 수용하고 파이프라인들을 사용하여 작업을 실행하는 다수의 셰이더들을 포함할 수 있다. 예를 들어, 각각의 셰이더는 각각의 분산형 하드웨어 슬롯에 대한 큐를 포함할 수 있고, 작업 우선순위에 기초하여 큐들 중에서 작업을 선택할 수 있다.
일부 실시예들에서, 주어진 서브유닛(220)은 도 1의 다수의 프로그래밍가능 셰이더들(160)을 포함한다.
하기에서 상세히 논의되는 바와 같이, 로직 슬롯 대 분산형 하드웨어 슬롯 맵핑 제어 회로부(215)는 다양한 파라미터들, 소프트웨어 제어 입력들 등에 기초하여 서브유닛들(220)에 걸쳐 킥들을 분배할 수 있다.
도 3은 일부 실시예들에 따른, 일차 제어 회로부 및 그룹화된 프로세서 서브유닛들의 더 상세한 예를 예시하는 블록도이다. 예시된 실시예에서, 일차 제어 회로부(210)는 킥슬롯 관리자(KSM)(350)와 통신하고, 구성 레지스터들(312)을 포함한다. 이러한 구성 레지스터들은 셋업 레지스터들 및 실행 레지스터들 둘 모두를 포함할 수 있다. 셋업 위상 레지스터들은 킥을 실행하는 데 사용되는 분산형 하드웨어의 애그노스틱(agnostic)인 글로벌 구조체들인 반면, 실행 레지스터들은 서브유닛 구조체들마다 있을 수 있다. 대체적으로, 일차 제어 회로부(210)에 도시되어 있지만, 구성 레지스터들은 다양한 적절한 회로부에(예컨대, 분산형 제어 회로부(340)에) 포함될 수 있고, 상이한 스코프(scope)들을 가질 수 있다(예컨대, 일부 레지스터들은 부트 스코핑(boot scope)될 수 있고, 일부 레지스터들은 로직 슬롯과 연관될 수 있고, 일부 레지스터들은 분산형 슬롯과 연관될 수 있음). 일부 구성 레지스터들은 글로벌 레지스터 회로부 및 서브유닛별 레지스터 회로부 둘 모두에 공유되고 그들 내에 동일한 값들을 프로그래밍할 수 있다. 구성 레지스터 데이터는 정의된 포맷으로 메모리에 저장될 수 있고, 주어진 킥에 대해 물리적 구성 레지스터들을 채우기 위해 취출 및 언패킹될 수 있다.
예시된 실시예에서, mGPU들(320A 내지 320N)은 그룹화되고, 일차 제어 회로부(210)는 다수의 그러한 그룹들과 통신한다. mGPU들은 서브유닛들(220)의 예이다. mGPU들(305)의 각각의 그룹은, 예시된 실시예에서, 캐시(360)를 공유한다. 이것은, 예컨대 각각의 mGPU(320)가 레벨 1 캐시를 유지하는 실시예들에서, 레벨 2 캐시일 수 있다. 이러한 공유 캐시는 명령들, 데이터, 또는 둘 모두를 저장하는 데 사용될 수 있다. 하기에서 상세히 논의되는 바와 같이, 동일한 그룹(305)에 대한 데이터 친화도 특성들을 갖는 작업을 스케줄링하는 것은 캐시 효율에 유리할 수 있다. 일부 실시예들에서, mGPU들(305)의 각각의 그룹은, 예컨대 다중 다이 구현들에서, 동일한 다이 또는 반도체 기판 상에 구현된다.
각각의 mGPU(320)는, 예시된 실시예에서, 일차 제어 회로부(210)로부터 작업을 수신할 수 있고 mGPU 내에서 작업을 할당하고 작업 완료를 일차 제어 회로부(210)에 (예컨대, 통신 패브릭을 통해) 다시 보고하는 분산형 제어 회로부를 포함한다. 작업을 할당하는 신호들은 수행할 실제 명령 또는 동작될 데이터를 포함하지 않을 수 있지만, 실행될 프로그램 명령들의 위치를 식별할 수 있다.
킥슬롯 관리자(350)는, 예시된 실시예에서, 소프트웨어/펌웨어 인터페이스로부터 킥들을 수신하도록 그리고 로직 슬롯들에 할당하기 위해 킥들을 일차 제어 회로부(210)에 통신하도록 구성된다. 킥슬롯 관리자(350)와 제어 회로부 사이의 예시적인 통신은 도 6을 참조하여 하기에서 상세히 논의되고, 킥슬롯 관리자(350)의 상세한 예시적인 실시예가 도 19를 참조하여 하기에서 논의된다.
하기에서 상세히 논의되는 도 4 및 도 5는 일부 실시예들에 따른, 로직 슬롯들로부터 작업을 분배하기 위해 제어 회로부(215)의 실시예들에 의해 구현되는 기법들의 예들을 제공한다.
도 4는 일부 실시예들에 따른, 3개의 예시적인 분배 모드들을 예시하는 도면이다. 대체적으로, 분배 모드들은 분배의 폭을 표시한다. 예시된 예들에서, 각각의 mGPU는 3개의 분산형 하드웨어 슬롯들(DS0 내지 DS2)을 구현하고, 2개의 그룹들(그룹 0 및 그룹 1)은 각각, 2개의 mGPU들(mGPU0 및 mGPU1)을 포함한다. 다양한 수의 mGPU당 하드웨어 슬롯들, 그룹당 mGPU들, 및 그래픽스 프로세서당 그룹들이 다양한 실시예들에서 구현될 수 있다는 것에 유의한다. 상이한 특정 예시적인 수의 요소들을 갖는 실시예들이 설명의 목적으로 본 명세서에서 논의되지만, 이러한 예들은 본 개시내용의 범주를 제한하도록 의도되지 않는다.
상기에서 논의된 바와 같이, 3개의 예시적인 모드들 전부에서, 로직 슬롯은 주어진 mGPU의 최대 하나의 하드웨어 슬롯을 점유하도록 허용된다. 로직 슬롯으로부터의 작업이 분배되는 하드웨어 슬롯들이 도 4의 대각선 셰이딩을 사용하여 도시된다. 또한, 제어 회로부(215)는 소정 상황들에서 로직-하드웨어 슬롯 맵핑을 동적으로 조정할 수 있다는 것에 유의한다. 로직 슬롯은 하드웨어 슬롯들을 할당받은 mGPU들 내의 분산형 제어 회로부에 작업을 분배한다. 이어서, 분산형 제어 회로부는 mGPU 내의 그의 셰이더들에 작업을 분배할 수 있다.
모드 A는, 예시된 예에서, 단일 mGPU 분배 모드이다. 이러한 모드에서, 제어 회로부(215)는 로직 슬롯으로부터의 작업을 단일 mGPU 상의 단일 하드웨어 슬롯에 할당한다.
모드 B는, 예시된 예에서, 단일 그룹 분배 모드이다. 이러한 모드에서, 제어 회로부(215)는 로직 슬롯으로부터의 작업을 mGPU들의 그룹(이러한 예에서, 그룹 0) 내의 각각의 mGPU 상의 슬롯에 할당한다.
모드 C는, 예시된 예에서, 더 큰 다중 그룹 분배 모드이다. 이러한 모드에서, 제어 회로부(215)는 로직 슬롯으로부터의 작업을 mGPU들의 다중 그룹들(예컨대, 일부 실시예들에서, 그래픽스 프로세서 상의 모든 그룹)의 각각의 mGPU 내의 슬롯에 할당한다.
제어 회로부(215)는 하기에서 상세히 논의되는 다양한 고려사항들에 기초하여 로직 슬롯(또는, 예컨대 커널을 위한, 로직 슬롯에 할당된 킥의 일부분)에 대한 분배 모드를 결정할 수 있다. 대체적으로, 제어 회로부(215)는 일차 제어 회로부가 특정 시간에 관리하고 있는 작업의 양에 기초하여, 작업의 세트의 크기에 기초하여, 또는 둘 모두에 기초하여 분배 모드를 선택할 수 있다. 또한, 소프트웨어 오버라이드 기능은 소프트웨어 또는 펌웨어가 킥에서의 작업의 분배를 조정하게 할 수 있다. 또한 추가로, 우선순위, 동적 재맵핑, 및 갱생 기법들은 로직-하드웨어 슬롯 맵핑들에 영향을 줄 수 있다.
제어 회로부(215)는 하드웨어 슬롯 할당들 및 할당해제들을 킥슬롯 관리자(350)에 보고할 수 있는데, 이는 소프트웨어 또는 펌웨어가 현재 로직 슬롯 맵핑들에 관한 정보(예컨대, 분배 모드, 특정 맵핑들 등)를 질의할 수 있게 할 수 있다.
조직화의 그룹/mGPU/하드웨어 슬롯 레벨은 설명의 목적으로 포함되지만, 본 개시내용의 범주를 제한하도록 의도되지 않는다는 것에 유의한다. 일부 실시예들에서, 조직화의 "그룹" 레벨은 생략될 수 있는데, 이는 단지 2개의 분배 모드들, 즉, 단일 mGPU 또는 다중 mGPU를 초래할 수 있다. 일부 실시예들에서, 추가적인 레벨들의 조직화가 구현될 수 있는데, 이는 추가적인 분배 모드들과 연관될 수 있다(예컨대, 그룹들의 그룹 - 이는 단일 mGPU 모드 및 단일 그룹 모드에 더하여, 단일의 그룹들 중 그룹 모드(single-group-of-groups mode) 및 다중의 그룹들 중 그룹 모드(multiple-group-of-groups mode)를 초래할 수 있음).
도 5는 일부 실시예들에 따른, 다수의 로직 슬롯들로부터 이용가능한 하드웨어 슬롯들의 예시적인 충전을 예시하는 도면이다. 예시된 예에서, 제어 회로부(215)는 다수의 분배 모드들을 사용하여 9개의 로직 슬롯들(510A 내지 510I)을 (4개의 mGPU들의 4개의 그룹들 내의) 48개의 분산형 슬롯들에 맵핑한다.
예시된 예에서, 회로부(215)는 로직 슬롯들(510A, 510D, 510G, 510I)에 대해 단일 mGPU 분배 모드를 사용한다. 예를 들어, 로직 슬롯(510A)은 그룹 0의 mGPU 0 내의 단일 분산형 슬롯 DS0을 수용한다.
회로부(215)는 로직 슬롯들(510B, 510E, 510H)에 대해 단일 그룹 분배 모드를 사용한다. 예를 들어, 로직 슬롯(510B)은 그룹 1의 각각의 mGPU 상의 분산형 슬롯 DS0을 수용한다.
회로부(215)는 로직 슬롯들(510C, 510F)에 대해 다중 그룹 분배 모드를 사용한다. 예를 들어, 로직 슬롯(510C)은 각각의 예시된 mGPU 상의 분산형 슬롯을 수용한다.
모든 하드웨어 슬롯들이 항상 할당되는 것은 아닐 수도 있지만, 대체적으로, 이용가능한 슬롯들을 충전하는 것이 성능을 개선할 수 있다는 것에 유의한다. 로직 슬롯에 할당된 킥이 완료되었을 때, 다른 킥이 그 로직 슬롯에 할당될 수 있고, 로직 슬롯은 물리적 슬롯들에 재맵핑될 수 있다.
예시적인 제어 회로부
도 6은 일부 실시예들에 따른, 세부적인 예시적인 제어 회로부를 예시하는 블록도이다. 예시된 실시예에서, 킥슬롯 관리자는, 예시된 실시예에서, dSlot 리소스 할당기(620), 제어 스트림 프로세서(CSP)들(630A 내지 630N), 커널 프로세서(640A 내지 640N), mGPU 할당 회로부(650A-650N), 및 킥슬롯 중재기(660)를 포함하는 맵핑 제어 회로부(215)와 통신한다. 일부 실시예들에서, 프로세서에 의해 지원되는 각각의 로직 슬롯은 요소들(630, 640, 650)의 할당된 세트를 갖는다. 도 6의 소정 세부사항들은 계산 작업과 관련이 있지만, 유사한 기법들이 정점 및 픽셀 셰이딩과 같은 다른 유형들의 작업에 사용될 수 있다는 것에 유의한다.
킥슬롯 관리자(350)는, 예시된 실시예에서, 킥들을 로직 슬롯들에 할당하고, 킥 정보를 대응하는 제어 스트림 프로세서(630)로 전송한다. 제어 스트림 프로세서(630)는 킥이 프로세싱을 언제 완료했는지를 킥슬롯 관리자(350)에게 통지할 수 있다.
제어 스트림 프로세서들(630)은, 예시된 실시예에서, 그들의 킥슬롯의 시퀀싱을 관리하고, 킥을 위한 제어 스트림을 페칭 및 실행하고, 킥 완료를 추적한다. 제어 스트림 프로세서들(630)은 커널 입도에서 동작할 수 있다(커널들은 킥을 위한 제어 스트림으로부터 페칭될 수 있음). 제어 스트림 프로세서들(630)은 dSlot 리소스 할당기(620)와 통신하여 그들의 로직 슬롯에 대한 dSlot 리소스들을 획득할 수 있다. 제어 스트림 프로세서들(630)은 커널들을 위한 분배 모드를 결정하도록 그리고 그들의 분배 모드 및 분산형 슬롯 할당들을 갖는 커널들을 커널 프로세서들(640)로 전송하도록 구성된다.
dSlot 리소스 할당기(620)는, 일부 실시예들에서, 다수의 로직 슬롯들로부터 요청들을 수신하도록 그리고 요청들을 프로세싱하여 dSlot들을 커널들에 할당하도록 구성된 회로부를 포함한다. 일부 실시예들에서, dSlot 리소스 할당기(620)는 (예컨대, 커널 입도에서) 분배 모드를 선택하고 킥의 부분들을 위한 dSlot들을 할당하지만, 다른 입도들이 고려된다. 일부 실시예들에서, dSlot 리소스 할당기(620)는 하기에서 더 상세히 논의되는 바와 같이, 먼저 킥 우선순위에 기초하여 로직 슬롯들을 할당하고, 이어서 킥 연령에 기초하여 할당한다. 예를 들어, DRA(620)는 임계치보다 더 큰 우선순위 레벨을 갖는 킥들로부터의 커널들을 위한 일부 분산형 슬롯들을 예약할 수 있다.
커널 프로세서들(640)은, 예시된 실시예에서, 일차 계산 데이터 마스터에 포함된다. 커널 프로세서들(640)은 커널들로부터 작업그룹들의 배치들을 생성하도록 그리고 그들의 분배 모드 및 분산형 슬롯 할당을 갖는 배치들을 mGPU 할당 회로부(650)로 전송하도록 구성된다. 커널 프로세서들(640)은 하기에서 상세히 논의되는 바와 같이, 친화도, 부하 밸런싱, 또는 둘 모두에 기초하여 분배를 위한 배치들을 선택할 수 있다. 커널 프로세서들(640)은 할당된 dSlot들 및 타깃 마스크의 표시를 수신할 수 있는데, 이는 mGPU들이 커널에 의해 타깃화되도록 허용되는지를 표시한다.
본 명세서에 사용되는 바와 같이, 그래픽스 콘텍스트에서 용어 "계산 커널"은 그의 잘 이해된 의미에 따라 해석되도록 의도되는데, 이는 그래픽스 프로세서와 같은 가속 하드웨어에 대해 컴파일된 루틴을 포함한다. 커널들은 예를 들어, OpenCL C와 같은 별개의 프로그램 언어에 의해 특정될 수 있거나, OpenGL과 같은 셰이딩 언어로 계산 셰이더들로서 기록될 수 있거나, 또는 하이 레벨 언어로 애플리케이션 코드에 임베딩될 수 있다. 계산 커널들은 전형적으로 다수의 워크그룹들을 포함하는데, 이들은 이어서 다수의 작업항목들(스레드들로도 지칭됨)을 포함한다. 계산 커널들을 참조하여 본 명세서에서 논의된 다양한 기법들이 정점 또는 픽셀 프로세싱 태스크들과 같은 다른 유형들의 작업에 적용될 수 있다는 것에 유의한다.
mGPU 할당 회로부(650)는, 예시된 실시예에서, 배치들을 수신하고 배치들을 타깃 mGPU들로 전송한다. 회로부(650)는 분배 모드의 함수일 수 있는 허용가능한 mGPU 타깃들의 마스크와 함께 배치를 수신할 수 있다. 그 마스크를 사용하여, 회로부(650)는 부하 밸런싱에 기초하여 mGPU 타깃을 선택할 수 있다.
킥슬롯 중재기(660)는, 예시된 실시예에서, 목적지 mGPU들로 전송할 이용가능한 배치들 중에서 선택한다. 예를 들어, 킥슬롯 중재기(660)는 각각의 사이클마다 배치를 전송할 하나 이상의 로직 킥슬롯들을 선택할 수 있다. 선택된 배치들(및 실행 상태와 연관된 반환 정보)은 통신 패브릭을 통해 송신될 수 있다. 패브릭은, 예컨대 2021년 1월 26일자로 출원되고 발명의 명칭이 "Shared Control Bus for Graphics Processors"인 미국 특허 출원 제17/158,943호에 논의된 바와 같이, 시그널링을 제어하는 데 전용될 수 있다.
도 6의 회로부에 의해 수행되는 다양한 추가적인 기능은 하기에서, 예컨대 동적 맵핑, 소프트웨어 오버라이드들, 우선순위, 유지 기법들, 갱생 기법들, 캐시 플러싱, 및 친화도와 같은 특정 기능을 논의하는 섹션에서, 상세히 논의된다.
커널당 맵핑 기법들
일부 실시예들에서, 계산 킥을 실행하는 동안 커널당 맵핑은 킥 입도에서는 어려웠을 동적 할당을 제공할 수 있다(킥을 실행하기 전에 킥이 얼마나 많은 분산형 슬롯들을 점유해야 하는지를 결정하는 것은 어려울 수 있음). 상기에서 간단히 논의된 바와 같이, 제어 스트림 프로세서들(630) 및 dSlot 리소스 할당기(620)는 이러한 기법들을 용이하게 할 수 있다.
도 7은 일부 실시예들에 따른, 예시적인 분산형 슬롯 상태들 및 커널 레지던시 정보를 예시하는 도면이다. 이러한 정보는 동적 맵핑을 용이하게 할 수 있다.
dslot_status는, 예시된 예에서, 각각의 dSlot마다 유지되며, dSlot이 무효(invalid)인지, 구동 중(running)인지, 비어 있는(emptied)지, 플러싱 중(flushing)인지, 또는 유지되는(retained)지를 표시한다. 무효 상태는, dSlot이 어떠한 로직 슬롯에 의해서도 소유되어 있지 않음을 표시한다. 구동 중 상태는, dSlot이 로직 슬롯에 의해 소유되어 있고 현재 실행 중임을 표시한다. 비워짐 상태는, dSlot이 로직 슬롯에 의해 소유되어 있고 실행을 완료했음을 표시한다. 플러싱 중 상태는 dSlot이 캐시 플러시의 프로세스 중(예컨대, 메모리 계층구조에서의 플러시-무효화)에 있을 때와 같이 로직 슬롯에 의해 소유되어 있음을 표시한다. 유지 상태는, dSlot이 로직 슬롯에 의해 소유되고, 예컨대, 성능 데이터를 보존하기 위해, 커널의 완료 후에(예컨대, 커널 종료 캐시 플러시 무효화(end-of-kernel cache flush invalidate) 후에) 유지되고 있음을 표시한다. 이러한 상태들은 설명의 목적들을 위해 포함되지만, 다른 실시예들에서는, 다른 상태들이 구현될 수 있거나 상태들이 생략될 수 있거나 또는 둘 모두일 수 있다는 것에 유의한다.
dslot_owner 상태는, 예시된 예에서, 각각의 dSlot마다 유지되며, dSlot을 소유하는 로직 슬롯을 표시한다. 이러한 필드는 무효 상태에 대해 관련이 없는데, 그 이유는 어떠한 로직 슬롯도 무효 dSlot을 소유하지 않기 때문이다.
per_kernel_residency 상태는, 예시된 예에서, 각각의 커널 및 각각의 mGPU마다 유지되며, 커널이 mGPU에 할당되었는지의 여부를 표시한다. 계산 작업을 위해 커널당 유지되는 다양한 정보는 유사하게, 커널들을 활용하지 않는 다른 유형들의 작업에 대한 킥들 또는 킥들의 부분들에 대해 유지될 수 있다는 것에 유의한다.
도 8은 일부 실시예들에 따른, 킥의 커널들을 맵핑하기 위한 예시적인 방법을 예시하는 흐름도이다.
810에서, 예시된 실시예에서, 제어 회로부는, 커널 종속성들이 클리어되고 킥에 할당된 로직 슬롯은 유휴 커널 프로세서를 가질 때까지 기다린다. 이것은 킥에 대한 다음 커널을 시작하기 전에 선행 커널이 반복을 완료할 수 있게 한다.
820에서, 예시된 실시예에서, CSP는 분배 모드를 결정하고, 분배 모드를 갖는 요청을 DRA(620)로 전송한다.
830에서, DRA(620)는 분산형 슬롯 할당으로 응답한다. 예시적인 DRA 중재 알고리즘들이 하기에서 상세히 논의된다.
840에서, 예시된 예에서, 일차 제어 회로부는 여러 활동들을 수행한다. 먼저, 그것은 커널을 위해 dSlot이 할당되었던 모든 mGPU들로 분산형 슬롯 시작 메시지를 전송한다. 다음으로, 그것은 어느 dSlot들이 영향을 받는지를 표시하기 위해 dSlot 마스크를 포함하는 레지스터 카피 유닛으로 레지스터 기록 커맨드를 전송한다. 레지스터 카피 유닛은 커널을 위한 분산형 슬롯 스코핑된 제어 레지스터들을 기록한다. (레지스터 카피 유닛은 킥을 위한 로직 슬롯 스코핑된 제어 레지스터들을 이미 기록했을 수 있음.) 마지막으로, 일차 제어 회로부는 작업을 표시된 mGPU들로 전송한다. 레지스터 카피 유닛에 의한 모든 레지스터 기록들이 완료될 때까지 작업이 펜싱(fence)될 수 있다는 것에 유의한다.
일차 제어 회로부는 또한, 그것이 분배하는 모든 커널을 위해 완료 상태를 추적할 수 있다. 예를 들어, 그것은 커널이 실행하고 있었던 dSlot들이 구동 중으로부터 비워짐으로 모두 전환되었을 때를 검출할 수 있다.
예시적인 소프트웨어 오버라이드 기법들
일부 실시예들에서, 소프트웨어는 커널을 위한 디폴트 분배 모드를 오버라이드하기 위해 다양한 표시들을 제공할 수 있다. 이것은, 예를 들어, 소프트웨어가 단일 mGPU에 할당되는 위험보다 중요한 작업을 병렬화할 수 있게 할 수 있다. 또한, 이것은 소프트웨어가 mGPU들의 특정 그룹에 커널을 할당할 수 있게 할 수 있다.
도 9는 예시적인 소프트웨어 오버라이드 필드들을 예시하는 도면이다. 소프트웨어 또는 펌웨어는 이러한 필드들을 조정하여 커널 분배를 제어할 수 있다. mGPU 마스크 필드는, 예시된 실시예에서, 어느 mGPU들이 이러한 킥에 의해 사용될 수 있는지를 표시한다. 예를 들어, 마스크는 mGPU당 비트를 포함할 수 있다. 이것은 소프트웨어가 킥을 위한 소정 mGPU들을 회피시키거나 타깃화하는 것을 표시할 수 있게 할 수 있다. 분배 모드 필드는 소프트웨어가 분배 모드를 선택할 수 있게 한다. 디폴트 값은 제어 스트림 프로세서(630)가 로직 슬롯이 분배 모드를 선택할 수 있게 할 수 있다. 다른 값들은 (적어도, 소프트웨어 오버라이드들이 인에이블되는 동작 모드들에서) 제어 스트림 프로세서(630)에 의해 그것이 선택했을 모드에 관계없이 구현될 수 있는 분배 모드를 특정할 수 있다. 디폴트 모드에서, mGPU 할당 회로부(650)는 부하 밸런싱에 기초하여 CSP에 의해 선택된 분배 모드에 따라 dSlot들을 선택할 수 있는 반면, 다른 모드들에서, mGPU 할당 회로부는 소프트웨어 오버라이드들에 의해 특정된 제한들을 추종할 수 있다.
힘 그룹 필드는 소프트웨어가 킥을 실행할 그룹을 선택할 수 있게 한다. 이것은, 예를 들어, 단일 mGPU 또는 단일 그룹 분배 모드들과 함께 특정될 수 있다. 정책 필드는 소프트웨어가 단일 mGPU 또는 단일 그룹 분배에 대한 스케줄링 정책을 특정할 수 있게 한다. 예시된 예에서, 소프트웨어는 "제1 옵션 선택" 정책(이는 디폴트일 수 있음) 또는 라운드 로빈(round robin) 정책을 특정할 수 있다. 제1 옵션 선택 정책은 그의 인덱스에 따라 제1 이용가능한 요소(예컨대, mGPU 또는 그룹)를 선택할 수 있는데, 이는 프래그먼트화를 회피시킬 수 있고 더 많은 인접한 dSlot들을 다른 슬라이스들을 위해 사용 중이 아닌 상태(free)로 둘 수 있다. 라운드 로빈 정책은 상당한 성능 변동을 야기하지만 다수의 그룹들에 걸쳐 작은 슬라이스들을 분산시킬 수 있는 선택된 리소스들의 위치를 회피시킬 수 있는 리소스들의 사용을 랜덤화할 수 있다. 다른 실시예들에서, 다양한 정책들이 특정될 수 있다. 소프트웨어 오버라이드 필드들을 고려하는 중재의 상세한 예들이 하기에서 논의된다.
예시적인 중재 기법들
도 10a 내지 도 10c는 일부 실시예들에 따른, 각자의 상이한 분배 모드들 동안의 하드웨어 슬롯 중재를 위한 예시적인 기법들을 예시하는 흐름도들이다. 개시된 기법들은 대체적으로, 동일한 로직 슬롯에서 연속적인 커널들을 넓게 분배할 수 있다는 것에 유의한다(예컨대, 따라서, 커널 A가 mGPU0에서 dSlot을 할당받는 단일 mGPU 커널인 경우, 단일 mGPU 커널이기도 한 커널 B가 mGPU1 내의 dSlot에 할당될 것인데, 이는 더 적은 로직 슬롯들이 동시에 구동할 수 있게 하면서 로직 슬롯의 실행을 완료하는 것을 우선순위화할 수 있음).
일부 실시예들에서, DRA(620)는, 예컨대 동일한 로직 슬롯으로부터의 후속 커널이 dSlot(들)을 사용할 수 있게 하기 위해, dSlot들을 가능한 한 오랫동안 비워짐 상태로 둔다. 이것은 새롭게 할당된 dSlot들에 대한 캐시 플러시 무효화들 및 실행 구성 레지스터들의 기록을 감소시킬 수 있다. 일부 실시예들에서, 다른 로직 슬롯에 의해 소유되는 비워짐 상태에서의 dSlot들은 새로운 로직 슬롯에 할당되기 전에 갱생 프로세스(도 11을 참조하여 하기에서 논의됨) 및 무효로의 전환을 거쳐야 한다.
대체적으로, 하기에서 상세히 설명되는 바와 같이, DRA(620)는 하기의 우선순위 스킴을 사용하여 커널을 위한 dSlot을 선택한다. 최고 우선순위는 로직 슬롯에 의해 이미 소유된 비어 있는 dSlot들이다. 이러한 dSlot들은 그들의 제어 레지스터들이 기록되게 하고, 즉각적인 실행을 위해 자유 상태이다. 중간 우선순위는 무효 dSlot들인데, 이들은 새롭게 할당되고, 제어 레지스터 기록들을 필요로 할 수 있지만, 즉각적인 실행을 위해 자유 상태이다. 최저 우선순위는 분산형 슬롯에 의해 이미 소유된 구동 중인 dSlot들이다. 이러한 dSlot들은 그들의 제어 레지스터들이 기록되게 하지만, 다른 커널 뒤에서 기다릴 것을 요구할 수 있다.
도 10a는 단일 mGPU 분배 모드 동안의 중재 방법을 도시한다. 1010에서, 예시된 실시예에서, DRA(620)는 그의 힘 그룹 및 mGPU 마스크 필드들에 기초하여 커널을 위한 허용가능한 mGPU들의 세트를 결정한다. 이러한 세트는 소프트웨어에 의해 선택되지 않은 mGPU들의 임의의 그룹들을 생략할 수 있다.
1012에서, 예시된 실시예에서, DRA(620)는 커널의 로직 슬롯이 비워짐 상태의 dSlot을 이미 소유하는 mGPU를 선택한다. 요소들(1012, 1016, 1018)에 대한 타이(tie)의 경우에, DRA(620)는 결정된 정책(예컨대, 일부 실시예들에서, 디폴트, 소프트웨어 특정된, 또는 단일 유형의 정책)을 사용하여 하드웨어 리소스들을 선택한다는 것에 유의한다. 예를 들어, 요소(1012)를 만족시키는 다수의 mGPU들이 있는 경우, DRA(620)는 mGPU를 선택하기 위한 정책을 적용할 수 있다. 하나 이상의 mGPU들이 이러한 기준들을 만족시키는 경우, 그들 중 하나가 선택되며, 커널이 완료될 때까지 그 로직 슬롯에 대해 중재가 종료된다. 그렇지 않은 경우, 흐름이 진행된다.
1014에서, 예시된 실시예에서, DRA(620)는 로직 슬롯이 이미 dSlot을 소유하지 않는 적어도 하나의 INVALID dSlot을 갖는 mGPU를 선택한다. 하나 이상의 mGPU들이 이러한 기준들을 만족시키는 경우, 그들 중 하나가 선택되며, 커널이 완료될 때까지 그 로직 슬롯에 대해 중재가 종료된다. 그렇지 않은 경우, 흐름이 진행된다.
1016에서, 예시된 실시예에서, DRA(620)는 가장 무효한 슬롯들을 갖는 mGPU를 선택한다. 하나 이상의 mGPU들이 이러한 기준들을 만족시키는 경우, 그들 중 하나가 선택되며, 커널이 완료될 때까지 그 로직 슬롯에 대해 중재가 종료된다. 그렇지 않은 경우, 흐름이 진행된다.
1018에서, 예시된 실시예에서, DRA(620)는 로직 슬롯이 구동 중 상태에서 하드웨어 슬롯을 이미 소유하는 mGPU를 선택한다. 하나 이상의 mGPU들이 이러한 기준들을 만족시키는 경우, 그들 중 하나가 선택되며, 커널이 완료될 때까지 그 로직 슬롯에 대해 중재가 종료된다. 그렇지 않은 경우, 흐름이 진행된다.
1020에서, 예시된 실시예에서, DRA(620)는 갱생 절차를 시도한다. 그러한 절차의 예들은 도 11을 참조하여 하기에서 더 상세히 논의된다. 갱생이 성공적이지 않은 경우, 흐름이 진행된다.
1022에서, 예시된 실시예에서, DRA(620)는 할당 머신을 재시작하고, 재중재한다. 다양한 분배 모드들의 경우, 분배 모드를 만족시키기 위해 충분한 수의 하드웨어 슬롯들이 이용가능할 때까지 재중재가 발생할 수 있다.
도 10b는 단일 그룹 분배 모드 동안의 중재 방법을 도시한다. 1030에서, 예시된 실시예에서, DRA(620)는 도 10a의 요소(1010)와 유사하게, 허용가능한 mGPU들의 세트를 결정한다.
1032에서, 예시된 실시예에서, DRA(620)는 그룹 내의 모든 mGPU들이 비워짐 또는 무효 상태에 있는 커널의 로직 슬롯에 의해 소유된 dSlot을 갖는 그룹을 선택한다. 타이의 경우에, DRA(620)는 적어도 무효 dSlot들을 갖는 그룹을 선택한다. 하나 이상의 그룹들이 이러한 기준들을 만족시키는 경우, 그들 중 하나가 선택되며, 커널이 완료될 때까지 그 로직 슬롯에 대해 중재가 종료된다. 그렇지 않은 경우, 흐름이 진행된다.
1034에서, 예시된 실시예에서, DRA(620)는 그룹 내의 모든 mGPU들이 구동 중, 무효, 또는 비워짐 상태에 있는 로직 슬롯에 의해 소유된 dSlot을 갖는 그룹을 선택한다. 타이의 경우에, DRA(620)는 구동 중 상태의 슬롯을 갖는 최소 mGPU들을 갖는 그룹을 선택한다. DRA(620)는 여전히 타이가 있는 경우에 정책을 적용할 수 있다. 하나 이상의 그룹들이 이러한 기준들을 만족시키는 경우, 그들 중 하나가 선택되며, 커널이 완료될 때까지 그 로직 슬롯에 대해 중재가 종료된다. 그렇지 않은 경우, 흐름이 진행된다.
1038 및 1040에서, DRA(620)는 상기에서 논의된 요소들(1020, 1022)과 유사하게, 갱생을 시도하고, 이어서, 할당 머신을 재시작하고 재중재한다.
도 10c는 다중 그룹 분배 모드 동안의 중재 방법을 도시한다. 1050에서, 예시된 실시예에서, DRA(620)는 mGPU 마스크에 기초하여 (그리고 이러한 예에서 모든 그룹들이 사용됨에 따라, 힘 그룹 커맨드에는 기초하지 않음) 허용가능한 mGPU들의 세트를 결정한다.
1052에서, 예시된 실시예에서, DRA(620)는 허용가능한 mGPU들의 세트 내의 각각의 타깃 mGPU에 대한 요소들(1054 내지 1058)의 동작들을 수행한다. 1054에서, DRA는 비워짐 또는 구동 중 상태에 있는 커널의 로직 슬롯에 의해 이미 소유된 dSlot을 선택한다. 하나 이상의 dSlot들이 이러한 기준들을 만족시키는 경우, 그들 중 하나가 선택되며, 커널이 완료될 때까지 그 로직 슬롯에 대해 중재가 종료된다. 그렇지 않은 경우, 흐름이 진행된다.
1056에서, 예시된 실시예에서, DRA(620)는 무효 dSlot을 선택한다. 하나 이상의 dSlot들이 이러한 기준들을 만족시키는 경우, 그들 중 하나가 선택되며, 커널이 완료될 때까지 그 로직 슬롯에 대해 중재가 종료된다. 그렇지 않은 경우, 흐름이 진행된다. 1058에서, 예시된 실시예에서, DRA(620)는 갱생을 시도한다.
요소(1052)의 동작들이 커널을 위해 각각의 mGPU 내의 dSlot을 할당하는 데 성공적이지 않은 경우, 흐름은 1060으로 진행하고, DRA(620)는 할당 머신을 재시작하고 재중재한다.
상기에서 논의된 다양한 기법들이 소프트웨어 오버라이드 필드들을 고려하지만, 다른 실시예들에서, 소프트웨어 오버라이드들은 구현되지 않을 수 있거나 또는 소정 동작 모드들에서 디스에이블될 수 있다는 것에 유의한다. 그 경우에, DRA는 상기에서 논의된 바와 같이 동작할 수 있지만, 소프트웨어 오버라이드 고려사항들을 생략할 수 있다.
슬롯 갱생
일부 실시예들에서, 제어 회로부는 로직 슬롯이 다른 로직 슬롯에 할당된 하드웨어 슬롯을 갱생할 수 있게 하도록 구성된다. 일부 실시예들에서, 더 높은 우선순위 로직 슬롯들만이 다른 로직 슬롯들로부터의 하드웨어 슬롯들을 갱생하도록 허용된다. 로직 슬롯 우선순위를 강제하기 위한 예시적인 기법들이 하기에서 논의되지만, 대체적으로, 우선순위는 소프트웨어에 의해 표시될 수 있다. 일부 실시예들에서, 비워짐 상태의 하드웨어 슬롯만이 다른 로직 슬롯에 의해 갱생되기에 적합하다.
대체적으로, 제어 회로부는 하드웨어 슬롯을 가능한 한 오랫동안 비워짐 상태로 유지하려고 시도할 수 있다. 이것은 하드웨어 슬롯을 새로운 로직 슬롯으로 스위칭할 때 캐시 플러시 무효화 및 기록 구성 레지스터들을 실행하는 오버헤드를 회피시킬 수 있다(그 이유는 하드웨어 슬롯을 비워짐 상태로 유지하는 것이 동일한 로직 슬롯이 동일한 킥으로부터의 다른 커널을 전송하여 하드웨어 슬롯을 사용할 수 있게 할 수 있고, 이것이 이러한 오버헤드를 회피시키기 때문임). 그러나, 이 때문에, 그것은 다른 중요한 로직 슬롯들이 그러한 하드웨어 슬롯들을 취할 수 있게 하도록 성능을 개선할 수 있다.
도 11a는 일부 실시예들에 따른, 하드웨어 슬롯 갱생에 사용되는 홀드 신호의 예시적인 값들을 예시하는 도면이다. 홀드 신호는 지속성 신호로도 지칭될 수 있다. 각각의 CSP(630)는 그것이 그의 하드웨어 슬롯들에 홀딩하기를 바라는 정도를 (예컨대, CSP(630)가 얼마나 그의 킥을 실행 중에 있는지의 함수로서) 표시하는 홀드 신호를 DRA(620)로 전송할 수 있다.
예시된 예에서, 홀드 신호는 3개의 값들 중 하나를 갖지만, 다른 실시예들에서는 다른 세트들의 값들이 고려된다. 낮은 값은, 로직 슬롯이 킥을 위한 제어 스트림 종료 신호에 도달하였고 프로세싱할 커널 큐에 남겨진 커널들이 없음을 표시한다. 이러한 경우에, 로직 슬롯은 킥을 위한 다른 하드웨어 슬롯을 요구하지 않을 것이다. 중간 값은, 로직 슬롯이 제어 스트림 종료에 도달하지 않았지만, 현재, 실행을 위해 하드웨어 슬롯들을 요청할 준비가 된 커널들이 없음을 표시한다. 높은 값은 로직 슬롯이 실행을 위해 하드웨어 슬롯들을 요청하는 커널을 가짐을 표시한다.
일부 실시예들에서, DRA(620)는, 요청을 만족시키기 위해 충분한 하드웨어 슬롯들이 갱생될 수 있는 경우에만 슬롯들을 갱생하도록 구성된다. 그렇지 않은 경우, 갱생 시도가 실패할 수 있다. 일단 갱생이 성공적이면, DRA(620)는 그의 상태 머신을 재시작하고, 로직 슬롯을 재중재한다. DRA(620)는 임의의 갱생 슬롯들에 대한 메모리 계층구조에서의 캐시 플러시 무효화를 개시할 수 있다. 이것은 그러한 슬롯들을 플러싱 중 상태로 전환할 수 있지만, 이러한 슬롯들은 일단 그들이 플러싱하기를 완료하고 무효 상태로 전환하면, 중재에 이용가능하게 될 수 있다.
도 11b는 일부 실시예들에 따른, 다른 로직 슬롯에 현재 할당되는 하나 이상의 하드웨어 슬롯들을 갱생하기 위한 예시적인 기법을 예시하는 흐름도이다. 1110에서, 예시된 실시예에서, DRA(620)는 플러싱 상태의 모든 dSlot들을 발견한다. 그것은 flushing_set 내의 슬롯들의 세트를 표시하는 데이터 구조를 생성할 수 있다. 이러한 dSlot들이 커널에 대한 요청을 서비스하기에 충분한 경우, DRA(620)는 갱생을 취소하고, 플러시들이 완료되기를 기다린다. 그렇지 않은 경우, 흐름이 진행된다.
1120에서, 예시된 실시예에서, DRA(620)는 모든 dSlot들을 발견하는데, 이들은 비워지고 로직 슬롯에 의해 소유되며, 로직 슬롯은 (a) 콘텍스트 저장 중이 아니고 (b) 어떠한 플러싱 dSlot들도 갖지 않는다. 그것은 이러한 allowed_set 내의 슬롯들의 세트를 표시하는 데이터 구조를 생성할 수 있다. flushing_set 내의 dSlot들과 조합되는 낮은 홀드 값을 갖는 allowed_set 내의 dSlot들이 요청을 서비스하는 데 충분한 경우, DRA(620)는 그러한 dSlot들을 갱생하고, 그러한 dSlot들에 대한 캐시 플러시 무효화를 시작한다. 그렇지 않은 경우, 흐름이 진행된다.
1130에서, 예시된 실시예에서, DRA(620)는 요청이 낮은 우선순위 로직 슬롯에 대한 것인지 아니면 낮은 우선순위 로직 슬롯에 대한 것인지를 먼저 결정하고, 그에 따라 동작한다. 다른 실시예들에서 우선순위의 다른 입도들이 지원될 수 있다는 것에 유의한다. 낮은 우선순위 요청자의 경우, DRA(620)는 낮은 우선순위 로직 슬롯에 의해 소유되는 중간 홀드 값을 갖는 allowed_set 내의 슬롯들인 슬롯들의 do_set를 생성한다. DRA(620)는 flushing_set 및 do_set 둘 모두에서 dSlot들을 발견한다. 이러한 dSlot들이 요청을 서비스하는 데 충분한 경우, DRA(620)는 그러한 dSlot들을 갱생하고, 그러한 dSlot들에 대한 캐시 플러시 무효화를 시작한다. 그렇지 않은 경우, 흐름이 진행된다.
높은 우선순위 요청자의 경우, DRA(620)는 높은 우선순위 로직 슬롯에 의해 소유되는 중간 홀드 값을 갖는 allowed_set 내의 슬롯들인 슬롯들의 do_set를 생성한다. DRA(620)는 flushing_set 및 do_set 둘 모두에서 dSlot들을 발견한다. 이러한 dSlot들이 요청을 서비스하는 데 충분한 경우, DRA(620)는 그러한 dSlot들을 갱생하고, 그러한 dSlot들에 대한 캐시 플러시 무효화를 시작한다. 그렇지 않은 경우, 흐름이 진행된다.
1140에서, 예시된 실시예에서, DRA(620)는 do_set에 슬롯들을 추가하는데, 이들은 allowed_set 내에 있고, 높은 홀드 값을 갖고, 더 낮은 우선순위 및 더 낮은 연령을 갖는 로직 슬롯에 속한다. DRA(620)는 flushing_set 및 업데이트된 do_set 둘 모두에서 dSlot들을 발견한다. 이러한 dSlot들이 요청을 서비스하는 데 충분한 경우, DRA(620)는 그러한 dSlot들을 갱생하고, 그러한 dSlot들에 대한 캐시 플러시 무효화를 시작한다. 그렇지 않은 경우, 그것은 갱생을 취소하고 중재를 재시작할 수 있다.
다양한 실시예들에서, 개시된 기법들은 유리하게는, (오버헤드를 회피하기 위해) 하드웨어 슬롯들을 현재 로직 슬롯에 대해 비워진 채로 유지하는 것 사이의 밸런스를 제공하면서, 여전히, 그러한 하드웨어 슬롯들이 소정 시나리오들에서 다른 로직 슬롯들에 의해 갱생될 수 있게 할 수 있다.
슬롯 유지
일부 실시예들에서, 제어 회로부는 (예컨대, 소프트웨어에 의해) 슬롯들을 해제할 것을 명령받을 때까지 로직 슬롯에 대한 하드웨어 슬롯들을 유지하도록 구성된다. 이것은 소프트웨어가 킥 실행에 의해 영향을 받는 성능 레지스터들, 메모리, 또는 다른 데이터와 같은 다양한 킥 정보를 질의할 수 있게 할 수 있다. 일부 실시예들에서, 각각의 킥은 로직 슬롯들에 대해 맵핑되는 하드웨어 슬롯들이 할당되기를 기다려야 하는지의 여부를 표시하는 retain_slots 필드(예컨대, 비트)를 포함한다.
일부 실시예들에서, 슬롯들이 유지된 킥이 로직 슬롯에 할당되는 경우, 다른 슬롯들은 우선순위에 상관없이 그 로직 슬롯으로부터 리소스들을 갱생할 수 없다.
도 12는 일부 실시예들에 따른, 슬롯들이 유지된 킥을 프로세싱하기 위해 일차 제어 회로부에 의해 수행되는 예시적인 방법을 예시하는 흐름도이다. 절차는 소프트웨어 통신을 허용하기 위해 KSM(350)과 통신 중에 수행될 수 있다. 1210에서, 예시된 예에서, 일차 제어 회로부(210)는 retain_slots 필드 세트를 갖는 킥을 개시하는데, 이는 슬롯 하드웨어 슬롯들이 유지되어야 함을 표시한다.
1220에서, 예시된 예에서, 킥은 그의 작업을 완료하고, 디바이스는 커널 종료 플러시 프로세싱을 수행한다. 하드웨어 슬롯들은 맵핑된 채로 유지된다.
1230에서, 일차 제어 회로부(210)는 kick_done 신호를 KSM(350)으로 전송한다. 그것은 또한 dSlot들을 유지 상태로 전환한다.
1240에서, 소프트웨어 또는 펌웨어는 킥에 의해 영향을 받는 성능 레지스터들, 메모리 등을 질의할 수 있다. 1250에서, KSM(350)는 (예컨대, 질의가 완료됨을 표시하는 소프트웨어 명령에 기초하여) release_slots 신호를 전송한다.
1260에서, 일차 제어 회로부(210)는 하드웨어 슬롯들을 할당해제하는 프로세스를 완료하는데, 그들은 무효 상태로 전환되고, 이제 다른 로직 슬롯에 이용가능하다. 1270에서, 일차 제어 회로부(210)는 할당해제 메시지를 KSM(350)으로 전송하여, 그에게 할당해제가 완료되었음을 통지한다.
일부 실시예들에서, 행(hang) 조건들을 회피하기 위해, 슬롯들이 유지되는 킥들은 항상 다중 그룹 분배 모드를 사용하고, 완료로부터 차단될 수 없다. 따라서, 유지 상태의 로직 슬롯들과 유지 상태가 아닌 로직 슬롯들 사이에서 중재할 때, 유지 상태의 로직 슬롯들은 항상 우선순위를 가질 수 있다. 또한, KSM(350)은, 예컨대 mGPU당 dSlot들의 수에 대응하는, 유지 상태가 설정된 로직 슬롯들의 임계 수까지만 스케줄링할 수 있다. 일부 실시예들에서, 유지 상태가 설정된 모든 로직 슬롯들은 높은 우선순위로 조성된다.
높은 우선순위 킥들에 대한 예약된 슬롯들
상기에서 간단히 논의된 바와 같이, 상이한 로직 슬롯들은, 예컨대 소프트웨어에 의해 특정된 바와 같이, 상이한 우선순위 레벨들을 가질 수 있다. 일부 실시예들에서, 주어진 mGPU 상에서, 하드웨어 슬롯들의 서브세트는 임계 우선순위를 충족하는 로직 슬롯들(예컨대, 2개의 우선순위 레벨들을 갖는 시스템에서 더 높은 우선순위 슬롯들)을 위해 예약된다.
도 13은 mGPU의 하드웨어 슬롯들의 수를 예시하는 블록도이다. 일부 실시예들에서, 하나 이상의 dSlot들(도 13에서 단일 흑색으로 도시됨)이 높은 우선순위 로직 슬롯들을 위해 예약되고, 하나 이상의 dSlot들(도 13에서 수평 셰이딩으로 도시됨)이 모든 로직 슬롯들에 이용가능하다(그리고 낮은 우선순위 로직 슬롯들에 이용가능한 전용 하드웨어 슬롯들임).
일부 실시예들에서, 높은 우선순위 로직 슬롯들은 다른 슬롯들을 사용하려고 시도하기 전에 먼저 mGPU의 예약된 하드웨어 슬롯들을 사용하려고 시도한다. 다른 실시예들에서, 높은 우선순위 로직 슬롯들은, 예컨대, 라운드 로빈 기법들을 사용하여, mGPU의 모든 하드웨어 슬롯들을 동일하게 사용하려고 시도할 수 있다.
일부 실시예들에서, 낮은 우선순위 로직 슬롯들은, 높은 우선순위 로직 슬롯이 하드웨어 슬롯들을 사용할 가능성이 없지 않는 한, 높은 우선순위 로직 슬롯들로부터 하드웨어 슬롯들을 갱생하도록 허용되지 않는다.
다양한 실시예들에서, 개시된 우선순위 기법들은 유리하게는, 소프트웨어가 덜 중요한 작업으로부터 장애들을 감소시키기 위해 중요한 작업의 분배에 영향을 줄 수 있게 할 수 있다.
플러싱 기법들
상기에서 논의된 바와 같이, 하드웨어 슬롯이 새로운 로직 슬롯에 할당될 때마다 캐시 플러시 무효화(CFI)가 수행될 수 있다. 또한, 일차 제어 회로부(210)는 킥들을 계산하기 위해 제어 스트림에 포함된 임의의 CFI들을 실행해야 한다. 그러나, 하드웨어 슬롯들이 커널 레벨에서 동적으로 맵핑될 수 있기 때문에, 제어 스트림 CFI에 대해 플러싱할 하드웨어 슬롯들의 세트는 결정론적이지 않을 수 있다. 하기의 논의는 이러한 현상을 핸들링하기 위한 기법들을 제공한다. 특히, 모든 관련 mGPU들(예컨대, 일부 구현들에서 그래픽스 프로세서 내의 모든 mGPU들)을 플러싱하는 "무조건부" CFI가 도입된다.
도 14a는 일부 실시예들에 따른, 무조건부 필드를 갖는 예시적인 캐시 플러시 무효화 커맨드를 예시하는 도면이다. 각각의 CFI는 이러한 예에서, "무조건부" 필드를 포함한다. 표준(비-무조건부) CFI들은 표준 CFI가 발행될 때 로직 슬롯에 의해 소유된 모든 하드웨어 슬롯들에 적용된다. 무조건부 CFI들은, 로직 슬롯이 일부 mGPU들 내에 어떠한 하드웨어 슬롯들도 소유하지 않았더라도 모든 mGPU들로 전송된다.
도 14b는 일부 실시예들에 따른, 조건부 CFI들을 프로세싱하도록 구성된 dSlot 리소스 할당기의 실시예를 예시하는 블록도이다. 예시된 예에서, DRA(620)는 커널 종료 플러시 제어 레지스터(1330) 및 플러시 할당해제 제어 레지스터(1340)를 포함한다. 일부 실시예들에서, 일차 제어 회로부(210)는 최대 하나의 무조건부 CFI가 임의의 주어진 시간에 두드러질 수 있도록 상태 머신을 구현한다. 로직 슬롯들은 이러한 리소스에 대해 중재할 수 있다.
커널 종료 플러시 제어 레지스터(1330)는 커널의 종료 시에 어느 mGPU들을 플러싱할 것인지를 표시하는 비트들의 세트를 유지할 수 있다. 플러시 할당해제 제어 레지스터(1340)는 킥의 중간에서의 dSlot 할당해제 시에 어느 mGPU들을 플러싱할지를 표시하는 비트들의 세트를 유지할 수 있다(이것이 커널 종료 플러시에 의해 특정된 비트들의 서브세트일 수 있다는 것에 유의한다).
DRA(620)는 dSlot이 할당해제될 때 하기의 절차를 구현할 수 있다. 먼저, dSlot이 로직 슬롯에 대해 할당된 dSlot을 갖는 그룹 내의 마지막 mGPU가 아닌 경우, DRA(620)는 플러시 할당해제 제어 레지스터(1340)를 사용하는데, 이는 잠재적으로, 더 적은 수의 캐시들을 플러시 무효화할 수 있다(예컨대, 그룹에 의해 하나 이상의 L1 캐시들이 공유되고 L2 캐시는 공유되지 않음). dSlot이 그룹의 마지막 mGPU 내에 있는 경우, DRA(620)는 커널 종료 플러시 제어 레지스터(1330)를 사용하여 어느 캐시(들)를 플러싱할지를 결정한다.
다양한 실시예들에서, 개시된 기법들은 유리하게는, 비-결정론적 플러싱 거동을 회피시키거나, 캐시 효율을 개선하거나, 또는 둘 모두를 할 수 있다.
친화성 기반 분배
다수의 GPU 서브유닛들이 캐시(예컨대, 그룹(305)의 mGPU들(320A 내지 320N))를 공유하는 실시예들에서, 제어 회로부는 캐시를 공유하는 서브유닛들과 동일한 메모리 영역(들)에 액세스하는 커널의 부분들을 스케줄링할 수 있다. 이것은, 특히 동일한 킥의 커널들 사이에서, 캐시 효율을 개선할 수 있다.
일부 실시예들에서, 일차 제어 회로부(210)는 캐시와 같은 리소스들을 공유하는 하드웨어의 세트들에 대응할 수 있는 친화도 영역들의 세트를 정의한다. 일부 실시예들에서, 친화도 영역들과 mGPU들의 타깃 그룹들 사이에 고정된 관계가 있다(그러나 관계는 커널의 차원수에 따라 달라질 수 있다). 일차 제어 회로부(210)는 다수의 친화도 맵들을 저장하는 제어 레지스터들을 포함할 수 있다. 각각의 친화도 맵은 커널 부분들과 친화도 영역들 사이의 관계를 특정할 수 있다. 이러한 방식으로, 각각의 커널은 그의 메모리 액세스들을 반영하는 친화도 맵을 지칭할 수 있다(예컨대, 결정된 바와 같이 그리고 소프트웨어에 의해, 이는 친화도 맵들을 구성하고 각각의 커널에 대한 친화도 맵을 특정할 수 있음). 따라서, 소프트웨어는 구성 레지스터들을 사용하여 잠재적인 친화도 패턴들을 프로그래밍할 수 있는데, 이는 또한 다수의 데이터 마스터들 사이에서 공유될 수 있다. 킥 내에서, 상이한 커널들이 상이한 친화도 맵들에 따라 분배될 수 있다.
도 15는 일부 실시예들에 따른, 그래픽스 작업(예컨대, 계산 커널)의 세트에 대한 예시적인 친화도 기법들을 예시하는 도면이다. 예시된 실시예에서, 그래픽스 작업(예컨대, 커널)의 세트는 친화도 맵(1520)을 특정하는 친화도 맵 표시자(1515)를 포함한다. 표시자는, 예를 들어, 친화도 맵들의 테이블로의 포인터 또는 인덱스일 수 있다. 친화도 맵은 커널의 N개의 부분들에 대한 mGPU들의 대응하는 타깃 그룹들(305)을 표시한다. 커널의 "부분"은 실제로는 친화도 맵 내의 필드가 아닐 수도 있지만, 엔트리의 인덱스에 기초하여 암시될 수 있다는 것에 유의한다. 예를 들어, 친화도 맵 내의 제3 엔트리는 커널의 (3/N)번째 부분에 대응할 수 있다. 디바이스는 다수의 상이한 친화도 맵들을 특정하도록 구성가능한 구성 레지스터들을 포함할 수 있다. 또한, 주어진 친화도 맵은 다수의 커널들에 의해 참조될 수 있다.
일부 실시예들에서, 그래픽스 작업의 세트의 부분들을 타깃 그룹들에 직접 맵핑하기보다는, 친화도 맵들은 그래픽스 작업의 세트의 부분들을 친화도 영역들에 맵핑하고 이어서 친화도 영역들을 하드웨어의 세트들에(예컨대, mGPU들의 그룹들에) 맵핑하는 간접 맵핑을 사용할 수 있다.
제어 회로부는 표시된 친화도 맵에 기초하여 그래픽스 작업의 세트를 분배할 수 있다. 동일한 그룹을 타깃화하는 그래픽스 작업(1510)의 세트의 다수의 부분들이 동일한 그룹/친화도 영역에 할당될 수 있다(그리고 따라서, 그룹의 mGPU들에 의해 공유된 캐시를 공유할 수 있는데, 이는 캐싱 효율을 개선할 수 있음).
개시된 실시예들은 mGPU들의 그룹들의 입도에서 친화도를 특정하지만, 친화도는 다양한 적절한 입도들 중 임의의 것에서, 예컨대, 메모리 계층구조에서 다양한 레벨들로 공유된 캐시들로, 특정되고 구현될 수 있다는 것에 유의한다. 개시된 실시예들은 예시의 목적들을 위해 포함되지만, 본 개시내용의 범주를 제한하도록 의도되지 않는다.
도 16은 일부 실시예들에 따른, 친화도에 기초하여 커널들로부터 작업그룹들의 배치들을 분배하도록 구성된 예시적인 회로부를 예시하는 블록도이다. 예시된 실시예에서, 하나의 로직 슬롯에 대한 제어 회로부는 제어 스트림 프로세서(630), 일차 커널 워커(1610), 그룹 워커들(1620A 내지 1620N), 그룹 워커 중재기(1630), mGPU 할당 회로부(650), 킥슬롯 중재기(660), 및 통신 패브릭(1660)을 포함한다. 디바이스에 의해 지원되는 각각의 로직 슬롯에 대해 유사한 회로부가 인스턴스화될 수 있다. 요소들(1610, 1630, 1640)이 상기에서 논의된 커널 프로세서(640)에 포함될 수 있고, 유사하게 번호가 매겨진 요소들이 도 6을 참조하여 전술된 바와 같이 구성될 수 있다는 것에 유의한다.
각각의 커널은 다수의 차원들(전형적으로 3개의 차원들)에서 작업그룹들로 조직화될 수 있다. 이러한 작업그룹들은 이어서 다수의 스레드들(작업항목들로도 지칭됨)을 포함할 수 있다. 일차 커널 워커(1610)는, 예시된 실시예에서, 특정된 친화도 맵에 따라, mGPU들의 그룹을 타깃화하는 커널의 부분들을 포함하는 친화도 서브커널들을 제공하기 위해 커널을 통해 반복하도록 구성된다. 일차 커널 워커(1610)는 서브커널의 초기 작업그룹의 좌표들을 사용하여 주어진 그룹 워커(1620)에 할당된 서브커널을 표시할 수 있다. 도 16의 요소들 사이에서 전송된 다양한 커널 데이터는 실제 작업을 포함하는 것이 아니라, 오히려, 예컨대 커널을 갖는 좌표들을 사용하여, 할당될 작업의 위치를 표시하는 제어 시그널링일 수 있다는 것에 유의한다.
상이한 차원수들을 갖는 커널들의 경우, 일차 커널 워커(1610)는 커널을 N개의 친화도 영역들로 분할할 수 있다. 예를 들어, 친화도 맵당 N개의 친화도 영역들을 갖는 실시예들에서, 일차 커널 워커(1610)는 단일 차원 커널에 대한 모든 N개의 영역들을 사용할 수 있다. 2차원 커널의 경우, 일차 커널 워커(1610)는 커널을 친화도 영역들의 × 그리드로 분할할 수 있다. 3차원 커널의 경우, 일차 커널 워커(1610)는 커널을 직사각형 친화도 영역들(하나의 예로서, 전체 z 차원에 걸쳐 있는 친화도 영역들의 × 그리드)로 분할할 수 있다.
그룹 워커들(1620)은, 예시된 실시예에서, 각자의 친화도 서브커널들을 독립적으로 탐색(walk)하도록 그리고 배치들을 생성하도록 구성되며, 여기서 각각의 배치는 하나 이상의 작업그룹을 포함한다. 배치는 계산 작업이 mGPU에 디스패치되는 입도일 수 있다. 주어진 친화도 서브커널은 도 17을 참조하여 하기에서 상세히 논의되는 바와 같이, 다수의 스레드 제한된 워크 주문 서브커널들로 분할될 수 있다는 것에 유의한다. 커널 워크 주문을 제어하기 위한 다양한 기법들이 2020년 9월 11일자로 출원된 미국 특허 출원 제17/018,913호에서 논의되고, 친화도 서브커널을 탐색하도록 그룹 워커들(1620)에 의해 사용될 수 있다.
그룹 워커 중재기(1630)는 예시된 실시예에서, 이용가능한 배치들 사이를 중재하도록 구성되고, mGPU 할당 회로부(650)는 선택된 배치들을 mGPU들에 할당하도록 구성된다.
할당 회로부(650)는 mGPU 마스크 및 부하 밸런싱을 사용하여, 임의의 소프트웨어 오버라이드들을 조건으로, mGPU들을 할당할 수 있다. 킥슬롯 중재기(660)는 준비 배치들 사이를 중재하고, 이들을 통신 패브릭(1660)을 통해 타깃 mGPU들로 전송한다. 통신 패브릭(1660)은, 예컨대 상기에서 언급된 '943호 특허 출원에서 논의된 바와 같이, 작업 완료를 표시하기 위해 할당된 작업 및 추적 시그널링의 특성들을 표시하는 제어 시그널링을 전송하도록 구성된 작업부하 분배 공유 버스(workload distribution shared bus, WDSB)일 수 있다.
일부 실시예들에서, 디바이스는, 예컨대 소프트웨어 제어에 기초하여 또는 소정 조건들 하의 제어 회로부를 사용하여, 친화도 기반 스케줄링을 턴오프할 수 있다. 이러한 상황에서, 일차 커널 워커(1610)는 전체 커널을 단일 그룹 워커(1620)에 할당할 수 있다.
mGPU들에서의 분산 제어 회로부(340)의 각각의 인스턴스는, 실행을 위해 작업그룹들을 셰이더 파이프라인들에 할당하기 전에 수신된 배치들을 저장하기 위한 입력 큐 및 배치 실행 큐를 포함할 수 있다.
도 17은 일부 실시예들에 따른, 예시적인 커널 반복을 예시하는 도면이다. 예시된 실시예에서, 커널(1710)은 다수의 부분들(하나의 차원에서의 M개의 부분들 및 다른 차원에서의 X개의 부분들)을 포함한다. 이러한 부분들 각각은 친화도 서브커널로 지칭될 수 있고, 친화도 영역에 맵핑될 수 있다(다수의 친화도 서브커널이 동일한 친화도 영역에 맵핑될 수 있다는 것에 유의한다).
예시된 예에서, 부분(A0)은 다수의 스레드 제한된 서브커널 부분들 A 내지 N을 포함한다. 각각의 친화도 서브커널 내에서, 그룹 워커(1620A)는 '913호 출원에서 설명된 바와 같이 제한된 반복을 사용할 수 있다. 도시된 바와 같이, 스레드 제한된 서브커널 부분 A는 다수의 배치들로 분할되는데, 이들은 통신 패브릭(1660)을 통해 분배될 수 있다(여기서, 배치 내의 각각의 정사각형은 작업그룹을 표현함). 개시된 실시예들에서, 부분 A0로부터의 모든 배치들은 동일한 그룹의 mGPU들에 할당될 수 있다(그리고 커널(1710)의 다른 부분들이 또한 이러한 그룹의 mGPU들을 타깃화할 수 있다는 것에 유의한다). 다양한 실시예들에서, 개시된 친화도 기법들은 유리하게는 캐시 효율을 개선할 수 있다.
일부 실시예들에서, 친화도 기반 스케줄링은 소정 상황들에서, 예컨대 비균질 커널들에 대해, 성능을 일시적으로 감소시킬 수 있다. 예를 들어, mGPU들의 일부 그룹들은 다른 그룹들이 덜 복잡한 부분들을 완료했을 때 커널의 복잡한 부분에 대해 여전히 작동 중일 수 있다. 따라서, 일부 실시예들에서, 그래픽스 프로세서는, 예컨대 커널의 종료 시, 친화도 기반 스케줄링을 오버라이드하기 위해 작업 스틸링 기법들을 구현한다. 이러한 실시예들에서, 커널에 대해 유휴 상태인 mGPU들의 그룹들은 커널에 대해 여전히 작동 중인 그룹들로부터 작업을 취할 수 있는데, 이는 유리하게는 커널에 대한 전체 실행 시간을 감소시킬 수 있다.
일부 실시예들에서, 제어 회로부는 mGPU들의 하나 이상의 공여자 그룹들(예컨대, 대부분의 작업이 남아 있는 그룹(들))을 선택하고, (예컨대, 커널에 대한 그들의 작업 모두 또는 적어도 임계량의 그들의 작업을 완료했던) 소정 상태들의 mGPU들의 다른 그룹들을 작업 수여자 그룹들로서 선택한다. 작업 수여자 그룹들은 공여자 그룹에 할당된 친화도 서브커널로부터 배치를 수신하여, 이에 의해, 소정 상황들에서 친화도 기법들을 오버라이딩할 수 있다.
도 18은 일부 실시예들에 따른, 작업 공유를 용이하게 하도록 구성된 예시적인 회로부를 예시하는 블록도이다. 예시된 실시예에서, 일차 커널 워커(1610)는 mGPU들의 각각의 그룹을 타깃화하는 커널(예컨대, 친화도 서브커널들)의 나머지 부분들을 추적하도록 구성된 회로부(1810A 내지 1810N)를 포함한다. 예를 들어, 주어진 그룹이 7개의 친화도 서브커널들에 의해 타깃화되었고 4개의 친화도 서브커널들을 수신했다면, 3개의 친화도 서브커널들이 그 그룹에 대해 남아 있다.
작업 공유 제어 회로부(1820)는, 예시된 실시예에서, 회로부(1810)에 의해 유지되는 정보에 기초하여 작업 공여자 그룹(들) 및 수여자 그룹(들)을 선택하도록 구성된다. 예시된 실시예에서, 이러한 그룹들을 식별하는 정보가 회로부(1830, 1840)에서 유지된다. 일부 실시예들에서, 그룹은 그것이 커널의 친화도 맵 내의 친화도 영역과 연관된 경우에만 작업을 취하기에 적합하다. 일부 실시예들에서, 그룹은 일단 그것이 커널에 대해 그의 할당된 작업(친화도 맵을 통해 할당됨) 모두를 디스패치했다면 커널에 대한 작업을 취하기에 적합해진다.
일부 실시예들에서, 작업 공여자 그룹은 가장 뒤에 있는(디스패치에 남아 있는 최대 수의 부분들을 갖는) 그룹이다. 그룹들이 작업을 수용하기에 적합해질 때, 그들은 공여자 그룹에 로킹(lock on)할 수 있다. 도시된 바와 같이, 일차 커널 워커(1610)는 그러한 수여자 그룹들의 동기화를 위해 상태 정보를 전송할 수 있다(예컨대, 친화도 서브커널에 대한 기본 정보를 조정할 수 있음).
공여자(이러한 예에서, 1620A)에 대한 그룹 커널 워커는 그의 대응하는 그룹 내의 mGPU들로 또는 작업 수여자 그룹들 중 임의의 것의 mGPU들로 전송할 작업그룹들의 배치들을 생성한다. 적합한 mGPU들의 세트는, 예를 들어, mGPU 할당 회로부(650)가 부하 밸런싱에 기초하여 적합한 mGPU들의 세트 중에서 선택할 수 있도록, 그룹 워커(1620A)로부터 mGPU 마스크에 의해 특정될 수 있다.
일부 실시예들에서, 일단 공여자 그룹이 그의 현재 부분(예컨대, 친화도 서브커널)에 대해 디스패치하기를 완료하면, 수여자들은 언로킹되고 새로운 공여자가 선택될 수 있으며, 프로세스는 전체 커널이 디스패치될 때까지 계속될 수 있다.
예시적인 킥슬롯 관리자 회로부
도 19a는 일부 실시예들에 따른, 예시적인 킥슬롯 관리자를 예시하는 블록도이다. 예시된 실시예에서, 킥슬롯 관리자(350)는 소프트웨어 인터페이스를 구현하고, 레지스터 카피 엔진(register copy engine)(1910) 및 의존성 추적 및 상태 회로부(1920)(예컨대, 스코어보드)를 포함한다. 예시된 실시예에서, 킥슬롯 관리자(350)는 메모리 인터페이스(1930), 제어 레지스터 인터페이스(1940), 및 일차 제어 회로부(210)와 통신한다.
일부 실시예들에서, 킥슬롯 관리자(350)는 소프트웨어가 킥들을 할당할 수 있는 다수의 "상단 슬롯들"을 구현한다. 이러한 상단 슬롯들은 본 명세서에서 "추적 슬롯들"로 지칭된다. 이어서, 킥슬롯 관리자(350)는 킥들 사이의 소프트웨어 특정된 종속성들을 핸들링하고, 추적 슬롯들로부터의 킥들을 일차 제어 회로부(210) 내의 로직 슬롯들에 맵핑하고, 킥 실행 상태를 추적하고, 상태 정보를 소프트웨어에 제공할 수 있다. 일부 실시예들에서, 전용 킥슬롯 관리자 회로부는 소프트웨어 제어형 구현들에 비해 킥간(kick-to-kick) 전환 시간을 유리하게 감소시킬 수 있다.
레지스터 카피 엔진(1910)은, 일부 실시예들에서, 메모리 인터페이스(1930)를 통해 메모리로부터 (예컨대, 킥 구성 레지스터들에 대한) 레지스터 데이터를 취출하도록 그리고 킥을 위한 인터페이스(1940)를 통해 구성 레지스터들을 프로그래밍하도록 구성된다. 일부 실시예들에서, 레지스터 카피 엔진(1910)은 킥을 위한 셰이더 리소스들을 할당하기 전에 구성 레지스터 데이터를 내부 버퍼(도 19a에 명시적으로 도시되지 않음)로 프리페칭하도록 구성된다. 이것은, 다양한 실시예들에서, 새로운 킥을 개시할 때 킥간 전환 시간을 감소시킬 수 있다. 레지스터 카피 엔진(1910)은 메모리 인터페이스(1930)를 통해 제어 레지스터 데이터에 액세스할 수 있고, 제어 레지스터 인터페이스(1940)를 통해 제어 레지스터들을 기록할 수 있다.
일부 실시예들에서, 레지스터 카피 엔진(1910)은 우선순위 순서로 킥들에 대한 데이터를 프리페칭하도록 구성되고, 추가적인 데이터를 요청하기 전에 초기 요청 레지스터 데이터가 취출되기를 기다리지 않을 수 있다(이는 레지스터 데이터를 판독하는 것과 연관된 메모리 레이턴시를 흡수할 수 있음). 일부 실시예들에서, 레지스터 카피 엔진(1910)은, 예컨대 적절한 분산형 슬롯들이 프로그래밍되도록 mGPU 마스크들에 기초하여, 마스킹된 브로드캐스트 레지스터 프로그래밍을 지원한다. 일부 실시예들에서, 레지스터 카피 엔진(1910)을 사용하여 제어 레지스터들을 프로그래밍하는 것은 일차 펌웨어 프로세서로부터 작업을 오프로드할 수 있다.
일부 실시예들에서, 킥슬롯 관리자(350)는 킥을 위한 모든 구성 레지스터들의 프로그래밍 이전에 킥을 스케줄링하도록 그리고 작업 할당 정보를 일차 제어 회로부(210)로 송신하도록 구성된다. 대체적으로, 초기 킥 스케줄링이 파이프라이닝될 수 있다. 이것은 셋업 위상 레지스터가 프로그래밍하는 것, 일차 제어 회로부가 분산형 슬롯들을 식별하는 것, 레지스터 카피 엔진(1910)이 일차 제어 회로부가 작업을 큐잉하는 것과 병렬로 제어 레지스터들을 프로그래밍하는 것, 및 일단 최종 제어 레지스터가 기록되었다면 큐잉된 작업이 시작되는 것을 포함할 수 있다. 이것은, 다운스트림 회로부가 작업 할당들을 수신 및 큐잉할 수 있게 하고, 일단 구성 레지스터들이 기록되면 프로세싱을 신속하게 시작할 수 있게 하여, 일부 실시예들에서 킥간 전환 시간을 추가로 감소시킬 수 있다. 특히, 이것은 모든 제어 레지스터들이 프로그래밍될 때까지 작업 큐잉하기를 기다리는 것에 비해 다수의 제어 버스 순회들과 연관된 레이턴시를 절약할 수 있다.
종속성 추적 및 상태 회로부(1920)는, 하기에서 상세히 논의되는 바와 같이, 소프트웨어로부터 수신된 정보를 저장하고 소프트웨어 인터페이스를 통해 소프트웨어에 상태 정보를 제공할 수 있다. 일부 실시예들에서, 추적 슬롯들은 다수의 유형들의 일차 제어 회로부(예컨대, 계산, 픽셀, 및 정점 제어 회로부)에 의해 공유된다. 다른 실시예들에서, 소정 추적 슬롯들은 소정 유형들의 일차 제어 회로부에 대해 예약될 수 있다.
도 19b는 일부 실시예들에 따른, 추적 슬롯당 예시적인 추적 및 상태 데이터를 예시하는 도면이다. 예시된 실시예에서, 회로부(1920)는 각각의 추적 슬롯들에 대한 하기의 정보를 유지한다: 식별자, 상태, 데이터 식별, 종속성들, 런 데이터, 및 구성. 이러한 예시적인 필드들 각각은 하기에서 상세히 논의된다. 일부 실시예들에서, 상태 및 런 데이터 필드들은 소프트웨어에 의해 판독 전용되고, 다른 필드들은 소프트웨어이다.
각각의 추적 슬롯은 고유 ID를 할당받을 수 있다. 따라서, 킥슬롯 관리자(350)는 최대 수의 추적 슬롯들을 지원할 수 있다. 다양한 실시예들에서, 지원되는 추적 슬롯들의 수는, 충분히 작은 비-의존적 킥들이 모든 이용가능한 추적 슬롯들을 사용하기 위해 병렬로 스케줄링될 수 있는 것이 상당히 드문 것이도록 선택될 수 있다. 일부 실시예들에서, 지원되는 추적 슬롯들의 수는 지원되는 로직 슬롯들의 수보다 크다.
상태 필드는, 일부 실시예들에서, 슬롯의 현재 상태 및 슬롯이 유효한지의 여부를 표시한다. 이러한 필드는 또한, 적용가능한 경우, 추적 슬롯에 할당된 로직 슬롯 및 임의의 분산된 슬롯들을 표시할 수 있다. 일부 실시예들에서, 상태 필드는 하기의 상태 값들을 지원한다: 비어 있음, 프로그래밍이 완료됨, 레지스터 페칭이 시작됨, 페어런트(parent)들을 기다림, 리소스들을 기다림, 분산형 슬롯들을 기다림, 실행 중임, 중단이 요청됨, 할당해제함, 킥슬롯 관리자에 의해 디큐잉됨, 일차 제어 회로부에 의해 디큐잉됨, 콘텍스트가 저장됨, 및 완료됨. 다른 실시예들에서, 상태 필드는 다른 상태들, 설명된 상태들의 서브세트 등을 지원할 수 있다. 예시적인 상태들은 도 21의 상태 머신을 참조하여 하기에서 상세히 논의된다.
데이터 식별 필드는, 일부 실시예들에서, 킥을 위한 제어 레지스터 데이터의 위치를 표시한다. 이것은, 예를 들어, 초기 레지스터 어드레스 및 구성 레지스터들의 수로서 특정될 수 있다. 그것은 또한, 레지스터 콘텍스트 식별자를 포함할 수 있다. 일부 실시예들에서, 데이터 식별 필드는 또한, 샘플러들 또는 메모리 애퍼처들과 같은, 킥에 의해 사용되는 다른 리소스들을 표시한다. 소정 상황들에서, 이러한 리소스들 중 일부는 하드 리소스들이어서, 그들이 이용가능할 때까지 킥이 진행될 수 없도록 할 수 있는 반면, 다른 리소스들은 소프트 리소스들일 수 있고 킥은 그들 없이 또는 요청된 리소스들의 일부만으로 진행될 수 있다. 하나의 예로서, 메모리 애퍼처들은 소프트 리소스들로 간주될 수 있고, 킥들은 그들의 소프트 리소스들이 이용가능하지 않더라도(잠재적으로, 통지가 요청 소프트웨어로 전송됨) 진행되도록 허용될 수 있다.
종속성 필드는, 일부 실시예들에서, 다른 슬롯들에서 킥들 상에 슬롯에 대한 임의의 종속성들을 표시한다. 하나의 예로서, 회로부(1920)는 N×N 행렬(여기서, N은 추적 슬롯들의 수임)을 구현할 수 있으며, 여기서 각각의 슬롯은 슬롯이 다른 슬롯에 의존하는지의 여부를 표시하는, 각각의 다른 슬롯에 대한 엔트리를 포함한다. 엔트리들은 다른 슬롯들로부터의 킥들이 완료될 때 클리어될 수 있다. 다른 실시예들에서, 종속성들은 다른 기법들을 사용하여 인코딩될 수 있다. 킥슬롯 관리자(350)는 표시된 종속성들에 따라 (예컨대, 킥이 의존하는 모든 추적 슬롯들이 완료될 때까지 킥을 로직 슬롯에 할당하기를 기다리는 것에 의해) 추적 슬롯들을 로직 슬롯들에 할당할 수 있다. 소프트웨어/펌웨어 제어로부터 전용 하드웨어로의 이동 의존성 추적은 로직 슬롯들의 더 효율적인 사용을 허용할 수 있고, 킥간 전환들을 감소시킬 수 있다.
런 데이터 필드는, 일부 실시예들에서, 킥들의 런 상태에 관한 정보를 제공한다. 예를 들어, 이러한 필드는 킥이 분산형 슬롯들 상에서 구동되기 시작할 때, 그리고 킥이 완료될 때, 킥의 할당을 위한 타임스탬프들을 로직 슬롯에 제공할 수 있다. 다양한 다른 성능 또는 디버그 정보가 또한 표시될 수 있다. 일부 실시예들에서, 다양한 추적 슬롯 정보가 유지 필드가 설정된 슬롯들에 대해 유지되고, 그들의 맵핑된 하드웨어 리소스들은 또한 해제되지 않는다(잠재적으로, 로직 슬롯 레벨, 분산형 슬롯 레벨, 또는 둘 모두에서 상태 레지스터들에 대한 액세스를 허용함).
구성 필드는, 일부 실시예들에서, 슬롯(예컨대, 계산, 픽셀, 또는 정점)을 제어하는 일차 제어 회로부의 유형, 슬롯의 우선순위, 슬롯 유지 표시, 킥 인터럽트 표시의 힘 종료, 또는 이들의 임의의 조합을 표시한다. 이러한 구성 필드는, 예를 들어, 슬롯의 구성을 표시하도록 그리고 소정 소프트웨어 오버라이드 정보를 제공하도록 소프트웨어에 의해 프로그래밍가능할 수 있다. 커널 종료 인터럽트는 글로벌로 설정될 수 있거나, 또는 킥마다 트리거하도록 (또는 임계 수의 킥들 후에 트리거하도록) 설정될 수 있다. 이것은, 필요할 때 인터럽트 기능을 여전히 유지하면서 (소정 상황들에서 인터럽트들을 생략함으로써) 인터럽트들을 핸들링하는 데 소요되는 펌웨어 시간을 유리하게 감소시킬 수 있다.
다양한 실시예들에서, 개시된 추적 회로부는 소프트웨어가 다수의 킥들을 (예컨대, 이러한 킥들의 실행을 시작, 중지, 질의하고, 수정하는 능력으로) 병렬로 핸들링할 수 있게 할 수 있다.
도 20은 일부 실시예들에 따른, 예시적인 레지스터 프리페치 버퍼 조직화를 예시하는 도면이다. 예시된 실시예에서, 레지스터들은 유형별로(예컨대, 이러한 예에서, 버퍼의 시작부에서의 모든 셋업 레지스터들 및 버퍼의 단부에서의 실행 레지스터들 모두로) 조직화된다. 일반적으로 말하면, 셋업 레지스터들은 킥이 시작되기 전에 킥을 구성하기 위해 사용되고, 실행 레지스터들은 킥의 분산된 실행을 위해 사용된다. 예시된 실시예에서, 버퍼는 레지스터가 위치되는 구성 레지스터 공간 내의 오프셋 및 그의 페이로드를 표시한다.
프리페칭된 레지스터 데이터의 이러한 조직화는 유리하게는, 주어진 유형의 레지스터들의 블록의 시작부 또는 단부에 새로운 레지스터들을 저장하는 것을 여전히 허용하면서, 예컨대 킥간 버퍼 재사용을 위해, 이전 레지스터들의 중첩기록(overwrite)들을 허용할 수 있다. 다양한 실시예들에서, 2개 이상의 상이한 유형들의 레지스터들은 그러한 기법들을 용이하게 하기 위해 유형별로 함께 그룹화될 수 있다. 일부 실시예들에서, 레지스터 프리페치 버퍼는 SRAM이다. 다른 실시예들에서, 레지스터 프리페치 버퍼는 캐시이고, (예컨대, 적어도 최근에 사용된 알고리즘 또는 다른 적절한 축출 알고리즘에 따라) 추가적인 공간이 필요할 때 엔트리들을 축출할 수 있다.
도 21은 일부 실시예들에 따른, 예시적인 킥슬롯 관리자 상태들을 예시하는 상태 머신 도면이다. 비어 있음 상태(2110)로부터, 제어 회로부는 킥을 위한 슬롯을 할당하기 위해 슬롯을 유효하게 만들도록 구성된다. 슬롯에 대한 데이터가 프로그래밍되었을 때(예컨대, 도 19b를 참조하여 상기에서 논의된 종속성들 및 구성), 상태는 "프로그래밍이 완료됨" 상태(2112)로 전환된다. 레지스터 카피 엔진(1910)이 인출 요청을 수락한 후에, 상태는 "레지스터 페치가 시작됨"(2114)으로 전환한다(이것은, 예시된 실시예에서, 추적 슬롯에 리소스들을 할당하기 전에, 프리페칭이라는 것에 유의한다). 레지스터 카피 엔진(1910)이 페칭이 완료되었음을 표시한 후에, 상태는 "페어런트들을 기다림" 상태(2116)로 전환된다. 일단 모든 종속성들이 추적 슬롯에 대해 만족된다면, 상태는 "리소스들을 기다림" 상태(2118)로 전환된다.
도시된 바와 같이, 상태들(2110 내지 2118) 중 임의의 것에서 중단이 요청되는 경우, 상태는 "KSM으로부터 디큐잉됨"(2126)으로 전환된다. 일단 슬롯이 재설정되면, 상태는 비어 있음 상태(2110)로 다시 전환된다. 상태(2116)는, 예컨대 리소스들이 아직 슬롯에 할당되지 않았기 때문에, 하기에서 상세히 논의되는 다른 중단 상태들보다 할당해제 동작을 실질적으로 덜 요구할 수 있다는 것에 유의한다.
일단 리소스들이 할당되면, 상태는 "dSlot을 기다림 상태"(2120)로 전환하고, KSM은 (예컨대, 일차 제어 회로부로부터) 2124에서 제어 응답을 기다린다. 일단 dSlot(들)이 할당되면, 상태는 구동 상태(2122)로 전환된다. 이러한 상태들에서 중단이 요청되는 경우(2128에 도시됨), KSM은 2130에서 제어 응답을 기다린다. 킥이 중단 요청 이후에 또는 구동 상태(2122)로부터 완료되는 경우, 슬롯은 2132에서 할당해제되고, 킥은 2138에서 완료된다.
상태들(2120 또는 2122)에서 중단이 요청되고 제어 응답(2130)이 로직 슬롯이 저장됨을 표시하는 경우, 상태는 할당해제 상태(2134)로 전환되고, 슬롯을 재설정하기 전에 2140에서 콘텍스트가 저장되기를 기다린다. 2130에서 제어 응답이 디큐잉을 표시하는 경우, 상태는 할당해제(2136)로, 그리고 이어서, 슬롯을 재설정하기 전에 "일차 제어 회로부로부터 디큐잉됨"(2142)으로 전환된다(이것은 상태들(2134, 2140)에 대해, 로직 슬롯의 콘텍스트 저장을 요구하지 않는 더 적절한 디큐잉일 수 있음). 일반적으로 말하면, 개시된 기법들은 유리하게는, 일차 제어 회로부가 다수의 레벨들에서 작업의 스케줄링을 일시정지할 수 있게 할 수 있고, 펌웨어가 안전한 방식으로 하드웨어와 상호작용할 수 있게 할 수 있다.
일단 슬롯이 상태들(2138, 2140, 또는 2142)로부터 재설정되면, 킥슬롯 관리자는 유지 필드가 설정되는지의 여부를 결정하고, 그렇지 않은 경우, 비어 있음 상태(2110)로 다시 전환된다. 유지 필드가 설정되는 경우, KSM은 (예컨대, 소프트웨어 제어에 기초하여) 2148에서 임의의 할당된 로직 슬롯들이 할당되기를 기다린다. 일반적으로 말하면, 추적 슬롯들은 명시적으로 유지되지 않는 한 자동으로 리사이클링될 수 있다.
상기에서 논의된 바와 같이, 종속성 추적 및 상태 회로부(1920)는 각각의 슬롯에 대한 현재 상태를 소프트웨어에 제공할 수 있다.
일부 실시예들에서, 킥슬롯 관리자(350)는, 예컨대 지원되는 추적 슬롯의 수의 변동을 허용함으로써, 다수의 GPU 크기들에 걸쳐 확장가능하다. (펌웨어 또는 소프트웨어에 의한) 추적 슬롯들, 이어서 (일차 제어 회로부에 의한) 로직 슬롯들, 이어서 분산형 슬롯들의 개시된 동적 계층구조 스케줄링은 유리하게는, 계층구조 레벨들에 걸쳐서 분산된 스케줄링 지능으로 효율적인 분배를 제공할 수 있다.
일부 실시예들에서, 킥슬롯 관리자(350)는 추적 슬롯들에 기초하여 하나 이상의 전력 제어 동작들을 수행하도록 구성된다. 예를 들어, 제어 회로부는 (예컨대, 클록 게이팅, 전력 게이팅 등에 의해) 하나 이상의 회로들의 전력 상태를 감소시킬 수 있다. 다수의 추적 슬롯들을 갖는 일부 실시예들에서, 제어 회로부는 다른 회로부가 추적 슬롯에서 큐잉된 작업을 가질 때에도 다른 회로부의 전력 상태를 감소시킬 수 있다. 예를 들어, 제어 회로부는 그것이 추적 슬롯에서 킥을 가질 때에도 픽셀 데이터 마스터의 전력 상태를 감소시킬 수 있다.
일부 실시예들에서, 스케줄링된 추적 슬롯에 대한 제1 액션은, 그것이 원하는 것보다 더 낮은 전력 상태에 있는 경우, 임의의 연관된 회로부의 전력 상태의 증가이다. 예를 들어, 제어 회로부는 픽셀 데이터 마스터에 대한 전력-온 레지스터를 기록함으로써 픽셀 킥들을 시작할 수 있다. 일반적으로 말하면, 디바이스는 다양한 유형들의 로직(예컨대, 캐시들, 필터링 로직, 광선 추적 회로부 등)을 전력 게이팅할 수 있으며, 추적 슬롯이 그 로직을 사용할 때 그러한 로직 블록들에 전력을 공급할 수 있다. 일부 실시예들에서, 킥슬롯 관리자(350)는 추적 슬롯에 할당된 킥이 하나 이상의 유형들의 회로부를 사용하는지의 여부를 표시하는 각각의 추적 슬롯에 대한 하나 이상의 플래그들을 유지한다. 킥슬롯 관리자(350)는 그러한 유형들의 회로부가 그러한 추적 슬롯들의 스케줄링에 응답하여 요구되는 전력 상태를 충족하게 할 수 있다.
예시적인 방법들
도 22는 일부 실시예들에 따른, 로직 슬롯들을 사용하여 그래픽스 작업을 분배하기 위한 예시적인 방법을 예시하는 흐름도이다. 도 22에 도시된 방법은 다른 것들 중에서도, 본 명세서에 개시된 컴퓨터 회로부, 시스템들, 디바이스들, 요소들, 또는 컴포넌트들 중 임의의 것과 함께 사용될 수 있다. 다양한 실시예들에서, 도시된 방법 요소들 중 일부는 동시에, 도시된 것과 상이한 순서로 수행될 수 있거나, 또는 생략될 수 있다. 부가적인 방법 요소들이 또한 원하는 대로 수행될 수 있다.
2210에서, 예시된 실시예에서, 제어 회로부는 그래픽스 작업의 제1 및 제2 세트들을 제1 및 제2 로직 슬롯들에 할당한다. 일부 실시예들에서, 회로부는 복수의 로직 슬롯들을 구현하고, 그래픽스 프로세서 서브유닛들의 세트가 각각 다수의 분산형 하드웨어 슬롯들을 구현한다. 일부 실시예들에서, 그래픽스 프로세서 서브유닛들은 다수의 서브유닛들의 다수의 그룹들로 조직화되고, 여기서 동일한 그룹 내의 서브유닛들이 캐시를 공유한다. 일부 실시예들에서, 주어진 그룹의 서브유닛들은 동일한 물리적 다이 상에 구현된다. 일부 실시예들에서, 서브 유닛들은 각자의 프래그먼트 생성기 회로부, 셰이더 코어 회로부, 데이터 캐시 및 메모리 관리 유닛을 포함하는 메모리 시스템 회로부, 기하구조 프로세싱 회로부, 및 분산형 작업부하 분배 회로부를 포함한다. 일부 실시예들에서, 분산형 하드웨어 슬롯들은 각자의, 구성 레지스터들, 배치 큐 회로부, 및 배치 반복 회로부를 포함한다. 다양한 실시예들에서, 서브유닛의 셰이더 회로부는 그의 복수의 분산형 하드웨어 슬롯들로부터의 작업을 수용 및 수행하도록 구성된다.
"그래픽스 프로세서 서브유닛들의 세트가 각각 다수의 분산형 하드웨어 슬롯들을 구현한다"고 인용하는 것은, 그래픽스 프로세서 서브유닛들의 세트가 적어도 2개의 서브유닛들을 포함함을 의미하며, 이들 각각은 다수의 분산형 하드웨어 슬롯들을 구현한다는 것을 의미한다. 일부 실시예들에서, 디바이스는 다수의 분산형 하드웨어 슬롯들을 반드시 구현하지는 않는 추가적인 그래픽스 프로세서 서브유닛들(이들은 세트 내에 있지 않음)을 가질 수 있다. 따라서, 어구 "그래픽스 프로세서 서브유닛들의 세트가 각각 다수의 분산형 하드웨어 슬롯들을 구현한다"는, 모든 경우들에서, 디바이스 내의 모든 서브유닛들이 다수의 분산형 하드웨어 슬롯들을 구현함을 의미하는 것으로 해석되지 않아야 한다 - 그것은 단순히, 이것이 일부 사례들에서는 그 경우이고 다른 사례들에서는 그 경우가 아닐 수 있을 가능성을 제공한다. 용어 "각각"을 사용하는 본 명세서의 다른 인용들을 위해 유사한 해석이 의도된다.
2220에서, 예시된 실시예에서, 제어 회로부는, 세트 내의 그래픽스 프로세서 서브유닛들 전체에 분배할 것을 표시하는 그래픽스 작업의 제1 세트에 대한 분배 규칙을 결정한다.
2230에서, 예시된 실시예에서, 제어 회로부는, 세트 내의 그래픽스 프로세서 서브유닛들의 전체보다 더 적은 것들에 분배할 것을 표시하는 그래픽스 작업의 제2 세트에 대한 분배 규칙을 결정한다. 일부 실시예들에서, 그래픽스 작업의 제2 세트에 대한 결정된 분배 규칙은 그래픽스 작업의 제1 세트를 서브유닛들의 단일 그룹에 분배할 것을 표시한다. 대안적으로, 그래픽스 작업의 제2 세트에 대한 결정된 분배 규칙은 그래픽스 작업의 제2 세트를 단일 서브유닛에 분배할 것을 표시할 수 있다.
제어 회로부는 그래픽스 작업의 제1 및 제2 세트들에서의 작업의 양들에 기초하여 제1 및 제2 분배 규칙들을 선택할 수 있다. 제어 회로부는 그래픽스 프로그램에 의해 시그널링된 하나 이상의 소프트웨어 오버라이드들이 실행되는 것에 기초하여 제1 분배 규칙을 결정할 수 있다. 이들은 하기의 유형들의 예시적인 소프트웨어 오버라이드들의 임의의 적절한 조합을 포함할 수 있다: 어느 서브유닛들이 작업의 제1 세트에 이용가능한지를 표시하는 마스크 정보, 특정된 분배 규칙, 작업의 제1 세트가 배치되어야 하는 서브유닛들의 그룹을 표시하는 그룹 정보, 및 스케줄링 정책을 표시하는 정책 정보. 일부 실시예들에서, 제어 회로부는 복수의 로직 슬롯들 중의 슬롯들에 대한 각자의 홀드 값들을 결정하고, 여기서 홀드 값들은 로직 슬롯에 대한 커널들의 상태를 표시한다. 제어 회로부는 제1 우선순위 레벨을 갖는 로직 슬롯이, 각자의 홀드 값들 중 하나 이상의 홀드 값들에 기초하여, 제2의 더 낮은 우선순위 레벨을 갖는 로직 슬롯에 할당되는 하드웨어 슬롯을 갱생할 수 있게 할 수 있다.
그래픽스 작업의 제1 및 제2 세트들은 킥들일 수 있다. 그래픽스 작업의 제1 및 제2 세트들은 동일한 킥에서의 또는 상이한 킥들에서의 커널들을 계산할 수 있다. 따라서, 일부 실시예들에서, 그래픽스 작업의 제1 세트는 제1 로직 슬롯에 할당된 계산 킥의 제1 커널이고, 계산 킥은 적어도 하나의 다른 커널을 포함하고, 장치는 제1 커널을 위한 것보다 적어도 하나의 다른 커널을 위한 상이한 분배 규칙을 선택하도록 구성된다.
2240에서, 예시된 실시예에서, 제어 회로부는 제1 분배 규칙에 기초하여 제1 로직 슬롯과 하나 이상의 분산형 하드웨어 슬롯들의 제1 세트 사이의 맵핑을 결정한다.
2250에서, 예시된 실시예에서, 제어 회로부는 제2 분배 규칙에 기초하여 제2 로직 슬롯과 하나 이상의 분산형 하드웨어 슬롯들의 제2 세트 사이의 맵핑을 결정한다.
2260에서, 예시된 실시예에서, 제어 회로부는 결정된 맵핑들에 따라 그래픽스 작업의 제1 및 제2 세트들을 그래픽스 프로세서 서브유닛들 중 하나 이상에 분배한다.
일부 실시예들에서, 로직 슬롯에 대한 제어 회로부는 하기를 포함한다: 제1 및 제2 분배 규칙들을 결정하도록 구성된 제어 스트림 프로세서(예컨대, CSP(630)), 계산 작업그룹들의 배치들을 생성하도록 구성된 커널 프로세서(예컨대, 회로부(640)), 계산 작업그룹들의 배치들을 서브유닛들에 할당하도록 구성된 서브유닛 할당 회로부(예컨대, 회로부(650)). 일부 실시예들에서, 제어 회로부는 표시된 분배 규칙에 기초하여 스트림 프로세스들을 제어하기 위해 하드웨어 슬롯들을 할당하도록 구성된 하드웨어 슬롯 리소스 할당기 회로부(예컨대, 회로부(620)) 및 할당된 서브유닛들로의 분배를 위해 상이한 로직 슬롯들로부터의 배치들 사이에서 중재하도록 구성된 로직 슬롯 중재기 회로부(예컨대, 회로부(660))를 포함한다. 일부 실시예들에서, 하드웨어 슬롯 리소스 할당기 회로부는 하드웨어 슬롯들의 상태들에 기초하여 하드웨어 슬롯을 할당하도록 구성된다. 상이한 하드웨어 슬롯들에 대한 상태들은, 예를 들어, 적어도 무효함, 구동 중, 비워짐, 및 플러싱을 포함할 수 있다.
일부 실시예들에서, 디바이스는 다수의 유형들의 캐시 플러시 무효화 동작들을 실행하도록 구성되는데, 이들은 커널이 할당되었던 하나 이상의 서브유닛들에 대한 캐시들만을 플러싱 및 무효화하는 제1 유형의 캐시 플러시 무효화 동작, 및 하나 이상의 캐시 레벨들에서 그래픽스 프로세서 서브유닛들의 세트에 대한 모든 캐시들을 플러싱 및 무효화하는 무조건부 유형의 캐시 플러시 무효화 동작을 포함할 수 있다.
도 23은 일부 실시예들에 따른, 로직 슬롯들을 우선순위화하기 위한 예시적인 방법을 예시하는 흐름도이다. 도 23에 도시된 방법은 다른 것들 중에서도, 본 명세서에 개시된 컴퓨터 회로부, 시스템들, 디바이스들, 요소들, 또는 컴포넌트들 중 임의의 것과 함께 사용될 수 있다. 다양한 실시예들에서, 도시된 방법 요소들 중 일부는 동시에, 도시된 것과 상이한 순서로 수행될 수 있거나, 또는 생략될 수 있다. 부가적인 방법 요소들이 또한 원하는 대로 수행될 수 있다.
2310에서, 예시된 실시예에서, 제어 회로부는 소프트웨어 특정된 그래픽스 작업의 제1 세트, 및 그래픽스 작업의 제1 세트에 대한 소프트웨어 표시된 우선순위 정보를 수신한다.
2320에서, 예시된 실시예에서, 제어 회로부는 그래픽스 작업의 제1 세트를 디바이스에 의해 구현되는 복수의 로직 슬롯들 중의 제1 로직 슬롯에 할당한다.
2330에서, 예시된 실시예에서, 제어 회로부는 디바이스의 그래픽스 서브유닛들에 의해 구현된 로직 슬롯들과 분산형 하드웨어 슬롯들 사이의 맵핑들을 결정하고, 여기서 맵핑들은 우선순위가 임계 우선순위 레벨을 초과하는 로직 슬롯들에 대한 각각의 서브유닛에서 임계 수의 하드웨어 슬롯들을 예약한다. 일부 실시예들에서, 로직 슬롯들의 제1 서브세트는 높은 우선순위 슬롯들이고, 나머지 로직 슬롯들은 낮은 우선순위 슬롯들이다. 이러한 실시예들에서, 제어 회로부는 소프트웨어 표시된 우선순위 정보에 기초하여 그래픽스 작업의 제1 세트를 제1 로직 슬롯에 할당할 수 있다. 다른 실시예들에서, 우선순위는 다양한 다른 기법들을 사용하여 인코딩 및 추적될 수 있다.
2340에서, 예시된 실시예에서, 제어 회로부는 결정된 맵핑들에 따라 그래픽스 작업의 제1 세트를 그래픽스 프로세서 서브유닛들 중 하나 이상에 분배한다.
일부 실시예들에서, 제어 회로부(예컨대, 분산형 슬롯 리소스 할당기 회로부)는 제1 소프트웨어 표시된 우선순위 레벨을 갖는 로직 슬롯이 제2의 더 낮은 우선순위 레벨을 갖는 로직 슬롯에 할당되었던 하드웨어 슬롯을 갱생할 수 있게 하는 갱생 절차를 수행하도록 구성된다.
일부 실시예들에서, 그래픽스 작업의 제1 세트에 대한 소프트웨어 입력(예컨대, 슬롯 유지 커맨드)에 기초하여, 제어 회로부는 그래픽스 작업의 제1 세트에 대한 프로세싱의 완료 후에 제1 로직 슬롯에 대한 분산형 하드웨어 슬롯들의 맵핑을 유지하도록 구성된다. 일부 실시예들에서, 제어 회로부는, 맵핑된 분산형 슬롯들을 해제할 것을 표시하는 소프트웨어 입력 후에만, 그래픽스 작업의 제1 세트에 대한 맵핑된 분산형 하드웨어 슬롯들을 다른 로직 슬롯에 할당한다.
일부 실시예들에서, 제어 회로부는 그래픽스 작업의 제1 세트에 대한 상태 정보를 소프트웨어에 제공한다. 제어 회로부는 하기를 제한 없이 포함하는 다양한 스테이터스 상태들을 지원할 수 있다: 종속성들을 기다림, 그래픽스 작업의 제1 세트에 대한 구성 데이터를 기다림, 분산형 슬롯들의 할당을 기다림, 하드웨어 리소스들을 기다림, 비어 있음, 프로그래밍이 완료됨, 로직 슬롯을 기다림, 할당해제함, 및 콘텍스트가 저장됨. 상태 정보는, 예를 들어, 제1 로직 슬롯을 식별할 수 있거나, 할당된 분산형 하드웨어 슬롯들을 식별할 수 있거나, 또는 그래픽스 작업의 제1 세트의 실행과 연관된 타임스탬프 정보를 표시할 수 있다.
제어 회로부는, 하기를 제한 없이 포함하는, 우선순위 정보에 더하여 또는 그 대신에 다양한 소프트웨어 제어 또는 오버라이드 기능을 지원할 수 있다: 세트 내의 그래픽스 프로세서 서브유닛들의 부분에만 분배할지 아니면 세트 내의 그래픽스 프로세서 서브유닛들 전체에 분배할지를 표시하는 특정된 분배 규칙, 그래픽스 작업의 제1 세트가 배치되어야 하는 서브유닛들의 그룹을 표시하는 그룹 정보, 어느 서브유닛들이 그래픽스 작업의 제1 세트에 이용가능한지를 표시하는 마스크 정보, 및 스케줄링 정책을 표시하는 정책 정보.
일부 실시예들에서, 디바이스는 맵핑들에 대한 분배 규칙들을 결정하도록 구성된 제어 스트림 프로세서 회로부, 및 소프트웨어 입력, 제어 스트림 프로세서 회로부로부터의 결정된 분배 규칙들, 분산형 슬롯 상태 정보에 기초하여 맵핑들을 결정하도록 구성된 분산형 슬롯 리소스 할당기 회로부를 포함한다.
도 24는 일부 실시예들에 따른, 친화도 기반 스케줄링을 위한 예시적인 방법을 예시하는 흐름도이다. 도 24에 도시된 방법은 다른 것들 중에서도, 본 명세서에 개시된 컴퓨터 회로부, 시스템들, 디바이스들, 요소들, 또는 컴포넌트들 중 임의의 것과 함께 사용될 수 있다. 다양한 실시예들에서, 도시된 방법 요소들 중 일부는 동시에, 도시된 것과 상이한 순서로 수행될 수 있거나, 또는 생략될 수 있다. 부가적인 방법 요소들이 또한 원하는 대로 수행될 수 있다.
2410에서, 예시된 실시예에서, 제어 회로부(예컨대, 커널 워커 회로부)는 그래픽스 작업의 소프트웨어 특정된 세트(예컨대, 계산 커널), 및 그래픽스 프로세서 서브유닛들의 그룹들에 대한 그래픽스 작업의 세트의 부분들의 소프트웨어 표시된 맵핑을 수신한다. 서브유닛들의 제1 그룹은 제1 캐시를 공유할 수 있고, 서브유닛들의 제2 그룹은 제2 캐시를 공유할 수 있다. 맵핑은 그래픽스 서브유닛들의 특정 그룹들을 식별할 수 있거나 또는 식별하지 않을 수 있다는 것에 유의한다. 오히려, 맵핑은, 계산 커널의 다수의 부분들이 그래픽스 프로세서 서브유닛들의 동일한 그룹에 할당되어야 하지만, 하드웨어가 실제로 그래픽스 프로세서 서브유닛들의 어느 그룹을 할당할 수 있게 할 수 있다고 특정할 수 있다.
2420에서, 예시된 실시예에서, 제어 회로부는, 맵핑에 기초하여, 그래픽스 작업의 세트의 제1 서브세트를 그래픽스 서브유닛들의 제1 그룹에, 그리고 그래픽스 작업의 세트의 제2 서브세트를 그래픽스 서브유닛들의 제2 그룹에 할당한다.
제어 회로부는, 구성 레지스터들에, 그래픽스 프로세서 서브유닛들의 그룹들에 대한 그래픽스 작업의 세트들의 부분들의 다수의 맵핑들을 저장하도록 구성될 수 있다.
커널 워커 회로부는 계산 커널의 부분들을 결정하도록 구성된 일차 커널 워커 회로부(예컨대, 도 16의 요소(1610)), 작업그룹들의 배치들을 결정하기 위해 그래픽스 서브유닛들의 제1 그룹에 할당된 계산 커널의 부분들을 반복하도록 구성된 제1 그룹 워커 회로부(예컨대, 도 16의 요소(1620)), 및 작업그룹들의 배치들을 결정하기 위해 그래픽스 서브유닛들의 제2 그룹에 할당된 계산 커널의 부분들을 반복하도록 구성된 제2 그룹 워커 회로부를 포함할 수 있다. 커널 워커 회로부는 제1 및 제2 그룹 워커 회로부에 의해 결정된 작업그룹들의 배치들 사이로부터 선택하도록 구성된 그룹 워커 중재 회로부(예컨대, 도 16의 요소(1630)), 및 그룹 워커 중재 회로부에 의해 선택된 배치들을 선택된 그룹 워커 회로부에 대응하는 서브유닛들의 그룹 내의 하나 이상의 그래픽스 서브유닛들에 할당하도록 구성된 서브유닛 할당 회로부(예컨대, mGPU 할당 회로부(650))를 추가로 포함할 수 있다.
일부 실시예들에서, 디바이스는 계산 커널에 대한 그들의 할당된 부분들 전부를 디스패치했던 서브유닛들의 하나 이상의 다른 그룹들의 세트를 결정하도록, 그리고 맵핑에 의해 서브유닛들의 제1 그룹을 타깃화하는 것으로서 표시되었던 계산 커널의 적어도 제1 부분을 서브유닛들의 하나 이상의 다른 그룹들 중의 그룹에 할당하도록 구성된 작업 공유 제어 회로부를 포함한다.
일부 실시예들에서, 제어 회로부는 하나 이상의 동작 모드들에서 친화도 기반 작업 분배를 디스에이블한다. 제어 회로부는 단일 차원 커널들, 2차원 커널들, 및 3차원 커널들을 포함하는 다중 차원수들의 계산 커널들에 대한 그래픽스 프로세서 서브유닛 친화도 맵들의 그룹들에 대한 계산 커널들의 부분들의 맵핑들을 지원할 수 있다.
일부 실시예들에서, 비일시적 컴퓨터 판독가능 매체는 컴퓨팅 디바이스에 의해 하기를 포함하는 동작들을 수행하도록 실행가능한 명령들이 저장되어 있다: 계산 커널, 및 그래픽스 프로세서 서브유닛들의 그룹들에 대한 계산 커널의 부분들의 대응하는 맵핑을 수신하는 동작 - 계산 커널 및 맵핑은 명령들에 의해 특정되고, 맵핑은 그래픽스 프로세서 서브유닛들의 주어진 그룹에 맵핑된 계산 커널의 부분들의 세트에 대한 캐시 친화도를 표시함 -; 및 맵핑에 기초하여, 계산 커널의 제1 서브세트를 그래픽스 서브유닛들의 제1 그룹에 그리고 계산 커널의 제2 서브세트를 그래픽스 서브유닛들의 제2 그룹에 할당하는 동작.
도 25는 일부 실시예들에 따른, 킥슬롯 관리자 동작을 위한 예시적인 방법을 예시하는 흐름도이다. 도 25에 도시된 방법은 다른 것들 중에서도, 본 명세서에 개시된 컴퓨터 회로부, 시스템들, 디바이스들, 요소들, 또는 컴포넌트들 중 임의의 것과 함께 사용될 수 있다. 다양한 실시예들에서, 도시된 방법 요소들 중 일부는 동시에, 도시된 것과 상이한 순서로 수행될 수 있거나, 또는 생략될 수 있다. 부가적인 방법 요소들이 또한 원하는 대로 수행될 수 있다.
2510에서, 예시된 실시예에서, 제어 회로부(예컨대, 슬롯 관리자 회로부)는, 추적 슬롯 회로부의 엔트리를 사용하여, 그래픽스 작업의 세트에 대한 소프트웨어 특정된 정보를 저장하고, 여기서 정보는, 작업의 유형, 그래픽스 작업의 다른 세트들에 대한 종속성들, 및 그래픽스 작업의 세트에 대한 데이터의 위치를 포함한다.
일부 실시예들에서, 추적 슬롯 회로부는 그래픽스 작업의 세트와 연관된 다양한 정보를 질의하기 위해 소프트웨어 액세스가능하다. 이것은, 예를 들어, 그래픽스 작업의 세트에 대한 상태, 그래픽스 작업의 세트의 실행과 연관된 타임스탬프 정보, 로직 일차 슬롯을 표시하는 정보, 및 하나 이상의 분산형 하드웨어 슬롯들을 표시하는 정보를 포함할 수 있다. 일부 실시예들에서, 추적 슬롯 회로부는, 적어도 그래픽스 작업의 세트에 대한 하기의 스테이터스 상태들을 표시하는 상태 값들을 지원한다: 비어 있음, 레지스터 페칭이 개시됨, 그래픽스 작업의 하나 이상의 다른 세트들을 기다림, 로직 슬롯 리소스들을 기다림, 분산형 하드웨어 슬롯 리소스들을 기다림, 및 실행 중.
2520에서, 예시된 실시예에서, 제어 회로부는, 위치로부터 그리고 그래픽스 작업의 세트에 대한 셰이더 코어 리소스들을 할당하기 전에, 그래픽스 작업의 세트에 대한 구성 레지스터 데이터를 프리페칭한다. 프리페치들은 그래픽스 작업의 세트에 대한 추적 슬롯의 구성 후에, 그러나 제어 회로부가 그래픽스 작업의 세트를 시작할 것을 결정하기 전에(예컨대, 모든 그의 종속성들이 만족되기 전에) 발생할 수 있다는 것에 유의한다. 제어 회로부는 프리페칭을 언제 시작할지를 결정하기 위한 다양한 기준들을 활용할 수 있다. 프리페칭은 공유 메모리(이는 제어 회로부의 다수의 인스턴스들 사이에서 공유될 수 있거나, 비-GPU 프로세서들과 공유될 수 있거나, 또는 둘 모두일 수 있음)로부터 슬롯 관리자 회로부의 SRAM 메모리 요소로 수행될 수 있다.
일부 실시예들에서, 제어 회로부는, 구성 레지스터들을 프로그래밍하는 것의 완료 전에, 그래픽스 작업의 세트의 부분들을 그래픽스 작업의 세트에 할당된 하드웨어 슬롯들로 전송한다. 하드웨어 슬롯들은 그래픽스 작업의 세트의 수신된 부분들을 위한 큐 회로부를 포함할 수 있다.
2530에서, 예시된 실시예에서, 제어 회로부는 프리페칭된 데이터를 사용하여 그래픽스 작업의 세트에 대한 구성 레지스터들을 프로그래밍한다. 구성 레지스터는 그래픽스 작업의 세트의 특성들, 그래픽스 작업의 세트에 대한 데이터의 위치, 그래픽스 작업의 세트를 프로세싱하기 위한 파라미터들 등을 특정할 수 있다. 구성 레지스터는 그래픽스 작업의 세트에 의해 프로세싱될 데이터를 저장하는 데이터 레지스터들과 별개일 수 있다.
2540에서, 예시된 실시예에서, 제어 회로부는 종속성들에 따라 그래픽스 프로세서 회로부에 의해 그래픽스 작업의 세트의 프로세싱을 개시한다. 제어 회로부는 그래픽스 작업의 세트를 로직 일차 슬롯에 할당할 수 있고(그리고 구성 레지스터 데이터의 적어도 일부분은 로직 일차 슬롯의 구성 레지스터들에 대한 것일 수 있음), 로직 슬롯을 하나 이상의 분산형 하드웨어 슬롯들에 할당할 수 있다(그리고 구성 레지스터 데이터의 적어도 일부분은 하나 이상의 분산형 하드웨어 슬롯들의 구성 레지스터들에 대한 것일 수 있음).
일부 실시예들에서, 제어 회로부는, 추적 슬롯 회로부의 엔트리로부터 그래픽스 작업의 세트를 개시하는 것과 함께 그리고 그래픽스 작업의 세트에 관한 정보에 기초하여, 그래픽스 작업의 세트와 연관된 하나 이상의 회로들에 대해 더 낮은 전력 모드로부터 더 높은 전력 모드로의 증가를 개시하도록 구성된다.
일부 실시예들에서, 그래픽스 명령들은 그래픽스 작업의 세트에 대한 정보(예컨대, 작업의 유형, 그래픽스 작업의 다른 세트들에 대한 종속성들, 및 그래픽스 작업의 세트에 대한 데이터의 위치)를 저장할 것을 특정할 수 있고, 그래픽스 작업의 세트에 대한 상태 정보(예컨대, 비어 있음, 레지스터 페칭이 개시됨, 그래픽스 작업의 하나 이상의 다른 세트들을 기다림, 로직 슬롯 리소스들을 기다림, 분산형 하드웨어 슬롯 리소스들을 기다림, 및 구동 중으로부터의 상태), 그래픽스 작업의 세트의 실행과 연관된 타임스탬프 정보, 할당된 로직 일차 슬롯을 표시하는 정보, 및 할당된 분산형 하드웨어 슬롯들을 표시하는 정보를 결정하도록 추적 슬롯 회로부에 질의한다.
일부 실시예들에서, 그래픽스 작업의 세트에 대한 중단 커맨드에 응답하여, 제어 회로부는 추적 슬롯의 현재 상태에 따라 상이한 동작들을 수행하도록 구성된다. 예를 들어, 제어 회로부는, 로직 일차 슬롯이 할당되지 않았다고 결정하는 것에 응답하여, 추적 슬롯 회로부의 엔트리를 재설정할 수 있다. 다른 예로서, 제어 회로부는, 로직 일차 슬롯이 할당되었다고 결정하는 것에 응답하여, 로직 일차 슬롯을 할당해제할 수 있고, 추적 슬롯 회로부의 엔트리를 재설정할 수 있다. 또 다른 예로서, 제어 회로부는, 하나 이상의 분산형 하드웨어 슬롯들이 할당되었다고 결정하는 것에 응답하여, 하나 이상의 콘텍스트 스위치 동작들을 수행할 수 있고, 하나 이상의 분산형 하드웨어 슬롯들을 할당해제할 수 있고, 로직 일차 슬롯을 할당해제할 수 있고, 추적 슬롯 회로부의 엔트리를 재설정할 수 있다.
예시적인 디바이스
이제, 도 26을 참조하면, 디바이스(2600)의 예시적인 실시예를 예시하는 블록도가 도시되어 있다. 일부 실시예들에서, 디바이스(2600)의 요소들은 시스템 온 칩 내에 포함될 수 있다. 일부 실시예들에서, 디바이스(2600)는 배터리-전력이 공급될 수 있는 모바일 디바이스에 포함될 수 있다. 따라서, 디바이스(2600)에 의한 전력 소비는 중요한 설계 고려사항일 수 있다. 예시된 실시예에서, 디바이스(2600)는 패브릭(2610), 계산 복합체(compute complex)(2620), 입력/출력(I/O) 브리지(2650), 캐시/메모리 제어기(2645), 그래픽스 유닛(2675) 및 디스플레이 유닛(2665)을 포함한다. 일부 실시예들에서, 디바이스(2600)는 예시된 컴포넌트들, 예컨대 비디오 프로세서 인코더들 및 디코더들, 이미지 프로세싱 또는 인식 요소들, 컴퓨터 비전 요소들 등에 부가하여 또는 그들 대신에 다른 컴포넌트들(도시되지 않음)을 포함할 수 있다.
패브릭(2610)은 다양한 상호연결부들, 버스들, MUX들, 제어기들 등을 포함할 수 있고, 디바이스(2600)의 다양한 요소들 사이의 통신을 용이하게 하도록 구성될 수 있다. 일부 실시예들에서, 패브릭(2610)의 부분들은 다양한 상이한 통신 프로토콜들을 구현하도록 구성될 수 있다. 다른 실시예들에서, 패브릭(2610)은 단일 통신 프로토콜을 구현할 수 있고 패브릭(2610)에 커플링된 요소들은 단일 통신 프로토콜로부터 다른 통신 프로토콜들로 내부적으로 변환할 수 있다.
예시된 실시예에서, 계산 복합체(2620)는 버스 인터페이스 유닛(BIU)(2625), 캐시(2630), 및 코어들(2635, 2640)을 포함한다. 다양한 실시예들에서, 계산 복합체(2620)는 다양한 수들의 프로세서들, 프로세서 코어들 및 캐시들을 포함할 수 있다. 예를 들어, 계산 복합체(2620)는 1개, 2개, 또는 4개의 프로세서 코어들, 또는 임의의 다른 적합한 수를 포함할 수 있다. 일 실시예에서, 캐시(2630)는 세트 연관 L2 캐시이다. 일부 실시예들에서, 코어(2635, 2640)는 내부 명령 및 데이터 캐시들을 포함할 수 있다. 일부 실시예들에서, 패브릭(2610), 캐시(2630), 또는 디바이스(2600) 내의 다른 곳에서 코히어런시 유닛(coherency unit)(도시되지 않음)은 디바이스(2600)의 다양한 캐시들 사이의 코히어런시를 유지하도록 구성될 수 있다. BIU(2625)는 계산 복합체(2620)와 디바이스(2600)의 다른 요소들 사이의 통신을 관리하도록 구성될 수 있다. 코어들(2635 및 2640)과 같은 프로세서 코어들은 운영 체제 명령들 및 사용자 애플리케이션 명령들을 포함할 수 있는 특정 명령 세트 아키텍처(ISA)의 명령들을 실행하도록 구성될 수 있다.
캐시/메모리 제어기(2645)는 패브릭(2610)과 하나 이상의 캐시들 및 메모리들 사이에서의 데이터의 전달을 관리하도록 구성될 수 있다. 예를 들어, 캐시/메모리 제어기(2645)는 L3 캐시에 커플링될 수 있고, 이는 차례로 시스템 메모리에 커플링될 수 있다. 다른 실시예들에서, 캐시/메모리 제어기(2645)는 메모리에 직접 커플링될 수 있다. 일부 실시예들에서, 캐시/메모리 제어기(2645)는 하나 이상의 내부 캐시들을 포함할 수 있다.
본 명세서에 사용되는 바와 같이, 용어 "에 커플링된"은 요소들 사이의 하나 이상의 연결들을 표시할 수 있고, 커플링은 개재 요소들을 포함할 수 있다. 예를 들어, 도 26에서, 그래픽스 유닛(2675)은 패브릭(2610) 및 캐시/메모리 제어기(2645)를 통해 메모리에 "커플링된" 것으로 설명될 수 있다. 대조적으로, 도 26의 예시된 실시예에서, 그래픽스 유닛(2675)은 개재 요소들이 없기 때문에 패브릭(2610)에 "직접 커플링"된다.
그래픽스 유닛(2675)은 하나 이상의 프로세서들, 예를 들어 하나 이상의 그래픽스 프로세싱 유닛(GPU)들을 포함할 수 있다. 그래픽스 유닛(2675)은, 예를 들어 OPENGL®, Metal, 또는 DIRECT3D® 명령들과 같은 그래픽스 지향 명령들을 수신할 수 있다. 그래픽스 유닛(2675)은 특수 GPU 명령들을 실행하거나, 수신된 그래픽스 지향 명령들에 기초하여 다른 동작들을 수행할 수 있다. 그래픽스 유닛(2675)은 대체적으로, 데이터의 큰 블록들을 병렬로 프로세싱하도록 구성될 수 있고, 디바이스에 포함될 수 있거나 또는 별개의 디바이스일 수 있는 디스플레이로의 출력을 위해 프레임 버퍼 내에 이미지들을 구축할 수 있다. 그래픽스 유닛(2675)은 하나 이상의 그래픽스 프로세싱 파이프라인들에서 변환, 조명, 삼각형, 및 렌더링 엔진들을 포함할 수 있다. 그래픽스 유닛(2675)은 디스플레이 이미지들에 대한 픽셀 정보를 출력할 수 있다. 그래픽스 유닛(2675)은 다양한 실시예들에서, 픽셀 태스크들, 정점 태스크들, 및 계산 태스크들(이는, 그래픽스 관련일 수 있거나 그렇지 않을 수 있음)을 포함할 수 있는 그래픽스 프로그램들을 실행하도록 구성된 고도의 병렬 실행 코어들을 포함할 수 있는 프로그래밍가능 셰이더 회로부를 포함할 수 있다.
일부 실시예들에서, 그래픽스 유닛(2675)은 추적 슬롯들, 로직 슬롯들, 분산형 하드웨어 슬롯들 등을 구현하는 다양한 개시된 회로부를 포함한다.
디스플레이 유닛(2665)은 프레임 버퍼로부터 데이터를 판독하고 디스플레이를 위한 픽셀 값들의 스트림을 제공하도록 구성될 수 있다. 일부 실시예들에서, 디스플레이 유닛(2665)은 디스플레이 파이프라인으로서 구성될 수 있다. 부가적으로, 디스플레이 유닛(2665)은 출력 프레임을 생성하기 위해 다수의 프레임들을 혼합하도록 구성될 수 있다. 추가로, 디스플레이 유닛(2665)은 사용자 디스플레이(예를 들어, 터치스크린 또는 외부 디스플레이)에 커플링하기 위한 하나 이상의 인터페이스들(예를 들어, MIPI® 또는 임베디드 디스플레이 포트(eDP))을 포함할 수 있다.
I/O 브리지(2650)는, 예를 들어, 범용 직렬 버스(USB) 통신, 보안, 오디오, 및 저전력 상시-온 기능을 구현하도록 구성된 다양한 요소들을 포함할 수 있다. I/O 브리지(2650)는 또한, 예를 들어 펄스폭 변조(PWM), 범용 입력/출력(GPIO), 직렬 주변기기 인터페이스(SPI), 및 인터-집적 회로(I2C)와 같은 인터페이스들을 포함할 수 있다. 다양한 유형들의 주변기기들 및 디바이스들이 I/O 브리지(2650)를 통해 디바이스(2600)에 커플링될 수 있다.
일부 실시예들에서, 디바이스(2600)는 패브릭(2610) 또는 I/O 브리지(2650)에 연결될 수 있는 네트워크 인터페이스 회로부(명시적으로 도시되지 않음)를 포함한다. 네트워크 인터페이스 회로부는 유선, 무선, 또는 둘 모두일 수 있는 다양한 네트워크들을 통해 통신하도록 구성될 수 있다. 예를 들어, 네트워크 인터페이스 회로부는 유선 로컬 영역 네트워크, 무선 로컬 영역 네트워크(예를 들어, WiFi를 통함), 또는 광역 네트워크(예를 들어, 인터넷 또는 가상 개인 네트워크)를 통해 통신하도록 구성될 수 있다. 일부 실시예들에서, 네트워크 인터페이스 회로부는 하나 이상의 무선 액세스 기술들을 사용하는 하나 이상의 셀룰러 네트워크들을 통해 통신하도록 구성된다. 일부 실시예들에서, 네트워크 인터페이스 회로부는 디바이스-디바이스 통신(예를 들어, 블루투스 또는 WiFi 다이렉트) 등을 사용하여 통신하도록 구성된다. 다양한 실시예들에서, 네트워크 인터페이스 회로부는 다양한 유형들의 다른 디바이스들 및 네트워크들에 대한 연결을 디바이스(2600)에 제공할 수 있다.
예시적인 애플리케이션들
이제 도 27을 참조하면, 다양한 유형들의 시스템은 위에서 논의된 회로들, 디바이스들, 또는 시스템 중 임의의 것을 포함할 수 있다. 본 명세서에 설명된 기법들 중 하나 이상을 통합하거나 달리 이용할 수 있는 시스템 또는 디바이스(2700)는 광범위한 영역들에서 이용될 수 있다. 예를 들어, 시스템 또는 디바이스(2700)는 데스크톱 컴퓨터(2710), 랩톱 컴퓨터(2720), 태블릿 컴퓨터(2730), 셀룰러 또는 모바일 폰(2740), 또는 텔레비전(2750)(또는 텔레비전에 결합된 셋톱박스)과 같은 시스템들의 하드웨어의 일부로서 이용될 수 있다.
유사하게, 개시된 요소들은 스마트워치 또는 건강 모니터링 디바이스와 같은 웨어러블 디바이스(2760)에서 활용될 수 있다. 많은 실시예들에서, 스마트 워치들은 다양한 상이한 기능들 - 예를 들어, 이메일에 대한 액세스, 셀룰러 서비스, 캘린더, 건강 모니터링 등을 구현할 수 있다. 웨어러블 디바이스는 또한 단지 건강 모니터링 기능들, 예컨대, 사용자의 바이탈 사인을 모니터링하는 것, 접촉 추적과 같은 전염병성 기능들을 수행하는 것, 긴급 의료 서비스에 대한 통신을 제공하는 것 등을 수행하도록 설계될 수 있다. 목에 착용되는 디바이스들, 인체 내에 이식가능한 디바이스들, 증강 및/또는 가상 현실에 기초한 것들과 같이 컴퓨터 생성 현실 경험들을 제공하도록 설계된 안경 또는 헬멧 등을 포함하는 다른 유형들의 디바이스들이 또한 고려된다.
시스템 또는 디바이스(2700)는 또한, 다양한 다른 맥락들에서 사용될 수 있다. 예를 들어, 시스템 또는 디바이스(2700)는 전용 서버와 같은 서버 컴퓨터 시스템의 맥락에서 또는 클라우드 기반 서비스(2770)를 구현하는 공유 하드웨어 상에서 이용될 수 있다. 더 추가로, 시스템 또는 디바이스(2700)는 가정에서 일반적으로 발견되는 디바이스들(2780), 예컨대 냉장고들, 서모스탯들, 보안 카메라들 등을 포함하는 광범위한 전문화된 일상적인 디바이스들에서 구현될 수 있다. 그러한 디바이스들의 상호연결은 종종 "사물 인터넷(Internet of Things)"(IoT)으로 지칭된다. 요소들은 또한 다양한 운송 모드들에서 구현될 수 있다. 예를 들어, 시스템 또는 디바이스(2700)는 다양한 유형들의 차량들(2790)의 제어 시스템들, 안내 시스템들, 엔터테인먼트 시스템들 등에서 이용될 수 있다.
도 27에 예시된 애플리케이션들은 단지 예시적이며, 개시된 시스템들 또는 디바이스들의 잠재적인 미래의 애플리케이션들을 제한하도록 의도되지 않는다. 다른 예시적인 애플리케이션들은 제한 없이 휴대용 게이밍 디바이스들, 음악 플레이어들, 데이터 저장 디바이스들, 무인 항공기들 등을 포함한다.
예시적인 컴퓨터 판독가능 매체
본 개시내용은 위에서 다양한 예시적인 회로들을 상세하게 설명하였다. 본 개시내용은 그러한 회로부를 포함하는 실시예들뿐만 아니라, 그러한 회로부를 특정하는 설계 정보를 포함하는 컴퓨터 판독가능 저장 매체를 포괄하는 것으로 의도된다. 따라서, 본 개시내용은 개시된 회로부를 포함하는 장치뿐만 아니라 개시된 회로부를 포함하는 하드웨어(예를 들어, 집적 회로)를 생성하도록 구성된 제조 시스템에 의해 인식되는 포맷으로 회로부를 특정하는 저장 매체를 포괄하는 청구범위를 지원하도록 의도된다. 그러한 저장 매체에 대한 청구범위는, 예를 들어 회로 설계를 생성하지만 그 자체가 설계를 제조하지는 않는 엔티티를 포괄하도록 의도된다.
도 28은 일부 실시예들에 따른, 회로 설계 정보를 저장하는 예시적인 비일시적 컴퓨터 판독가능 저장 매체를 예시하는 블록도이다. 예시된 실시예에서, 반도체 제조 시스템(2820)은 비일시적 컴퓨터 판독가능 매체(2810) 상에 저장된 설계 정보(2815)를 프로세싱하고, 설계 정보(2815)에 기초하여 집적 회로(2830)를 제조하도록 구성된다.
비일시적 컴퓨터 판독가능 저장 매체(2810)는 다양한 적절한 유형들의 메모리 디바이스들 또는 저장 디바이스들 중 임의의 것을 포함할 수 있다. 비일시적 컴퓨터 판독가능 저장 매체(2810)는, 설치 매체, 예를 들어 CD-ROM, 플로피 디스크들, 또는 테이프 디바이스; 컴퓨터 시스템 메모리 또는 랜덤 액세스 메모리, 예컨대 DRAM, DDR RAM, SRAM, EDO RAM, 램버스(Rambus) RAM 등; 플래시, 자기 매체, 예를 들어, 하드 드라이브, 또는 광학 저장소와 같은 비휘발성 메모리; 레지스터들, 또는 다른 유사한 유형들의 메모리 요소들 등일 수 있다. 비일시적 컴퓨터 판독가능 저장 매체(2810)는 또한 다른 유형들의 비일시적 메모리 또는 이들의 조합들을 포함할 수 있다. 비일시적 컴퓨터 판독가능 저장 매체(2810)는 상이한 위치들, 예를 들어 네트워크를 통해 연결되는 상이한 컴퓨터 시스템들에 상주할 수 있는 2개 이상의 메모리 매체들을 포함할 수 있다.
설계 정보(2815)는, 제한 없이, VHDL, Verilog, SystemC, SystemVerilog, RHDL, M, MyHDL 등과 같은 하드웨어 설명 언어들을 포함하는 다양한 적절한 컴퓨터 언어들 중 임의의 것을 사용하여 특정될 수 있다. 설계 정보(2815)는 집적 회로(2830)의 적어도 일부를 제조하기 위해 반도체 제조 시스템(2820)에 의해 사용가능할 수 있다. 설계 정보(2815)의 포맷은 적어도 하나의 반도체 제조 시스템(2820)에 의해 인식될 수 있다. 일부 실시예들에서, 설계 정보(2815)는 또한, 집적 회로(2830)의 합성, 레이아웃, 또는 둘 모두를 특정하는 하나 이상의 셀 라이브러리들을 포함할 수 있다. 일부 실시예들에서, 설계 정보는 셀 라이브러리 요소들 및 그들의 접속을 특정하는 넷리스트(netlist)의 형태로 전체적으로 또는 부분적으로 특정된다. 단독으로 취해진 설계 정보(2815)는 대응하는 집적 회로의 제조를 위한 충분한 정보를 포함할 수 있거나 포함하지 않을 수 있다. 예를 들어, 설계 정보(2815)는 제조될 회로 요소들을 특정할 수 있지만 그들의 물리적 레이아웃이 아닐 수 있다. 이러한 경우, 설계 정보(2815)는 특정된 회로부를 실제로 제조하기 위해 레이아웃 정보와 조합될 필요가 있을 수 있다.
다양한 실시예들에서, 집적 회로(2830)는 메모리들, 아날로그 또는 혼합 신호 회로들 등과 같은 하나 이상의 맞춤형 매크로셀들을 포함할 수 있다. 그러한 경우들에서, 설계 정보(2815)는 포함된 매크로셀들에 관련된 정보를 포함할 수 있다. 그러한 정보는, 제한 없이, 개략적 캡처 데이터베이스, 마스크 설계 데이터, 거동 모델들, 및 디바이스 또는 트랜지스터 레벨 넷리스트들을 포함할 수 있다. 본 명세서에 사용되는 바와 같이, 마스크 설계 데이터는 그래픽스 데이터 시스템(GDSII), 또는 임의의 다른 적합한 포맷에 따라 포맷팅될 수 있다.
반도체 제조 시스템(2820)은 집적 회로들을 제조하도록 구성된 다양한 적절한 요소들 중 임의의 것을 포함할 수 있다. 이것은, 예를 들어, 반도체 재료들을 (예를 들어, 마스킹을 포함할 수 있는 웨이퍼 상에) 침착하는 것, 재료들을 제거하는 것, 침착된 재료들의 형상을 변경하는 것, 재료들을 (예를 들어, 재료들을 도핑하거나 또는 자외선 프로세싱을 사용하여 유전 상수들을 수정함으로써) 수정하는 것 등을 위한 요소들을 포함할 수 있다. 반도체 제조 시스템(2820)은 또한, 정확한 동작을 위해 제조된 회로들의 다양한 테스트를 수행하도록 구성될 수 있다.
다양한 실시예들에서, 집적 회로(2830)는 설계 정보(2815)에 의해 특정된 회로 설계에 따라 동작하도록 구성되며, 이는 본 명세서에 설명된 기능 중 임의의 것을 수행하는 것을 포함할 수 있다. 예를 들어, 집적 회로(2830)는 도 1b, 도 2, 도 3, 도 6, 도 14b, 도 16, 도 18, 도 19a 및 도 26에 도시된 다양한 요소들 중 임의의 것을 포함할 수 있다. 추가로, 집적 회로(2830)는 다른 컴포넌트들과 함께 본 명세서에 설명된 다양한 기능들을 수행하도록 구성될 수 있다. 추가로, 본 명세서에 설명된 기능은 다수의 연결된 집적 회로들에 의해 수행될 수 있다.
예시적인 실시예
하기의 번호가 매겨진 항목들은 본 명세서에 개시된 다양한 비제한적인 실시예들을 나타낸다:
세트 A
A1.
장치로서,
복수의 로직 슬롯들을 구현하는 회로부;
다수의 분산형 하드웨어 슬롯들을 각각 구현하는 그래픽스 프로세서 서브유닛들의 세트; 및
제어 회로부를 포함하고, 상기 제어 회로부는,
그래픽스 작업의 제1 및 제2 세트들을 제1 및 제2 로직 슬롯들에 할당하도록;
상기 세트 내의 상기 그래픽스 프로세서 서브유닛들 전체에 분배할 것을 표시하는 상기 그래픽스 작업의 제1 세트에 대한 제1 분배 규칙을 결정하도록;
상기 세트 내의 상기 그래픽스 프로세서 서브유닛들의 전체보다 더 적은 것들에 분배할 것을 표시하는 상기 그래픽스 작업의 제2 세트에 대한 제2 분배 규칙을 결정하도록;
상기 제1 분배 규칙에 기초하여 상기 제1 로직 슬롯과 하나 이상의 분산형 하드웨어 슬롯들의 제1 세트 사이의 맵핑을 결정하도록;
상기 제2 분배 규칙에 기초하여 상기 제2 로직 슬롯과 하나 이상의 분산형 하드웨어 슬롯들의 제2 세트 사이의 맵핑을 결정하도록; 그리고
상기 결정된 맵핑들에 따라 상기 그래픽스 작업의 제1 및 제2 세트들을 상기 그래픽스 프로세서 서브유닛들 중 하나 이상에 분배하도록 구성되는, 장치.
A2.
세트 A 내의 임의의 이전 조항에 있어서, 상기 그래픽스 프로세서 서브유닛들은 다수의 서브유닛들의 다수의 그룹들로 조직화되고, 동일한 그룹 내의 서브유닛들은 캐시를 공유하고;
상기 제2 분배 규칙은 상기 그래픽스 작업의 제2 세트를 서브유닛들의 단일 그룹에 분배할 것을 표시하는, 장치.
A3.
세트 A 내의 임의의 이전 조항에 있어서, 주어진 그룹의 서브유닛들은 동일한 물리적 다이 상에 구현되는, 장치.
A4.
세트 A 내의 임의의 이전 조항에 있어서, 상기 제2 분배 규칙은 상기 그래픽스 작업의 제2 세트를 단일 서브유닛에 분배할 것을 표시하는, 장치.
A5.
세트 A 내의 임의의 이전 조항에 있어서, 상기 제어 회로부는 상기 그래픽스 작업의 제1 및 제2 세트들에서의 작업의 양들에 기초하여 상기 제1 및 제2 분배 규칙들을 선택하도록 구성되는, 장치.
A6.
세트 A 내의 임의의 이전 조항에 있어서, 상기 그래픽스 작업의 제1 세트는 상기 제1 로직 슬롯에 할당된 계산 킥의 제1 커널이고, 상기 계산 킥은 적어도 하나의 다른 커널을 포함하고, 상기 장치는 상기 제1 커널을 위한 것보다 상기 적어도 하나의 다른 커널을 위한 상이한 분배 규칙을 선택하도록 구성되는, 장치.
A7.
세트 A 내의 임의의 이전 조항에 있어서, 상기 제어 회로부는 그래픽스 프로그램에 의해 시그널링된 하나 이상의 소프트웨어 오버라이드들이 실행되는 것에 기초하여 상기 제1 분배 규칙을 결정하도록 구성되는, 장치.
A8.
세트 A 내의 임의의 이전 조항에 있어서, 상기 장치는 하기 유형들의 소프트웨어 오버라이드들에 기초하여 상기 제1 분배 규칙을 선택하도록 구성되는, 장치:
어느 서브유닛들이 상기 그래픽스 작업의 제1 세트에 이용가능한지를 표시하는 마스크 정보;
특정된 분배 규칙;
상기 그래픽스 작업의 제1 세트가 전개되어야 하는 서브유닛들의 그룹을 표시하는 그룹 정보; 및
스케줄링 정책을 표시하는 정책 정보.
A9.
세트 A 내의 임의의 이전 조항에 있어서, 상기 그래픽스 프로세서 서브유닛들은 각자의,
프래그먼트(fragment) 생성기 회로부;
셰이더(shader) 코어 회로부;
데이터 캐시 및 메모리 관리 유닛을 포함하는 메모리 시스템 회로부;
기하구조 프로세싱 회로부; 및
분산형 작업부하 분배 회로부를 포함하는, 장치.
A10.
세트 A 내의 임의의 이전 조항에 있어서, 상기 분산형 하드웨어 슬롯들은 각자의,
구성 레지스터들;
배치 큐 회로부; 및
배치 반복 회로부를 포함하고;
서브유닛의 셰이더 회로부는 그의 복수의 분산형 하드웨어 슬롯들로부터의 작업을 수용 및 수행하도록 구성되는, 장치.
A11.
세트 A 내의 임의의 이전 조항에 있어서, 로직 슬롯을 위한 상기 제어 회로부는,
상기 제1 및 제2 분배 규칙들을 결정하도록 구성된 제어 스트림 프로세서;
계산 작업그룹들의 배치들을 생성하도록 구성된 커널 프로세서; 및
계산 작업그룹들의 배치들을 서브유닛들에 할당하도록 구성된 서브유닛 할당 회로부를 포함하고;
상기 제어 회로부는,
표시된 분배 규칙에 기초하여 스트림 프로세서들을 제어하기 위해 하드웨어 슬롯들을 할당하도록 구성된 하드웨어 슬롯 리소스 할당기 회로부; 및
분배를 위한 상이한 로직 슬롯들로부터 할당된 서브유닛들로의 배치들 사이를 중재하도록 구성된 로직 슬롯 중재기 회로부를 포함하는, 장치.
A12.
세트 A 내의 임의의 이전 조항에 있어서, 상기 하드웨어 슬롯 리소스 할당기 회로부는 하드웨어 슬롯들의 상태들에 기초하여 하드웨어 슬롯들을 할당하도록 구성되고, 상이한 하드웨어 슬롯들에 대한 상기 상태들은 적어도, 무효, 구동 중, 비워짐, 및 플러싱 중(flushing)을 포함하는, 장치.
A13.
세트 A 내의 임의의 이전 조항에 있어서, 상기 장치는,
커널이 할당되었던 하나 이상의 서브유닛들에 대한 캐시들만을 플러싱 및 무효화하는 제1 유형의 캐시 플러시 무효화 동작; 및
하나 이상의 캐시 레벨들에서 상기 그래픽스 프로세서 서브유닛들의 세트에 대한 모든 캐시들을 플러싱 및 무효화하는 무조건부 유형의 캐시 플러시 무효화 동작을 실행하도록 구성되는, 장치.
A14.
세트 A 내의 임의의 이전 조항에 있어서, 상기 제어 회로부는,
상기 복수의 로직 슬롯들 중의 슬롯들에 대한 각자의 홀드 값들을 결정하도록 - 상기 홀드 값들은 로직 슬롯에 대한 커널들의 상태를 표시함 -; 그리고
제1 우선순위 레벨을 갖는 로직 슬롯이, 상기 각자의 홀드 값들 중 하나 이상의 홀드 값들에 기초하여, 제2의 더 낮은 우선순위 레벨을 갖는 로직 슬롯에 할당되는 하드웨어 슬롯을 갱생할 수 있게 하도록 추가로 구성되는, 장치.
A15.
세트 A 내의 임의의 이전 조항에 있어서, 상기 제어 회로부는,
상기 제1 로직 슬롯에 대한 프로그래밍 구성 레지스터들의 완료 전에, 상기 그래픽스 작업의 제1 세트의 부분들을 상기 그래픽스 작업의 제1 세트에 할당된 분산형 하드웨어 슬롯들로 전송하도록 추가로 구성되고, 상기 분산형 하드웨어 슬롯들은 상기 그래픽스 작업의 제1 세트의 수신된 부분들에 대한 큐 회로부를 포함하는, 장치.
A16.
세트 A 내의 임의의 이전 조항의 장치가 수행하도록 구성된 동작들의 임의의 조합을 포함하는, 방법.
A17.
반도체 제조 시스템에 의해 인식되는 포맷으로 하드웨어 집적 회로의 적어도 일부분의 설계를 특정하는 설계 정보가 저장된 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 반도체 제조 시스템은 상기 설계 정보를 사용하여 상기 설계에 따라 상기 회로를 생성하도록 구성되고, 상기 설계 정보는, 상기 회로가,
조항 A1 내지 조항 A15에서 인용된 요소들의 임의의 조합을 포함하는 것을 특정하는, 비일시적 컴퓨터 판독가능 저장 매체.
세트 B
B1.
장치로서,
복수의 로직 슬롯들을 구현하는 회로부;
다수의 분산형 하드웨어 슬롯들을 각각 구현하는 그래픽스 프로세서 서브유닛들의 세트; 및
제어 회로부를 포함하고, 상기 제어 회로부는,
소프트웨어 특정된 그래픽스 작업의 제1 세트, 및 사기 그래픽스 작업의 제1 세트에 대한 소프트웨어 표시된 우선순위 정보를 수신하도록;
상기 그래픽스 작업의 제1 세트를 제1 로직 슬롯에 할당하도록;
로직 슬롯들과 분산형 하드웨어 슬롯들 사이의 맵핑들을 결정하도록 - 상기 맵핑들은 우선순위가 임계 우선순위 레벨을 초과하는 로직 슬롯들에 대해 각각의 서브유닛 내의 임계 수의 하드웨어 슬롯들을 예약함 -; 그리고
상기 맵핑들 중 하나에 따라 상기 그래픽스 작업의 제1 세트를 상기 그래픽스 프로세서 서브유닛들 중 하나 이상에 분배하도록 구성되는, 장치.
B2.
세트 B 내의 임의의 이전 조항에 있어서, 상기 그래픽스 작업의 제1 세트에 대한 소프트웨어 입력에 기초하여, 상기 제어 회로부는,
상기 그래픽스 작업의 제1 세트에 대한 프로세싱의 완료 후에 상기 제1 로직 슬롯에 대한 분산형 하드웨어 슬롯들의 맵핑을 유지하도록; 그리고
상기 맵핑된 분산형 슬롯들을 해제할 것을 표시하는 소프트웨어 입력 후에만, 상기 그래픽스 작업의 제1 세트에 대한 상기 맵핑된 분산형 하드웨어 슬롯들을 다른 로직 슬롯에 할당하도록 구성되는, 장치.
B3.
세트 B 내의 임의의 이전 조항에 있어서, 로직 슬롯들의 제1 서브세트는 높은 우선순위 슬롯들이고 남은 로직 슬롯들은 낮은 우선순위 슬롯들이고, 상기 제어 회로부는 상기 소프트웨어 표시된 우선순위 정보에 기초하여 상기 그래픽스 작업의 제1 세트를 상기 제1 로직 슬롯에 할당하도록 구성되는, 장치.
B4.
세트 B 내의 임의의 이전 조항에 있어서, 상기 제어 회로부는 상기 그래픽스 작업의 제1 세트에 대한 소프트웨어에 상태 정보를 제공하도록 구성되는, 장치.
B5.
세트 B 내의 임의의 이전 조항에 있어서, 상기 제어 회로부는 적어도 하기의 스테이터스 상태들을 지원하는, 장치:
종속성들을 기다림;
상기 그래픽스 작업의 제1 세트에 대한 구성 데이터를 기다림; 및
분산형 슬롯들의 할당을 기다림.
B6.
세트 B 내의 임의의 이전 조항에 있어서, 상기 상태 정보는,
상기 제1 로직 슬롯의 식별;
할당된 분산형 하드웨어 슬롯들의 식별; 및
상기 그래픽스 작업의 제1 세트의 실행과 연관된 타임스탬프 정보를 포함하는, 장치.
B7.
세트 B 내의 임의의 이전 조항에 있어서, 상기 제어 회로부는 하기의 유형들의 소프트웨어 오버라이드들에 기초하여 상기 맵핑들을 결정하도록 구성되는, 장치:
상기 세트 내의 그래픽스 프로세서 서브유닛들의 일부분에만 분배할지 아니면 상기 세트 내의 그래픽스 프로세서 서브유닛들 모두에 분배할지를 표시하는 특정된 분배 규칙; 및
상기 그래픽스 작업의 제1 세트가 전개되어야 하는 서브유닛들의 그룹을 표시하는 그룹 정보.
B8.
세트 B 내의 임의의 이전 조항에 있어서, 상기 제어 회로부는 하기의 추가적인 유형들의 소프트웨어 오버라이드들에 기초하여 상기 맵핑들을 결정하도록 구성되는, 장치:
어느 서브유닛들이 상기 그래픽스 작업의 제1 세트에 이용가능한지를 표시하는 마스크 정보; 및
스케줄링 정책을 표시하는 정책 정보.
B9.
세트 B 내의 임의의 이전 조항에 있어서,
상기 맵핑들에 대한 분배 규칙들을 결정하도록 구성된 제어 스트림 프로세서 회로부; 및
분산형 슬롯 리소스 할당기 회로부를 추가로 포함하고, 상기 분산형 슬롯 리소스 할당기 회로부는,
소프트웨어 입력;
상기 제어 스트림 프로세서 회로부로부터의 결정된 분배 규칙들; 및
분산형 슬롯 상태 정보에 기초하여 상기 맵핑들을 결정하도록 구성되는, 장치.
B10.
세트 B 내의 임의의 이전 조항에 있어서, 상기 분산형 슬롯 리소스 할당기는 제1 소프트웨어 표시된 우선순위 레벨을 갖는 로직 슬롯이 제2의 더 낮은 우선순위 레벨을 갖는 로직 슬롯에 할당되었던 하드웨어 슬롯을 갱생할 수 있게 하는 갱생 절차를 수행하도록 구성되는, 장치.
B11.
세트 B 내의 임의의 이전 조항의 장치가 수행하도록 구성된 동작들의 임의의 조합을 포함하는, 방법.
B12.
반도체 제조 시스템에 의해 인식되는 포맷으로 하드웨어 집적 회로의 적어도 일부분의 설계를 특정하는 설계 정보가 저장된 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 반도체 제조 시스템은 상기 설계 정보를 사용하여 상기 설계에 따라 상기 회로를 생성하도록 구성되고, 상기 설계 정보는, 상기 회로가,
조항 B1 내지 조항 B10에서 인용된 요소들의 임의의 조합을 포함하는 것을 특정하는, 비일시적 컴퓨터 판독가능 저장 매체.
세트 C
C1.
장치로서,
그래픽스 프로세서 서브유닛들의 제1 및 제2 그룹들 - 상기 서브유닛들의 제1 그룹은 제1 캐시를 공유하고, 상기 서브유닛들의 제2 그룹은 제2 캐시를 공유함 -; 및
분배 회로부를 포함한다고 특정하고, 상기 분배 회로부는,
그래픽스 작업의 소프트웨어 특정된 세트 및 그래픽스 프로세서 서브유닛들의 그룹들에 대한 상기 그래픽스 작업의 세트의 부분들의 소프트웨어 표시된 맵핑을 수신하도록; 그리고
상기 맵핑에 기초하여, 상기 그래픽스 작업의 세트의 제1 서브세트를 상기 그래픽스 서브유닛들의 제1 그룹에, 그리고 그래픽스 작업의 세트의 제2 서브세트를 상기 그래픽스 서브유닛들의 제2 그룹에 할당하도록 구성되는, 장치.
C2.
세트 C 내의 임의의 이전 조항에 있어서, 상기 장치는 제어 회로부를 포함하고, 상기 제어 회로부는, 구성 레지스터들에, 그래픽스 프로세서 서브유닛들의 그룹들에 대한 그래픽스 작업의 세트들의 부분들의 다수의 맵핑들을 저장하도록 구성되는, 장치.
C3.
세트 C 내의 임의의 이전 조항에 있어서, 상기 그래픽스 작업의 세트는 계산 커널인, 장치.
C4.
세트 C 내의 임의의 이전 조항에 있어서, 상기 분배 회로부는,
상기 계산 커널의 부분들을 결정하도록 구성된 일차 커널 워커 회로부;
작업그룹들의 배치들을 결정하기 위해 상기 그래픽스 서브유닛들의 제1 그룹에 할당된 상기 계산 커널의 부분들을 반복하도록 구성된 제1 그룹 워커 회로부; 및
작업그룹들의 배치들을 결정하기 위해 상기 그래픽스 서브유닛들의 제2 그룹에 할당된 상기 계산 커널의 부분들을 반복하도록 구성된 제2 그룹 워커 회로부를 포함하는, 장치.
C5.
세트 C 내의 임의의 이전 조항에 있어서, 상기 분배 회로부는,
상기 제1 및 제2 그룹 워커 회로부에 의해 결정된 작업그룹들의 배치들 사이에서 선택하도록 구성된 그룹 워커 중재 회로부; 및
상기 그룹 워커 중재 회로부에 의해 선택된 배치들을 상기 선택된 그룹 워커 회로부에 대응하는 상기 서브유닛들의 그룹 내의 하나 이상의 그래픽스 서브유닛들에 할당하도록 구성된 서브유닛 할당 회로부를 추가로 포함하는, 장치.
C6.
세트 C 내의 임의의 이전 조항에 있어서,
작업 공유 제어 회로부를 추가로 포함하고, 상기 작업 공유 제어 회로부는,
상기 그래픽스 작업의 세트에 대한 자신의 할당된 부분들 모두를 디스패치했던 서브유닛들의 하나 이상의 다른 그룹들의 세트를 결정하도록; 그리고
상기 서브유닛들의 제1 그룹을 타깃화하는 것으로서 상기 맵핑에 의해 표시되었던, 상기 그래픽스 작업의 세트의 적어도 제1 부분을 상기 서브유닛들의 하나 이상의 다른 그룹들 중의 그룹에 할당하도록 구성되는, 장치.
C7.
세트 C 내의 임의의 이전 조항에 있어서, 상기 장치는 단일 차원, 2차원, 및 3차원을 포함하는 다수의 차원수들에 대한 그래픽스 프로세서 서브유닛 친화도 맵들의 그룹들에 대한 그래픽스 작업의 세트의 부분들의 맵핑들을 지원하는, 장치.
C8.
세트 C 내의 임의의 이전 조항에 있어서,
복수의 로직 슬롯들을 구현하는 회로부 - 상기 제1 및 제2 그룹들 내의 서브유닛들의 세트는 각각 다수의 분산형 하드웨어 슬롯들을 구현함 -; 및
제어 회로부를 추가로 포함하고, 상기 제어 회로부는,
상기 그래픽스 작업의 세트를 제1 로직 슬롯에 할당하도록;
상기 세트 내의 그래픽스 프로세서 서브유닛들 모두에 분배할지 아니면 상기 그래픽스 프로세서 서브유닛들의 일부분에만 분배할지를 표시하는 상기 그래픽스 작업에 대한 분배 규칙을 결정하도록; 그리고
상기 분배 규칙에 기초하여 그리고 그래픽스 프로세서 서브유닛들의 그룹들에 대한 상기 그래픽스 작업의 세트의 부분들의 맵핑들에 기초하여 제1 로직 슬롯과 하나 이상의 분산형 하드웨어 슬롯들의 각자의 세트들 사이의 맵핑들을 결정하도록 구성되는, 장치.
C9.
동작들을 수행하도록 컴퓨팅 디바이스에 의해 실행가능한 명령들이 저장된 비일시적 컴퓨터 판독가능 매체로서, 상기 동작들은,
그래픽스 작업의 세트
및 그래픽스 프로세서 서브유닛들의 그룹들에 대한 상기 그래픽스 작업의 세트의 부분들의 대응하는 맵핑을 수신하는 동작 - 상기 그래픽스 작업의 세트 및 맵핑은 상기 명령들에 의해 특정되고, 상기 맵핑은 그래픽스 프로세서 서브유닛들의 주어진 그룹에 맵핑된 상기 그래픽스 작업의 세트의 부분들의 세트에 대한 캐시 친화도를 표시함 -; 및
상기 맵핑에 기초하여, 상기 그래픽스 작업의 세트의 제1 서브세트를 그래픽스 서브유닛들의 제1 그룹에, 그리고 그래픽스 작업의 세트의 제2 서브세트를 그래픽스 서브유닛들의 제2 그룹에 할당하는 동작을 포함하는, 비일시적 컴퓨터 판독가능 매체.
C10.
세트 C 내의 임의의 이전 조항에 있어서, 상기 동작들은 하나 이상의 동작 모드들에서 친화도 기반 작업 분배를 디스에이블하는 동작을 추가로 포함하는, 비일시적 컴퓨터 판독가능 매체.
C11.
세트 C 내의 임의의 이전 조항에 있어서, 상기 동작들은, 다수의 상이한 맵핑들에 기초하여, 그래픽스 작업의 세트들의 서브세트들을 그래픽스 서브유닛들의 그룹들에 할당하는 동작을 포함하고, 상기 다수의 상이한 맵핑들은 그래픽스 작업의 세트들의 적어도 2개의 차원수들에 대한 맵핑들을 포함하는, 비일시적 컴퓨터 판독가능 매체.
C12.
세트 C 내의 임의의 이전 조항에 있어서, 상기 컴퓨팅 디바이스는 복수의 로직 슬롯들을 구현하는 그래픽스 회로부를 포함하고, 상기 제1 및 제2 그룹들 내의 서브유닛들은 각각 다수의 분산형 하드웨어 슬롯들을 구현하고, 상기 동작들은 상기 그래픽스 작업의 세트에 대한 로직 슬롯들과 하나 이상의 분산형 하드웨어 슬롯들의 각자의 세트들 사이의 맵핑을 적어도 부분적으로 제어하기 위해 하나 이상의 소프트웨어 오버라이드들을 특정하는 동작을 추가로 포함하는, 비일시적 컴퓨터 판독가능 매체.
C13.
세트 C 내의 임의의 이전 조항에 있어서, 상기 하나 이상의 소프트웨어 오버라이드들은,
어느 서브유닛들이 상기 그래픽스 작업의 세트에 이용가능한지를 표시하는 마스크 정보;
분배 폭을 표시하는 특정된 분배 규칙;
상기 그래픽스 작업의 세트가 전개되어야 하는 서브유닛들의 그룹을 표시하는 그룹 정보; 및
스케줄링 정책을 표시하는 정책 정보 중 적어도 하나를 포함하는, 비일시적 컴퓨터 판독가능 매체.
C14.
세트 C 내의 임의의 이전 조항의 동작들의 임의의 조합을 포함하는 방법.
C15.
반도체 제조 시스템에 의해 인식되는 포맷으로 하드웨어 집적 회로의 적어도 일부분의 설계를 특정하는 설계 정보가 저장된 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 반도체 제조 시스템은 상기 설계 정보를 사용하여 상기 설계에 따라 상기 회로를 생성하도록 구성되고, 상기 설계 정보는, 상기 회로가,
조항 C1 내지 조항 C8에서 인용된 요소들의 임의의 조합을 포함하는 것을 특정하는, 비일시적 컴퓨터 판독가능 저장 매체.
세트 D
D1.
장치로서,
그래픽스 프로세서 회로부;
다수의 추적 슬롯들에 대한 엔트리들을 구현하는 추적 슬롯 회로부;
슬롯 관리자 회로부로서,
상기 추적 슬롯 회로부의 엔트리를 사용하여, 그래픽스 작업의 세트에 대한 소프트웨어 특정된 정보를 저장하도록 - 상기 정보는, 작업의 유형, 그래픽스 작업의 다른 세트들에 대한 종속성들, 및 상기 그래픽스 작업의 세트에 대한 데이터의 위치를 포함함 -;
상기 위치로부터 그리고 상기 그래픽스 작업의 세트에 대한 셰이더 코어 리소스들을 할당하기 전에, 상기 그래픽스 작업의 세트에 대한 구성 레지스터 데이터를 프리페칭하도록 구성된, 상기 슬롯 관리자 회로부; 및
제어 회로부를 포함하고, 상기 제어 회로부는,
상기 프리페칭된 데이터를 사용하여 상기 그래픽스 작업의 세트에 대한 구성 레지스터들을 프로그래밍하도록; 그리고
상기 종속성들에 따라 상기 그래픽스 프로세서 회로부에 의해 상기 그래픽스 작업의 세트의 프로세싱을 개시하도록 구성되는, 장치.
D2.
세트 D 내의 임의의 이전 조항에 있어서, 상기 제어 회로부는,
상기 구성 레지스터들을 프로그래밍하는 것의 완료 전에, 상기 그래픽스 작업의 세트의 부분들을 상기 그래픽스 작업의 세트에 할당된 하드웨어 슬롯들로 전송하도록 추가로 구성되고, 상기 하드웨어 슬롯들은 상기 그래픽스 작업의 세트의 수신된 부분들에 대한 큐 회로부를 포함하는, 장치.
D3.
세트 D 내의 임의의 이전 조항에 있어서, 상기 제어 회로부는,
상기 그래픽스 작업의 세트를 로직 일차 슬롯에 할당하도록 - 상기 구성 레지스터 데이터의 적어도 일부분은 상기 로직 일차 슬롯의 구성 레지스터들에 대한 것임 -; 그리고
상기 로직 슬롯을 하나 이상의 분산형 하드웨어 슬롯들에 할당하도록 - 상기 구성 레지스터 데이터의 적어도 일부분은 상기 하나 이상의 분산형 하드웨어 슬롯들의 구성 레지스터들에 대한 것임 - 구성되는, 장치.
D4.
세트 D 내의 임의의 이전 조항에 있어서, 상기 그래픽스 작업의 세트에 대한 중단 커맨드에 응답하여, 상기 슬롯 관리자 회로부는,
로직 일차 슬롯이 할당되지 않았다고 결정하는 것에 응답하여, 상기 추적 슬롯 회로부의 엔트리를 재설정하도록;
로직 일차 슬롯이 할당되었다고 결정하는 것에 응답하여, 상기 로직 일차 슬롯을 할당해제하고 상기 추적 슬롯 회로부의 엔트리를 재설정하도록; 그리고
하나 이상의 분산형 하드웨어 슬롯들이 할당되었다고 결정하는 것에 응답하여, 하나 이상의 콘텍스트 스위치 동작들을 수행하고 상기 하나 이상의 분산형 하드웨어 슬롯들을 할당해제하고 상기 로직 일차 슬롯을 할당해제하고 상기 추적 슬롯 회로부의 엔트리를 재설정하도록 구성되는, 장치.
D5.
세트 D 내의 임의의 이전 조항에 있어서, 상기 추적 슬롯 회로부 내의 엔트리는 하기를 질의하기 위해 소프트웨어 액세스가능한, 장치:
상기 그래픽스 작업의 세트에 대한 상태;
상기 그래픽스 작업의 세트의 실행과 연관된 타임스탬프 정보;
상기 로직 1 차 슬롯을 표시하는 정보; 및
상기 하나 이상의 분산형 하드웨어 슬롯들을 표시하는 정보.
D6.
세트 D 내의 임의의 이전 조항에 있어서, 상기 추적 슬롯 회로부는, 적어도 상기 그래픽스 작업의 세트에 대한 하기의 스테이터스 상태들을 표시하는 상태 값들을 지원하는, 장치: 비어 있음, 레지스터 페칭이 개시됨, 그래픽스 작업의 하나 이상의 다른 세트들을 기다림, 로직 슬롯 리소스들을 기다림, 분산형 하드웨어 슬롯 리소스들을 기다림, 및 실행 중.
D7.
세트 D 내의 임의의 이전 조항에 있어서, 상기 슬롯 관리자 회로부는, 상기 추적 슬롯 회로부의 엔트리로부터 그래픽스 작업의 세트를 개시하는 것과 함께 그리고 상기 그래픽스 작업의 세트에 관한 정보에 기초하여, 상기 그래픽스 작업의 세트와 연관된 하나 이상의 회로들에 대해 더 낮은 전력 모드로부터 더 높은 전력 모드로의 증가를 개시하도록 구성되는, 장치.
D8.
세트 D 내의 임의의 이전 조항에 있어서, 상기 프리페치는 공유 메모리로부터 상기 슬롯 관리자 회로부의 SRAM 메모리로 수행되는, 장치.
D9.
세트 D 내의 임의의 이전 조항에 있어서, 상기 프리페치는 공유 메모리로부터 캐시로 수행되는, 장치.
D10.
세트 D 내의 임의의 이전 조항에 있어서, 상기 슬롯 관리자 회로부는 상기 그래픽스 작업의 세트가 제1 공유 리소스 및 제2 공유 리소스를 사용한다고 결정하도록 구성되고;
상기 제1 공유 리소스에 대해, 상기 슬롯 관리자 회로부는 상기 제1 공유 리소스가 이용가능해질 때까지 상기 그래픽스 작업의 세트를 스톨링(stall)하도록 구성되고;
상기 제2 공유 리소스에 대해, 상기 슬롯 관리 회로부는 상기 제2 공유 리소스가 이용가능해지기 전에 상기 그래픽스 작업의 세트가 진행할 수 있게 하도록, 그리고 상기 제2 공유 리소스가 이용가능해지기 전에 상기 그래픽스 작업의 세트가 진행했음을 보고하도록 구성되는, 장치.
D11.
세트 D 내의 임의의 이전 조항의 장치가 수행하도록 구성된 동작들의 임의의 조합을 포함하는, 방법.
D12.
반도체 제조 시스템에 의해 인식되는 포맷으로 하드웨어 집적 회로의 적어도 일부분의 설계를 특정하는 설계 정보가 저장된 비일시적 컴퓨터 판독가능 저장 매체로서, 상기 반도체 제조 시스템은 상기 설계 정보를 사용하여 상기 설계에 따라 상기 회로를 생성하도록 구성되고, 상기 설계 정보는, 상기 회로가,
조항 D1 내지 조항 D10에 인용된 요소들의 임의의 조합을 포함하는 것을 특정하는, 비일시적 컴퓨터 판독가능 저장 매체.
본 명세서에 사용되는 바와 같이, "~하도록 구성된 회로의 설계를 특정하는 설계 정보"라는 형태의 문구는 요소가 충족되기 위해 해당 회로가 제조되어야 한다는 것을 의미하지 않는다. 오히려, 이러한 문구는 설계 정보가, 제조 시에, 표시된 액션들을 수행하도록 구성될 것이거나 특정된 컴포넌트들을 포함할 회로를 설명한다는 것을 표시한다.
***
본 개시내용은 "실시예" 또는 "실시예들의 그룹들"(예를 들어, "일부 실시예들" 또는 "다양한 실시예들")에 대한 언급들을 포함한다. 실시예들은 개시된 개념들의 상이한 구현들 또는 인스턴스들이다. "실시예", "일 실시예", "특정 실시예" 등에 대한 언급들은 반드시 동일한 실시예를 지칭하는 것은 아니다. 구체적으로 개시된 것들뿐만 아니라, 본 개시내용의 사상 또는 범주 내에 속하는 수정들 또는 대안들을 포함하는 많은 가능한 실시예들이 고려된다.
본 개시내용은 개시된 실시예들로부터 발생할 수 있는 잠재적인 이점들을 논의할 수 있다. 이러한 실시예들의 모든 구현들이 반드시 잠재적인 이점들 중 임의의 또는 모든 것을 나타내는 것은 아닐 것이다. 특정 구현에 대해 이점이 실현되는지 여부는 많은 인자들에 의존하며, 이들 중 일부는 본 개시내용의 범위를 벗어난다. 실제로, 청구항들의 범위 내에 속하는 구현이 임의의 개시된 이점들 중 일부 또는 전부를 나타내지 않을 수 있는 많은 이유들이 있다. 예를 들어, 특정 구현은 개시된 실시예들 중 하나와 함께, 하나 이상의 개시된 이점들을 무효화하거나 약화시키는, 본 개시내용의 범위 밖의 다른 회로부를 포함할 수 있다. 더욱이, 특정 구현의 차선의 설계 실행(예를 들어, 구현 기술들 또는 도구들)은 또한 개시된 이점들을 무효화하거나 약화시킬 수 있다. 숙련된 구현을 가정하더라도, 이점들의 실현은 구현이 전개되는 환경 상황들과 같은 다른 인자들에 여전히 의존할 수 있다. 예를 들어, 특정 구현에 공급되는 입력들은 본 개시내용에서 해결되는 하나 이상의 문제들이 특정 기회에 발생하는 것을 방지할 수 있으며, 그 결과, 그 해결책의 이익이 실현되지 않을 수 있다. 본 개시내용 외부의 가능한 인자들의 존재를 고려할 때, 본 명세서에서 설명되는 임의의 잠재적인 이점들은, 침해를 입증하기 위해 충족되어야 하는 청구항 제한들로서 해석되지 않아야 한다는 것이 명백하게 의도된다. 오히려, 그러한 잠재적 이점들의 식별은 본 개시내용의 이익을 갖는 설계자들에게 이용가능한 개선의 유형(들)을 예시하도록 의도된다. 그러한 이점들이 허용가능하게 설명된다는 것(예를 들어, 특정 이점이 "발생할 수 있다"고 언급함)은 그러한 이점들이 실제로 실현될 수 있는지에 대한 의구심을 전달하도록 의도되는 것이 아니라, 그러한 이점들의 실현이 종종 부가적인 인자들에 의존한다는 기술적 현실을 인식하도록 의도된다.
달리 언급되지 않는 한, 실시예들은 비제한적이다. 즉, 개시된 실시예들은, 특정 특징에 대해 단일 예만이 설명되는 경우에도, 본 개시내용에 기초하여 작성되는 청구항들의 범위를 제한하도록 의도되지 않는다. 개시된 실시예들은, 이에 반하는 본 개시내용의 어떠한 진술도 없이, 제한적이기보다는 예시적인 것으로 의도된다. 따라서, 본 출원은 개시된 실시예들을 커버하는 청구항들뿐만 아니라, 본 개시내용의 이익을 갖는 당업자에게 명백할 그러한 대안들, 수정들 및 등가물들을 허용하도록 의도된다.
예를 들어, 본 출원에서의 특징들은 임의의 적합한 방식으로 조합될 수 있다. 따라서, 특징들의 임의의 그러한 조합에 대해 본 출원(또는 그에 대한 우선권을 주장하는 출원)의 심사 동안에 새로운 청구범위가 작성될 수 있다. 특히, 첨부된 청구항들을 참조하면, 종속 청구항들로부터의 특징들은 다른 독립 청구항들로부터 의존하는 청구항들을 포함하여, 적절한 경우 다른 종속 청구항들의 특징들과 조합될 수 있다. 유사하게, 개개의 독립 청구항들로부터의 특징들은 적절한 경우 조합될 수 있다.
따라서, 첨부된 종속 청구항들은 각각이 단일의 다른 청구항에 의존하도록 작성될 수 있지만, 부가적인 종속성들이 또한 고려된다. 본 개시내용과 일치하는 종속물에서의 특징들의 임의의 조합들이 고려되며, 이러한 또는 다른 출원에서 청구될 수 있다. 간단히 말하면, 조합들은 첨부된 청구항들에 구체적으로 열거된 것들로 제한되지 않는다.
적절한 경우, 하나의 포맷 또는 법정 유형(예를 들어, 장치)으로 작성된 청구항들은 다른 포맷 또는 법정 유형(예를 들어, 방법)의 대응하는 청구항들을 지원하도록 의도되는 것으로 또한 고려된다.
***
본 개시내용은 법적인 문서이기 때문에, 다양한 용어들 및 문구들은 행정적 및 사법적 해석의 대상이 될 수 있다. 본 개시내용 전반에 걸쳐 제공되는 정의들뿐만 아니라 다음의 단락들이 본 개시내용에 기초하여 작성되는 청구항들을 해석하는 방법을 결정하는 데 사용될 것이라는 공지가 본 명세서에 주어진다.
물품의 단수 형태(즉, "a", "an" 또는 "the"가 선행되는 명사 또는 명사 문구)에 대한 언급들은, 문맥상 명확하게 달리 지시되지 않는 한, "하나 이상"을 의미하는 것으로 의도된다. 따라서, 청구항에서 "항목"에 대한 언급은, 수반되는 상황 없이, 항목의 부가적인 인스턴스들을 배제하지 않는다. "복수"의 항목들은 항목들 중 2개 이상의 세트를 지칭한다.
"~할 수 있다"라는 단어는 본 명세서에서 강제적인 의미(즉, ~ 해야 하는)가 아니라 허용적인 의미(즉, ~할 가능성을 갖는, ~할 수 있는)로 사용된다.
용어들 "포함하는"("comprising" 및 "including") 및 이들의 형태들은 개방형(open-ended)이며, "포함하지만 이로 한정되지 않는"을 의미한다.
용어 "또는"이 옵션들의 리스트에 관하여 본 개시내용에서 사용될 때, 문맥이 달리 제공하지 않는 한, 일반적으로 포괄적인 의미로 사용되는 것으로 이해될 것이다. 따라서, "x 또는 y"의 언급은 "x 또는 y, 또는 둘 모두"와 동등하고, 따라서 1) x지만 y 아님, 2) y지만 x 아님 및 3) x 및 y 둘 모두를 커버한다. 반면에, "둘 모두가 아니라 x 또는 y 중 어느 하나"와 같은 문구는 "또는"이 배타적인 의미로 사용되고 있다는 것을 명확하게 한다.
"w, x, y, 또는 z, 또는 이들의 임의의 조합" 또는 "... w, x, y, 및 z 중 적어도 하나"의 언급은 세트 내의 요소들의 총 수까지 단일 요소를 수반하는 모든 가능성들을 커버하도록 의도된다. 예를 들어, 세트 [w, x, y, z]가 주어지면, 이러한 문구들은 세트의 임의의 단일 요소(예를 들어, w지만 x, y, 또는 z 아님), 임의의 2개의 요소들(예를 들어, w 및 x지만 y 또는 z 아님), 임의의 3개의 요소들(예를 들어, w, x 및 y지만, z 아님) 및 4개의 요소들 모두를 커버한다. 따라서, "... w, x, y, 및 z 중 적어도 하나"라는 문구는 세트 [w, x, y, z]의 적어도 하나의 요소를 지칭하고, 이로써 요소들의 이러한 리스트 내의 모든 가능한 조합들을 커버한다. 이러한 문구는 w의 적어도 하나의 인스턴스, x의 적어도 하나의 인스턴스, y의 적어도 하나의 인스턴스, 및 z의 적어도 하나의 인스턴스가 있음을 요구하도록 해석되지 않아야 한다.
본 개시내용에서 다양한 "라벨들"이 명사들 또는 명사 문구들에 선행할 수 있다. 문맥이 달리 제공하지 않는 한, 특징에 대해 사용되는 상이한 라벨들(예를 들어, "제1 회로", "제2 회로", "특정 회로", "주어진 회로" 등)은 특징의 상이한 인스턴스들을 지칭한다. 추가적으로, 특징에 적용될 때, "제1", "제2" 및 "제3" 라벨들은, 달리 언급되지 않는 한, 어떠한 유형의 순서화(예를 들어, 공간적, 시간적, 논리적 등)를 의미하지 않는다.
문구 "기초하여"는 결정에 영향을 주는 하나 이상의 인자들을 설명하기 위해 사용된다. 이러한 용어는 부가적인 인자들이 결정에 영향을 줄 수 있는 가능성을 배제하지 않는다. 즉, 결정은 단지 특정된 인자들에 기초하거나 또는 그 특정된 인자들뿐만 아니라 다른, 불특정된 인자들에 기초할 수 있다. "B에 기초하여 A를 결정한다"라는 문구를 고려한다. 이러한 문구는 B가 A를 결정하는 데 사용되거나 A의 결정에 영향을 주는 인자라는 것을 명시한다. 이러한 문구는 A의 결정이 C와 같은 일부 다른 인자에 또한 기초할 수 있음을 배제하지 않는다. 또한, 이 문구는 A가 B만에 기초하여 결정되는 실시예를 커버하도록 의도된다. 본 명세서에서 사용되는 바와 같이, "에 기초하여"라는 문구는 "적어도 부분적으로 기초하여"라는 문구와 동의어이다.
문구들 "~ 에 응답하여" 및 "~ 에 응답으로"는 효과를 트리거하는 하나 이상의 인자들을 설명한다. 이러한 문구는 부가적인 인자들이 특정된 인자들과 공동으로 또는 특정된 인자들과는 독립적으로 영향을 주거나 또는 달리 효과를 트리거할 수 있는 가능성을 배제하지 않는다. 즉, 효과는 단지 이들 인자들에만 응답할 수 있거나 또는 특정된 인자들뿐만 아니라 다른 불특정된 인자들에 응답할 수 있다. "B에 응답하여 A를 수행한다"라는 문구를 고려한다. 이러한 문구는 B가 A의 수행을 트리거하는 또는 A에 대한 특정 결과를 트리거하는 인자라는 것을 명시한다. 이러한 문구는 A를 수행하는 것이 C와 같은 일부 다른 인자에 또한 응답할 수 있음을 배제하지 않는다. 이러한 문구는 또한 A를 수행하는 것이 B와 C에 응답하여 공동으로 수행될 수 있다는 것을 배제하지 않는다. 이러한 문구는 또한 A가 B에만 응답하여 수행되는 실시예를 커버하도록 의도된다. 본 명세서에서 사용되는 바와 같이, 문구 "응답하여"는 문구 "적어도 부분적으로 응답하여"와 동의어이다. 유사하게, 문구 "~에 응답하여"는 문구 "적어도 부분적으로 응답하여"와 동의어이다.
***
본 개시내용 내에서, 상이한 엔티티들(이는, "유닛들", "회로들", 다른 구성요소들 등으로 다양하게 지칭될 수 있음)은 하나 이상의 태스크들 또는 동작들을 수행하도록 "구성된" 것으로 설명되거나 또는 청구될 수 있다. 이러한 표현―[하나 이상의 태스크들을 수행]하도록 구성된 [엔티티]―은 본 명세서에서 구조체(즉, 물리적인 것)를 지칭하는 데 사용된다. 더 상세하게는, 이러한 표현은 이러한 구조체가 동작 동안 하나 이상의 태스크들을 수행하도록 배열됨을 나타내는 데 사용된다. 구조체는 그 구조체가 현재 동작되고 있지 않더라도 일부 태스크를 수행하도록 "구성된다"고 말할 수 있다. 따라서, 일부 태스크를 수행"하도록 구성된" 것으로 설명된 또는 언급된 엔티티는 디바이스, 회로, 태스크를 구현하도록 실행가능한 프로그램 명령들을 저장하는 메모리 및 프로세서 유닛을 갖는 시스템 등과 같은 물리적인 것을 지칭한다. 이러한 문구는 본 명세서에서 무형인 것을 지칭하기 위해 사용되지는 않는다.
일부 경우들에서, 다양한 유닛들/회로들/구성요소들은 태스크 또는 동작들의 세트를 수행하는 것으로 본 명세서에서 설명될 수 있다. 이들 엔티티들은, 구체적으로 언급되지 않더라도, 그러한 태스크들/동작들을 수행하도록 "구성"된다는 것이 이해된다.
용어 "~ 하도록 구성된"은 "~하도록 구성가능한"을 의미하도록 의도되지 않는다. 예를 들어, 프로그래밍되지 않은 FPGA는 특정 기능을 수행하도록 "구성된" 것으로 간주되지 않을 것이다. 그러나, 이러한 프로그래밍되지 않은 FPGA는 그 기능을 수행하도록 "구성가능"할 수 있다. 적절한 프로그래밍 후에, 이어서 FPGA는 특정 기능을 수행하도록 "구성된다"고 말할 수 있다.
본 개시내용에 기초한 미국 특허 출원들의 목적들을 위해, 구조체가 하나 이상의 태스크들을 수행하도록 "구성"된다고 청구항에서 언급하는 것은 명백히 그 청구항 요소에 대하여 35 U.S.C. §(112)(f)를 적용하지 않도록 의도된다. 출원인이 본 개시내용에 기초하여 미국 특허 출원의 심사 동안 섹션 112(f)의 적용을 원하면, [기능을 수행]"하기 위한 수단" 구조를 이용하여 청구항 요소들을 열거할 것이다.
상이한 "회로들"이 본 개시내용에서 설명될 수 있다. 이러한 회로들 또는 "회로부"는 조합 로직, 클로킹된 저장 디바이스들(예를 들어, 플립-플롭들, 레지스터들, 래치들 등), 유한 상태 머신들, 메모리(예를 들어, 랜덤 액세스 메모리, 내장형 동적 랜덤 액세스 메모리), 프로그래밍가능 로직 어레이들 등과 같은 다양한 유형들의 회로 요소들을 포함하는 하드웨어를 구성한다. 회로부는 맞춤 설계되거나 표준 라이브러리들로부터 취해질 수 있다. 다양한 구현들에서, 회로부는 적절하게 디지털 구성요소들, 아날로그 구성요소들, 또는 둘 모두의 조합을 포함할 수 있다. 특정 유형들의 회로들은 일반적으로 "유닛들"(예를 들어, 디코드 유닛, 산술 로직 유닛(ALU), 기능 유닛, 메모리 관리 유닛(MMU) 등)로 지칭될 수 있다. 그러한 유닛들은 또한 회로들 또는 회로부를 지칭한다.
따라서, 도면들에 예시되고 본 명세서에서 설명된 개시된 회로들/유닛들/구성요소들 및 다른 요소들은 이전 단락에서 설명된 것들과 같은 하드웨어 요소들을 포함한다. 많은 경우들에서, 특정 회로 내의 하드웨어 요소들의 내부 배열은 그 회로의 기능을 설명함으로써 특정될 수 있다. 예를 들어, 특정 "디코드 유닛"은 "명령의 오피코드(opcode)를 프로세싱하고 그 명령을 복수의 기능 유닛들 중 하나 이상에 라우팅하는" 기능을 수행하는 것으로 설명될 수 있으며, 이는 디코드 유닛이 이러한 기능을 수행하도록 "구성됨"을 의미한다. 이러한 기능의 규격은, 컴퓨터 분야의 당업자들에게, 회로에 대한 가능한 구조체들의 세트를 암시하기에 충분하다.
다양한 실시예들에서, 이전 단락에서 논의된 바와 같이, 회로들, 유닛들, 및 다른 요소들은 이들이 구현하도록 구성된 기능들 또는 동작들에 의해 정의될 수 있다. 그러한 회로들/유닛들/컴포넌트들의 서로에 대한 배열 및 이들이 상호작용하는 방식은, 마이크로아키텍처 정의의 물리적 구현을 형성하도록 집적 회로에서 궁극적으로 제조되거나 FPGA로 프로그래밍되는 하드웨어의 마이크로아키텍처 정의를 형성한다. 따라서, 마이크로아키텍처 정의는 많은 물리적 구현들이 유도될 수 있는 구조체로서 당업자들에 의해 인식되며, 이들 모두는 마이크로아키텍처 정의에 의해 설명된 더 넓은 구조체에 속한다. 즉, 본 개시내용에 따라 공급되는 마이크로아키텍처 정의를 제공받는 당업자는, 과도한 실험 없이 그리고 통상의 기술의 적용으로, 회로들/유닛들/구성요소들의 디스크립션을 Verilog 또는 VHDL과 같은 하드웨어 디스크립션 언어(HDL)로 코딩함으로써 구조체를 구현할 수 있다. HDL 디스크립션은 종종, 기능적으로 보일 수 있는 방식으로 표현된다. 그러나, 본 분야의 당업자들에게, 이러한 HDL 디스크립션은 회로, 유닛 또는 구성요소의 구조체를 다음 레벨의 구현 세부사항으로 변환하는 데 사용되는 방식이다. 그러한 HDL 디스크립션은 (통상적으로 합성가능하지 않은) 거동 코드, (거동 코드와는 대조적으로, 통상적으로 합성가능한) 레지스터 전송 언어(RTL) 코드, 또는 구조적 코드(예를 들어, 로직 게이트들 및 그들의 연결을 특정하는 넷리스트)의 형태를 취할 수 있다. HDL 디스크립션은 주어진 집적 회로 제조 기술을 위해 설계된 셀들의 라이브러리에 대해 순차적으로 합성될 수 있고, 타이밍, 전력 및 다른 이유들로 인해 수정되어 최종 설계 데이터베이스를 생성할 수 있으며, 이는 파운드리(foundry)로 송신되어 마스크들을 생성하고 궁극적으로 집적 회로를 생성할 수 있다. 일부 하드웨어 회로들 또는 그의 부분들은 또한 회로도 편집기(schematic editor)로 맞춤 설계될 수 있고 합성된 회로부와 함께 집적 회로 설계 내로 캡처될 수 있다. 집적 회로들은 트랜지스터들, 및 다른 회로 요소들(예를 들어, 커패시터들, 저항기들, 인덕터들 등과 같은 수동 요소들) 및 트랜지스터들과 회로 요소들 사이의 상호연결부를 포함할 수 있다. 일부 실시예들은 하드웨어 회로를 구현하기 위해 함께 조합된 다수의 집적 회로들을 구현할 수 있고/있거나 일부 실시예들에서는 이산 요소들이 사용될 수 있다. 대안적으로, HDL 설계는 FPGA(Field Programmable Gate Array)와 같은 프로그래밍가능 로직 어레이로 합성될 수 있으며 FPGA에서 구현될 수 있다. 회로들의 그룹의 설계와 이들 회로들의 후속 저레벨 구현 사이의 이러한 디커플링은 일반적으로, 회로 또는 로직 설계자가 회로가 무엇을 하도록 구성되는지의 설명을 넘어서 저레벨 구현에 대한 특정 세트의 구조체들을 특정하지 않는 시나리오를 도출하는데, 이는 이러한 프로세스가 회로 구현 프로세스의 상이한 스테이지에서 수행되기 때문이다.
회로 요소들의 많은 상이한 저레벨 조합들이 회로의 동일한 규격을 구현하는 데 사용될 수 있다는 사실은 그 회로에 대한 다수의 등가 구조체들을 초래한다. 언급된 바와 같이, 이러한 저레벨 회로 구현들은 제조 기술의 변화들, 집적 회로를 제조하기 위해 선택된 파운드리, 특정 프로젝트를 위해 제공된 셀들의 라이브러리 등에 따라 변할 수 있다. 많은 경우들에서, 이들 상이한 구현들을 생성하기 위해 상이한 설계 도구들 또는 방법론들에 의해 이루어지는 선택들은 임의적일 수 있다.
게다가, 회로의 특정 기능 규격의 단일 구현이 주어진 실시예에 대해 많은 수의 디바이스들(예를 들어, 수백만 개의 트랜지스터들)을 포함하는 것이 일반적이다. 따라서, 엄청난 체적의 이러한 정보는, 등가의 가능한 구현들의 방대한 어레이는 말할 것도 없이, 단일 실시예를 구현하는 데 사용되는 저레벨 구조체의 완전한 설명을 제공하는 것을 비실용적으로 만든다. 이러한 이유로, 본 개시내용은 업계에서 일반적으로 사용되는 기능적 속기(shorthand)를 사용하여 회로들의 구조체를 설명한다.
Claims (20)
- 장치로서,
복수의 로직 슬롯들을 구현하는 회로부;
다수의 분산형 하드웨어 슬롯들을 각각 구현하는 그래픽스 프로세서 서브유닛들의 세트; 및
제어 회로부를 포함하고, 상기 제어 회로부는,
그래픽스 작업의 제1 및 제2 세트들을 제1 및 제2 로직 슬롯들에 할당하도록;
상기 세트 내의 상기 그래픽스 프로세서 서브유닛들 전체에 분배할 것을 표시하는 상기 그래픽스 작업의 제1 세트에 대한 제1 분배 규칙을 결정하도록;
상기 세트 내의 상기 그래픽스 프로세서 서브유닛들의 전체보다 더 적은 것들에 분배할 것을 표시하는 상기 그래픽스 작업의 제2 세트에 대한 제2 분배 규칙을 결정하도록;
상기 제1 분배 규칙에 기초하여 상기 제1 로직 슬롯과 하나 이상의 분산형 하드웨어 슬롯들의 제1 세트 사이의 맵핑을 결정하도록;
상기 제2 분배 규칙에 기초하여 상기 제2 로직 슬롯과 하나 이상의 분산형 하드웨어 슬롯들의 제2 세트 사이의 맵핑을 결정하도록; 그리고
상기 결정된 맵핑들에 따라 상기 그래픽스 작업의 제1 및 제2 세트들을 상기 그래픽스 프로세서 서브유닛들 중 하나 이상에 분배하도록 구성되는, 장치. - 제1항에 있어서, 상기 그래픽스 프로세서 서브유닛들은 다수의 서브유닛들의 다수의 그룹들로 조직화되고, 동일한 그룹 내의 서브유닛들은 캐시를 공유하고;
상기 제2 분배 규칙은 상기 그래픽스 작업의 제2 세트를 서브유닛들의 단일 그룹에 분배할 것을 표시하는, 장치. - 제2항에 있어서, 주어진 그룹의 서브유닛들은 동일한 물리적 다이 상에 구현되는, 장치.
- 제1항에 있어서, 상기 제2 분배 규칙은 상기 그래픽스 작업의 제2 세트를 단일 서브유닛에 분배할 것을 표시하는, 장치.
- 제1항에 있어서, 상기 제어 회로부는 상기 그래픽스 작업의 제1 및 제2 세트들에서의 작업의 양들에 기초하여 상기 제1 및 제2 분배 규칙들을 선택하도록 구성되는, 장치.
- 제1항에 있어서, 상기 그래픽스 작업의 제1 세트는 상기 제1 로직 슬롯에 할당된 계산 킥의 제1 커널이고, 상기 계산 킥은 적어도 하나의 다른 커널을 포함하고, 상기 장치는 상기 제1 커널을 위한 것보다 상기 적어도 하나의 다른 커널을 위한 상이한 분배 규칙을 선택하도록 구성되는, 장치.
- 제1항에 있어서, 상기 제어 회로부는 그래픽스 프로그램에 의해 시그널링된 하나 이상의 소프트웨어 오버라이드들이 실행되는 것에 기초하여 상기 제1 분배 규칙을 결정하도록 구성되는, 장치.
- 제7항에 있어서, 상기 장치는 하기 유형들의 소프트웨어 오버라이드들에 기초하여 상기 제1 분배 규칙을 선택하도록 구성되는, 장치:
어느 서브유닛들이 상기 그래픽스 작업의 제1 세트에 이용가능한지를 표시하는 마스크 정보;
특정된 분배 규칙;
상기 그래픽스 작업의 제1 세트가 전개되어야 하는 서브유닛들의 그룹을 표시하는 그룹 정보; 및
스케줄링 정책을 표시하는 정책 정보. - 제1항에 있어서, 상기 그래픽스 프로세서 서브유닛들은 각자의,
프래그먼트(fragment) 생성기 회로부;
셰이더(shader) 코어 회로부;
데이터 캐시 및 메모리 관리 유닛을 포함하는 메모리 시스템 회로부;
기하구조 프로세싱 회로부; 및
분산형 작업부하 분배 회로부를 포함하는, 장치. - 제1항에 있어서, 상기 분산형 하드웨어 슬롯들은 각자의,
구성 레지스터들;
배치 큐(batch queue) 회로부; 및
배치 반복 회로부를 포함하고;
서브유닛의 셰이더 회로부는 그의 복수의 분산형 하드웨어 슬롯들로부터의 작업을 수용 및 수행하도록 구성되는, 장치. - 제1항에 있어서, 로직 슬롯에 대한 제어 회로부는,
상기 제1 및 제2 분배 규칙들을 결정하도록 구성된 제어 스트림 프로세서;
계산 작업그룹들의 배치들을 생성하도록 구성된 커널 프로세서; 및
계산 작업그룹들의 배치들을 서브유닛들에 할당하도록 구성된 서브유닛 할당 회로부를 포함하고;
상기 제어 회로부는,
표시된 분배 규칙에 기초하여 스트림 프로세서들을 제어하기 위해 하드웨어 슬롯들을 할당하도록 구성된 하드웨어 슬롯 리소스 할당기 회로부; 및
분배를 위한 상이한 로직 슬롯들로부터 할당된 서브유닛들로의 배치들 사이를 중재하도록 구성된 로직 슬롯 중재기 회로부를 포함하는, 장치. - 제11항에 있어서, 상기 하드웨어 슬롯 리소스 할당기 회로부는 하드웨어 슬롯들의 상태들에 기초하여 하드웨어 슬롯들을 할당하도록 구성되고, 상이한 하드웨어 슬롯들에 대한 상기 상태들은 적어도, 무효, 구동 중, 비워짐, 및 플러싱 중(flushing)을 포함하는, 장치.
- 제1항에 있어서, 상기 장치는,
커널이 할당되었던 하나 이상의 서브유닛들에 대한 캐시들만을 플러싱 및 무효화하는 제1 유형의 캐시 플러시 무효화 동작; 및
하나 이상의 캐시 레벨들에서 상기 그래픽스 프로세서 서브유닛들의 세트에 대한 모든 캐시들을 플러싱 및 무효화하는 무조건부 유형의 캐시 플러시 무효화 동작을 실행하도록 구성되는, 장치. - 제1항에 있어서, 상기 제어 회로부는,
상기 복수의 로직 슬롯들 중의 슬롯들에 대한 각자의 홀드 값들을 결정하도록 - 상기 홀드 값들은 로직 슬롯에 대한 커널들의 상태를 표시함 -; 그리고
제1 우선순위 레벨을 갖는 로직 슬롯이, 상기 각자의 홀드 값들 중 하나 이상의 홀드 값들에 기초하여, 제2의 더 낮은 우선순위 레벨을 갖는 로직 슬롯에 할당되는 하드웨어 슬롯을 갱생할 수 있게 하도록 추가로 구성되는, 장치. - 제1항에 있어서, 상기 제어 회로부는,
상기 제1 로직 슬롯에 대한 프로그래밍 구성 레지스터들의 완료 전에, 상기 그래픽스 작업의 제1 세트의 부분들을 상기 그래픽스 작업의 제1 세트에 할당된 분산형 하드웨어 슬롯들로 전송하도록 추가로 구성되고, 상기 분산형 하드웨어 슬롯들은 상기 그래픽스 작업의 제1 세트의 수신된 부분들에 대한 큐 회로부를 포함하는, 장치. - 반도체 제조 시스템에 의해 인식되는 포맷으로 하드웨어 집적 회로의 적어도 일부분의 설계를 특정하는 설계 정보가 저장된 비일시적 컴퓨터 판독가능 저장 매체로서,
상기 반도체 제조 시스템은 상기 설계 정보를 사용하여 상기 설계에 따라 상기 회로를 생성하도록 구성되고,
상기 설계 정보는, 상기 회로가,
복수의 로직 슬롯들을 구현하는 회로부;
다수의 분산형 하드웨어 슬롯들을 각각 구현하는 그래픽스 프로세서 서브유닛들의 세트; 및
제어 회로부를 포함하는 것을 특정하고, 상기 제어 회로부는,
그래픽스 작업의 제1 및 제2 세트들을 제1 및 제2 로직 슬롯들에 할당하도록;
상기 세트 내의 상기 그래픽스 프로세서 서브유닛들 전체에 분배할 것을 표시하는 상기 그래픽스 작업의 제1 세트에 대한 제1 분배 규칙을 결정하도록;
상기 세트 내의 상기 그래픽스 프로세서 서브유닛들의 전체보다 더 적은 것들에 분배할 것을 표시하는 상기 그래픽스 작업의 제2 세트에 대한 제2 분배 규칙을 결정하도록;
상기 제1 분배 규칙에 기초하여 상기 제1 로직 슬롯과 하나 이상의 분산형 하드웨어 슬롯들의 제1 세트 사이의 맵핑을 결정하도록;
상기 제2 분배 규칙에 기초하여 상기 제2 로직 슬롯과 하나 이상의 분산형 하드웨어 슬롯들의 제2 세트 사이의 맵핑을 결정하도록; 그리고
상기 결정된 맵핑들에 따라 상기 그래픽스 작업의 제1 및 제2 세트들을 상기 그래픽스 프로세서 서브유닛들 중 하나 이상에 분배하도록 구성되는, 비일시적 컴퓨터 판독가능 저장 매체. - 제16항에 있어서, 상기 그래픽스 프로세서 서브유닛들은 다수의 서브유닛들의 다수의 그룹들로 조직화되고, 동일한 그룹 내의 서브유닛들은 캐시를 공유하고;
상기 제2 분배 규칙은 상기 그래픽스 작업의 제2 세트를 서브유닛들의 단일 그룹에 분배할 것을 표시하는, 비일시적 컴퓨터 판독가능 저장 매체. - 제16항에 있어서, 상기 제어 회로부는 그래픽스 프로그램에 의해 시그널링된 하나 이상의 소프트웨어 오버라이드들이 실행되는 것에 기초하여 상기 제1 분배 규칙을 결정하도록 구성되고, 상기 회로는 하기 유형들의 소프트웨어 오버라이드들에 기초하여 상기 제1 분배 규칙을 선택하도록 구성되는, 비일시적 컴퓨터 판독가능 저장 매체:
어느 서브유닛들이 상기 그래픽스 작업의 제1 세트에 이용가능한지를 표시하는 마스크 정보;
특정된 분배 규칙;
상기 그래픽스 작업의 제1 세트가 전개되어야 하는 서브유닛들의 그룹을 표시하는 그룹 정보; 및
스케줄링 정책을 표시하는 정책 정보. - 방법으로서,
그래픽스 프로세서의 제어 회로부에 의해, 그래픽스 작업의 제1 및 제2 세트들을, 복수의 로직 슬롯들을 구현하는 회로부의 제1 및 제2 로직 슬롯들에 할당하는 단계;
상기 제어 회로부에 의해, 다수의 분산형 하드웨어 슬롯들을 각각 구현하는 그래픽스 프로세서 서브유닛들의 세트 내의 그래픽스 프로세서 서브유닛들 전체에 분배할 것을 표시하는 상기 그래픽스 작업의 제1 세트에 대한 제1 분배 규칙을 결정하는 단계;
상기 제어 회로부에 의해, 상기 세트 내의 상기 그래픽스 프로세서 서브유닛들의 전체보다 더 적은 것들에 분배할 것을 표시하는 상기 그래픽스 작업의 제2 세트에 대한 제2 분배 규칙을 결정하는 단계;
상기 제어 회로부에 의해, 상기 제1 분배 규칙에 기초하여 상기 제1 로직 슬롯과 하나 이상의 분산형 하드웨어 슬롯들의 제1 세트 사이의 맵핑을 결정하는 단계;
상기 제어 회로부에 의해, 상기 제2 분배 규칙에 기초하여 상기 제2 로직 슬롯과 하나 이상의 분산형 하드웨어 슬롯들의 제2 세트 사이의 맵핑을 결정하는 단계; 및
상기 제어 회로부에 의해, 상기 결정된 맵핑들에 따라 상기 그래픽스 작업의 제1 및 제2 세트들을 상기 그래픽스 프로세서 서브유닛들 중 하나 이상에 분배하는 단계를 포함하는, 방법. - 제19항에 있어서,
상기 복수의 로직 슬롯들 중의 슬롯들에 대한 각자의 홀드 값들을 결정하는 단계 - 상기 홀드 값들은 로직 슬롯에 대한 커널들의 상태를 표시함 -; 및
제1 우선순위 레벨을 갖는 로직 슬롯이, 상기 각자의 홀드 값들 중 하나 이상의 홀드 값들에 기초하여, 제2의 더 낮은 우선순위 레벨을 갖는 로직 슬롯에 할당되는 하드웨어 슬롯을 갱생할 수 있게 하는 단계를 추가로 포함하는, 방법.
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US17/399,711 | 2021-08-11 | ||
US17/399,711 US12086644B2 (en) | 2021-08-11 | 2021-08-11 | Logical slot to hardware slot mapping for graphics processors |
US17/399,759 | 2021-08-11 | ||
US17/399,759 US20230051906A1 (en) | 2021-08-11 | 2021-08-11 | Software Control Techniques for Graphics Hardware that Supports Logical Slots |
PCT/US2022/037716 WO2023018529A1 (en) | 2021-08-11 | 2022-07-20 | Logical slot to hardware slot mapping for graphics processors |
Publications (1)
Publication Number | Publication Date |
---|---|
KR20240032993A true KR20240032993A (ko) | 2024-03-12 |
Family
ID=85200921
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020247004578A KR20240032993A (ko) | 2021-08-11 | 2022-07-20 | 그래픽스 프로세서들에 대한 로직 슬롯 대 하드웨어 슬롯 맵핑 |
Country Status (4)
Country | Link |
---|---|
EP (1) | EP4384975A1 (ko) |
JP (1) | JP7560700B2 (ko) |
KR (1) | KR20240032993A (ko) |
WO (1) | WO2023018529A1 (ko) |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1846834A2 (en) | 2005-01-25 | 2007-10-24 | Lucid Information Technology, Ltd. | Graphics processing and display system employing multiple graphics cores on a silicon chip of monolithic construction |
US8321849B2 (en) | 2007-01-26 | 2012-11-27 | Nvidia Corporation | Virtual architecture and instruction set for parallel thread computing |
GB2559042B (en) * | 2015-12-21 | 2019-06-05 | Imagination Tech Ltd | Allocation of tiles to processing engines in a graphics processing system |
US11243598B2 (en) | 2018-06-01 | 2022-02-08 | Apple Inc. | Proactive power management of a graphics processor |
GB2579592B (en) | 2018-12-04 | 2021-03-24 | Imagination Tech Ltd | Tile Region Protection |
US10997686B2 (en) | 2019-01-09 | 2021-05-04 | Intel Corporation | Workload scheduling and distribution on a distributed graphics device |
-
2022
- 2022-07-20 WO PCT/US2022/037716 patent/WO2023018529A1/en active Application Filing
- 2022-07-20 EP EP22856404.3A patent/EP4384975A1/en active Pending
- 2022-07-20 KR KR1020247004578A patent/KR20240032993A/ko not_active Application Discontinuation
- 2022-07-20 JP JP2024506912A patent/JP7560700B2/ja active Active
Also Published As
Publication number | Publication date |
---|---|
WO2023018529A1 (en) | 2023-02-16 |
TW202309830A (zh) | 2023-03-01 |
JP2024532714A (ja) | 2024-09-10 |
JP7560700B2 (ja) | 2024-10-02 |
EP4384975A1 (en) | 2024-06-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102668120B1 (ko) | 병렬 광선 테스트를 갖는 광선 교차 회로 | |
US12086644B2 (en) | Logical slot to hardware slot mapping for graphics processors | |
JP7560700B2 (ja) | グラフィックスプロセッサのための論理スロットからハードウェアスロットへのマッピング | |
US20230047481A1 (en) | Affinity-based Graphics Scheduling | |
US20230051906A1 (en) | Software Control Techniques for Graphics Hardware that Supports Logical Slots | |
US20230048951A1 (en) | Kickslot Manager Circuitry for Graphics Processors | |
TWI859565B (zh) | 包含圖形處理器之設備、用於在圖形處理器中分配圖形工作之方法及相關非暫時性電腦可讀儲存媒體 | |
US12039368B2 (en) | Priority inversion mitigation techniques | |
US20230075531A1 (en) | Quality of Service Techniques in Distributed Graphics Processor | |
US20240273667A1 (en) | Geometry Kick Distribution in Graphics Processor | |
US20240272961A1 (en) | Logical Slot to Distributed Hardware Slot Scheduling for Graphics Work | |
US11947462B1 (en) | Cache footprint management | |
US12026098B1 (en) | Hardware-assisted page pool grow operation | |
WO2023038759A1 (en) | Quality of service techniques in distributed graphics processor | |
US11954492B1 (en) | Fence enforcement techniques based on stall characteristics | |
US11500692B2 (en) | Dynamic buffering control for compute work distribution | |
US20240095176A1 (en) | Preemption Techniques for Memory-Backed Registers | |
US20240289282A1 (en) | Cache Control to Preserve Register Data | |
US20240095031A1 (en) | Thread Channel Deactivation based on Instruction Cache Misses |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal |