System and method for predication handling
Granted 19 Jul 2022 · 4 office actions
Assignee: Texas Instruments
Law firm: Law firm · Log in to unlock
Attorney: Attorney · Log in to unlock
Inventors: Timothy David Anderson, Soujanya Narnur, Duc Quang Bui, Alan Davis +2 · Examiner: Steven G Snyder · AU 2184 · TC 2100
Life of the application
15 dated eventsAbstract
A method for writing data to memory that provides for generation of a predicate to disable a portion of the elements so that only the enabled elements are written to memory. Such a method may be employed to write multi-dimensional data to memory and/or may be used with a streaming address generator.
Description
6 parts›BACKGROUND
Modern digital signal processors (DSP) face multiple challenges. Workloads continue to increase, requiring increasing bandwidth. Systems on a chip (SOC) continue to grow in size and complexity. Memory system latency severely impacts certain classes of algorithms. As transistors get smaller, memories and registers become less reliable. As software stacks get larger, the number of potential interactions and errors becomes larger. Even conductive traces on circuit boards and conductive pathways on semiconductor dies become an increasing challenge. Wide busses are difficult to route. Signal propagation speeds through conductors continue to lag transistor speeds. Routing congestion is a continual challenge.
In many DSP algorithms, such as sorting, fast Fourier transform (FFT), video compression and computer vision, data are processed in terms of blocks. Therefore, the ability to generate both read and write access patterns in multi-dimensions is helpful to accelerate these algorithms.
›SUMMARY
An example method for writing data to memory described herein comprises fetching a block of data comprising a plurality of elements and calculating a predicate to disable at least one of the elements to create a disabled portion of the block of data and to enable remainder of the elements to create an enabled portion. The method further comprises writing only the enabled portion of the block of data to memory.
An exemplary digital signal processor described herein comprises a CPU and a streaming address generator. The CPU is configured to fetch a block of data comprising a plurality of memory elements. The streaming address generator is configured to calculate a predicate to disable at least one of the elements to create a disabled portion of the block of data and to enable remainder of the elements to create an enabled portion. The CPU is configured to write only the enabled portion of the block of data to memory.
An exemplary digital signal processor system described herein comprises a memory and a digital signal processor. The digital signal processor comprises a CPU and a streaming address generator. The CPU is configured to fetch a block of data comprising a plurality of memory elements. The streaming address generator is configured to calculate a predicate to disable at least one of the elements to create a disabled portion of the block of data and to enable remainder of the elements to create an enabled portion. The CPU is configured to write only the enabled portion of the block of data to memory.
›BRIEF DESCRIPTION OF THE DRAWINGS
For a detailed description of various examples, reference will now be made to the accompanying drawings in which:
FIG. 1 illustrates a DSP according to examples described herein;
FIG. 2 illustrates streaming address generators according to examples described herein;
FIG. 3 illustrates an exemplary predicate streaming address register;
FIG. 4 illustrates an exemplary streaming address configuration register;
FIG. 5 illustrates exemplary sub-field definitions of the flags field of the streaming address configuration register of FIG. 4 ;
FIG. 6 illustrates an exemplary streaming address count register;
FIG. 7 illustrates exemplary logic used by the streaming address generator;
FIG. 8 illustrates an exemplary 6-dimensional memory pattern; and
FIGS. 9A and 9B illustrate a hardware diagram of an exemplary implementation of the predication generation functionality of the streaming address generator.
›DETAILED DESCRIPTION · 1 of 3
Examples provided herein show implementations of vector predication, which provides a mechanism for ignoring portions of a vector in certain operations, such as vector predicated stores. Such a feature is particularly, though not exclusively, useful in the multidimensional addressing discussed in a U.S. Patent Application entitled, “Streaming Address Generation” (hereinafter “the Streaming Address Generation application”), filed concurrently herewith, and incorporated by reference herein.
FIG. 1 illustrates a block diagram of at least a portion of DSP 100 having vector CPU 110 . As shown in FIG. 1 , vector CPU 110 includes instruction fetch unit 141 , instruction dispatch unit 142 , instruction decode unit 143 , and control registers 144 . Vector CPU 110 further includes 64-bit register files 150 and 64-bit functional units 151 for receiving and processing 64-bit scalar data from level one data cache (L1D) 112 . Vector CPU 110 also includes 512-bit register files 160 and 512-bit functional units 161 for receiving and processing 512-bit vector data from level one data cache (L1D) 112 and/or from streaming engine 113 . DSP 100 also includes level two combined instruction/data cache (L2) 114 , which sends and receives data from level one data cache (L1D) 112 and sends data to streaming engine 113 . Vector CPU 110 may also include debug unit 171 and interrupt logic unit 172 .
DSP 100 also includes streaming engine 113 . As described in U.S. Pat. No. 9,606,803 (hereinafter “the '803 patent”), incorporated by reference herein in its entirety, a streaming engine such as streaming engine 113 may increase the available bandwidth to the CPU, reduces the number of cache misses, reduces scalar operations and allows for multi-dimensional memory access. DSP 100 also includes, in the vector CPU 110 , streaming address generators SAG 0 180 , SAG 1 181 , SAG 2 182 , SAG 3 183 . As described in more detail in the Streaming Address Generation application, the streaming address generators SAG 0 180 , SAG 1 181 , SAG 2 182 , SAG 3 183 generate offsets for addressing streaming data, and particularly for multi-dimensional streaming data. While FIG. 1 shows four streaming address generators, as described in the concurrently filed application, there may one, two, three or four streaming address generators and, in other examples, more than four. Streaming address generators SAG 0 180 , SAG 1 181 , SAG 2 182 , SAG 3 183 also handle predication.
FIG. 2 shows the streaming address generators SAG 0 180 , SAG 1 181 , SAG 2 182 , SAG 3 183 , in more detail. Each streaming address generator SAG 0 180 , SAG 1 181 , SAG 2 182 , SAG 3 183 includes respective logic 130 , 131 , 132 , 133 for performing the offset generation and predication. Logic 130 , 131 , 132 , 133 implements the logic for generating offsets and predicates using hardware. Offsets generated by streaming address generators 180 , 181 , 182 , 183 are stored in streaming address offset registers SA 0 190 , SA 1 191 , SA 2 192 and SA 3 193 , respectively.
Each streaming address generator SAG 0 180 , SAG 1 181 , SAG 2 182 , SAG 3 183 also includes predicate streaming address registers PSA 0 120 , PSA 1 121 , PSA 2 122 , PSA 3 123 . FIG. 3 illustrates an exemplary predicate streaming address register. Predicate streaming address registers PSA 0 120 , PSA 1 121 , PSA 2 122 , PSA 3 123 store predicate information generated during the offset generation described in the Streaming Address Generation application. When a streaming store instruction is executed, the vector predicate value from the corresponding predicate streaming address register may be read and is converted to byte enables. Bytes that are not enabled are not written, while the other bytes are written to memory (e.g., L1D 112 or L2 114 ). The predicate may be converted into byte enables by shifting the bits left.
The streaming address predicates may be generated every time a new stream is opened (SAOPEN), which described in more detail in the Streaming Address Generator application, or when a streaming load or store instruction with advancement (SA 0 ++/SA 1 ++/SA 2 ++/SA 3 ++) is executed, which described in more detail in the Streaming Address Generator and a U.S. Patent Application entitled, “System and Method for Addressing Data in Memory,” filed concurrently herewith, and incorporated by reference herein.
Each streaming address generator SAG 0 180 , SAG 1 181 , SAG 2 182 , SAG 3 183 also includes a respective streaming address control register STRACR 0 184 , STRACR 1 185 , STRACR 2 186 , STRACR 3 187 and a respective streaming address count register STRACNTR 0 194 , STRACNTR 1 195 , STRACNTR 2 196 , STRACNTR 3 197 . As explained in more detail below, the streaming address control registers STRACR 0 184 , STRACR 1 185 , STRACR 2 186 , STRACR 3 187 contain configuration information for the respective streaming address generator for offset generation and predication, and the streaming address count registers STRACNTR 0 194 , STRACNTR 1 195 , STRACNTR 2 196 , STRACNTR 3 197 store runtime information used by the respective streaming address generator.
FIG. 4 illustrates an exemplary streaming address configuration register. Table 2 shows an example of the field definitions of the streaming address configuration register.
The iteration count ICNT 0 , ICNT 1 , ICNT 2 , ICNT 3 , ICNT 4 , ICNT 5 for a loop level indicates the total number of iterations in a level. Though, as described below, the number of iterations of loop 0 does not depend only on the value of ICNT 0 . The dimension DIM 0 , DIM 1 , DIM 2 , DIM 3 , DIM 4 , DIM 5 , indicates the distance between pointer positions for consecutive iterations of the respective loop level. DECDIM 1 _WIDTH and DECDIM 2 _WIDTH define, in conjunction with other parameters in the FLAGS field, any vertical strip mining—i.e., any portions of the memory pattern that will not be written.
FIG. 5 illustrates exemplary sub-field definitions of the flags field of a streaming address configuration register. VECLEN specifies the number of elements per fetch. DEC_DIM 1 and DEC_DIM 2 define the dimension or loop (as described below) to which the vertical strip mining of DECDIM 1 _WIDTH and DECDIM 2 _WIDTH, respectively, apply. DEC_DIM 1 SD and DEC_DIM 2 SD, like DEC_DIM 1 and DEC_DIM 2 , define an additional dimension or loop to which each of DECDIM 1 _WIDTH and DECDIM 2 _WIDTH may apply, thereby allowing for the definition of multidimensional-dimensional data exclusion. DIMFMT defines the number of dimensions in the stream.
›DETAILED DESCRIPTION · 2 of 3
The streaming address count registers STRACNTR 0 194 , STRACNTR 1 195 , STRACNTR 2 196 , STRACNTR 3 197 contain the intermediate element counts of all loop levels. FIG. 6 illustrates an exemplary streaming address count register. CNT 5 , CNT 4 , CNT 3 , CNT 2 , CNT 1 and CNT 0 represent the intermediate element counts for each respective loop level. When the element count CNTX of loop X becomes zero, assuming that the loop counts are decremented and not incremented, the address of the element of the next loop is computed using the next loop dimension. The streaming address count registers STRACNTR 0 194 , STRACNTR 1 195 , STRACNTR 2 196 , STRACNTR 3 197 also contain intermediate counts for the DEC_DIM calculations described below.
The streaming address generators SAG 0 380 , SAG 1 381 , SAG 2 382 , SAG 3 383 use multi-level nested loops implemented in logic 130 , 131 , 132 , 133 , to iteratively generate offsets for multi-dimensional data and to generate predicate information using a small number of parameters defined, primarily in the streaming address control registers 184 , 185 , 186 , 187 .
FIG. 7 shows exemplary logic used by the streaming address generator for calculating the offsets for a 6-level forward loop. The logic of FIG. 7 is implemented in hardware in the logic 130 , 131 , 132 , 133 of the respective streaming address generator.
In the example logic in FIG. 7 , the innermost loop 40 (referred to as loop 0 ) computes the offsets of physically contiguous elements from memory. Because the elements are contiguous and have no space between them, the dimension of loop 0 is always 1 element, so there may be no dimension (DIM) parameter defined for loop 0 . The pointer itself moves from element to element in consecutive, increasing order. In each level outside the inner loop ( 41 , 42 , 43 , 44 , 45 ), the loop moves the pointer to a new location based on the size of that loop level's dimension (DIM). The inner most loop 40 also includes exemplary predication logic 46 .
There are generally two different types of predication. The first type of predication is implicit in streaming store instructions. In the inner most loop 40 , the streaming address generator will disable any bytes greater than CNT 0 (which is represented as i 0 in FIG. 7 ) if CNT 0 ≤VECLEN. Said another way, if a streaming store has fewer elements than the current iteration count of the inner most loop (CNT 0 ), the upper predicate bits may be ignored. If a streaming store has more elements than CNT 0 , the upper predicate bits are implicit 0 . A predicate may also be applied when CNT 0 is saturated at zero or when CNT 0 is reloaded from the template ICNT 0 when the count of the dimension specified by DEC_DIM or higher is reloaded.
The CPU may be configured to look at the predicate streaming address register PSA 0 120 , PSA 1 121 , PSA 2 122 , PSA 3 123 when executing any streaming store instruction. Alternatively, the appropriate predicate streaming address register PSA 0 120 , PSA 1 121 , PSA 2 122 , PSA 3 123 may be one of the operands for the streaming store instruction. The streaming store instruction may look only at the LSBs of the corresponding predicate streaming address register PSA 0 120 , PSA 1 121 , PSA 2 122 , PSA 3 123 . The streaming store instruction may translate the value of the predicate streaming address register PSA 0 120 , PSA 1 121 , PSA 2 122 , PSA 3 123 to byte enables as necessary according to the element type specified by the store instruction. One example of such translation is the bit shifting performed in the inner loop 40 of FIG. 7 . For streaming store instructions, the byte enables are packed in the same way as the store data.
The second type of predication may be referred to as strip mining, and allows the user to disable writing of data in one or more dimensions by using the DEC_DIM parameters discussed above. Strip mining is discussed in the following applications filed on May 23, 2019, each of which is incorporated by reference herein in its entirety: application Ser. No. 16/420,480, entitled “Inserting Predefined Pad Values into a Stream of Vectors,” application Ser. No. 16/420,467, entitled “Inserting Null Vectors into a Stream of Vectors,” application Ser. No. 16/420,457, entitled “Two-Dimensional Zero Padding in a Stream of Matrix Elements,” and application Ser. No. 16/420,447, entitled “One-Dimensional Zero Padding in a Stream of Matrix Elements.”
FIG. 8 shows an example memory pattern that includes strip mining. The following parameter values are used for the memory pattern shown in FIG. 8 :
VECLEN=16-elems
DIMFMT=6
ICNT 0 =16
ICNT 1 =7
ICNT 2 =4
ICNT 3 =2
ICNT 4 =1
ICNT 5 =1
DIM 1 =128
DIM 2 =80
DIM 3 =1500
DIM 4 =0
DIM 5 =0
DEC_DIM 1 =001
DECDIM 1 _WIDTH=640
DEC_DIM 2 =010
DECDIM 2 _WIDTH=248
As shown in FIG. 8 , because DEC_DIM 1 is 1, all bytes after the DECDIM 1 _WIDTH of 640 in loop 1 are disabled because the DECDIM 1 _WIDTH is saturated. Similarly, because DEC_DIM 2 is 2 (binary 010), all bytes after the DECDIM 2 _WIDTH of 248 in loop 2 are disabled because the DECDIM 2 _WIDTH is saturated. To determine saturation, for each iteration of the respective loop, the respective DECDIM_WIDTH value is decremented by the respective DIM value. When that counter reaches 0, no additional bytes are written in the respective dimension. In the example in FIG. 8 , DIM 2 =80, and ICNT 2 =4. The first 3 iterations of loop 2 were written without predication, but reduced the DECDIM 2 _WIDTH count to 8 (after having DIM 2 =80 decremented three times). As such, the only 8 elements (in this case bytes) were written in the fourth loop, leaving the remaining bytes as masked data 81 . The masked data 80 is masked by both DEC_DIM 1 and DEC_DIM 2 as it is the intersection of the masked data for both of those dimensions.
FIGS. 9A and 9B show an exemplary hardware diagram for the portion of the respective streaming address generator 180 , 181 , 182 , 183 used for predication generation. In block 90 , the streaming address generator decrements DECDIM 1 _WIDTH by DIM 1 . In block 91 , the streaming address generator determines how many elements remain for writing in DEC_DIM 1 after decrementing DECDIM 1 _WIDTH. Block 96 controls the looping and iterations. Block 92 receives all predication generated by DECDIM 1 , DEC_DIM 2 , DEC_DIM 1 SD, DEC_DIM 2 SD. Block 92 also receives at 93 any predication required based on the implicit predication described above. Based on these inputs, block 92 determines an aggregate masking of bytes. In block 94 , the masking is generated and output at 95 .
›DETAILED DESCRIPTION · 3 of 3
Predicates may fill the least significant bits (LSBs) of the associated predicate registers. The predicate is “element wise” for the next VECLEN elements (where VECLEN is power of 2 from 1 to 64).
Vector predication may be used with vector predicated store instructions, which optionally include the appropriate predicate streaming address register PSA 0 , PSA 1 , PSA 2 , PSA 3 , as an operand. Vector predication may also be used with regular vector store instructions, which may access predicate information from a different predicate register, for example, a predicate register in the .P functional unit of functional units 161 of FIG. 1 . In this case, the value of the appropriate predicate streaming address register PSA 0 , PSA 1 , PSA 2 , PSA 3 may be first moved to the predicate register in the .P functional unit of functional units 161 .
The predicate streaming address registers PSA 0 120 , PSA 1 121 , PSA 2 122 , PSA 3 123 may also store comparisons between vectors or can determine from which of two vectors a particular byte should be written. Predicate streaming address register PSA 0 120 , PSA 1 121 , PSA 2 122 , PSA 3 123 may be applied for scalar or vector streaming store instructions. Scalar predication may also be used with streaming load and store instructions. For example, the offset may only increment when the scalar predication is true.
Modifications are possible in the described embodiments, and other embodiments are possible, within the scope of the claims.
›Tables in the description — 1
| Field | Size | |
|---|---|---|
| Name | Description | Bits |
| ICNT0 | Number of iterations for the innermost loop | 32 |
| level 0. At loop level 0, all elements are | ||
| physically contiguous. DIM0 = 1. | ||
| In Data Strip Mining Mode, ICNT0 is used as | ||
| the initial total “actual width” of the frame. | ||
| ICNT1 | Total loop iteration count for level 1 | 32 |
| ICNT2 | Total loop iteration count for level 2 | 32 |
| ICNT3 | Total loop iteration count for level 3 | 32 |
| ICNT4 | Total loop iteration count for level 4 | 32 |
| ICNT5 | Total loop iteration count for level 5 | 32 |
| DECDIM1_WIDTH | Tile width of DEC_DIM1. Use together with | 32 |
| DEC_DIM1 flags to specify vertical strip | ||
| mining feature | ||
| DECDIM2_WIDTH | Tile width of DEC_DIM2. Use together with | 32 |
| DEC_DIM2 flags to specify vertical strip | ||
| mining feature | ||
| DIM1 | Number of elements between consecutive | 32 |
| iterations of loop level 1 | ||
| DIM2 | Number of elements between consecutive | 32 |
| iterations of loop level 2 | ||
| DIM3 | Number of elements between consecutive | 32 |
| iterations of loop level 3 | ||
| DIM4 | Number of elements between consecutive | 32 |
| iterations of loop level 4 | ||
| DIM5 | Number of elements between consecutive | 32 |
| iterations of loop level 5 | ||
| FLAGS | Stream modifier flags | 64 |
Claims as granted
20 claimsLog in to read the claims of this application.
Log in to unlockClassifications
2 codes- G06F9/30
- G06F3/06
Claim changes
SoonSee which claims were amended, added or cancelled during examination, with every added and removed word marked.
The published claims of this application are not paired with the granted ones in what we hold.
File wrapper
See the full prosecution history — every USPTO and applicant action on this file, in order.
Log in to unlockDocuments
Log in to open the documents of this file: the application as filed, every office action and response, the notice of allowance.
Log in to unlockChain of title
See the full assignment history — every owner this patent has passed through, with recordation dates and reel/frame numbers.
Log in to unlock