System and Method for Out-of-Order Resource Allocation and Deallocation in a Threaded Machine
First Claim
1. A method, comprising:
- using a computer to perform;
allocating one of a plurality of resources on behalf of one of a plurality of threads;
updating a data structure to indicate that the one of the plurality of resources has been allocated to the one of the plurality of threads, wherein the data structure comprises a plurality of sequentially addressable elements;
deallocating the one of the plurality of resources after the resource has been released by the one of the plurality of threads; and
updating the data structure to indicate that the one of the plurality of resources has been deallocated;
wherein at least one of said allocating or said deallocating updates an element of the data structure other than an element sequentially adjacent to an element updated in a most recent previous allocation or deallocation operation.
1 Assignment
0 Petitions
Accused Products
Abstract
A system and method for managing the dynamic sharing of processor resources between threads in a multi-threaded processor are disclosed. Out-of-order allocation and deallocation may be employed to efficiently use the various resources of the processor. Each element of an allocate vector may indicate whether a corresponding resource is available for allocation. A search of the allocate vector may be performed to identify resources available for allocation. Upon allocation of a resource, a thread identifier associated with the thread to which the resource is allocated may be associated with the allocate vector entry corresponding to the allocated resource. Multiple instances of a particular resource type may be allocated or deallocated in a single processor execution cycle. Each element of a deallocate vector may indicate whether a corresponding resource is ready for deallocation. Examples of resources that may be dynamically shared between threads are reorder buffers, load buffers and store buffers.
56 Citations
20 Claims
-
1. A method, comprising:
using a computer to perform; allocating one of a plurality of resources on behalf of one of a plurality of threads; updating a data structure to indicate that the one of the plurality of resources has been allocated to the one of the plurality of threads, wherein the data structure comprises a plurality of sequentially addressable elements; deallocating the one of the plurality of resources after the resource has been released by the one of the plurality of threads; and updating the data structure to indicate that the one of the plurality of resources has been deallocated; wherein at least one of said allocating or said deallocating updates an element of the data structure other than an element sequentially adjacent to an element updated in a most recent previous allocation or deallocation operation. - View Dependent Claims (2, 3, 4, 5, 6, 7, 8, 9, 10)
-
11. A processor, comprising:
-
a plurality of resources accessible to a plurality of threads executing on the processor; and a select unit configured to; allocate one of the plurality of resources on behalf of one of the plurality of threads; update a data structure instantiated in a memory accessible to the processor to indicate that the one of the plurality of resources has been allocated to the one of the plurality of threads, wherein the data structure comprises a plurality of sequentially addressable elements; deallocate the one of the plurality of resources after the resource has been released by the one of the plurality of threads; and update the data structure to indicate that the one of the plurality of resources has been deallocated; wherein at least one of said allocate or said deallocate updates an element of the data structure other than an element sequentially adjacent to an element updated in a most recent previous allocation or deallocation operation. - View Dependent Claims (12, 13, 14, 15, 16)
-
-
17. A system, comprising:
-
a processor; and a memory coupled to the processor; wherein the processor comprises a select unit configured to; allocate one of a plurality of resources on behalf of one of a plurality of threads; update a data structure instantiated in the memory to indicate that the one of the plurality of resources has been allocated to the one of the plurality of threads, wherein the data structure comprises a plurality of sequentially addressable elements; deallocate the one of the plurality of resources after the resource has been released by the one of the plurality of threads; and update the data structure to indicate that the one of the plurality of resources has been deallocated; wherein at least one of said allocate or said deallocate updates an element of the data structure other than an element sequentially adjacent to an element updated in a most recent previous allocation or deallocation operation. - View Dependent Claims (18, 19, 20)
-
Specification