Abstract:
A technique to enable information sharing among agents within different cache coherency domains. In one embodiment, a graphics device may use one or more caches used by one or more processing cores to store or read information, which may be accessed by one or more processing cores in a manner that does not affect programming and coherency rules pertaining to the graphics device.

Description:
RELATED APPLICATIONS 
       [0001]    This application is a Continuation of application Ser. No. 14/158,865, filed Jan. 20, 2014; which is a Continuation of application Ser. No. 13/722,440, filed Dec. 20, 2012, now U.S. Pat. No. 8,643,660 issued on Feb. 04, 2014; which is a Continuation of application Ser. No. 13/447,279, filed Apr. 15, 2012, now U.S. Pat. No. 9,035,960 issued on May 19, 2015; which is a Continuation of application Ser. No. 12/057,601, filed Mar. 28, 2008, now U.S. Pat. No. 9,035,959 issued on May 19, 2015. U.S. Pat. No. 9,035,959 is hereby incorporated herein by reference in its entirety. 
     
    
     FIELD OF THE DISCLOSURE 
       [0002]    Embodiments of the invention relate generally to the field of information processing. More particularly, embodiments of the invention relate to techniques to enable cache coherency among agents operating in at least two different cache coherency domains. 
       BACKGROUND OF THE DISCLOSURE 
       [0003]    As more functionality is integrated into computing platforms and microprocessors, information sharing among different functional units tends to increase. For example, the integration of graphics or other throughput logic into the same computing platform, package, or integrated circuit as one or more host central processing units (CPUs), or “cores”, may make it desirable to share information between the one or more cores and the graphics logic. In some prior art instances, where different functional units are integrated in the same system, package, or die, the information accessed (stored or read) by one or more cores is maintained in a corresponding cache hierarchy (e.g., level-1, mid-level, level-2 caches) that is in a different coherency domain than that of other functional units, such as graphics logic. 
         [0004]    Maintaining data in different coherency domains among different cache addresses or according to different cache coherency domains, may require more cache memory to be used, which may increase system cost and power consumption. Moreover, in situations in which information is shared among the different functional units, maintaining different corresponding cache hierarchy domains can cause each functional unit to have to access a main memory source, such as DRAM, to share information among the different functional units. Main memory sources, such as DRAM, are typically slower in terms of access speed than other memory structures, such as cache. Therefore, resorting to main memory to share information among different functional units can degrade performance of the functional units and/or system. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0005]    Embodiments of the invention are illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings and in which like reference numerals refer to similar elements and in which: 
           [0006]      FIG. 1  illustrates a block diagram of a system, in which at least one embodiment of the invention may be used; 
           [0007]      FIG. 2  illustrates a processor in which at least one embodiment of the invention may be used. 
           [0008]      FIG. 3  illustrates a block diagram of a shared bus computer system, in which at least one embodiment of the invention may be used; 
           [0009]      FIG. 4  illustrates a block diagram a point-to-point interconnect computer system, in which at least one embodiment of the invention may be used; 
           [0010]      FIG. 5  is a flow diagram illustrating operations that may be used in one embodiment. 
       
    
    
     DETAILED DESCRIPTION 
       [0011]    Embodiments of the invention relate to computer systems and information processing. More particularly, embodiments of the invention relate to techniques to allow at least one central processing unit (CPU) to gain visibility into, and therefore some level of coherence with, information being accessed or generated by another processing logic (e.g., graphics processing logic), which may operate in a different coherency domain than the at least one CPU. In some embodiments, one or more CPUs share a level of cache, such as a “last level cache”(LLC) or “level-2” (L2) cache, with one or more processing logic (e.g., graphics logic), which may implement a different coherency protocol or otherwise operate in a different coherency domain from the one or more CPUs. In one embodiment, a CPU and graphics logic are integrated within the same die, package, or system, and the CPU may have access to at least one level of cache in the graphics logic&#39;s cache coherency hierarchy as well as an LLC, which the graphics logic may also access, thereby allowing information to be shared between the CPU and the graphics logic without accessing a main memory source, such as DRAM. 
         [0012]      FIG. 1  illustrates a system in which at least one embodiment may be used. In  FIG. 1 , at least one CPU  101  and at least one graphics logic  105  are integrated within the same die, package, or system. Moreover, in one embodiment, the CPU and the graphics logic communicate with a respective cache hierarchy, which may include a first level cache, or “level-1” (L1) cache  103 ,  104 , a mid-level cache  107 ,  108 , and a last-level (LLC), or “level-2” (L2), cache  110 . In one embodiment, each L1 and mid-level caches are different logical structures, whereas the LLC is one cache structured that may store the same information, and is therefore inclusive of information, stored in each of the CPU&#39;s L1 and MLC, as well as the graphics logic&#39;s MLC. In one embodiment, the LLC can be inclusive of the graphic logic&#39;s L1 cache by the graphics logic moving or copying the contents of its L1 cache  104  to its MLC  108 , which maintains coherency with the LLC vis-a-vis the CPU coherency control operations. By copying or moving information the graphics L1 cache  104  (which is in the graphics coherency domain  111 ) and the graphics MLC (which is in the CPU coherency domain  109 ), information may be share between the CPU coherency domain  109  (which includes the CPU  101 , L1 cache  103 , MLC  107 , and LLC  110 , in one embodiment) and the graphics coherency domain  111  (which includes graphics logic  105  and graphics L1 cache  104 , in one embodiment). 
         [0013]    In some embodiments, information stored in the graphics L1 cache  104 , which may be addressed virtually by the graphics logic, is moved or copied to the graphics MLC  108  in response to the occurrence of various events associated with rendering a graphics image. In one embodiment, the moving/copying of information from the graphics L1 cache  104  to the MLC  108  is managed and performed by a graphics driver or some other logic or software program. After an event that causes the information in the graphics L1 cache  104  to be moved or copied to the MLC  108 , the information is then within the CPU coherency domain and may be addressed and accessed by the CPU using physical addresses, in one embodiment, or other addressing schemes used by the CPU (e.g., virtual addresses). 
         [0014]    In addition to the CPU and graphics coherency domains, the system of  FIG. 1  also includes a display device (e.g., monitor)  115  that may be in its own coherency domain  113 , which is non-coherent with respect to the CPU and graphics coherency domains. In one embodiment, display device  115  may communicate with a main system memory  120 , instead of directly with the caches within the cache hierarchies of the CPU or graphics logic. 
         [0015]    In one embodiment, the graphics logic  105  may have access to information available or modifiable by the CPU without resorting to system memory  120 , by accessing information stored by the CPU within the LLC  110  and snooping information in CPU&#39;s L1 ( 103 ) and CPU&#39;s MLC ( 107 ). Moreover, in one embodiment, the CPU may access, or “snoop”, information stored in the graphics logic&#39;s mid-level cache  108  without resorting to the LLC  110  or system memory  120 . In one embodiment, information may be shared between the CPU coherency domain and the graphics logic coherency domain without the CPU or graphics device having to access main system memory, which take a significant amount of time relative to accessing the cache hierarchy. Moreover, in one embodiment, information may be shared between the CPU and graphics logic coherency domains without significantly altering or impacting the respective CPU or graphics cache coherency protocols. 
         [0016]    In one embodiment, the graphics logic generates virtual addresses to access data within its cache coherency domain ( 111 ). However, some of the caches within the graphics coherency domain, such as those that are only read or otherwise “owned” by the graphics logic (“R/O caches”), may use only virtual tags, whereas other caches within the graphics coherency domain, such as those that are both read and written by the graphics logic (“R/W caches”), may use both virtual and physical tags in order to support both virtual and physical addressing. In one embodiment, graphics logic accesses to the cache hierarchy will be translated from virtual to physical addresses if there is a cache miss, so that the proper physical address in system memory can be generated. 
         [0017]    In the CPU coherency domain, at least two rules may apply. First, cache coherency rules may require that access ordering on a per location basis are sequentially consistent with each other. Sequentially consistent accesses requires global, in-order, visibility for all operations accessing a cache location. Secondly, CPU ordering rules typically require writes by a single processor be observed to be the same by all processors, but writes from different processor may be observed in different orders. However, a processor must observe its own writes in the order of execution. 
         [0018]    Graphics cache coherency domains can differ from those of a host CPU in a number of ways. For one, in graphics cache domains, coherency may only be guaranteed at certain points in the image rendering process, whereas coherency in typical CPU cache domains is continuously maintained. In addition, because graphics coherency domain caches are typically virtually addressed and not snooped, inclusion of information stored in the L1 or mid-level caches (MLC) within the LLC is not guaranteed. Therefore, when a line is evicted from the LLC the lower level caches may not be updated. To compensate, graphics logic may use an invalid-to-modified (“ItoM”) transaction to perform these eviction write-back transactions for full line evictions and read-for-ownership (RFO) transactions for partial line evictions. Lastly, graphics devices are typically non-speculative, out-of-order machines connected to an out of order un-core fabric. Because graphics logic cannot typically reorder accesses after issuing them to the cache hierarchy or memory, dependent accesses must ensure that their predecessor has been globally observed before they are issued. 
         [0019]    Embodiments of the invention take into account differences between the graphics and CPU cache coherency domains while allowing data to be shared between the domains without resorting to accessing main system memory. In one embodiment, CPU cache coherency rules apply to any physically addressed structure, including the graphics logic&#39;s mid-level cache, LLC, and main memory. For cross-coherency boundary accesses between the CPU and graphics domains, the CPU may snoop the graphics MLC, which will behave the same as in the CPU coherency domain. Moreover, embodiments of the invention allow for the inclusion of data stored in the graphics L1 and MLC within the LLC, so that the graphics logic may make use of the LLC without resorting the main system memory. In one embodiment, data from the graphics L1 is included in the LLC by the graphics device copying or moving L1 data to its MLC in response to a rendering event, thereby putting the graphics L1 data within the CPU coherency domain and ensuring its inclusion the LLC. The graphics logic can then access this information later from the LLC if it&#39;s not found within the graphics L1 or MLC. 
         [0020]      FIG. 2  illustrates a processor in which at least one embodiment of the invention may be used. In particular,  FIG. 2  illustrates processor  200  having one or more central processing units (CPUs)  205  and  210  and at least one non-CPU functional unit  207  and  213 , respectively. Also illustrated in  FIG. 2  is at least one other non-CPU functional unit  215  which may perform other operations not performed by functional units  207  and  213 . In one embodiment, the functional units  207 ,  213 , and  215  may include functions such as graphics processing, memory control and peripheral control, such as audio, video, disk control, digital signal processing, etc. In some embodiments, processor  200  may also include other logic not shown in  FIG. 2 , such as I/O control. In one embodiment, each processor in a multi-processor system or each processor core in a multi-core processor may include or otherwise be associated with logic  219  to enable information sharing between one or more CPUs and one or more graphics logic. 
         [0021]    In some embodiments, the processor  200  may be a general purpose CPU. In other embodiments, the processor may be either a general purpose CPU or hardware that can perform graphics-specific functions within a system that may include both general purpose CPU integrated circuits as well as graphics-specific hardware or other parallel computational hardware. As general purpose computing becomes more integrated with parallel computational hardware, such as graphics engines, texture samples, etc., the more versatile and location-independent the logic  219  becomes. As a result, logic  219  could include hardware/software or any combination thereof and be located or integrated within or outside of any portion of the processor  200 . 
         [0022]    In one embodiment, logic  219  includes logic for enabling a CPU to snoop a graphics MLC without significantly modifying the cache coherency rules of either the CPU or the graphics logic. Moreover, logic  219  may include logic to allow the graphics device to access information within an LLC without first resorting to main memory. In addition, logic  219  may help to inform the CPU when information stored in the graphics L1 cache is now present in the graphics MLC, so that the CPU may snoop it. 
         [0023]      FIG. 3  illustrates a shared-bus computer system in which one embodiment of the invention may be used. Microprocessors  301 - 315  may contain various functional units, such as one or more CPUs ( 323 ,  327 ,  333 ,  337 ,  343 ,  347 ,  353 ,  357 ), graphics device ( 307 ,  317 ,  327 ,  337 ), memory controller ( 325 ,  335 ,  345 ,  355 ), I/O control, or other functional units, such as a PCI or PCIe controller ( 320 ,  330 ,  340 ,  350 ). The system of  FIG. 3  may also include an I/O controller  365  to interface the microprocessors to peripheral control devices  360 . 
         [0024]    In one embodiment, the system includes logic  319  for enabling a CPU to snoop a graphics MLC without significantly modifying the cache coherency rules of either the CPU or the graphics logic. Moreover, logic  319  may include logic to allow the graphics device to access information within an LLC without first resorting to main memory. In addition, logic  219  may help to inform the CPU when information stored in the graphics L1 cache is now present in the graphics MLC, so that the CPU may snoop it. 
         [0025]    In some embodiments, some or all of the elements illustrated in  FIG. 3  may be included in a microprocessor and include other interconnects, such as direct memory interface (DMI), a PCI express graphics (PEG) interconnect, etc. Regardless of configuration, embodiments of the invention may be included or otherwise associated with any portion of the system of  FIG. 3 . The system of  FIG. 3  may also include main memory (not shown), which may be include various memory structures, such as dynamic random-access memory (DRAM), a hard disk drive (HDD), or a memory source located remotely from the computer system via network interface containing various storage devices and technologies. Cache memory within the system of  FIG. 3  may be located either within a processor or in close proximity to a processor, such as on the processor&#39;s local bus. 
         [0026]    Furthermore, the cache memory may contain relatively fast memory cells, such as a six-transistor (6T) cell, or other memory cell of approximately equal or faster access speed. 
         [0027]    In addition to the shared-bus computer system illustrated in  FIG. 3 , other system configurations may be used in conjunction with various embodiments of the invention, including point-to-point (P2P) interconnect systems and ring interconnect systems. The P2P system of  FIG. 4 , for example, may include several processors, of which only two, processors  470 ,  480  are shown by example. Processors  470 ,  480  may each include a local memory controller hub (MCH)  472 ,  482  to connect with memory  42 ,  44 . Processors  470 ,  480  may exchange data via a point-to-point (P2P) interface  450  using P2P interface circuits  478 ,  488 . Processors  470 ,  480  may each exchange data with a chipset  490  via individual P2P interfaces  452 ,  454  using point to point interface circuits  476 ,  494 ,  486 ,  498 . Chipset  490  may also exchange data with a high-performance graphics circuit  438  via a high-performance graphics interface  439 . Embodiments of the invention may be located within any processor having any number of processing cores, or within each of the P2P bus agents of  FIG. 4 . 
         [0028]    In one embodiment,  FIG. 4  includes logic  419  for enabling a CPU to snoop a graphics MLC without significantly modifying the cache coherency rules of either the CPU or the graphics logic. Moreover, logic  419  may include logic to allow the graphics device to access information within an LLC without first resorting to main memory. In addition, logic  219  may help to inform the CPU when information stored in the graphics L1 cache is now present in the graphics MLC, so that the CPU may snoop it. 
         [0029]      FIG. 5  illustrates a flow diagram of operations that may be used in conjunction with at least one embodiment of the invention. At operation  501 , a graphics device causes information stored in its L1 cache to be copied or moved to a MLC within a CPU coherency domain and a snoop is issued from a CPU to a graphics logic&#39;s MLC for the information requested by the CPU at operation  505 . If the requested information is not present in the graphics logic&#39;s MLC at operation  510 , the snoop may progress to the LLC for the information at operation  520 . If the information is not present in the LLC at operation  520 , then the access progresses to main memory at operation  525 . In one embodiment, the CPU may use physical addresses to snoop the MLC because the MLC contains a physical address tag in addition to the virtual address tag used by the graphics logic. Moreover, because in one embodiment, the graphics logic may store and access information within the LLC, the information requested by the CPU may be within the LLC instead of the MLC. 
         [0030]    One or more aspects of at least one embodiment may be implemented by representative data stored on a machine-readable medium which represents various logic within the processor, which when read by a machine causes the machine to fabricate logic to perform the techniques described herein. Such representations, known as “IP cores” may be stored on a tangible, machine readable medium (“tape”) and supplied to various customers or manufacturing facilities to load into the fabrication machines that actually make the logic or processor. 
         [0031]    Thus, a method and apparatus for directing micro-architectural memory region accesses has been described. It is to be understood that the above description is intended to be illustrative and not restrictive. Many other embodiments will be apparent to those of skill in the art upon reading and understanding the above description. The scope of the invention should, therefore, be determined with reference to the appended claims, along with the full scope of equivalents to which such claims are entitled.