[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

US20010014931A1 - Cache management for a multi-threaded processor - Google Patents

Cache management for a multi-threaded processor Download PDF

Info

Publication number
US20010014931A1
US20010014931A1 US09/732,491 US73249100A US2001014931A1 US 20010014931 A1 US20010014931 A1 US 20010014931A1 US 73249100 A US73249100 A US 73249100A US 2001014931 A1 US2001014931 A1 US 2001014931A1
Authority
US
United States
Prior art keywords
cache memory
thread
cache
ways
threads
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
US09/732,491
Other versions
US6381676B2 (en
Inventor
Robert Aglietti
Rajiv Gupta
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hewlett Packard Development Co LP
Original Assignee
Individual
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to US09/732,491 priority Critical patent/US6381676B2/en
Publication of US20010014931A1 publication Critical patent/US20010014931A1/en
Application granted granted Critical
Publication of US6381676B2 publication Critical patent/US6381676B2/en
Assigned to HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P. reassignment HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P. ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: HEWLETT-PACKARD COMPANY
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0842Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0864Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using pseudo-associative means, e.g. set-associative or hashing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel

Definitions

  • the present invention pertains to the field of computer systems. More particularly, this invention relates to cache management in a multi-threaded processor.
  • Computer systems typically include a processor and a memory hierarchy.
  • the memory hierarchy usually includes a main memory that holds instructions and data for the processor.
  • the processor fetches instructions from the main memory, reads data associated with the instructions from the main memory, executes the instructions, and writes result data back into the main memory.
  • a computer system typically includes one or more cache memories.
  • a computer system may include a primary cache which is also known as a level one (L1) cache.
  • the primary cache is usually tightly integrated with the processor and may be contained on the same integrated circuit as the processor.
  • a computer system may also include a secondary cache which is also known as a level two (L2) cache.
  • the secondary cache is usually further down the memory hierarchy between the primary cache and the main memory.
  • a typical cache memory is a relatively small and fast memory that holds blocks of instructions and/or data obtained from the main memory.
  • a block of instructions or data held in a cache memory may be referred to as a cache line or a data line.
  • a cache memory usually provides a processor with relatively fast access to data lines contained therein in comparison to the time required to obtain the same data line from the main memory. As a consequence, a cache memory if managed efficiently can greatly increase the throughput of a processor by providing fast access to instructions and/or data.
  • a processor obtains a particular data line by issuing an address for the particular data line.
  • the primary cache usually performs a lookup operation in response to the address to determine whether the particular data line is contained therein. If the particular data line is not contained in the primary cache, a condition known as a cache miss to the primary cache, then the address of the particular data line is propagated down to a lower level of the memory hierarchy. This usually results in a lookup operation in the secondary cache or a read memory operation in the main memory. In either case, the particular data line is eventually returned from the lower level of the memory hierarchy and it is usually placed into the primary cache. This process may be referred to as a cache fill operation and the particular data line may replace another data line already stored in the primary cache.
  • the processor employed in a computer system may be a multi-threaded processor.
  • a multi-threaded processor is a processor that switches execution among multiple threads.
  • a thread may be defined as a stream of addresses associated with the instructions and data of a particular sequence of code that has been scheduled within the processor.
  • One advantage of a multi-threaded processor is that it can switch threads and continue instruction execution during a long latency operation such as a cache fill operation. This usually provides an overall increase in throughput particularly when a missing data line must be obtained from the main memory.
  • a method and apparatus which provides a cache management policy for use with a cache memory for a multi-threaded processor.
  • the cache memory is partitioned among a set of threads of the multi-threaded processor.
  • a replacement line is selected in a partition of the cache memory which is allocated to the particular thread from which the access causing the cache miss originated, thereby preventing pollution to partitions belonging to other threads.
  • the partitioning may be static. Alternatively, the partitioning may be dynamic and may be used to control relative throughput associated with the threads.
  • FIG. 1 illustrates a method for managing a cache memory for a multi-threaded processor
  • FIGS. 2 a - 2 b show example partitions of a cache memory which is a 4-way cache
  • FIG. 3 illustrates an arrangement for partitioning a cache memory among a set of threads of a multi-threaded processor
  • FIGS. 4 a - 4 b show example allocations of ways 1-4 of a cache memory to a set of threads of a multi-threaded processor using allocation thresholds;
  • FIG. 5 illustrates an arrangement for partitioning a cache memory among threads of a multi-threaded processor using allocation thresholds.
  • FIGS. 6 a - 6 b show example allocations of partitions of a cache memory based on rows
  • FIG. 7 illustrates an arrangement for partitioning a cache memory among threads of a multi-threaded processor for partitioning based on rows of the cache memory.
  • FIG. 1 illustrates a method 10 for managing a cache memory for a multi-threaded processor.
  • the cache memory is subdivided into a set of partitions each of which is allocated to a particular thread of the multi-threaded processor.
  • the partitions of the cache memory may be static, i.e. hard-wired, or the partitions may be dynamic.
  • the cache memory or the multi-threaded processor may contain writeable registers that specify the partitions of the cache memory and the mapping of each partition to the threads of the multi-threaded processor.
  • the method 10 is undertaken when the multi-threaded processor issues an address for a desired data line.
  • the desired data line may contain instructions or data or instructions and data depending upon whether the cache memory is an instruction cache, a data cache, or a combined instruction/data cache.
  • a cache lookup operation is performed to access the desired data line from the cache memory. If the desired data line is not stored in the cache memory then the cache lookup operation causes a cache miss. If the desired data line is stored in the cache memory then the cache lookup operation causes a cache hit.
  • step 22 if a cache miss occurs then control proceeds to step 26 . Otherwise, a cache hit occurs and the access of the desired data line continues at step 24 .
  • step 26 a thread of the multi-threaded processor from which the access to the desired data line originated is determined.
  • a replacement line is selected from a partition of the cache memory that is allocated to the thread determined at step 26 . This selection of the replacement line only from the partition allocated to the thread determined at step 26 prevent pollution of partitions of the cache memory that are allocated to other threads.
  • a cache fill operation is performed to obtain the missing desired data line and place the desired data line into the replacement line selected at step 28 .
  • FIGS. 2 a - 2 b show example partitions of a cache memory 40 .
  • the cache memory 40 is a 4-way cache and the partitions correspond to the ways of the cache.
  • an n-way cache memory may be partitioned in a variety of arrangements among a set of M threads of a multi-threaded processor.
  • the cache memory 40 may be an instruction cache, a data cache, or a combined instruction and data cache.
  • the cache memory may be implemented on the same integrated circuit that contains a multi-threaded processor.
  • the cache memory 40 may be a primary cache of a multi-threaded processor or may be a secondary cache.
  • FIG. 2 a shows an example allocation of ways 1-4 of the cache memory 40 to a set of threads A and B of a multi-threaded processor.
  • ways 1-2 are allocated to thread A and ways 3-4 are allocated to thread B.
  • an access to a data line that originates with thread A causes a replacement line to be selected from either way 1 or way 2 at step 28 upon a cache miss.
  • the cache fill operation at step 30 does not pollute ways 2-3 which are allocated to thread B.
  • an access to a missing data line that originates with thread B causes a replacement line to be selected from either way 3 or way 4 at step 28 , thereby preventing pollution of ways 1-2 which are allocated to thread A.
  • FIG. 2 b shows another example allocation of ways 1-4 of the cache memory 40 to the threads A and B of a multi-threaded processor.
  • way 1 is allocated to thread A and ways 2-4 are allocated to thread B.
  • An access to a missing data line that originates with thread A causes a replacement line to be selected only from way 1 at step 28 , thereby preventing pollution of ways 2-4 which are allocated to thread B.
  • An access to a missing data line that originates with thread B causes a replacement line to be selected from either way 2, way 3, or way 4 at step 28 , thereby preventing pollution of way 1 which is allocated to thread A.
  • the cache memory 40 includes an array of storage cells that are arranged as a set of rows 1-x. Each row 1-x includes storage cells for each of the ways 1-4.
  • the storage cells for each of the ways 1-4 include storage cells for holding a data line, storage cells for holding tag bits, and storage cells for holding replacement information.
  • the way 1 storage cells of row 1 include storage cells for storing a corresponding data line, storage cells for storing tag bits for the corresponding data line, and storage cells for storing replacement information for the corresponding data line.
  • the replacement information is a set of age bits that enable a determination of the age of the corresponding data line as may be utilized if the replacement policy is least recently used (LRU).
  • FIG. 3 illustrates an arrangement for partitioning the cache memory 40 among a set of threads of a multi-threaded processor 50 .
  • the multi-threaded processor 50 includes a thread A and a thread B.
  • the techniques illustrated here are easily extended to processors having an arbitrary number of threads.
  • the multi-threaded processor 50 is shown with hardware support for multiple threads, i.e. multiple registers sets and specialized processor status, the present techniques are easily adaptable to systems in which multi-threading is implemented in software or firmware.
  • the multi-threaded processor 50 includes an address register 52 which corresponds to thread A and an address register 54 which corresponds to thread B.
  • the address registers 52 - 54 may be program counters that hold instruction pointers for fetching the instruction streams associated with threads A and B.
  • the address registers 52 - 54 may be addressing registers associated with data addressing modes of the multi-threaded processor 50 .
  • the address registers 52 - 54 may be index registers associated with a general purpose register set in that the multi-threaded processor 50 includes a general register set of each of the threads A and B.
  • the multi-threaded processor 50 includes an interface circuit 56 that passes on either an address 53 from the address register 52 or an address 55 from the address register 54 to the cache memory 40 as a data line address 70 .
  • the address passed on to the cache memory 40 depends upon which of the threads A or B is being executed by the processor 50 .
  • the processor 50 may include a status register that indicates which of the threads A or B is currently being executed and the interface circuit 56 selects either the address 53 or 55 in response to the contents of that status register.
  • the cache memory 40 includes a hash circuit 62 that implements a hashing algorithm for converting the data line address 70 into a row index 74 .
  • the row index 74 specifies a particular row of the storage cells 60 in which the data line specified by the data line address 70 may be stored.
  • the row index 74 causes that particular row of the storage cells 60 to be read out.
  • the particular row selected by the row index 74 includes 4 sets of replacement information 76 .
  • the replacement information 76 includes a set of replacement information for each of the 4 ways, in one embodiment, of the cache memory 40 .
  • a replacement selector 66 selects a data line in the selected row of the storage cells 60 for replacement. This may be also referred to as nominating a replacement candidate or selecting a replacement line.
  • the data line to be replaced is indicated on a signal line 82 .
  • the replacement line is selected in response to the sets of replacement information 76 and in response to a bit mask 78 .
  • the bit mask 78 ensures that the replacement selector 66 nominates only data lines that are allocated to the corresponding thread which caused the cache miss.
  • the bit mask 78 is provided by a set of partition mask registers 68 .
  • the partition mask registers 68 store a bit mask for each of the threads of the multi-threaded processor 50 .
  • a thread A bit mask of 1100 indicates that ways 1-2 of the storage cells 60 are allocated to thread A and a thread B bit mask of 0011 indicates that ways 2-3 of the storage cells 60 are allocated to thread B.
  • a thread A bit mask of 1110 indicates that ways 1-3 of the storage cells 60 are allocated to thread A and a thread B bit mask of 0001 indicates that way 4 of the storage cells 60 is allocated to thread B.
  • the partition mask registers 68 provide the appropriate bit mask 78 to the replacement line selector 66 in response to an indication 72 from the multi-threaded processor 50 .
  • the indication 72 specifies whether it is thread A or thread B that is currently being executed. If it is thread A that is being executed then the bit mask for thread A is provided as the bit mask 78 . If it is thread B that is being executed then the bit mask for thread B is provided as the bit mask 78 .
  • the replacement line selector 66 uses the bit mask 78 to determine which of the partitions of the storage cells 60 are to be used in its replacement algorithm. For example, the bit mask 78 of 1100 causes the replacement line selector to use only ways 1-2 in its replacement algorithm.
  • the replacement algorithm implemented in the replacement line selector 66 may take any form. Possibilities include LRU algorithms as well as random replacement algorithms.
  • the sets of replacement information 76 include a set of age bits for each of the ways 1-4 of the selected row of the storage cells 60 .
  • the replacement line selector 66 compares only the age bits of ways 1-2 to determine which is the oldest data line. The replacement line selector 66 then transfers a value of either 1 or 2 on the signal lines 82 to indicate which of the data lines, either way 1 or way 2, of the selected row of the storage cells 60 is the replacement line.
  • the indication of the selected replacement line on the signal lines 82 is provided to a cache fill circuit 64 .
  • the data line address 70 propagates down to a system bus 80 in order to read the missing data line either from a main memory accessible via the system bus 80 or a secondary cache accessible via the system bus 80 .
  • the allocations of the partitions of the cache memory 40 are static.
  • the bit masks for threads A and B are hardwired.
  • the allocations of the partitions of the cache memory 40 are dynamic.
  • the partition mask registers 68 may be writeable by the execution core of the multi-threaded processor 50 .
  • the multi-threaded processor 50 may provide certain privileged instructions for writing bit masks into the partition mask registers 68 .
  • the multi-threaded processor 50 may allocate more partitions to a particular thread in order to increase the throughput performance of that particular thread. In addition, the multi-threaded processor 50 may allocate more partitions to a particular thread in order to balance performance if that particular thread has a low performance.
  • FIG. 4 a shows another allocation of ways 1-4 of the cache memory 40 to a set of threads A and B of a multi-threaded processor.
  • the allocation of ways 1-4 of the cache memory 40 is defined by a set of allocation threshold values 100 .
  • the thread A has an allocation threshold value equal to 3 which indicates that any 3 and at most 3 of the ways in any row 1-x may be used by thread A.
  • the thread B has an allocation threshold value equal to 3 which indicates that any 3 and at most 3 of the ways of any row 1-x may be used by thread B.
  • an access to a data line that originates with thread B and that causes a cache miss causes a replacement line to be selected from one of the ways of the cache memory 40 already allocated to thread B if the particular row 1-x already holds 3 data lines for thread B, i.e. thread B is at its threshold. If the particular row 1-x holds fewer than 3 data lines for thread B, then a replacement algorithm selects one of the ways 1-4 of the particular row 1-x to hold a replacement line.
  • FIG. 4 b shows an example allocation of ways 1-4 of the cache memory 40 to a set of threads A-D of a multi-threaded processor as defined by the allocation thresholds 100 .
  • the thread A has an allocation threshold equal to 2 which indicates that any 2 and at most 2 of the ways of the cache memory 40 may be used by thread A.
  • the threads B-D have allocation thresholds equal to 2.
  • FIG. 5 illustrates an arrangement for partitioning the cache memory 40 among thread A and thread B of the multi-threaded processor 50 for partitioning defined by the allocation thresholds 100 .
  • the cache memory 40 includes the hash circuit 62 and the cache fill circuit 64 , along with an array of storage cells 100 , a replacement line selector 102 , and a set of allocation threshold registers 104 , as well as other information.
  • the array of storage cells 100 is arranged as a set of rows 1-x.
  • Each row 1-x includes storage cells for each of the ways 1-4.
  • the storage cells for each of the ways 1-4 include storage cells for holding a data line, storage cells for holding tag bits, storage cells for holding replacement information, as well as storage cells for holding thread identifier information which is used to identify the thread A or B which for which the corresponding data line is held.
  • the row index 74 specifies a particular row of the storage cells 100 in which the data line specified by the data line address 70 may be stored.
  • the row index 74 causes that particular row of the storage cells 100 to be read out.
  • the particular row selected by the row index 74 includes 4 sets of replacement information 98 and 4 sets of thread identifier information 110 .
  • the replacement information 98 includes a set of replacement information for each of the 4 ways of the cache memory 40 .
  • the thread identifier information 110 includes a set of thread identifier information for each of the 4 ways of the cache memory 40 .
  • the replacement selector 102 selects a data line in the particular row of the storage cells 100 being read out for replacement. As before, the data line to be replaced is indicated on the signal line 82 . In this arrangement, the replacement line is selected in response to the sets of replacement information 98 , the sets of thread identifier information 110 , and in response to the indication 72 and a threshold value 112 .
  • the threshold value 112 is provided by the allocation threshold registers 104 .
  • the allocation threshold registers 104 store an allocation threshold value for each of the threads of the multi-threaded processor 50 .
  • the allocation threshold registers 104 provide the appropriate threshold value 112 to the replacement line selector 102 in response to the indication 72 from the multi-threaded processor 50 .
  • the indication 72 specifies whether it is thread A or thread B that is currently being executed. If it is thread A that is being executed then the allocation threshold value for thread A is provided as the threshold value 112 . If it is thread B that is being executed then the allocation threshold value for thread B is provided as the threshold value 112 .
  • the replacement line selector 102 uses the thread identifier information 110 to count the number of the ways 1-4 of the particular row being read out that are used by the thread identified by the indication 72 . For example, if the indication 72 identifies thread A, then the replacement line selector 102 counts the number of sets of the thread identifier information 110 that also indicate thread A. If the number of sets of the thread identifier information 110 that indicate thread A equals the threshold value 112 , then one of the ways of the particular row being read out whose set of thread identifier information 110 indicates thread A is selected for replacement according to a replacement algorithm. If the number of sets of the thread identifier information 110 that indicate thread A is less than the threshold value 112 , then any one of the ways of the particular row being read out is selected for replacement according to a replacement algorithm regardless of the thread identifier information 110 .
  • the replacement algorithm implemented in the replacement line selector 102 may take any form. Possibilities include LRU algorithms as well as random replacement algorithms.
  • the allocation thresholds 100 may be static as when the threshold values for threads A and B are hardwired.
  • the allocation thresholds 100 may be dynamic.
  • the allocation threshold registers 104 may be writeable by the execution core of the multi-threaded processor 50 .
  • the multi-threaded processor 50 may provide certain privileged instructions for writing values into the allocation threshold registers 104 .
  • FIG. 6 a shows an example allocation of partitions of a cache memory 140 to a set of threads A and B of a multi-threaded processor.
  • the cache memory 140 is an n-way cache having a set of rows 1-x.
  • the partitioning of the cache memory 140 is based on subsets of the rows 1-x.
  • Rows 1-m of the cache memory 140 provide a partition that is allocated to the thread A.
  • Rows m+1 through x of the cache memory 140 provide another partition which is allocated to the thread B.
  • an equal number of the rows 1-x are allocated to each of the threads A and B.
  • FIG. 6 b shows another example allocation of partitions of the cache memory 140 to the threads A and B of a multi-threaded processor.
  • the majority of the rows 1-x are allocated to the thread B.
  • Rows 1-n of the cache memory 140 are allocated to the thread A.
  • Rows n+1 through x of the cache memory 140 are allocated to the thread B.
  • FIG. 7 illustrates an arrangement for partitioning the cache memory 140 among thread A and thread B of the multi-threaded processor 50 for partitioning based on subsets of the rows 1-x of the cache memory 140 .
  • the cache memory 140 includes a mapper 142 and a cache fill circuit 144 , along with an array of storage cells 150 and a replacement line selector 146 .
  • the storage cells 150 are arranged into rows 1-x each of which includes n ways.
  • the mapper 142 implements a hashing algorithm for converting a data line address 162 from the interface circuit 56 into a row index 164 .
  • the row index 164 specifies a particular row of the storage cells 150 in which a data line specified by the data line address 162 may be stored.
  • the mapper 142 performs the hashing algorithm only on a subset of the rows 1-x of the storage cells 150 which are allocated to the particular thread being executed by the multi-threaded processor 50 .
  • An indication 161 from the interface circuit 56 specifies whether it is thread A or thread B that is currently being executed. For the example allocation shown in FIG. 6 b, if the indication 161 specifies thread A then the mapper 142 limits the row index 164 to the range 1-n. If the indication 161 specifies thread B then the mapper 142 limits the row index 164 to the range n+1 through x.
  • the row index 164 causes a particular row of the storage cells 150 to be read out.
  • the particular row selected by the row index 150 includes n sets of replacement information 170 .
  • the replacement line selector 146 performs a replacement algorithm to select a particular data line in one of the ways 1-n in the row being read out in response to the replacement information 170 .
  • the replacement line selector 146 uses the signal lines 168 to indicate the data line in the storage cells 150 that is to be replaced.
  • the cache fill circuit 144 records this information and writes the missing data line into the storage cells 150 via the signal lines 166 once the missing data line is obtained via the system bus 80 .

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

A method and apparatus which provides a cache management policy for use with a cache memory for a multi-threaded processor. The cache memory is partitioned among a set of threads of the multi-threaded processor. When a cache miss occurs, a replacement line is selected in a partition of the cache memory which is allocated to the particular thread from which the access causing the cache miss originated, thereby preventing pollution to partitions belonging to other threads.

Description

    BACKGROUND OF THE INVENTION
  • 1. Field of Invention [0001]
  • The present invention pertains to the field of computer systems. More particularly, this invention relates to cache management in a multi-threaded processor. [0002]
  • 2. Art Background [0003]
  • Computer systems typically include a processor and a memory hierarchy. The memory hierarchy usually includes a main memory that holds instructions and data for the processor. Typically, the processor fetches instructions from the main memory, reads data associated with the instructions from the main memory, executes the instructions, and writes result data back into the main memory. [0004]
  • In addition, the memory hierarchy of a computer system typically includes one or more cache memories. For example, a computer system may include a primary cache which is also known as a level one (L1) cache. The primary cache is usually tightly integrated with the processor and may be contained on the same integrated circuit as the processor. A computer system may also include a secondary cache which is also known as a level two (L2) cache. The secondary cache is usually further down the memory hierarchy between the primary cache and the main memory. [0005]
  • A typical cache memory is a relatively small and fast memory that holds blocks of instructions and/or data obtained from the main memory. A block of instructions or data held in a cache memory may be referred to as a cache line or a data line. A cache memory usually provides a processor with relatively fast access to data lines contained therein in comparison to the time required to obtain the same data line from the main memory. As a consequence, a cache memory if managed efficiently can greatly increase the throughput of a processor by providing fast access to instructions and/or data. [0006]
  • Typically, a processor obtains a particular data line by issuing an address for the particular data line. The primary cache usually performs a lookup operation in response to the address to determine whether the particular data line is contained therein. If the particular data line is not contained in the primary cache, a condition known as a cache miss to the primary cache, then the address of the particular data line is propagated down to a lower level of the memory hierarchy. This usually results in a lookup operation in the secondary cache or a read memory operation in the main memory. In either case, the particular data line is eventually returned from the lower level of the memory hierarchy and it is usually placed into the primary cache. This process may be referred to as a cache fill operation and the particular data line may replace another data line already stored in the primary cache. [0007]
  • In addition, the processor employed in a computer system may be a multi-threaded processor. A multi-threaded processor is a processor that switches execution among multiple threads. A thread may be defined as a stream of addresses associated with the instructions and data of a particular sequence of code that has been scheduled within the processor. [0008]
  • One advantage of a multi-threaded processor is that it can switch threads and continue instruction execution during a long latency operation such as a cache fill operation. This usually provides an overall increase in throughput particularly when a missing data line must be obtained from the main memory. [0009]
  • Nevertheless, conditions may exist in a computer system having a multi-threaded processor that cause the primary cache to be largely overrun by the data lines associated with a particular thread. Such a condition may be referred to as cache pollution and may slow the execution of threads other than the particular thread. [0010]
  • For example, consider a multi-threaded processor that switches between threads A and B. Now consider that a cache miss to the primary cache occurs during execution of thread A, and that a cache miss to the secondary cache occurs, and that the missing data line must be obtained from the main memory during a cache fill operation. Now consider that during the cache fill operation, which typically takes a relatively long time in comparison to the speed of the primary and secondary caches, the processor begins executing thread B. Consider also that thread B happens to be associated with data lines contained in the secondary cache. Under such conditions, the primary cache can become polluted with the data lines associated with thread B as misses to the primary cache cause large numbers of data lines of the primary cache to be replaced with data lines obtained from the secondary cache during execution of thread B. [0011]
  • Unfortunately, this has the consequence of subsequently causing higher numbers of primary cache misses for thread A which further decreases the throughput for thread A. Moreover, prior primary caches are not managed in such a way as to avoid such cache pollution or to provide a balance between the throughput obtained by the different threads in a multi-threaded processor. [0012]
  • SUMMARY OF THE INVENTION
  • A method and apparatus is disclosed which provides a cache management policy for use with a cache memory for a multi-threaded processor. The cache memory is partitioned among a set of threads of the multi-threaded processor. When a cache miss occurs, a replacement line is selected in a partition of the cache memory which is allocated to the particular thread from which the access causing the cache miss originated, thereby preventing pollution to partitions belonging to other threads. The partitioning may be static. Alternatively, the partitioning may be dynamic and may be used to control relative throughput associated with the threads. [0013]
  • Other features and advantages of the present invention will be apparent from the detailed description that follows. [0014]
  • BRIEF DESCRIPTION OF THE DRAWINGS
  • The present invention is described with respect to particular exemplary embodiments thereof and reference is accordingly made to the drawings in which: [0015]
  • FIG. 1 illustrates a method for managing a cache memory for a multi-threaded processor; [0016]
  • FIGS. 2[0017] a-2 b show example partitions of a cache memory which is a 4-way cache;
  • FIG. 3 illustrates an arrangement for partitioning a cache memory among a set of threads of a multi-threaded processor; [0018]
  • FIGS. 4[0019] a-4 b show example allocations of ways 1-4 of a cache memory to a set of threads of a multi-threaded processor using allocation thresholds;
  • FIG. 5 illustrates an arrangement for partitioning a cache memory among threads of a multi-threaded processor using allocation thresholds. [0020]
  • FIGS. 6[0021] a-6 b show example allocations of partitions of a cache memory based on rows;
  • FIG. 7 illustrates an arrangement for partitioning a cache memory among threads of a multi-threaded processor for partitioning based on rows of the cache memory. [0022]
  • DETAILED DESCRIPTION
  • FIG. 1 illustrates a [0023] method 10 for managing a cache memory for a multi-threaded processor. The cache memory is subdivided into a set of partitions each of which is allocated to a particular thread of the multi-threaded processor. The partitions of the cache memory may be static, i.e. hard-wired, or the partitions may be dynamic. For example, the cache memory or the multi-threaded processor may contain writeable registers that specify the partitions of the cache memory and the mapping of each partition to the threads of the multi-threaded processor.
  • The [0024] method 10 is undertaken when the multi-threaded processor issues an address for a desired data line. The desired data line may contain instructions or data or instructions and data depending upon whether the cache memory is an instruction cache, a data cache, or a combined instruction/data cache.
  • At [0025] step 20, a cache lookup operation is performed to access the desired data line from the cache memory. If the desired data line is not stored in the cache memory then the cache lookup operation causes a cache miss. If the desired data line is stored in the cache memory then the cache lookup operation causes a cache hit.
  • At step [0026] 22, if a cache miss occurs then control proceeds to step 26. Otherwise, a cache hit occurs and the access of the desired data line continues at step 24.
  • At [0027] step 26, a thread of the multi-threaded processor from which the access to the desired data line originated is determined.
  • At step [0028] 28, a replacement line is selected from a partition of the cache memory that is allocated to the thread determined at step 26. This selection of the replacement line only from the partition allocated to the thread determined at step 26 prevent pollution of partitions of the cache memory that are allocated to other threads.
  • At [0029] step 30, a cache fill operation is performed to obtain the missing desired data line and place the desired data line into the replacement line selected at step 28.
  • FIGS. 2[0030] a-2 b show example partitions of a cache memory 40. In these examples, the cache memory 40 is a 4-way cache and the partitions correspond to the ways of the cache. In general, an n-way cache memory may be partitioned in a variety of arrangements among a set of M threads of a multi-threaded processor.
  • The [0031] cache memory 40 may be an instruction cache, a data cache, or a combined instruction and data cache. The cache memory may be implemented on the same integrated circuit that contains a multi-threaded processor. In addition, the cache memory 40 may be a primary cache of a multi-threaded processor or may be a secondary cache.
  • FIG. 2[0032] a shows an example allocation of ways 1-4 of the cache memory 40 to a set of threads A and B of a multi-threaded processor. In this example, ways 1-2 are allocated to thread A and ways 3-4 are allocated to thread B.
  • With this example allocation, an access to a data line that originates with thread A causes a replacement line to be selected from either [0033] way 1 or way 2 at step 28 upon a cache miss. As a consequence, the cache fill operation at step 30 does not pollute ways 2-3 which are allocated to thread B. Similarly, an access to a missing data line that originates with thread B causes a replacement line to be selected from either way 3 or way 4 at step 28, thereby preventing pollution of ways 1-2 which are allocated to thread A.
  • FIG. 2[0034] b shows another example allocation of ways 1-4 of the cache memory 40 to the threads A and B of a multi-threaded processor. In this example, way 1 is allocated to thread A and ways 2-4 are allocated to thread B. An access to a missing data line that originates with thread A causes a replacement line to be selected only from way 1 at step 28, thereby preventing pollution of ways 2-4 which are allocated to thread B. An access to a missing data line that originates with thread B causes a replacement line to be selected from either way 2, way 3, or way 4 at step 28, thereby preventing pollution of way 1 which is allocated to thread A.
  • The [0035] cache memory 40 includes an array of storage cells that are arranged as a set of rows 1-x. Each row 1-x includes storage cells for each of the ways 1-4. The storage cells for each of the ways 1-4 include storage cells for holding a data line, storage cells for holding tag bits, and storage cells for holding replacement information.
  • For example, the [0036] way 1 storage cells of row 1 include storage cells for storing a corresponding data line, storage cells for storing tag bits for the corresponding data line, and storage cells for storing replacement information for the corresponding data line. In one embodiment, the replacement information is a set of age bits that enable a determination of the age of the corresponding data line as may be utilized if the replacement policy is least recently used (LRU).
  • FIG. 3 illustrates an arrangement for partitioning the [0037] cache memory 40 among a set of threads of a multi-threaded processor 50. In this example, the multi-threaded processor 50 includes a thread A and a thread B. Nevertheless, the techniques illustrated here are easily extended to processors having an arbitrary number of threads. In addition, although the multi-threaded processor 50 is shown with hardware support for multiple threads, i.e. multiple registers sets and specialized processor status, the present techniques are easily adaptable to systems in which multi-threading is implemented in software or firmware.
  • The [0038] multi-threaded processor 50 includes an address register 52 which corresponds to thread A and an address register 54 which corresponds to thread B. The address registers 52-54 may be program counters that hold instruction pointers for fetching the instruction streams associated with threads A and B. Alternatively, the address registers 52-54 may be addressing registers associated with data addressing modes of the multi-threaded processor 50. For example, the address registers 52-54 may be index registers associated with a general purpose register set in that the multi-threaded processor 50 includes a general register set of each of the threads A and B.
  • The [0039] multi-threaded processor 50 includes an interface circuit 56 that passes on either an address 53 from the address register 52 or an address 55 from the address register 54 to the cache memory 40 as a data line address 70. The address passed on to the cache memory 40 depends upon which of the threads A or B is being executed by the processor 50. For example, the processor 50 may include a status register that indicates which of the threads A or B is currently being executed and the interface circuit 56 selects either the address 53 or 55 in response to the contents of that status register.
  • The [0040] cache memory 40 includes a hash circuit 62 that implements a hashing algorithm for converting the data line address 70 into a row index 74. The row index 74 specifies a particular row of the storage cells 60 in which the data line specified by the data line address 70 may be stored. The row index 74 causes that particular row of the storage cells 60 to be read out. The particular row selected by the row index 74 includes 4 sets of replacement information 76. The replacement information 76 includes a set of replacement information for each of the 4 ways, in one embodiment, of the cache memory 40.
  • If a cache miss on the [0041] data line address 70 occurs, then a replacement selector 66 selects a data line in the selected row of the storage cells 60 for replacement. This may be also referred to as nominating a replacement candidate or selecting a replacement line. The data line to be replaced is indicated on a signal line 82.
  • The replacement line is selected in response to the sets of replacement information [0042] 76 and in response to a bit mask 78. The bit mask 78 ensures that the replacement selector 66 nominates only data lines that are allocated to the corresponding thread which caused the cache miss.
  • The [0043] bit mask 78 is provided by a set of partition mask registers 68. The partition mask registers 68 store a bit mask for each of the threads of the multi-threaded processor 50. For example, a thread A bit mask of 1100 indicates that ways 1-2 of the storage cells 60 are allocated to thread A and a thread B bit mask of 0011 indicates that ways 2-3 of the storage cells 60 are allocated to thread B. In another example, a thread A bit mask of 1110 indicates that ways 1-3 of the storage cells 60 are allocated to thread A and a thread B bit mask of 0001 indicates that way 4 of the storage cells 60 is allocated to thread B.
  • The partition mask registers [0044] 68 provide the appropriate bit mask 78 to the replacement line selector 66 in response to an indication 72 from the multi-threaded processor 50. The indication 72 specifies whether it is thread A or thread B that is currently being executed. If it is thread A that is being executed then the bit mask for thread A is provided as the bit mask 78. If it is thread B that is being executed then the bit mask for thread B is provided as the bit mask 78.
  • The replacement line selector [0045] 66 uses the bit mask 78 to determine which of the partitions of the storage cells 60 are to be used in its replacement algorithm. For example, the bit mask 78 of 1100 causes the replacement line selector to use only ways 1-2 in its replacement algorithm.
  • The replacement algorithm implemented in the replacement line selector [0046] 66 may take any form. Possibilities include LRU algorithms as well as random replacement algorithms.
  • For example, if it is an LRU algorithm then the sets of replacement information [0047] 76 include a set of age bits for each of the ways 1-4 of the selected row of the storage cells 60. With the bit mask 78 of 1100, the replacement line selector 66 compares only the age bits of ways 1-2 to determine which is the oldest data line. The replacement line selector 66 then transfers a value of either 1 or 2 on the signal lines 82 to indicate which of the data lines, either way 1 or way 2, of the selected row of the storage cells 60 is the replacement line.
  • The indication of the selected replacement line on the signal lines [0048] 82 is provided to a cache fill circuit 64. The data line address 70 propagates down to a system bus 80 in order to read the missing data line either from a main memory accessible via the system bus 80 or a secondary cache accessible via the system bus 80.
  • In one embodiment, the allocations of the partitions of the [0049] cache memory 40 are static. In this embodiment, the bit masks for threads A and B are hardwired.
  • In another embodiment, the allocations of the partitions of the [0050] cache memory 40 are dynamic. For example, the partition mask registers 68 may be writeable by the execution core of the multi-threaded processor 50. The multi-threaded processor 50 may provide certain privileged instructions for writing bit masks into the partition mask registers 68.
  • The [0051] multi-threaded processor 50 may allocate more partitions to a particular thread in order to increase the throughput performance of that particular thread. In addition, the multi-threaded processor 50 may allocate more partitions to a particular thread in order to balance performance if that particular thread has a low performance.
  • FIG. 4[0052] a shows another allocation of ways 1-4 of the cache memory 40 to a set of threads A and B of a multi-threaded processor. In this type of partitioning, the allocation of ways 1-4 of the cache memory 40 is defined by a set of allocation threshold values 100. In this example, the thread A has an allocation threshold value equal to 3 which indicates that any 3 and at most 3 of the ways in any row 1-x may be used by thread A. Similarly, the thread B has an allocation threshold value equal to 3 which indicates that any 3 and at most 3 of the ways of any row 1-x may be used by thread B.
  • With this example allocation, consider an access to a data line that originates with thread A that causes a cache miss. If the particular row 1-x of the [0053] cache memory 40 already holds 3 data lines for thread A, then a replacement line is selected from one of those 3 ways already used by thread A according to a replacement algorithm such as least recently used. If the particular row 1-x holds fewer than 3 data lines for thread A, then a replacement algorithm, such as least recently used, is run to select from among all of the ways 1-4 of the particular row 1-x to hold a replacement line.
  • Similarly, an access to a data line that originates with thread B and that causes a cache miss causes a replacement line to be selected from one of the ways of the [0054] cache memory 40 already allocated to thread B if the particular row 1-x already holds 3 data lines for thread B, i.e. thread B is at its threshold. If the particular row 1-x holds fewer than 3 data lines for thread B, then a replacement algorithm selects one of the ways 1-4 of the particular row 1-x to hold a replacement line.
  • FIG. 4[0055] b shows an example allocation of ways 1-4 of the cache memory 40 to a set of threads A-D of a multi-threaded processor as defined by the allocation thresholds 100. In this example, the thread A has an allocation threshold equal to 2 which indicates that any 2 and at most 2 of the ways of the cache memory 40 may be used by thread A. Similarly, the threads B-D have allocation thresholds equal to 2.
  • FIG. 5 illustrates an arrangement for partitioning the [0056] cache memory 40 among thread A and thread B of the multi-threaded processor 50 for partitioning defined by the allocation thresholds 100. In this arrangement, the cache memory 40 includes the hash circuit 62 and the cache fill circuit 64, along with an array of storage cells 100, a replacement line selector 102, and a set of allocation threshold registers 104, as well as other information.
  • The array of [0057] storage cells 100 is arranged as a set of rows 1-x. Each row 1-x includes storage cells for each of the ways 1-4. The storage cells for each of the ways 1-4 include storage cells for holding a data line, storage cells for holding tag bits, storage cells for holding replacement information, as well as storage cells for holding thread identifier information which is used to identify the thread A or B which for which the corresponding data line is held.
  • As before, the [0058] row index 74 specifies a particular row of the storage cells 100 in which the data line specified by the data line address 70 may be stored. The row index 74 causes that particular row of the storage cells 100 to be read out. The particular row selected by the row index 74 includes 4 sets of replacement information 98 and 4 sets of thread identifier information 110. The replacement information 98 includes a set of replacement information for each of the 4 ways of the cache memory 40. The thread identifier information 110 includes a set of thread identifier information for each of the 4 ways of the cache memory 40.
  • If a cache miss on the [0059] data line address 70 occurs, then the replacement selector 102 selects a data line in the particular row of the storage cells 100 being read out for replacement. As before, the data line to be replaced is indicated on the signal line 82. In this arrangement, the replacement line is selected in response to the sets of replacement information 98, the sets of thread identifier information 110, and in response to the indication 72 and a threshold value 112. The threshold value 112 is provided by the allocation threshold registers 104.
  • The allocation threshold registers [0060] 104 store an allocation threshold value for each of the threads of the multi-threaded processor 50. The allocation threshold registers 104 provide the appropriate threshold value 112 to the replacement line selector 102 in response to the indication 72 from the multi-threaded processor 50. The indication 72 specifies whether it is thread A or thread B that is currently being executed. If it is thread A that is being executed then the allocation threshold value for thread A is provided as the threshold value 112. If it is thread B that is being executed then the allocation threshold value for thread B is provided as the threshold value 112.
  • The [0061] replacement line selector 102 uses the thread identifier information 110 to count the number of the ways 1-4 of the particular row being read out that are used by the thread identified by the indication 72. For example, if the indication 72 identifies thread A, then the replacement line selector 102 counts the number of sets of the thread identifier information 110 that also indicate thread A. If the number of sets of the thread identifier information 110 that indicate thread A equals the threshold value 112, then one of the ways of the particular row being read out whose set of thread identifier information 110 indicates thread A is selected for replacement according to a replacement algorithm. If the number of sets of the thread identifier information 110 that indicate thread A is less than the threshold value 112, then any one of the ways of the particular row being read out is selected for replacement according to a replacement algorithm regardless of the thread identifier information 110.
  • The replacement algorithm implemented in the [0062] replacement line selector 102 may take any form. Possibilities include LRU algorithms as well as random replacement algorithms.
  • The [0063] allocation thresholds 100 may be static as when the threshold values for threads A and B are hardwired. The allocation thresholds 100 may be dynamic. For example, the allocation threshold registers 104 may be writeable by the execution core of the multi-threaded processor 50. The multi-threaded processor 50 may provide certain privileged instructions for writing values into the allocation threshold registers 104.
  • FIG. 6[0064] a shows an example allocation of partitions of a cache memory 140 to a set of threads A and B of a multi-threaded processor. The cache memory 140 is an n-way cache having a set of rows 1-x. In this example, the partitioning of the cache memory 140 is based on subsets of the rows 1-x. Rows 1-m of the cache memory 140 provide a partition that is allocated to the thread A. Rows m+1 through x of the cache memory 140 provide another partition which is allocated to the thread B. In this example, an equal number of the rows 1-x are allocated to each of the threads A and B.
  • FIG. 6[0065] b shows another example allocation of partitions of the cache memory 140 to the threads A and B of a multi-threaded processor. In this example, the majority of the rows 1-x are allocated to the thread B. Rows 1-n of the cache memory 140 are allocated to the thread A. Rows n+1 through x of the cache memory 140 are allocated to the thread B.
  • FIG. 7 illustrates an arrangement for partitioning the [0066] cache memory 140 among thread A and thread B of the multi-threaded processor 50 for partitioning based on subsets of the rows 1-x of the cache memory 140. The cache memory 140 includes a mapper 142 and a cache fill circuit 144, along with an array of storage cells 150 and a replacement line selector 146. The storage cells 150 are arranged into rows 1-x each of which includes n ways.
  • The mapper [0067] 142 implements a hashing algorithm for converting a data line address 162 from the interface circuit 56 into a row index 164. The row index 164 specifies a particular row of the storage cells 150 in which a data line specified by the data line address 162 may be stored.
  • The mapper [0068] 142 performs the hashing algorithm only on a subset of the rows 1-x of the storage cells 150 which are allocated to the particular thread being executed by the multi-threaded processor 50. An indication 161 from the interface circuit 56 specifies whether it is thread A or thread B that is currently being executed. For the example allocation shown in FIG. 6b, if the indication 161 specifies thread A then the mapper 142 limits the row index 164 to the range 1-n. If the indication 161 specifies thread B then the mapper 142 limits the row index 164 to the range n+1 through x.
  • The [0069] row index 164 causes a particular row of the storage cells 150 to be read out. The particular row selected by the row index 150 includes n sets of replacement information 170. The replacement line selector 146 performs a replacement algorithm to select a particular data line in one of the ways 1-n in the row being read out in response to the replacement information 170. The replacement line selector 146 uses the signal lines 168 to indicate the data line in the storage cells 150 that is to be replaced. The cache fill circuit 144 records this information and writes the missing data line into the storage cells 150 via the signal lines 166 once the missing data line is obtained via the system bus 80.
  • The foregoing detailed description of the present invention is provided for the purposes of illustration and is not intended to be exhaustive or to limit the invention to the precise embodiment disclosed. Accordingly, the scope of the present invention is defined by the appended claims. [0070]

Claims (21)

What is claimed is:
1. A method for managing a cache memory for a multi-threaded processor, comprising the steps of:
performing a cache lookup operation to the cache memory in response to an access to a data line by the multi-threaded processor;
if a cache miss occurs, then selecting a replacement line in a partition of the cache memory which is allocated to a particular thread of a set of threads of the multi-threaded processor from which the access originated.
2. The method of
claim 1
, further comprising the step of obtaining the data line and storing the data line into the replacement line selected in the partition.
3. The method of
claim 1
, further comprising the step of partitioning the cache memory among the threads of the multi-threaded processor.
4. The method of
claim 3
, wherein the partitioning of the cache memory is static.
5. The method of
claim 3
, wherein the partitioning of the cache memory is dynamic.
6. The method of
claim 3
, wherein the step of partitioning the cache memory includes the step of allocating a subset of a set of ways of the cache memory to each of the threads.
7. The method of
claim 6
, wherein the step of selecting a replacement line in a partition of the cache memory which is allocated to the particular thread includes the step of selecting the replacement line in one of the subsets of the ways which is allocated to the particular thread.
8. The method of
claim 3
, wherein the step of partitioning the cache memory includes the step of specifying a threshold value for each thread wherein each threshold value indicates a maximum number of a set of ways of the cache memory which may be used by the corresponding thread.
9. The method of
claim 8
, wherein the step of selecting a replacement line in a partition of the cache memory which is allocated to the particular thread includes the steps of:
determining a number of the ways which are used by the particular thread;
if the number of the ways which are used by the particular thread equals the threshold value for the particular thread, then selecting the replacement line from one of the ways which is used by the particular thread;
if the number of the ways which are used by the particular thread is less than the threshold value for the particular thread, then selecting the replacement line from all of the ways of the cache memory.
10. The method of
claim 3
, wherein the step of partitioning the cache memory includes the step of allocating a subset of a set of rows of the cache memory to each of the threads.
11. The method of
claim 10
, wherein the step of selecting a replacement line in a partition of the cache memory which is allocated to the particular thread includes the step of selecting the replacement line in one of the rows which is allocated to the particular thread.
12. A computer system, comprising:
processor that executes a set of threads;
cache memory which is partitioned among the threads such that a cache miss to a data line which is associated with a particular thread causes a replacement line in the cache memory to be selected from a partition of the cache memory that is allocated to the particular thread.
13. The computer system of
claim 12
, wherein the cache memory is an instruction cache.
14. The computer system of
claim 12
, wherein the cache memory is a data cache.
15. The computer system of
claim 12
, wherein the cache memory is a combined instruction and data cache.
16. The computer system of
claim 12
, wherein the partitions among the threads is hard-wired in the cache memory.
17. The computer system of
claim 12
, wherein the cache memory is an n-way cache memory.
18. The computer system of
claim 17
, wherein the cache memory includes a set of partition mask registers which specify an allocation of the n-ways among the threads.
19. The computer system of
claim 18
, wherein the partition mask registers are written by the processor to dynamically partition the cache memory.
20. The computer system of
claim 17
, wherein the cache memory includes a set of allocation threshold registers which specify a maximum number of the n-ways of the cache memory that may be used by each thread.
21. The computer system of
claim 12
, wherein the cache memory includes a mapper that allocates a subset a set of rows of the cache memory to each thread.
US09/732,491 1998-05-27 2000-12-07 Cache management for a multi-threaded processor Expired - Fee Related US6381676B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
US09/732,491 US6381676B2 (en) 1998-05-27 2000-12-07 Cache management for a multi-threaded processor

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/085,644 US6205519B1 (en) 1998-05-27 1998-05-27 Cache management for a multi-threaded processor
US09/732,491 US6381676B2 (en) 1998-05-27 2000-12-07 Cache management for a multi-threaded processor

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
US09/085,644 Division US6205519B1 (en) 1998-05-27 1998-05-27 Cache management for a multi-threaded processor

Publications (2)

Publication Number Publication Date
US20010014931A1 true US20010014931A1 (en) 2001-08-16
US6381676B2 US6381676B2 (en) 2002-04-30

Family

ID=22193005

Family Applications (2)

Application Number Title Priority Date Filing Date
US09/085,644 Expired - Lifetime US6205519B1 (en) 1998-05-27 1998-05-27 Cache management for a multi-threaded processor
US09/732,491 Expired - Fee Related US6381676B2 (en) 1998-05-27 2000-12-07 Cache management for a multi-threaded processor

Family Applications Before (1)

Application Number Title Priority Date Filing Date
US09/085,644 Expired - Lifetime US6205519B1 (en) 1998-05-27 1998-05-27 Cache management for a multi-threaded processor

Country Status (1)

Country Link
US (2) US6205519B1 (en)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2003102780A1 (en) * 2002-06-04 2003-12-11 Sandbridge Technologies, Inc. Method and apparatus for multithreaded cache with cache eviction based on thread identifier
WO2003102781A1 (en) * 2002-06-04 2003-12-11 Sandbridge Technologies, Inc. Method and apparatus for multithreaded cache with simplified implementation of cache replacement policy
US6725336B2 (en) * 2001-04-20 2004-04-20 Sun Microsystems, Inc. Dynamically allocated cache memory for a multi-processor unit
US7069388B1 (en) * 2003-07-10 2006-06-27 Analog Devices, Inc. Cache memory data replacement strategy
US20070136530A1 (en) * 2003-11-12 2007-06-14 Tetsuya Tanaka Cache memory and control method thereof
US20080028403A1 (en) * 2006-07-28 2008-01-31 Russell Dean Hoover Method and Apparatus for Communicating Between Threads
US7600155B1 (en) 2005-12-13 2009-10-06 Nvidia Corporation Apparatus and method for monitoring and debugging a graphics processing unit
US7711990B1 (en) 2005-12-13 2010-05-04 Nvidia Corporation Apparatus and method for debugging a graphics processing unit in response to a debug instruction
US8212824B1 (en) * 2005-12-19 2012-07-03 Nvidia Corporation Apparatus and method for serial save and restore of graphics processing unit state information
US20160140041A1 (en) * 2014-11-13 2016-05-19 Samsung Electronics Co., Ltd. Electronic system with partitioning mechanism and method of operation thereof
US20160259562A1 (en) * 2009-08-13 2016-09-08 Intel Corporation Dynamic Cache Sharing Based on Power State
US20180325906A1 (en) * 2013-03-15 2018-11-15 Theocorp Holding Company, Llc Theobromine compositions useful for increasing fetal weight gain and enhancing bone properties

Families Citing this family (87)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9701960D0 (en) * 1997-01-30 1997-03-19 Sgs Thomson Microelectronics A cache system
US6205519B1 (en) * 1998-05-27 2001-03-20 Hewlett Packard Company Cache management for a multi-threaded processor
US6745243B2 (en) * 1998-06-30 2004-06-01 Nortel Networks Limited Method and apparatus for network caching and load balancing
US6349363B2 (en) * 1998-12-08 2002-02-19 Intel Corporation Multi-section cache with different attributes for each section
US6330556B1 (en) * 1999-03-15 2001-12-11 Trishul M. Chilimbi Data structure partitioning to optimize cache utilization
US6507862B1 (en) * 1999-05-11 2003-01-14 Sun Microsystems, Inc. Switching method in a multi-threaded processor
US6542991B1 (en) * 1999-05-11 2003-04-01 Sun Microsystems, Inc. Multiple-thread processor with single-thread interface shared among threads
US6823471B1 (en) 1999-07-30 2004-11-23 International Business Machines Corporation Method for providing high availability within a data processing system via a reconfigurable hashed storage subsystem
US6658556B1 (en) 1999-07-30 2003-12-02 International Business Machines Corporation Hashing a target address for a memory access instruction in order to determine prior to execution which particular load/store unit processes the instruction
US6470442B1 (en) * 1999-07-30 2002-10-22 International Business Machines Corporation Processor assigning data to hardware partition based on selectable hash of data address
US6446165B1 (en) 1999-07-30 2002-09-03 International Business Machines Corporation Address dependent caching behavior within a data processing system having HSA (hashed storage architecture)
US6449691B1 (en) 1999-07-30 2002-09-10 International Business Machines Corporation Asymmetrical cache properties within a hashed storage subsystem
US6516404B1 (en) 1999-07-30 2003-02-04 International Business Machines Corporation Data processing system having hashed architected processor facilities
US6578065B1 (en) * 1999-09-23 2003-06-10 Hewlett-Packard Development Company L.P. Multi-threaded processing system and method for scheduling the execution of threads based on data received from a cache memory
US6457102B1 (en) * 1999-11-05 2002-09-24 Emc Corporation Cache using multiple LRU's
US7856633B1 (en) * 2000-03-24 2010-12-21 Intel Corporation LRU cache replacement for a partitioned set associative cache
US6560678B1 (en) * 2000-05-16 2003-05-06 Digeo, Inc. Maintaining information variety in an information receiving system
US6931639B1 (en) * 2000-08-24 2005-08-16 International Business Machines Corporation Method for implementing a variable-partitioned queue for simultaneous multithreaded processors
US6604174B1 (en) * 2000-11-10 2003-08-05 International Business Machines Corporation Performance based system and method for dynamic allocation of a unified multiport cache
DE10108820A1 (en) * 2001-02-23 2002-09-12 Infineon Technologies Ag Method for operating an integrated memory
JP3620473B2 (en) * 2001-06-14 2005-02-16 日本電気株式会社 Method and apparatus for controlling replacement of shared cache memory
US6678814B2 (en) * 2001-06-29 2004-01-13 International Business Machines Corporation Method and apparatus for allocating data usages within an embedded dynamic random access memory device
US20030041213A1 (en) * 2001-08-24 2003-02-27 Yakov Tokar Method and apparatus for using a cache memory
US6848025B2 (en) * 2001-10-26 2005-01-25 Elan Research, Inc. Method and system for programmable replacement mechanism for caching devices
US20030084249A1 (en) * 2001-10-31 2003-05-01 Johnson David J.C. Preemptive eviction of stale entries is a computer cache by use of age-bits
US6848026B2 (en) * 2001-11-09 2005-01-25 International Business Machines Corporation Caching memory contents into cache partitions based on memory locations
US6968445B2 (en) * 2001-12-20 2005-11-22 Sandbridge Technologies, Inc. Multithreaded processor with efficient processing for convergence device applications
US7657893B2 (en) * 2003-04-23 2010-02-02 International Business Machines Corporation Accounting method and logic for determining per-thread processor resource utilization in a simultaneous multi-threaded (SMT) processor
US7290261B2 (en) * 2003-04-24 2007-10-30 International Business Machines Corporation Method and logical apparatus for rename register reallocation in a simultaneous multi-threaded (SMT) processor
US7496915B2 (en) * 2003-04-24 2009-02-24 International Business Machines Corporation Dynamic switching of multithreaded processor between single threaded and simultaneous multithreaded modes
US20040216101A1 (en) * 2003-04-24 2004-10-28 International Business Machines Corporation Method and logical apparatus for managing resource redistribution in a simultaneous multi-threaded (SMT) processor
US20040226011A1 (en) * 2003-05-08 2004-11-11 International Business Machines Corporation Multi-threaded microprocessor with queue flushing
US6973540B2 (en) * 2003-07-25 2005-12-06 Freescale Semiconductor, Inc. Method and apparatus for selecting cache ways available for replacement
JP3981070B2 (en) * 2003-12-26 2007-09-26 株式会社東芝 Cache replacement device and cache replacement method
US7434000B1 (en) 2004-06-30 2008-10-07 Sun Microsystems, Inc. Handling duplicate cache misses in a multithreaded/multi-core processor
US7383403B1 (en) 2004-06-30 2008-06-03 Sun Microsystems, Inc. Concurrent bypass to instruction buffers in a fine grain multithreaded processor
US7890735B2 (en) * 2004-08-30 2011-02-15 Texas Instruments Incorporated Multi-threading processors, integrated circuit devices, systems, and processes of operation and manufacture
US8037250B1 (en) * 2004-12-09 2011-10-11 Oracle America, Inc. Arbitrating cache misses in a multithreaded/multi-core processor
US7490230B2 (en) * 2005-02-04 2009-02-10 Mips Technologies, Inc. Fetch director employing barrel-incrementer-based round-robin apparatus for use in multithreading microprocessor
US7631130B2 (en) * 2005-02-04 2009-12-08 Mips Technologies, Inc Barrel-incrementer-based round-robin apparatus and instruction dispatch scheduler employing same for use in multithreading microprocessor
US7657891B2 (en) * 2005-02-04 2010-02-02 Mips Technologies, Inc. Multithreading microprocessor with optimized thread scheduler for increasing pipeline utilization efficiency
US7853777B2 (en) * 2005-02-04 2010-12-14 Mips Technologies, Inc. Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
JP4082706B2 (en) * 2005-04-12 2008-04-30 学校法人早稲田大学 Multiprocessor system and multigrain parallelizing compiler
US7702889B2 (en) * 2005-10-18 2010-04-20 Qualcomm Incorporated Shared interrupt control method and system for a digital signal processor
US7984281B2 (en) * 2005-10-18 2011-07-19 Qualcomm Incorporated Shared interrupt controller for a multi-threaded processor
US20070094664A1 (en) * 2005-10-21 2007-04-26 Kimming So Programmable priority for concurrent multi-threaded processors
US7818747B1 (en) * 2005-11-03 2010-10-19 Oracle America, Inc. Cache-aware scheduling for a chip multithreading processor
US7861060B1 (en) 2005-12-15 2010-12-28 Nvidia Corporation Parallel data processing systems and methods using cooperative thread arrays and thread identifier values to determine processing behavior
US20080005525A1 (en) * 2006-06-29 2008-01-03 Rosenbluth Mark B Partitioning program memory
US8819348B2 (en) * 2006-07-12 2014-08-26 Hewlett-Packard Development Company, L.P. Address masking between users
US7680988B1 (en) * 2006-10-30 2010-03-16 Nvidia Corporation Single interconnect providing read and write access to a memory shared by concurrent threads
US8176265B2 (en) 2006-10-30 2012-05-08 Nvidia Corporation Shared single-access memory with management of multiple parallel requests
US8108625B1 (en) 2006-10-30 2012-01-31 Nvidia Corporation Shared memory with parallel access and access conflict resolution mechanism
US9009452B2 (en) 2007-05-14 2015-04-14 International Business Machines Corporation Computing system with transactional memory using millicode assists
US8688920B2 (en) 2007-05-14 2014-04-01 International Business Machines Corporation Computing system with guest code support of transactional memory
US8321637B2 (en) * 2007-05-14 2012-11-27 International Business Machines Corporation Computing system with optimized support for transactional memory
US8095741B2 (en) * 2007-05-14 2012-01-10 International Business Machines Corporation Transactional memory computing system with support for chained transactions
US8117403B2 (en) * 2007-05-14 2012-02-14 International Business Machines Corporation Transactional memory system which employs thread assists using address history tables
US8095750B2 (en) * 2007-05-14 2012-01-10 International Business Machines Corporation Transactional memory system with fast processing of common conflicts
US20090217280A1 (en) * 2008-02-21 2009-08-27 Honeywell International Inc. Shared-Resource Time Partitioning in a Multi-Core System
US8161493B2 (en) * 2008-07-15 2012-04-17 International Business Machines Corporation Weighted-region cycle accounting for multi-threaded processor cores
US20100122039A1 (en) * 2008-11-11 2010-05-13 Ravi Ranjan Kumar Memory Systems and Accessing Methods
JP5413001B2 (en) * 2009-07-09 2014-02-12 富士通株式会社 Cache memory
US8566524B2 (en) 2009-08-31 2013-10-22 International Business Machines Corporation Transactional memory system with efficient cache support
US20110197031A1 (en) * 2010-02-05 2011-08-11 Nokia Corporation Update Handler For Multi-Channel Cache
US8285950B2 (en) 2010-06-03 2012-10-09 International Business Machines Corporation SMT/ECO mode based on cache miss rate
US20130097387A1 (en) * 2011-10-14 2013-04-18 The Board Of Trustees Of The Leland Stanford Junior University Memory-based apparatus and method
US9223709B1 (en) 2012-03-06 2015-12-29 Marvell International Ltd. Thread-aware cache memory management
US9824013B2 (en) * 2012-05-08 2017-11-21 Qualcomm Incorporated Per thread cacheline allocation mechanism in shared partitioned caches in multi-threaded processors
GB2509755B (en) * 2013-01-14 2015-07-08 Imagination Tech Ltd Partitioning a shared cache using masks associated with threads to avoiding thrashing
JP6188607B2 (en) * 2014-03-10 2017-08-30 株式会社日立製作所 Index tree search method and computer
US9665372B2 (en) 2014-05-12 2017-05-30 International Business Machines Corporation Parallel slice processor with dynamic instruction stream mapping
US9672043B2 (en) 2014-05-12 2017-06-06 International Business Machines Corporation Processing of multiple instruction streams in a parallel slice processor
US9760375B2 (en) 2014-09-09 2017-09-12 International Business Machines Corporation Register files for storing data operated on by instructions of multiple widths
WO2016049575A1 (en) 2014-09-25 2016-03-31 Oracle International Corporation System and method for supporting zero-copy binary radix tree in a distributed computing environment
US9720696B2 (en) 2014-09-30 2017-08-01 International Business Machines Corporation Independent mapping of threads
US9977678B2 (en) 2015-01-12 2018-05-22 International Business Machines Corporation Reconfigurable parallel execution and load-store slice processor
US10133581B2 (en) 2015-01-13 2018-11-20 International Business Machines Corporation Linkable issue queue parallel execution slice for a processor
US10133576B2 (en) 2015-01-13 2018-11-20 International Business Machines Corporation Parallel slice processor having a recirculating load-store queue for fast deallocation of issue queue entries
US9983875B2 (en) 2016-03-04 2018-05-29 International Business Machines Corporation Operation of a multi-slice processor preventing early dependent instruction wakeup
US10037211B2 (en) 2016-03-22 2018-07-31 International Business Machines Corporation Operation of a multi-slice processor with an expanded merge fetching queue
US10346174B2 (en) 2016-03-24 2019-07-09 International Business Machines Corporation Operation of a multi-slice processor with dynamic canceling of partial loads
US10761854B2 (en) 2016-04-19 2020-09-01 International Business Machines Corporation Preventing hazard flushes in an instruction sequencing unit of a multi-slice processor
US10037229B2 (en) 2016-05-11 2018-07-31 International Business Machines Corporation Operation of a multi-slice processor implementing a load/store unit maintaining rejected instructions
US9934033B2 (en) 2016-06-13 2018-04-03 International Business Machines Corporation Operation of a multi-slice processor implementing simultaneous two-target loads and stores
US10042647B2 (en) 2016-06-27 2018-08-07 International Business Machines Corporation Managing a divided load reorder queue
US10318419B2 (en) 2016-08-08 2019-06-11 International Business Machines Corporation Flush avoidance in a load store unit

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5535359A (en) * 1988-12-02 1996-07-09 Mitsubishi Denki Kabushiki Kaisha Computer system with cache memory having address mask register
US5353418A (en) 1989-05-26 1994-10-04 Massachusetts Institute Of Technology System storing thread descriptor identifying one of plural threads of computation in storage only when all data for operating on thread is ready and independently of resultant imperative processing of thread
ATE167582T1 (en) 1989-09-08 1998-07-15 Digital Equipment Corp PRIVATE STORAGE FOR THREADS IN A MULTI-THREAD DIGITAL DATA PROCESSING SYSTEM
US5347642A (en) * 1989-11-30 1994-09-13 Nec Electronics Inc. Cache memory management unit
CA2050828A1 (en) 1991-05-28 1992-11-29 Herbert H.J. Hum Register-cache architecture and super-actor machine
US5524250A (en) * 1991-08-23 1996-06-04 Silicon Graphics, Inc. Central processing unit for processing a plurality of threads using dedicated general purpose registers and masque register for providing access to the registers
US5875464A (en) * 1991-12-10 1999-02-23 International Business Machines Corporation Computer system with private and shared partitions in cache
US5404469A (en) 1992-02-25 1995-04-04 Industrial Technology Research Institute Multi-threaded microprocessor architecture utilizing static interleaving
JP3309425B2 (en) 1992-05-22 2002-07-29 松下電器産業株式会社 Cache control unit
GB2292822A (en) * 1994-08-31 1996-03-06 Hewlett Packard Co Partitioned cache memory
JPH096633A (en) 1995-06-07 1997-01-10 Internatl Business Mach Corp <Ibm> Method and system for operation of high-performance multiplelogical route in data-processing system
US5701432A (en) 1995-10-13 1997-12-23 Sun Microsystems, Inc. Multi-threaded processing system having a cache that is commonly accessible to each thread
GB9521955D0 (en) * 1995-10-26 1996-01-03 Sgs Thomson Microelectronics Cache memory
GB9521980D0 (en) * 1995-10-26 1996-01-03 Sgs Thomson Microelectronics Branch target buffer
US5918245A (en) 1996-03-13 1999-06-29 Sun Microsystems, Inc. Microprocessor having a cache memory system using multi-level cache set prediction
US5974438A (en) * 1996-12-31 1999-10-26 Compaq Computer Corporation Scoreboard for cached multi-thread processes
US6161166A (en) * 1997-11-10 2000-12-12 International Business Machines Corporation Instruction cache for multithreaded processor
US6260114B1 (en) * 1997-12-30 2001-07-10 Mcmz Technology Innovations, Llc Computer cache memory windowing
US6205519B1 (en) * 1998-05-27 2001-03-20 Hewlett Packard Company Cache management for a multi-threaded processor

Cited By (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6725336B2 (en) * 2001-04-20 2004-04-20 Sun Microsystems, Inc. Dynamically allocated cache memory for a multi-processor unit
WO2003102780A1 (en) * 2002-06-04 2003-12-11 Sandbridge Technologies, Inc. Method and apparatus for multithreaded cache with cache eviction based on thread identifier
WO2003102781A1 (en) * 2002-06-04 2003-12-11 Sandbridge Technologies, Inc. Method and apparatus for multithreaded cache with simplified implementation of cache replacement policy
US6912623B2 (en) * 2002-06-04 2005-06-28 Sandbridge Technologies, Inc. Method and apparatus for multithreaded cache with simplified implementation of cache replacement policy
US6990557B2 (en) * 2002-06-04 2006-01-24 Sandbridge Technologies, Inc. Method and apparatus for multithreaded cache with cache eviction based on thread identifier
CN1317645C (en) * 2002-06-04 2007-05-23 杉桥技术公司 Method and apparatus for multithreaded cache with cache eviction based on thread identifier
CN1317644C (en) * 2002-06-04 2007-05-23 杉桥技术公司 Method and apparatus for multithreaded cache with simplified implementation of cache replacement policy
KR100962058B1 (en) 2002-06-04 2010-06-08 샌드브리지 테크놀로지스, 인코포레이티드 Method and apparatus for multithreaded cache with cache eviction based on thread identifier
KR100962057B1 (en) 2002-06-04 2010-06-08 샌드브리지 테크놀로지스, 인코포레이티드 Method and apparatus for multithreaded cache with simplified implementation of cache replacement policy
US7069388B1 (en) * 2003-07-10 2006-06-27 Analog Devices, Inc. Cache memory data replacement strategy
US20070136530A1 (en) * 2003-11-12 2007-06-14 Tetsuya Tanaka Cache memory and control method thereof
US7502887B2 (en) 2003-11-12 2009-03-10 Panasonic Corporation N-way set associative cache memory and control method thereof
US7600155B1 (en) 2005-12-13 2009-10-06 Nvidia Corporation Apparatus and method for monitoring and debugging a graphics processing unit
US7711990B1 (en) 2005-12-13 2010-05-04 Nvidia Corporation Apparatus and method for debugging a graphics processing unit in response to a debug instruction
US8212824B1 (en) * 2005-12-19 2012-07-03 Nvidia Corporation Apparatus and method for serial save and restore of graphics processing unit state information
US20080028154A1 (en) * 2006-07-28 2008-01-31 Russell Dean Hoover Method and Apparatus for Memory Utilization
US20080028403A1 (en) * 2006-07-28 2008-01-31 Russell Dean Hoover Method and Apparatus for Communicating Between Threads
US7752413B2 (en) * 2006-07-28 2010-07-06 International Business Machines Corporation Method and apparatus for communicating between threads
US7818503B2 (en) * 2006-07-28 2010-10-19 International Business Machines Corporation Method and apparatus for memory utilization
US20160259562A1 (en) * 2009-08-13 2016-09-08 Intel Corporation Dynamic Cache Sharing Based on Power State
US9983792B2 (en) * 2009-08-13 2018-05-29 Intel Corporation Dynamic cache sharing based on power state
US20180325906A1 (en) * 2013-03-15 2018-11-15 Theocorp Holding Company, Llc Theobromine compositions useful for increasing fetal weight gain and enhancing bone properties
US20160140041A1 (en) * 2014-11-13 2016-05-19 Samsung Electronics Co., Ltd. Electronic system with partitioning mechanism and method of operation thereof
US9727239B2 (en) * 2014-11-13 2017-08-08 Samsung Electronics Co., Ltd. Electronic system with partitioning mechanism and method of operation thereof

Also Published As

Publication number Publication date
US6205519B1 (en) 2001-03-20
US6381676B2 (en) 2002-04-30

Similar Documents

Publication Publication Date Title
US6205519B1 (en) Cache management for a multi-threaded processor
US6446188B1 (en) Caching dynamically allocated objects
US8095736B2 (en) Methods and systems for dynamic cache partitioning for distributed applications operating on multiprocessor architectures
US5630097A (en) Enhanced cache operation with remapping of pages for optimizing data relocation from addresses causing cache misses
US6877067B2 (en) Shared cache memory replacement control method and apparatus
US5535361A (en) Cache block replacement scheme based on directory control bit set/reset and hit/miss basis in a multiheading multiprocessor environment
US7716448B2 (en) Page oriented memory management
US10929308B2 (en) Performing maintenance operations
US9176856B2 (en) Data store and method of allocating data to the data store
US7020748B2 (en) Cache replacement policy to mitigate pollution in multicore processors
US7237067B2 (en) Managing a multi-way associative cache
CN109582600B (en) Data processing method and device
US20180232313A1 (en) Cache sector usage prediction
CN110297787B (en) Method, device and equipment for accessing memory by I/O equipment
US5829051A (en) Apparatus and method for intelligent multiple-probe cache allocation
US10831673B2 (en) Memory address translation
US10853262B2 (en) Memory address translation using stored key entries
US7007135B2 (en) Multi-level cache system with simplified miss/replacement control
US8266379B2 (en) Multithreaded processor with multiple caches
US20050091466A1 (en) Method and program product for avoiding cache congestion by offsetting addresses while allocating memory
US20090157968A1 (en) Cache Memory with Extended Set-associativity of Partner Sets
WO2006082554A2 (en) Data processing system comprising a cache unit
US10866904B2 (en) Data storage for multiple data types
US20050033920A1 (en) Cache structure and methodology
US20230068779A1 (en) Method for Evicting Data from Memory

Legal Events

Date Code Title Description
FEPP Fee payment procedure

Free format text: PAYOR NUMBER ASSIGNED (ORIGINAL EVENT CODE: ASPN); ENTITY STATUS OF PATENT OWNER: LARGE ENTITY

FPAY Fee payment

Year of fee payment: 4

FPAY Fee payment

Year of fee payment: 8

AS Assignment

Owner name: HEWLETT-PACKARD DEVELOPMENT COMPANY, L.P., TEXAS

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:HEWLETT-PACKARD COMPANY;REEL/FRAME:026945/0699

Effective date: 20030131

REMI Maintenance fee reminder mailed
LAPS Lapse for failure to pay maintenance fees
STCH Information on status: patent discontinuation

Free format text: PATENT EXPIRED DUE TO NONPAYMENT OF MAINTENANCE FEES UNDER 37 CFR 1.362

FP Lapsed due to failure to pay maintenance fee

Effective date: 20140430