IP Library Granted Patent US 8,732,713
Granted Patent B2
US 8,732,713 · App. 13/247,819 · Granted May 20, 2014

Thread group scheduler for computing on a parallel thread processor

Inventors: Brett W. Coon (San Jose, CA); John R. Nickolls (Los Altos, CA); John Erik Lindholm (Saratoga, CA); Robert J. Stoll (Los Altos, CA); Nicholas Wang (Saratoga, CA); Jack Hilaire Choquette (Palo Alto, CA)
Assignee: NVIDIA Corporation
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 8,732,713
App. No.
13/247,819
Granted
May 20, 2014
Kind
B2
Abstract

A parallel thread processor executes thread groups belonging to multiple cooperative thread arrays (CTAs). At each cycle of the parallel thread processor, an instruction scheduler selects a thread group to be issued for execution during a subsequent cycle. The instruction scheduler selects a thread group to issue for execution by (i) identifying a pool of available thread groups, (ii) identifying a CTA that has the greatest seniority value, and (iii) selecting the thread group that has the greatest credit value from within the CTA with the greatest seniority value.

Claims (46)

1. A computer-implemented method for scheduling thread groups for execution on a parallel processing unit configured to process a plurality of currently launched cooperative thread arrays (CTAs), the method comprising:

identifying a pool of thread groups from the plurality of currently launched CTAs, wherein each thread group in the pool of thread groups is available and can be issued for execution on the parallel processing unit;

identifying a first CTA within the plurality of currently launched CTAs based on a seniority value that reflects an amount of time elapsed since the first CTA was launched; and

selecting from within the first CTA a first thread group to be issued for execution on the parallel processing unit based on a credit value that reflects an amount of processing operations completed by the first thread group.

2. The computer-implemented method of claim 1 , further comprising causing the first thread group to be issued for execution on the parallel processing unit.

3. The computer-implemented method of claim 1 , wherein each CTA within the plurality of currently launched CTAs is associated with a seniority value, and further comprising updating the seniority value associated with each of the CTAs within the plurality of currently launched CTAs based on a current cycle of the parallel processing unit.

4. The computer-implemented method of claim 3 , wherein updating the seniority values associated with the CTAs within the plurality of currently launched CTAs comprises:

determining based on the current cycle of the parallel processing unit that the seniority values associated with the CTAs within the plurality of currently launched CTAs should be incremented; and

incrementing the seniority value associated with each of the CTAs within the plurality of currently launched CTAs.

5. The computer-implemented method of claim 3 , wherein each of the CTAs within the plurality of currently launched CTAs includes a pointer to a register that stores a seniority value associated with the CTA, and wherein updating the seniority values associated with the CTAs within the plurality of currently launched CTAs comprises:

determining based on the current cycle associated with the parallel processing unit that the seniority values associated with the CTAs within the plurality of currently launched CTAs should be rotated; and

rotating the seniority value associated with each of the CTAs within the plurality of currently launched CTAs by incrementing the pointer included in each of the CTAs other than the first CTA, and resetting the pointer included in the first CTA.

6. The computer-implemented method of claim 1 , further comprising updating the credit values associated with one or more thread groups within the first CTA by:

dividing the credit value associated with the first thread group by two; and

incrementing credit values associated with other thread groups within the first CTA.

7. The computer-implemented method of claim 1 , wherein identifying the pool of thread groups that are available to be issued for execution on the parallel processing unit comprises identifying thread groups that (i) are not stalled by a hardware-imposed latency, (ii) are not stalled by a math or memory latency, and (iii) are not stalled by a synchronization latency.

8. A non-transitory computer-readable medium including instructions that, when executed by a processing unit, cause the processing unit to schedule thread groups for execution on a parallel processing unit configured to process a plurality of currently launched cooperative thread arrays (CTAs), by performing the steps of:

identifying a pool of thread groups from the plurality of currently launched CTAs, wherein each thread group in the pool of thread groups is available and can be issued for execution on the parallel processing unit;

identifying a first CTA within the plurality of currently launched CTAs based on a seniority value that reflects an amount of time elapsed since the first CTA was launched; and

selecting from within the first CTA a first thread group to be issued for execution on the parallel processing unit based on a credit value that reflects an amount of processing operations completed by the first thread group.

9. The non-transitory computer-readable medium of claim 8 , further comprising the step of causing the first thread group to be issued for execution on the parallel processing unit.

10. The non-transitory computer-readable medium of claim 8 , wherein each CTA within the plurality of currently launched CTAs is associated with a seniority value, and further comprising the step of updating the seniority value associated with each of the CTAs within the plurality of currently launched CTAs based on a current cycle of the parallel processing unit.

