Patent ID: 6944724

Claim:
A method for decoupling a tag access from a corresponding data access within a cache memory, comprising: receiving a memory request at the cache memory, wherein the memory request includes an address identifying a memory location associated with the memory request; and performing the tag access by looking up at least one tag from a tag array within the cache memory and comparing the at least one tag with a tag portion of the address to determine if a cache line containing the address is located in the cache memory; wherein if the tag lookup causes a cache hit, because the cache line containing the address is located in the cache memory, but a data array containing the cache line is busy, the method further comprises performing the corresponding data access to the data array at a later time when the data array becomes free; wherein if the memory request is for a load operation, the corresponding data access takes place without waiting for preceding load operations to complete; wherein executing the data access without waiting for preceding load operations to complete involves: attempting to load the data from the data array, speculatively storing the load operation in a load buffer to anticipate potential contention for the data array, and identifying an empty slot in a prior miss buffer to anticipate a potential cache miss, wherein these operations are executed in parallel; wherein performing the corresponding data access at a later time involves: storing an entry for the load operation in a load buffer, wherein the entry specifies a location of a corresponding cache line in the data array that was determined during the tag access, and when the data array becomes free at the later time, using the entry to perform the load operation from the data array without having to perform the tag access again to determine the location of the cache line in the data array.