Advances in computer technology have led to increasing numbers of components being placed on a computer chip. Processor architecture has advanced from having one processor per chip to having multiple processors on a computer chip. Each processor may be multi-stranded. In a multi-stranded processor, two or more hardware threads of execution (strands) may concurrently exist on the processor. In some multi-stranded architectures, two or more hardware threads executing on a processor may each have their own registers, while functional units, such as an execution unit, are shared. In a processor configured for chip multiprocessing (CMP), two or more processor cores exist on the same processor chip. While each core may have a first level cache, the cores may share a second level cache. Strands from a first core execute independently of strands from a second core, though they may interact through shared memory, including the second level cache. A processor may combine chip multiprocessing and hardware multi-stranding, having two or more multi-stranded cores on a single processor.
Moreover, processor chips may now have one or more processor cores, hardware threads of execution (strands), execution pipelines, caches, pipes to caches, pipes to memory, floating point units, and other processor components. Components may be related in various ways, and associated with other components in one-to-one, one-to-many, or many-to-many associations. For example, multiple hardware threads may be associated with a single core, a core and a first level cache may be associated with each other, and multiple cores may be associated with a second level cache. A core may have exclusive use of an associated floating point unit, or multiple cores may share access to a floating point unit.
The increased complexity of computer processors may add complexity to software and logic that manages access to the various components on a multiprocessing system. One technique that has been employed to manage resource allocation is the use of processor sets. Processor sets is an abstraction provided by an operating system that allows a program to designate a set of processors and assign software threads to run on the specified set. While adding complexity to the application program, this mechanism is limited in its ability to control the numerous aspects of a multiprocessor system, or adapt to variations in multiprocessor architecture.
Generally, it is desirable to employ improved techniques for assigning software threads to hardware components, and grouping components in a computer system, and in particular a multi-stranded computer system. Therefore, it is with respect to these considerations and others that the present invention has been made.