KR102635453B1 - Gpu를 위한 피드백 기반 분할 작업 그룹 디스패치 - Google Patents
Gpu를 위한 피드백 기반 분할 작업 그룹 디스패치 Download PDFInfo
- Publication number
- KR102635453B1 KR102635453B1 KR1020207033965A KR20207033965A KR102635453B1 KR 102635453 B1 KR102635453 B1 KR 102635453B1 KR 1020207033965 A KR1020207033965 A KR 1020207033965A KR 20207033965 A KR20207033965 A KR 20207033965A KR 102635453 B1 KR102635453 B1 KR 102635453B1
- Authority
- KR
- South Korea
- Prior art keywords
- unit
- dispatch
- wavefronts
- wavefront
- units
- Prior art date
Links
- 238000000034 method Methods 0.000 claims abstract description 39
- 238000004364 calculation method Methods 0.000 claims abstract description 12
- 230000004888 barrier function Effects 0.000 claims description 69
- 230000004044 response Effects 0.000 claims description 8
- 238000012544 monitoring process Methods 0.000 claims description 2
- 238000010586 diagram Methods 0.000 description 20
- 238000004422 calculation algorithm Methods 0.000 description 16
- 238000012545 processing Methods 0.000 description 11
- 238000013459 approach Methods 0.000 description 8
- 230000007246 mechanism Effects 0.000 description 6
- 238000005192 partition Methods 0.000 description 5
- 238000001514 detection method Methods 0.000 description 4
- 230000003111 delayed effect Effects 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 230000001360 synchronised effect Effects 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000008713 feedback mechanism Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 241000699670 Mus sp. Species 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 230000009956 central mechanism Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000013468 resource allocation Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5066—Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3851—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3888—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
-
- 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/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
-
- 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/5027—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
- G06F9/505—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
- G06F9/522—Barrier synchronisation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5017—Task decomposition
-
- 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/5083—Techniques for rebalancing the load in a distributed system
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multimedia (AREA)
- Image Processing (AREA)
- Electron Beam Exposure (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
다수의 계산 유닛으로의 분할 작업 그룹 디스패치를 수행하기 위한 시스템, 장치 및 방법이 개시된다. 시스템은 적어도 복수의 계산 유닛, 제어 로직 및 디스패치 유닛을 포함한다. 제어 로직은 복수의 계산 유닛 사이의 리소스 경합을 모니터링하고 리소스 경합에 기초하여 각 계산 유닛에 대한 부하율을 계산한다. 디스패치 유닛은 디스패치를 위한 작업 그룹을 수신하고 계산된 부하율에 기초하여 작업 그룹을 복수의 계산 유닛에 디스패치하는 방식을 결정한다. 작업 그룹이 계산 유닛의 현재 가용 리소스에 기초하여 단일 계산 유닛에 맞춰질 수 없는 경우, 디스패치 유닛은 작업 그룹을 그 개별 웨이브프론트로 나누고 작업 그룹의 웨이브프론트를 상이한 계산 유닛들로 디스패치한다. 디스패치 유닛은 계산된 부하율에 기초하여 웨이브프론트를 계산 유닛들 중 특정 계산 유닛들에 디스패치하는 방식을 결정한다.
Description
본 발명은 Lawrence Livermore National Security와의 PathForwardProject에서, 미국 에너지국이 부여한 주 계약 번호 DE-AC52-07NA27344, 부계약 번호 B620717에 따라 정부의 지원을 받아 이루어진 것이다. 미국 정부는 본 발명에 대한 특정 권리를 가지고 있다.
본 발명은 GPU를 위한 피드백 기반 분할 작업 그룹 디스패치에 관한 것이다.
그래픽 처리 유닛(GPU)은 그래픽 처리 작업을 수행하는 복잡한 집적 회로이다. 예를 들어, GPU는 비디오 게임 애플리케이션과 같은 최종 사용자 애플리케이션에 필요한 그래픽 처리 작업을 실행한다. 또한, GPU는 그래픽과 관련이 없는 다른 작업을 수행하는 데 점점 더 많이 사용되고 있다. 일부 구현에서, GPU는 개별 디바이스이거나 중앙 처리 유닛(CPU)과 같은 다른 프로세서와 동일한 디바이스에 포함된다.
GPU에서의 그래픽 처리와 같은 많은 애플리케이션에서 스레드라고도 지칭되는 일련의 작업 항목이 최종 결과를 출력하기 위해 처리된다. 일 구현에서, 각 처리 요소는 특정 작업 항목의 개별 인스턴스화를 실행하여 유입 데이터를 처리한다. 작업 항목은 계산 유닛에서 호출된 커널의 병렬 실행들의 집합 중 하나이다. 작업 항목은 전역 ID와 로컬 ID에 의해 집합 내의 다른 실행과 구별된다. 본 명세서에서 사용될 때, "계산 유닛"이라는 용어는 복수의 작업 항목의 동기 실행을 수행하는 처리 요소의 집합(예를 들어, 단일-명령어, 다중-데이터(SIMD) 유닛)으로 정의된다. 계산 유닛당 처리 요소의 수는 구현마다 다를 수 있다. 계산 유닛에서 동시에 함께 실행되는 작업 그룹의 작업 항목의 하위 집합은 웨이브프론트, 워프 또는 벡터라고 지칭될 수 있다. 웨이브프론트의 폭은 계산 유닛의 하드웨어 특성이다. 본 명세서에서 사용될 때, 바와 같이, 웨이브프론트의 집합이 "작업 그룹"으로 지칭된다.
GPU는 작업 그룹의 입도로 작업을 하위 계산 리소스로 디스패치한다. 일반적으로, 전체 작업 그룹을 지원하기 위한 모든 리소스를 단일 계산 유닛에서 사용할 수 있는 경우 작업 그룹이 디스패치된다. 이러한 리소스는 적어도 벡터 및 스칼라 레지스터, 웨이브프론트 슬롯 및 로컬 데이터 공유(LDS) 공간을 포함한다. 현용의 GPU 하드웨어는 주어진 계산 유닛에 작업 그룹의 모든 웨이브프론트에 필요한 리소스가 없는 경우 작업 그룹을 주어진 계산 유닛으로 디스패치하는 것을 허용하지 않는다. 이는 리소스 비가용성으로 인한 작업 그룹 지연(stall)을 증가시킨다. 이는 또한 애플리케이션의 진행에 직접적인 영향을 미치고 GPU의 WLP(wavefront level parallelism) 및 TLP(thread level parallelism)를 감소시킨다.
여기에 설명된 방법 및 메커니즘의 이점은 첨부 도면과 함께 다음 설명을 참조함으로써 더 잘 이해될 수 있다.
도 1은 컴퓨팅 시스템의 일 구현의 블록도이다.
도 2는 컴퓨팅 시스템의 다른 구현의 블록도이다.
도 3은 GPU의 일 구현의 블록도이다.
도 4는 GPU에서 작업 그룹의 분할 디스패치의 일 구현의 블록도이다.
도 5는 작업 그룹 디스패치 제어 로직의 일 구현의 블록도이다.
도 6은 피드백 기반 계산 유닛 선택 메커니즘의 일 구현의 블록도이다.
도 7은 계산 유닛에 연결된 분할 작업 그룹 스코어보드를 갖는 GPU의 일 구현의 블록도이다.
도 8은 분할 디스패치 작업 그룹의 스코어보드 추적의 일 구현의 블록도이다.
도 9는 분할 작업 그룹 디스패치를 수행하기 위한 방법의 일 구현을 예시하는 일반화된 흐름도이다.
도 10은 분할 작업 그룹의 웨이브프론트의 진행을 추적하기 위해 스코어보드를 사용하는 방법의 일 구현을 예시하는 일반화된 흐름도이다.
도 11은 분할 작업 그룹의 웨이브프론트를 할당하기 위한 계산 유닛을 선택하기 위한 방법의 일 구현을 예시하는 일반화된 흐름도이다.
도 12는 계산 유닛 사이의 리소스 경합을 최소화하도록 작업 그룹의 웨이브프론트를 디스패치하는 방법의 일 구현을 예시하는 일반화된 흐름도이다.
도 1은 컴퓨팅 시스템의 일 구현의 블록도이다.
도 2는 컴퓨팅 시스템의 다른 구현의 블록도이다.
도 3은 GPU의 일 구현의 블록도이다.
도 4는 GPU에서 작업 그룹의 분할 디스패치의 일 구현의 블록도이다.
도 5는 작업 그룹 디스패치 제어 로직의 일 구현의 블록도이다.
도 6은 피드백 기반 계산 유닛 선택 메커니즘의 일 구현의 블록도이다.
도 7은 계산 유닛에 연결된 분할 작업 그룹 스코어보드를 갖는 GPU의 일 구현의 블록도이다.
도 8은 분할 디스패치 작업 그룹의 스코어보드 추적의 일 구현의 블록도이다.
도 9는 분할 작업 그룹 디스패치를 수행하기 위한 방법의 일 구현을 예시하는 일반화된 흐름도이다.
도 10은 분할 작업 그룹의 웨이브프론트의 진행을 추적하기 위해 스코어보드를 사용하는 방법의 일 구현을 예시하는 일반화된 흐름도이다.
도 11은 분할 작업 그룹의 웨이브프론트를 할당하기 위한 계산 유닛을 선택하기 위한 방법의 일 구현을 예시하는 일반화된 흐름도이다.
도 12는 계산 유닛 사이의 리소스 경합을 최소화하도록 작업 그룹의 웨이브프론트를 디스패치하는 방법의 일 구현을 예시하는 일반화된 흐름도이다.
다음의 설명에서, 여기에 제시된 방법 및 메커니즘에 대한 철저한 이해를 제공하기 위해 수많은 특정 세부 사항이 설명된다. 그러나, 본 기술 분야의 숙련자는 이러한 특정 세부 사항 없이 다양한 구현이 실행될 수 있음을 인식해야 한다. 일부 예에서, 잘 알려진 구조, 구성요소, 신호, 컴퓨터 프로그램 명령어 및 기술은 여기에 설명된 접근법을 모호하게 하는 것을 피하기 위해 상세히 표시되지 않는다. 예시의 단순성 및 명료성을 위해, 도면에 도시되어 있는 요소는 반드시 일정한 비율로 그려진 것은 아님을 이해할 것이다. 예를 들어, 일부 요소의 치수는 다른 요소에 비해 과장될 수 있다.
다수의 계산 유닛으로의 "분할"(또는 대안적으로 "나눔") 작업 그룹 디스패치를 수행하기 위한 다양한 시스템, 장치, 방법 및 컴퓨터-판독 가능 매체가 본 명세서에 개시된다. 프로세서(예를 들어, 그래픽 처리 유닛(GPU))는 적어도 복수의 계산 유닛, 제어 로직 및 디스패치 유닛을 포함한다. 디스패치 유닛은 작업 그룹을 GPU의 계산 유닛으로 디스패치한다. 일반적으로, 전체 작업 그룹을 지원하기 위한 모든 리소스를 단일 계산 유닛에서 사용할 수 있는 경우 작업 그룹이 디스패치된다. 이러한 리소스는 적어도 벡터 및 스칼라 레지스터, 웨이브프론트 슬롯 및 로컬 데이터 공유(LDS) 공간을 포함한다. 그러나, 하드웨어는 웨이브프론트의 입도로 스레드를 실행하며, 여기서 웨이브프론트는 작업 그룹에 있는 스레드의 하위 집합이다. 하드웨어 실행 단위가 디스패치 단위보다 작기 때문에, 하드웨어가 작업 그룹 디스패치 요청을 거부하는 것이 일반적이지만 해당 작업 그룹을 형성하는 웨이브프론트의 하위 집합을 여전히 지원할 수 있다. 디스패치와 실행 입도 사이의 이러한 불일치는 특정 애플리케이션을 위한 프로세서에서 달성 가능한 TLP 및 WLP를 제한한다.
일 구현에서, 제어 로직은 복수의 계산 유닛 사이의 리소스 경합을 모니터링하고 리소스 경합에 기초하여 각각의 계산 유닛에 대한 부하율을 계산한다. 디스패치 유닛은 디스패치를 위한 작업 그룹을 수신하고 계산된 부하율에 기초하여 작업 그룹을 복수의 계산 유닛에 디스패치하는 방식을 결정한다. 작업 그룹이 계산 유닛의 현재 가용 리소스에 기초하여 단일 계산 유닛에 맞춰질 수 없는 경우, 디스패치 유닛은 작업 그룹을 그 개별 웨이브프론트로 분할하고 작업 그룹의 웨이브프론트를 상이한 계산 유닛들로 디스패치한다. 일 구현에서, 디스패치 유닛은 계산된 부하율에 기초하여 웨이브프론트를 계산 유닛들 중 특정 계산 유닛들에 디스패치하는 방식을 결정한다.
일 구현에서, 제어 로직은 분할 작업 그룹의 웨이브프론트의 실행 상태를 추적하기 위해 스코어보드에 연결된다. 제어 로직은 여러 계산 유닛에 디스패치된 웨이브프론트로 분할된 작업 그룹에 대해 스코어보드에 새로운 엔트리를 할당한다. 임의의 웨이브프론트가 배리어 명령어에 도달하면 대응하는 계산 유닛이 제어 로직에 표시를 전송한다. 이 표시의 수신에 응답하여, 제어 로직은 대응하는 스코어보드 엔트리에 배리어 획득 플래그 필드를 설정한다. 그 후, 계산 유닛은 다른 웨이브프론트가 배리어에 도달하면 신호를 전송한다. 제어 로직은 대응하는 스코어보드 엔트리에서 배리어 획득 카운트를 증분시키고, 배리어 획득 카운트가 작업 그룹의 총 웨이브프론트 수에 도달하면, 제어 로직은 웨이브프론트가 진행될 수 있도록 계산 유닛에 신호를 전송한다. 일 구현에서, 스코어보드 엔트리는 분할 작업 그룹의 웨이브프론트를 실행하는 계산 유닛을 식별하기 위한 계산 유닛 마스크를 포함한다.
이제, 도 1을 참조하면, 컴퓨팅 시스템(100)의 일 구현의 블록도가 도시되어 있다. 일 구현에서, 컴퓨팅 시스템(100)은 적어도 프로세서(105A-N), 입력/출력(I/O) 인터페이스(120), 버스(125), 메모리 제어기(들)(130), 네트워크 인터페이스(135) 및 메모리 디바이스(들)(140)를 포함한다. 다른 구현에서, 컴퓨팅 시스템(100)은 다른 컴포넌트를 포함하고 및/또는 컴퓨팅 시스템(100)은 다르게 배열된다. 프로세서(105A-N)는 시스템(100)에 포함된 임의의 수의 프로세서를 나타낸다.
일 구현에서, 프로세서(105A)는 중앙 처리 유닛(CPU)과 같은 범용 프로세서이다. 이 구현에서, 프로세서(105N)는 고도의 병렬 아키텍처를 갖는 데이터 병렬 프로세서이다. 데이터 병렬 프로세서에는 그래픽 처리 유닛(GPU), 디지털 신호 프로세서(DSP), 현장 프로그래밍 가능 게이트 어레이(FPGA), 주문형 집적 회로(ASIC) 등이 포함된다. 일부 구현에서, 프로세서(105B-N)는 다수의 데이터 병렬 프로세서를 포함한다. 각 데이터 병렬 프로세서는 여러 계산 유닛에 디스패치하기 위해 작업 그룹을 나눌 수 있다. 또한, 각 데이터 병렬 프로세서는 계산 유닛 사이의 리소스 경합을 최소화하기 위해 작업 그룹을 여러 계산 유닛으로 디스패치할 수 있다. 이들 및 다른 특징을 구현하기 위한 기술은 본 개시내용의 잔여 부분에서 보다 구체적으로 설명된다.
메모리 제어기(들)(130)는 프로세서(105A-N) 및 I/O 인터페이스(120)에 연결된 I/O 디바이스(도시되지 않음)에 의해 액세스 가능한 임의의 수 및 유형의 메모리 제어기를 나타낸다. 메모리 제어기(들)(130)는 임의의 수 및 유형의 메모리 디바이스(들)(140)에 연결된다. 메모리 디바이스(들)(140)는 임의의 수 및 유형의 메모리 디바이스를 나타낸다. 예를 들어, 메모리 디바이스(들)(140)의 메모리 유형은 동적 랜덤 액세스 메모리(DRAM), 정적 랜덤 액세스 메모리(SRAM), NAND 플래시 메모리, NOR 플래시 메모리, 강유전성 랜덤 액세스 메모리(FeRAM) 등을 포함한다.
I/O 인터페이스(120)는 임의의 수 및 유형의 I/O 인터페이스(예를 들어, 주변 컴포넌트 상호연결(PCI) 버스, PCI-익스텐디드(PCI-X), PCIE(PCIExpress) 버스, 기가비트 이더넷(GBE) 버스), 범용 직렬 버스(USB))를 나타낸다. 다양한 유형의 주변 기기(도시되지 않음)가 I/O 인터페이스(120)에 연결된다. 이러한 주변 기기에는 디스플레이, 키보드, 마우스, 프린터, 스캐너, 조이스틱 또는 다른 유형의 게임 제어기, 미디어 기록 디바이스, 외부 저장 디바이스, 네트워크 인터페이스 카드 등이 포함된다(그러나, 이에 제한되지는 않는다). 네트워크 인터페이스(135)는 네트워크를 통해 네트워크 메시지를 수신하고 전송하는 데 사용된다.
다양한 구현에서, 컴퓨팅 시스템(100)은 컴퓨터, 랩탑, 모바일 디바이스, 게임 콘솔, 서버, 스트리밍 디바이스, 웨어러블 디바이스, 또는 다양한 다른 유형의 컴퓨팅 시스템 또는 디바이스 중 임의의 것이다. 컴퓨팅 시스템(100)의 컴포넌트의 수는 구현마다 다르다는 점에 유의한다. 예를 들어, 다른 구현에서, 도 1에 도시되어 있는 수보다 더 많거나 더 적은 각 컴포넌트가 존재한다. 다른 구현에서, 컴퓨팅 시스템(100)은 도 1에 도시되지 않은 다른 컴포넌트를 포함한다는 점을 또한 유의한다. 추가로, 다른 구현에서, 컴퓨팅 시스템(100)은 도 1에 도시되어 있는 것과 다른 방식으로 구성된다.
이제, 도 2를 참조하면, 컴퓨팅 시스템(200)의 다른 구현의 블록도가 도시되어 있다. 일 구현에서, 시스템(200)은 GPU(205), 시스템 메모리(225) 및 로컬 메모리(230)를 포함한다. 시스템(200)은 또한 도면을 모호하게 하는 것을 피하기 위해 도시되지 않은 다른 컴포넌트를 포함한다. GPU(205)는 적어도 커맨드 프로세서(235), 제어 로직(240), 디스패치 유닛(250), 계산 유닛(255A-N), 메모리 제어기(220), 글로벌 데이터 쉐어(270), 레벨 1(L1) 캐시(265) 및 레벨 2(L2) 캐시(260)를 포함한다. 다른 구현에서, GPU(205)는 다른 컴포넌트를 포함하고, 예시된 컴포넌트 중 하나 이상을 생략하고, 단지 하나의 인스턴스가 도 2에 도시되어 있더라도 컴포넌트의 다수의 인스턴스를 갖고 및/또는 다른 적절한 방식으로 편성된다. 예를 들어, 다른 구현에서, GPU(205)는 다수의 디스패치 유닛을 포함한다.
다양한 구현에서, 컴퓨팅 시스템(200)은 임의의 다양한 유형의 소프트웨어 애플리케이션을 구현한다. 커맨드 프로세서(240)는 호스트 CPU(도시되지 않음)로부터 커맨드를 수신하고 디스패치 유닛(250)을 사용하여 계산 유닛(255A-N)에 커맨드를 발행한다. 계산 유닛(255A-N)에서 실행되는 커널 내의 스레드는 GPU(205) 내의 글로벌 데이터 쉐어(270), L1 캐시(265) 및 L2 캐시(260)에 데이터를 판독 및 기입한다. 도 2에 도시되어 있지는 않지만, 계산 유닛(255A-N)은 또한 각각의 계산 유닛(255A-N) 내에 하나 이상의 캐시 및/또는 로컬 메모리를 포함한다.
커맨드 프로세서(240)는 GPU(205)를 위한 다양한 작업을 수행한다. 예를 들어, 커맨드 프로세서(240)는 계산 작업, 직접 메모리 액세스(DMA)를 통한 데이터 이동 동작, 및 다양한 포스트-커널 정리 활동을 스케줄링한다. 제어 로직(240)은 GPU(205)의 리소스 사이의 리소스 경합을 모니터링하고, 디스패치 유닛(250)이 리소스 경합을 최소화하도록 계산 유닛(255A-N)에 웨이브프론트를 디스패치하는 방식을 결정하는 것을 돕는다. 일 구현에서, 제어 로직(240)은 계산 유닛(255A-N) 사이의 리소스 경합을 모니터링하기 위한 스코어보드(245) 및 성능 카운터(PC)(247A-N)를 포함한다. 성능 카운터(247A-N)는 벡터 산술 로직 유닛(VALU) 실행 대역폭, 스칼라 ALU(SALU) 실행 대역폭, 로컬 데이터 공유(LDS) 대역폭, 로드 스토어 버스 대역폭, 벡터 레지스터 파일(VRF) 대역폭, 스칼라 레지스터 파일(SRF) 대역폭, L1, L2, L3 캐시와 TLB를 포함하는 캐시 하위 시스템 용량 및 대역폭 및 기타 리소스 같은 리소스를 모니터링하기 위한 임의의 수의 성능 카운터를 나타낸다.
제어 로직(240)은 스코어보드(245)를 사용하여 다수의 계산 유닛(255A-N)으로 디스패치되는 분할 작업 그룹의 웨이브프론트를 모니터링한다. 예를 들어, 스코어보드(245)는 다수의 상이한 계산 유닛(255A-N)에서 실행되는 주어진 분할 작업 그룹의 상이한 웨이브프론트를 추적한다. 스코어보드(245)는 주어진 분할 작업 그룹에 대한 엔트리를 포함하고, 엔트리는 주어진 분할 작업 그룹의 웨이브프론트 수, 웨이브프론트가 실행되는 특정 계산 유닛, 작업 그룹 ID 등을 식별한다. 스코어보드 엔트리에는 임의의 웨이브프론트가 배리어에 도달 한 시기를 나타내는 배리어 동기화 인에이블 필드도 포함되어 있다. 웨이브프론트가 배리어에 도달하면 계산 유닛은 웨이브프론트가 지연되게 할 것이다. 스코어보드 엔트리에는 배리어에 도달한 웨이브프론트의 수를 추적하기 위해 배리어 획득 카운트가 포함된다. 배리어 획득 카운트가 주어진 작업 그룹의 웨이브프론트의 총 수에 도달하면, 제어 로직(240)은 웨이브프론트가 이제 진행될 수 있음을 관련 계산 유닛에 통지한다.
일 구현에서, 시스템(200)은 시스템 메모리(225)에 커널(227)의 2개의 컴파일된 버전을 저장한다. 예를 들어, 커널(227A)의 하나의 컴파일된 버전은 배리어 명령어를 포함하고 별도의 계산 유닛(255A-N)에서 실행되는 웨이브프론트들을 동기화하기 위해 중앙 메커니즘으로서 스코어보드(245)를 사용한다. 커널(227B)의 제2 컴파일된 버전은 별개의 계산 유닛(255A-N)에서 실행되는 웨이브프론트를 동기화하기 위해 메모리에 대한 글로벌 데이터 쉐어(270) 명령어 또는 원자 연산을 사용한다. 커널 227A와 커널 227B는 모두 애플리케이션의 바이너리에서 가용하며 실행 중에 가용하다. 커맨드 프로세서(235) 및 제어 로직(240)은 대응하는 작업 그룹의 웨이브프론트를 계산 유닛(255A-N)에 디스패치할 때 사용할 커널을 실행 중에 판정한다. 사용할 커널(227A 또는 227B)에 대한 판정은 전력 소비 목표, 성능 목표, 계산 유닛(255A-N) 사이의 리소스 경합 및/또는 기타 요인 중 하나 이상에 기초한다.
이제, 도 3을 참조하면, GPU(300)의 일 구현의 블록도가 도시되어 있다. GPU(300)에 대하여, 작업 그룹(WG)(302)의 디스패치를 고려 중이다. 4개의 웨이브프론트를 갖는 작업 그룹(302)의 예는 단지 예시적인 목적으로 도시되어 있는 것임을 이해해야 한다. 다른 구현에서, 작업 그룹은 4개 이외에 다른 수의 웨이브프론트를 갖는다. 추가로, 4개의 계산 유닛(310-313)을 갖는 GPU(300)의 예는 또한 단지 일 구현의 예시로서 의도된다. 다른 구현에서, GPU(300)는 4개 이외에 다른 수의 계산 유닛을 포함한다.
계산 유닛(310-313)의 현재 할당은 도 3의 우측에 도시되어 있다. 사용 중인 리소스 홀은 음영 직사각형으로 표시되고, 가용 리소스 홀은 비어 있는 직사각형으로 표시된다. 계산 유닛(310-313)의 현재 할당에서 알 수 있는 바와 같이, 개별 계산 유닛(310-313) 중 어느 것도 작업 그룹(302)의 모든 4개의 웨이브프론트를 맞추기에 충분한 가용 리소스를 가지고 있지 않다. 따라서, 전통적인 GPU(300)의 경우, 작업 그룹(302)의 디스패치가 지연될 것이다.
이제, 도 4를 참조하면, GPU(400)에서 작업 그룹(402)의 분할 디스패치의 일 구현의 블록도가 도시되어 있다. GPU(400)는 도 3에 도시되어 있는 GPU(300)와 유사하며, GPU(400)는 4개의 계산 유닛(410-413)을 포함하고, 작업 그룹(402)은 4개의 웨이브프론트를 포함한다. 그러나, 이 예는 단지 하나의 구현을 나타내는 것임을 이해해야 한다. 다른 구현에서, GPU(400) 및/또는 작업 그룹(402)은 다른 수의 컴포넌트를 갖는다.
그러나, 도 3에 도시되어 있는 예와는 대조적으로, GPU(400)는 작업 그룹(402)을 웨이브프론트 분할의 상이한 조합으로 나누고, 웨이브프론트를 상이한 계산 유닛(410-413)에 할당하여 작업 그룹(402)의 즉각적인 디스패치를 가능하게 할 수 있다. GPU(400)는 작업 그룹(402)을 웨이브프론트 분할의 상이한 조합으로 분할할 수 있으며, 실제 웨이브프론트 분할은 구현에 따라 달라진다는 것을 이해하여야 한다. 일 구현에서, 작업 그룹(402)의 웨이브프론트 0-2는 계산 유닛(412)에 할당되고 작업 그룹(402)의 웨이브프론트 3은 계산 유닛(410)에 할당된다. 작업 그룹(402)의 할당을 나눔으로써, 이는 계산 유닛이 작업 그룹(402)의 전체를 할당하기에 충분한 리소스를 가질 때까지 기다리지 않고 작업 그룹(402)을 즉시 할당할 수 있게 한다. 그 결과 GPU400에서 실행되는 애플리케이션에 대해 WLP(wavefront level parallelism) 및 TLP(thread level parallelism)가 높아진다.
이제, 도 5를 참조하면, 작업 그룹 디스패치 제어 로직(500)의 일 구현의 블록도가 도시되어 있다. 일 구현에서, 작업 그룹 디스패치 제어 로직(500)의 컴포넌트는 GPU(205)(도 2)의 제어 로직(240)에 포함된다. 작업 그룹 디스패치 제어 로직(500)은 분할 작업 그룹 디스패처(506)를 포함한다. 분할 작업 그룹 디스패처(506)는 작업 그룹이 단일 계산 유닛 내에 맞춰질 수 없는 경우, 작업 그룹 할당 실패 검출 유닛(502)으로부터 트리거를 수신하는 스코어보드 체커(508)를 포함한다. 스코어보드 체커(508)는 주어진 작업 그룹의 웨이브프론트에 맞추기 위해 호스트 GPU의 계산 유닛에 충분한 가용 리소스가 있는지를 결정하기 위해 맞춤 검출 유닛(510)에 쿼리한다. 일 구현에서, 맞춤 검출 유닛(510)은 웨이브프론트를 계산 유닛에 맞추기 위해 최대 맞춤(Max Fit)(510A) 접근, 균등 맞춤(Equal Fit)(510B) 접근, 또는 프로그래밍 가능 맞춤(510C) 접근을 사용한다. 최대 맞춤(510A) 접근은 동일한 계산 유닛에 여러 웨이브프론트를 할당하여 가장 적은 수의 계산 유닛에 웨이브프론트를 맞추기를 시도한다. 균등 맞춤(510B) 접근은 모든 계산 유닛에 웨이브프론트를 균등하게 분산하기를 시도한다. 프로그래밍 가능 맞춤(510C) 접근은 프로그래밍 가능 정책에 따라 웨이브프론트를 계산 유닛에 맞추기를 시도한다. 다른 구현에서, 맞춤 검출 유닛(510)은 웨이브프론트를 계산 유닛에 맞추기 위한 다른 접근을 사용한다. 다수의 계산 유닛 내에 충분한 가용 리소스가 있는 경우, 계산 유닛 선택기(512)는 피드백 메커니즘에 기초하여 주어진 작업 그룹을 가용 계산 유닛에 할당하는 방식을 결정한다. 이 피드백 메커니즘은 성능 카운터 값을 사용하여 GPU의 가용 계산 유닛에서 리소스 활용 및 리소스 경합을 추적한다.
일 구현에서, 계산 유닛 선택기(512)는 블록 516에 도시되어 있는 바와 같은 선택 메커니즘을 포함한다. 계산 유닛(CU) 선택기(512)는 주어진 작업 그룹의 웨이브프론트를 가용 계산 유닛에 할당하는 방식을 결정하는 데 사용하기 위해 다수의 선택 알고리즘 중 하나를 선택한다. 예를 들어, 블록 516에 도시되어 있는 바와 같이, 계산 유닛 선택기(512)는 주어진 작업 그룹의 웨이브프론트를 가용 계산 유닛에 할당하는 방식을 결정하기 위해 3개의 별개의 알고리즘 중에서 선택한다. 다른 구현에서, 계산 유닛 선택기(512)는 3개 이외에 다른 수의 알고리즘으로부터 선택한다.
제1 알고리즘은 주어진 작업 그룹의 웨이브프론트를 할당할 계산 유닛을 선택하는 라운드-로빈 선착순(RR-FCFS) 알고리즘이다. 제2 알고리즘은 성능 카운터의 피드백을 사용하여 모든 가용 계산 유닛 중에서 가장 적게 지연된 계산 유닛을 결정하는 최소 계산 지연 계산 유닛 알고리즘(FB-COMP)이다. 이 때, 분할 작업 그룹 디스패처(506)는 가장 적게 지연된 것으로 식별된 계산 유닛에 웨이브프론트를 할당한다. 제3 알고리즘은 주어진 작업 그룹의 웨이브프론트를 최소 메모리 지연 계산 유닛(FB-MEM)에 할당하기를 시도한다. 분할 작업 그룹 디스패처(506)는 성능 카운터를 사용하여 어느 계산 유닛이 가장 적게 메모리 지연되었는지를 결정한 다음, 분할 작업 그룹 디스패처(506)는 이들 식별된 계산 유닛에 웨이브프론트를 할당한다. 다른 구현에서, 다른 유형의 알고리즘이 사용된다.
구현에 따라, 사용되는 알고리즘 유형은 소프트웨어 및/또는 하드웨어에 의해 동적으로 조절된다. 한 구현에서 관리자가 사용되는 알고리즘 유형을 선택한다. 다른 구현에서, 사용자 애플리케이션이 사용되는 알고리즘의 유형을 선택한다. 사용자 애플리케이션이 어느 알고리즘을 선택할지에 대한 고정된 정책을 갖거나, 사용자 애플리케이션이 동작 조건에 기초하여 알고리즘 유형을 동적으로 조절한다. 다른 구현에서, 운영 체제(OS) 또는 드라이버가 작업 그룹의 웨이브프론트를 가용 계산 유닛에 할당하는 데 사용되는 알고리즘 유형을 선택한다. 다른 구현에서, 분할 작업 그룹 디스패치 알고리즘을 선택하는 다른 기술이 가능하고, 이들이 고려된다.
주어진 작업 그룹이 개별 웨이브프론트로 분할되고 여러 계산 유닛에 할당된 후, 분할 작업 그룹 디스패처(506)는 주어진 작업 그룹에 대한 스코어보드(514)에 엔트리를 할당한다. 분할 작업 그룹 디스패처(506)는 스코어보드 엔트리를 사용하여 상이한 계산 유닛에서 이들 웨이브프론트의 실행 진행을 추적한다. 스코어보드(514)는 구현에 따라 임의의 수의 엔트리를 갖는다. 예를 들어, 스코어보드 엔트리의 한 예가 상자(504)에 표시된다. 예를 들어, 일 구현에서, 스코어보드(514)의 각 스코어보드 엔트리는 가상 기계 식별자(VMID) 필드, 글로벌 작업 그룹 ID 필드, 작업 그룹 치수 필드, 작업 그룹 필드의 웨이브프론트 수, 작업 그룹에서 웨이브프론트가 할당된 계산 유닛을 식별하기 위한 계산 유닛 마스크 필드, 배리어에 도달한 웨이브프론트 수를 추적하는 배리어 카운트 필드, 적어도 하나의 웨이브프론트가 배리어에 도달했음을 나타내는 배리어 동기화 인에이블 필드를 포함한다. 다른 구현에서, 스코어보드 엔트리는 다른 필드를 포함하고/하거나 다른 적절한 방식으로 편성된다.
이제, 도 6을 참조하면, 피드백 기반 계산 유닛(CU) 선택 메커니즘(610)의 일 구현의 블록도가 도시되어 있다. 피드백 기반 CU 선택기(610)는 작업 그룹(WG) 할당 요청 버퍼(615) 및 성능 모니터 모듈(620)을 포함한다. 다른 구현에서, 피드백 기반 CU 선택기(610)는 다른 컴포넌트를 포함하고/하거나 다른 적절한 방식으로 구성된다. WG 할당 요청 버퍼(615)는 할당을 위해 수신된 작업 그룹을 저장한다. WG 할당 요청 버퍼(615)는 할당 요청을 성능 모니터 모듈(620)로 전달하며, 이 성능 모니터 모듈은 GPU의 가용 계산 유닛(CU)에 주어진 작업 그룹의 웨이브프론트를 할당하는 방식을 결정한다. 성능 모니터 모듈(620)은 주어진 작업 그룹의 웨이브프론트의 수 및 현재 가용 CU 리소스에 기초하여 WG 할당 요청 버퍼(615)에 적합 또는 부적합 표시를 전달한다. WG 할당 요청 버퍼(615)가 성능 모니터 모듈(620)로부터 적합 표시를 수신할 때, WG 할당 요청 버퍼(615)는 할당 확인을 디스패치 유닛(도시되지 않음)으로 전송한다.
일 구현에서, 성능 모니터 모듈(620)은 다양한 성능 카운터로부터 값을 수집하고, 이러한 값을 추적하기 위해 CU 레벨 및 SIMD 레벨 테이블을 구현한다. 다양한 구현에서 성능 카운터는 벡터 산술 로직 유닛(VALU) 실행 대역폭, 스칼라 ALU(SALU) 실행 대역폭, 로컬 데이터 공유(LDS) 대역폭, 로드 스토어 버스 대역폭, 벡터 레지스터 파일(VRF) 대역폭, 스칼라 레지스터 파일(SRF) 대역폭, 및 L1, L2, L3 캐시와 TLB를 포함하는 캐시 하위 시스템 용량 및 대역폭과 같은 리소스를 모니터링한다. CU 성능(perf) 비교기(635)는 주어진 디스패치-ID(예를 들어, 커널-ID)에 대한 각 CU의 부하율을 결정하기 위한 로직을 포함하고, CU 성능 비교기(635)는 계산된 부하율에 기초하여 바람직한 CU 목적지를 선택한다. 일 구현에서, 부하율은 현재 사용 중인 CU의 백분율 또는 현재 사용 중이거나 현재 할당된 주어진 리소스의 백분율로 계산된다. 일 구현에서, CU에 대한 부하율을 생성하기 위해 CU의 상이한 리소스의 부하율이 함께 가산된다. 일 구현에서, CU 전체에 대한 부하율을 생성하기 위해 상이한 리소스의 다양한 부하율에 상이한 가중 인자가 적용된다. 셰이더 프로세서 입력 리소스 할당(SPI-RA) 유닛(640)은 바람직한 CU(들) 상에 주어진 작업 그룹에 대한 리소스를 할당한다.
이제, 도 7을 참조하면, 계산 유닛(710A-N)에 연결된 분할 작업 그룹(WG) 스코어보드(720)를 갖는 GPU(700)의 일 구현의 블록도가 도시되어 있다. 일 구현에서, GPU(700)는 적어도 계산 유닛(710A-N) 및 분할 WG 디스패처(715)를 포함한다. GPU(700)는 또한 도면을 모호하게 하는 것을 피하기 위해 도시되지 않은 다양한 다른 컴포넌트를 포함한다. 계산 유닛(710A-N)은 임의의 수 및 유형의 계산 유닛을 나타낸다. 각각의 계산 유닛(710A-N)은 작업 항목을 병렬로 실행하기 위한 복수의 단일-명령어, 다중-데이터(SIMD) 유닛을 포함한다. 일 구현에서, 각각의 계산 유닛(710A-N)은 4개의 SIMD 유닛을 포함한다. 다른 구현에서, 각각의 계산 유닛(710A-N)은 4개 이외에 다른 수의 SIMD 유닛을 포함한다.
주어진 작업 그룹이 다수의 계산 유닛(710A-N)에 대한 디스패치를 위해 나누어질 때, 분할 WG 디스패처(715)는 분할 WG 스코어보드(720)를 사용하여 계산 유닛(710A-N) 상의 주어진 작업 그룹의 웨이브프론트의 실행을 추적한다. 계산 유닛(710)은 분할 WG의 임의의 웨이브프론트가 배리어 명령어에 도달할 때 배리어 동기화 인에이블 메시지를 스코어보드(720)로 전송한다. 스코어보드 엔트리의 배리어 획득 카운트 필드는 이 배리어에 도달하는 각 웨이브프론트에 대해 증분된다. 분할 WG의 모든 웨이브가 배리어에 도달하면, 스코어보드(720)는 분할 스코어보드 계산 유닛 마스크에서 식별된 각 계산 유닛(710A-N)에 알려 웨이브가 계속 실행될 수 있게 한다. 일 구현에서, 스코어보드(720)는 배리어 획득 메시지를 전송함으로써 각각의 계산 유닛(710A-N)에 알린다.
이제, 도 8을 참조하면, 분할 디스패치 작업 그룹의 스코어보드 추적의 일 구현의 블록도가 도시되어 있다. 일 구현에서, 6개의 웨이브프론트를 갖는 작업 그룹(805)은 GPU(800)의 계산 유닛(810A-H)의 다수의 계산 유닛으로 디스패치된다. 6개의 웨이브프론트를 갖는 작업 그룹(805)의 예는 단지 하나의 구현을 나타낸다는 점에 유의한다. 다른 구현에서, 작업 그룹(805)은 다른 수의 웨이브프론트를 갖는다. 또한, 8개의 계산 유닛(810A-H)을 갖는 GPU(800)의 예는 단지 하나의 구현을 나타내는 것임을 유의한다. 다른 구현에서, GPU(800)는 다른 수의 계산 유닛을 갖는다.
작업 그룹(805)의 6개의 웨이브프론트가 계산 유닛(810A-H)의 단일 계산 유닛에 맞춰질 수 없기 때문에, 이러한 6개의 웨이브프론트는 나누어져 여러 계산 유닛에 할당된다. 도 8에 도시되어 있는 바와 같이, 웨이브프론트 0-1은 계산 유닛(810A)에 할당되고, 웨이브프론트 2-3은 계산 유닛(810F)에 할당되고, 웨이브프론트 4-5는 계산 유닛(810G)에 할당된다. 다른 구현에서, 작업 그룹(805)의 웨이브프론트는 다른 적절한 방식으로 계산 유닛(810A-H)에 할당되어, 작업 그룹의 6개의 웨이브프론트 모두가 계산 유닛(810A-H)의 가용 리소스 홀에 할당된다.
일 구현에서, 스코어보드(820)는 계산 유닛(810A-H) 상의 작업 그룹(805)의 웨이브프론트의 실행을 추적하기 위해 사용된다. 도 8의 하단에 도시되어 있는 스코어보드(820A-F)는 6개의 상이한 시점에서 스코어보드(820)를 나타내기 위한 것으로, 스코어보드(820A)는 이른 시점을 나타내고, 스코어보드(820F)는 늦은 시점을 나타내고 다른 스코어보드(820B-E)는 그 사이의 시점을 나타낸다. 스코어보드(820A)는 계산 유닛(810A-H)에 웨이브프론트를 할당한 직후의 작업 그룹(805)의 상태를 나타낸다. 가상 기계 식별자(VMID) 필드는 운영 체제에서 지정한 바와 같은 고유 애플리케이션 컨텍스트 식별자를 지정한다. 여러 애플리케이션은 구별되는 VMID를 사용하여 GPU에서 실행할 수 있다. 작업 그룹(WG) ID 및 글로벌 WGID 필드는 작업 그룹(805)을 식별하는 반면, 웨이브 수 필드는 작업 그룹(805)의 웨이브프론트의 수를 지정한다. 계산 유닛 마스크는 어느 계산 유닛(810A-H)이 작업 그룹(805)으로부터 웨이브프론트를 할당받았는지를 나타낸다. 배리어 카운트 필드는 배리어 동기화 인에이블 필드가 설정되었을 때 얼마나 많은 웨이브프론트가 배리어에 도달하였는지를 나타낸다. 스코어보드(820A)는 작업 그룹(805)의 어떤 웨이브프론트도 아직 배리어에 도달하지 않았음을 나타낸다.
스코어보드(820B)는 제1 웨이브프론트가 배리어 명령어에 도달했음을 나타낸다. 웨이브프론트가 배리어 명령어에 도달한 결과, 계산 유닛의 대응하는 SIMD 유닛은 배리어 동기화 인에이블 표시를 스코어보드(820B)로 전송한다. 배리어 동기화 인에이블 표시를 수신한 것에 응답하여, 스코어보드(820B)의 배리어 동기화 인에이블 필드가 설정된다. 스코어보드(820C)는 스코어보드(820B)에 의해 표현된 시점 이후의 시점을 나타낸다. 이 설명의 목적상 웨이브프론트 wv0 및 wv1이 이 후속 시점에 배리어에 닿았다고 가정한다. 웨이브프론트 wv0 및 wv1이 배리어에 닿는 것에 응답하여, 계산 유닛(810A)의 SIMD 유닛은 배리어 카운트 업데이트 표시를 스코어보드(820C)로 전송한다. 배리어 카운트 업데이트 표시를 수신한 결과, 스코어보드(820C)는 작업 그룹(805)에 대한 배리어 카운트를 2로 증분시킨다.
스코어보드(820D)는 스코어보드(820C)에 의해 표현된 시점 이후의 시점을 나타낸다. 이 설명의 목적상 웨이브프론트 wv4 및 wv5가 이 후속 시점에 배리어에 닿았다고 가정한다. 웨이브프론트 wv4 및 wv5가 배리어에 닿는 것에 응답하여, 계산 유닛(810G)의 SIMD 유닛은 배리어 카운트 업데이트 표시를 스코어보드(820D)로 전송한다. 스코어보드(820D)는 계산 유닛(810G)으로부터 배리어 카운트 업데이트 표시를 수신한 후 작업 그룹(805)에 대한 배리어 카운트를 4로 증분시킨다.
스코어보드(820E)는 스코어보드(820D)에 의해 표현된 시점 이후의 시점을 나타낸다. 이 설명의 목적상 웨이브프론트 wv2 및 wv3이 이 후속 시점에 배리어에 닿았다고 가정한다. 웨이브프론트 wv2 및 wv3이 배리어에 닿는 것에 응답하여, 계산 유닛(810F)의 SIMD 유닛은 배리어 카운트 업데이트 표시를 스코어보드(820E)로 전송한다. 배리어 카운트 업데이트 표시를 수신한 결과, 스코어보드(820E)는 작업 그룹(805)에 대한 배리어 카운트를 6으로 증분시킨다.
스코어보드(820F)는 스코어보드(820E)에 의해 표시된 시점 이후의 시점을 나타낸다. 웨이브프론트의 수와 동일한 배리어 카운트 필드로 표시된 것처럼 모든 웨이브가 이 시점까지 배리어에 닿았으므로 제어 로직은 배리어가 작업 그룹(805)의 모든 웨이브프론트에 대해 배리어가 획득되었다는 것을 계산 유닛 마스크 필드에서 식별된 모든 계산 유닛에 신호한다. 결과적으로, 이러한 계산 유닛의 SIMD 유닛은 웨이브프론트가 계속 실행되도록 할 수 있다. 배리어 카운트 필드 및 배리어 동기화 인에이블 필드는 스코어보드(820F)에 대한 엔트리에 나타난 바와 같이 작업 그룹(805)의 모든 웨이브프론트가 배리어를 획득한 후에 지워진다.
이제, 도 9를 참조하면, 분할 작업 그룹 디스패치를 수행하기 위한 방법(900)의 일 구현이 도시되어 있다. 설명의 목적을 위해, 이 구현의 단계와 도 10 내지 도 12의 단계는 순서대로 표시된다. 그러나, 설명된 방법의 다양한 구현에서, 설명된 요소 중 하나 이상이 동시에 또는 도시되어 있는 것과 다른 순서로 수행되거나 완전히 생략된다는 점에 유의한다. 다른 추가 요소도 필요에 따라 수행된다. 본 명세서에 설명된 임의의 다양한 시스템 또는 장치는 방법(900)을 구현하도록 구성된다.
GPU의 디스패치 유닛은 단일 계산 유닛의 가용 리소스에 맞지 않는 디스패치를 위한 작업 그룹을 수신한다(블록 905). 다음으로, 디스패치 유닛은 작업 그룹이 나누어지는 경우 작업 그룹의 개별 웨이브프론트가 여러 계산 유닛에 맞춰질 수 있는지 여부를 결정한다(조건 블록 910). 작업 그룹이 개별 웨이브프론트로 나누었음에도 불구하고 작업 그룹이 가용 계산 유닛 리소스에 맞춰질 수 없는 경우(조건 블록 910, "아니오" 분기), 디스패치 유닛은 더 많은 계산 유닛 리소스를 사용할 수 있을 때까지 대기한다(블록 915). 블록 915 이후, 방법(900)은 조건 블록 910으로 돌아간다. 작업 그룹이 나누어짐으로써 가용 계산 유닛 리소스에 맞춰질 수 있다면(조건 블록 910, "예" 분기), 디스패치 유닛은 여러 계산 유닛에 걸쳐 작업 그룹의 할당을 분할한다(블록 920).
블록 920 이후, GPU는 스코어보드를 사용하여 분할 작업 그룹의 웨이브프론트의 진행을 추적한다(블록 925). 분할 작업 그룹의 웨이브프론트의 진행 상황을 추적하기 위해 스코어보드를 사용하는 일 예가 방법(1000)(도 10)에 관한 설명에서 아래에 더 자세히 설명된다. 블록 925 이후, 방법(900)이 종료된다.
이제, 도 10을 참조하면, 분할 작업 그룹의 웨이브프론트의 진행을 추적하기 위해 스코어보드를 사용하는 방법(1000)의 일 구현이 도시되어 있다. 디스패치 유닛은 GPU의 여러 계산 유닛에 개별 웨이브프론트로 나누어져 할당된 작업 그룹에 대한 새로운 스코어보드 엔트리를 할당한다(블록 1005). 또한, 제어 로직은 작업 그룹의 개별 웨이브프론트가 할당된 계산 유닛을 나타내기 위해 스코어보드 엔트리의 계산 유닛 마스크 필드를 설정한다(블록 1010). 그 후, 작업 그룹의 개별 웨이브프론트의 실행이 시작된다(블록 1015). 작업 그룹의 웨이브프론트가 동기화되어야 하는 경우(조건 블록 1017, "예" 분기), 계산 유닛은 웨이브프론트가 배리어에 도달했는지 여부를 모니터링한다(조건 블록 1020). 작업 그룹의 웨이브프론트가 동기화될 필요가 없는 경우(조건 블록 1017, "아니오" 분기), 제어 로직 및 계산 유닛은 웨이브프론트가 서로 독립적으로 실행될 수 있게 한다(블록 1018). 블록 1018 이후, 방법 1000이 종료된다.
웨이브프론트 중 임의의 것이 배리어에 도달하면(조건 블록 1020, "예" 분기), 대응하는 계산 유닛은 표시를 스코어보드에 전송한다(블록 1025). 표시 수신에 응답하여, 스코어보드 엔트리의 배리어 동기화 인에이블 필드가 설정된다(블록 1030). 웨이브프론트 중 어느 것도 배리어에 도달하지 않은 경우(조건 블록 1020, "아니오" 분기), GPU는 웨이브프론트의 진행 상황을 계속 모니터링한다(블록 1035). 블록 1035 이후, 방법 1000은 조건 블록 1020으로 돌아간다.
블록 1030 이후에, 제어 로직은 주어진 배리어에 닿는 각 웨이브프론트에 대해 스코어보드 엔트리에서 배리어 획득 카운트를 증분시킨다(블록 1040). 다음으로, 제어 로직은 배리어 획득 카운트가 작업 그룹의 총 웨이브프론트 수에 도달했는지를 결정한다(조건 블록 1045). 배리어 획득 카운트가 작업 그룹의 총 웨이브프론트 수에 도달하면(조건 블록 1045, "예" 분기), 그 후 제어 로직은 배리어 획득 카운트와 스코어보드 엔트리의 배리어 동기화 인에이블 필드를 재설정하고 계산 마스크 필드에 의해 식별된 계산 유닛에 신호하여 웨이브프론트가 진행될 수 있게 한다(블록 1050). 배리어 획득 카운트가 작업 그룹의 총 웨이브프론트 수에 도달하지 않은 경우(조건 블록 1045, "아니오" 분기) 방법(1000)은 조건 블록 1020으로 돌아간다. 최종 배리어에 도달하면(조건 블록 1055, "예" 분기) 방법(1000)이 종료된다. 그렇지 않고, 최종 배리어에 도달하지 않은 경우(조건 블록 1055, "아니오" 분기), 방법(1000)은 조건 블록 1020으로 돌아간다.
이제, 도 11을 참조하면, 분할 작업 그룹의 웨이브프론트를 할당하기 위한 계산 유닛을 선택하기 위한 방법(1100)의 일 구현이 도시되어 있다. 제어 로직은 GPU의 계산 유닛에 걸친 리소스 활용 및 경합을 모니터링한다(블록 1105). 모니터링되는 리소스는 적어도 벡터 산술 로직 유닛(VALU) 실행 대역폭, 스칼라 ALU(SALU) 실행 대역폭, 로컬 데이터 공유(LDS) 대역폭, 로드 스토어 버스 대역폭, 벡터 레지스터 파일(VRF) 대역폭, 스칼라 레지스터 파일(SRF) 대역폭, 및 L1, L2, L3 캐시와 TLB를 포함하는 캐시 하위 시스템 용량 및 대역폭을 포함한다. 일 구현에서, 제어 로직은 성능 카운터를 사용하여 GPU의 계산 유닛에 걸친 리소스 활용 및 경합을 모니터링한다.
다음으로, 디스패치 유닛은 디스패치를 위한 작업 그룹을 수신한다(블록 1110). 디스패치 유닛은 리소스 경합 및 작업 그룹의 예측된 거동에 기초하여 작업 그룹의 웨이브프론트를 다양한 계산 유닛으로 디스패치하는 방식을 결정한다(블록 1115). 구현에 따라 디스패치 유닛은 작업 그룹의 웨이브프론트를 GPU의 계산 유닛으로 디스패치하는 방식을 결정하기 위해 다양한 정책 중 임의의 것을 사용한다. 구현에 따라 디스패치 유닛은 기존 디스패치, 단일 유닛 작업 그룹 디스패치 또는 분할 작업 그룹 디스패치를 수행하기로 판정한다. 또한, 사용되는 정책은 최대 맞춤 정책, 균등 맞춤 정책 및 프로그래밍 가능 맞춤 정책을 포함한다(그러나 이에 제한되지는 않는다). 최대 맞춤 정책은 최소의 계산 유닛 수에 웨이브를 할당한다. 균등 맞춤 정책은 후보 계산 유닛간에 분할 작업 그룹의 웨이브프론트를 균등하게 분산하려고 한다. 프로그래밍 가능 맞춤 정책은 계산 유닛에 걸친 부하율을 최소화하기 위해 분할 작업 그룹의 웨이브프론트를 계산 유닛에 분산시킨다. 블록 1115 이후, 방법(1100)이 종료된다.
이제, 도 12를 참조하면, 계산 유닛 사이의 리소스 경합을 최소화하기 위해 작업 그룹의 웨이브프론트를 디스패치하는 방법의 일 구현이 도시되어 있다. GPU의 제어 로직은 추적할 리소스를 결정하고 프로그래밍 가능 컨텍스트 설정 레지스터를 통해 이러한 리소스를 구성한다(블록 1205). 일 구현에서, 프로그래밍 가능 컨텍스트 설정 레지스터는 커널 모드 드라이버에 의해 업데이트된다. 다음으로, 제어 로직은 복수의 프로그램 카운터로 리소스 활용을 추적한다(블록 1210). 프로그램 카운터에 의해 모니터링되는 리소스의 예는 적어도 VALU 실행 대역폭, SALU 실행 대역폭, LDS 대역폭, 로드 스토어 버스 대역폭, VRF 대역폭, SRF 대역폭, L1, L2 및 L3 캐시 및 TLB를 포함한 캐시 하위 시스템 용량 및 대역폭을 포함한다.
그 후, 제어 로직은 프로그램 가능한 간격으로 프로그램 카운터를 샘플링한다(블록 1215). 다음으로, 제어 로직은 각각의 선택된 리소스에 대한 각각의 계산 유닛의 부하율을 계산한다(블록 1220). 일 구현에서, 제어 로직은 디스패치 ID 당 각각의 선택된 리소스에 대한 각 계산 유닛의 부하율을 계산한다. 일 구현에서, 디스패치 ID는 커맨드 프로세서에 의한 실행을 위해 디스패치된 커널을 식별하는 단조적으로 증가하는 수이다. 일 구현에서, 각 애플리케이션 컨텍스트 또는 VMID는 자체적으로 단조적으로 증가하는 디스패치 ID 카운터를 가지고 있다. 그 다음, 디스패치 유닛은 GPU의 계산 유닛으로 디스패치할 새로운 작업 그룹을 검출한다(블록 1225). 디스패치 유닛은 각 계산 유닛의 부하율을 확인한다(블록 1230). 다음으로, 디스패치 유닛은 디스패치를 위한 후보(들)로서 각각의 선택된 리소스에 대해 가장 낮은 부하율을 갖는 계산 유닛(들)을 선택한다(블록 1235). 그 후, 디스패치 유닛은 작업 그룹의 웨이브프론트를 선택된 계산 유닛(들)에 디스패치한다(블록 1240). 블록 1240 이후, 방법(1200)이 종료된다.
다양한 구현에서, 소프트웨어 애플리케이션의 프로그램 명령어는 여기에 설명된 방법 및/또는 메커니즘을 구현하는 데 사용된다. 예를 들어, 범용 또는 특수 목적 프로세서에 의해 실행 가능한 프로그램 명령어가 고려된다. 다양한 구현에서 이러한 프로그램 명령어는 고수준 프로그래밍 언어로 표현된다. 다른 구현에서, 프로그램 명령어는 고수준 프로그래밍 언어에서 바이너리, 중간 또는 기타 형식으로 컴파일된다. 대안적으로, 하드웨어의 거동 또는 설계를 설명하는 프로그램 명령어가 작성된다. 이러한 프로그램 명령어는 C와 같은 고수준 프로그래밍 언어로 표현된다. 또는 Verilog와 같은 하드웨어 설계 언어(HDL)가 사용된다. 다양한 구현에서, 프로그램 명령어는 임의의 다양한 비일시적 컴퓨터-판독 가능 저장 매체에 저장된다. 저장 매체는 프로그램 실행을 위해 컴퓨팅 시스템에 프로그램 명령어를 제공하기 위해 사용 동안 컴퓨팅 시스템에 의해 액세스 가능하다. 일반적으로 말해서, 이러한 컴퓨팅 시스템은 프로그램 명령어를 실행하도록 구성된 적어도 하나 이상의 메모리 및 하나 이상의 프로세서를 포함한다.
앞서 설명한 구현은 구현의 비제한적인 예일 뿐이라는 점이 강조되어야 한다. 상기 개시내용을 완전히 이해하면 본 기술 분야의 숙련자는 수많은 변형 및 수정을 명백히 알 수 있을 것이다. 다음의 청구범위는 이러한 모든 변형 및 수정을 포함하도록 해석되기를 의도한다.
Claims (20)
- 프로세서로서,
명령어를 실행하도록 구성된 회로를 포함하는 복수의 계산 유닛; 및
작업 그룹을 상기 복수의 계산 유닛으로 디스패치하도록 구성된 회로를 포함하는 디스패치 유닛을 포함하고;
상기 프로세서는:
상기 복수의 계산 유닛의 현재 가용 리소스에 기초하여 작업 그룹이 단일 계산 유닛 내에 맞춰지지 않는다는 결정에 응답하여, 상기 디스패치 유닛으로부터의 디스패치를 위해 상기 작업 그룹을 개별 웨이브프론트로 나누도록;
상기 복수의 계산 유닛 사이의 리소스 경합을 추적하기 위해 복수의 성능 카운터를 모니터링하도록;
상기 복수의 성능 카운터에 기초하여 각각의 선택된 리소스에 대한 각각의 계산 유닛의 부하율을 계산하도록;
각각의 선택된 리소스에 대해 가장 낮은 부하율을 갖는 계산 유닛을 디스패치를 위한 후보로서 선택하도록; 그리고
상기 작업 그룹의 상기 웨이브프론트를 상기 선택된 계산 유닛으로 디스패치하도록 구성되는, 프로세서. - 청구항 1에 있어서, 상기 디스패치 유닛으로부터 2개 이상의 계산 유닛으로 디스패치하기 위해 상기 작업 그룹을 2개 이상의 웨이브프론트의 그룹들로 나누는 것은:
상기 작업 그룹의 제1 웨이브프론트를 제1 계산 유닛으로 디스패치하는 것; 및
상기 작업 그룹의 제2 웨이브프론트를 제2 계산 유닛으로 디스패치하는 것을 포함하는, 프로세서. - 청구항 1에 있어서, 상기 프로세서는 스코어보드를 더 포함하고,
상기 프로세서는:
상기 작업 그룹의 웨이브프론트들을 추적하기 위해 상기 스코어보드에 엔트리를 할당하도록;
상기 엔트리에서 주어진 배리어에 도달한 상기 작업 그룹의 웨이브프론트의 수를 추적하도록; 그리고
주어진 배리어에 도달한 상기 작업 그룹의 상기 웨이브프론트 수가 상기 작업 그룹의 총 웨이브프론트 수와 같을 때 상기 작업 그룹의 웨이브프론트가 진행될 수 있게 하도록 2개 이상의 계산 유닛에 신호를 전송하도록 더 구성되는, 프로세서. - 청구항 3에 있어서, 상기 2개 이상의 계산 유닛은 상기 엔트리의 계산 유닛 마스크 필드에 의해 식별되는, 프로세서.
- 삭제
- 삭제
- 청구항 1에 있어서, 상기 복수의 성능 카운터는 벡터 산술 로직 유닛(VALU) 실행 대역폭, 스칼라 ALU(SALU) 실행 대역폭, 로컬 데이터 공유(LDS) 대역폭, 로드 스토어 버스 대역폭, 벡터 레지스터 파일(VRF) 대역폭, 스칼라 레지스터 파일(SRF) 대역폭, 캐시 하위 시스템 용량, 캐시 대역폭 및 변환 색인 버퍼(TLB) 대역폭 중 하나 이상을 추적하는, 프로세서.
- 방법으로서,
작업 그룹을 복수의 계산 유닛으로 디스패치하는 단계;
상기 복수의 계산 유닛의 현재 가용 리소스에 기초하여 작업 그룹이 단일 계산 유닛 내에 맞춰지지 않는다는 결정에 응답하여, 디스패치를 위해 상기 작업 그룹을 개별 웨이브프론트로 나누는 단계;
상기 복수의 계산 유닛 사이의 리소스 경합을 추적하기 위해 복수의 성능 카운터를 모니터링하는 단계;
상기 복수의 성능 카운터에 기초하여 각각의 선택된 리소스에 대한 각각의 계산 유닛의 부하율을 계산하는 단계;
각각의 선택된 리소스에 대해 가장 낮은 부하율을 갖는 계산 유닛을 디스패치를 위한 후보로서 선택하는 단계; 그리고
상기 작업 그룹의 상기 웨이브프론트를 상기 선택된 계산 유닛으로 디스패치하는 단계를 포함하는, 방법. - 청구항 8에 있어서, 2개 이상의 계산 유닛으로의 디스패치를 위해 상기 작업 그룹을 2개 이상의 웨이브프론트의 그룹들로 나누는 단계는:
상기 작업 그룹의 제1 웨이브프론트를 제1 계산 유닛으로, 프로세서에 의해 디스패치하는 단계; 및
상기 작업 그룹의 제2 웨이브프론트를 제2 계산 유닛으로, 상기 프로세서에 의해 디스패치하는 단계를 포함하고, 상기 제2 웨이브프론트는 상기 제1 웨이브프론트와 상이하고, 상기 제2 계산 유닛은 상기 제1 계산 유닛과 상이한, 방법. - 청구항 8에 있어서,
상기 작업 그룹의 웨이브프론트들을 추적하기 위해 스코어보드에 엔트리를, 프로세서 의해 할당하고;
상기 엔트리에서 주어진 배리어에 도달한 웨이브프론트의 수를, 상기 프로세서에 의해 추적하고; 그리고
주어진 배리어에 도달한 상기 웨이브프론트 수가 상기 작업 그룹의 총 웨이브프론트 수와 같을 때 웨이브프론트가 진행될 수 있게 하도록 2개 이상의 계산 유닛에 신호를, 상기 프로세서에 의해 전송하는 단계를 더 포함하는, 방법. - 청구항 10에 있어서, 상기 계산 유닛은 계산 유닛 마스크 필드에 의해 식별되는, 방법.
- 삭제
- 삭제
- 청구항 8에 있어서, 상기 복수의 성능 카운터는 벡터 산술 로직 유닛(VALU) 실행 대역폭, 스칼라 ALU(SALU) 실행 대역폭, 로컬 데이터 공유(LDS) 대역폭, 로드 스토어 버스 대역폭, 벡터 레지스터 파일(VRF) 대역폭, 스칼라 레지스터 파일(SRF) 대역폭, 캐시 하위 시스템 용량, 캐시 대역폭 및 변환 색인 버퍼(TLB) 대역폭 중 하나 이상을 추적하는, 방법.
- 시스템으로서,
메모리;
상기 메모리에 연결된 청구항 1, 2, 3, 4, 및 7 중 어느 하나의 청구항에 기재된 바와 같은 프로세서를 포함하는, 시스템. - 삭제
- 삭제
- 삭제
- 삭제
- 삭제
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/965,231 US20190332420A1 (en) | 2018-04-27 | 2018-04-27 | Feedback guided split workgroup dispatch for gpus |
US15/965,231 | 2018-04-27 | ||
PCT/US2019/019610 WO2019209405A1 (en) | 2018-04-27 | 2019-02-26 | Feedback guided split workgroup dispatch for gpus |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20210002646A KR20210002646A (ko) | 2021-01-08 |
KR102635453B1 true KR102635453B1 (ko) | 2024-02-13 |
Family
ID=65763803
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020207033965A KR102635453B1 (ko) | 2018-04-27 | 2019-02-26 | Gpu를 위한 피드백 기반 분할 작업 그룹 디스패치 |
Country Status (6)
Country | Link |
---|---|
US (1) | US20190332420A1 (ko) |
EP (1) | EP3785113B1 (ko) |
JP (1) | JP7335270B2 (ko) |
KR (1) | KR102635453B1 (ko) |
CN (1) | CN112074809A (ko) |
WO (1) | WO2019209405A1 (ko) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113032112A (zh) * | 2019-12-25 | 2021-06-25 | 上海商汤智能科技有限公司 | 资源调度方法及装置、电子设备和存储介质 |
GB2592609B (en) * | 2020-03-03 | 2023-05-31 | Imagination Tech Ltd | Resource allocation in a parallel processing system |
US12001929B2 (en) * | 2020-04-01 | 2024-06-04 | Samsung Electronics Co., Ltd. | Mixed-precision neural processing unit (NPU) using spatial fusion with load balancing |
CN112214443B (zh) * | 2020-10-22 | 2021-12-03 | 上海壁仞智能科技有限公司 | 设置于图形处理器中的二次卸载装置和方法 |
KR102530348B1 (ko) * | 2020-11-17 | 2023-05-09 | 이화여자대학교 산학협력단 | Gpgpu의 스레드 블록 스케줄링 방법 및 장치 |
US11892972B2 (en) * | 2021-09-08 | 2024-02-06 | Arm Limited | Synchronization mechanisms for a multi-core processor using wait commands having either a blocking or a non-blocking state |
US12033275B2 (en) | 2021-09-29 | 2024-07-09 | Advanced Micro Devices, Inc. | System and methods for efficient execution of a collaborative task in a shader system |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007264794A (ja) * | 2006-03-27 | 2007-10-11 | Fujitsu Ltd | 並列分散処理プログラム及び並列分散処理システム |
US20130243329A1 (en) | 2012-03-15 | 2013-09-19 | Herta Security, S.L. | Parallel object detection method for heterogeneous multithreaded microarchitectures |
US20140156975A1 (en) * | 2012-11-30 | 2014-06-05 | Advanced Micro Devices, Inc. | Redundant Threading for Improved Reliability |
US20140181467A1 (en) * | 2012-12-21 | 2014-06-26 | Advanced Micro Devices, Inc. | High level software execution mask override |
US20180115496A1 (en) * | 2016-10-21 | 2018-04-26 | Advanced Micro Devices, Inc. | Mechanisms to improve data locality for distributed gpus |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH1115799A (ja) * | 1997-06-26 | 1999-01-22 | Hitachi Ltd | 並列処理システム |
JP3482897B2 (ja) | 1999-01-20 | 2004-01-06 | 日本電気株式会社 | クラスタ型並列計算機システムおよびプロセッサ間バリア同期方法 |
JP2006268166A (ja) | 2005-03-22 | 2006-10-05 | Fuji Xerox Co Ltd | 情報処理装置、方法、及びプログラム |
JP2008003907A (ja) | 2006-06-23 | 2008-01-10 | Hitachi Ltd | 情報処理振分制御方法およびそのコンピュータ |
US9529632B2 (en) * | 2009-09-03 | 2016-12-27 | Advanced Micro Devices, Inc. | Interlocked increment memory allocation and access |
US20110219221A1 (en) * | 2010-03-03 | 2011-09-08 | Kevin Skadron | Dynamic warp subdivision for integrated branch and memory latency divergence tolerance |
KR101710910B1 (ko) * | 2010-09-27 | 2017-03-13 | 삼성전자 주식회사 | 프로세싱 유닛의 동적 자원 할당을 위한 방법 및 장치 |
US8933942B2 (en) * | 2011-12-08 | 2015-01-13 | Advanced Micro Devices, Inc. | Partitioning resources of a processor |
US9009712B2 (en) * | 2012-03-16 | 2015-04-14 | Advanced Micro Devices, Inc. | GPU distributed work-item queuing |
US9105125B2 (en) * | 2012-12-05 | 2015-08-11 | Advanced Micro Devices, Inc. | Load balancing for optimal tessellation performance |
US10235732B2 (en) * | 2013-12-27 | 2019-03-19 | Intel Corporation | Scheduling and dispatch of GPGPU workloads |
US10310861B2 (en) * | 2017-04-01 | 2019-06-04 | Intel Corporation | Mechanism for scheduling threads on a multiprocessor |
US10528478B2 (en) * | 2017-05-30 | 2020-01-07 | Ati Technologies Ulc | Page table management for differing virtual and physical address page alignment |
-
2018
- 2018-04-27 US US15/965,231 patent/US20190332420A1/en active Pending
-
2019
- 2019-02-26 JP JP2020560305A patent/JP7335270B2/ja active Active
- 2019-02-26 WO PCT/US2019/019610 patent/WO2019209405A1/en active Application Filing
- 2019-02-26 EP EP19710880.6A patent/EP3785113B1/en active Active
- 2019-02-26 CN CN201980028689.XA patent/CN112074809A/zh active Pending
- 2019-02-26 KR KR1020207033965A patent/KR102635453B1/ko active IP Right Grant
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2007264794A (ja) * | 2006-03-27 | 2007-10-11 | Fujitsu Ltd | 並列分散処理プログラム及び並列分散処理システム |
US20130243329A1 (en) | 2012-03-15 | 2013-09-19 | Herta Security, S.L. | Parallel object detection method for heterogeneous multithreaded microarchitectures |
US20140156975A1 (en) * | 2012-11-30 | 2014-06-05 | Advanced Micro Devices, Inc. | Redundant Threading for Improved Reliability |
US20140181467A1 (en) * | 2012-12-21 | 2014-06-26 | Advanced Micro Devices, Inc. | High level software execution mask override |
US20180115496A1 (en) * | 2016-10-21 | 2018-04-26 | Advanced Micro Devices, Inc. | Mechanisms to improve data locality for distributed gpus |
Also Published As
Publication number | Publication date |
---|---|
WO2019209405A1 (en) | 2019-10-31 |
EP3785113B1 (en) | 2024-04-03 |
US20190332420A1 (en) | 2019-10-31 |
JP2021522593A (ja) | 2021-08-30 |
KR20210002646A (ko) | 2021-01-08 |
CN112074809A (zh) | 2020-12-11 |
JP7335270B2 (ja) | 2023-08-29 |
EP3785113A1 (en) | 2021-03-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102635453B1 (ko) | Gpu를 위한 피드백 기반 분할 작업 그룹 디스패치 | |
CN110796588B (zh) | 同时计算和图形调度 | |
US8234652B2 (en) | Performing setup operations for receiving different amounts of data while processors are performing message passing interface tasks | |
US8127300B2 (en) | Hardware based dynamic load balancing of message passing interface tasks | |
CN103207774B (zh) | 用于解决线程发散的方法和系统 | |
CN103197916A (zh) | 用于源操作数收集器高速缓存的方法和装置 | |
CN103197953A (zh) | 推测执行和回滚 | |
US9069664B2 (en) | Unified streaming multiprocessor memory | |
US10817338B2 (en) | Dynamic partitioning of execution resources | |
US20090064166A1 (en) | System and Method for Hardware Based Dynamic Load Balancing of Message Passing Interface Tasks | |
KR102586988B1 (ko) | 다중-커널 웨이브프론트 스케줄러 | |
KR20110075296A (ko) | 멀티코어 시스템 상에서 단위 작업을 할당하는 방법 및 그 장치 | |
CN103425534A (zh) | 在许多应用之间共享的图形处理单元 | |
US10203988B2 (en) | Adaptive parallelism of task execution on machines with accelerators | |
WO2016202154A1 (zh) | 一种gpu资源的分配方法及系统 | |
WO2018075529A1 (en) | System and method for dynamically allocating resources among gpu shaders | |
CN103294449A (zh) | 发散操作的预调度重演 | |
US9442759B2 (en) | Concurrent execution of independent streams in multi-channel time slice groups | |
US9753770B2 (en) | Register-type-aware scheduling of virtual central processing units | |
CN103197917A (zh) | 计算线程阵列粒度执行抢占 | |
CN103218259A (zh) | 计算任务的调度和执行 | |
US20150220442A1 (en) | Prioritizing shared memory based on quality of service | |
US20200264879A1 (en) | Enhanced scalar vector dual pipeline architecture with cross execution | |
US11307903B2 (en) | Dynamic partitioning of execution resources | |
US11507522B2 (en) | Memory request priority assignment techniques for parallel processors |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
E902 | Notification of reason for refusal | ||
AMND | Amendment | ||
E902 | Notification of reason for refusal | ||
E601 | Decision to refuse application | ||
X091 | Application refused [patent] | ||
AMND | Amendment | ||
X701 | Decision to grant (after re-examination) | ||
GRNT | Written decision to grant |