Resource management subsystem that maintains fairness and order
First Claim
1. A method for managing requests for common resources in a processing pipeline, the method comprising:
- receiving a first request, from a process executing on a first processor, for a first common resource;
receiving a second request for a second common resource;
determining that the first common resource and the second common resource are not available for allocation;
in response, delaying servicing the first request and the second request;
causing a first entry associated with the first request to be created in replay buffer, wherein the first entry in the replay buffer includes at least one program instruction for performing one or more replay operations that execute the first request;
subsequent to delaying servicing the first request, receiving a third request for the first common resource;
subsequent to receiving the third request, determining the first common resource has become available for allocation;
making the first common resource available to the first request, prior to making the first common resource available to the third request;
determining that one or more sleeping access requests are waiting for the second common resource;
as a result, identifying the second common resource as a scarce resource;
determining that the second common resource is now available for allocation;
waking up a single access request included in the one or more sleeping access requests; and
making the second common resource available to the single access request.
1 Assignment
0 Petitions
Accused Products
Abstract
One embodiment of the present disclosure sets forth an effective way to maintain fairness and order in the scheduling of common resource access requests related to replay operations. Specifically, a streaming multiprocessor (SM) includes a total order queue (TOQ) configured to schedule the access requests over one or more execution cycles. Access requests are allowed to make forward progress when needed common resources have been allocated to the request. Where multiple access requests require the same common resource, priority is given to the older access request. Access requests may be placed in a sleep state pending availability of certain common resources. Deadlock may be avoided by allowing an older access request to steal resources from a younger resource request. One advantage of the disclosed technique is that older common resource access requests are not repeatedly blocked from making forward progress by newer access requests.
10 Citations
21 Claims
-
1. A method for managing requests for common resources in a processing pipeline, the method comprising:
-
receiving a first request, from a process executing on a first processor, for a first common resource; receiving a second request for a second common resource; determining that the first common resource and the second common resource are not available for allocation; in response, delaying servicing the first request and the second request; causing a first entry associated with the first request to be created in replay buffer, wherein the first entry in the replay buffer includes at least one program instruction for performing one or more replay operations that execute the first request; subsequent to delaying servicing the first request, receiving a third request for the first common resource; subsequent to receiving the third request, determining the first common resource has become available for allocation; making the first common resource available to the first request, prior to making the first common resource available to the third request; determining that one or more sleeping access requests are waiting for the second common resource; as a result, identifying the second common resource as a scarce resource; determining that the second common resource is now available for allocation; waking up a single access request included in the one or more sleeping access requests; and making the second common resource available to the single access request. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)
-
-
13. A subsystem for managing requests for common resources, the subsystem comprising:
-
a processor configured to implement a processing pipeline; and a total order queue (TOQ) coupled to the processing pipeline that performs the steps of; receiving a first request for a first common resource; receiving a second request for a second common resource; determining that the first common resource and the second common resource are not available for allocation; in response, delaying servicing the first request and the second request; causing a first entry associated with the first request to be created in a replay buffer, wherein the first entry in the replay buffer includes at least one program instruction for performing one or more replay operations that execute the first request; subsequent to delaying servicing the first request, receiving a third request for the first common resource; subsequent to receiving the third request, determining that the first common resource has become available for allocation; making the first common resource available to the first request, prior to making the first common resource available to the third request; determining that one or more sleeping access requests are waiting for the second common resource; as a result, identifying the second common resource as a scarce resource; determining that the second common resource is now available for allocation; waking up a single access request included in the one or more sleeping access requests; and making the second common resource available to the single access request. - View Dependent Claims (14, 15, 16, 17, 18, 19, 20)
-
-
21. A computing device, comprising:
-
a processor; and a total order queue (TOQ) that is coupled to the processor to perform the steps of; receiving a first request for a first common resource; receiving a second request for a second common resource; determining that the first common resource and the second common resource are not available for allocation; in response, delaying servicing the first request and the second request; causing a first entry associated with the first request to be created in a replay buffer, wherein the first entry in the replay buffer includes at least one program instruction for performing one or more replay operations that execute the first request; subsequent to delaying servicing the first request, receiving a third request for the first common resource; subsequent to receiving the third request, determining that the first common resource has become available for allocation; making the first common resource available to the first request, prior to making the first common resource available to the third request; determining that one or more sleeping access requests are waiting for the second common resource; as a result, identifying the second common resource as a scarce resource; determining that the second common resource is now available for allocation; waking up a single access request included in the one or more sleeping access requests; and making the second common resource available to the single access request.
-
Specification