Abstract:
The present disclosure relates to resource management of a multi-threaded system by controlling when thread state is stored to memory and, more specifically, to attempting to increase the speed in which task switching occurs by controlling whether or not thread state stored to memory.

Description:
BACKGROUND  
       [0001]     1. Field  
         [0002]     The present disclosure relates to resource management of a multi-threaded system by controlling when thread state is stored to memory and, more specifically, to attempting to increase the speed in which task switching occurs by controlling whether or not thread state stored to memory.  
         [0003]     2. Background Information  
         [0004]     Many programming languages, operating systems, and other software development environments support what are called “threads” of execution. Threads are often similar to processes, in that both usually represent a single sequence of instructions executed in parallel with other sequences, either by time slicing or multiprocessing. Threads are often a way for a program to split itself into two or more simultaneously running tasks. For example, a common use of threads is having one thread paying attention to the graphical user interface, while others do a long calculation in the background. As a result, the application more readily responds to user&#39;s interaction.  
         [0005]     Threads are usually distinguished from traditional multi-tasking processes in that processes are typically independent, carry considerable state information, and interact only through system-provided inter-process communication mechanisms. Multiple threads, on the other hand, typically share the state information of a single process, share memory and other resources directly. On operating systems that have special facilities for threads, it is typically faster for the system to context switch between different threads in the same process than to switch between different processes.  
         [0006]     An advantage of a multi-threaded program may be that it can operate faster on computer systems that have multiple CPUs, or across a cluster of machines. This is because the threads of the program often naturally lend themselves for truly concurrent execution.  
         [0007]     A context switch is the computing process of storing and restoring the state of a processor (the context) such that multiple processes can share a single processor resource. The context switch is an essential feature of a multitasking operating system. Context switches are usually computationally intensive and much of the design of operating systems is to optimize the use of context switches.  
         [0008]     Context switches usually involve the following steps, assuming process P 1  is running on the processor and process P 2  is the next process to run on the processor:  
         [0009]     First, the execution of P 1  is halted.  
         [0010]     Second, the context of P 1  is stored somewhere in memory (usually on the stack of P 1 , or on the operating-system defined thread information structure). The context of the processor will typically contain the value of registers such as the program counter, processor control and general purpose registers.  
         [0011]     Third, the context of P 2  is retrieved from memory (usually on the stack of P 2 , or on the system structure associated with P 2 ).  
         [0012]     Finally, processing begins from the location contained in the program counter (the line of code at which P 2  was interrupted).  
         [0013]     Context switches are costly due to the fact that no actual process execution occurs while the state of the first process is stored and the state of the second process is loaded. If the processes contains a large number of threads (i.e. the processes are multi-threaded) the amount of state information needed to be saved and loaded may be large.  
         [0014]     The amount of time needed to save the state information is generally limited by the amount of bandwidth available on the memory bus. For example, if the processor can only save X-bits per processor clock cycle via the memory bus and the state information needed to be saved is 10,000×-bits, the processor will not be able to execute any process instructions for at least 10,000 clock cycles, as the context switch between the two processes occurs. A need therefore exists to decrease the amount of time wasted during a context switch. 
     
    
     BRIEF DESCRIPTION OF THE DRAWINGS  
       [0015]     Subject matter is particularly pointed out and distinctly claimed in the concluding portions of the specification. The claimed subject matter, however, both as to organization and the method of operation, together with objects, features and advantages thereof, may be best understood by a reference to the following detailed description when read with the accompanying drawings in which:  
         [0016]      FIG. 1  is a flow chart illustrating an embodiment of thread management system in accordance with the claimed subject matter;  
         [0017]      FIG. 2  is a flow chart illustrating another embodiment of thread management system in accordance with the claimed subject matter; and  
         [0018]      FIG. 3  is a block diagram illustrating an embodiment of thread management apparatus and system in accordance with the claimed subject matter. 
     
    
     DETAILED DESCRIPTION  
       [0019]     In the following detailed description, numerous details are set forth in order to provide a thorough understanding of the present claimed subject matter. However, it will be understood by those skilled in the art that the claimed subject matter may be practiced without these specific details. In other instances, well-known methods, procedures, components, and circuits have not been described in detail so as to not obscure the claimed subject matter.  
         [0020]      FIG. 1  is a flow chart illustrating an embodiment of thread management system in accordance with the claimed subject matter. Block  110  illustrates that a request to switch tasks may be detected. In one embodiment the request may be received by a software component, such as, for example, the operating system or device driver. In another embodiment, the request may be received by a hardware component, such as, for example, a thread dispatcher circuit or a thread monitor circuit.  
         [0021]     Block  120  illustrates that the Master Thread or Threads may be instructed to halt processing and save the state of the threads. Master threads may be threads or hardware devices that create new Worker Threads. Worker Threads, conversely, may be threads that do not spawn new threads and typically process small units of work, such as, for example in an embodiment involving graphics processing a worker thread may involve shading a pixel.  
         [0022]     In one embodiment, only the Master Threads may be halted; thereby preventing them from creating more Worker Threads. Any existing Worker Threads may be allowed to continue executing. Typically the state of the threads may be saved from the registers of the processor(s) to dynamic random access memory (DRAM), or another higher latency memory device.  
         [0023]     Block  130  illustrates that as the Master Threads are saving their state, the rate at which Worker Threads are naturally completing may be monitored. In one embodiment, this monitoring may occur substantially simultaneously, or, in another embodiment, periodically, or in a time sharing fashion. In one embodiment, the thread monitoring may be accomplished utilizing a hardware mechanism primarily utilized for the purpose of thread scheduling.  
         [0024]     Block  140  illustrates that a determination may be made as to whether or not the Worker Threads are completing at a faster rate that their state can be saved. In one embodiment the rate of thread retirement may be used to estimate the rate of state retirement, that is, the rate at which state information is finished being used and therefore no longer needs to be saved.  
         [0025]     If the Worker Threads are completing at a rate faster than the rate at which their state could be saved, the Worker Threads may be allowed to continue processing, as illustrated by Block  130 . In one embodiment, the rate at which a thread&#39;s state may be saved may be limited by the memory bandwidth.  
         [0026]     If the Worker Threads are completing at a rate slower than the rate at which their state could be saved, the Worker Threads may be halted, as illustrated by Block  150 . The state of the now halted Worker Threads may be saved utilizing a more conventional technique.  
         [0027]     In one embodiment, short executing threads may be allowed to complete naturally. As the shorter executing threads naturally complete, the technique illustrated by  FIG. 1  may dynamically adapt to the runtime characteristics of the current thread population. The longer executing threads may then be forcibly evicted. In an embodiment where the processor(s) supports variable size thread states the thread state retirement calculation may take that into account when making the determination of Block  140 .  
         [0028]      FIG. 2  is a flow chart illustrating another embodiment of thread management system in accordance with the claimed subject matter. The embodiment of  FIG. 2  may be an adaptation of the previously described embodiment in which variable rates of completion or state information per thread may be allowed, and possibly estimated.  
         [0029]     Block  210  illustrates that the rate at which Worker Threads complete may be monitored or otherwise estimated. In one embodiment the amount of state information associated with each Worker Thread may be monitored or otherwise estimated.  
         [0030]     Block  220  illustrates that an instruction to halt and save the master Thread sates may be received. In one embodiment this may occur as described above in regards to Block  120  of  FIG. 1 .  
         [0031]     Block  225  illustrates that, unlike the embodiment illustrated by  FIG. 1  where all or no Worker Threads were halted, the order in which the Worker Threads of  FIG. 2  may be halted and saved may be prioritized. In one embodiment, the Worker Threads retirement order may be prioritized by the rate of estimated completion. In another embodiment, the prioritization may be based upon the amount of state information needed to be saved. In yet another embodiment, another prioritization technique may be used. In one embodiment, the Worker Threads may be segregated into classes or groups. While in another embodiment, the Worker Threads may be individually prioritized.  
         [0032]     In one embodiment, the Worker Threads with a low rate of state information and low rate of completion may be scheduled to be halted and saved first, while threads of an opposite nature may be scheduled to be halted and saved last. In another embodiment, involving multiple logical processors, the threads may be prioritized based upon which logical processor they are executing on.  
         [0033]     Block  230  illustrates that the actual rate of Worker Thread completion may be monitored. Block  240  illustrates that a determination is made whether or not the threads are completing faster that their state can be saved or was predicted.  
         [0034]     Block  245  illustrates that, in one embodiment, if the threads are completing faster than their state can be saved or was predicted, the thread retirement order may be reprioritized. In another embodiment, no reprioritization may occur or be attempted. Block  230  illustrates that the rate of completion may continue to be monitored.  
         [0035]     Block  250  illustrates that, if the Worker Threads are completing at a rate slower than the rate at which their state could be saved, the Worker Threads may be halted. The state of the now halted Worker Threads may be saved utilizing a more conventional technique. In one embodiment, all Worker Threads may be saved or merely the next Worker Thread in the retirement order.  
         [0036]      FIG. 3  is a block diagram illustrating an embodiment of thread management apparatus  301  and system  300  in accordance with the claimed subject matter. In one embodiment, apparatus  301  may include Thread Dispatcher Circuit  320 , Thread Monitor Circuit  330  and Processor  310 .  
         [0037]     In one embodiment, Thread Dispatcher Circuit  320  may be capable of starting, halting, and/or saving the state of threads. In various embodiments, the Thread Dispatcher Circuit may be capable of performing the actions detailed, as described above, in regard to Blocks  110 ,  120 , &amp;  150  of  FIG. 1 , and Blocks  220 ,  225 , &amp;  250  of  FIG. 2 .  
         [0038]     In one embodiment, Thread Monitor Circuit  330  may be capable of monitoring the rate at which threads are naturally completing or retiring. In various embodiments, the Thread Monitor Circuit may be capable of performing the actions detailed, as described above, in regard to Blocks  130  &amp;  140  of  FIG. 1 , and Blocks  210 ,  225 ,  230 ,  240 , &amp;  245  of  FIG. 2 .  
         [0039]     In one embodiment, processor  310  may be a single chip multiprocessor capable of executing a plurality of threads.  FIG. 3  illustrates such an embodiment wherein processor  310  is comprised of an array of processors of size i by j, illustrated by processors  3100  through  31   ij . It is understood that the number of processors need not be arranged in an array or any rectangular fashion. It is also understood that in one embodiment, the processor  310  may include a single core processor, a single physical core processor but with multiple logical cores, or a variety of multi-core processor configurations.  
         [0040]     In one embodiment, the processor  310  may include a specialized purpose graphics processor. In one embodiment, the processor  310  may be a general purpose processor. In another embodiment, the processor may include a fixed function media processor where all threads are assumed to run for a fixed period of time. In one specific embodiment the register state of the processor may be 128 KB, 256 KB, or even higher.  
         [0041]     In one embodiment, apparatus  301  may be integrated as a single integrated circuit or, conversely, as separate components. In one embodiment, system  300  may include apparatus  301  and a memory  390  which is capable of storing the state of the threads executing on the processor  310 .  
         [0042]     The techniques described herein are not limited to any particular hardware or software configuration; they may find applicability in any computing or processing environment. The techniques may be implemented in hardware, software, firmware or a combination thereof. The techniques may be implemented in programs executing on programmable machines such as mobile or stationary computers, personal digital assistants, and similar devices that each include a processor, a storage medium readable or accessible by the processor (including volatile and non-volatile memory and/or storage elements), at least one input device, and one or more output devices. Program code is applied to the data entered using the input device to perform the functions described and to generate output information. The output information may be applied to one or more output devices.  
         [0043]     Each program may be implemented in a high level procedural or object oriented programming language to communicate with a processing system. However, programs may be implemented in assembly or machine language, if desired. In any case, the language may be compiled or interpreted.  
         [0044]     Each such program may be stored on a storage medium or device, e.g. compact disk read only memory (CD-ROM), digital versatile disk (DVD), hard disk, firmware, non-volatile memory, magnetic disk or similar medium or device, that is readable by a general or special purpose programmable machine for configuring and operating the machine when the storage medium or device is read by the computer to perform the procedures described herein. The system may also be considered to be implemented as a machine-readable or accessible storage medium, configured with a program, where the storage medium so configured causes a machine to operate in a specific manner. Other embodiments are within the scope of the following claims.  
         [0045]     While certain features of the claimed subject matter have been illustrated and described herein, many modifications, substitutions, changes, and equivalents will now occur to those skilled in the art. It is, therefore, to be understood that the appended claims are intended to cover all such modifications and changes that fall within the true spirit of the claimed subject matter.