US6891543B2 - Method and system for optimally sharing memory between a host processor and graphics processor - Google Patents

Method and system for optimally sharing memory between a host processor and graphics processor Download PDF

Info

Publication number
US6891543B2
US6891543B2 US10/140,263 US14026302A US6891543B2 US 6891543 B2 US6891543 B2 US 6891543B2 US 14026302 A US14026302 A US 14026302A US 6891543 B2 US6891543 B2 US 6891543B2
Authority
US
United States
Prior art keywords
memory region
cpu
graphics processor
shared memory
attribute
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.)
Expired - Lifetime, expires
Application number
US10/140,263
Other versions
US20030210248A1 (en
Inventor
David A. Wyatt
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Assigned to INTEL CORPORATION reassignment INTEL CORPORATION ASSIGNMENT OF ASSIGNORS INTEREST (SEE DOCUMENT FOR DETAILS). Assignors: WYATT, DAVID A.
Priority to US10/140,263 priority Critical patent/US6891543B2/en
Priority to PCT/US2003/012908 priority patent/WO2003096197A1/en
Priority to KR1020047017807A priority patent/KR100655355B1/en
Priority to EP03721879A priority patent/EP1502194A1/en
Priority to JP2004504123A priority patent/JP4489580B2/en
Priority to CNB038161699A priority patent/CN1317648C/en
Priority to AU2003225168A priority patent/AU2003225168A1/en
Priority to TW092112344A priority patent/TWI249103B/en
Publication of US20030210248A1 publication Critical patent/US20030210248A1/en
Publication of US6891543B2 publication Critical patent/US6891543B2/en
Application granted granted Critical
Adjusted expiration legal-status Critical
Expired - Lifetime 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/0888Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures

Definitions

  • the present invention relates to computer graphics systems, and more particularly to optimizing the use of memory shared by a CPU (central processing unit) and a graphics processor.
  • a host CPU may execute an application which calls for graphics operations to be performed.
  • the application will typically fetch initial graphics data and primitives (including, but not limited to, textures, geometry, models, etc.) from offline storage (including, but not limited to, network, CD or hard-drive disk storage) and create a copy of the graphics data and primitives in online system memory.
  • the application may operate on the graphics pixels, data models and primitives in the online system memory and then, at some point, the application may call for a graphics processor of the computer system to operate on the graphics data and primitives, typically in order to offload low-level rendering tasks from the host CPU.
  • the application when invoking operations by the graphics processor, the application will create a second copy, separate from the copy initially loaded into online system memory from offline storage, of the graphics data and primitives for the graphics processor to operate on.
  • This second, separate copy (which may be referred to herein as an “aliased” copy) may typically be placed in a region of online system memory which may be referred to as “graphics memory” because it is set aside for use by the graphics processor.
  • graphics memory Various implementations of graphics memory are known in the art.
  • discrete add-in graphics adapter cards may contain graphics memory which is locally connected by a private memory bus on the card; this is typically referred to as “local video memory”.
  • local video memory In another example, in chipsets with the known Intel® Hub Architecture, a region of system memory designated Advanced Graphics Port (AGP) memory is used as graphics memory.
  • AGP memory may also be referred to as “non-local video memory”.
  • the graphics processor would typically operate on the aliased copy of the graphics data in the graphics memory for a period of time.
  • the graphics memory containing the aliased copy of the graphics data would be assigned an uncached attribute in the host CPU's memory page attribute tables, meaning that application access to the graphics data would not take advantage of the host CPU's cache while that data was in this uncached graphics memory region to be processed by the graphics processor.
  • the uncached, aliased copy had been processed by the graphics processor for a period of time, it would typically be necessary to return to the application for further processing of the graphics data.
  • the application operates on the copy of the graphics data in the system memory.
  • This system memory would typically have been assigned a cached attribute, so that the CPU could perform the application's operations in a cached mode.
  • cached operations by a CPU allow the CPU to be more efficient than uncached operations.
  • the application may continue to process the copy in the system memory for a period of time in cached mode, and then again turn processing over to the graphics processor.
  • changes to the copy in the system memory must be reflected in the aliased copy in the graphics memory when the graphics processor takes over again.
  • the foregoing exchange between the application and the graphics processor may be repeated many times.
  • cacheable system memory is made available to a graphics processor for use as graphics memory, and the graphics processor as well as the host CPU perform operations on graphics data in the graphics memory. As described previously, the graphics processor and the host CPU take turns operating on the graphics data. Because the memory is cacheable, the CPU is able to operate in cached mode for improved efficiency.
  • Snoop cycles involve the graphics processor causing the chipset to force coherency in the CPU cache with respect to the graphics memory before the graphics processor is allowed to access the graphics memory.
  • Snoop cycles entail the disadvantage of requiring a considerable amount of overhead, which detracts from system performance.
  • Snoop cycles inspect memory data on a location-by-location basis, and if the required location's data is still in the CPU's cache, it is extracted and made coherent on a location-by-location basis. Such operations require a great deal of “handshaking” between interfaces, and are inefficient because they must be performed on a location-by-location, or line-by-line basis.
  • graphics memory is used strictly in uncached mode.
  • the data in the graphics memory is always kept coherent, since whenever the CPU wishes to read or write data to the graphics memory, the writes always go directly and immediately to the graphics memory and are never cached.
  • a disadvantage associated with this method is that the improved CPU performance afforded by cached operations is not available.
  • FIG. 1 shows a possible embodiment of a computer memory shared between a CPU and a graphics processor
  • FIG. 2 shows another possible embodiment of a computer memory shared between a CPU and a graphics processor
  • FIG. 3 shows a state diagram illustrating transitions between a mode wherein the CPU is using the optimally shared memory, and a mode wherein the graphics processor is using the optimally shared memory;
  • FIGS. 4A and 4B show examples of graphics surfaces and buffers, as well as types of sub-areas of the surfaces that can be described through surface parameters;
  • FIG. 5 shows scan lines in a bounded area of a graphics surface
  • FIG. 6 shows a flow diagram of a process for allocating an optimally shared memory region according to one embodiment
  • FIG. 7A shows a flow diagram of a process for making a surface or bounded sub-area of the surface coherent according to the embodiment of FIG. 6 ;
  • FIG. 7B shows a flow diagram for completing pending rendering operations on a graphics surface and changing the caching attribute of the surface according to the embodiment of FIG. 6 ;
  • FIG. 8 shows a flow diagram of a process for allocating an optimally shared memory region according to another embodiment
  • FIG. 9A shows a flow diagram of a process for making a surface or bounded sub-area of the surface coherent according to the embodiment of FIG. 8 ;
  • FIG. 9B shows a flow diagram for completing pending rendering operations on a graphics surface and changing the caching attribute of the surface according to the embodiment of FIG. 8 .
  • an optimally shared graphics memory may be provided which has a caching attribute assigned depending on whether the optimally shared memory is to be used by a host CPU or by a graphics processor.
  • the attribute assigned to the optimally shared memory is selected to be favorable to the performance of the CPU when the CPU is using the optimally shared memory, and favorable to the performance of the graphics processor when the graphics processor is using the optimally shared memory.
  • the assigned caching attribute of the optimally shared memory may be changed during a transition between a mode wherein a host CPU is using the optimally shared memory, and a mode wherein a graphics processor is using the optimally shared memory.
  • the attribute assigned to the optimally shared memory while the CPU is using it may be a cached attribute.
  • “cached attribute” means that, to enable operations by the CPU at its internal clock speed, portions of data destined for the optimally shared memory may first be transferred to and worked on in the CPU's cache.
  • the data in the CPU's cache may be made coherent, and the assigned caching attribute of the optimally shared memory may be changed to be an uncached attribute.
  • “uncached attribute” means that for read and write operations, no data is fetched from the CPU's cache. Rather, the data flows directly out through the external system memory bus to the system memory, as though no cache was present.
  • the optimally shared memory may always be assigned a cached attribute, but when a transition occurs to a mode wherein the graphics processor will work on the data in the optimally shared memory, the data in the CPU's cache may be made coherent.
  • a benefit of enforcing coherency prior to making the transition is that snoop cycles and their associated detriment to performance may be avoided, since the graphics processor's direct memory access (DMA) can treat the optimally shared memory as though it were already coherent. The need to perform CPU cache snooping cycles from the graphics controller is thereby avoided, and the optimally shared memory may effectively be treated as if it had always been used with the uncached attribute.
  • DMA direct memory access
  • FIGS. 1 and 2 describe how a “shareable” graphics memory region may be provided according to known art. It should be understood that “shareable” as used in the following is to be distinguished from “optimally shared” according to embodiments of the invention, as described in greater detail hereinafter.
  • FIG. 1 shows elements of a computer system made by Intel Corporation, which is commercially available and could be suitable for implementing embodiments of the invention.
  • Block 110 shown in FIG. 1 illustrates elements of an “integrated graphics” system wherein graphics functions are integrated into the overall system. More particularly, the graphics processor may be integrated into a memory controller hub (MCH) component of a chipset.
  • MCH memory controller hub
  • shareable graphics memory may be provided as follows.
  • a graphics processor page translation table (GTT) 107 is accessible to a graphics processor via a graphics processor unit (GPU) pipeline 109 .
  • the GTT 107 utilizing a translation look-aside buffer (TLB) 108 , maps system memory pages 102 into a graphics aperture 106 in physical address space 100 .
  • Graphics aperture 106 addresses are higher than the top of system memory.
  • the graphics aperture 106 is “visible” (i.e., capable of being utilized to access a corresponding system memory page) to the graphics processor.
  • the graphics aperture 106 is also visible to a host CPU via a mapping (corresponding to the GTT 107 mapping) maintained in a host CPU page table 104 .
  • the host CPU page table 104 is accessible to a host CPU via a host CPU pipeline 103 .
  • the page table 104 which may utilize a translation look-aside buffer (TLB) 105 , also maintains a direct mapping of system memory pages 102 ; this mapping may be referred to herein as a “virtual mapping.”
  • TLB translation look-aside buffer
  • the mapping maintained by the GTT 107 for the graphics aperture and the virtual mapping maintained by the host CPU page table 104 are different from each other, since each respectively maps addresses in non-overlapping ranges of physical address space, but each corresponds to the same system memory pages. Both mappings are visible to an application being executed by a host CPU. Accordingly, a region of shareable memory visible to both a graphics processor and a host CPU may be provided.
  • FIG. 2 illustrates another possible embodiment of a system for providing shareable graphics memory.
  • graphics functions are not integrated with the overall system, but are instead provided by a separate “add-in” graphics card.
  • the add-in card may be plugged into an AGP (Advanced Graphics Port 1 ), or PCI (Peripheral Component Interconnect Port 2 ), or other “socket,” or adapter interface, of the overall computer system.
  • AGP Advanced Graphics Port 1
  • PCI Peripheral Component Interconnect Port 2
  • adapter interface of the overall computer system.
  • shareable graphics memory may be provided as follows.
  • a GART (Graphics Aperture Relocation Table) 209 maps system memory pages 202 into an AGP (Advanced Graphics Port) memory area 205 of physical address space 200 .
  • the AGP memory area 205 is visible to a graphics processor via a graphics processor unit (GPU) pipeline 206 and an AGP bus.
  • GPU graphics processor unit
  • the AGP memory area 205 is also visible to a host CPU associated with CPU pipeline 203 .
  • a host CPU page table 204 accessible to CPU pipeline 203 , maintains a mapping (corresponding to the GART 209 mapping) of the AGP memory 205 .
  • Page table 204 also maintains a direct mapping (i.e., a “virtual mapping” as described above) of system memory pages 202 .
  • the mapping maintained by the GART 209 for the AGP memory area 205 and the virtual mapping maintained by the host CPU page table 204 are different from each other, since each respectively maps addresses in non-overlapping ranges of physical address space, but each corresponds to the same system memory pages. Both mappings are visible by an application being executed by a host CPU. Accordingly, a shareable memory visible to both a graphics processor and a host CPU may be provided.
  • An add-in card system as shown in FIG. 2 may also include local video memory 208 mapped to a graphics aperture 207 .
  • the CPU and the graphics processor may perform operations on data in the same region of memory.
  • the respective accesses are typically performed serially rather than concurrently. That is, typically, an application executed by the CPU may generate data requiring operations by the graphics processor, and the CPU may write the data to the graphics memory. Then, the application may “hand off” processing to the graphics processor, requesting it to perform some rendering functions with the data. When the graphics processor is finished performing the requested operations, it may in turn hand off processing back to the application.
  • embodiments of the invention enable the shareable memory to be used in an optimal manner.
  • the shareable memory is being created or modified according to embodiments of the invention, it is referred to as “optimally shared memory”.
  • FIG. 3 is a state diagram illustrating handing off between the CPU and the graphics processor according to embodiments of the invention.
  • FIG. 3 shows transitions between a mode wherein a host CPU is using the optimally shared memory, and a mode wherein a graphics processor is using the optimally shared memory.
  • the optimally shared memory may be referred to as being in a “CPU view”, “CPU optimized view” or “CPU optimal view”, while when the graphics processor is using the optimally shared memory, the optimally shared memory may be referred to as being in a “graphics view”, “graphics optimized view” or “graphics optimal view”.
  • Ellipse 302 represents a period of time wherein the optimally shared memory is in a graphics processor view.
  • the view may be “optimized” in that a caching attribute of the optimally shared memory has been assigned such that it is favorable to the graphics processor's performance.
  • the attribute of the optimally shared memory favorable to the CPU's performance may be assigned during the transitional phase between the graphics-optimized view and the CPU-optimized view.
  • the transitional phase may include a “Lock” operation as indicated in ellipse 303 .
  • the Lock refers to a known API (Application Program Interface) which may be utilized according to embodiments of the invention.
  • the Lock API may be called by an application being executed by the CPU.
  • a Lock API in general, reserves a memory region for the exclusive use of an application issuing the Lock.
  • Ellipse 300 represents a period of time wherein the optimally shared memory is in a CPU view.
  • the view may be “optimized” in that a caching attribute of the optimally shared memory has been assigned such that it is favorable to the CPU's performance (e.g., the optimally shared memory may be cached).
  • the optimally shared memory may be assigned a Write-Back attribute.
  • the attribute of the optimally shared memory favorable to the graphics processor's performance may be assigned during the transitional phase between the CPU-optimized view and the graphics-optimized view.
  • the transitional phase may include an “Unlock” operation as indicated in ellipse 301 .
  • the Unlock refers to a known API which may be utilized according to embodiments of the invention.
  • the Unlock API may be called by an application being executed by the CPU. Unlock APIs, in general, undo or reverse a Lock API executed earlier.
  • the application may call the Unlock API to notify the graphics processor that, for the time being, the CPU is no longer using the optimally shared memory and that the optimally shared memory is now accessible to the graphics processor.
  • cache coherency may be “enforced” on the optimally shared memory (i.e., it may be ensured that required data in the CPU's cache is evicted back to memory) as described later in greater detail.
  • a graphics “surface” may be one kind of data that resides in optimally shared memory that undergoes a transition between a CPU-optimized view and a graphics-optimized view as described above. In general, however, graphics surfaces need not reside in shared memory.
  • Graphics surfaces are used for a number of purposes. Surfaces may be buffers for data such as commands, pixels or vertices transferred from an application to the graphics processor. Surfaces may contain results of a rendering which will be displayed on an output display device, or simply returned to the application. Surfaces may be created for temporary storage of intermediate results of the graphics processor and as such never need to be visible to applications. Surfaces may be created for intermediate storage and use of applications, and as such never need to be visible to the graphics processor.
  • FIG. 4A illustrates an example of a graphics surface 400 commonly referred to as a “rectangular surface”.
  • a rectangular surface typically contains graphics pixels which are organized horizontally into scan lines with a pre-defined pitch and width made up of pixels. Multiple scan lines may be concatenated vertically to form a surface.
  • Such a graphics surface may typically be so organized in order to permit conveyance to an output display device which also has a given horizontal width and vertical scan line count, or to permit rendering of the surface as a texture patch onto another surface which will in turn be displayed or used in subsequent operations.
  • the graphics surface's area may be defined by its offset from a base memory address 401 and its size, which is usually defined in terms of the offset of an end point 402 from the base memory location 401 of the surface.
  • Bounded sub-areas may be defined within a surface, such as bounded sub-area 403 .
  • a bounded sub-area may be said to be “active” when a graphics application or graphics processor is operating on it.
  • Memory locations in a bounded sub-area may be defined in terms of the sub-area's base coordinates x, y and offsets w, h from the base coordinates, or alternatively expressed as the co-ordinates of the top, left, right and bottom boundaries of the bounded sub-area.
  • the foregoing coordinate system can also be used to describe the entire surface by the top, left, bottom and right rectangular co-ordinates relative to the surface origin.
  • the expression of a rectangular surface or sub-area will be referred to by parameter shorthand RECT(t,l,b,r), wherein t,l,b,r respectively denote the top, left, bottom and right rectangular co-ordinates relative to the surface origin.
  • FIG. 4B shows another possible configuration of a graphics surface 410 commonly referred to as a “linear surface”.
  • a bounded sub-area 411 extends across the pitch of the surface.
  • a Start Offset address and a Length may be specified. Address locations of pixels in the surface increment linearly from the Start Offset address to an End address.
  • the expression of a sub-area will be referred to by parameter shorthand LIN(o,l), wherein o and l respectively denote the Start-Offset relative to the surface origin, and length of the sub-area relative to the Start-Offset.
  • Such surfaces are typically used for buffers which convey grouped graphical data such as lists of rendering commands, lists of vertices or vertex indices, or of compressed pixel data using video or texture compression techniques.
  • the Lock and Unlock APIs may permit certain parameters to be specified. These parameters may include, for example, a specification of only a bounded sub-area within a surface to be locked or unlocked, or a specification of an entire surface to be locked or unlocked. Usually, a Lock API and subsequent Unlock API specify the same bounded sub-area or entire surface to be locked and subsequently unlocked.
  • FIG. 5 shows an example of a bounded area such as bounded sub-area 403 while it is residing in a cache.
  • Scan lines N and N+1 comprise pixels and overlie bounded sub-area 403 .
  • the extent of scan line N+1 within the bounded sub-area illustrates how a scan line may be regarded as being constituted by an “upper” segment, a “whole” segment and a “lower” segment.
  • Each of the “upper” and “lower” segments has an extent which is less than a cache line's length, while the “whole” segment has an extent equal to a cache line's length.
  • Cache control “primitives” exist which allow low-level control of lines of data within the cache based on a particular granularity, ranging from one cache line up to all lines. Such primitives may be used to enforce cache coherency over a range of data within the cache, or over the entire cache itself. For example, a known Intel® Pentium 4 processor cache control instruction primitive called “CLFLUSH” (cache-line flush) flushes cache data with a granularity equal to the cache-line's length for all cache lines associated with a supplied logical memory address parameter.
  • CLFLUSH cache-line flush
  • a bounded sub-area of a surface may be made coherent in segments of a cache line's length or less, by using a primitive such as CLFLUSH.
  • a primitive such as CLFLUSH.
  • the amount of time required to make the bounded sub-area coherent in segments as described above may exceed the amount of time required to simply flush the entire L1/L2 caches.
  • the maximum time required to make a given bounded sub-area coherent in segments can be calculated, based on the external memory bus speed and width and the size of the cache area to be made coherent in units of the external bus width.
  • the maximum time required to flush the entire cache can be similarly calculated based on the size of the cache and the external memory bus speed and width, as well as other processor overheads.
  • the maximum time required to make a given bounded sub-area coherent in segments may be compared to a maximum time required to flush the entire cache, and the approach which takes the least time may be used to make the bounded sub-area coherent.
  • Cache Page Flush Another primitive, “Cache Page Flush” (CPFLUSH) is known which flushes cache data with a granularity of a page. Under given circumstances, a Cache Page Flush may be faster and more efficient than a cache-line flush. Similarly, cache flushes of greater granularity can readily be contemplated.
  • a “Physical Address Region Cache-Flush” primitive could efficiently enforce coherency for all lines of graphics pixel data associated with a physical page (e.g., 4 KB) of memory or more.
  • Optimally shared memory may be created and utilized under different circumstances.
  • An application may explicitly specify that it wants to create and use optimally shared memory.
  • optimally shared memory may be provided transparently to an application, i.e., without the application being aware that it is using optimally shared memory.
  • a graphics driver may first enumerate, or “advertise” for an application, a list of types of surfaces that are supported by the graphics subsystem, and the application may select the “optimally shared” type from the list and request allocation of a memory region of the optimally shared type.
  • an application may request, through an API to the graphics driver, a memory region having the previously enumerated optimally shared type. For example, the application may request the creation of a graphics surface having an optimally shared memory type.
  • an application may not be presented with an enumerated list as described above, and instead optimally shared memory may be provided by the graphics driver for the application transparently, or “behind the scenes”.
  • the graphics driver may decide to use optimally shared memory according to a “usage policy” based on information that it receives from an application. For example, instead of explicitly selecting the optimally shared memory type from an enumerated list, the application may have indicated how it intends to use a graphics surface through “hints” that are passed from the application in a graphical API to the graphics driver.
  • hints include information specifying, for example, that the application will be reading/writing from the surface, or that the surface will be purely opaque (write-only; i.e., for example, only used as a target of graphics processor rendering and never read back by the application). Based on hints, the graphics driver may, transparently to the application, allocate an optimally shared memory surface and assign its caching attributes based on an evaluation of how performance may best be enhanced.
  • the graphics driver may, upon gauging usage and demands, decide that graphics memory previously created in one memory type or location may be better suited to be changed to an optimally shared type. Then, at a later time, that graphics memory type may be changed back to the original type and/or location, based on a reversal in the application's access usage patterns.
  • the optimally shared memory may have a caching attribute assigned depending on whether the optimally shared memory is to be used by the CPU or by the graphics processor.
  • the assigned attribute may be changed.
  • the data in the CPU's cache may be made coherent before the optimally shared memory is handed off to the graphics processor.
  • Such embodiments may be advantageously utilized, for example, when an application does not explicitly specify that it wants optimally shared memory, and instead, the graphics driver dynamically determines (e.g., through hints as described above) that optimally shared memory should be used. In such a case, the graphics memory may already be “old”; i.e., have been used as another type.
  • the optimally shared memory may always have a cached attribute (i.e., no change occurs in the assigned attribute).
  • a cached attribute i.e., no change occurs in the assigned attribute.
  • Such embodiments may be advantageously utilized, for example, when an application decides from the outset that it wants to create and use optimally shared memory.
  • the data in the CPU's cache may be made coherent before the optimally shared memory is handed off to the graphics processor.
  • the graphics processor's memory interface engine may be instructed through programmable DMA register settings, through the page attributes of the graphics processor page tables entries, or by other means, to treat the optimally shared memory as though it were uncached when the optimally shared memory is in the graphics processor view.
  • FIG. 6 shows a process flow for setting the caching attributes of an optimally shared memory surface depending upon which view the surface will be in.
  • An optimally shared surface may initially be created as shown in block 600 .
  • various data structures may be associated with the surface to facilitate operations thereon.
  • a unique identifier or “Surface handle” may be associated with the surface and act as a pointer to the surface. This Surface handle may further point to a “Surface-Object handle” which in turn points to a “Surface-Object”.
  • the Surface-Object may include private data structures including such information as memory type descriptors (e.g., whether the memory is optimally shared), the surface's memory base offset, pixel depth, size (width, height), and other characteristics of the surface.
  • the private data structures may also include “members” which contain information about the Surface-Object.
  • attributes of the memory may be set depending on which view the surface will be in, as determined in block 601 .
  • the attribute of the surface may be set to be the Write-Combine (or uncached) attribute, as shown in block 602 . Then, within the Surface-Object, a type descriptor “tag” may be set indicating that this memory is currently mapped optimally for graphics processor usage as shown in block 604 .
  • the attribute of the surface will typically be set to be the Write-Back (cached) attribute, as shown in block 603 , and the Surface-Object type descriptor may be tagged as shown in block 605 indicating the surface is currently mapped optimally for CPU usage.
  • the application may request to lock or unlock the surface, by calling a Lock API or Unlock API.
  • the Lock and Unlock APIs will typically include parameters such as the Surface-Object's handle or a “Bounded Area” parameter.
  • the Bounded Area parameter describes a sub-area of the surface as outlined above. Locking the surface allows the application to write data into the surface.
  • the application may then hand off processing to the graphics processor.
  • the application may call an Unlock API, which notifies the graphics processor that the optimally shared memory region is now accessible.
  • Unlock operation the graphics driver implicitly knows that the application has finished modifying the surface and that the surface is no longer going to be accessed by the CPU. Therefore, the optimally shared memory allocated to the surface which had a cache attribute favorable to the CPU view may have the cache attribute changed to one favorable for the graphics processor view.
  • the optimally shared memory should be made coherent.
  • FIG. 7A shows a process flow for converting the optimally shared memory from a CPU view to a graphics processor view when the process includes changing the caching attribute of the memory in a manner that enforces coherency.
  • it may first be determined whether a region of the shared memory worked on by the CPU is an entire surface, or only a sub-area of a surface. This sub-area or entire surface area may correspond to the Bounded Area or Surface-Object parameters which were passed to the Lock and Unlock APIs as discussed above.
  • a start and end address of the sub-area may be calculated as shown in block 702 .
  • the sub-area may be described by the RECT(t,l,b,r) parameter describing the location and dimensions of the sub-area.
  • the sub-area may also be described by a Start Offset from the surface base address and Length parameter. Then, the flow may progress to block 703 .
  • a starting page may be derived from the starting address of the memory by adjusting the address down to a page-aligned start. This is typically done by throwing away the least significant bits of the address up to the size of the page. For example, if a page was 4KB then by bitwise AND'ing the address with the 1's complement inverse of (4KB ⁇ 1) the page granular start address “addr” could be derived.
  • a cache line having the address “addr” may be flushed, for example by passing the “addr” parameter to a cache-line flush primitive such as “CLFLUSH.”
  • the process of flushing cache lines may continue until all cache lines have been flushed, as shown in blocks 705 and 706 .
  • block 705 it may be determined whether any cache lines remain to be flushed. If the result of the determination of block 705 is affirmative, the next line of the sub-area may be flushed by incrementing the “addr” parameter as shown in block 706 , and returning to block 704 .
  • the flow may progress to block 707 , wherein the caching attribute of the optimally shared memory is changed from cached (e.g., Write-Back) to uncached (e.g., Write-Combine).
  • the process may invalidate the page TLB (Translation Lookaside Buffer) entry containing the former caching attribute, using a known Intel® processor cache control instruction such as INVLPG. This operation may be performed to allow the change of the memory attributes to take effect and be propagated in other CPUs which may be in the system, using the inter-processor communication bus.
  • INVLPG Intel® processor cache control instruction
  • the process may continue for each page in the optimally shared memory, as shown in blocks 709 and 710 .
  • block 709 it may be determined whether any pages remain to be flushed. If the result of the determination of block 709 is affirmative, the next page may be flushed by incrementing the “addr” parameter as shown in block 710 , and returning to block 704 .
  • the flow may progress to block 711 , wherein the memory type descriptor in the Surface-Object is tagged indicating the optimally shared memory is now in graphics processor view, in order to allow tracking the current view of the surface in subsequent operations on the surface.
  • the graphics processor may hand off the optimally shared memory back to the CPU.
  • the caching attribute of the optimally shared memory may be changed from one favorable for the graphics processor to one favorable for the CPU.
  • a surface or sub-area which had been previously worked on by the graphics processor while the optimally shared memory was in the graphics-optimized view may be synchronized with respect to any pending rendering commands that are active or queued to be rasterized on the surface, by waiting until those commands have completed.
  • the graphics driver may track pending rasterization and flush the render cache causing all relevant pixels remaining in the graphics processor to migrate to the surface.
  • FIG. 7B is a flow diagram illustrating one possible embodiment of a method implemented during the transitional phase from a graphics processor view to a CPU view, to synchronize the optimally shared memory with respect to any pending rendering commands as described above.
  • a surface that had previously been used by the graphics processor may be identified as having pending operations associated with it. These pending operations may be indicated by descriptors and members within the Surface-Object that were previously set when graphics operations on the surface were initiated. Then, as shown in block 722 , it may be determined whether the output of any rendering to the surface is still pending, in which case the surface must be made coherent with respect to the graphics processor before it can be handed back to the CPU. If the result of the determination of block 722 were negative, no further processing would be needed. The flow could progress to block 727 .
  • the flow may progress to block 723 .
  • it may be determined whether rendering to any sub-area within the surface is pending, using private data accumulated by the graphics driver and in members or descriptors of the Surface-Object. If no rendering is pending, the flow may progress to block 727 .
  • any rendering commands that apply to the surface being handed off which are still pending in the graphics processor will be processed. This includes both commands which will render to the optimally shared surface, as well as those which will render to unrelated surfaces, but where pixels in the optimally shared surface are used to produce a result going to an unrelated surface.
  • the flow may then progress to block 725 , wherein the result of the execution of the previously identified render commands, i.e., rendered pixels, is flushed from any internal rendering queues in order to ensure the surface is coherent with respect to the graphics processor.
  • the flow may continue to block 726 wherein a continued iteration of blocks 723 - 726 may be stalled until it is assured that the rendered commands and rendering output has fully completed. Blocks 723 - 726 may be successively repeated until there is no relevant rendering output remaining. At that time, flow may progress to block 727 .
  • the flow may progress to block 727 , wherein the caching attribute of the shared memory is changed from uncached (e.g., Write-Combine) to cached (e.g., Write-Back).
  • the process may invalidate the page TLB containing the former caching attributes, using a known Intel® processor cache control instruction such as INVLPG. This operation may be performed to allow the change of the page attributes to take effect and be propagated other CPUs, which may be in the system, through the inter-processor communication bus.
  • the process may continue for each page in the shared memory.
  • block 729 it may be determined whether any pages remain to have their caching attributes changed. If the result of the determination of block 729 is affirmative, the process may repeat blocks 727 and 728 .
  • the flow may progress to block 730 , wherein Surface-Object descriptors are tagged to indicate the optimally shared memory is now in the view of the CPU and application software.
  • the optimally shared memory may always be assigned a CPU-optimal cached attribute, but wherein when a transition occurs from the CPU view to the graphics processor view, the data in the CPU's cache may be made coherent in order to allow the graphics processor to treat the optimally shared memory as uncached.
  • the graphics data may be made coherent with respect to the graphics processor's cache.
  • FIG. 8 illustrates a process flow, according to one possible embodiment, for creating or allocating an optimally shared memory surface according to the latter embodiment.
  • the optimally shared surface is created such that it always has a cached (e.g., Write-Back) attribute. That is, the caching attribute of the optimally shared memory does not depend on whether the CPU is using the memory or the graphics processor is using the memory. Rather, the graphics processor is instructed to treat the optimally shared memory as though it were uncached when the memory is in the graphics processor view.
  • the graphics processor has interface control registers or page table descriptors (as in FIG.
  • the optimally shared surface is, however, made coherent during a transition phase between a CPU view and a graphics processor view, removing the need for snooping.
  • the optimally shared memory surface may be allocated in pages assigned a Write-Back (WB) caching attribute. As shown in block 802 , it may then be determined from type descriptors or hints how the newly-allocated memory will be used: e.g., read/write by the CPU, or simply opaque (only for use by the graphics processor).
  • WB Write-Back
  • the flow may proceed directly to block 804 , wherein the newly-allocated surface is tagged in the memory type descriptor of the Surface-Object to indicate its current view.
  • the graphics processor will initially be using the surface, the surface may be made coherent to clear out any data associated with the surface that may still be in the cache from previous and/or unrelated application use of the memory.
  • This operation is shown in block 803 and comprises flushing any pages in the cache by a known coherency-enforcement primitive such as the Intel® Processor cache control instructions WBINVD (Write-Back Invalidate Cache), INVD (Invalidate Cache) or CLFLUSH.
  • a CPFLUSH Cache Page Flush
  • other processor cache control primitives could also be utilized for this purpose.
  • the newly-allocated surface may be identified or tagged through the memory type descriptor inside the Surface-Object as shown in block 804 to indicate its current view.
  • the application may request to lock the surface, using the handle for the surface passed to the application by the graphics driver. Locking the surface allows the application to write data into the surface.
  • the application may request the lock by calling a Lock API as described above.
  • FIG. 9A is a flow diagram illustrating one possible embodiment of a method for enforcing coherency.
  • a region of the optimally shared memory in use by application software running on the CPU is covering an entire surface, or simply a bounded sub-area within a surface.
  • This bounded sub-area or entire surface area may correspond to the bounded sub-area or entire surface area which were subject to the Lock and Unlock as discussed above.
  • a calculation may be performed as shown in block 902 , to determine if the time it would take to make the surface coherent is greater than 1 ⁇ 2 of the time it would take to perform a flush of all caches of all CPUs (since embodiments of the invention may be used in multi-CPU systems).
  • a flush of the entire CPU(s) L1 and L2 caches may be performed as shown in block 903 , to store the contents of these caches in the optimally shared memory, making it coherent. Then, the memory type descriptor of the Surface-Object may be tagged as shown in block 912 indicating the surface is in the view optimal for graphics processor usage. If the result of the calculation of block 902 is negative, the flow may progress to block 905 , described below.
  • a start and end address of the sub-area may be calculated as shown in block 904 .
  • the sub-area may be described as in FIG. 4A , by a RECT(t,l,b,r) parameter, where the bounded shape of the sub-area is described using the top, left, bottom, right coordinates of the rectangle indicating the location and dimensions of the sub-area.
  • the sub-area may be a linear surface as described as in FIG. 4B by a Start Offset address and a Length.
  • block 905 which will detect if the sub-area starts mid-way into a cache-line. If the result of the determination of block 905 is affirmative, block 906 may be performed which will re-align the start of the area onto which coherency will be enforced so that the cache line flush will direct the dirty cache line invalidate at the specific addresses intended to be made coherent, and the flow may progress to block 907 .
  • a cache line having cache data corresponding to the address “addr” may be flushed, for example by passing the “addr” parameter to a cache-line flush primitive such as “CLFLUSH.”
  • block 909 it may be determined whether the end of a line of the rectangular or linear sub-area has been reached. If the result of the determination of block 909 is negative, the next cache line may be flushed by incrementing the “addr” parameter as shown in block 908 , with an amount equal to the size of a cache-line and returning to block 907 .
  • block 910 it may be determined whether the end of the sub-area has been reached. If the end of the sub-area has been reached, the entire sub-area has been flushed to make the optimally shared memory region coherent for use by the graphics processor, and the flow may progress to block 912 .
  • next line of a rectangular sub-area may be flushed by incrementing the “addr” parameter as shown in block 911 , with an amount equal to the size of the surface pitch minus the width of the sub-area adjusted for any alignment, and returning to block 905 .
  • a cache-line flush (CLFLUSH) as used in the above-described process has a relatively small granularity (i.e., it handles relatively small portions of data).
  • a page flush (CPFLUSH) may flush all of the cache lines associated with a page of memory.
  • a process which enforces coherency when the optimally shared memory is to be handed off to the graphics processor as described in the following may use page flushes rather than cache-line flushes, in order to enforce coherency over larger portions of graphical data with minimal processor overhead. Under given conditions, a process using page flushes may be faster and more efficient than incurring the overhead of breaking a shared region into lines.
  • a CPU instruction is contemplated which efficiently processes a given memory region by taking a memory range as a parameter and ensuring all data in the range is cache coherent.
  • the data in the optimally shared memory could be worked on by the graphics processor as if it were using an uncached or Write-Combine page cache attribute.
  • the graphics processor may hand off the shared memory back to the CPU.
  • a surface or sub-area which had been previously worked on by the graphics processor while the shared memory was in the graphics-optimized view may be synchronized with respect to the graphics processor, including completing any pending rendering commands that are active or queued to be rasterized on the surface.
  • the graphics driver may track pending rasterization of these render commands and flush the render cache to ensure the surface is coherent.
  • FIG. 9B is a flow diagram illustrating one possible embodiment of a method for implementing the foregoing.
  • a surface that had previously been used by the graphics processor may be identified as having pending operations associated with it. These pending operations may be indicated by descriptors and members within the Surface-Object that were previously set when graphics operations on the surface were initiated. Then, as shown in block 922 , it may be determined whether the output of any rendering to the surface is still pending, in which case the surface must be made coherent with respect to the graphics processor before it can be handed back to the CPU. If the result of the determination of block 922 were negative, no further processing would be needed. The flow could progress to block 927 , wherein the memory type descriptor of the Surface-Object would be tagged, indicating that the surface is now optimally in the view of the CPU and applications.
  • the flow may progress to block 923 .
  • it may be determined whether rendering to any sub-area within the surface is pending, using private data accumulated by the graphics driver and in members or descriptors of the Surface-Object. If no rendering is pending, the flow may progress to block 927
  • any rendering commands that apply to the surface being handed off which are still pending in the graphics processor will be processed. This includes both commands which will render to the optimally shared surface, as well as those which will render to unrelated surfaces, but where pixels in the optimally shared surface are used to produce a result going to an unrelated surface.
  • the flow may then progress to block 925 , wherein the result of the execution of the previously identified render commands, i.e., rendered pixels, is flushed from any internal rendering queues in order to ensure the surface is coherent with respect to the graphics processor.
  • the flow may continue to block 926 wherein a continued iteration of blocks 923 - 926 may be stalled until it is assured that the rendered commands and rendering output has fully completed. Blocks 923 - 926 may be successively repeated until there is no relevant rendering output remaining. At that time, flow may progress to block 927 .
  • the conversion of the optimally shared memory to have the caching attribute favorable to the CPU may occur within the Lock API or semantically equivalent interface, while the conversion of the optimally shared memory to have the attribute favorable to the graphics processor may occur within the Unlock API or semantically equivalent interface.
  • the Lock and Unlock APIs may be executed at the graphics device driver level.
  • embodiments of the invention are not limited to performing the conversion within the Lock and Unlock APIs.
  • similar interface APIs are known such as BeginAccess and EndAccess APIs which indicate semantically equivalent action of negotiating beginning and ending of access in facilitating shared ownership.
  • the conversion could be performed in various other levels of code such as within other interfaces, and within internal memory management and other activities.
  • Implementations of the present invention may be tangibly embodied as computer-executable instructions that may be stored and transported on a computer-usable medium such as a diskette, magnetic tape, disk or CD-ROM.
  • the instructions could be implemented, for example, in a graphics device driver.
  • the instructions may be downloaded via a suitable reading device to a computer memory from which they may be fetched and executed by a processor to effect the advantageous features of the invention.
  • Embodiments of the invention may be advantageous in a number of applications.
  • MPEG Motion Pictures Expert Group Port 3
  • MPEG applications generate “key frames” which are stored in memory and subsequently read back by the CPU to generate interpolated intermediate frames based on the key frames.
  • key frames By enabling the key frames to be stored in a shared memory which is substantially optimal for reading back by the CPU, while avoiding the aliasing, snoop cycles and the like of previous approaches, the performance of MPEG applications can be substantially improved.
  • vertex buffers are typically created.
  • a vertex buffer is a buffer filled with points or vertices for a polygon; the vertices could be indexed.
  • a vertex buffer would typically be handed off to the graphics processor to be rendered.
  • the application would also need to read back the data in the vertex buffer in order to detect, for example, whether graphical objects would “collide” with each other. Or, for example, the application might need to modify the vertices in order to manipulate a graphical object in order to cause it to “morph” or bend or the like.
  • the vertex buffer could be created with a shared memory type.
  • the vertex buffer would then have a format making it possible to efficiently access the buffer both from a CPU view (for reading back vertex data by the application) and from a graphics view (for performing rendering operations on the vertex data).
  • Another useful application of the invention is in graphics “transform and lighting” operations in a traditional 3D pipeline, or for the complex vertex manipulation in modern “programmable Vertex Shaders”.
  • the application may create a buffer of geometry including vertices of an object to be rendered. These vertices describe polygons which need to be transformed and lit from the “world space” in which the model was created in to a view space which can be rendered onto the screen together with other objects. In this process, the vertices may need to be manipulated involving read, modify and writing the vertex data.
  • Some computer chipsets include specialized graphics hardware for performing transform and lighting applications. Alternatively, part of the CPU's specialized instruction set may be used to accelerate the transform and lighting.
  • processor manufacturers provide a portion of the CPU's pipeline as a “processor-specific graphics pipeline” (PSGP) for software vendors to utilize for graphics chipsets that do not include specialized transform and lighting hardware.
  • PSGP pipeline uses the host CPU to perform transform and lighting operations, and vertex data which has been transformed and light accordingly is subsequently passed to the graphics processor for use in rendering.
  • the CPU is performing transform and lighting operations, it is most efficient if they can be performed in cached mode. If “clipping” is entailed, the data may need to be read back by the CPU and be manipulated. Because this requires reading the data from a memory buffer, manipulating it and writing it back to the buffer, these manipulations may be optimally performed when the memory is in cached mode. Additionally if the operation to be performed on the vertex is programmatically complex as is obviously possible from a fully programmable Vertex Shader. Processing one vertex may involve many reads and writes of each vertex as well as many other vertices, in order to achieve complex effects such as object-surface displacement mapping and environmental lighting effects.
  • the shared memory is substantially optimally formatted for either view, transform and lighting operations could be performed very efficiently; no buffer or data aliasing is required.
  • Another possible application of the present invention could involve implementation of an API for graphics that can perform advanced rendering that may not necessarily be directly supported by hardware.
  • Certain portions of the rendering exposed by the API may be “hardware acceleratable” (capable of being performed by the graphics processor) and some may not. It may improve efficiency to have the operations that are acceleratable done on the graphics processor in parallel as much as possible with CPU operation. This is particularly true for trivial rendering operations within a rendering process, such as Move, Fill, or Integer and Boolean operations which, if done by the graphics processor, will leave the CPU free to generate the next vertices of the complex shape such as bezier curves, or performing complex rasterization stages of the rendering effect.

Abstract

A method and system according to the present invention provide for sharing memory between applications running on one or more CPUs, and acceleration co-processors, such as graphics processors, of a computer system in which the memory may retain its optimal caching and access attributes favorable to the maximum performance of both CPU and graphics processor. The method involves a division of ownership within which the shared memory is made coherent with respect to the previous owner, prior to handing placing the shared memory in the view the next owner. This arbitration may involve interfaces within which ownership is transitioned from one client to another. Within such transition of ownership the memory may be changed from one view to another by actively altering the processor caching attributes of the shared memory as well as via the use of processor low-level cache control instructions, and/or graphics processor render flush algorithms which serve to enforce data coherency. Embodiments of the invention facilitate maximal access efficiency for all clients which share the data, without the incurring the overhead of moving or replicating the data between the clients.

Description

FIELD OF THE INVENTION
The present invention relates to computer graphics systems, and more particularly to optimizing the use of memory shared by a CPU (central processing unit) and a graphics processor.
BACKGROUND
In many known computer systems, a host CPU may execute an application which calls for graphics operations to be performed. To implement such graphics operations, the application will typically fetch initial graphics data and primitives (including, but not limited to, textures, geometry, models, etc.) from offline storage (including, but not limited to, network, CD or hard-drive disk storage) and create a copy of the graphics data and primitives in online system memory. The application may operate on the graphics pixels, data models and primitives in the online system memory and then, at some point, the application may call for a graphics processor of the computer system to operate on the graphics data and primitives, typically in order to offload low-level rendering tasks from the host CPU.
According to known implementations, when invoking operations by the graphics processor, the application will create a second copy, separate from the copy initially loaded into online system memory from offline storage, of the graphics data and primitives for the graphics processor to operate on. This second, separate copy (which may be referred to herein as an “aliased” copy) may typically be placed in a region of online system memory which may be referred to as “graphics memory” because it is set aside for use by the graphics processor. Various implementations of graphics memory are known in the art. For example, discrete add-in graphics adapter cards may contain graphics memory which is locally connected by a private memory bus on the card; this is typically referred to as “local video memory”. In another example, in chipsets with the known Intel® Hub Architecture, a region of system memory designated Advanced Graphics Port (AGP) memory is used as graphics memory. AGP memory may also be referred to as “non-local video memory”.
The graphics processor would typically operate on the aliased copy of the graphics data in the graphics memory for a period of time. Typically, the graphics memory containing the aliased copy of the graphics data would be assigned an uncached attribute in the host CPU's memory page attribute tables, meaning that application access to the graphics data would not take advantage of the host CPU's cache while that data was in this uncached graphics memory region to be processed by the graphics processor. After the uncached, aliased copy had been processed by the graphics processor for a period of time, it would typically be necessary to return to the application for further processing of the graphics data. According to the aforementioned implementation, however, the application operates on the copy of the graphics data in the system memory. This system memory would typically have been assigned a cached attribute, so that the CPU could perform the application's operations in a cached mode. As is well known, cached operations by a CPU allow the CPU to be more efficient than uncached operations.
In order for the application to continue operating on the graphics data after the graphics processor, of course, changes to the aliased copy made by the graphics processor need to be reflected in the copy in the system memory used by the application.
The application may continue to process the copy in the system memory for a period of time in cached mode, and then again turn processing over to the graphics processor. Naturally, changes to the copy in the system memory must be reflected in the aliased copy in the graphics memory when the graphics processor takes over again. The foregoing exchange between the application and the graphics processor may be repeated many times.
It may be appreciated that the foregoing arrangement entails disadvantages. One disadvantage is that two copies of the same graphics data must be maintained, consuming valuable system memory resources. Additionally, valuable CPU bandwidth is consumed in creating and maintaining the two separate copies, particularly in propagating respective updates between the two copies across buses between multiple interfaces.
Implementations which do not involve maintaining two copies of graphics data as described in the foregoing are known. According to one such implementation, cacheable system memory is made available to a graphics processor for use as graphics memory, and the graphics processor as well as the host CPU perform operations on graphics data in the graphics memory. As described previously, the graphics processor and the host CPU take turns operating on the graphics data. Because the memory is cacheable, the CPU is able to operate in cached mode for improved efficiency.
However, this approach introduces the possibility of data “incoherency”. That is, because the CPU uses the graphics memory in cached mode, the data that the graphics processor has been asked to perform operations on may not yet have been flushed (i.e., evicted from the cache and written out to the graphics memory). Rather, the data may reside somewhere between the internals of the CPU and the L1 and L2 caches, and not have actually reached the graphics memory yet. Thus, when the graphics processor accesses the graphics memory to attempt to perform operations on the required data, it may not be able to find the most recent version of the required data. Instead, the data in the graphics memory may be “stale”. Or worse, the data may be emptied from the cache, just after the graphics processor has completed accessing the data location, thereby invalidating the operation.
To handle the problem of incoherency, chipset “snoop cycles” have been utilized. Snoop cycles involve the graphics processor causing the chipset to force coherency in the CPU cache with respect to the graphics memory before the graphics processor is allowed to access the graphics memory. Snoop cycles, however, entail the disadvantage of requiring a considerable amount of overhead, which detracts from system performance. Snoop cycles inspect memory data on a location-by-location basis, and if the required location's data is still in the CPU's cache, it is extracted and made coherent on a location-by-location basis. Such operations require a great deal of “handshaking” between interfaces, and are inefficient because they must be performed on a location-by-location, or line-by-line basis.
According to yet another implementation, graphics memory is used strictly in uncached mode. In this method, the data in the graphics memory is always kept coherent, since whenever the CPU wishes to read or write data to the graphics memory, the writes always go directly and immediately to the graphics memory and are never cached. A disadvantage associated with this method, however, is that the improved CPU performance afforded by cached operations is not available.
In view of the foregoing considerations, a method and system are called for which overcome the deficiencies of existing implementations.
BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 shows a possible embodiment of a computer memory shared between a CPU and a graphics processor;
FIG. 2 shows another possible embodiment of a computer memory shared between a CPU and a graphics processor;
FIG. 3 shows a state diagram illustrating transitions between a mode wherein the CPU is using the optimally shared memory, and a mode wherein the graphics processor is using the optimally shared memory;
FIGS. 4A and 4B show examples of graphics surfaces and buffers, as well as types of sub-areas of the surfaces that can be described through surface parameters;
FIG. 5 shows scan lines in a bounded area of a graphics surface;
FIG. 6 shows a flow diagram of a process for allocating an optimally shared memory region according to one embodiment;
FIG. 7A shows a flow diagram of a process for making a surface or bounded sub-area of the surface coherent according to the embodiment of FIG. 6;
FIG. 7B shows a flow diagram for completing pending rendering operations on a graphics surface and changing the caching attribute of the surface according to the embodiment of FIG. 6;
FIG. 8 shows a flow diagram of a process for allocating an optimally shared memory region according to another embodiment;
FIG. 9A shows a flow diagram of a process for making a surface or bounded sub-area of the surface coherent according to the embodiment of FIG. 8; and
FIG. 9B shows a flow diagram for completing pending rendering operations on a graphics surface and changing the caching attribute of the surface according to the embodiment of FIG. 8.
DETAILED DESCRIPTION
In embodiments of a method and system according to the present invention, an optimally shared graphics memory may be provided which has a caching attribute assigned depending on whether the optimally shared memory is to be used by a host CPU or by a graphics processor. The attribute assigned to the optimally shared memory is selected to be favorable to the performance of the CPU when the CPU is using the optimally shared memory, and favorable to the performance of the graphics processor when the graphics processor is using the optimally shared memory.
According to the embodiments, the assigned caching attribute of the optimally shared memory may be changed during a transition between a mode wherein a host CPU is using the optimally shared memory, and a mode wherein a graphics processor is using the optimally shared memory.
The attribute assigned to the optimally shared memory while the CPU is using it may be a cached attribute. Here, “cached attribute” means that, to enable operations by the CPU at its internal clock speed, portions of data destined for the optimally shared memory may first be transferred to and worked on in the CPU's cache. When a transition occurs to a mode wherein the graphics processor will work on the data in the optimally shared memory, the data in the CPU's cache may be made coherent, and the assigned caching attribute of the optimally shared memory may be changed to be an uncached attribute. Here, “uncached attribute” means that for read and write operations, no data is fetched from the CPU's cache. Rather, the data flows directly out through the external system memory bus to the system memory, as though no cache was present.
In other embodiments, the optimally shared memory may always be assigned a cached attribute, but when a transition occurs to a mode wherein the graphics processor will work on the data in the optimally shared memory, the data in the CPU's cache may be made coherent. A benefit of enforcing coherency prior to making the transition is that snoop cycles and their associated detriment to performance may be avoided, since the graphics processor's direct memory access (DMA) can treat the optimally shared memory as though it were already coherent. The need to perform CPU cache snooping cycles from the graphics controller is thereby avoided, and the optimally shared memory may effectively be treated as if it had always been used with the uncached attribute.
The following discussion of FIGS. 1 and 2 describes how a “shareable” graphics memory region may be provided according to known art. It should be understood that “shareable” as used in the following is to be distinguished from “optimally shared” according to embodiments of the invention, as described in greater detail hereinafter.
FIG. 1 shows elements of a computer system made by Intel Corporation, which is commercially available and could be suitable for implementing embodiments of the invention. Block 110 shown in FIG. 1 illustrates elements of an “integrated graphics” system wherein graphics functions are integrated into the overall system. More particularly, the graphics processor may be integrated into a memory controller hub (MCH) component of a chipset.
In the system shown in FIG. 1, shareable graphics memory may be provided as follows. A graphics processor page translation table (GTT) 107 is accessible to a graphics processor via a graphics processor unit (GPU) pipeline 109. The GTT 107, utilizing a translation look-aside buffer (TLB) 108, maps system memory pages 102 into a graphics aperture 106 in physical address space 100. Graphics aperture 106 addresses are higher than the top of system memory. The graphics aperture 106 is “visible” (i.e., capable of being utilized to access a corresponding system memory page) to the graphics processor.
The graphics aperture 106 is also visible to a host CPU via a mapping (corresponding to the GTT 107 mapping) maintained in a host CPU page table 104. The host CPU page table 104 is accessible to a host CPU via a host CPU pipeline 103. The page table 104, which may utilize a translation look-aside buffer (TLB) 105, also maintains a direct mapping of system memory pages 102; this mapping may be referred to herein as a “virtual mapping.” The mapping maintained by the GTT 107 for the graphics aperture and the virtual mapping maintained by the host CPU page table 104 are different from each other, since each respectively maps addresses in non-overlapping ranges of physical address space, but each corresponds to the same system memory pages. Both mappings are visible to an application being executed by a host CPU. Accordingly, a region of shareable memory visible to both a graphics processor and a host CPU may be provided.
In alternative embodiments utilizing integrated graphics, only a mapping of a graphics aperture, visible to both a graphics processor and a host CPU, may be provided.
FIG. 2 illustrates another possible embodiment of a system for providing shareable graphics memory. In the embodiment of FIG. 2, graphics functions are not integrated with the overall system, but are instead provided by a separate “add-in” graphics card. The add-in card may be plugged into an AGP (Advanced Graphics Port1), or PCI (Peripheral Component Interconnect Port2), or other “socket,” or adapter interface, of the overall computer system.
1 See, e.g.: 1. Accelerated Graphics Port Interface Specification, Revision 1.0, Intel Corporation, Jul. 31 1996; 2. Accelerated Graphics Port Interface Specification, Revision 2.0, Intel Corporation, May 4 1998; and 3. Revision 3.0 Draft Version 0.95, Intel corporation, Jun. 12 2001.
2 See, e.g.: PCI Special Interest Group (SIG) PCI Local Bus Specification, Revision 2.2, published Dec. 18, 1998; BCPR Services Inc. EISA Specification, Version 3.12, 1992, published 1992; USB Specification, Version 1.1, published Sep. 23, 1998; or other specifications relating to comparable peripheral buses.
In the add-in card system shown in FIG. 2, shareable graphics memory may be provided as follows. A GART (Graphics Aperture Relocation Table) 209 maps system memory pages 202 into an AGP (Advanced Graphics Port) memory area 205 of physical address space 200. The AGP memory area 205 is visible to a graphics processor via a graphics processor unit (GPU) pipeline 206 and an AGP bus.
The AGP memory area 205 is also visible to a host CPU associated with CPU pipeline 203. A host CPU page table 204, accessible to CPU pipeline 203, maintains a mapping (corresponding to the GART 209 mapping) of the AGP memory 205. Page table 204 also maintains a direct mapping (i.e., a “virtual mapping” as described above) of system memory pages 202. The mapping maintained by the GART 209 for the AGP memory area 205 and the virtual mapping maintained by the host CPU page table 204 are different from each other, since each respectively maps addresses in non-overlapping ranges of physical address space, but each corresponds to the same system memory pages. Both mappings are visible by an application being executed by a host CPU. Accordingly, a shareable memory visible to both a graphics processor and a host CPU may be provided.
An add-in card system as shown in FIG. 2 may also include local video memory 208 mapped to a graphics aperture 207.
As described in the foregoing, the CPU and the graphics processor may perform operations on data in the same region of memory. The respective accesses are typically performed serially rather than concurrently. That is, typically, an application executed by the CPU may generate data requiring operations by the graphics processor, and the CPU may write the data to the graphics memory. Then, the application may “hand off” processing to the graphics processor, requesting it to perform some rendering functions with the data. When the graphics processor is finished performing the requested operations, it may in turn hand off processing back to the application.
In consideration of the above-described handing-off process, embodiments of the invention enable the shareable memory to be used in an optimal manner. Thus, hereinafter where the shareable memory is being created or modified according to embodiments of the invention, it is referred to as “optimally shared memory”.
FIG. 3 is a state diagram illustrating handing off between the CPU and the graphics processor according to embodiments of the invention. FIG. 3 shows transitions between a mode wherein a host CPU is using the optimally shared memory, and a mode wherein a graphics processor is using the optimally shared memory. For convenience, when the CPU is using the optimally shared memory, the optimally shared memory may be referred to as being in a “CPU view”, “CPU optimized view” or “CPU optimal view”, while when the graphics processor is using the optimally shared memory, the optimally shared memory may be referred to as being in a “graphics view”, “graphics optimized view” or “graphics optimal view”.
Ellipse 302 represents a period of time wherein the optimally shared memory is in a graphics processor view. The view may be “optimized” in that a caching attribute of the optimally shared memory has been assigned such that it is favorable to the graphics processor's performance.
There may be a transitional phase between the graphics-optimized view of the optimally shared memory and the CPU-optimized view. According to embodiments of the invention, the attribute of the optimally shared memory favorable to the CPU's performance may be assigned during the transitional phase between the graphics-optimized view and the CPU-optimized view.
The transitional phase may include a “Lock” operation as indicated in ellipse 303. The Lock refers to a known API (Application Program Interface) which may be utilized according to embodiments of the invention. The Lock API may be called by an application being executed by the CPU. A Lock API, in general, reserves a memory region for the exclusive use of an application issuing the Lock.
Ellipse 300 represents a period of time wherein the optimally shared memory is in a CPU view. According to embodiments of the invention, the view may be “optimized” in that a caching attribute of the optimally shared memory has been assigned such that it is favorable to the CPU's performance (e.g., the optimally shared memory may be cached). In particular, for example, the optimally shared memory may be assigned a Write-Back attribute.
There may be a transitional phase between the CPU-optimized view of the optimally shared memory and the graphics-optimized view. According to embodiments of the invention, the attribute of the optimally shared memory favorable to the graphics processor's performance may be assigned during the transitional phase between the CPU-optimized view and the graphics-optimized view.
The transitional phase may include an “Unlock” operation as indicated in ellipse 301. The Unlock refers to a known API which may be utilized according to embodiments of the invention. The Unlock API may be called by an application being executed by the CPU. Unlock APIs, in general, undo or reverse a Lock API executed earlier. The application may call the Unlock API to notify the graphics processor that, for the time being, the CPU is no longer using the optimally shared memory and that the optimally shared memory is now accessible to the graphics processor.
According to embodiments of the invention, during the transitional phase from the CPU-optimized view to the graphics-optimized view, cache coherency may be “enforced” on the optimally shared memory (i.e., it may be ensured that required data in the CPU's cache is evicted back to memory) as described later in greater detail.
A graphics “surface” may be one kind of data that resides in optimally shared memory that undergoes a transition between a CPU-optimized view and a graphics-optimized view as described above. In general, however, graphics surfaces need not reside in shared memory.
Graphics surfaces are used for a number of purposes. Surfaces may be buffers for data such as commands, pixels or vertices transferred from an application to the graphics processor. Surfaces may contain results of a rendering which will be displayed on an output display device, or simply returned to the application. Surfaces may be created for temporary storage of intermediate results of the graphics processor and as such never need to be visible to applications. Surfaces may be created for intermediate storage and use of applications, and as such never need to be visible to the graphics processor.
FIG. 4A illustrates an example of a graphics surface 400 commonly referred to as a “rectangular surface”. A rectangular surface typically contains graphics pixels which are organized horizontally into scan lines with a pre-defined pitch and width made up of pixels. Multiple scan lines may be concatenated vertically to form a surface. Such a graphics surface may typically be so organized in order to permit conveyance to an output display device which also has a given horizontal width and vertical scan line count, or to permit rendering of the surface as a texture patch onto another surface which will in turn be displayed or used in subsequent operations.
The graphics surface's area may be defined by its offset from a base memory address 401 and its size, which is usually defined in terms of the offset of an end point 402 from the base memory location 401 of the surface. Bounded sub-areas may be defined within a surface, such as bounded sub-area 403. A bounded sub-area may be said to be “active” when a graphics application or graphics processor is operating on it. Memory locations in a bounded sub-area may be defined in terms of the sub-area's base coordinates x, y and offsets w, h from the base coordinates, or alternatively expressed as the co-ordinates of the top, left, right and bottom boundaries of the bounded sub-area. The foregoing coordinate system can also be used to describe the entire surface by the top, left, bottom and right rectangular co-ordinates relative to the surface origin. Hereafter the expression of a rectangular surface or sub-area will be referred to by parameter shorthand RECT(t,l,b,r), wherein t,l,b,r respectively denote the top, left, bottom and right rectangular co-ordinates relative to the surface origin.
FIG. 4B shows another possible configuration of a graphics surface 410 commonly referred to as a “linear surface”. In graphics surface 410, a bounded sub-area 411 extends across the pitch of the surface. For the bounded sub-area 411, a Start Offset address and a Length may be specified. Address locations of pixels in the surface increment linearly from the Start Offset address to an End address. Hereafter the expression of a sub-area will be referred to by parameter shorthand LIN(o,l), wherein o and l respectively denote the Start-Offset relative to the surface origin, and length of the sub-area relative to the Start-Offset. Such surfaces are typically used for buffers which convey grouped graphical data such as lists of rendering commands, lists of vertices or vertex indices, or of compressed pixel data using video or texture compression techniques.
The Lock and Unlock APIs, discussed above in connection with FIG. 3, may permit certain parameters to be specified. These parameters may include, for example, a specification of only a bounded sub-area within a surface to be locked or unlocked, or a specification of an entire surface to be locked or unlocked. Usually, a Lock API and subsequent Unlock API specify the same bounded sub-area or entire surface to be locked and subsequently unlocked.
When a graphics surface is created and an application is manipulating pixels within the surface, portions of the surface may reside in the host CPU's cache for periods of time. Within the cache, a portion of the surface data that is handled as a unit is referred to as the “granularity” of the data. FIG. 5 shows an example of a bounded area such as bounded sub-area 403 while it is residing in a cache. Scan lines N and N+1 comprise pixels and overlie bounded sub-area 403.
Further, the extent of scan line N+1 within the bounded sub-area illustrates how a scan line may be regarded as being constituted by an “upper” segment, a “whole” segment and a “lower” segment. Each of the “upper” and “lower” segments has an extent which is less than a cache line's length, while the “whole” segment has an extent equal to a cache line's length.
Cache control “primitives” exist which allow low-level control of lines of data within the cache based on a particular granularity, ranging from one cache line up to all lines. Such primitives may be used to enforce cache coherency over a range of data within the cache, or over the entire cache itself. For example, a known Intel® Pentium 4 processor cache control instruction primitive called “CLFLUSH” (cache-line flush) flushes cache data with a granularity equal to the cache-line's length for all cache lines associated with a supplied logical memory address parameter.
Advantageously, according to embodiments of the invention, a bounded sub-area of a surface may be made coherent in segments of a cache line's length or less, by using a primitive such as CLFLUSH. Such an approach may be particularly beneficial if the time it takes to make a bounded sub-area coherent in segments of a cache line's length or less is less than the time it would take to make the bounded sub-area coherent using a primitive with a coarser granularity, or by flushing the entire L1/L2 cache.
On the other hand, it is possible that the amount of time required to make the bounded sub-area coherent in segments as described above may exceed the amount of time required to simply flush the entire L1/L2 caches. The maximum time required to make a given bounded sub-area coherent in segments can be calculated, based on the external memory bus speed and width and the size of the cache area to be made coherent in units of the external bus width. The maximum time required to flush the entire cache can be similarly calculated based on the size of the cache and the external memory bus speed and width, as well as other processor overheads. According to embodiments of the invention as described in greater detail below, the maximum time required to make a given bounded sub-area coherent in segments may be compared to a maximum time required to flush the entire cache, and the approach which takes the least time may be used to make the bounded sub-area coherent.
Another primitive, “Cache Page Flush” (CPFLUSH) is known which flushes cache data with a granularity of a page. Under given circumstances, a Cache Page Flush may be faster and more efficient than a cache-line flush. Similarly, cache flushes of greater granularity can readily be contemplated. For example, a “Physical Address Region Cache-Flush” primitive could efficiently enforce coherency for all lines of graphics pixel data associated with a physical page (e.g., 4 KB) of memory or more.
Optimally shared memory according to embodiments of the invention may be created and utilized under different circumstances. An application may explicitly specify that it wants to create and use optimally shared memory. On the other hand, optimally shared memory may be provided transparently to an application, i.e., without the application being aware that it is using optimally shared memory.
In the former case, a graphics driver may first enumerate, or “advertise” for an application, a list of types of surfaces that are supported by the graphics subsystem, and the application may select the “optimally shared” type from the list and request allocation of a memory region of the optimally shared type. To allocate an optimally shared memory region, an application may request, through an API to the graphics driver, a memory region having the previously enumerated optimally shared type. For example, the application may request the creation of a graphics surface having an optimally shared memory type.
In the latter case, an application may not be presented with an enumerated list as described above, and instead optimally shared memory may be provided by the graphics driver for the application transparently, or “behind the scenes”. The graphics driver may decide to use optimally shared memory according to a “usage policy” based on information that it receives from an application. For example, instead of explicitly selecting the optimally shared memory type from an enumerated list, the application may have indicated how it intends to use a graphics surface through “hints” that are passed from the application in a graphical API to the graphics driver. Examples of hints include information specifying, for example, that the application will be reading/writing from the surface, or that the surface will be purely opaque (write-only; i.e., for example, only used as a target of graphics processor rendering and never read back by the application). Based on hints, the graphics driver may, transparently to the application, allocate an optimally shared memory surface and assign its caching attributes based on an evaluation of how performance may best be enhanced.
In yet another embodiment, the graphics driver may, upon gauging usage and demands, decide that graphics memory previously created in one memory type or location may be better suited to be changed to an optimally shared type. Then, at a later time, that graphics memory type may be changed back to the original type and/or location, based on a reversal in the application's access usage patterns.
As noted earlier, in embodiments of the invention, the optimally shared memory may have a caching attribute assigned depending on whether the optimally shared memory is to be used by the CPU or by the graphics processor. When a transition occurs between the CPU view and the graphics processor view or vice versa, the assigned attribute may be changed. When the transition is from the CPU view to the graphics processor view, the data in the CPU's cache may be made coherent before the optimally shared memory is handed off to the graphics processor. Such embodiments may be advantageously utilized, for example, when an application does not explicitly specify that it wants optimally shared memory, and instead, the graphics driver dynamically determines (e.g., through hints as described above) that optimally shared memory should be used. In such a case, the graphics memory may already be “old”; i.e., have been used as another type.
On the other hand, according to other embodiments, the optimally shared memory may always have a cached attribute (i.e., no change occurs in the assigned attribute). Such embodiments may be advantageously utilized, for example, when an application decides from the outset that it wants to create and use optimally shared memory. In such embodiments, when a transition occurs from the CPU view to the graphics processor view, the data in the CPU's cache may be made coherent before the optimally shared memory is handed off to the graphics processor. In order not to trigger snoop cycles, the graphics processor's memory interface engine may be instructed through programmable DMA register settings, through the page attributes of the graphics processor page tables entries, or by other means, to treat the optimally shared memory as though it were uncached when the optimally shared memory is in the graphics processor view. Most processors typically support treating graphics memory as uncached, independently of the CPU's page table cache attribute settings, since most solutions to the coherency problem revolve around using graphics memory as uncached. In the CPU's page table entries for the memory, however, the memory continues to have a cached attribute.
The embodiment wherein the assigned attribute is changed during a transition between the CPU view and the graphics processor view is discussed first in greater detail in the following.
FIG. 6 shows a process flow for setting the caching attributes of an optimally shared memory surface depending upon which view the surface will be in.
An optimally shared surface may initially be created as shown in block 600. When a surface is created, various data structures may be associated with the surface to facilitate operations thereon. For example, according to one embodiment, a unique identifier or “Surface handle” may be associated with the surface and act as a pointer to the surface. This Surface handle may further point to a “Surface-Object handle” which in turn points to a “Surface-Object”. The Surface-Object may include private data structures including such information as memory type descriptors (e.g., whether the memory is optimally shared), the surface's memory base offset, pixel depth, size (width, height), and other characteristics of the surface. The private data structures may also include “members” which contain information about the Surface-Object.
After an optimally shared memory surface is created as shown in block 600, attributes of the memory may be set depending on which view the surface will be in, as determined in block 601.
If the surface will be in the view of the graphics processor, the attribute of the surface may be set to be the Write-Combine (or uncached) attribute, as shown in block 602. Then, within the Surface-Object, a type descriptor “tag” may be set indicating that this memory is currently mapped optimally for graphics processor usage as shown in block 604.
On the other hand, if the surface will be in the view of the CPU, the attribute of the surface will typically be set to be the Write-Back (cached) attribute, as shown in block 603, and the Surface-Object type descriptor may be tagged as shown in block 605 indicating the surface is currently mapped optimally for CPU usage.
Once the surface is created, the application may request to lock or unlock the surface, by calling a Lock API or Unlock API. The Lock and Unlock APIs will typically include parameters such as the Surface-Object's handle or a “Bounded Area” parameter. The Bounded Area parameter describes a sub-area of the surface as outlined above. Locking the surface allows the application to write data into the surface.
Assuming the optimally shared memory was initially used by the CPU, and that the optimally shared memory was initially used in cached mode, when the application has reached a point in processing wherein, at least for the time being, it will perform no further accesses to the optimally shared memory, it may then hand off processing to the graphics processor. To do so, the application may call an Unlock API, which notifies the graphics processor that the optimally shared memory region is now accessible. In the Unlock operation, the graphics driver implicitly knows that the application has finished modifying the surface and that the surface is no longer going to be accessed by the CPU. Therefore, the optimally shared memory allocated to the surface which had a cache attribute favorable to the CPU view may have the cache attribute changed to one favorable for the graphics processor view.
Because the caching attribute of the shared memory is to be changed from a CPU-optimized mode (i.e., cached) to graphics processor-optimized mode (i.e., uncached), the optimally shared memory should be made coherent.
FIG. 7A shows a process flow for converting the optimally shared memory from a CPU view to a graphics processor view when the process includes changing the caching attribute of the memory in a manner that enforces coherency. As shown in block 701, it may first be determined whether a region of the shared memory worked on by the CPU is an entire surface, or only a sub-area of a surface. This sub-area or entire surface area may correspond to the Bounded Area or Surface-Object parameters which were passed to the Lock and Unlock APIs as discussed above.
If the optimally shared memory region is a sub-area, a start and end address of the sub-area may be calculated as shown in block 702. As outlined in connection with FIG. 4A, the sub-area may be described by the RECT(t,l,b,r) parameter describing the location and dimensions of the sub-area. Alternatively as outlined in FIG. 4B, the sub-area may also be described by a Start Offset from the surface base address and Length parameter. Then, the flow may progress to block 703.
On the other hand, if it is determined that the region of optimally shared memory is not a sub-area (i.e., it is an entire surface), the flow may progress directly to block 703. In block 703 a starting page may be derived from the starting address of the memory by adjusting the address down to a page-aligned start. This is typically done by throwing away the least significant bits of the address up to the size of the page. For example, if a page was 4KB then by bitwise AND'ing the address with the 1's complement inverse of (4KB−1) the page granular start address “addr” could be derived.
Next, as shown in block 704, a cache line having the address “addr” may be flushed, for example by passing the “addr” parameter to a cache-line flush primitive such as “CLFLUSH.”
The process of flushing cache lines may continue until all cache lines have been flushed, as shown in blocks 705 and 706. In block 705, it may be determined whether any cache lines remain to be flushed. If the result of the determination of block 705 is affirmative, the next line of the sub-area may be flushed by incrementing the “addr” parameter as shown in block 706, and returning to block 704.
Once all cache lines have been flushed, the flow may progress to block 707, wherein the caching attribute of the optimally shared memory is changed from cached (e.g., Write-Back) to uncached (e.g., Write-Combine). Then, as shown in block 708, the process may invalidate the page TLB (Translation Lookaside Buffer) entry containing the former caching attribute, using a known Intel® processor cache control instruction such as INVLPG. This operation may be performed to allow the change of the memory attributes to take effect and be propagated in other CPUs which may be in the system, using the inter-processor communication bus.
The process may continue for each page in the optimally shared memory, as shown in blocks 709 and 710. In block 709, it may be determined whether any pages remain to be flushed. If the result of the determination of block 709 is affirmative, the next page may be flushed by incrementing the “addr” parameter as shown in block 710, and returning to block 704.
If no more pages remain to be flushed, the flow may progress to block 711, wherein the memory type descriptor in the Surface-Object is tagged indicating the optimally shared memory is now in graphics processor view, in order to allow tracking the current view of the surface in subsequent operations on the surface.
After working on the data in the optimally shared memory for a period of time, the graphics processor may hand off the optimally shared memory back to the CPU. During the hand-off, the caching attribute of the optimally shared memory may be changed from one favorable for the graphics processor to one favorable for the CPU. According to embodiments of the invention, during a transitional phase of the hand-off back to the CPU, a surface or sub-area which had been previously worked on by the graphics processor while the optimally shared memory was in the graphics-optimized view may be synchronized with respect to any pending rendering commands that are active or queued to be rasterized on the surface, by waiting until those commands have completed. Additionally, the graphics driver may track pending rasterization and flush the render cache causing all relevant pixels remaining in the graphics processor to migrate to the surface.
FIG. 7B is a flow diagram illustrating one possible embodiment of a method implemented during the transitional phase from a graphics processor view to a CPU view, to synchronize the optimally shared memory with respect to any pending rendering commands as described above.
As shown in block 721, a surface that had previously been used by the graphics processor may be identified as having pending operations associated with it. These pending operations may be indicated by descriptors and members within the Surface-Object that were previously set when graphics operations on the surface were initiated. Then, as shown in block 722, it may be determined whether the output of any rendering to the surface is still pending, in which case the surface must be made coherent with respect to the graphics processor before it can be handed back to the CPU. If the result of the determination of block 722 were negative, no further processing would be needed. The flow could progress to block 727.
On the other hand, if rendering to the surface were pending, indicating that there are surface pixels that are as yet not completely rendered and data as yet not written out to memory, the flow may progress to block 723. In block 723, it may be determined whether rendering to any sub-area within the surface is pending, using private data accumulated by the graphics driver and in members or descriptors of the Surface-Object. If no rendering is pending, the flow may progress to block 727.
If the result of the determination of block 723 is affirmative, on the other hand, the flow may progress to block 724. In block 724 any rendering commands that apply to the surface being handed off which are still pending in the graphics processor will be processed. This includes both commands which will render to the optimally shared surface, as well as those which will render to unrelated surfaces, but where pixels in the optimally shared surface are used to produce a result going to an unrelated surface.
The flow may then progress to block 725, wherein the result of the execution of the previously identified render commands, i.e., rendered pixels, is flushed from any internal rendering queues in order to ensure the surface is coherent with respect to the graphics processor. The flow may continue to block 726 wherein a continued iteration of blocks 723-726 may be stalled until it is assured that the rendered commands and rendering output has fully completed. Blocks 723-726 may be successively repeated until there is no relevant rendering output remaining. At that time, flow may progress to block 727.
If the result of the determination of block 722 is negative, the flow may progress to block 727, wherein the caching attribute of the shared memory is changed from uncached (e.g., Write-Combine) to cached (e.g., Write-Back). Then, as shown in block 728, the process may invalidate the page TLB containing the former caching attributes, using a known Intel® processor cache control instruction such as INVLPG. This operation may be performed to allow the change of the page attributes to take effect and be propagated other CPUs, which may be in the system, through the inter-processor communication bus.
The process may continue for each page in the shared memory. In block 729, it may be determined whether any pages remain to have their caching attributes changed. If the result of the determination of block 729 is affirmative, the process may repeat blocks 727 and 728.
If no more pages remain to have their caching attributes changed, the flow may progress to block 730, wherein Surface-Object descriptors are tagged to indicate the optimally shared memory is now in the view of the CPU and application software.
The embodiment will now be described wherein the optimally shared memory may always be assigned a CPU-optimal cached attribute, but wherein when a transition occurs from the CPU view to the graphics processor view, the data in the CPU's cache may be made coherent in order to allow the graphics processor to treat the optimally shared memory as uncached. When transitioning from the graphics processor view to the host CPU view, the graphics data may be made coherent with respect to the graphics processor's cache.
FIG. 8 illustrates a process flow, according to one possible embodiment, for creating or allocating an optimally shared memory surface according to the latter embodiment. In the process shown in FIG. 8, the optimally shared surface is created such that it always has a cached (e.g., Write-Back) attribute. That is, the caching attribute of the optimally shared memory does not depend on whether the CPU is using the memory or the graphics processor is using the memory. Rather, the graphics processor is instructed to treat the optimally shared memory as though it were uncached when the memory is in the graphics processor view. Typically, the graphics processor has interface control registers or page table descriptors (as in FIG. 1, 107) that indicate to the graphics processor's memory interface and transfer logic whether or not the memory is cached by the processor and accesses require a snoop operation. By applying the method according to embodiments of the invention the optimally shared surface is, however, made coherent during a transition phase between a CPU view and a graphics processor view, removing the need for snooping.
As shown in blocks 800-801, the optimally shared memory surface may be allocated in pages assigned a Write-Back (WB) caching attribute. As shown in block 802, it may then be determined from type descriptors or hints how the newly-allocated memory will be used: e.g., read/write by the CPU, or simply opaque (only for use by the graphics processor).
If the CPU will initially be using the surface, the flow may proceed directly to block 804, wherein the newly-allocated surface is tagged in the memory type descriptor of the Surface-Object to indicate its current view. If, on the other hand, the graphics processor will initially be using the surface, the surface may be made coherent to clear out any data associated with the surface that may still be in the cache from previous and/or unrelated application use of the memory. This operation is shown in block 803 and comprises flushing any pages in the cache by a known coherency-enforcement primitive such as the Intel® Processor cache control instructions WBINVD (Write-Back Invalidate Cache), INVD (Invalidate Cache) or CLFLUSH. A CPFLUSH (Cache Page Flush) or other processor cache control primitives could also be utilized for this purpose. Then, the newly-allocated surface may be identified or tagged through the memory type descriptor inside the Surface-Object as shown in block 804 to indicate its current view.
If the surface is initially allocated in a CPU view, the application may request to lock the surface, using the handle for the surface passed to the application by the graphics driver. Locking the surface allows the application to write data into the surface. The application may request the lock by calling a Lock API as described above.
When the view of the surface changes to a graphics processor view, because the CPU may have been reading and writing on the optimally shared memory when using it, the optimally shared memory needs to be made coherent with respect to the graphics processor. FIG. 9A is a flow diagram illustrating one possible embodiment of a method for enforcing coherency.
As shown in block 901, it may first be determined whether a region of the optimally shared memory in use by application software running on the CPU is covering an entire surface, or simply a bounded sub-area within a surface. This bounded sub-area or entire surface area may correspond to the bounded sub-area or entire surface area which were subject to the Lock and Unlock as discussed above.
If it is determined that the region of optimally shared memory is not a sub-area (i.e., it is an entire surface), a calculation may be performed as shown in block 902, to determine if the time it would take to make the surface coherent is greater than ½ of the time it would take to perform a flush of all caches of all CPUs (since embodiments of the invention may be used in multi-CPU systems).
If the result of the calculation of block 902 is affirmative, a flush of the entire CPU(s) L1 and L2 caches may be performed as shown in block 903, to store the contents of these caches in the optimally shared memory, making it coherent. Then, the memory type descriptor of the Surface-Object may be tagged as shown in block 912 indicating the surface is in the view optimal for graphics processor usage. If the result of the calculation of block 902 is negative, the flow may progress to block 905, described below.
If the optimally shared memory region is a sub-area, a start and end address of the sub-area may be calculated as shown in block 904. The sub-area may be described as in FIG. 4A, by a RECT(t,l,b,r) parameter, where the bounded shape of the sub-area is described using the top, left, bottom, right coordinates of the rectangle indicating the location and dimensions of the sub-area. Alternatively the sub-area may be a linear surface as described as in FIG. 4B by a Start Offset address and a Length.
Once the start and end addresses of the sub-area are calculated, the flow may progress to block 905 which will detect if the sub-area starts mid-way into a cache-line. If the result of the determination of block 905 is affirmative, block 906 may be performed which will re-align the start of the area onto which coherency will be enforced so that the cache line flush will direct the dirty cache line invalidate at the specific addresses intended to be made coherent, and the flow may progress to block 907.
If the result of the determination of block 905 is negative, the flow may progress directly to block 907. In block 907, a cache line having cache data corresponding to the address “addr” may be flushed, for example by passing the “addr” parameter to a cache-line flush primitive such as “CLFLUSH.”
Then, as shown in block 909, it may be determined whether the end of a line of the rectangular or linear sub-area has been reached. If the result of the determination of block 909 is negative, the next cache line may be flushed by incrementing the “addr” parameter as shown in block 908, with an amount equal to the size of a cache-line and returning to block 907.
If the result of the determination of block 909 is affirmative, the flow may progress to block 910. In block 910, it may be determined whether the end of the sub-area has been reached. If the end of the sub-area has been reached, the entire sub-area has been flushed to make the optimally shared memory region coherent for use by the graphics processor, and the flow may progress to block 912.
Otherwise, the next line of a rectangular sub-area may be flushed by incrementing the “addr” parameter as shown in block 911, with an amount equal to the size of the surface pitch minus the width of the sub-area adjusted for any alignment, and returning to block 905.
A cache-line flush (CLFLUSH) as used in the above-described process has a relatively small granularity (i.e., it handles relatively small portions of data). By contrast, a page flush (CPFLUSH) may flush all of the cache lines associated with a page of memory. Thus, according to embodiments, a process which enforces coherency when the optimally shared memory is to be handed off to the graphics processor as described in the following may use page flushes rather than cache-line flushes, in order to enforce coherency over larger portions of graphical data with minimal processor overhead. Under given conditions, a process using page flushes may be faster and more efficient than incurring the overhead of breaking a shared region into lines.
Alternatively, a CPU instruction is contemplated which efficiently processes a given memory region by taking a memory range as a parameter and ensuring all data in the range is cache coherent.
Once the optimally shared memory was made coherent by a process as described above, the data in the optimally shared memory could be worked on by the graphics processor as if it were using an uncached or Write-Combine page cache attribute.
After using the surface and the data in the optimally shared memory for a period of time, the graphics processor may hand off the shared memory back to the CPU. According to embodiments of the invention, during a transitional phase of the hand-off back to the CPU, a surface or sub-area which had been previously worked on by the graphics processor while the shared memory was in the graphics-optimized view may be synchronized with respect to the graphics processor, including completing any pending rendering commands that are active or queued to be rasterized on the surface. Additionally, the graphics driver may track pending rasterization of these render commands and flush the render cache to ensure the surface is coherent.
FIG. 9B is a flow diagram illustrating one possible embodiment of a method for implementing the foregoing.
As shown in block 921, a surface that had previously been used by the graphics processor may be identified as having pending operations associated with it. These pending operations may be indicated by descriptors and members within the Surface-Object that were previously set when graphics operations on the surface were initiated. Then, as shown in block 922, it may be determined whether the output of any rendering to the surface is still pending, in which case the surface must be made coherent with respect to the graphics processor before it can be handed back to the CPU. If the result of the determination of block 922 were negative, no further processing would be needed. The flow could progress to block 927, wherein the memory type descriptor of the Surface-Object would be tagged, indicating that the surface is now optimally in the view of the CPU and applications.
On the other hand, if rendering to the surface were pending, indicating that there are surface pixels that are as yet not completely rendered and data as yet not written out to memory, the flow may progress to block 923. In block 923, it may be determined whether rendering to any sub-area within the surface is pending, using private data accumulated by the graphics driver and in members or descriptors of the Surface-Object. If no rendering is pending, the flow may progress to block 927
If the result of the determination of block 923 is affirmative, on the other hand, the flow may progress to block 924. In block 924 any rendering commands that apply to the surface being handed off which are still pending in the graphics processor will be processed. This includes both commands which will render to the optimally shared surface, as well as those which will render to unrelated surfaces, but where pixels in the optimally shared surface are used to produce a result going to an unrelated surface.
The flow may then progress to block 925, wherein the result of the execution of the previously identified render commands, i.e., rendered pixels, is flushed from any internal rendering queues in order to ensure the surface is coherent with respect to the graphics processor. The flow may continue to block 926 wherein a continued iteration of blocks 923-926 may be stalled until it is assured that the rendered commands and rendering output has fully completed. Blocks 923-926 may be successively repeated until there is no relevant rendering output remaining. At that time, flow may progress to block 927.
According to embodiments to the invention, the conversion of the optimally shared memory to have the caching attribute favorable to the CPU may occur within the Lock API or semantically equivalent interface, while the conversion of the optimally shared memory to have the attribute favorable to the graphics processor may occur within the Unlock API or semantically equivalent interface. In embodiments, the Lock and Unlock APIs may be executed at the graphics device driver level. However, embodiments of the invention are not limited to performing the conversion within the Lock and Unlock APIs. For example similar interface APIs are known such as BeginAccess and EndAccess APIs which indicate semantically equivalent action of negotiating beginning and ending of access in facilitating shared ownership. The conversion could be performed in various other levels of code such as within other interfaces, and within internal memory management and other activities.
More generally, it is noted that the programming structures disclosed herein, such as the process flows illustrated, the APIs and cache control primitives identified are arbitrary and merely representative of functionality which could be implemented in a wide variety of computer instruction sequences invoked by arbitrarily-assigned mnemonics.
Implementations of the present invention may be tangibly embodied as computer-executable instructions that may be stored and transported on a computer-usable medium such as a diskette, magnetic tape, disk or CD-ROM. The instructions could be implemented, for example, in a graphics device driver. The instructions may be downloaded via a suitable reading device to a computer memory from which they may be fetched and executed by a processor to effect the advantageous features of the invention.
Embodiments of the invention may be advantageous in a number of applications. For example, MPEG (Moving Pictures Expert Group Port3) applications generate “key frames” which are stored in memory and subsequently read back by the CPU to generate interpolated intermediate frames based on the key frames. By enabling the key frames to be stored in a shared memory which is substantially optimal for reading back by the CPU, while avoiding the aliasing, snoop cycles and the like of previous approaches, the performance of MPEG applications can be substantially improved.
3 See, e.g.: 1. ISO/IEC 11172-1/2/3 (Parts 1:System/2:Video/3:Audio): Coding of moving pictures and associated audio for digital storage media at up to about 1.5 MBits/s; and 2. ISO/IEC 13818-1/2/3 (Parts 1:System/2:Video/3:Audio):Generic coding of moving pictures and associated audio information
Another application of the invention could involve 3D applications. In such applications, vertex buffers are typically created. A vertex buffer is a buffer filled with points or vertices for a polygon; the vertices could be indexed. After being created by an application, a vertex buffer would typically be handed off to the graphics processor to be rendered. The application would also need to read back the data in the vertex buffer in order to detect, for example, whether graphical objects would “collide” with each other. Or, for example, the application might need to modify the vertices in order to manipulate a graphical object in order to cause it to “morph” or bend or the like.
According to embodiments of the present invention, the vertex buffer could be created with a shared memory type. The vertex buffer would then have a format making it possible to efficiently access the buffer both from a CPU view (for reading back vertex data by the application) and from a graphics view (for performing rendering operations on the vertex data).
Another useful application of the invention is in graphics “transform and lighting” operations in a traditional 3D pipeline, or for the complex vertex manipulation in modern “programmable Vertex Shaders”. In both examples the application may create a buffer of geometry including vertices of an object to be rendered. These vertices describe polygons which need to be transformed and lit from the “world space” in which the model was created in to a view space which can be rendered onto the screen together with other objects. In this process, the vertices may need to be manipulated involving read, modify and writing the vertex data.
Some computer chipsets include specialized graphics hardware for performing transform and lighting applications. Alternatively, part of the CPU's specialized instruction set may be used to accelerate the transform and lighting.
In the latter case, processor manufacturers, provide a portion of the CPU's pipeline as a “processor-specific graphics pipeline” (PSGP) for software vendors to utilize for graphics chipsets that do not include specialized transform and lighting hardware. The PSGP pipeline uses the host CPU to perform transform and lighting operations, and vertex data which has been transformed and light accordingly is subsequently passed to the graphics processor for use in rendering.
During the period of time that the CPU is performing transform and lighting operations, it is most efficient if they can be performed in cached mode. If “clipping” is entailed, the data may need to be read back by the CPU and be manipulated. Because this requires reading the data from a memory buffer, manipulating it and writing it back to the buffer, these manipulations may be optimally performed when the memory is in cached mode. Additionally if the operation to be performed on the vertex is programmatically complex as is obviously possible from a fully programmable Vertex Shader. Processing one vertex may involve many reads and writes of each vertex as well as many other vertices, in order to achieve complex effects such as object-surface displacement mapping and environmental lighting effects.
Since, according to the invention, the shared memory is substantially optimally formatted for either view, transform and lighting operations could be performed very efficiently; no buffer or data aliasing is required.
Another possible application of the present invention could involve implementation of an API for graphics that can perform advanced rendering that may not necessarily be directly supported by hardware. Certain portions of the rendering exposed by the API may be “hardware acceleratable” (capable of being performed by the graphics processor) and some may not. It may improve efficiency to have the operations that are acceleratable done on the graphics processor in parallel as much as possible with CPU operation. This is particularly true for trivial rendering operations within a rendering process, such as Move, Fill, or Integer and Boolean operations which, if done by the graphics processor, will leave the CPU free to generate the next vertices of the complex shape such as bezier curves, or performing complex rasterization stages of the rendering effect.
Several embodiments of the present invention are specifically illustrated and described herein. However, it will be appreciated that modifications and variations of the present invention are covered by the above teachings and within the purview of the appended claims without departing from the spirit and intended scope of the invention.

Claims (40)

1. A method comprising:
allocating a memory region for sharing between a CPU and a graphics processor;
assigning said shared memory region a caching attribute favorable to an operating efficiency of said CPU;
performing a transition from a first mode wherein said CPU is using said memory region to a second mode wherein said graphics processor is using said memory region; and
during said transition from said first mode to said second mode, changing said caching attribute to one favorable to an operating efficiency of said graphics processor.
2. The method of claim 1, wherein said attribute favorable to an operating efficiency of said CPU is a cached attribute.
3. The method of claim 1, wherein said attribute favorable to an operating efficiency of said graphics processor is an uncached attribute.
4. The method of claim 1, wherein during said transition from said first mode to said second mode, said shared memory is made coherent.
5. The method of claim 1, performing a transition from said second mode back to said first mode, and during said transition from said second mode to said first mode, changing said attribute back to one favorable to an operating efficiency of said CPU.
6. The method of claim 1, wherein said shared memory region is allocated for a graphics surface.
7. The method of claim 6, wherein an application being executed by said CPU performs operations on data in a bounded area of said graphics surface.
8. The method of claim 7, wherein during said transition from said first mode to said second mode, a determination is made as to what granularity of cache flush is to be used to make said bounded area coherent.
9. The method of claim 8, wherein said granularity is one of a cache line, a cache page, and an entire cache.
10. A method comprising:
(a) allocating a memory region for sharing between a CPU and a graphics processor;
(b) using said shared memory in a first mode favorable to an operating efficiency of said CPU; and
(c) using said shared memory in a second mode favorable to an operating efficiency of said graphics processor.
11. The method of claim 10, further comprising:
between (b) and (c), making data in said shared memory region coherent.
12. The method of claim 11, wherein said shared memory region is made coherent in units of at most a length of a cache line.
13. The method of claim 11, wherein said shared memory is made coherent in units of at most a page.
14. A method comprising:
allocating a memory region for shared usage by a CPU and a graphics processor;
assigning said memory region one of two alternative attributes, said two alternative attributes being favorable, respectively, to either a performance of said CPU or a performance of said graphics processor;
accessing said memory region using either said CPU or said graphics processor while said memory region has the corresponding favorable attribute; and
changing said assigned attribute to the alternative attribute when usage of said memory region changes between said CPU and said graphics processor.
15. The method of claim 14, wherein said two alternative attributes are a cached attribute for the CPU, and an uncached attribute for the graphics processor.
16. A method comprising:
allocating a memory region for shared usage by a CPU and a graphics processor;
assigning said memory region a cached attribute;
accessing said shared memory region using said CPU;
making said shared memory region coherent; and
handing off said shared memory region for usage by said graphics processor.
17. The method of claim 16, wherein said shared memory region is made coherent in units of at most a length of a cache line.
18. A method comprising:
allocating a memory region for sharing between a CPU and a graphics processor;
assigning a cached attribute to said memory region;
executing an application on said CPU which reads, modifies or writes data in said shared memory region;
making said shared memory region coherent;
changing said attribute to an uncached attribute; and
handing off said shared memory region to a graphics processor for rendering of said data.
19. The method of claim 18, further comprising:
performing rendering operations on said data with said graphics processor;
changing said attribute back to a cached attribute; and
handing off said shared memory region back to said CPU for further processing.
20. The method of claim 18, wherein said memory region is a graphics surface.
21. A system comprising:
a CPU;
a graphics processor;
a memory region shared between said CPU and graphics processor; and
computer-executable instructions for changing a caching attribute of said memory region depending on which of said CPU or said graphics processor is using said memory region.
22. The system of claim 21, wherein said instructions are included in graphics driver software.
23. The system of claim 21, wherein said graphics processor is integrated into a chipset including said CPU.
24. The system of claim 21, wherein said graphics processor is included in a separate add-in card.
25. A program product tangibly embodied in a computer-usable medium, comprising computer-executable instructions for changing an attribute of a memory region shared between a CPU and a graphics processor depending on which of said CPU or said graphics processor is using said memory region.
26. The program product of claim 25, wherein said instructions cause said memory region to be made coherent during a transition from usage of said region by said CPU to usage of said region by said graphics processor.
27. The program product of claim 26, wherein during said transition, a determination is made as to what granularity of cache flush is to be used to make said region coherent.
28. A computer-usable medium storing computer-executable instructions, said instructions when executed by a processor implementing a process comprising:
allocating a memory region for sharing between a CPU and a graphics processor;
assigning said shared memory region an attribute favorable to an operating efficiency of said CPU;
performing a transition from a first mode wherein said CPU is using said memory region to a second mode wherein said graphics processor is using said memory region; and
during said transition from said first mode to said second mode, changing said attribute to one favorable to an operating efficiency of said graphics processor.
29. The computer-usable medium of claim 28, wherein said attribute favorable to an operating efficiency of said CPU is a cached attribute.
30. The computer-usable medium of claim 28, wherein said attribute favorable to an operating efficiency of said graphics processor is an uncached attribute.
31. A method comprising:
allocating a memory region for sharing between a CPU and a graphics processor;
assigning said shared memory region a cached attribute;
performing a transition from a first mode wherein said CPU is using said memory region to a second mode wherein said graphics processor is using said memory region; and
in said second mode, causing said graphics processor to treat said shared memory region as though it were uncached.
32. The method of claim 31, wherein during said transition from said first mode to said second mode, said shared memory is made coherent.
33. A method comprising:
allocating a memory region for sharing between a CPU and a graphics processor;
assigning said memory region a cached attribute;
executing an application on said CPU which reads, modifies or writes data in said shared memory region;
making said shared memory region coherent;
handing off said shared memory region to a graphics processor for rendering of said data; and
causing said graphics processor to treat said shared memory region as though it were uncached.
34. The method of claim 33, further comprising:
performing rendering operations on said data with said graphics processor;
handing off said shared memory region back to said CPU for further processing.
35. The method of claim 33, wherein said memory region is a graphics surface.
36. A computer-usable medium storing computer-executable instructions, said instructions when executed by a processor implementing a process comprising:
allocating a memory region for sharing between a CPU and a graphics processor;
assigning said shared memory region a cached attribute;
performing a transition from a first mode wherein said CPU is using said memory region to a second mode wherein said graphics processor is using said memory region; and
in said second mode, causing said graphics processor to treat said shared memory region as though it were uncached.
37. The computer-usable medium of claim 36, wherein during said transition from said first mode to said second mode, said shared memory is made coherent.
38. A computer-usable medium storing computer-executable instructions, said instructions when executed by a processor implementing a process comprising:
allocating a memory region for sharing between a CPU and a graphics processor;
assigning said memory region a cached attribute;
executing an application on said CPU which reads, modifies or writes data in said shared memory region;
making said shared memory region coherent;
handing off said shared memory region to a graphics processor for rendering of said data; and
causing said graphics processor to treat said shared memory region as though it were uncached.
39. The computer-usable medium of claim 38, said process further comprising:
performing rendering operations on said data with said graphics processor;
handing off said shared memory region back to said CPU for further processing.
40. The computer-usable medium of claim 38, wherein said memory region is a graphics surface.
US10/140,263 2002-05-08 2002-05-08 Method and system for optimally sharing memory between a host processor and graphics processor Expired - Lifetime US6891543B2 (en)

Priority Applications (8)

Application Number Priority Date Filing Date Title
US10/140,263 US6891543B2 (en) 2002-05-08 2002-05-08 Method and system for optimally sharing memory between a host processor and graphics processor
JP2004504123A JP4489580B2 (en) 2002-05-08 2003-04-24 Method and system for optimal sharing of memory between host processor and graphics processor
KR1020047017807A KR100655355B1 (en) 2002-05-08 2003-04-24 Method and system for optimally sharing memory between a host processor and graphic processor
EP03721879A EP1502194A1 (en) 2002-05-08 2003-04-24 Method and system for optimally sharing memory between a host processor and graphic processor
PCT/US2003/012908 WO2003096197A1 (en) 2002-05-08 2003-04-24 Method and system for optimally sharing memory between a host processor and graphic processor
CNB038161699A CN1317648C (en) 2002-05-08 2003-04-24 Method and system for optimally sharing memory between a host processor and graphic processor
AU2003225168A AU2003225168A1 (en) 2002-05-08 2003-04-24 Method and system for optimally sharing memory between a host processor and graphic processor
TW092112344A TWI249103B (en) 2002-05-08 2003-05-06 Method and system for optimally sharing memory between a host processor and graphics processor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US10/140,263 US6891543B2 (en) 2002-05-08 2002-05-08 Method and system for optimally sharing memory between a host processor and graphics processor

Publications (2)

Publication Number Publication Date
US20030210248A1 US20030210248A1 (en) 2003-11-13
US6891543B2 true US6891543B2 (en) 2005-05-10

Family

ID=29399416

Family Applications (1)

Application Number Title Priority Date Filing Date
US10/140,263 Expired - Lifetime US6891543B2 (en) 2002-05-08 2002-05-08 Method and system for optimally sharing memory between a host processor and graphics processor

Country Status (8)

Country Link
US (1) US6891543B2 (en)
EP (1) EP1502194A1 (en)
JP (1) JP4489580B2 (en)
KR (1) KR100655355B1 (en)
CN (1) CN1317648C (en)
AU (1) AU2003225168A1 (en)
TW (1) TWI249103B (en)
WO (1) WO2003096197A1 (en)

Cited By (93)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040210761A1 (en) * 2003-04-21 2004-10-21 Avigdor Eldar Method and apparatus to update a cache for security records
US20050190193A1 (en) * 2004-03-01 2005-09-01 Freker David E. Apparatus and a method to adjust signal timing on a memory interface
US20060066623A1 (en) * 2004-09-29 2006-03-30 Bowen Andrew D Method and system for non stalling pipeline instruction fetching from memory
US7023445B1 (en) * 2004-04-12 2006-04-04 Advanced Micro Devices, Inc. CPU and graphics unit with shared cache
US20060136693A1 (en) * 2004-12-22 2006-06-22 Baxter Brent S Media memory system
US20070033336A1 (en) * 2005-08-05 2007-02-08 Jong-Hoon Oh Shared interface semiconductor memories
US20070033348A1 (en) * 2005-08-05 2007-02-08 Jong-Hoon Oh Dual-port semiconductor memories
US20070091090A1 (en) * 2005-10-18 2007-04-26 Via Technologies, Inc. Hardware corrected software vertex shader
US20070186057A1 (en) * 2005-11-15 2007-08-09 Montalvo Systems, Inc. Small and power-efficient cache that can provide data for background dma devices while the processor is in a low-power state
US7268785B1 (en) * 2002-12-19 2007-09-11 Nvidia Corporation System and method for interfacing graphics program modules
US20070214323A1 (en) * 2005-11-15 2007-09-13 Montalvo Systems, Inc. Power conservation via dram access reduction
US20070271419A1 (en) * 2006-05-18 2007-11-22 Konica Minolta Business Technologies, Inc. Memory administrating method
US20080005736A1 (en) * 2006-06-30 2008-01-03 Microsoft Corporation Reducing latencies in computing systems using probabilistic and/or decision-theoretic reasoning under scarce memory resources
US20080158233A1 (en) * 2006-12-29 2008-07-03 Katen Shah System co-processor
US20080177952A1 (en) * 2007-01-24 2008-07-24 Michael William Morrow Method and Apparatus for Setting Cache Policies in a Processor
US7486290B1 (en) * 2005-06-10 2009-02-03 Nvidia Corporation Graphical shader by using delay
US20090055596A1 (en) * 2007-08-20 2009-02-26 Convey Computer Multi-processor system having at least one processor that comprises a dynamically reconfigurable instruction set
US20090064095A1 (en) * 2007-08-29 2009-03-05 Convey Computer Compiler for generating an executable comprising instructions for a plurality of different instruction sets
US20090070553A1 (en) * 2007-09-12 2009-03-12 Convey Computer Dispatch mechanism for dispatching insturctions from a host processor to a co-processor
US20090083565A1 (en) * 2007-09-21 2009-03-26 Freescale Semiconductor, Inc. Sdram sharing using a control surrogate
US20090132764A1 (en) * 2005-11-15 2009-05-21 Montalvo Systems, Inc. Power conservation via dram access
US7616202B1 (en) 2005-08-12 2009-11-10 Nvidia Corporation Compaction of z-only samples
US20090313622A1 (en) * 2008-06-11 2009-12-17 Microsoft Corporation Synchronizing queued data access between multiple gpu rendering contexts
US20100037024A1 (en) * 2008-08-05 2010-02-11 Convey Computer Memory interleave for heterogeneous computing
US20100036997A1 (en) * 2007-08-20 2010-02-11 Convey Computer Multiple data channel memory module architecture
US20100115237A1 (en) * 2008-10-31 2010-05-06 Convey Computer Co-processor infrastructure supporting dynamically-modifiable personalities
US20100235320A1 (en) * 2009-03-10 2010-09-16 Farrell Robert L Ensuring coherence between graphics and display domains
US7830388B1 (en) * 2006-02-07 2010-11-09 Vitie Inc. Methods and apparatus of sharing graphics data of multiple instances of interactive application
US7852341B1 (en) 2004-10-05 2010-12-14 Nvidia Corporation Method and system for patching instructions in a shader for a 3-D graphics pipeline
US7873788B1 (en) 2005-11-15 2011-01-18 Oracle America, Inc. Re-fetching cache memory having coherent re-fetching
US20110043518A1 (en) * 2009-08-21 2011-02-24 Nicolas Galoppo Von Borries Techniques to store and retrieve image data
US20110063296A1 (en) * 2009-09-11 2011-03-17 Bolz Jeffrey A Global Stores and Atomic Operations
US7934054B1 (en) * 2005-11-15 2011-04-26 Oracle America, Inc. Re-fetching cache memory enabling alternative operational modes
US20120069035A1 (en) * 2010-09-20 2012-03-22 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
US8373718B2 (en) 2008-12-10 2013-02-12 Nvidia Corporation Method and system for color enhancement with color volume adjustment and variable shift along luminance axis
US8395631B1 (en) * 2009-04-30 2013-03-12 Nvidia Corporation Method and system for sharing memory between multiple graphics processing units in a computer system
US8411096B1 (en) 2007-08-15 2013-04-02 Nvidia Corporation Shader program instruction fetch
US8416251B2 (en) 2004-11-15 2013-04-09 Nvidia Corporation Stream processing in a video processor
US8423745B1 (en) 2009-11-16 2013-04-16 Convey Computer Systems and methods for mapping a neighborhood of data to general registers of a processing element
US8427490B1 (en) 2004-05-14 2013-04-23 Nvidia Corporation Validating a graphics pipeline using pre-determined schedules
US20130117509A1 (en) * 2008-03-28 2013-05-09 Zeev Offen Technique to share information among different cache coherency domains
US8456547B2 (en) 2005-11-09 2013-06-04 Nvidia Corporation Using a graphics processing unit to correct video and audio data
US8471852B1 (en) 2003-05-30 2013-06-25 Nvidia Corporation Method and system for tessellation of subdivision surfaces
US8489851B2 (en) 2008-12-11 2013-07-16 Nvidia Corporation Processing of read requests in a memory controller using pre-fetch mechanism
US8570331B1 (en) 2006-08-24 2013-10-29 Nvidia Corporation System, method, and computer program product for policy-based routing of objects in a multi-graphics processor environment
US8571346B2 (en) 2005-10-26 2013-10-29 Nvidia Corporation Methods and devices for defective pixel detection
US8570634B2 (en) 2007-10-11 2013-10-29 Nvidia Corporation Image processing of an incoming light field using a spatial light modulator
US8588542B1 (en) 2005-12-13 2013-11-19 Nvidia Corporation Configurable and compact pixel processing apparatus
US8594441B1 (en) 2006-09-12 2013-11-26 Nvidia Corporation Compressing image-based data using luminance
US8659601B1 (en) 2007-08-15 2014-02-25 Nvidia Corporation Program sequencer for generating indeterminant length shader programs for a graphics processor
US8683126B2 (en) 2007-07-30 2014-03-25 Nvidia Corporation Optimal use of buffer space by a storage controller which writes retrieved data directly to a memory
US8681861B2 (en) 2008-05-01 2014-03-25 Nvidia Corporation Multistandard hardware video encoder
US8698918B2 (en) 2009-10-27 2014-04-15 Nvidia Corporation Automatic white balancing for photography
US8698819B1 (en) 2007-08-15 2014-04-15 Nvidia Corporation Software assisted shader merging
US8698908B2 (en) 2008-02-11 2014-04-15 Nvidia Corporation Efficient method for reducing noise and blur in a composite still image from a rolling shutter camera
US8712183B2 (en) 2009-04-16 2014-04-29 Nvidia Corporation System and method for performing image correction
US8723969B2 (en) 2007-03-20 2014-05-13 Nvidia Corporation Compensating for undesirable camera shakes during video capture
US8724895B2 (en) 2007-07-23 2014-05-13 Nvidia Corporation Techniques for reducing color artifacts in digital images
US8737832B1 (en) 2006-02-10 2014-05-27 Nvidia Corporation Flicker band automated detection system and method
US8780123B2 (en) 2007-12-17 2014-07-15 Nvidia Corporation Interrupt handling techniques in the rasterizer of a GPU
US8780128B2 (en) 2007-12-17 2014-07-15 Nvidia Corporation Contiguously packed data
US8923385B2 (en) 2008-05-01 2014-12-30 Nvidia Corporation Rewind-enabled hardware encoder
US9002125B2 (en) 2012-10-15 2015-04-07 Nvidia Corporation Z-plane compression with z-plane predictors
US9024957B1 (en) 2007-08-15 2015-05-05 Nvidia Corporation Address independent shader program loading
US9064333B2 (en) 2007-12-17 2015-06-23 Nvidia Corporation Interrupt handling techniques in the rasterizer of a GPU
US9092170B1 (en) 2005-10-18 2015-07-28 Nvidia Corporation Method and system for implementing fragment operation processing across a graphics bus interconnect
US9105250B2 (en) 2012-08-03 2015-08-11 Nvidia Corporation Coverage compaction
US9122577B2 (en) 2004-12-22 2015-09-01 Intel Corporation Systems and methods exchanging data between processors through concurrent shared memory
US9177368B2 (en) 2007-12-17 2015-11-03 Nvidia Corporation Image distortion correction
US9307213B2 (en) 2012-11-05 2016-04-05 Nvidia Corporation Robust selection and weighting for gray patch automatic white balancing
US9379156B2 (en) 2008-04-10 2016-06-28 Nvidia Corporation Per-channel image intensity correction
US9400702B2 (en) 2008-11-13 2016-07-26 Intel Corporation Shared virtual memory
US9418400B2 (en) 2013-06-18 2016-08-16 Nvidia Corporation Method and system for rendering simulated depth-of-field visual effect
US9436395B2 (en) 2014-03-14 2016-09-06 Advanced Micro Devices, Inc. Mechanisms to save user/kernel copy for cross device communications
US9508318B2 (en) 2012-09-13 2016-11-29 Nvidia Corporation Dynamic color profile management for electronic devices
US9547535B1 (en) * 2009-04-30 2017-01-17 Nvidia Corporation Method and system for providing shared memory access to graphics processing unit processes
US9578224B2 (en) 2012-09-10 2017-02-21 Nvidia Corporation System and method for enhanced monoimaging
US9710384B2 (en) 2008-01-04 2017-07-18 Micron Technology, Inc. Microprocessor architecture having alternative memory access paths
US9756222B2 (en) 2013-06-26 2017-09-05 Nvidia Corporation Method and system for performing white balancing operations on captured images
US9798698B2 (en) 2012-08-13 2017-10-24 Nvidia Corporation System and method for multi-color dilu preconditioner
US9826208B2 (en) 2013-06-26 2017-11-21 Nvidia Corporation Method and system for generating weights for use in white balancing an image
US9829715B2 (en) 2012-01-23 2017-11-28 Nvidia Corporation Eyewear device for transmitting signal and communication method thereof
US9892058B2 (en) 2015-12-16 2018-02-13 Advanced Micro Devices, Inc. Centrally managed unified shared virtual address space
US9906981B2 (en) 2016-02-25 2018-02-27 Nvidia Corporation Method and system for dynamic regulation and control of Wi-Fi scans
US10181171B2 (en) 2009-12-31 2019-01-15 Intel Corporation Sharing resources between a CPU and GPU
US10296338B2 (en) * 2016-12-09 2019-05-21 Intel Corporation System, apparatus and method for low overhead control transfer to alternate address space in a processor
US10346307B2 (en) 2016-09-28 2019-07-09 Samsung Electronics Co., Ltd. Power efficient snoop filter design for mobile platform
US10430190B2 (en) 2012-06-07 2019-10-01 Micron Technology, Inc. Systems and methods for selectively controlling multithreaded execution of executable code segments
US10536709B2 (en) 2011-11-14 2020-01-14 Nvidia Corporation Prioritized compression for video
US10599568B2 (en) * 2018-04-09 2020-03-24 Intel Corporation Management of coherent links and multi-level memory
US10935788B2 (en) 2014-01-24 2021-03-02 Nvidia Corporation Hybrid virtual 3D rendering approach to stereovision
US10970118B2 (en) 2017-08-02 2021-04-06 Advanced Micro Devices, Inc. Shareable FPGA compute engine
US11422812B2 (en) 2019-06-25 2022-08-23 Advanced Micro Devices, Inc. Method and apparatus for efficient programmable instructions in computer systems

Families Citing this family (80)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB0301448D0 (en) * 2003-01-22 2003-02-19 Falanx Microsystems As Microprocessor systems
US8704837B2 (en) 2004-04-16 2014-04-22 Apple Inc. High-level program interface for graphics operations
US8134561B2 (en) * 2004-04-16 2012-03-13 Apple Inc. System for optimizing graphics operations
US7644239B2 (en) 2004-05-03 2010-01-05 Microsoft Corporation Non-volatile memory cache performance improvement
US8044951B1 (en) * 2004-07-02 2011-10-25 Nvidia Corporation Integer-based functionality in a graphics shading language
TWI245560B (en) * 2004-08-19 2005-12-11 Realtek Semiconductor Corp Video data processing method and apparatus capable of saving bandwidth
US7490197B2 (en) 2004-10-21 2009-02-10 Microsoft Corporation Using external memory devices to improve system performance
US7663635B2 (en) * 2005-05-27 2010-02-16 Ati Technologies, Inc. Multiple video processor unit (VPU) memory mapping
US7831780B2 (en) * 2005-06-24 2010-11-09 Nvidia Corporation Operating system supplemental disk caching system and method
US7768507B2 (en) * 2005-11-17 2010-08-03 Ati Technologies Ulc Methods and apparatus for driving a display device
US8212832B2 (en) * 2005-12-08 2012-07-03 Ati Technologies Ulc Method and apparatus with dynamic graphics surface memory allocation
US8914557B2 (en) 2005-12-16 2014-12-16 Microsoft Corporation Optimizing write and wear performance for a memory
US7412554B2 (en) * 2006-06-15 2008-08-12 Nvidia Corporation Bus interface controller for cost-effective high performance graphics system with two or more graphics processing units
US8134566B1 (en) * 2006-07-28 2012-03-13 Nvidia Corporation Unified assembly instruction set for graphics processing
US7952588B2 (en) * 2006-08-03 2011-05-31 Qualcomm Incorporated Graphics processing unit with extended vertex cache
JP4369471B2 (en) * 2006-12-27 2009-11-18 富士通株式会社 Mirroring program, mirroring method, information storage device
JP5395383B2 (en) * 2008-08-21 2014-01-22 株式会社東芝 Control system with pipeline arithmetic processor
US9032151B2 (en) 2008-09-15 2015-05-12 Microsoft Technology Licensing, Llc Method and system for ensuring reliability of cache data and metadata subsequent to a reboot
US7953774B2 (en) 2008-09-19 2011-05-31 Microsoft Corporation Aggregation of write traffic to a data store
US8417895B1 (en) 2008-09-30 2013-04-09 Violin Memory Inc. System for maintaining coherency during offline changes to storage media
US8442059B1 (en) 2008-09-30 2013-05-14 Gridiron Systems, Inc. Storage proxy with virtual ports configuration
US8838850B2 (en) * 2008-11-17 2014-09-16 Violin Memory, Inc. Cluster control protocol
US8788758B1 (en) 2008-11-04 2014-07-22 Violin Memory Inc Least profitability used caching scheme
US8443150B1 (en) 2008-11-04 2013-05-14 Violin Memory Inc. Efficient reloading of data into cache resource
US9865233B2 (en) * 2008-12-30 2018-01-09 Intel Corporation Hybrid graphics display power management
JPWO2010087140A1 (en) * 2009-01-30 2012-08-02 三菱電機株式会社 Status display device
US8667366B1 (en) 2009-04-17 2014-03-04 Violin Memory, Inc. Efficient use of physical address space for data overflow and validation
US8650362B2 (en) 2009-04-17 2014-02-11 Violin Memory Inc. System for increasing utilization of storage media
US8713252B1 (en) 2009-05-06 2014-04-29 Violin Memory, Inc. Transactional consistency scheme
US9069676B2 (en) 2009-06-03 2015-06-30 Violin Memory, Inc. Mapping engine for a storage device
US8402198B1 (en) 2009-06-03 2013-03-19 Violin Memory, Inc. Mapping engine for a storage device
US8402246B1 (en) * 2009-08-28 2013-03-19 Violin Memory, Inc. Alignment adjustment in a tiered storage system
US8675003B2 (en) * 2009-09-09 2014-03-18 Advanced Micro Devices, Inc. Efficient data access for unified pixel interpolation
US8933947B2 (en) * 2009-09-10 2015-01-13 Ati Technologies Ulc Reading a local memory of a processing unit
US8615637B2 (en) * 2009-09-10 2013-12-24 Advanced Micro Devices, Inc. Systems and methods for processing memory requests in a multi-processor system using a probe engine
US8719547B2 (en) * 2009-09-18 2014-05-06 Intel Corporation Providing hardware support for shared virtual memory between local and remote physical memory
US8959288B1 (en) 2010-07-29 2015-02-17 Violin Memory, Inc. Identifying invalid cache data
US8832384B1 (en) 2010-07-29 2014-09-09 Violin Memory, Inc. Reassembling abstracted memory accesses for prefetching
US20120152576A1 (en) * 2010-12-15 2012-06-21 Valhalla Technologies, Llc Extra area down-hole hammer apparatus and method
US8797332B2 (en) * 2010-12-15 2014-08-05 Ati Technologies Ulc Device discovery and topology reporting in a combined CPU/GPU architecture system
US20120159090A1 (en) * 2010-12-16 2012-06-21 Microsoft Corporation Scalable multimedia computer system architecture with qos guarantees
US8972689B1 (en) 2011-02-02 2015-03-03 Violin Memory, Inc. Apparatus, method and system for using real-time performance feedback for modeling and improving access to solid state media
US8635416B1 (en) 2011-03-02 2014-01-21 Violin Memory Inc. Apparatus, method and system for using shadow drives for alternative drive commands
US9304570B2 (en) 2011-12-15 2016-04-05 Intel Corporation Method, apparatus, and system for energy efficiency and energy conservation including power and performance workload-based balancing between multiple processing elements
US9659343B2 (en) 2011-12-29 2017-05-23 Intel Corporation Transpose of image data between a linear and a Y-tiled storage format
US9430391B2 (en) 2012-03-29 2016-08-30 Advanced Micro Devices, Inc. Managing coherent memory between an accelerated processing device and a central processing unit
US20130262736A1 (en) * 2012-03-30 2013-10-03 Ati Technologies Ulc Memory types for caching policies
US8898397B2 (en) 2012-04-11 2014-11-25 Moon J. Kim Memory and process sharing across multiple chipsets via input/output with virtualization
US10387331B2 (en) * 2012-06-05 2019-08-20 Vmware, Inc. Process for maintaining data write ordering through a cache
US9864638B2 (en) * 2012-06-22 2018-01-09 Intel Corporation Techniques for accessing a graphical processing unit memory by an application
US9373182B2 (en) 2012-08-17 2016-06-21 Intel Corporation Memory sharing via a unified memory architecture
US9378572B2 (en) * 2012-08-17 2016-06-28 Intel Corporation Shared virtual memory
US20140101405A1 (en) * 2012-10-05 2014-04-10 Advanced Micro Devices, Inc. Reducing cold tlb misses in a heterogeneous computing system
US9292414B2 (en) 2012-11-26 2016-03-22 Nvidia Corporation System, method, and computer program product for debugging graphics programs locally utilizing a system with a single GPU
CN103927254B (en) * 2013-01-14 2017-04-05 北大方正集团有限公司 A kind of method of testing and device of PDF rasterization process module
US9619364B2 (en) 2013-03-14 2017-04-11 Nvidia Corporation Grouping and analysis of data access hazard reports
KR101442643B1 (en) * 2013-04-30 2014-09-19 전자부품연구원 The Cooperation System and the Method between CPU and GPU
US9478000B2 (en) 2013-09-27 2016-10-25 Intel Corporation Sharing non-page aligned memory
JP6272011B2 (en) * 2013-12-24 2018-01-31 Necプラットフォームズ株式会社 Cache device, computer including cache device, and cache control method
US9886736B2 (en) 2014-01-20 2018-02-06 Nvidia Corporation Selectively killing trapped multi-process service clients sharing the same hardware context
US10152312B2 (en) 2014-01-21 2018-12-11 Nvidia Corporation Dynamic compiler parallelism techniques
KR102100161B1 (en) * 2014-02-04 2020-04-14 삼성전자주식회사 Method for caching GPU data and data processing system therefore
US9436972B2 (en) * 2014-03-27 2016-09-06 Intel Corporation System coherency in a distributed graphics processor hierarchy
US9740611B2 (en) * 2014-10-29 2017-08-22 Advanced Micro Devices, Inc. Memory management for graphics processing unit workloads
KR101639943B1 (en) * 2015-03-12 2016-07-15 성균관대학교산학협력단 Shared memory control method for facilitating shared memory of general purpose graphic processor as cache and general purpose graphic processor using same
US20170154403A1 (en) * 2015-11-30 2017-06-01 Intel Corporation Triple buffered constant buffers for efficient processing of graphics data at computing devices
US10572399B2 (en) * 2016-07-13 2020-02-25 Qualcomm Incorporated Memory request arbitration
KR102066212B1 (en) * 2017-01-19 2020-01-14 서울대학교산학협력단 Method for transferring data in parallel system, and parallel system for performing the same
US10503652B2 (en) * 2017-04-01 2019-12-10 Intel Corporation Sector cache for compression
US10373285B2 (en) 2017-04-09 2019-08-06 Intel Corporation Coarse grain coherency
US10452549B2 (en) * 2017-08-17 2019-10-22 Intel Corporation Method and apparatus for page table management
CN109509139B (en) * 2017-09-14 2023-06-27 龙芯中科技术股份有限公司 Vertex data processing method, device and equipment
CN110134370B (en) * 2018-02-08 2023-09-12 龙芯中科技术股份有限公司 Graph drawing method and device, electronic equipment and storage medium
US11169953B2 (en) * 2018-02-28 2021-11-09 SK Hynix Inc. Data processing system accessing shared memory by using mailbox
US10846235B2 (en) * 2018-04-28 2020-11-24 International Business Machines Corporation Integrated circuit and data processing system supporting attachment of a real address-agnostic accelerator
US11436151B2 (en) * 2018-08-29 2022-09-06 Seagate Technology Llc Semi-sequential drive I/O performance
CN109242758A (en) * 2018-09-18 2019-01-18 珠海金山网络游戏科技有限公司 A kind of storage of material parameters, material parameters acquisition methods and device
CN109542628B (en) * 2018-12-12 2023-03-14 中国航空工业集团公司西安航空计算技术研究所 Hierarchical GPU resource management system based on state machine
JP2020177074A (en) * 2019-04-16 2020-10-29 株式会社デンソー Device for vehicle, and method for controlling device for vehicle
CN113190350B (en) * 2021-04-30 2022-06-14 华南理工大学 LLC (logical Link control) distribution method for mixed deployment of off-line containers

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5557733A (en) * 1993-04-02 1996-09-17 Vlsi Technology, Inc. Caching FIFO and method therefor
US5706407A (en) * 1993-12-28 1998-01-06 Kabushiki Kaisha Toshiba System for reallocation of memory banks in memory sized order
GB2331379A (en) 1997-11-13 1999-05-19 Advanced Telecommunications Mo Controlling access to a shared memory by dual mapping
US5941968A (en) * 1997-04-14 1999-08-24 Advanced Micro Devices, Inc. Computer system for concurrent data transferring between graphic controller and unified system memory and between CPU and expansion bus device
US6052133A (en) * 1997-06-27 2000-04-18 S3 Incorporated Multi-function controller and method for a computer graphics display system
US6141021A (en) * 1997-12-12 2000-10-31 Intel Corporation Method and apparatus for eliminating contention on an accelerated graphics port
EP1059587A1 (en) 1999-06-09 2000-12-13 Texas Instruments Incorporated Host access to shared memory with a high priority mode
US6483516B1 (en) * 1998-10-09 2002-11-19 National Semiconductor Corporation Hierarchical texture cache
US20030131178A1 (en) * 2002-01-04 2003-07-10 Powei Huang Apparatus and method for supporting multiple graphics adapters in a computer system
US6631447B1 (en) * 1993-03-18 2003-10-07 Hitachi, Ltd. Multiprocessor system having controller for controlling the number of processors for which cache coherency must be guaranteed
US6665775B1 (en) * 2000-09-22 2003-12-16 Intel Corporation Cache dynamically configured for simultaneous accesses by multiple computing engines
US6728839B1 (en) * 1998-10-28 2004-04-27 Cisco Technology, Inc. Attribute based memory pre-fetching technique

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5990913A (en) * 1997-07-30 1999-11-23 Intel Corporation Method and apparatus for implementing a flush command for an accelerated graphics port device
US6157397A (en) * 1998-03-30 2000-12-05 Intel Corporation AGP read and CPU wire coherency

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6631447B1 (en) * 1993-03-18 2003-10-07 Hitachi, Ltd. Multiprocessor system having controller for controlling the number of processors for which cache coherency must be guaranteed
US5557733A (en) * 1993-04-02 1996-09-17 Vlsi Technology, Inc. Caching FIFO and method therefor
US5706407A (en) * 1993-12-28 1998-01-06 Kabushiki Kaisha Toshiba System for reallocation of memory banks in memory sized order
US5941968A (en) * 1997-04-14 1999-08-24 Advanced Micro Devices, Inc. Computer system for concurrent data transferring between graphic controller and unified system memory and between CPU and expansion bus device
US6052133A (en) * 1997-06-27 2000-04-18 S3 Incorporated Multi-function controller and method for a computer graphics display system
GB2331379A (en) 1997-11-13 1999-05-19 Advanced Telecommunications Mo Controlling access to a shared memory by dual mapping
US6141021A (en) * 1997-12-12 2000-10-31 Intel Corporation Method and apparatus for eliminating contention on an accelerated graphics port
US6483516B1 (en) * 1998-10-09 2002-11-19 National Semiconductor Corporation Hierarchical texture cache
US6728839B1 (en) * 1998-10-28 2004-04-27 Cisco Technology, Inc. Attribute based memory pre-fetching technique
EP1059587A1 (en) 1999-06-09 2000-12-13 Texas Instruments Incorporated Host access to shared memory with a high priority mode
US6665775B1 (en) * 2000-09-22 2003-12-16 Intel Corporation Cache dynamically configured for simultaneous accesses by multiple computing engines
US20030131178A1 (en) * 2002-01-04 2003-07-10 Powei Huang Apparatus and method for supporting multiple graphics adapters in a computer system

Cited By (155)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7268785B1 (en) * 2002-12-19 2007-09-11 Nvidia Corporation System and method for interfacing graphics program modules
US7549023B2 (en) * 2003-04-21 2009-06-16 Intel Corporation Method and apparatus to update a cache for security records
US20040210761A1 (en) * 2003-04-21 2004-10-21 Avigdor Eldar Method and apparatus to update a cache for security records
US8471852B1 (en) 2003-05-30 2013-06-25 Nvidia Corporation Method and system for tessellation of subdivision surfaces
US20050190193A1 (en) * 2004-03-01 2005-09-01 Freker David E. Apparatus and a method to adjust signal timing on a memory interface
US7023445B1 (en) * 2004-04-12 2006-04-04 Advanced Micro Devices, Inc. CPU and graphics unit with shared cache
US8427490B1 (en) 2004-05-14 2013-04-23 Nvidia Corporation Validating a graphics pipeline using pre-determined schedules
US20060066623A1 (en) * 2004-09-29 2006-03-30 Bowen Andrew D Method and system for non stalling pipeline instruction fetching from memory
US8624906B2 (en) 2004-09-29 2014-01-07 Nvidia Corporation Method and system for non stalling pipeline instruction fetching from memory
US7852341B1 (en) 2004-10-05 2010-12-14 Nvidia Corporation Method and system for patching instructions in a shader for a 3-D graphics pipeline
US8683184B1 (en) 2004-11-15 2014-03-25 Nvidia Corporation Multi context execution on a video processor
US8493397B1 (en) 2004-11-15 2013-07-23 Nvidia Corporation State machine control for a pipelined L2 cache to implement memory transfers for a video processor
US8424012B1 (en) 2004-11-15 2013-04-16 Nvidia Corporation Context switching on a video processor having a scalar execution unit and a vector execution unit
US8736623B1 (en) 2004-11-15 2014-05-27 Nvidia Corporation Programmable DMA engine for implementing memory transfers and video processing for a video processor
US8725990B1 (en) 2004-11-15 2014-05-13 Nvidia Corporation Configurable SIMD engine with high, low and mixed precision modes
US8687008B2 (en) 2004-11-15 2014-04-01 Nvidia Corporation Latency tolerant system for executing video processing operations
US8416251B2 (en) 2004-11-15 2013-04-09 Nvidia Corporation Stream processing in a video processor
US8493396B2 (en) 2004-11-15 2013-07-23 Nvidia Corporation Multidimensional datapath processing in a video processor
US8738891B1 (en) 2004-11-15 2014-05-27 Nvidia Corporation Methods and systems for command acceleration in a video processor via translation of scalar instructions into vector instructions
US8698817B2 (en) 2004-11-15 2014-04-15 Nvidia Corporation Video processor having scalar and vector components
US9111368B1 (en) 2004-11-15 2015-08-18 Nvidia Corporation Pipelined L2 cache for memory transfers for a video processor
US9122577B2 (en) 2004-12-22 2015-09-01 Intel Corporation Systems and methods exchanging data between processors through concurrent shared memory
US20060136693A1 (en) * 2004-12-22 2006-06-22 Baxter Brent S Media memory system
US9563570B2 (en) 2004-12-22 2017-02-07 Intel Corporation System and methods exchanging data between processors through concurrent shared memory
US7490215B2 (en) * 2004-12-22 2009-02-10 Intel Corporation Media memory system and method for providing concurrent memory access to a plurality of processors through separate translation table information
US10102141B2 (en) 2004-12-22 2018-10-16 Intel Corporation System and methods exchanging data between processors through concurrent shared memory
US10691612B2 (en) 2004-12-22 2020-06-23 Intel Corporation System and methods exchanging data between processors through concurrent shared memory
US7486290B1 (en) * 2005-06-10 2009-02-03 Nvidia Corporation Graphical shader by using delay
US20070033336A1 (en) * 2005-08-05 2007-02-08 Jong-Hoon Oh Shared interface semiconductor memories
US7725609B2 (en) 2005-08-05 2010-05-25 Qimonda Ag System memory device having a dual port
US20070033348A1 (en) * 2005-08-05 2007-02-08 Jong-Hoon Oh Dual-port semiconductor memories
US7426607B2 (en) 2005-08-05 2008-09-16 Infineon Technologies Ag Memory system and method of operating memory system
US7616202B1 (en) 2005-08-12 2009-11-10 Nvidia Corporation Compaction of z-only samples
US7817151B2 (en) * 2005-10-18 2010-10-19 Via Technologies, Inc. Hardware corrected software vertex shader
US9092170B1 (en) 2005-10-18 2015-07-28 Nvidia Corporation Method and system for implementing fragment operation processing across a graphics bus interconnect
US20070091090A1 (en) * 2005-10-18 2007-04-26 Via Technologies, Inc. Hardware corrected software vertex shader
US8571346B2 (en) 2005-10-26 2013-10-29 Nvidia Corporation Methods and devices for defective pixel detection
US8456548B2 (en) 2005-11-09 2013-06-04 Nvidia Corporation Using a graphics processing unit to correct video and audio data
US8456549B2 (en) 2005-11-09 2013-06-04 Nvidia Corporation Using a graphics processing unit to correct video and audio data
US8456547B2 (en) 2005-11-09 2013-06-04 Nvidia Corporation Using a graphics processing unit to correct video and audio data
US20070186057A1 (en) * 2005-11-15 2007-08-09 Montalvo Systems, Inc. Small and power-efficient cache that can provide data for background dma devices while the processor is in a low-power state
US7873788B1 (en) 2005-11-15 2011-01-18 Oracle America, Inc. Re-fetching cache memory having coherent re-fetching
US7904659B2 (en) 2005-11-15 2011-03-08 Oracle America, Inc. Power conservation via DRAM access reduction
US20090132764A1 (en) * 2005-11-15 2009-05-21 Montalvo Systems, Inc. Power conservation via dram access
US7958312B2 (en) 2005-11-15 2011-06-07 Oracle America, Inc. Small and power-efficient cache that can provide data for background DMA devices while the processor is in a low-power state
US7934054B1 (en) * 2005-11-15 2011-04-26 Oracle America, Inc. Re-fetching cache memory enabling alternative operational modes
US20070214323A1 (en) * 2005-11-15 2007-09-13 Montalvo Systems, Inc. Power conservation via dram access reduction
US7899990B2 (en) 2005-11-15 2011-03-01 Oracle America, Inc. Power conservation via DRAM access
US8588542B1 (en) 2005-12-13 2013-11-19 Nvidia Corporation Configurable and compact pixel processing apparatus
US7830388B1 (en) * 2006-02-07 2010-11-09 Vitie Inc. Methods and apparatus of sharing graphics data of multiple instances of interactive application
US8737832B1 (en) 2006-02-10 2014-05-27 Nvidia Corporation Flicker band automated detection system and method
US8768160B2 (en) 2006-02-10 2014-07-01 Nvidia Corporation Flicker band automated detection system and method
US20070271419A1 (en) * 2006-05-18 2007-11-22 Konica Minolta Business Technologies, Inc. Memory administrating method
US8112755B2 (en) 2006-06-30 2012-02-07 Microsoft Corporation Reducing latencies in computing systems using probabilistic and/or decision-theoretic reasoning under scarce memory resources
US20080005736A1 (en) * 2006-06-30 2008-01-03 Microsoft Corporation Reducing latencies in computing systems using probabilistic and/or decision-theoretic reasoning under scarce memory resources
US8570331B1 (en) 2006-08-24 2013-10-29 Nvidia Corporation System, method, and computer program product for policy-based routing of objects in a multi-graphics processor environment
US8594441B1 (en) 2006-09-12 2013-11-26 Nvidia Corporation Compressing image-based data using luminance
US7907138B2 (en) * 2006-12-29 2011-03-15 Intel Corporation System co-processor
US20110128293A1 (en) * 2006-12-29 2011-06-02 Katen Shah System Co-Processor
US20080158233A1 (en) * 2006-12-29 2008-07-03 Katen Shah System co-processor
US8203557B2 (en) 2006-12-29 2012-06-19 Intel Corporation System co-processor
US20080177952A1 (en) * 2007-01-24 2008-07-24 Michael William Morrow Method and Apparatus for Setting Cache Policies in a Processor
US7949834B2 (en) * 2007-01-24 2011-05-24 Qualcomm Incorporated Method and apparatus for setting cache policies in a processor
US8723969B2 (en) 2007-03-20 2014-05-13 Nvidia Corporation Compensating for undesirable camera shakes during video capture
US8724895B2 (en) 2007-07-23 2014-05-13 Nvidia Corporation Techniques for reducing color artifacts in digital images
US8683126B2 (en) 2007-07-30 2014-03-25 Nvidia Corporation Optimal use of buffer space by a storage controller which writes retrieved data directly to a memory
US8698819B1 (en) 2007-08-15 2014-04-15 Nvidia Corporation Software assisted shader merging
US9024957B1 (en) 2007-08-15 2015-05-05 Nvidia Corporation Address independent shader program loading
US8659601B1 (en) 2007-08-15 2014-02-25 Nvidia Corporation Program sequencer for generating indeterminant length shader programs for a graphics processor
US8411096B1 (en) 2007-08-15 2013-04-02 Nvidia Corporation Shader program instruction fetch
US9449659B2 (en) 2007-08-20 2016-09-20 Micron Technology, Inc. Multiple data channel memory module architecture
US8156307B2 (en) 2007-08-20 2012-04-10 Convey Computer Multi-processor system having at least one processor that comprises a dynamically reconfigurable instruction set
US9824010B2 (en) 2007-08-20 2017-11-21 Micron Technology, Inc. Multiple data channel memory module architecture
US9015399B2 (en) 2007-08-20 2015-04-21 Convey Computer Multiple data channel memory module architecture
US20100036997A1 (en) * 2007-08-20 2010-02-11 Convey Computer Multiple data channel memory module architecture
US20090055596A1 (en) * 2007-08-20 2009-02-26 Convey Computer Multi-processor system having at least one processor that comprises a dynamically reconfigurable instruction set
US8561037B2 (en) 2007-08-29 2013-10-15 Convey Computer Compiler for generating an executable comprising instructions for a plurality of different instruction sets
US20090064095A1 (en) * 2007-08-29 2009-03-05 Convey Computer Compiler for generating an executable comprising instructions for a plurality of different instruction sets
US8122229B2 (en) 2007-09-12 2012-02-21 Convey Computer Dispatch mechanism for dispatching instructions from a host processor to a co-processor
US20090070553A1 (en) * 2007-09-12 2009-03-12 Convey Computer Dispatch mechanism for dispatching insturctions from a host processor to a co-processor
US20090083565A1 (en) * 2007-09-21 2009-03-26 Freescale Semiconductor, Inc. Sdram sharing using a control surrogate
US7941594B2 (en) 2007-09-21 2011-05-10 Freescale Semiconductor, Inc. SDRAM sharing using a control surrogate
US8570634B2 (en) 2007-10-11 2013-10-29 Nvidia Corporation Image processing of an incoming light field using a spatial light modulator
US9064333B2 (en) 2007-12-17 2015-06-23 Nvidia Corporation Interrupt handling techniques in the rasterizer of a GPU
US9177368B2 (en) 2007-12-17 2015-11-03 Nvidia Corporation Image distortion correction
US8780128B2 (en) 2007-12-17 2014-07-15 Nvidia Corporation Contiguously packed data
US8780123B2 (en) 2007-12-17 2014-07-15 Nvidia Corporation Interrupt handling techniques in the rasterizer of a GPU
US11106592B2 (en) 2008-01-04 2021-08-31 Micron Technology, Inc. Microprocessor architecture having alternative memory access paths
US9710384B2 (en) 2008-01-04 2017-07-18 Micron Technology, Inc. Microprocessor architecture having alternative memory access paths
US8698908B2 (en) 2008-02-11 2014-04-15 Nvidia Corporation Efficient method for reducing noise and blur in a composite still image from a rolling shutter camera
US10204051B2 (en) 2008-03-28 2019-02-12 Intel Corporation Technique to share information among different cache coherency domains
CN107506312A (en) * 2008-03-28 2017-12-22 英特尔公司 The technology of information is shared between different cache coherency domains
US9946650B2 (en) 2008-03-28 2018-04-17 Intel Corporation Technique to share information among different cache coherency domains
US10078590B2 (en) 2008-03-28 2018-09-18 Intel Corporation Technique to share information among different cache coherency domains
US8643660B2 (en) * 2008-03-28 2014-02-04 Intel Corporation Technique to share information among different cache coherency domains
US20130117509A1 (en) * 2008-03-28 2013-05-09 Zeev Offen Technique to share information among different cache coherency domains
US9665488B2 (en) 2008-03-28 2017-05-30 Intel Corporation Technique to share information among different cache coherency domains
US9035959B2 (en) 2008-03-28 2015-05-19 Intel Corporation Technique to share information among different cache coherency domains
US9035960B2 (en) 2008-03-28 2015-05-19 Intel Corporation Technique to share information among different cache coherency domains
US9035962B2 (en) 2008-03-28 2015-05-19 Intel Corporation Technique to share information among different cache coherency domains
US9379156B2 (en) 2008-04-10 2016-06-28 Nvidia Corporation Per-channel image intensity correction
US8681861B2 (en) 2008-05-01 2014-03-25 Nvidia Corporation Multistandard hardware video encoder
US8923385B2 (en) 2008-05-01 2014-12-30 Nvidia Corporation Rewind-enabled hardware encoder
US20090313622A1 (en) * 2008-06-11 2009-12-17 Microsoft Corporation Synchronizing queued data access between multiple gpu rendering contexts
US8390631B2 (en) 2008-06-11 2013-03-05 Microsoft Corporation Synchronizing queued data access between multiple GPU rendering contexts
US8443147B2 (en) 2008-08-05 2013-05-14 Convey Computer Memory interleave for heterogeneous computing
US10949347B2 (en) 2008-08-05 2021-03-16 Micron Technology, Inc. Multiple data channel memory module architecture
US11550719B2 (en) 2008-08-05 2023-01-10 Micron Technology, Inc. Multiple data channel memory module architecture
US10061699B2 (en) 2008-08-05 2018-08-28 Micron Technology, Inc. Multiple data channel memory module architecture
US20100037024A1 (en) * 2008-08-05 2010-02-11 Convey Computer Memory interleave for heterogeneous computing
US8095735B2 (en) 2008-08-05 2012-01-10 Convey Computer Memory interleave for heterogeneous computing
US20100115237A1 (en) * 2008-10-31 2010-05-06 Convey Computer Co-processor infrastructure supporting dynamically-modifiable personalities
US8205066B2 (en) 2008-10-31 2012-06-19 Convey Computer Dynamically configured coprocessor for different extended instruction set personality specific to application program with shared memory storing instructions invisibly dispatched from host processor
US9400702B2 (en) 2008-11-13 2016-07-26 Intel Corporation Shared virtual memory
US9588826B2 (en) 2008-11-13 2017-03-07 Intel Corporation Shared virtual memory
US8373718B2 (en) 2008-12-10 2013-02-12 Nvidia Corporation Method and system for color enhancement with color volume adjustment and variable shift along luminance axis
US8489851B2 (en) 2008-12-11 2013-07-16 Nvidia Corporation Processing of read requests in a memory controller using pre-fetch mechanism
US8151061B2 (en) * 2009-03-10 2012-04-03 Intel Corporation Ensuring coherence between graphics and display domains
US20100235320A1 (en) * 2009-03-10 2010-09-16 Farrell Robert L Ensuring coherence between graphics and display domains
US8749662B2 (en) 2009-04-16 2014-06-10 Nvidia Corporation System and method for lens shading image correction
US8712183B2 (en) 2009-04-16 2014-04-29 Nvidia Corporation System and method for performing image correction
US9414052B2 (en) 2009-04-16 2016-08-09 Nvidia Corporation Method of calibrating an image signal processor to overcome lens effects
US9547535B1 (en) * 2009-04-30 2017-01-17 Nvidia Corporation Method and system for providing shared memory access to graphics processing unit processes
US8395631B1 (en) * 2009-04-30 2013-03-12 Nvidia Corporation Method and system for sharing memory between multiple graphics processing units in a computer system
US20110043518A1 (en) * 2009-08-21 2011-02-24 Nicolas Galoppo Von Borries Techniques to store and retrieve image data
US20110063296A1 (en) * 2009-09-11 2011-03-17 Bolz Jeffrey A Global Stores and Atomic Operations
US9245371B2 (en) * 2009-09-11 2016-01-26 Nvidia Corporation Global stores and atomic operations
US8698918B2 (en) 2009-10-27 2014-04-15 Nvidia Corporation Automatic white balancing for photography
US8423745B1 (en) 2009-11-16 2013-04-16 Convey Computer Systems and methods for mapping a neighborhood of data to general registers of a processing element
US10181171B2 (en) 2009-12-31 2019-01-15 Intel Corporation Sharing resources between a CPU and GPU
US9626234B2 (en) 2010-09-20 2017-04-18 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
US20120069035A1 (en) * 2010-09-20 2012-03-22 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
US8937622B2 (en) * 2010-09-20 2015-01-20 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
US9645866B2 (en) 2010-09-20 2017-05-09 Qualcomm Incorporated Inter-processor communication techniques in a multiple-processor computing platform
US10536709B2 (en) 2011-11-14 2020-01-14 Nvidia Corporation Prioritized compression for video
US9829715B2 (en) 2012-01-23 2017-11-28 Nvidia Corporation Eyewear device for transmitting signal and communication method thereof
US10430190B2 (en) 2012-06-07 2019-10-01 Micron Technology, Inc. Systems and methods for selectively controlling multithreaded execution of executable code segments
US9105250B2 (en) 2012-08-03 2015-08-11 Nvidia Corporation Coverage compaction
US9798698B2 (en) 2012-08-13 2017-10-24 Nvidia Corporation System and method for multi-color dilu preconditioner
US9578224B2 (en) 2012-09-10 2017-02-21 Nvidia Corporation System and method for enhanced monoimaging
US9508318B2 (en) 2012-09-13 2016-11-29 Nvidia Corporation Dynamic color profile management for electronic devices
US9002125B2 (en) 2012-10-15 2015-04-07 Nvidia Corporation Z-plane compression with z-plane predictors
US9307213B2 (en) 2012-11-05 2016-04-05 Nvidia Corporation Robust selection and weighting for gray patch automatic white balancing
US9418400B2 (en) 2013-06-18 2016-08-16 Nvidia Corporation Method and system for rendering simulated depth-of-field visual effect
US9756222B2 (en) 2013-06-26 2017-09-05 Nvidia Corporation Method and system for performing white balancing operations on captured images
US9826208B2 (en) 2013-06-26 2017-11-21 Nvidia Corporation Method and system for generating weights for use in white balancing an image
US10935788B2 (en) 2014-01-24 2021-03-02 Nvidia Corporation Hybrid virtual 3D rendering approach to stereovision
US9436395B2 (en) 2014-03-14 2016-09-06 Advanced Micro Devices, Inc. Mechanisms to save user/kernel copy for cross device communications
US9892058B2 (en) 2015-12-16 2018-02-13 Advanced Micro Devices, Inc. Centrally managed unified shared virtual address space
US9906981B2 (en) 2016-02-25 2018-02-27 Nvidia Corporation Method and system for dynamic regulation and control of Wi-Fi scans
US10346307B2 (en) 2016-09-28 2019-07-09 Samsung Electronics Co., Ltd. Power efficient snoop filter design for mobile platform
US10296338B2 (en) * 2016-12-09 2019-05-21 Intel Corporation System, apparatus and method for low overhead control transfer to alternate address space in a processor
US10970118B2 (en) 2017-08-02 2021-04-06 Advanced Micro Devices, Inc. Shareable FPGA compute engine
US10599568B2 (en) * 2018-04-09 2020-03-24 Intel Corporation Management of coherent links and multi-level memory
US11422812B2 (en) 2019-06-25 2022-08-23 Advanced Micro Devices, Inc. Method and apparatus for efficient programmable instructions in computer systems

Also Published As

Publication number Publication date
TWI249103B (en) 2006-02-11
AU2003225168A1 (en) 2003-11-11
US20030210248A1 (en) 2003-11-13
KR100655355B1 (en) 2006-12-08
CN1317648C (en) 2007-05-23
CN1666182A (en) 2005-09-07
JP2005524907A (en) 2005-08-18
JP4489580B2 (en) 2010-06-23
EP1502194A1 (en) 2005-02-02
TW200405170A (en) 2004-04-01
WO2003096197A1 (en) 2003-11-20
KR20040106472A (en) 2004-12-17

Similar Documents

Publication Publication Date Title
US6891543B2 (en) Method and system for optimally sharing memory between a host processor and graphics processor
US10365930B2 (en) Instructions for managing a parallel cache hierarchy
US9952977B2 (en) Cache operations and policies for a multi-threaded client
US9218289B2 (en) Multi-core compute cache coherency with a release consistency memory ordering model
US11107176B2 (en) Scheduling cache traffic in a tile-based architecture
Cox et al. Multi-level texture caching for 3D graphics hardware
US20090077320A1 (en) Direct access of cache lock set data without backing memory
US6650333B1 (en) Multi-pool texture memory management
US20050219253A1 (en) Render-cache controller for multithreading, multi-core graphics processor
US6587113B1 (en) Texture caching with change of update rules at line end
US20230289070A1 (en) Efficient memory-semantic networking using scoped memory models
US6744438B1 (en) Texture caching with background preloading
EP1721298A2 (en) Embedded system with 3d graphics core and local pixel buffer
US6683615B1 (en) Doubly-virtualized texture memory
US10445852B2 (en) Local image blocks for graphics processing
KR20060116916A (en) Texture cache and 3-dimensional graphics system including the same, and control method thereof
US20080211823A1 (en) Three-dimensional graphic accelerator and method of reading texture data
US7050061B1 (en) Autonomous address translation in graphic subsystem
US7710425B1 (en) Graphic memory management with invisible hardware-managed page faulting
US11782838B2 (en) Command processor prefetch techniques
US11321241B2 (en) Techniques to improve translation lookaside buffer reach by leveraging idle resources
US10956338B2 (en) Low latency dirty RAM for cache invalidation speed improvement
JP2023530428A (en) Selective write-back of dirty cache lines as they are processed
US20100277484A1 (en) Managing Three Dimensional Scenes Using Shared and Unified Graphics Processing Unit Memory
WO2018118364A1 (en) Memory consistency in graphics memory hierarchy with relaxed ordering

Legal Events

Date Code Title Description
AS Assignment

Owner name: INTEL CORPORATION, CALIFORNIA

Free format text: ASSIGNMENT OF ASSIGNORS INTEREST;ASSIGNOR:WYATT, DAVID A.;REEL/FRAME:012890/0630

Effective date: 20020507

FEPP Fee payment procedure

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

STCF Information on status: patent grant

Free format text: PATENTED CASE

FPAY Fee payment

Year of fee payment: 4

FPAY Fee payment

Year of fee payment: 8

FPAY Fee payment

Year of fee payment: 12