Abstract:
A method and apparatus for processing vector data is provided. A processing core may have a data cache and a relatively smaller vector data cache. The vector data cache may be optimally sized to store vector data structures that are smaller than full data cache lines.

Description:
BACKGROUND OF THE INVENTION 
       [0001]    1. Field of the Invention 
         [0002]    Embodiments of the invention generally relate to the field of graphics processing. More specifically, the present invention relates to utilization of memory bandwidth within graphics processors. 
         [0003]    2. Description of the Related Art 
         [0004]    It is a well known conundrum that software engineers like to structure data in forms that are less than optimal for the target hardware that it runs on, and hardware engineers like to design hardware that is not optimal for software engineers. In terms of vertex structures it is very common to specify vertex attributes along with the vertex in memory. However, if only the vertex position is used for most computation a large portion of the cache and thus memory bandwidth is not utilized efficiently. The Data Type Aligned Cache utilizes a vector line size and allocates based on the byte address of the data structure. This allows the cache to cache vectors, or other data types, not blocks of memory which results in an extremely dense cache in terms of geometric primitives. 
         [0005]    In terms of vertex structures it is very common to specify vertex attributes along with the vertex in memory. These structures will eventually be allocated in a data cache. The vertex positions can be different from frame-to-frame, causing low data cache hit rates on vertex positions data. If only the vertex position is used for most computations, a large portions of the cache, and thus memory bandwidth, are not utilized efficiently. Ideally, data that will be reused, i.e. local variables, will be stored in the graphics processing engines integer unit data cache (core data cache). This will increase the hit rate in the cores data cache. 
       SUMMARY OF THE INVENTION 
       [0006]    One embodiment provides a method of processing data. The method generally includes fetching one or more cache lines of data, the cache lines having a first width corresponding to a width of a core data cache, extracting, from the one or more cache lines, a vector data structure having a second width that is less than the first width, and storing the vector data structure in a vector data cache that is smaller than the core data cache and has a line width corresponding to the second line width. 
         [0007]    One embodiment provides a processor. The processor generally includes at least one vector processing pipeline, a core data cache for holding cache lines of data, the cache lines having a first width corresponding to a width of the core data cache, a vector data cache for storing vector data structures, and access circuitry. The vector data structures have a second width that is less than the first width, the vector data cache is smaller than the core data cache, and the vector data cache has a width corresponding to the second width. The access circuitry is for extracting a vector data structure from one or more data cache lines, and storing the vector data structure in the vector data cache. 
         [0008]    One embodiment provides a plurality of processing units, including at least one processing unit having a vector processing pipeline, a core data cache for holding cache lines of data accessible by the vector processing pipeline, the cache lines having a first width corresponding to a width of the core data cache, a vector data cache, and access circuitry. The vector data cache is accessible by the vector processing pipeline for storing vector data structures, wherein the vector data structures have a second width that is less than the first width, the vector data cache is smaller than the core data cache, and the vector data cache has a width corresponding to the second width. The access circuitry is for extracting a vector data structure from one or more data cache lines, and storing the vector data structure in the vector data cache. 
     
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         [0009]    So that the manner in which the above recited features, advantages and objects of the present invention are attained and can be understood in detail, a more particular description of the invention, briefly summarized above, may be had by reference to the embodiments thereof which are illustrated in the appended drawings. 
           [0010]    It is to be noted, however, that the appended drawings illustrate only typical embodiments of this invention and are therefore not to be considered limiting of its scope, for the invention may admit to other equally effective embodiments. 
           [0011]      FIG. 1  is a system level view of a processor. 
           [0012]      FIG. 2A  is an illustration of misaligned vector data lines within memory. 
           [0013]      FIG. 2B  is an illustration of aligned, packed vector data lines within a vector data cache. 
           [0014]      FIG. 3  is one embodiment of a vector data cache with an aligner. 
       
    
    
     DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS 
       [0015]    The present invention generally relates to the field of graphics processing. More specifically, the present invention relates to incorporating a core data cache and a separate vector data cache to store vertex positions. The vector data cache is created specifically for vector lined sized data and can allocate based on the byte address of the data structure. This allows for more vectors to be stored closer to the graphics processing engine (GPE). Further, the vector data cache may be larger than the core&#39;s data cache, and allows the programmer to pre-fetch a frame or even multiple frames and store the data in the vector data cache. 
         [0016]    In the following, reference is made to embodiments of the invention. However, it should be understood that the invention is not limited to specific described embodiments. Instead, any combination of the following features and elements, whether related to different embodiments or not, is contemplated to implement and practice the invention. Furthermore, in various embodiments the invention provides numerous advantages over the prior art. However, although embodiments of the invention may achieve advantages over other possible solutions and/or over the prior art, whether or not a particular advantage is achieved by a given embodiment is not limiting of the invention. Thus, the following aspects, features, embodiments and advantages are merely illustrative and are not considered elements or limitations of the appended claims except where explicitly recited in a claim(s). Likewise, reference to “the invention” shall not be construed as a generalization of any inventive subject matter disclosed herein and shall not be considered to be an element or limitation of the appended claims except where explicitly recited in a claim(s). 
         [0017]    The following is a detailed description of embodiments of the invention depicted in the accompanying drawings. The embodiments are examples and are in such detail as to clearly communicate the invention. However, the amount of detail offered is not intended to limit the anticipated variations of embodiments; but on the contrary, the intention is to cover all modifications, equivalents, and alternatives falling within the spirit and scope of the present invention as defined by the appended claims. 
         [0018]    Embodiments of the invention may be utilized with and are described below with respect to a system, e.g., a computer system. As used herein, a system may include any system utilizing a processor and a cache memory, including a personal computer, internet appliance, digital media appliance, portable digital assistant (PDA), portable music/video player and video game console. While cache memories may be located on the same die as the processor which utilizes the cache memory, in some cases, the processor and cache memories may be located on different dies (e.g., separate chips within separate modules or separate chips within a single module). 
       Exemplary System 
       [0019]      FIG. 1  illustrates an exemplary system  100  according to one embodiment of the invention. As illustrated system  100  includes a processor  110 , L3 cache/L4 cache/memory  102 , graphics processing unit (GPU)  104 , input/output (IO) interface  106 , and a storage device  108 . The memory  102  is preferably a random access memory sufficiently large to hold the necessary programming and data structures operated on by processor  110 . While memory  102  is shown as a single entity, it should be understood that memory  102  may in fact comprise a plurality of modules, and that memory  112  may exist at multiple levels, for example, L3 cache, L4 cache, and main memory  102 . 
         [0020]    Storage device  108  is preferably a Direct Access Storage Device (DASD). Although it is shown as a single unit, it could be a combination of fixed and/or removable storage devices, such as fixed disc drives, floppy disc drives, tape drives, removable memory cards, or optical storage. The memory  102  and storage  116  could be part of one virtual address space spanning multiple primary and secondary storage devices. 
         [0021]    IO interface  106  may provide an interface between the processor and an input/output device. Exemplary input devices include, for example, keyboards, keypads, light-pens, touch-screens, track-balls, or speech recognition units, audio/video players, and the like. An output device can be any device to give output to the user, e.g., any conventional display screen. 
         [0022]    Graphics processing unit (GPU)  104  may be configured to receive graphics data, for example, 2-Dimensional and 3-Dimensional graphics data, from a processor  110 . GPU  104  may perform one or more computations to manipulate the graphics data, and render images on a display screen. 
         [0023]    Processor  110  may include a plurality of processor cores  114  and one or more of the processing cores may be a graphics processing core. Processors cores  114  may be configured to perform pipelined execution of instructions retrieved from memory  102 . Each processor core  114  may have an associated L1 cache  116 . Each L1 cache  116  may be a relatively small memory cache located closest to an associated processor core  114  and may be configured to give the associated processor  114  fast access to instructions and data (collectively referred to henceforth as data). 
         [0024]    Processor  110  may also include at least one L2 cache  118 . An L2 cache  118  may be relatively larger than a L1 cache  114 . Each L2 cache  118  may be associated with one or more L1 caches, and may be configured to provide data to the associated one or more L1 caches. For example a processor core  114  may request data that is not contained in its associated L1 cache. Consequently, data requested by the processor core  114  may be retrieved from an L2 cache  118  and stored in the L1 cache  116  associated with the processor core  114 . In one embodiment of the invention, L1 cache  116 , and L2 cache  118  may be SRAM based devices. However, one skilled in the art will recognize that L1 cache  116  and L2 cache  118  may be any other type of memory, for example, DRAM. 
         [0025]    For some embodiments the processor  110  may be processing graphics. Complex graphics are often represented by a plurality of geometric primitives, such as triangles. The positions of these triangles are represented by sets of vertices. Often times vertex attributes are included along with the vertices in memory to form vertex structures. These structures may contribute to the misalignment of vector data within the memory  102 . 
         [0026]      FIG. 2A  illustrates the misalignment of vector data within the memory  112 . As illustrated, a width of the memory  112  may be greater than a width of a vector data line. For example, the memory  112  may be 128 bytes wide, while a vector data line may be 16 bytes wide. A memory that is wider than a vector data line may result in misaligned memory transactions. Misaligned memory transactions may include a single vector data line running divided between two separate memory lines, vector data lines separated by other data, or several vector data lines occupying a single memory line. 
         [0027]    To increase the hit rate in the core data cache, a separate vector data cache may be created specifically for vector line sized data that changes, while vertex attributes and other, less dynamic, pieces of data remain in the core data cache. For some embodiments, the L2 cache  118  may be a physically unified cache partitioned into a vector data cache and a core data cache, while in other embodiments there may be two physically distinct L2 caches, one vector data cache and one core data cache. 
         [0028]      FIG. 2B  illustrates how vector data lines  202  are aligned and tightly packed within a vector data cache  200 . For instance, as mentioned in a previous example, a vector data line may be 16 bytes wide; accordingly, the vector data cache may be 16 bytes wide. The vector data cache may be implemented with many architected cache designs. For example, a vector data cache may be implemented with an M-Way set associative design. 
         [0029]      FIG. 3  illustrates a system that may contain a vector register file  302 , an address generation and translation unit  304 , an aligner  300  and an L2 cache  118 . Within the L2 cache  118 , a vector data cache  200  receives vector data lines  202 , which may be 16 bytes wide, from the data aligner  300 . The data aligner  300  may receive large data lines, which may be 128 bytes wide, from memory  112 , and extract vector data lines from the large data lines. In some embodiments, the data aligner  300  may allocate vector data lines based on the byte address of the data structure. This allocation may allow for more vectors to be stored tightly packed and closer to the graphics processing core, which may result in decreased memory access latency. 
         [0030]    Data aligner  300  may be bypassed when large data lines, which may be 128 bytes wide, are sent from memory  112  to a core data cache  310 . 
         [0031]    In some embodiments the vector data cache  200  may be larger in total storage capacity than a core data cache  310 , allowing a programmer to pre-fetch a single frame or multiple frames of scene data. This may optimize memory bandwidth by hiding the memory access latency, for example, with one frame being processed while another frame is being fetched. 
         [0032]    Besides going to the Vector Data cache, aligned 16 byte vector data lines may also be sent to a vector register file  302 . Within the vector register file  302 , the vector data lines  202  may be stored in an array of registers. From these registers, vector data lines may be processed as determined by the graphics processing core  114  (not shown). However, if the vector data line  202  for which the graphics processing core is looking is not present in the vector register file  302 , then the vector data line  202  is sought after else where (e.g., from the vector data cache  200 ). 
         [0033]    To seek the vector data lines elsewhere, an address is generated and translated in the Address Generation and Translation element  304 . The translated address that comes from element  304  may be sent to the M-Way Set Associative Vector L2 Directory  306 . Element  306  may use a partial address to reference a block of cache and the corresponding state of that block. Meanwhile, the translated address that comes from element  304  may be sent to the vector data cache  200 . Depending on the systems architecture, the vector data cache  200  may be split or unified with the core data cache  310 . 
         [0034]    If the vector data line  202  is found within the vector data cache, the vector data line  202  may be sent to the write back logic element  308 . Then the vector data line may be sent to the vector register file  302  to be processed by the graphic processing unit  114 . However, if the vector data line  202  is not found with the vector data cache  200 , the translated address from element  304  may be passed through the vector data cache  200  to the write back logic element  308 . The translated address may then be used to seek the requested vector data line elsewhere in memory. 
         [0035]    While the foregoing is directed to embodiments of the present invention, other and further embodiments of the invention may be devised without departing from the basic scope thereof, and the scope thereof is determined by the claims that follow.