Data processing device and method of computing the cosine transform of a matrix
Claim Score by NHIP
Abstract
A data processing device provides for registers which can be formatted as segments containing numbers to which operations can be applied in SIMD fashion. In addition it is possible to perform operations which combine different segments of one register or segments at different positions in the different registers. By providing specially selected it is thus made possible to perform multidimensional separable transformations (like the 2-dimensional IDCT) without transposing the numbers in the registers.

Term
Term ended
Expired 16 March 2019, 7.5 years ago.
- Priority
- Filed
- Granted
- Expired
- Today
10 claims: 3 independent, 7 dependent
- 1Broadest claimClaim Score 61, broad(NHIP)A data processing device comprising an operand storage circuit for storing operands, each subdivided into a plurality of segments at respective positions in the operand;an instruction execution unit for executing an instruction containing one or more operand references, each referring commonly to the segments of a respective source operand in the operand storage circuit, said instruction causing the instruction execution unit to execute a plurality of operations in parallel and independently of one another, each operation combining predetermined segments from one or more of the respective source operands, characterized in that at least one of the operations combines segments that have mutually different positions in the one or more respective source operands and/or that at least one of the operations differs from the other operations.
- 8A method of transforming a matrix having at least rows and columns using a processor having segmented operand storage circuits, the method comprising:computing a composition of a column transformation and a row transformation, the column transformation transforming columns each according to a one dimensional column transformation, the column transformation being executed using at least one SIMD instruction which causes the processor to process different columns in parallel, using information items for the different columns stored in respective segments of an operand storage circuit referred to in the SIMD instruction;the row transformation transforming rows each according to a one dimensional row transformation, the row transformation being executed using at least one cross instruction which causes the processor to perform several operations upon information items for the same row in parallel, the information items for the same row being stored in respective segments of an operand storage circuit referred to in the cross instruction, wherein the row and column transformation correspond to the same one-dimensional transformation.
- 10A data processing device comprising:an operand storage circuit for storing operands, each operand subdivided into a plurality of segments at respective positions in the operand wherein each operand is subdivided into the same plurality of segments at the same respective positions;and an instruction execution unit including an instruction decoder and arithmetic circuits wired to execute an instruction containing an opcode and one or more operand references, each operand reference of the instruction referring commonly to the segments of a respective source operand in the operand storage circuit, said instruction causing the instruction decoder to decode the instruction and set the instruction execution unit to execute a plurality of operations consisting only of addition and subtraction operations in parallel and independently of one another to generate a result that is written to a result register subdivided into the same plurality of segments at the same respective positions as the operands, each operation of the plurality of operations combining, by specific wiring of the arithmetic circuits of the instruction execution unit, predetermined segments from one or more of the respective source operands and writing a result of the combining to a segment of the result register, wherein each of the operations of the plurality of operations caused to execute by the instruction combines segments that have mutually different positions in the one or more respective source operands and at least one of the operations caused to execute by the instruction differs from the other operations caused to execute by the instruction.
Independent claims3
65 paragraphs, as filed
0001This application claims the benefit or priority of and describes the relationships between the following applications: wherein this application is a reissue of U.S. Pat. No. 6,397,235, issued May 28, 2002, from U.S. patent application Ser. No. 09/270,438, filed Mar. 16, 1999, which claims priority of foreign application EP 98200867 filed Mar. 18, 1998, all of which are incorporated herein in whole by reference.
0002The invention relates to a data processing device.
0003Such a data processing device is known from PCT patent application No. 97/31308. This data processing device allows for parallel processing under control of parallel instructions like SIMD instructions (Single Instruction Multiple Data). A SIMD instruction applies the same operation a number of times in parallel. The SIMD instruction typically defines two operands, normally in terms of register addresses. The content of each of these operands is treated as a plurality of segments of packed data. For example, the content of a 64-bit register may be treated as four 16 bits numbers, located at bit positions <b>0</b>-<b>15</b>, <b>16</b>-<b>31</b>, <b>32</b>-<b>47</b>, <b>48</b>-<b>63</b> in the register respectively. When the data processing device encounters the SIMD instruction, the same operation is applied to several different pairs of numbers from the operands in parallel. For example, the content of bit positions <b>0</b>-<b>15</b> in a first operand register is added to the content of bit positions <b>0</b>-<b>15</b> in a second operand register, the content of bit positions <b>16</b>-<b>31</b> in a first operand register is added to the content of bit positions <b>16</b>-<b>31</b> in a second operand register and so on.
0004The SIMD instructions can be used to reduce the number of instructions that needs to be executed to perform a given function. For example, consider the function of performing a discrete cosine transform (IDCT) of individual columns of a block of pixel values. The pixel values of different rows of the blocks are stored in different operands. In each operand, the pixel value is stored in a segment at a position determined by its column. Thus, a first register might contain a pixel value from a first row, first column at bit positions <b>0</b>-<b>15</b>, and a pixel value from the first row, second column at bit positions <b>16</b>-<b>32</b> and so on. A second register might contain pixel values from a second row, pixel values from different rows being stored in the same way according their column. As a result execution of a series of instructions that code for the operations for applying the IDCT to one column automatically performs the IDCT for a number of columns in parallel if the arithmetic operations are all performed using SIMD instructions. This reduces the number of instructions that needs to be executed.
0005In case of a separable two-dimensional IDCT the one dimensional IDCT needs to be applied to individual columns and to individual rows of the block. In this case a similar reduction in the number of instructions can be obtained when the roles of rows and columns are interchanged between the transformation of the columns and the transformation of the rows. The roles of rows and columns can be interchanged by means of transposition of the block. Transposition brings different pixel values of a column into the same register instead of different pixel values from the same row. Transposition involves moving the content of corresponding positions (corresponding to the same column) from different registers to different positions in another register. Unfortunately, transposition itself requires execution of a considerable number of additional instructions. As a result the two dimensional transform requires more than twice the number of instructions needed for the one dimensional transform.
0006This limitation on the advantage of SIMD occurs more generally if functions have to be programmed that require the combination of data from noncorresponding positions in the packed data. In this case one cannot use SIMD parallelism to treat content of operands as a packed format containing independent numbers, or at least additional operations are needed to reshuffle the data before SIMD operations can be used.
0007It is an object of the invention to provide for a processing device as set forth in the preamble which makes it possible to reduce the number of instructions that needed to be executed even further.
0008Thus it is possible to program parallel operations that make mutually different combinations of segments of the operands, combining segments at positions in the operands that are not equal to each other or using mutually different operations. This in contrast to the prior art SIMD instructions which apply the same operation to each time to a pair of segments located at identical positions. For example, an instruction according to the invention might cause the number stored at bit positions <b>0</b>-<b>15</b> of an operand register to added to the number stored at bit positions stored at bit positions <b>16</b>-<b>31</b> in parallel with adding of the numbers stored at bit positions <b>32</b>-<b>47</b> and the number stored at bit positions <b>48</b>-<b>63</b>.
0009One may provide instructions both for operations that combine segments located in the same operand register and for operations that combine segments located in different operand registers. Any one or more segments may be used in more than one operation. The operations executed in parallel may all be the same type of operation, say all additions, or they may be mutually different operations, say additions and subtractions.
0010Usually, only a very limited set of application specific instructions for combining segments will be provided in addition to SIMD instructions. For example, when an instruction is available which provides for an operation like addition between certain segments at different positions, it is not necessary to provide a set of instructions which program for that operation between all possible pairs of segments. Similarly, if an instruction is available which combines certain pairs of segments each with its own operation (at least one of the operations being different from the others) then is not necessary to provide an instruction set for all possible combinations of operation applied to those segments. For any given application one needs to provide only a small fraction of all possible operations or combinations of operations and/or a small fraction of all possible combined segments.
0011For a separable two-dimensional transformation on a block the invention makes it possible to reduce the number of required instructions without transposing the block. Each register may still contain different pixel values from one row, with different register storing pixel values from the same column in the same segment. Then the transformation of the columns will still be performed using SIMD instructions, but the transformation of the rows is performed by means of parallel operations that combine pixel values from the same row, located in different segments.
0012For example, one might provide an IDCT instruction which computes the IDCT of an entire row from pixel values of that row stored in the different segments of the operand registers referred to in the IDCT instruction. Also one might provide operations which compute the sum and difference of the contents of pairs of different segments in a register. This is a type of operation that is typically required in an IDCT transforms and similar transforms.
0013These and other advantageous aspects of the invention will be described in a non-limitative way using the following figures.
0014<figref idref="DRAWINGS">FIG. 1</figref> shows a data processing device.
0015<figref idref="DRAWINGS">FIG. 2</figref> shows an example of a data-flow diagram for an implementation of an 8 point one dimensional IDCT.
0016<figref idref="DRAWINGS">FIG. 3</figref> shows a data flow diagram of instructions according to the invention.
0017<figref idref="DRAWINGS">FIGS. 4a</figref>,b show a functional units for executing an instruction according to the invention.
0018<figref idref="DRAWINGS">FIG. 1</figref> shows a VLIW type (Very Long Instruction Word) data processing device. Although the invention is illustrated using a VLIW type device, it is not limited to such a device. The device contains an instruction issue unit <b>10</b>, a number of functional units <b>12</b>a-c and a register file <b>14</b>. The instruction issue unit <b>10</b> has an instruction output coupled to the functional units <b>12</b>a-c and the register file <b>14</b>. The register file <b>14</b> has read/write ports coupled to operand inputs/outputs of the functional units <b>12</b>a-c.
0019One functional unit <b>12</b>a is shown in more detail. This functional unit <b>12</b>a contains an instruction decoder <b>120</b>, a number of ALU's (Arithmetic/Logic units) <b>122</b>a-d, a first and second input register <b>124</b>a,b and an output register <b>126</b>. The instruction decoder is connected to the ALU's <b>122</b>a-d. The input registers <b>124</b>a,b are divided into a number of segments. The segments of the first and second input registers <b>124</b>a,b are connected to the ALU's <b>122</b>a-d.
0020In operation, the instruction issue unit <b>10</b> accesses the successive instructions of a program and issues these instructions to the functional units <b>12</b>a-c. An instruction issued to a functional unit <b>12</b>a-c typically contains an opcode, two source register addresses and a result register address (these elements of the instruction are not necessarily issued simultaneously). The opcode defines the operation or operations that the functional unit <b>12</b>a-c must perform. The source register addresses refer to registers in the register file <b>14</b> where the operands are stored upon which this operation or operations must be performed. The instruction issue unit <b>10</b> applies these addresses to the register file <b>14</b>. The result register address refers to the register in the register file <b>14</b> where the result of the operation or operations must be stored. The instruction issue unit <b>10</b> applies the result register address to the register file <b>14</b>.
0021Most functional units <b>12</b>a-c treat the content of each register as one number. E.g. if the register is made up of 64 bits, its content is treated as a 64 bit number that can be added to other 64 bit numbers, arithmetically or logically shifted etc. However, at least some of the functional units <b>12</b>a-c are capable (or also capable) of treating the content of the registers as a set of numbers, stored in respective segments of the register. Special operations can be performed in parallel on these numbers, independently of one another: in such special operations carry-bits don't carry from one segment to the other and shifts don't shift bits from one segment to the other, any clipping is performed for each segment independently etc.
0022Functional unit <b>12</b>a is a functional unit that treats the content of each register as a plurality of segments, each segment containing a separate number. For this purpose, all registers are notionally divided into segments in the same way. When an instruction is executed, the content of respective segments of the particular source registers referred to in the instruction are applied to respective ones of the ALU's <b>122</b>a-d.
0023In case of a SIMD instruction the position of the segments at the same position in the two source operand are supplied to the same ALU <b>122</b>a-d. For example, if the operand has 64 bits bit positions <b>0</b>-<b>15</b>, <b>16</b>-<b>31</b>, <b>32</b>-<b>47</b>, <b>48</b>-<b>63</b> may constitute four segments S<b>0</b>, S<b>1</b>, S<b>2</b>, S<b>3</b> respectively. The content of bit positions <b>0</b>-<b>15</b> of both operands is supplied to a first one of the ALU's <b>122</b>a, the content of bit positions <b>16</b>-<b>31</b> of both operands is supplied to a second one of the ALU's <b>122</b>b and so on. Again in case of the SIMD instruction, the instruction decoder <b>120</b> applies the same control code to all of the ALU's <b>122</b>a-d. The ALU's <b>122</b>a-d therefore all perform the same type of operation (e.g. addition), but on different segments.
0024SIMD instructions may be applied for example to compute a one dimensional transform of a number of columns of a block B of numbers B<sub>i,j </sub>(i=0.n, j=0.m), e.g. an 8×8 block (n=<b>7</b>, m=<b>7</b>). To do so, numbers from the same rows of the block are loaded into different segments of a register. For example, numbers B<sub>0,0</sub>, B<sub>0,1</sub>, B<sub>0,2</sub>, B<sub>0,3 </sub>are loaded into segments S<b>0</b>, S<b>1</b>, S<b>2</b>, S<b>3</b> of a first register R<b>1</b> respectively, B<sub>0,4</sub>, B<sub>0,5</sub>, B<sub>0,6</sub>, B<sub>0,7 </sub>are loaded into segments S<b>0</b>, S<b>1</b>, S<b>2</b>, S<b>3</b> of a second register R<b>2</b> respectively, B<sub>1,0</sub>, B<sub>1,1</sub>, B<sub>1,2</sub>, B<sub>1,3</sub>, are loaded into segments S<b>0</b>, S<b>1</b>, S<b>2</b>, S<b>3</b> of a third register R<b>3</b> respectively, B<sub>1,4</sub>, B<sub>1,5</sub>, B<sub>1,6</sub>, B<sub>1,7 </sub>are loaded into segments S<b>0</b>, S<b>1</b>, S<b>2</b>, S<b>3</b> of a fourth register R<b>4</b> respectively and so on.
0025Now assume that a program is available to perform the transformation on one column, the program being expressed in instructions which include arithmetic instructions like add, subtract, multiply etc. applied to registers which contain the numbers for one column B<sub>i,j </sub>i=0.n. If SIMD instructions are used for all these arithmetic instructions then this program will automatically compute the transform in parallel for a number of columns j=0.3. Thus, in case of a block with N-columns and P numbers in respective segments of each register, the program would need to be executed only N/P times to transform the N columns.
0026In case of a separable two-dimensional transformation, all of the columns may be transformed in this way. Subsequently the rows of the resulting transformed block must all be transformed. An example of such a two dimensional transformation is the two dimensional IDCT. In this case the transformed block A<sub>i,j </sub>is expressed by <br />Ai,j=2/N Σ<sub>u </sub>Σ<sub>v </sub>C<sub>u </sub>C<sub>v </sub>B<sub>u,v </sub>cos ((2i+1)u π/2N) cos ((2j+1)vπ/2N)<br /> where Cu=1/sqrt(2) if u=0 and C<sub>u</sub>=1 otherwise and the sums run over the integers from 0 to N−1. This two-dimensional transformation can be computed by first obtaining an intermediate block INT<sub>i,v </sub>by a one-dimensional transformation according to <br />INT<sub>i,v</sub>=Σ<sub>u </sub>C<sub>u </sub>B<sub>u,v </sub>cos ((2i+1)uπ/2N)<br /> and subsequently applying a one-dimensional transform to the intermediate block <br />A<sub>i,j</sub>=2/N Σ<sub>v </sub>C<sub>v </sub>INT<sub>i,v </sub>cos ((2j+1)vπ/2N)<br /> Thus, the two-dimensional transformation is computed as a composition of two one dimensional transformations, one transforming B into INT and the other transforming INT into A (“composition” of two transformations means that one transformation is applied to the result of applying the other transformation). In the example of the IDCT it does not matter which one-dimensional transformation is applied first: in the example one sums first along the first index u of the block B<sub>u,v </sub>and subsequently along the second index v, but that order may be inverted without affecting the end result.
0027Such a two stage two-dimensional transformation can be speeded up using SIMD instructions. When the numbers B<sub>u,v </sub>of the intermediate block B are stored as described in the preceding. i.e. with several numbers B<sub>u,v </sub>v=0, 1, 2, 3 of a row in respective segments of a register, the computation of the intermediate block INT<sub>i,v </sub>can be performed by transforming a number of columns (all numbers having v=0 in the first column, v=1 in the second column and so on) in parallel.
0028Similar parallel processing using SIMD instructions is possible if the numbers from the intermediate block INT are stored in the registers so that several number of a column are stored in one register, e.g. if the segments of a first register store INT<sub>i,v </sub>i=0.3, v=0, respectively, the segments of a second register store INT<sub>i,v </sub>i=4.7, v=0, the register of a third register INT<sub>i,v </sub>i=0.3, v=1 and so on. In this case a number of rows of the intermediate block INT can be transformed in parallel using SIMD instructions.
0029However, after the computation of the intermediate block INT from the block B, the numbers will not be stored in the register in this way, with several numbers INT<sub>i,v </sub>i=0.3, v=0 from one column in a register, but instead several numbers INT<sub>i,v </sub>i=0, v=0.3 from each row will be stored in each register. This is because the computation of the intermediate block requires separate one dimensional transformation of respective columns, whereas the computation of the final block A requires separate one dimensional transformations of respective rows.
0030In order to be able to use SIMD instructions for both types of transformations the intermediate block needs to be transposed: the numbers have to be regrouped over the registers. This is a complicated operation: in the example of an 8×8 block with 4-segment registers one needs 16 registers and 32 operations with two-inputs for the transposition.
0031The invention aims at avoiding the transposition. For the transformation of the rows the arrangement of the numbers of the intermediate block wherein registers contain different numbers from the same row is retained, and special instructions are used that combine these numbers from these registers in order to perform the one dimensional transformation in the row that is stored in these registers.
0032These instructions make it possible to perform a two-dimensional separable transformation without transposition. Without farther measures, the combination of such special instructions for one dimension and the SIMD type of operations for two or more further dimensions can be used to perform higher than 2 dimensional transformations as well.
0033In the most straightforward implementation at least one functional unit is provided that is capable of performing the entire IDCT of a row. In case of an 8-point IDCT using registers that each contain four respective numbers from a column, such an instruction would need two operand registers and two result registers.
0034<figref idref="DRAWINGS">FIG. 2</figref> shows an example of a data-flow diagram for an implementation of an 8 point one dimensional IDCT. The data-flow diagram is based on expressions described in an article published by C.Loeffler, A.Ligtenberg and G. Moschytz, titled “Practical Fast 1-D DCT Algorithms with 11 multiplications”, published in Proceedings International Conference on Acoustics, Speech and Signal Processing 1989 (IC-IASSP '89) pages 988-991. At the left, nodes <b>30</b>a-h symbolize the numbers by means of the value of the index v at positions v=0.7 in the row that has to be transformed. At the right nodes <b>32</b>a-h symbolize the transformed numbers by means of the value of the index j at positions j =0.7 in the transformed row. The lines from the nodes <b>32</b>a-h symbolize data flow of the numbers to different operations and of data flow of the results from these operation to other operations or to the transformed numbers. The operations are symbolized as follows. A dot with two solid incoming lines symbolizes summation. A dot with one incoming solid line and one incoming dashed line symbolizes subtraction, the number flowing along the dashed line being subtracted from the number flowing along the solid line. A box with two inputs and two outputs symbolizes rotation and factorization, that is, the computation of (X<sub>1</sub>,Y<sub>1</sub>) from (X<sub>0</sub>,Y<sub>0</sub>) according to <br />X<sub>1</sub>=α(X<sub>0 </sub>cosφ−Y<sub>0</sub>sin φ)<br />Y<sub>1</sub>=α(X<sub>0 </sub>cosφ+Y<sub>0</sub>cos φ)
0035The value of the factor a and an identification of the angle φ are noted on the box; these are predetermined values: the blocks can be implemented using four multiplication's, an addition and a subtraction (alternatively three multiplication's and three additions can be used).
0036In one implementation at least one functional unit is provided which is capable of executing a row-IDCT instruction that causes that functional unit to IDCT-transform the contents of the segments of its operands. In the example of an 8-point IDCT with four segments in each a register, this would require two operands to transform a row. Such an instruction requires two result registers in which the numbers that represent the transformation are written in respective segments according to their frequency position in the transformation.
0037Execution of the IDCT by such a functional unit is much faster than execution by means of individual instructions at least because the combination of numbers stored in segments at different positions in the operands can be realized by wiring in the functional unit. This wiring is specific to the IDCT. In addition, the data-flow diagram of <figref idref="DRAWINGS">FIG. 3</figref> shows that a considerable amount of parallelism is possible in such a functional unit, so the speed of execution can be increased further by parallel execution of a number of operations.
0038Thus, the 2-dimensional IDCT transformation can be performed for the columns using arithmetic SIMD instructions to apply a one-dimensional IDCT-transformation to a number of columns in parallel and for the rows using a different, dedicated IDCT instruction to apply a functionally identical IDCT-transformation to a row.
0039Some processor architectures require that functional units use a standard instruction format, typically containing an opcode, two source register references and a result register reference. In this case each functional unit may have two ports connected to read ports of the register file and one port connected to a write port of a register file. In case of an IDCT instruction which transforms numbers stored in more than one register, more than one result register will be needed to write the transformed numbers. In architectures that allow only one result register this may be realized in various ways, for example by writing the results time-sequentially in logically adjacent result registers. Alternatively, one may use a combination of two instructions issued in parallel to the functional units. Such two instructions would normally be used for two different functional units in parallel. Instead, one uses the combination of the two instructions to program one functional unit that performs IDCT. By using this combination of two instructions, two separate result registers can be specified. In a processor that provides a write port to the register file for each of the instructions that is issued in parallel it is moreover ensured in this way that a write port to the register file is available for both results.
0040Alternatively, one might define two different types of instruction for the functional units, one for generating half the numbers in a register and another one for generating the other half of the numbers.
0041More generally, one may provide several dedicated instructions for respective parts of the computation of the IDCT, none of the instructions requiring more than a maximum number (e.g. one) of result registers. In order to select such instructions, one may split the IDCT data-flow diagram into sub-diagrams and assign a dedicated instruction to each sub-diagram. By selecting only sub-diagrams with a limited number of outputs it can be ensured that no more than one result register is required for any of the dedicated instructions.
0042<figref idref="DRAWINGS">FIG. 3</figref> shows an example of a split-up into sub-diagrams indicated by dashed boxes <b>39</b>a-g. Each of these boxes defines the data-flow of a number of a dedicated instructions which provide combinations of operations that are executed in parallel to help speed up the computation of transformation. The required number of segments in the results of each instruction is limited to four. These instructions are especially defined so that the locations of numbers in respective segments correspond to the location required for the SIMD transformation, that is, with the numbers indicated by v=0.3 at the left of <figref idref="DRAWINGS">FIG. 3</figref> in respective segments of a first register R<b>1</b> and the numbers indicated by u=4.7 in respective segments of a second register R<b>2</b>.
0043A first example of a first instruction INS<b>1</b> R<b>1</b>,R<b>2</b>,R<b>3</b> corresponding to a first dashed box <b>39</b>a refers to the two registers R<b>1</b>, R<b>2</b> as operands. This instruction causes a functional unit to perform the following operations in parallel: <ul id="ul0001" list-style="none"><li id="ul0001-0001" num="0000"><ul id="ul0002" list-style="none"><li id="ul0002-0001" num="0044">Sum the number (v=0) in a first segment of the first register R<b>1</b> to the number (v=4) in the first segment of the second register R<b>2</b>. The result is placed in a first segment of a result register R<b>3</b>.</li><li id="ul0002-0002" num="0045">Subtract the same numbers from one another and place the result in a second segment of the result register R<b>3</b>.</li><li id="ul0002-0003" num="0046">Use the numbers in a third segment (v=2) of the first register R<b>1</b> and the third segment of the second register R<b>2</b> as X<sub>0 </sub>and Y<sub>0 </sub>in a rotation with a factor sqrt(2) and a predetermined sine and cosine value. Place the resulting X<sub>1</sub>, Y<sub>1 </sub>are in the third and fourth segment of the result register. <br /><figref idref="DRAWINGS">FIG. 4b</figref> shows an example of a functional unit <b>40</b> for executing the INS<b>1</b> instruction. The functional unit <b>40</b> contains two input sections <b>42</b>, <b>46</b> for receiving the content of the first register R<b>1</b> and the second register R<b>2</b> respectively, an instruction decoder <b>48</b> for setting the functional unit into action, and arithmetic circuits <b>44</b>a-c for computing the sum of the first segment S<b>0</b> of R<b>1</b> and R<b>2</b>, the difference of the first segment of R<b>1</b> and R<b>2</b> and the rotation of the third segment S<b>2</b> of R<b>1</b> and R<b>2</b>. The results of these computations is combined into the segments S<b>0</b>-S<b>3</b> of an output section <b>49</b> for writing into the result register R<b>3</b>. </li></ul></li></ul>
0047A second example of a second instruction INS<b>2</b> R<b>3</b>,R<b>4</b> corresponding to a second dashed box <b>39</b>b refers to one register R<b>3</b> as operand. This instruction causes a functional unit to perform the following operations in parallel: <ul id="ul0003" list-style="none"><li id="ul0003-0001" num="0000"><ul id="ul0004" list-style="none"><li id="ul0004-0001" num="0048">Sum the numbers stored in the first and fourth segment of the operand register R<b>3</b> and place the result in a first segment of a result register R<b>4</b></li><li id="ul0004-0002" num="0049">Sum the numbers stored in the second and third segment of the operand register R<b>3</b> and place the result in a second segment of a result register R<b>4</b></li><li id="ul0004-0003" num="0050">Subtract the number in the third segment of the operand register R<b>3</b> from the number in the second segment of the operand register R<b>3</b> and place the result in the third segment of the result register R<b>4</b>.</li></ul></li></ul>
0051Subtract the number in the fourth segment of the operand register R<b>3</b> from the number in the first segment of the operand register R<b>3</b> and place the result in the fourth segment of the result register R<b>4</b>
0052<figref idref="DRAWINGS">FIG. 4a</figref> shows an example of a functional unit <b>20</b> for executing the INS<b>2</b> instruction. The functional unit <b>20</b> contains an input section, for receiving the content of the operand register R<b>3</b>, arithmetic units <b>24</b>a-b, <b>25</b>a-b for computing the sums and subtractions; an instruction decoder <b>28</b> for setting the functional unit <b>20</b> into action and an output section <b>26</b>. The results of the sums and subtractions is combined into the segments S<b>0</b>-S<b>3</b> of the output section <b>26</b> for writing into the result register R<b>4</b>.
0053A third example of a third instruction INS<b>3</b> R<b>4</b>,R<b>5</b>,R<b>6</b> corresponding to a third dashed box <b>39</b>c refers to two registers R<b>4</b>, R<b>5</b> as operands. This instruction causes a functional unit to perform the following operations in parallel: <ul id="ul0005" list-style="none"><li id="ul0005-0001" num="0000"><ul id="ul0006" list-style="none"><li id="ul0006-0001" num="0054">Sum the numbers stored in the first segment of the first operand register R<b>4</b> and the fourth segment of the operand register R<b>5</b> and place the result in the first segment of the result register R<b>6</b></li><li id="ul0006-0002" num="0055">Sum the numbers stored in the second segment of the first operand register R<b>4</b> and the third segment of the second operand register R<b>5</b> and place the result in the second segment of the result register R<b>6</b></li><li id="ul0006-0003" num="0056">Sum the numbers stored in the third segment of the first operand register R<b>4</b> and the second segment of the second operand register R<b>5</b> and place the result in the third segment of the result register R<b>6</b></li><li id="ul0006-0004" num="0057">Sum the numbers stored in the fourth segment of the first operand register R<b>4</b> and the first segment of the second operand register R<b>5</b> and place the result in the fourth segment of the result register R<b>6</b><br /> A fourth example of a fourth instruction INS<b>4</b> R<b>4</b>,R<b>5</b>,R<b>6</b> corresponding to a dashed box <b>39</b>h refers to two registers R<b>4</b>, R<b>5</b> as operands. This instruction causes a functional unit to perform the following operations in parallel: </li><li id="ul0006-0005" num="0058">Subtract from the number stored in the first segment of the first operand register R<b>4</b> the number stored in the fourth segment of the operand register R<b>5</b> and place the result in the fourth segment of the result register R<b>6</b></li><li id="ul0006-0006" num="0059">Subtract from the number stored in the second segment of the first operand register R<b>4</b> the number stored in the third segment of the second operand register R<b>5</b> and place the result in the third segment of the result register R<b>6</b></li><li id="ul0006-0007" num="0060">Subtract from the number stored in the third segment of the first operand register R<b>4</b> the number stored in the second segment of the second operand register R<b>5</b> and place the result in the second segment of the result register R<b>6</b></li><li id="ul0006-0008" num="0061">Subtract from the number stored in the fourth segment of the first operand register R<b>4</b> the number stored in the first segment of the second operand register R<b>5</b> and place the result in the fourth segment of the result register R<b>6</b><br /> A fifth example of a fifth instruction INS<b>5</b> R<b>1</b>,R<b>2</b>,R<b>7</b> corresponding to a fourth dashed box <b>39</b>d refers to two registers R<b>1</b>, R<b>2</b> as operands. This instruction causes a functional unit to perform the following operations in parallel: </li><li id="ul0006-0009" num="0062">Place the numbers from the fourth segment of the first source register R<b>1</b> and the second segment of the second source register R<b>2</b> into the second and third segment of the result register R<b>7</b> respectively.</li><li id="ul0006-0010" num="0063">Use the numbers in a third segment (v=2) of the second register R<b>2</b> and the second segment of the first register R<b>1</b> as X<sub>0 </sub>and Y<sub>0 </sub>in a rotation with a factor <b>2</b> and a predetermined sine and cosine value (corresponding to 45 degrees). Place the resulting X<sub>1</sub>, Y<sub>1 </sub>are in the third and fourth segment of the result register. (This rotation can be implemented using fewer multiplication's because the sine and cosine of 45 degrees are equal to each other). <br /> A sixth example of a sixth instruction INS<b>6</b> R<b>7</b>,R<b>8</b> corresponding to a sixth dashed box <b>39</b>e refers to one register R<b>7</b> as operand. This instruction causes a functional unit to perform the following operations in parallel: </li><li id="ul0006-0011" num="0064">Sum the numbers stored in the first and third segment of the operand register R<b>7</b> and place the result in a first segment of a result register R<b>8</b></li><li id="ul0006-0012" num="0065">Sum the numbers stored in the second and fourth segment of the operand register R<b>7</b> and place the result in a fourth segment of a result register R<b>8</b></li><li id="ul0006-0013" num="0066">Subtract the number in the third segment of the operand register R<b>7</b> from the number in the first segment of the operand register R<b>7</b> and place the result in the third segment of the result register R<b>8</b></li><li id="ul0006-0014" num="0067">Subtract the number in the second segment of the operand register R<b>7</b> from the number in the fourth segment of the operand register R<b>7</b> and place the result in the second segment of the result register R<b>8</b><br /> A seventh example of a seventh instruction INS<b>7</b> R<b>8</b>,R<b>9</b> corresponding to a seventh dashed box <b>39</b>f refers to one register R<b>8</b> as operand. This instruction causes a functional unit to perform the following operations in parallel: </li><li id="ul0006-0015" num="0068">Use the numbers in a first and fourth segment of the source register R<b>8</b> and as</li></ul></li></ul>
0069X<sub>0 </sub>and Y<sub>0 </sub>in a rotation with a factor sqrt(2) and a predetermined sine and cosine value. Place the resulting X<sub>1</sub>, Y<sub>1 </sub>are in the first and fourth segment of the result register R<b>9</b>. <ul id="ul0007" list-style="none"><li id="ul0007-0001" num="0000"><ul id="ul0008" list-style="none"><li id="ul0008-0001" num="0070">Use the numbers in a second and third segment of the source register R<b>8</b> and as X<sub>0 </sub>and Y<sub>0 </sub>in a rotation with a factor sqrt(2) and a predetermined sine and cosine value. Place the resulting X<sub>1</sub>, Y<sub>1 </sub>are in the second and third segment of the result register R<b>9</b>. <br /> In these instructions numbers may be represented in the registers as fixed point numbers, all with the same number of bits, so that on multiplication a number of least significant bits are discarded. Almost all fixed point numbers may be defined to be in a range from +1 to −1. An exception are the results of the rotation/scalings, which are preferably fixed point numbers in a range from −2 to 2. It has been found that only insignificant accuracy is lost through rounding when one uses this representation of the numbers and when the data flow graph is split into instructions as described above. Preferably, the additions and/or multiplications in these instructions provide for clipping of results of these instructions if the magnitude of the result exceeds the range of values that can be held in the registers. However, it has been found that if the data flow graph is split into instructions in the way shown above, clipping is not normally necessary. </li></ul></li></ul>
0071When the data processing device provides for all of these instructions the 8-point IDCT of a row contained in the segments of two registers R<b>1</b>, R<b>2</b> can be programmed with the following program:
0072INS<b>1</b> R<b>1</b>,R<b>2</b>,R<b>3</b>
0073INS<b>2</b> R<b>3</b>,R<b>4</b>
0074INS<b>5</b> R<b>1</b>,R<b>2</b>,R<b>7</b>
0075INS<b>6</b> R<b>7</b>,R<b>8</b>
0076INS<b>7</b> R<b>8</b>,R<b>9</b>
0077INS<b>3</b> R<b>4</b>,R<b>9</b>,R<b>5</b>
0078INS<b>4</b> R<b>4</b>,R<b>9</b>,R<b>6</b>
0079As a result the numbers making up a row of the IDCT transform will be contained in the segments of register R<b>5</b>,R<b>6</b>. To transform a complete block these instructions must be repeated for the other rows, with other registers as far as necessary. Needless to say that in a VLIW processor, with more than one functional unit, although all these instructions INS<b>1</b>-INS<b>7</b> may be instructions for the same single functional unit, it is also possible that these instructions may be executed by different functional units. For example, specialized functional units might be provided for the instructions which involve multiplication on one hand and instructions which involve only additions and subtractions on the other hand.
0080Different grouping of operations into instructions is also possible. For example, one may combine for example the operations of INS<b>1</b> and INS<b>2</b> into one instruction INSA so that execution of INSA R<b>1</b>,R<b>2</b>,R<b>4</b> is functionally equivalent to successive execution of INS<b>1</b> R<b>1</b>,R<b>2</b>,X; INS<b>2</b> X,R<b>4</b>; similarly INS<b>5</b>, INS<b>6</b>, INS<b>7</b> may be combined into an instruction, so that execution of INSB R<b>1</b>,R<b>2</b>,R<b>9</b> is equivalent to successive execution of INS<b>5</b> R<b>1</b>,R<b>2</b>,X; INS<b>6</b> X,Y; INS<b>7</b> Y,R<b>9</b>. The instructions INS<b>3</b> and INS<b>4</b> can be replaced by SIMD additions and subtraction respectively, when the instruction INS<b>7</b> is modified so that it puts its results into the segments of the result register in reverse order. However, in this case an additional “reverse order” instruction, which exchanges the contents of segments <b>0</b>-<b>3</b> with each other and the contents of segments <b>1</b>-<b>2</b> with each other is required. This instruction must applied to the result of the SIMD version of INS<b>4</b> to get the transformed number in the proper order.
0081The number of instructions that needs to be executed to transform the block can be reduced by providing one or more functional units which accept the instructions INS<b>1</b>-INS<b>7</b> and execute the operations in parallel combining different segments of the one or more operands referenced in the instruction. This reduces the time (number of instruction cycles) needed for the transform. Execution of the IDCT by such a functional unit is much faster than execution by means of individual instructions at least because the combination of numbers stored in segments at different positions in the operands can be realized by wiring in the functional unit. This wiring is specific to the IDCT. Of course, a reduction in the required time is already achieved if the functional units provide for only one of the additional instructions INS<b>1</b>-INS<b>7</b> or any combination of these instructions. If one or more of these instructions are not provided for, their function can be implemented using conventional instructions.
0082Furthermore, the memory space needed for storing programs is reduced, in particular for programs which involve transformations. This benefit would of course be realized even if the operations in an instruction were not executed in parallel. The reduced program space would result from instructions that involve arbitrary combinations of operations. The particular combinations INS<b>1</b>-INS<b>7</b>, however, are not arbitrary: they have the special property that they provide operations that combine segments as required for computing the IDCT, so as to speed up processing and that furthermore they combine operations that can be executed in parallel to increase the speed of computing the IDCT even further.
0083The examples given above use registers with four segments to implement an 8-point two-dimensional IDCT, e.g. 64-bit registers with four 16 bit segments. Of course, the invention is not limited to these numbers. One may use segments of a different size, e.g. 8,12 or 32 bit segments (the segment need not fill the entire register) and/or registers with a different number of bits, e.g. 128-bits. In the latter case a register with 16-bit segments can store 8 numbers, for example an entire row of an 8-bit block and the 8-point IDCT can be executed as an instruction that requires only one operand register and one result register.
0084More generally, any kind of program can be speeded up by providing functional units which are capable of executing dedicated instructions involving (preferably parallel) execution of operations which combine operands stored in segments at different positions in the registers. The separable transforms discussed in the preceding are but an example of this. For a given program, suitable dedicated instructions can be found by analyzing the data-flow of the program and isolating often occurring combinations of operations that combine different segments of the same one or two operands. When a suitable instruction is found the instruction decoder <b>120</b> and the switch circuit <b>125</b> are designed so that the functional unit is capable of handling that instruction.
0085Preferably these dedicated instructions are combined with a set of SIMD instructions. In this case, one or more functional unit either together or individually provide a complete set of arithmetic instructions is provided with SIMD data flow (combining pairs of segments at corresponding positions in the operands). In addition at least one functional unit is capable of executing a few selected instructions that combine segments at different positions in one or more operands of the instruction, different, that is, than in the SIMD instruction.
0086This is particularly useful for any kind of separable transformations, not only for the IDCT. Use can be made of this in for example, 2-dimensional fourier transforms or Hadamard transforms, convolutions with 2-dimensional separable kernels (such as a Gaussian kernel) H(x,y) which can be written as H<b>1</b>(x)H<b>2</b>(y) etc and higher than two dimensional transformations or convolutions. In general, a separable transform uses a one dimensional transformation which takes a series of numbers as input and defines a new series of numbers as output. A separable transformation comprises the composition of two such one-dimensional transformations. A first one-dimensional transformation is computed for each of a set of series, producing a set of new series. A second transformation is computed for a transversal series obtainable by taking numbers from corresponding positions in series from the set of new series.
0087In each of these cases, the numbers that have to be transformed may be stored in segments of operands, the position of the segment in which a number is stored being determined in the same way for each row by the column in which the number is located, the numbers in each operand belonging to the same row. The transformation can then be executed in the row direction using the dedicated instructions and a number of times in parallel in a direction transverse to the rows by means of SIMD instructions.
5 sheets
Sheet 1 Sheet 2 Sheet 3 Sheet 4 Sheet 5
Every citation, both ways
| Document | Relation | Office | Cited during |
|---|---|---|---|
| US2018129631A1 | Cited by | United States of America | Search report |
| EP0424618A2 | Cites | European Patent Office (EPO) | Applicant |
| EP0444368A1 | Cites | European Patent Office (EPO) | Applicant |
| EP0656584A1 | Cites | European Patent Office (EPO) | Applicant |
| EP0680013A2 | Cites | European Patent Office (EPO) | Applicant |
| EP0723220A2 | Cites | European Patent Office (EPO) | Applicant |
| EP0755015A1 | Cites | European Patent Office (EPO) | Applicant |
| EP0755015A1 | Cites | European Patent Office (EPO) | Applicant |
| EP0847551B1 | Cites | European Patent Office (EPO) | Applicant |
| EP0847551B1 | Cites | European Patent Office (EPO) | Applicant |
| KR100190738B1 | Cites | Republic of Korea | Applicant |
| KR100190738B1 | Cites | Republic of Korea | Applicant |
| JP2008053652A | Cites | Japan | Applicant |
| JP2008053652A | Cites | Japan | Applicant |
| JP2008249293A | Cites | Japan | Applicant |
| JP2008249293A | Cites | Japan | Applicant |
| JP3149348B2 | Cites | Japan | Applicant |
| JP3149348B2 | Cites | Japan | Applicant |
| JP3199205B2 | Cites | Japan | Applicant |
| JP3199205B2 | Cites | Japan | Applicant |
| US4689762A | Cites | United States of America | Applicant |
| US5128760A | Cites | United States of America | Applicant |
| US5230057A | Cites | United States of America | Applicant |
| US5361367A | Cites | United States of America | Applicant |
| US5404550A | Cites | United States of America | Search report |
| US5410727A | Cites | United States of America | Applicant |
| US5450603A | Cites | United States of America | Applicant |
| US5487133A | Cites | United States of America | Search report |
| US5488570A | Cites | United States of America | Applicant |
| US5493513A | Cites | United States of America | Applicant |
| US5493514A | Cites | United States of America | Applicant |
| US5508942A | Cites | United States of America | Applicant |
| US5509129A | Cites | United States of America | Applicant |
| US5511003A | Cites | United States of America | Applicant |
| US5515296A | Cites | United States of America | Applicant |
| US5524265A | Cites | United States of America | Applicant |
| US5528238A | Cites | United States of America | Applicant |
| US5532940A | Cites | United States of America | Applicant |
| US5535138A | Cites | United States of America | Applicant |
| US5535410A | Cites | United States of America | Applicant |
| US5537338A | Cites | United States of America | Applicant |
| US5539662A | Cites | United States of America | Applicant |
| US5539663A | Cites | United States of America | Applicant |
| US5559722A | Cites | United States of America | Applicant |
| US5588152A | Cites | United States of America | Applicant |
| US5594679A | Cites | United States of America | Applicant |
| US5630083A | Cites | United States of America | Search report |
| US5636351A | Cites | United States of America | Applicant |
| US5638068A | Cites | United States of America | Applicant |
| US5649135A | Cites | United States of America | Applicant |
| US5703966A | Cites | United States of America | Search report |
| US5708836A | Cites | United States of America | Applicant |
| US5710935A | Cites | United States of America | Applicant |
| US5713037A | Cites | United States of America | Applicant |
| US5717944A | Cites | United States of America | Applicant |
| US5729758A | Cites | United States of America | Applicant |
| US5734877A | Cites | United States of America | Applicant |
| US5734921A | Cites | United States of America | Applicant |
| US5736948A | Cites | United States of America | Applicant |
| US5752067A | Cites | United States of America | Applicant |
| US5754457A | Cites | United States of America | Applicant |
| US5754871A | Cites | United States of America | Applicant |
| US5764787A | Cites | United States of America | Applicant |
| US5822608A | Cites | United States of America | Applicant |
| US5870619A | Cites | United States of America | Applicant |
| US5878241A | Cites | United States of America | Applicant |
| US5881259A | Cites | United States of America | Applicant |
| US5893145A | Cites | United States of America | Search report |
| US5909572A | Cites | United States of America | Applicant |
| US5933650A | Cites | United States of America | Applicant |
| US5953241A | Cites | United States of America | Applicant |
| US5966528A | Cites | United States of America | Applicant |
| US5991787A | Cites | United States of America | Applicant |
| US6044448A | Cites | United States of America | Applicant |
| US6047366A | Cites | United States of America | Applicant |
| US6058465A | Cites | United States of America | Applicant |
| US6067613A | Cites | United States of America | Applicant |
| US6092920A | Cites | United States of America | Search report |
| US6094715A | Cites | United States of America | Applicant |
| US6116768A | Cites | United States of America | Applicant |
| US6119140A | Cites | United States of America | Search report |
| US6175892B1 | Cites | United States of America | Applicant |
| US6381690B1 | Cites | United States of America | Applicant |
| US6735690B1 | Cites | United States of America | Search report |
| US7509366B2 | Cites | United States of America | Applicant |
| WO9708608A1 | Cites | World Intellectual Property Organization (WIPO) | Applicant |
| WO9708608A1 | Cites | World Intellectual Property Organization (WIPO) | Applicant |
| WO9731308A1 | Cites | World Intellectual Property Organization (WIPO) | Applicant |
| WO9731308A1 | Cites | World Intellectual Property Organization (WIPO) | Applicant |
| WO9733236A1 | Cites | World Intellectual Property Organization (WIPO) | Applicant |
| WO9733236A1 | Cites | World Intellectual Property Organization (WIPO) | Applicant |
| WO9733236A1 | Cites | World Intellectual Property Organization (WIPO) | Applicant |
| WO9948025A2 | Cites | World Intellectual Property Organization (WIPO) | Applicant |
| WO9948025A2 | Cites | World Intellectual Property Organization (WIPO) | Applicant |
| WO9966393A1 | Cites | World Intellectual Property Organization (WIPO) | Applicant |
| WO9966393A1 | Cites | World Intellectual Property Organization (WIPO) | Applicant |
| JPH04242827A | Cites | Japan | Applicant |
| JPH04242827A | Cites | Japan | Applicant |
| JPH07141304A | Cites | Japan | Applicant |
| JPH07141304A | Cites | Japan | Applicant |
16 members in 5 offices
Priority claims11
| Document | Office | Kind | Date |
|---|---|---|---|
| 98200867 | European Patent Office (EPO) | A | |
| 98200867 | European Patent Office (EPO) | A | |
| 98200867 | European Patent Office (EPO) | – | |
| 27043899 | United States of America | A | |
| 27043899 | United States of America | A | |
| 201414263659 | United States of America | A | |
| 09270438 | – | – | – |
| 98200867 | – | – | – |
| EP19980200867 | – | – | – |
| US19990270438 | – | – | – |
| US201414263659 | – | – | – |
Members16
| Document | Office | Kind | |
|---|---|---|---|
| WO9948025A2 | World Intellectual Property Organization (WIPO) | A2 | |
| WO9948025A3 | World Intellectual Property Organization (WIPO) | A3 | |
| EP0983557A2 | European Patent Office (EPO) | A2 | |
| KR20010012703A | Republic of Korea | A | |
| JP2002510418A | Japan | A | |
| US6397235B1 | United States of America | B1 | |
| KR100538605B1 | Republic of Korea | B1 | |
| JP2008171448A | Japan | A | |
| JP4158864B2 | Japan | B2 | |
| JP2010079922A | Japan | A | |
| JP4672744B2 | Japan | B2 | |
| JP4778086B2 | Japan | B2 | |
| EP3073388A1 | European Patent Office (EPO) | A1 | |
| USRE46712EThis record | United States of America | E | |
| US2018129631A1 | United States of America | A1 | |
| EP0983557B1 | European Patent Office (EPO) | B1 |
108 transactions on the USPTO file
Allowed after 3 non-final rejections, 2 final rejections and 1 RCE.
- Non-final rejections
- 3
- Final rejections
- 2
- RCEs
- 1
- Appeals
- 0
Over time
Point at a mark for the transactionTransactions
| Event | Code | |
|---|---|---|
| Recordation of Patent Grant MailedPGM/ | PGM/ | |
| Email NotificationEML_NTR | EML_NTR | |
| Application ready for PDX access by participating foreign officesCCRDY | CCRDY | |
| Issue Notification MailedAllowedWPIR | WPIR | |
| Dispatch to FDCD1935 | D1935 | |
| Email NotificationEML_NTR | EML_NTR | |
| Email NotificationEML_NTR | EML_NTR | |
| Mail PUB Notice of non-compliant IDSMM327-B | MM327-B | |
| Mail Acknowledgement of Priority Papers-PubMP327-P | MP327-P | |
| Application Is Considered Ready for IssuePILS | PILS | |
| PUB Notice of non-compliant IDSM327-B | M327-B | |
| Acknowledgement of Priority Papers-PubP327-P | P327-P | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Issue Fee Payment VerifiedN084 | N084 | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Issue Fee Payment ReceivedIFEE | IFEE | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Notice of AllowanceAllowedMN/=. | MN/=. | |
| Notice of Allowance Data Verification CompletedAllowedN/=. | N/=. | |
| Reasons for AllowanceEX.R | EX.R | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Final ActionA.NE | A.NE | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Final Rejection (PTOL - 326)Final rejectionMCTFR | MCTFR | |
| Final RejectionFinal rejectionCTFR | CTFR | |
| Mail Interview Summary - Applicant Initiated - TelephonicMEXAT | MEXAT | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Interview Summary - Applicant Initiated - TelephonicEXAT | EXAT | |
| Supplemental ResponseSA.. | SA.. | |
| Mail Miscellaneous Communication to ApplicantMM327 | MM327 | |
| Mail Notice of Withdrawn ActionMW/AC | MW/AC | |
| Miscellaneous Communication to Applicant - No Action CountM327 | M327 | |
| Withdrawing/Vacating Office Action LetterW/AC | W/AC | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Email NotificationEML_NTR | EML_NTR | |
| Mail Notice of Informal or Non-Responsive AmendmentNINA | NINA | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Informal or Non-Responsive Amendment after Examiner ActionA.I. | A.I. | |
| Response after Non-Final ActionA... | A... | |
| Request for Extension of Time - GrantedXT/G | XT/G | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Non-Final ActionA... | A... | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Disposal for a RCE / CPA / R129AbandonedABN9 | ABN9 | |
| Request for Continued Examination (RCE)RCEX | RCEX | |
| Workflow - Request for RCE - BeginBRCE | BRCE | |
| Email NotificationEML_NTR | EML_NTR | |
| Mail Advisory Action (PTOL - 303)MCTAV | MCTAV | |
| Advisory Action (PTOL-303)CTAV | CTAV | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Response after Final ActionA.NE | A.NE | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Final Rejection (PTOL - 326)Final rejectionMCTFR | MCTFR | |
| Final RejectionFinal rejectionCTFR | CTFR | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Date Forwarded to ExaminerFWDX | FWDX | |
| Oath or Declaration Filed (Including Supplemental)C602 | C602 | |
| Response after Non-Final ActionA... | A... | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Mail Interview Summary - Applicant Initiated - TelephonicMEXAT | MEXAT | |
| Interview Summary - Applicant Initiated - TelephonicEXAT | EXAT | |
| Electronic ReviewELC_RVW | ELC_RVW | |
| Email NotificationEML_NTF | EML_NTF | |
| Mail Non-Final RejectionNon-final rejectionMCTNF | MCTNF | |
| Non-Final RejectionNon-final rejectionCTNF | CTNF | |
| Preliminary AmendmentA.PE | A.PE | |
| Reference capture on IDSRCAP | RCAP | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Electronic Information Disclosure StatementEIDS. | EIDS. | |
| Information Disclosure Statement (IDS) FiledWIDS | WIDS | |
| Notice of Reissue Published in Official GazetteNRE. | NRE. | |
| Case Docketed to Examiner in GAUDOCK | DOCK | |
| Email NotificationEML_NTR | EML_NTR | |
| Application Is Now CompleteCOMP | COMP | |
| Filing ReceiptFLRCPT.O | FLRCPT.O | |
| Application Dispatched from OIPEOIPE | OIPE | |
| FITF set to NO - revise initial settingFTFI | FTFI | |
| Cleared by OIPE CSRL194 | L194 | |
| Information Disclosure Statement consideredIDSC | IDSC | |
| Electronic Information Disclosure StatementEIDS. | EIDS. |
Numbers
- Publication
- RE046712
- Publication, DOCDB
- RE46712
- Publication, EPODOC
- USRE46712E
- Application
- 14263659
- Application, DOCDB
- 201414263659
- Application, EPODOC
- US201414263659
Titles
- English
- Data processing device and method of computing the cosine transform of a matrix
Classification
- CPC, 5
- G06F17/147
- G06F17/14
- G06F9/30014
- G06F9/30036
- G06F9/30145
- IPC, 5
- G06F17 14
- G06F9 30
- G06F15 16
- G06F9 302
- G06F15 80
- USPC, 1
- 001001000