Embodiments of the present invention generally relate to the transfer and storage of data.
In computer science, caches are used to reduce the number of accesses to main memory and to reduce the latency associated with data retrieval. Essentially, a cache is smaller and faster than main memory and can be used to store copies of frequently accessed data.
In computer graphics, a cache can be situated between a framebuffer and a graphics pipeline (e.g., a rasterizer). The cache allows the rasterizer to access pixel data at higher speed, assuming the needed pixel data is in the cache.
Typically, 24 bits (three bytes) of data are associated with each pixel—for example, 24 bits of color data (e.g., three eight-bit color values, one value for red, one for green and one for blue) may be associated with a pixel. Each cache line is typically 256 bits (32 bytes) in length. Because 256 is not a whole number multiple of 24 (256/24=10⅔), storing 24-bit pixels in a cache can be problematic.
For example, all of the data for ten 24-bit pixels and two-thirds of the data for an eleventh 24-bit pixel can be stored in one cache line, with the remainder of the data for the eleventh pixel stored in a second cache line. However, this can be problematic because two memory accesses instead of one are required in order to read the data for the eleventh pixel.
Alternatively, a 24-bit pixel can be stored every 32 bits (four bytes). That is, eight empty bit locations separate each 24-bit pixel from the next. Consequently, each 256-bit cache line contains data for only eight 24-bit pixels. This avoids the problem described above, but as a result 25 percent of the space available in a cache line is unused.
Accordingly, there is a need to more efficiently store data in a cache, to reduce the amount of unused space without requiring multiple memory accesses to read some of the data. Embodiments according to the present invention provide these and other advantages.
In one embodiment, data for multiple discrete data elements (e.g., pixels, texels, depth values, etc.) can be stored contiguously in a cache line, where the length of the cache line in bits is not a whole number multiple of the number of bits of data per data element, such that none of the data elements is stored in more than one of the cache lines—that is, no data element is stored partially in one cache line and partially in another cache line.
For example, five 24-bit data elements can be stored every 16 bytes—data for the five data elements is stored contiguously over the first 15 bytes, and the next byte is unused. In a 256-bit cache line, the next 15 bytes hold data for another five data elements, with the remaining byte unused. Thus, for example, instead of storing data for only eight 24-bit pixels in a 256-bit cache line, data for ten such pixels can be stored, representing a 25 percent increase in the number of pixels that can be fit into the same memory footprint.
In another embodiment, in a manner similar to the above, data for multiple discrete data elements can be stored contiguously in a memory that includes a number of “addressable storage units,” where the length of a storage unit in bits is not a whole number multiple of the number of bits of data per data element, such that data for none of the data elements is stored in more than one of the addressable storage units—that is, no data element is stored partially in one storage unit and partially in another storage unit.
In yet another embodiment, in a manner analogous to that just described, a number of the data elements can be transferred per unit of time (e.g., per clock tick or pulse) over a bus, where the width of the bus in bits is not a whole number multiple of the number of bits of data per data element, such that data for a subset of the data elements is packaged contiguously across the width of the bus and such that data for none of the data elements is transferred in more than one clock tick—that is, no data element is transferred partially at one clock tick and partially at a subsequent clock tick.
In general, embodiments according to the present invention make more efficient use of available memory or cache space without any of the data elements straddling more than one addressable storage unit or cache line. Embodiments according to the present invention also make more efficient use of available bus width without any of the data elements straddling more than unit of time.
These and other objects and advantages of the various embodiments of the present invention will be recognized by those of ordinary skill in the art after reading the following detailed description of the embodiments that are illustrated in the various drawing figures.
The present invention is illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings and in which like reference numerals refer to similar elements.
Reference will now be made in detail to embodiments of the present invention, examples of which are illustrated in the accompanying drawings. While the invention will be described in conjunction with these embodiments, it will be understood that they are not intended to limit the invention to these embodiments. On the contrary, the invention is intended to cover alternatives, modifications and equivalents, which may be included within the spirit and scope of the invention as defined by the appended claims. Furthermore, in the following detailed description of embodiments of the present invention, numerous specific details are set forth in order to provide a thorough understanding of the present invention. However, it will be recognized by one of ordinary skill in the art that the present invention may be practiced without these specific details. In other instances, well-known methods, procedures, components, and circuits have not been described in detail as not to unnecessarily obscure aspects of the embodiments of the present invention.
Some portions of the detailed descriptions, which follow, are presented in terms of procedures, steps, logic blocks, processing, and other symbolic representations of operations on data bits within a computer memory. These descriptions and representations are the means used by those skilled in the data processing arts to most effectively convey the substance of their work to others skilled in the art. A procedure, computer executed step, logic block, process, etc., is here, and generally, conceived to be a self-consistent sequence of steps or instructions leading to a desired result. The steps are those requiring physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated in a computer system. It has proven convenient at times, principally for reasons of common usage, to refer to these signals as bits, values, elements, symbols, characters, terms, numbers, or the like.
It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise as apparent from the following discussions, it is appreciated that throughout the present invention, discussions utilizing terms such as “accessing” or “storing” or “retrieving” or “dividing” or “multiplying” or “adding” or “using” or “packaging” or “transferring” or the like, refer to the actions and processes of a computer system (e.g., computer system 100 of
Embodiments described herein may be discussed in the general context of computer-executable instructions or components residing on some form of computer-usable medium, such as program modules, executed by one or more computers or other devices. Generally, program modules include routines, programs, objects, data structures, etc., that perform particular tasks or implement particular abstract data types. The functionality of the program modules may be combined or distributed as desired in various embodiments.
By way of example, and not limitation, computer-usable media may comprise computer storage media and communication media and combinations thereof. Computer storage media includes volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules or other data. Communication media can embody computer-readable instructions, data structures, program modules or other data in a modulated data signal such as a carrier wave or other transport mechanism and includes any information delivery media.
Embodiments herein are described in the context of a computer graphics system that includes a memory and a cache for storing graphics data, and a bus for transporting graphics data; however, the present invention is not so limited. Embodiments according to the present invention are well-suited for use with other types of data and other types of applications. Also, embodiments of the present invention can be implemented on computer systems and graphics processor units (GPUs) that are different in form or function from those described in conjunction with
The CPU can be coupled to the system memory via a bridge component/memory controller (not shown) or can be directly coupled to the system memory via a memory controller (not shown) internal to the CPU. The GPU is coupled to a display 112. One or more additional GPUs can optionally be coupled to system 100 to further increase its computational power. The GPU(s) is/are coupled to the CPU and the system memory.
The computer system can be implemented as, for example, a desktop computer system or server computer system, having a powerful general-purpose CPU coupled to a dedicated graphics rendering GPU. In such an embodiment, components can be included that add peripheral buses, specialized graphics memory, input/output (I/O) devices, and the like. Similarly, the computer system can be implemented as a handheld device (e.g., a cell phone, etc.) or a set-top video game console device.
The GPU can be implemented as a discrete component, a discrete graphics card designed to couple to the computer system via a connector (e.g., an Accelerated Graphics Port slot, a Peripheral Component Interconnect-Express slot, etc.), a discrete integrated circuit die (e.g., mounted directly on a motherboard), or an integrated GPU included within the integrated circuit die of a computer system chipset component (not shown) or within the integrated circuit die of a PSOC (programmable system-on-a-chip). Additionally, a local graphics memory 114 can be included for the GPU for high bandwidth graphics data storage.
The cache 250 functions as a high-speed cache for the information stored in the graphics memory (e.g., frame buffer memory). Generally speaking, data in the cache is accessible to the GPU; data needed by the GPU that is not in the cache can be retrieved from the memory and written to the cache; and data acted on by the GPU can also be written back to the cache by the GPU. Details regarding the role of the cache and how it performs its functions in conjunction with the GPU and the graphics memory are known in the art.
In a computer graphics embodiment, the data stored in the cache can include, for example, pixel data, texel data, depth values, spatial coordinates, fog values, and/or other quantities and attributes associated with rendering a pixel on a display. In general, the term “data element” is used herein to refer to a unit or instance of data—in general, a data element is a unit of data consisting of multiple bits. In a computer graphics embodiment, a data element may represent a pixel, a texel, or a quantity or attribute associated with a pixel or texel. For example, in a computer graphics embodiment, a data element can include an eight-bit red color value, an eight-bit blue color value and an eight-bit green color value—these three eight-bit values constitute a data element. For ease and clarity of discussion, the description below uses pixel data as an example embodiment representative of and extendable to other types of data elements.
In
In general, for a given set of discrete data elements, in instances in which each data element includes a first number of bits but each cache line can store a second number of bits that is not a whole number multiplier of the first number of bits, the data for some number of the discrete data elements is stored per cache line, subject to the following conditions: 1) data for none of the data elements is stored in more than one of the cache lines—that is, no data element is stored partially in one cache line and partially in another cache line; and 2) multiple data elements (e.g., N data elements, with N greater than one) are contiguously stored in a cache line. As a result, any unused bits are grouped contiguously with those N data elements. The unused bits in a cache line may either precede or follow the N data elements.
In the example of
The examples above can be readily extended to cache lines that are greater than 256 bits in length. For instance, 21 24-bit values can be stored every 64 bytes in a larger cache line, representing a 31 percent increase in the number of data elements that can be fit into the same memory footprint. Also, for instance, 85 24-bit values can be stored every 256 bytes in a larger cache line, representing a 33 percent increase in the number of data elements that can be fit into the same memory footprint.
Data for a selected pixel can be retrieved by applying a formula to map a number associated with the selected pixel to the location of the pixel in the cache. In one
location(P)=└P/N┘*M+(P%N)*R; (1)
where “location(P)” is the location in the cache of pixel P and “P” is the pixel number, where the location is measured in bytes from the beginning of the cache; “N” is the number of pixels contiguously stored; “└P/N┘” is the mathematical floor of the quantity P/N; “M” is the number of bytes encompassing the N pixels and the unused bits following (or preceding) those N pixels; “P % N” refers to P modulo N (which is the remainder of P/N); and “R” is the number of bytes per pixel.
In
In general, the floor can be used to identify which cache line holds data for the selected pixel, and the modulus or remainder can be used to determine the location of that data within the identified cache line. Note that the value of the floor does not necessarily identify (equate to) the number of the cache line, as shown by the example calculation above in which the floor is three but the selected pixel is in the second cache line.
In block 420, the data is stored in the cache. More specifically, in one embodiment, data for multiple data elements (e.g., N data elements, where N is less than or equal to T) is stored contiguously in a cache line. As a result, any unused bits in the cache line are contiguously grouped with (e.g., following or preceding) the data for the N data elements. Also, data for none of the N data elements is stored in more than one of the cache lines—that is, no data element is stored partially in one cache line and partially in another cache line.
In another embodiment, data for each successive data element of the set of T data elements is stored in a cache line contiguous with data for the preceding data element until the cache line is filled or nearly filled. Consequently, in this embodiment, all data in a cache line is contiguously grouped, and all unused bits in the cache line are also contiguously grouped. The unused bits may either precede or follow the data. Here, “nearly filled” means that the cache line is filled to an amount such that none of the data elements is partially stored in the cache line—that is, the cache line is filled until there is not enough space left in the cache line to entirely store a data element, in which case that data element is stored in another cache line.
In block 430, data can be retrieved from the cache. In one embodiment, a number associated with the data element (e.g., a pixel number) is used to identify the location of a particular data element in the cache, as previously described herein.
In general, data for discrete data elements can be stored contiguously in a memory that includes a number of “addressable storage units,” such that data for none of the data elements is stored in more than one of the addressable storage units—that is, no data element is stored partially in one storage unit and partially in another storage unit.
An addressable storage unit is sometimes referred to as the size of the address space on a computer system.
In the example of
In
In general, for a given set of discrete data elements, in instances in which each data element includes a first number of bits but a bus can transfer a second number of bits per unit of time, where the second number of bits is not a whole number multiplier of the first number of bits, the data for some number of the discrete data elements can be transferred per unit of time, subject to the following conditions: 1) data for none of the data elements is transferred in more than one of the units of time—that is, no data element is transferred partially in over one unit of time and partially over a subsequent unit of time; and 2) multiple data elements (e.g., N data elements, with N greater than one) are contiguously packaged across the width of the bus. As a result, any unused bus width is grouped contiguously with those N data elements.
In the example of
The examples above can be readily extended to bus widths that are greater than 128 or 256 bits in length. For instance, 21 24-bit values can be packaged every 64 bytes in a wider bus, or 85 24-bit values can be stored every 256 bytes in an even wider bus.
In block 720, the data is transported over a bus over a unit of time. More specifically, in one embodiment, data for multiple data elements (e.g., N data elements, where N is less than or equal to T) is packaged contiguously across the width of the bus. Also, data for none of the N data elements is transferred in more than unit of time—that is, no data element is transferred partially during one unit of time and partially during another unit of time.
Although specific steps are disclosed in the flowcharts 400 and 700, such steps are exemplary. That is, embodiments of the present invention are well-suited to performing various other steps or variations of the steps recited in the flowcharts. The steps in the flowcharts may be performed in an order different than presented.
In summary, embodiments according to the present invention permit data to be more efficiently stored in a memory or cache, reducing the amount of unused space in the memory or cache without requiring multiple memory accesses to read some of the data. In a similar fashion, embodiments according to the present invention also make more efficient use of available bus width.
The foregoing descriptions of specific embodiments of the present invention have been presented for purposes of illustration and description. They are not intended to be exhaustive or to limit the invention to the precise forms disclosed, and many modifications and variations are possible in light of the above teaching. The embodiments were chosen and described in order to best explain the principles of the invention and its practical application, to thereby enable others skilled in the art to best utilize the invention and various embodiments with various modifications as are suited to the particular use contemplated. It is intended that the scope of the invention be defined by the claims appended hereto and their equivalents.
Number | Name | Date | Kind |
---|---|---|---|
3904818 | Kovac | Sep 1975 | A |
4253120 | Levine | Feb 1981 | A |
4646251 | Hayes et al. | Feb 1987 | A |
4682664 | Kemp | Jul 1987 | A |
4685071 | Lee | Aug 1987 | A |
4739495 | Levine | Apr 1988 | A |
4771470 | Geiser et al. | Sep 1988 | A |
4866524 | Six | Sep 1989 | A |
4920428 | Lin et al. | Apr 1990 | A |
4987496 | Greivenkamp, Jr. | Jan 1991 | A |
5060227 | Finley et al. | Oct 1991 | A |
5175430 | Enke et al. | Dec 1992 | A |
5227789 | Barry et al. | Jul 1993 | A |
5261029 | Abi-Ezzi et al. | Nov 1993 | A |
5305994 | Matsui et al. | Apr 1994 | A |
5338901 | Dietrich | Aug 1994 | A |
5387983 | Sugiura et al. | Feb 1995 | A |
5475430 | Hamada et al. | Dec 1995 | A |
5513016 | Inoue | Apr 1996 | A |
5608824 | Shimizu et al. | Mar 1997 | A |
5652621 | Adams, Jr. et al. | Jul 1997 | A |
5793433 | Kim et al. | Aug 1998 | A |
5822452 | Tarolli et al. | Oct 1998 | A |
5831625 | Rich et al. | Nov 1998 | A |
5878174 | Stewart et al. | Mar 1999 | A |
5892517 | Rich | Apr 1999 | A |
5903273 | Mochizuki et al. | May 1999 | A |
5995109 | Goel et al. | Nov 1999 | A |
6016474 | Kim et al. | Jan 2000 | A |
6078331 | Pulli et al. | Jun 2000 | A |
6118547 | Tanioka | Sep 2000 | A |
6128000 | Jouppi et al. | Oct 2000 | A |
6141740 | Mahalingaiah et al. | Oct 2000 | A |
6151457 | Kawamoto | Nov 2000 | A |
6175430 | Ito | Jan 2001 | B1 |
6236405 | Schilling et al. | May 2001 | B1 |
6252611 | Kondo | Jun 2001 | B1 |
6281931 | Tsao et al. | Aug 2001 | B1 |
6289103 | Sako et al. | Sep 2001 | B1 |
6298169 | Guenter | Oct 2001 | B1 |
6314493 | Luick | Nov 2001 | B1 |
6319682 | Hochman | Nov 2001 | B1 |
6323934 | Enomoto | Nov 2001 | B1 |
6339428 | Fowler et al. | Jan 2002 | B1 |
6392216 | Peng-Tan | May 2002 | B1 |
6396397 | Bos et al. | May 2002 | B1 |
6438664 | McGrath et al. | Aug 2002 | B1 |
6469707 | Voorhies | Oct 2002 | B1 |
6486971 | Kawamoto | Nov 2002 | B1 |
6504952 | Takemura et al. | Jan 2003 | B1 |
6556311 | Benear et al. | Apr 2003 | B1 |
6584202 | Montag et al. | Jun 2003 | B1 |
6594388 | Gindele et al. | Jul 2003 | B1 |
6683643 | Takayama et al. | Jan 2004 | B1 |
6707452 | Veach | Mar 2004 | B1 |
6724932 | Ito | Apr 2004 | B1 |
6737625 | Baharav et al. | May 2004 | B2 |
6760080 | Moddel et al. | Jul 2004 | B1 |
6785814 | Usami et al. | Aug 2004 | B1 |
6806452 | Bos et al. | Oct 2004 | B2 |
6819793 | Reshetov et al. | Nov 2004 | B1 |
6839062 | Aronson et al. | Jan 2005 | B2 |
6856441 | Zhang et al. | Feb 2005 | B2 |
6891543 | Wyatt | May 2005 | B2 |
6900836 | Hamilton, Jr. | May 2005 | B2 |
6940511 | Akenine-Moller et al. | Sep 2005 | B2 |
6950099 | Stollnitz et al. | Sep 2005 | B2 |
7009639 | Une et al. | Mar 2006 | B1 |
7015909 | Morgan, III et al. | Mar 2006 | B1 |
7023479 | Hiramatsu et al. | Apr 2006 | B2 |
7081898 | Sevigny | Jul 2006 | B2 |
7088388 | MacLean et al. | Aug 2006 | B2 |
7092018 | Watanabe | Aug 2006 | B1 |
7106368 | Daiku et al. | Sep 2006 | B2 |
7116335 | Pearce et al. | Oct 2006 | B2 |
7133072 | Harada | Nov 2006 | B2 |
7146041 | Takahashi | Dec 2006 | B2 |
7221779 | Kawakami et al. | May 2007 | B2 |
7227586 | Finlayson et al. | Jun 2007 | B2 |
7236649 | Fenney | Jun 2007 | B2 |
7245319 | Enomoto | Jul 2007 | B1 |
7305148 | Spampinato et al. | Dec 2007 | B2 |
7343040 | Chanas et al. | Mar 2008 | B2 |
7397946 | Reshetov et al. | Jul 2008 | B2 |
7486844 | Chang et al. | Feb 2009 | B2 |
7502505 | Malvar et al. | Mar 2009 | B2 |
7580070 | Yanof et al. | Aug 2009 | B2 |
7627193 | Alon et al. | Dec 2009 | B2 |
7671910 | Lee | Mar 2010 | B2 |
7728880 | Hung et al. | Jun 2010 | B2 |
7750956 | Wloka | Jul 2010 | B2 |
7760936 | King et al. | Jul 2010 | B1 |
7912279 | Hsu et al. | Mar 2011 | B2 |
8049789 | Innocent | Nov 2011 | B2 |
8238695 | Davey et al. | Aug 2012 | B1 |
8594441 | King et al. | Nov 2013 | B1 |
20010001234 | Addy et al. | May 2001 | A1 |
20010012113 | Yoshizawa et al. | Aug 2001 | A1 |
20010012127 | Fukuda et al. | Aug 2001 | A1 |
20010015821 | Namizuka et al. | Aug 2001 | A1 |
20010019429 | Oteki et al. | Sep 2001 | A1 |
20010021278 | Fukuda et al. | Sep 2001 | A1 |
20010033410 | Helsel et al. | Oct 2001 | A1 |
20010050778 | Fukuda et al. | Dec 2001 | A1 |
20010054126 | Fukuda et al. | Dec 2001 | A1 |
20020012131 | Oteki et al. | Jan 2002 | A1 |
20020015111 | Harada | Feb 2002 | A1 |
20020018244 | Namizuka et al. | Feb 2002 | A1 |
20020027670 | Takahashi et al. | Mar 2002 | A1 |
20020033887 | Hieda et al. | Mar 2002 | A1 |
20020041383 | Lewis, Jr. et al. | Apr 2002 | A1 |
20020044778 | Suzuki | Apr 2002 | A1 |
20020054374 | Inoue et al. | May 2002 | A1 |
20020063802 | Gullichsen et al. | May 2002 | A1 |
20020105579 | Levine et al. | Aug 2002 | A1 |
20020126210 | Shinohara et al. | Sep 2002 | A1 |
20020146136 | Carter, Jr. | Oct 2002 | A1 |
20020149683 | Post | Oct 2002 | A1 |
20020158971 | Daiku et al. | Oct 2002 | A1 |
20020167202 | Pfalzgraf | Nov 2002 | A1 |
20020167602 | Nguyen | Nov 2002 | A1 |
20020191694 | Ohyama et al. | Dec 2002 | A1 |
20020196470 | Kawamoto et al. | Dec 2002 | A1 |
20030035100 | Dimsdale et al. | Feb 2003 | A1 |
20030067461 | Fletcher et al. | Apr 2003 | A1 |
20030122825 | Kawamoto | Jul 2003 | A1 |
20030142222 | Hordley | Jul 2003 | A1 |
20030146975 | Joung et al. | Aug 2003 | A1 |
20030169353 | Keshet et al. | Sep 2003 | A1 |
20030169918 | Sogawa | Sep 2003 | A1 |
20030197701 | Teodosiadis et al. | Oct 2003 | A1 |
20030222995 | Kaplinsky et al. | Dec 2003 | A1 |
20030223007 | Takane | Dec 2003 | A1 |
20040001061 | Stollnitz et al. | Jan 2004 | A1 |
20040001234 | Curry et al. | Jan 2004 | A1 |
20040032516 | Kakarala | Feb 2004 | A1 |
20040051716 | Sevigny | Mar 2004 | A1 |
20040066970 | Matsugu | Apr 2004 | A1 |
20040085321 | Oka et al. | May 2004 | A1 |
20040100588 | Hartson et al. | May 2004 | A1 |
20040101313 | Akiyama | May 2004 | A1 |
20040109069 | Kaplinsky et al. | Jun 2004 | A1 |
20040151372 | Reshetov et al. | Aug 2004 | A1 |
20040189875 | Zhai et al. | Sep 2004 | A1 |
20040218071 | Chauville et al. | Nov 2004 | A1 |
20040247196 | Chanas et al. | Dec 2004 | A1 |
20050007378 | Grove | Jan 2005 | A1 |
20050007477 | Ahiska | Jan 2005 | A1 |
20050027944 | Williams et al. | Feb 2005 | A1 |
20050030395 | Hattori | Feb 2005 | A1 |
20050046704 | Kinoshita | Mar 2005 | A1 |
20050073591 | Ishiga et al. | Apr 2005 | A1 |
20050099418 | Cabral et al. | May 2005 | A1 |
20050111110 | Matama | May 2005 | A1 |
20050185058 | Sablak | Aug 2005 | A1 |
20050238225 | Jo et al. | Oct 2005 | A1 |
20050243181 | Castello et al. | Nov 2005 | A1 |
20050248671 | Schweng | Nov 2005 | A1 |
20050261849 | Kochi et al. | Nov 2005 | A1 |
20050286097 | Hung et al. | Dec 2005 | A1 |
20060050158 | Irie | Mar 2006 | A1 |
20060061658 | Faulkner et al. | Mar 2006 | A1 |
20060087509 | Ebert et al. | Apr 2006 | A1 |
20060133697 | Uvarov et al. | Jun 2006 | A1 |
20060153441 | Li | Jul 2006 | A1 |
20060176375 | Hwang et al. | Aug 2006 | A1 |
20060197664 | Zhang et al. | Sep 2006 | A1 |
20060236076 | Peleg et al. | Oct 2006 | A1 |
20060274171 | Wang | Dec 2006 | A1 |
20060290794 | Bergman et al. | Dec 2006 | A1 |
20060293089 | Herberger et al. | Dec 2006 | A1 |
20070091188 | Chen et al. | Apr 2007 | A1 |
20070147706 | Sasaki et al. | Jun 2007 | A1 |
20070171288 | Inoue et al. | Jul 2007 | A1 |
20070236770 | Doherty et al. | Oct 2007 | A1 |
20070247532 | Sasaki | Oct 2007 | A1 |
20070262985 | Watanabe et al. | Nov 2007 | A1 |
20070285530 | Kim et al. | Dec 2007 | A1 |
20080030587 | Helbing | Feb 2008 | A1 |
20080043024 | Schiwietz et al. | Feb 2008 | A1 |
20080062164 | Bassi et al. | Mar 2008 | A1 |
20080101690 | Hsu et al. | May 2008 | A1 |
20080143844 | Innocent | Jun 2008 | A1 |
20090010539 | Guarnera et al. | Jan 2009 | A1 |
20090037774 | Rideout et al. | Feb 2009 | A1 |
20090116750 | Lee et al. | May 2009 | A1 |
20090128575 | Liao et al. | May 2009 | A1 |
20090160957 | Deng et al. | Jun 2009 | A1 |
20090257677 | Cabral et al. | Oct 2009 | A1 |
20090297022 | Pettigrew et al. | Dec 2009 | A1 |
20100266201 | Cabral et al. | Oct 2010 | A1 |
Number | Date | Country |
---|---|---|
2000516752 | Dec 2000 | JP |
2008113416 | May 2008 | JP |
Number | Date | Country | |
---|---|---|---|
20090157963 A1 | Jun 2009 | US |