11. The non-transitory computer-readable medium of claim 10 , wherein the step of updating the seniority values associated with the CTAs within the plurality of currently launched CTAs comprises:

determining based on the current cycle of the parallel processing unit that the seniority values associated with the CTAs within the plurality of currently launched CTAs should be incremented; and

incrementing the seniority value associated with each of the CTAs within the plurality of currently launched CTAs.

12. The non-transitory computer-readable medium of claim 10 , wherein each of the CTAs within the plurality of currently launched CTAs includes a pointer to a register that stores a seniority value associated with the CTA, and wherein the step of updating the seniority values associated with the CTAs within the plurality of currently launched CTAs comprises:

determining based on the current cycle associated with the parallel processing unit that the seniority values associated with the CTAs within the plurality of currently launched CTAs should be rotated; and

rotating the seniority value associated with each of the CTAs within the plurality of currently launched CTAs by incrementing the pointer included in each of the CTAs other than the first CTA, and resetting the pointer included in the first CTA.

13. The non-transitory computer-readable medium of claim 8 , further comprising the step of updating the credit values associated with one or more thread groups within the first CTA by:

dividing the credit value associated with the first thread group by two; and

incrementing credit values associated with other thread groups within the first CTA.

14. The non-transitory computer-readable medium of claim 8 , wherein the step of identifying the pool of thread groups that are available to be issued for execution on the parallel processing unit comprises identifying thread groups that (i) are not stalled by a hardware-imposed latency, (ii) are not stalled by a math or memory latency, and (iii) are not stalled by a synchronization latency.

15. A computing device configured to schedule thread groups for execution on a parallel processing unit that is configured to process a plurality of currently launched cooperative thread arrays (CTAs), the computing device comprising:

a scheduling unit configured to:

identify a pool of thread groups from the plurality of currently launched CTAs, wherein each thread group in the pool of thread groups is available and can be issued for execution on the parallel processing unit;

identify a first CTA within the plurality of currently launched CTAs based on a seniority value that reflects an amount of time elapsed since the first CTA was launched; and

select from within the first CTA a first thread group to be issued for execution on the parallel processing unit based on a credit value that reflects an amount of processing operations completed by the first thread group.

16. The computing device of claim 15 , wherein each CTA within the plurality of currently launched CTAs is associated with a seniority value, and wherein the scheduling unit is further configured to update the seniority value associated with each of the CTAs within the plurality of currently launched CTAs based on a current cycle of the parallel processing unit.

17. The computing device of claim 16 , wherein the seniority values associated with the CTAs within the plurality of currently launched CTAs are updated by either (i) incrementing the seniority value associated with each of the CTAs within the plurality of currently launched CTAs, or (ii) incrementing a pointer included in each of the CTAs, other than a pointer included in the first CTA, and resetting the pointer included in the first CTA.

18. The computing device of claim 15 , wherein the scheduling unit is further configured to update the credit values associated with one or more thread groups within the first CTA by:

dividing the credit value associated with the first thread group by two; and

incrementing credit values associated with other thread groups within the first CTA.

19. The computing device of claim 15 , wherein the scheduling unit is configured to update the pool of thread groups that are available to be issued for execution on the parallel processing unit by identifying thread groups that (i) are not stalled by a hardware-imposed latency, (ii) are not stalled by a math or memory latency, and (iii) are not stalled by a synchronization latency.

20. The computing device of claim 15 , wherein each of the CTAs within the plurality of currently launched CTAs includes a pointer to a register that stores a seniority value associated with the CTA, and wherein updating the seniority values associated with the CTAs within the plurality of currently launched CTAs comprises:

determining based on the current cycle associated with the parallel processing unit that the seniority values associated with the CTAs within the plurality of currently launched CTAs should be rotated; and

rotating the seniority value associated with each of the CTAs within the plurality of currently launched CTAs by incrementing the pointer included in each of the CTAs other than the first CTA, and resetting the pointer included in the first CTA.

Assignments (1)
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 12, 2012
From: COON, BRETT W.; NICKOLLS, KATHLEEN ELLIOT; LINDHOLM, JOHN ERIK; STOLL, ROBERT J.; WANG, NICHOLAS; CHOQUETTE, JACK HILAIRE
To: NVIDIA CORPORATION
Reel/Frame 027523/0026 →
Continuity (2)
Provisional Application 61387911 · Sep 29, 2010
Related Publication 20120110586A1 · May 3, 2012