WO2008124061A1 - System for convolution calculation with multiple computer processors - Google Patents

System for convolution calculation with multiple computer processors Download PDF

Info

Publication number
WO2008124061A1
WO2008124061A1 PCT/US2008/004402 US2008004402W WO2008124061A1 WO 2008124061 A1 WO2008124061 A1 WO 2008124061A1 US 2008004402 W US2008004402 W US 2008004402W WO 2008124061 A1 WO2008124061 A1 WO 2008124061A1
Authority
WO
WIPO (PCT)
Prior art keywords
value
data
processors
processor
values
Prior art date
Application number
PCT/US2008/004402
Other languages
French (fr)
Inventor
Michael B. Montvelishsky
Original Assignee
Vns Portfolio Llc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Priority claimed from US11/854,215 external-priority patent/US20080250092A1/en
Application filed by Vns Portfolio Llc filed Critical Vns Portfolio Llc
Priority to JP2010502137A priority Critical patent/JP2010524080A/en
Publication of WO2008124061A1 publication Critical patent/WO2008124061A1/en

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/15Correlation function computation including computation of convolution operations

Definitions

  • the present invention relates generally to electrical computers for arithmetic processing and calculating, and more particularly to such where a convolution integral is evaluated in a digital fashion.
  • Transform is used to refer to a class of equation analysis techniques. The concept of the transform traces back to the functional analysis branch of mathematics, which primarily deals with the study of spaces of functions where a particular function has as its argument another function. Transforms thus can be used with an individual equation or with entire sets of equations, wherein the process of transformation is a one-to-one mapping of the original equation or equations represented in one domain into another equation or equations represented in a separate domain.
  • the motivation for performing transformation is often straightforward. There are many equations that are difficult to solve in their original representations, yet which may be more easily solvable in one or more other representations. Thus, a transform may be performed, a solution found, and then an inverse transform performed to map the solution back into the original domain.
  • the general form of an integral transform is defined as: where K(a,t) is often referred to as the "integral kernel" of the transform.
  • the Laplace transform is a subset of the class of transforms defined by equation (1) and it is often particularly useful. Given a simple mathematical or functional description of an input to or an output from a system, the Laplace transform can provide an alternative functional description that may simplify analyzing the behavior of the system.
  • the general form of the Laplace transform is defined as:
  • F(s) is not the transform of a single known function but can be represented as the product of two functions that are each the result of the transform of a known function/ ⁇ or g(t), respectively. That is,
  • the FIR filter is usually considered advantageous to use because it does not require internal feedback, which can, for example, cause an HR filter to respond indefinitely to an impulse.
  • the word "finite" in its name also implies another advantage of the FIR filter.
  • the impulse from such a filter ultimately settles to zero, and errors in the iterative summing calculations used do not propagate. That is, the error term stays constant throughout the entire calculation process. This is a distinct advantage over an HR filter, for example, where error can potentially grow for each additional iterative output sum.
  • Unfortunately for many applications a major limitation of a digital filter is that its speed is restricted by the speed of the processor or processors used for numerical calculations.
  • one preferred embodiment of the present invention is a system for calculating a convolution of a data function with a filter function.
  • An array of processors is provided that includes first and last processors and that each include a logic to multiply a coefficient value that is based on a derivation of the filter function and a data value that is representative of the data function to produce a current intermediate value.
  • a logic is provided to receive a prior intermediate value that is representative of a previously performed calculation in another of the processors and to add that prior intermediate value to the current intermediate value.
  • a logic is provided to send the data value and the current intermediate value to another processor.
  • a logic is further provided to hold a prior intermediate value, if any, from the last processor as a prior partial value and to add this prior partial value to the current intermediate value from the last processor to produce a result value.
  • the array of processors thus receives a series of the data values and produces a series of the result values that collectively are representative of the convolution of the data function with the filter function.
  • another preferred embodiment of the present invention is a process for calculating a result value in a convolution of a data function with a filter function.
  • a sequence of coefficient values are obtained that are based on a derivation of the filter function.
  • the coefficient values are then used in a pipeline of computerized processors including a first and last processors to multiply one of the coefficient values and the data value to produce current intermediate values.
  • a prior intermediate value that is representative of a previously performed calculation in another of the processors is added to the current intermediate value.
  • the data value and current intermediate value are sent to a subsequent processor.
  • a prior partial value, if any, is added to the current intermediate value from the last processor to produce a result value, wherein this prior partial value is a previous intermediate value from the last processor.
  • the result value is output to a digital signal processor employing the process.
  • another preferred embodiment of the present invention is a process for calculating a convolution of a data function with a filter function.
  • a sequence of coefficient values are obtained that are based on a derivation of the filter function and a sequence of data values are obtained that are representative of the data function.
  • the coefficient value and the data value are multiplied to produce a current intermediate value.
  • a prior intermediate value that is representative of a previously performed calculation in another of the processors is then added to the current intermediate value.
  • the data value and the current intermediate value are sent to a subsequent processor.
  • a prior partial value, if any, is added to the current intermediate value from the last processor to produce a result value, wherein the prior partial value is a previous intermediate value from the last processor.
  • These result values Are accumulated as the convolution, and the convolution is output to a digital signal processor employing the process.
  • another preferred embodiment of the present invention is an improved system for calculating a convolution of the type in which at least one processor multiplies a coefficient value that is representative of a filter function with a data value that is representative of a data function.
  • the improvement comprises the coefficient value being based on a derivation of the filter function.
  • another preferred embodiment of the present invention is an improved process for calculating a convolution in a computerized processor of the type in which coefficient values are representative of a filter function, data values are representative of a data function, and there is multiplying of the coefficient values with the data values to produce result values that are collectively representative of the convolution.
  • the improvement comprises employing coefficient values that are based on a derivation of the filter function.
  • FIG. 1 is a diagrammatic view depicting the inventive convolution system being employed in an array of computer processors
  • FIG. 2 background art
  • FIGS. 3a-c are partial views of FIG. 1 depicting inbound, outbound, and internal communications using the processors in FIG. 1, wherein FIG. 3a shows how data is passed between the input device and a first processor, and between the first processor and a second processor, FIG. 3b shows how data is passed between a second to last processor and a last processor, and between the last processor and the output device, and FIG. 3c shows how data is passed between two exemplary processors being used centrally in the array;
  • FIGS. 4a-f are block diagrams schematically depicting convolution calculation stages in an array of processors, such as that of FIG. 1 ;
  • FIGS. 5a-f are block diagrams schematically depicting convolution calculation stages based on a new algorithm, again presented in an array of processors such as that of FIG. 1.
  • FIGS. 6a-c are graphs depicting convolution performed using both of the approaches presented in FIGS. 4a-f and FIGS. 5a-f, wherein FIG. 6a shows a first trace representing the use of conventional convolution coefficients and a second trace representing the use of derivation convolution coefficients, FIG. 6b shows a first trace representing input data upon which convolution is performed and a second trace representing the use of derivation signal data, and FIG. 6c shows a single trace representing the results of the approaches discussed.
  • FIG. 7 is a listing of code suitable for use in a direct filter.
  • FIGS. 8a-b are a listing of code suitable for use in a derivation filter, wherein
  • FIG. 8a shows the code performing the functions that are conceptually similar to those in FIG. 7 and FIG. 8b shows additional code used by the derivation-based algorithm.
  • a preferred embodiment of the present invention is a system for convolution calculation performed with multiple computer processors. As illustrated in the various drawings herein, and particularly in the view of FIG. 1, preferred embodiments of the invention are depicted by the general reference character 10.
  • the invention is an improved convolution system 10 for numerically approximating the solution to a convolution of a data function with a filtering function. Performing convolution calculations using numerical techniques inherently tends to involve large numbers of multiplication and addition operations.
  • the present invention permits substantially reducing the overall time needed to perform such calculations in two particular manners. First, the invention permits completing large portions of the necessary calculations in parallel, rather than serially. Second, the invention permits employing a new class of algorithms which uses filter values and data values that can be expressed with fewer data bits, and thus which can be performed faster in view of the inherent limitations in processors.
  • FIG. 1 is a diagrammatic view depicting the inventive convolution system 10 being employed in an array 12 of computer processors 14.
  • external elements that support the array 12 have been omitted or represented generically. Those skilled in the art will appreciate, however, that such elements will be present in actual operating embodiments and that they typically can be conventional in nature.
  • FIG. 1 omits all details related to powering the array 12 and includes generic forms of an external input device 16, an input bus 18, an output bus 20, and an external output device 22.
  • general computational initialization and termination matters are also not initially discussed, and program instructions and convolution coefficient values are treated as being already loaded into the processors 14.
  • the input device 16 here is considered only with respect to providing the input data values upon which convolution will be performed and the output device 22 here is considered only with respect to receiving the output data values upon which convolution will have been performed.
  • FIG. 1 also stylistically shows a flow path 24. It should be appreciated, however, that other arrangements than this are easily possible. For instance, other starting and stopping positions are possible, different paths than the depicted flow path 24 are also possible
  • the inventor's presently preferred hardware platform for the convolution system 10 is to have the array 12 of processors 14 in a single semiconductor die 26, such as the SEAforth-24A or the SEAforth-40A devices, by IntellaSys Corporation of Cupertino, California.
  • the SEAforth-24A is used herein in most examples (and the processors 14 in these examples can properly be termed "cores" or "nodes").
  • processors 14a-x the members of the collective set of processors 14 are individually referenced as processors 14a-x, as shown, and each has busses 28 that permit intercommunication with other processors 14 that are present.
  • each processor 14 shown in FIG. 1 has busses 28 interconnecting it to all of its adjacent processors 14, from the route of the flow path 24 it can be seen that not all of the busses 28 are necessarily used.
  • the embodiment of the convolution system 10 shown here could alternately be embodied in a single dimensional array of serially communicating processors (which we term a "pipeline" of processors).
  • FIG. 2 is a diagrammatic view of the major internal features of one of the processors 14 in FIG. 1, i.e., of a SEAforth-24A processor core.
  • Each of the processors 14a-x is generally an independently functioning computer, including an arithmetic logic unit (ALU 30), a quantity of read only memory (ROM 32), a quantity of random access memory (RAM 34), an instruction decode logic section 36, an instruction area 38, a data stack 40, and a return stack 42.
  • ALU 30 arithmetic logic unit
  • ROM 32 read only memory
  • RAM 34 random access memory
  • instruction decode logic section 36 an instruction area 38
  • data stack 40 a data stack 40
  • return stack 42 return stack
  • an 18- bit "A" register (A-register 44), a 9-bit "B” register (B-register 46), a 9-bit program counter register (P -register 48), and an 18-bit I/O control and status register (IOCS- register 50).
  • four communications ports (collectively ports 52, individually ports 52a-d). Except for edge and corner node cases, the ports 52 each connect to a respective bus 28 (and have 18 data lines, a read line, and a write line - not shown individually).
  • the nodes in the SEAforth-24A device handle communications and processing in particularly elegant and efficient manners, both asynchronously, making this device highly suitable for use with embodiments of the inventive convolution system 10.
  • FIGS. 3a-c are partial views of FIG. 1 depicting inbound, outbound, and internal communications using the processors 14.
  • FIG. 3a shows how data is passed between the input device 16 and processor 14a, and between processor 14a and processor 14b.
  • FIG. 3b shows how data is passed between processor 14w and processor 14x, and between processor 14x and the output device 22.
  • FIG. 3a shows how data is passed between the input device 16 and processor 14a, and between processor 14a and processor 14b.
  • FIG. 3b shows how data is passed between processor 14w and processor 14x, and between processor 14x and the output device 22.
  • FIGS. 3a-c shows how data is passed between processor 14i and processor 14j.
  • Each processor 14 in FIGS. 3a-c is represented as having generic key information holding elements.
  • the SEAforth-24A device features RAM, ROM, registers, and ports which can all be used in programmatically performing calculations.
  • the generic information holding elements which are about to be discussed, can be any of RAM, ROM, registers, and ports.
  • a signal data element 60 is the important information holding element.
  • processors 14b-w one each of the signal data elements 60, the integral kernel filter elements 62, and the calculated elements 64 are the respective important information holding elements.
  • a result element 66 is the important information holding element.
  • FIG. 3a shows how data can be entered into the array 12.
  • processor 14a is dedicated to receiving data from the input device 16 and providing it to processor 14b. As such, processor 14a can receive and store data words from the input device
  • Both communications and processing in the SEAforth-24A device are asynchronous so, once the processor 14a makes data available to processor 14b, the processing of the task at hand can, conceptually, "flow" through the rest of the array 12.
  • FIG. 3b shows how data can be extracted from the array 12.
  • the processor 14x here is dedicated to receiving data from processor 14w and providing it to the output device 22.
  • processor 14x receives and stores data words from processor 14w, and then uses its result element 66 to provide data words to the output device 22, again all subject only to limitations by the capacity of its RAM 34 and whether it has been suitably programmed.
  • FIG. 3 c shows how the contents of the signal data elements 60 and the calculated elements 64 generally flow between the processors 14b-w, and also how the sum can be stored in each processor 14 as an accumulation and then passed all at once in the course of a convolution calculation. As described in detail presently, each of the processors 14b-w here can be performing an operation contributing to the overall calculation.
  • processor 14b this operation uses a new input data value (in its signal data element 60) and a pre-stored convolution coefficient value (in its integral kernel filter element 62).
  • processor 14b does not need a calculated element 64, since there is nothing "partial" yet from an earlier calculation stage. For program simplicity, however, processor 14b can have a calculated element 64 loaded with zero. Also, for applications where multiple convolution coefficients per node are processed (discussed presently), processor 14b may then have and use a calculated element 64.
  • processor 14c-w each performs an operation contributing to the overall convolution calculation by using a pre-stored convolution coefficient value, an input data value which has come from its respective preceding processor 14 along the flow path 24, and an intermediate value which is also from the preceding processor 14.
  • the convolution coefficient value is held in a respective integral kernel filter element 62, the input data value is held temporarily in a respective signal data element 60, and the intermediate value is held temporarily in a respective calculated element 64.
  • FIG. 2 and FIGS. 3a-c can be used to see more generally how the ports and registers of the processors 14a-x in a SEAforth-24A device can be used as just described.
  • processor 14a uses its port 52d to pass an input data value rightward to processor 14b, which can put it into it's data stack 40.
  • processor 14b will read the input data value that has arrived at it's port 52c and puts it onto its data stack 40. Then processor 14b performs an operation contributing to the convolution, using the input data value now in it's data stack 40 and the convolution coefficient value already in it's data stack 40, and then processor
  • processor 14b puts the intermediate data value from this at its port 52d.
  • Similar operations can then occur along the flow path 24 in the processors 14b-w.
  • the nodes in the SEAforth-24A device operate asynchronously, the operations in the processors 14b-w here can all conceptually be viewed as taking place in parallel. Accordingly, essentially contemporaneously with what has just been described for processor 14b, similar operations can be taking place in processors 14i and 14j, for example, only these will be using respective convolution coefficient values, processing intermediate data values, and using their ports 52 along the flow path 24. Also essentially contemporaneously, processor 14w will make available at its port 52c an output data value for processor 14x to handle as described above.
  • FIGS. 4a-f are block diagrams schematically depicting convolution calculation stages in an array 12 of processors 14 such as that of FIG. 1. Generally, the stages here entail: (1) multiplying data sample values and convolution coefficient values in parallel;
  • FIG. 4a shows a stage at which formal calculation is ready to commence.
  • c-bins 72 collectively and c-bins 72 (0 .. n) specifically
  • zeros have been loaded into other bins
  • other bins r- bins 76 collectively and r-bins 76(o..2n-i) specifically
  • FIG. 4b shows a next stage at which a first data sample value (do) has been received into d-bin 74 ( o>. Calculation proceeds as shown, essentially contemporaneously and in parallel throughout the length of the pipeline, with a first result value (ro) being stored in r-bin 76( 0 ).
  • FIG. 4c shows a next stage at which the prior data sample value (do) has been moved to d-bin 74 ⁇ i ) and a second data sample value (di) has been received into d-bin
  • FIG. 4c and FIG. 4d are n-2 stages that are conceptually much like the stage just described.
  • FIG. 4d shows a stage at which the last data sample value (d n ) has been received into d-bin 74 (0) . Again calculation proceeds as shown, with a result value (r n ) now being stored in the r-bin 76( n ).
  • FIG. 4e shows a next stage. Having now partially processed all of the n+1 data sample values (do ... d n ), the last data sample value (d n ) has been moved into d-bin
  • FIG. 4f shows a stage at which the last data sample value (d n ) is finally finishing being processed.
  • an (n+n-l)' h result value is stored in r-bin 76(2 n- i) and processing is complete.
  • the r-bins 76(o..2n-i) now hold the full result of the convolution calculation performed here based on the n+1 data sample values (do ... d n ) and the n+1 convolution coefficient values (co ... C n ).
  • FIGS. 5a-f are block diagrams schematically depicting convolution calculation stages based on a new algorithm, again presented in an array 12 of processors 14 such as that of FIG. 1.
  • the new algorithm employs a derivation of the filtering function.
  • FIG. 5a shows a stage at which formal calculation is ready to commence.
  • c' m have been loaded into bins (c'- bins 82 collectively and c'-bins 82(o.. m > specifically), zeros have been loaded into other bins (d-bins 84 collectively and d-bins 84(o.. m ) specifically), and a single p-bin 86 and a set of result bins (r-bins 88 collectively and r-bins 88(o..2m-i) specifically) have contents which are initially unimportant.
  • FIG. 5b shows a next stage at which a first data sample value (do) has been received into d-bin 84( 0) . Calculation proceeds as shown, essentially contemporaneously and in parallel throughout the length of the pipeline, with a first part value (p 0 ) being provided to the p-bin 86.
  • a first data sample value (do) is again received into d-bin 84( 0) .
  • FIG. 5c shows a next stage at which the prior data sample value (do) has been moved to d-bin 84 ( i ) and a second data sample value (di) has been received into d-bin 84 (0) .
  • FIG. 5d shows a stage at which the last data sample value (d m ) has been received into d-bin 84( ⁇ j). Yet again, calculation proceeds as shown, with an m' h result value (r m ) now being stored in r-bin 88 (m) .
  • FIG. 5e shows a next stage. Having now partially processed all of the m+1 data sample values (do ... d m ), the last data sample value (d m ) has been moved to d-bin 84(i) and a zero value is put into d-bin 84 (0) . Calculation proceeds and a result value (r m+1 ) is stored in r-bin 88 (m+ i ) . [0065] Between FIG. 5e and FIG. 5f are another m-2 stages that are conceptually much like that just described. [0066] FIG. 5f shows a stage at which the last data sample value (d m ) is finally finishing being processed.
  • FIGS. 6a-c are graphs depicting convolution performed using both of the approaches presented above.
  • FIG. 6a shows a first trace 92 representing the use of conventional convolution coefficients and a second trace 92' representing the use of derivation convolution coefficients, that is, ones usable by the new class of algorithms and which may be used in the present invention.
  • FIG. 6b shows a single trace 94 representing input data upon which convolution is performed using both of the approaches so far presented (the other trace 94' here is discussed presently).
  • FIG. 6c shows a single trace 96 representing the results of both of the so far discussed approaches.
  • the trace 92 is represented by the equation:
  • the trace 92' is represented by u '(t).
  • the trace 94 is represented by the equation:
  • FIGS. 6a-c show how the very same result can be achieved using either of the approaches so far discussed, that result being shown as trace 96 here.
  • trace 92 and trace 94 have large amplitude ranges while trace 92' and trace 94' have a markedly lesser amplitude ranges.
  • the SEAforth 24A device is actually quite outstanding over many other suitable candidates, we can and do continue using it here to illustrate points about how the inventive convolution system 10 can help overcome some of the inherent limitations in modern digital processors, generally.
  • the convolution filter values in trace 92 might have to be expressed using 18-bit values, whereas the values used for the inventive approach in trace 92' might be expressed using 9-bit or even fewer-bit values.
  • the data sample values used in trace 94 might have to be expressed using 18-bit values, whereas the values used for the inventive approach in trace 94' might be expressed using 9-bit or even fewer-bit values. It has been the present inventor's observation that using all 9-bit values can provide roughly a four fold (4X) speed increase in the inventive convolution system 10.
  • the SEAforth-24A device is no exception to these general principles of digital processors. It employs the Forth language and relies on numeric values being represented with 18 bits for unsigned values (or 17 bits for signed values), or as being represented with 9 bits for unsigned values (or 8 bits for signed values). If a value requires 10 bits, for example, it effectively therefore must be treated the same as if it requires 18 bits. With reference briefly back to FIG.2 it can be seen again that each processor 14 in the SEAforth-24A device has one 18-bit A-register 44, one 9-bit B- register 46, 18-bit wide words in ROM 32 and RAM 34, and 18-bit wide ports 52.
  • the derivation approximation is an appropriate method. Otherwise, the difference between successive direct coefficient values must be less than 256 units.
  • FIG. 7 is a code listing of an exemplary direct filter 700.
  • the programming language used here is Forth and the target hardware processor 14 is a SEAforth 24A device.
  • An item 702 is a compiler instruction equating "IO" with the IOCS-register
  • An item 704 is a compiler instruction equating "H" with a coefficient value.
  • An item 708 is a location label in the Forth language.
  • An item 710 is a sequence of Forth instructions that initializes the processor 14 for the convolution calculation to follow. Specifically, IO is loaded into the top of the data stack; then popped from there into the B-register 46 so that it points to the IOCS-register 50; then H is loaded into the top of the data stack; and a nop pads the 18-bit instruction word used here to contain this instruction sequence.
  • An item 712 specifies the beginning of a loop within which three cases are dealt with by conditional compilation. This programs the processor 14 depending upon whether is to be the first (processor 14b), a middle (any of processors 14c-v), or the last (processor 14w) in the pipeline. See also, FIGS. 3a-c.
  • An item 714 here specifies the start of compilation of instructions for the most
  • a data sample value (s) is read from where the B-register 46 points to and is pushed onto the 20 data stack (h ⁇ s h); then an accumulation value (a) is also read and pushed onto the data stack (s h — a s h); then the top element on the data stack is popped and pushed onto the top of the return stack (D: a s h — s h R: ⁇ a); then the top element on the data stack is replicated and pushed onto the data stack (D: s h — s s h R: a ⁇ a). [0100] An item 718 follows, where the top element on the data stack is popped and pushed
  • a large multiply (“MULT,” a definition provided in the BIOS of the SEAforth 24A device) is performed.
  • the top two elements of the data stack are used here as a multiplier and a multiplicand, and the top element is replaced with the result (a') while the multiplicand is left as is as the second element in the data stack (D: s h — a' h R: s a — s a).
  • An item 722 follows, where the top two elements of the data stack are added together, the top is replaced with the new accumulated sum (a") and the second is replaced with the 5 next lower element (D: a a' h ⁇ a" h R: — ).
  • An item 724 follows, ending the conditional compilation of the code for the case here where the subject processor 14 is one of processors 14c-v.
  • the case for processor 14b is simpler, because there is no "prior” 10 accumulate value to be read and added.
  • the case for processor 14v is also somewhat simpler, because the current data sample value does not need to be written to a "subsequent" processor.
  • an item 726 is an instruction sequence that is compiled for all of processors
  • FIGS. 8a-b are a code listing of an exemplary derivation filter 800, wherein FIG. 8a shows the code performing the functions that are conceptually similar (other than 9-bit versus
  • FIG. 8a As can be seen in FIG. 8a, much of the code here is essentially the same as in the direct filter 700, discussed above. One exception, however, is an item 802, where nine plus star ("+*") operations are used to perform a small multiply (instead of a large multiply performed using the MULT definition).
  • An item 804 is a sequence of Forth instructions that initializes a portion value (p) in
  • the current portion value (p) is popped of the return stack and pushed onto the data stack
  • An item 808 then retains the accumulated sum (a") in the return stack as a next portion value (p').
  • the accumulated sum (a") is replicated (D: a" h — p' a" h R: — ); the next portion value (p') is popped off of the data stack and pushed onto the return stack (D: a" h — a" h R: ⁇ p'); and two nops pad out the 18-bit instruction word.
  • FIG. 8b this shows additional code used for the "integrator" step
  • An item 810 is a comment in the Forth language and an item 812 is a location label in the Forth language.
  • This code could be conditionally compiled, by adding appropriate complier directives to the code in FIG. 8a, or it can be separately compiled.
  • An item 814 is a sequence of Forth instructions that, first, fetches the value of IO into the B-register 46 and, second, fetches the value $3F (a port address) into the A-register 44.
  • An item 816 is another sequence of Forth instructions. Specifically, one that zeros the data stack. The top element on the data stack is replicated and pushed onto the data stack, and then this is done again (it is irrelevant what that top element is). Then the two topmost 20 elements are popped off of the data stack, XOR' ed, and the result (zero) pushed back onto the data stack.
  • An item 818 specifies the beginning of a loop.
  • An item 820 is another sequence of Forth instructions. Specifically, a value is read from where the B-register 46 points to and is pushed onto the data stack; then the top two 25 elements on the data stack are added and replace the top element (and the second element is replaced with the next lower element); then the top element on the data stack is replicated and pushed onto the data stack; and then the top element is popped off of the data stack and written to where the A-register 44 points. The net result of this is that the sum is output while a copy is also kept (accumulated) for the next execution of the loop.

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Computing Systems (AREA)
  • Complex Calculations (AREA)
  • Image Processing (AREA)

Abstract

A system for calculating a convolution of a data function with a filter function utilizing an array of processors including first and last processors. A coefficient value based on a derivation of the filter function and a data value representative of the data function are multiplied to produce a current intermediate value. Except in the first processor, a prior intermediate value is then added to the current intermediate value. Except in the last processor, the data and current intermediate values are then sent to the next processor. Then the last processor's prior intermediate value, if any, is added to its current intermediate value to produce a result value, wherein the result values collectively are representative of the convolution of the data function with the filter function.

Description

SYSTEM FOR CONVOLUTION CALCULATION WITH MULTIPLE COMPUTER PROCESSORS
Inventor: Michael B. Montvelishsky
BACKGROUND OF THE INVENTION
TECHNICAL FIELD
[0001] The present invention relates generally to electrical computers for arithmetic processing and calculating, and more particularly to such where a convolution integral is evaluated in a digital fashion.
BACKGROUND ART
[0002] Many existing and emerging systems can be analyzed using modern digital processors that are suitably programmed based upon mathematics that describe the underlying systems. For example, such analysis today is increasingly useful for analyzing linear time-invariant systems, such as electrical circuits, optical devices, mechanical mechanisms, and many other systems. [0003] In mathematics and in many fields that use it extensively, such as most branches of the sciences and engineering today, the term "transform" is used to refer to a class of equation analysis techniques. The concept of the transform traces back to the functional analysis branch of mathematics, which primarily deals with the study of spaces of functions where a particular function has as its argument another function. Transforms thus can be used with an individual equation or with entire sets of equations, wherein the process of transformation is a one-to-one mapping of the original equation or equations represented in one domain into another equation or equations represented in a separate domain.
[0004] The motivation for performing transformation is often straightforward. There are many equations that are difficult to solve in their original representations, yet which may be more easily solvable in one or more other representations. Thus, a transform may be performed, a solution found, and then an inverse transform performed to map the solution back into the original domain. The general form of an integral transform is defined as:
Figure imgf000003_0001
where K(a,t) is often referred to as the "integral kernel" of the transform. [0005] The Laplace transform is a subset of the class of transforms defined by equation (1) and it is often particularly useful. Given a simple mathematical or functional description of an input to or an output from a system, the Laplace transform can provide an alternative functional description that may simplify analyzing the behavior of the system. The general form of the Laplace transform is defined as:
(2) L {f(t)} = )e-S'f{t)dt ,
0 where the limits of integration and the integral kernel are redefined from equation (1) as a = 0, b is replaced by ∞, and K(a,t) = e st. The use of a Laplace transform onf(t) is only possible when s is sufficiently large and certain conditions are met, but these conditions are usually flexible enough to allow f(t) to take on the functional form of nearly any useful function that is found in practice.
[0006] It is a common occurrence that a certain function, say, F(s) is not the transform of a single known function but can be represented as the product of two functions that are each the result of the transform of a known function/^ or g(t), respectively. That is,
(3) F{s)= f(s)g(s) , where g(t) must satisfy the same conditions asf(t). From this link between F(s),f(t), and g(t) the following relationship holds:
Figure imgf000003_0002
which is often referred to as the "convolution theorem."
[0007] It can be observed that the convolution theorem results in a transformation of an integral of just one variable. Therefore the techniques for numerical approximation of an integral of just one variable can be applied.
[0008] The following equality holds between the integral representation and the
Riemann sum representation:
(5) )f(t - τ)g{τ)d T = UmT1 f{ct.k)g{ck )ΔT ,
0 k=0 where each ct.k and c* are chosen arbitrarily in the k! subinterval. In practice the right hand side of the equality in equation (5) is approximated by utilizing a very small Δτ and realizing that there exists an error term of some order dependent on the numerical technique chosen and the value of Δτ. Thus:
Figure imgf000004_0001
where m is the order of accuracy that can be represented by the resultant sum (and also the number of digits of precision that can be expected) and O is big-0 notation in the traditional mathematics context.
[0009] As implied in passing above, there are existing and potential uses in important applications for transforms that can benefit from the use of convolution. For instance, one such application is the use of convolution in conjunction with digital filtering that is performed in digital signal processing (DSP). [0010] Any filtering that can be expressed as a mathematical function can be achieved through the use of a digital filter, and this is one of the very foundations of modern DSP practice. For example, digital filtering on data values sampled from a signal permits removing unwanted parts of the signal or extracting the useful parts of the signal. The finite impulse response (FIR) and the infinite impulse response (HR) are the two main types of digital filters used in DSP applications today, with the more common being the FIR filter. [0011] The FIR filter is usually considered advantageous to use because it does not require internal feedback, which can, for example, cause an HR filter to respond indefinitely to an impulse. The word "finite" in its name also implies another advantage of the FIR filter. The impulse from such a filter ultimately settles to zero, and errors in the iterative summing calculations used do not propagate. That is, the error term stays constant throughout the entire calculation process. This is a distinct advantage over an HR filter, for example, where error can potentially grow for each additional iterative output sum. [0012] Unfortunately, for many applications a major limitation of a digital filter is that its speed is restricted by the speed of the processor or processors used for numerical calculations. If high filtering speeds are required, for instance, this can make the hardware needed to implement a digital filter expensive or simply unattainable. For virtually all applications, and holding true generally for most electronics-based systems, the higher the speed being employed the harder it also becomes to deal with coincidental effects, such as suppressing electromagnetic noise and dissipating heat.
[0013] It therefore follows that improving the systems which we use for performing numerical convolution calculations will allow us to perform current and emerging signal processing related tasks at higher speeds, more economically, and with reduced detrimental effects in the underlying and peripheral systems.
BRIEF SUMMARY OF THE INVENTION
[0014] Accordingly, it is an object of the present invention to provide systems for convolution calculation with multiple computer processors. [0015] Briefly, one preferred embodiment of the present invention is a system for calculating a convolution of a data function with a filter function. An array of processors is provided that includes first and last processors and that each include a logic to multiply a coefficient value that is based on a derivation of the filter function and a data value that is representative of the data function to produce a current intermediate value. In the processors other than the first one, a logic is provided to receive a prior intermediate value that is representative of a previously performed calculation in another of the processors and to add that prior intermediate value to the current intermediate value. In the processors other than the last one, a logic is provided to send the data value and the current intermediate value to another processor. A logic is further provided to hold a prior intermediate value, if any, from the last processor as a prior partial value and to add this prior partial value to the current intermediate value from the last processor to produce a result value. The array of processors thus receives a series of the data values and produces a series of the result values that collectively are representative of the convolution of the data function with the filter function.
[0016] Briefly, another preferred embodiment of the present invention is a process for calculating a result value in a convolution of a data function with a filter function. A sequence of coefficient values are obtained that are based on a derivation of the filter function. For a data value that is representative of the data function, the coefficient values are then used in a pipeline of computerized processors including a first and last processors to multiply one of the coefficient values and the data value to produce current intermediate values. Other than in the first processor, a prior intermediate value that is representative of a previously performed calculation in another of the processors is added to the current intermediate value. Other than in the last processor, the data value and current intermediate value are sent to a subsequent processor. A prior partial value, if any, is added to the current intermediate value from the last processor to produce a result value, wherein this prior partial value is a previous intermediate value from the last processor. And the result value is output to a digital signal processor employing the process.
[0017] Briefly, another preferred embodiment of the present invention is a process for calculating a convolution of a data function with a filter function. A sequence of coefficient values are obtained that are based on a derivation of the filter function and a sequence of data values are obtained that are representative of the data function. For each such data value, with respect to each such coefficient value, in a pipeline of computerized processors including a first and last processors, the coefficient value and the data value are multiplied to produce a current intermediate value. Other than in the first processor, a prior intermediate value that is representative of a previously performed calculation in another of the processors is then added to the current intermediate value. Other than in the last processor, the data value and the current intermediate value are sent to a subsequent processor. A prior partial value, if any, is added to the current intermediate value from the last processor to produce a result value, wherein the prior partial value is a previous intermediate value from the last processor. These result values Are accumulated as the convolution, and the convolution is output to a digital signal processor employing the process. [0018] Briefly, another preferred embodiment of the present invention is an improved system for calculating a convolution of the type in which at least one processor multiplies a coefficient value that is representative of a filter function with a data value that is representative of a data function. The improvement comprises the coefficient value being based on a derivation of the filter function.
[0019] And briefly, another preferred embodiment of the present invention is an improved process for calculating a convolution in a computerized processor of the type in which coefficient values are representative of a filter function, data values are representative of a data function, and there is multiplying of the coefficient values with the data values to produce result values that are collectively representative of the convolution. The improvement comprises employing coefficient values that are based on a derivation of the filter function.
[0020] These and other objects and advantages of the present invention will become clear to those skilled in the art in view of the description of the best presently known mode of carrying out the invention and the industrial applicability of the preferred embodiment as described herein and as illustrated in the figures of the drawings.
BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWING(S)
[0021] The purposes and advantages of the present invention will be apparent from the following detailed description in conjunction with the appended figures of drawings in which:
[0022] FIG. 1 is a diagrammatic view depicting the inventive convolution system being employed in an array of computer processors; [0023] FIG. 2 (background art) is a diagrammatic view of the major internal features of one of the processors in FIG. 1, specifically of a core in a SEAforth-24A processor by IntellaSys Corporation of Cupertino, California that is used in many examples herein; [0024] FIGS. 3a-c are partial views of FIG. 1 depicting inbound, outbound, and internal communications using the processors in FIG. 1, wherein FIG. 3a shows how data is passed between the input device and a first processor, and between the first processor and a second processor, FIG. 3b shows how data is passed between a second to last processor and a last processor, and between the last processor and the output device, and FIG. 3c shows how data is passed between two exemplary processors being used centrally in the array;
[0025] FIGS. 4a-f are block diagrams schematically depicting convolution calculation stages in an array of processors, such as that of FIG. 1 ;
[0026] FIGS. 5a-f are block diagrams schematically depicting convolution calculation stages based on a new algorithm, again presented in an array of processors such as that of FIG. 1.
[0027] FIGS. 6a-c are graphs depicting convolution performed using both of the approaches presented in FIGS. 4a-f and FIGS. 5a-f, wherein FIG. 6a shows a first trace representing the use of conventional convolution coefficients and a second trace representing the use of derivation convolution coefficients, FIG. 6b shows a first trace representing input data upon which convolution is performed and a second trace representing the use of derivation signal data, and FIG. 6c shows a single trace representing the results of the approaches discussed.
[0028] FIG. 7 is a listing of code suitable for use in a direct filter; and
[0029] FIGS. 8a-b are a listing of code suitable for use in a derivation filter, wherein
FIG. 8a shows the code performing the functions that are conceptually similar to those in FIG. 7 and FIG. 8b shows additional code used by the derivation-based algorithm. [0030] In the various figures of the drawings, like references are used to denote like or similar elements or steps.
DETAILED DESCRIPTION OF THE INVENTION
[0031] A preferred embodiment of the present invention is a system for convolution calculation performed with multiple computer processors. As illustrated in the various drawings herein, and particularly in the view of FIG. 1, preferred embodiments of the invention are depicted by the general reference character 10. [0032] Briefly, the invention is an improved convolution system 10 for numerically approximating the solution to a convolution of a data function with a filtering function. Performing convolution calculations using numerical techniques inherently tends to involve large numbers of multiplication and addition operations. The present invention permits substantially reducing the overall time needed to perform such calculations in two particular manners. First, the invention permits completing large portions of the necessary calculations in parallel, rather than serially. Second, the invention permits employing a new class of algorithms which uses filter values and data values that can be expressed with fewer data bits, and thus which can be performed faster in view of the inherent limitations in processors.
[0033] FIG. 1 is a diagrammatic view depicting the inventive convolution system 10 being employed in an array 12 of computer processors 14. To focus on the convolution system 10 itself, external elements that support the array 12 have been omitted or represented generically. Those skilled in the art will appreciate, however, that such elements will be present in actual operating embodiments and that they typically can be conventional in nature. For instance, FIG. 1 omits all details related to powering the array 12 and includes generic forms of an external input device 16, an input bus 18, an output bus 20, and an external output device 22. For the sake of simplifying presentation, general computational initialization and termination matters are also not initially discussed, and program instructions and convolution coefficient values are treated as being already loaded into the processors 14. The input device 16 here is considered only with respect to providing the input data values upon which convolution will be performed and the output device 22 here is considered only with respect to receiving the output data values upon which convolution will have been performed.
[0034] Starting at the input device 16 and ending at the output device 22, FIG. 1 also stylistically shows a flow path 24. It should be appreciated, however, that other arrangements than this are easily possible. For instance, other starting and stopping positions are possible, different paths than the depicted flow path 24 are also possible
(and are even likely in alternate embodiments), and a single combined I/O device (not shown) may be employed instead, say, one having input and output channels communicating with the array 12. [0035] The inventor's presently preferred hardware platform for the convolution system 10, is to have the array 12 of processors 14 in a single semiconductor die 26, such as the SEAforth-24A or the SEAforth-40A devices, by IntellaSys Corporation of Cupertino, California. The SEAforth-24A is used herein in most examples (and the processors 14 in these examples can properly be termed "cores" or "nodes"). To further facilitate this discussion, the members of the collective set of processors 14 are individually referenced as processors 14a-x, as shown, and each has busses 28 that permit intercommunication with other processors 14 that are present. [0036] Although each processor 14 shown in FIG. 1 has busses 28 interconnecting it to all of its adjacent processors 14, from the route of the flow path 24 it can be seen that not all of the busses 28 are necessarily used. In fact, the embodiment of the convolution system 10 shown here could alternately be embodied in a single dimensional array of serially communicating processors (which we term a "pipeline" of processors).
[0037] FIG. 2 (background art) is a diagrammatic view of the major internal features of one of the processors 14 in FIG. 1, i.e., of a SEAforth-24A processor core. Each of the processors 14a-x is generally an independently functioning computer, including an arithmetic logic unit (ALU 30), a quantity of read only memory (ROM 32), a quantity of random access memory (RAM 34), an instruction decode logic section 36, an instruction area 38, a data stack 40, and a return stack 42. Also included are an 18- bit "A" register (A-register 44), a 9-bit "B" register (B-register 46), a 9-bit program counter register (P -register 48), and an 18-bit I/O control and status register (IOCS- register 50). Further included are four communications ports (collectively ports 52, individually ports 52a-d). Except for edge and corner node cases, the ports 52 each connect to a respective bus 28 (and have 18 data lines, a read line, and a write line - not shown individually). [0038] The nodes in the SEAforth-24A device handle communications and processing in particularly elegant and efficient manners, both asynchronously, making this device highly suitable for use with embodiments of the inventive convolution system 10. It should be kept in mind, however, that using this particular device, or even hardware that approaches its capabilities is not a requirement. Also, one may need to guard against misconceptions about how data is actually communicated between the processors 14 in the array 12. For example, either "push" or "pull" metaphors can be employed when thinking about inter-device communications, but one should remain mindful that communications is actually a cooperative act between devices. [0039] FIGS. 3a-c are partial views of FIG. 1 depicting inbound, outbound, and internal communications using the processors 14. FIG. 3a shows how data is passed between the input device 16 and processor 14a, and between processor 14a and processor 14b. FIG. 3b shows how data is passed between processor 14w and processor 14x, and between processor 14x and the output device 22. And FIG. 3c shows how data is passed between processor 14i and processor 14j. [0040] Each processor 14 in FIGS. 3a-c is represented as having generic key information holding elements. The SEAforth-24A device features RAM, ROM, registers, and ports which can all be used in programmatically performing calculations. Here that particularly means that the generic information holding elements, which are about to be discussed, can be any of RAM, ROM, registers, and ports. In the case of processor 14a, a signal data element 60 is the important information holding element. In the cases of processors 14b-w, one each of the signal data elements 60, the integral kernel filter elements 62, and the calculated elements 64 are the respective important information holding elements. And in the case of processor 14x, a result element 66 is the important information holding element. [0041] Proceeding now with FIG. 3a, this shows how data can be entered into the array 12. In this exemplary embodiment of the convolution system 10, processor 14a is dedicated to receiving data from the input device 16 and providing it to processor 14b. As such, processor 14a can receive and store data words from the input device
16 and then use its signal data element 60 to provide instances of these data words to processor 14b, subject only to limitations by the capacity of its RAM 34 and whether it has been suitably programmed. [0042] Both communications and processing in the SEAforth-24A device are asynchronous so, once the processor 14a makes data available to processor 14b, the processing of the task at hand can, conceptually, "flow" through the rest of the array 12.
[0043] FIG. 3b shows how data can be extracted from the array 12. The processor 14x here is dedicated to receiving data from processor 14w and providing it to the output device 22. As such, processor 14x receives and stores data words from processor 14w, and then uses its result element 66 to provide data words to the output device 22, again all subject only to limitations by the capacity of its RAM 34 and whether it has been suitably programmed. [0044] FIG. 3 c shows how the contents of the signal data elements 60 and the calculated elements 64 generally flow between the processors 14b-w, and also how the sum can be stored in each processor 14 as an accumulation and then passed all at once in the course of a convolution calculation. As described in detail presently, each of the processors 14b-w here can be performing an operation contributing to the overall calculation. In the case of processor 14b, this operation uses a new input data value (in its signal data element 60) and a pre-stored convolution coefficient value (in its integral kernel filter element 62). In this particular example processor 14b does not need a calculated element 64, since there is nothing "partial" yet from an earlier calculation stage. For program simplicity, however, processor 14b can have a calculated element 64 loaded with zero. Also, for applications where multiple convolution coefficients per node are processed (discussed presently), processor 14b may then have and use a calculated element 64. [0045] Continuing, in the cases of processor 14c-w, each performs an operation contributing to the overall convolution calculation by using a pre-stored convolution coefficient value, an input data value which has come from its respective preceding processor 14 along the flow path 24, and an intermediate value which is also from the preceding processor 14. The convolution coefficient value is held in a respective integral kernel filter element 62, the input data value is held temporarily in a respective signal data element 60, and the intermediate value is held temporarily in a respective calculated element 64.
[0046] In combination, FIG. 2 and FIGS. 3a-c can be used to see more generally how the ports and registers of the processors 14a-x in a SEAforth-24A device can be used as just described. For example, processor 14a uses its port 52d to pass an input data value rightward to processor 14b, which can put it into it's data stack 40. To actually accomplish this, processor 14b will read the input data value that has arrived at it's port 52c and puts it onto its data stack 40. Then processor 14b performs an operation contributing to the convolution, using the input data value now in it's data stack 40 and the convolution coefficient value already in it's data stack 40, and then processor
14b puts the intermediate data value from this at its port 52d. [0047] Similar operations can then occur along the flow path 24 in the processors 14b-w. Although the nodes in the SEAforth-24A device operate asynchronously, the operations in the processors 14b-w here can all conceptually be viewed as taking place in parallel. Accordingly, essentially contemporaneously with what has just been described for processor 14b, similar operations can be taking place in processors 14i and 14j, for example, only these will be using respective convolution coefficient values, processing intermediate data values, and using their ports 52 along the flow path 24. Also essentially contemporaneously, processor 14w will make available at its port 52c an output data value for processor 14x to handle as described above. Again it should be noted, however, that the RAM, ROM, registers, and ports can all be used in programmatically in the SEAforth-24A device and this preceding example is merely one of many ways the processors 14 can be programmed to achieve the same results. [0048] FIGS. 4a-f are block diagrams schematically depicting convolution calculation stages in an array 12 of processors 14 such as that of FIG. 1. Generally, the stages here entail: (1) multiplying data sample values and convolution coefficient values in parallel;
(2) calculating the sum of the multiplication products from stage (1);
(3) shifting the data sample values through the array 12 (i.e., through the pipeline), receiving a next data sample value into the first node and dropping the data sample value from the last node; and
(4) repeating as needed (i.e., as described now in more detail).
[0049] Since the SEAforth-24A device features RAM, ROM, registers, and ports which all can be used in programmatically performed calculations, and since the inventive convolution system 10 can be used with other devices having lesser, greater, or yet other capabilities and structures, the data storage elements in FIGS. 4a-f are here generically termed "bins." To simplify the following discussion, the examples here use equal numbers (specifically 22 each) of convolution coefficient values, sample data values, and processors 14 being employed in the actual convolution calculation. These quantities may be uncommon in many "real world" applications, so considerations for alternate cases are discussed presently and, in any case, to use other quantities should generally be straightforward for those skilled in the art once the following is fully appreciated. [0050] FIG. 4a shows a stage at which formal calculation is ready to commence.
Convolution coefficient values (c0 ... cn; n+1 values total, wherein n=21 in the SEAforth-24A device in FIGS. 1 and 3a-c) have been loaded into bins (referred to as c-bins 72 collectively and c-bins 72(0..n) specifically), zeros have been loaded into other bins (d-bins 74 collectively and d-bins 74(o..D) specifically), and other bins (r- bins 76 collectively and r-bins 76(o..2n-i) specifically) have contents which are initially unimportant. In FIGS. 4a-f and the following discussion, indexing begins at zero and "c" stands for "coefficient," "d" stands for "data," "a" is an "accumulated" intermediate value, and "r" stands for "result." [0051] FIG. 4b shows a next stage at which a first data sample value (do) has been received into d-bin 74(o>. Calculation proceeds as shown, essentially contemporaneously and in parallel throughout the length of the pipeline, with a first result value (ro) being stored in r-bin 76(0).
[0052] FIG. 4c shows a next stage at which the prior data sample value (do) has been moved to d-bin 74<i) and a second data sample value (di) has been received into d-bin
74(0). Calculation again proceeds as shown, essentially contemporaneously and in parallel throughout the length of the pipeline, with a second result value (τ\) now being stored in r-bin 76(i).
[0053] Between FIG. 4c and FIG. 4d are n-2 stages that are conceptually much like the stage just described.
[0054] FIG. 4d shows a stage at which the last data sample value (dn) has been received into d-bin 74(0). Again calculation proceeds as shown, with a result value (rn) now being stored in the r-bin 76(n).
[0055] FIG. 4e shows a next stage. Having now partially processed all of the n+1 data sample values (do ... dn), the last data sample value (dn) has been moved into d-bin
74(i) and a zero value is put into d-bin 74<o). Calculation proceeds and a result value (rn+i) is stored in r-bin 76(n+j).
[0056] Between FIG. 4e and FIG. 4f are another n-2 stages that are conceptually much like the stage just described. [0057] FIG. 4f shows a stage at which the last data sample value (dn) is finally finishing being processed. After calculation here, an (n+n-l)'h result value is stored in r-bin 76(2n-i) and processing is complete. The r-bins 76(o..2n-i) now hold the full result of the convolution calculation performed here based on the n+1 data sample values (do ... dn) and the n+1 convolution coefficient values (co ... Cn).
[0058] FIGS. 5a-f are block diagrams schematically depicting convolution calculation stages based on a new algorithm, again presented in an array 12 of processors 14 such as that of FIG. 1. Briefly, the new algorithm employs a derivation of the filtering function. To emphasize this, the convolution coefficient values used here are differently denoted, as c'o ... c'm (wherein m=21 in the SEAforth-24A device in FIGS. 1 and 3a-c; note, the reason for using when using a different reference for the index here is discussed presently). [0059] FIG. 5a shows a stage at which formal calculation is ready to commence. The derivation convolution coefficient values (c'o ... c'm) have been loaded into bins (c'- bins 82 collectively and c'-bins 82(o..m> specifically), zeros have been loaded into other bins (d-bins 84 collectively and d-bins 84(o..m) specifically), and a single p-bin 86 and a set of result bins (r-bins 88 collectively and r-bins 88(o..2m-i) specifically) have contents which are initially unimportant. Somewhat similar to the preceding example, indexing begins at zero and "c"' stands for derivation of a "coefficient," "d" again stands for "data," "a" is again an accumulated intermediate value, "p" stands for or "part" (as in "part" contributing to the result), and "r" stands for "result." [0060] FIG. 5b shows a next stage at which a first data sample value (do) has been received into d-bin 84(0). Calculation proceeds as shown, essentially contemporaneously and in parallel throughout the length of the pipeline, with a first part value (p0) being provided to the p-bin 86. However, unlike the variation using the conventional convolution algorithm shown in FIG. 4a-f, the "previous" part value here is added to the present part value, and this is then stored in r-bin 88(o>. Since there is nothing "previous" at this early stage, however, a zero is added to the first part value (po) to calculate a first result value (ro) that is stored in r-bin 88(0). [0061] FIG. 5c shows a next stage at which the prior data sample value (do) has been moved to d-bin 84(i) and a second data sample value (di) has been received into d-bin 84(0). Calculation again proceeds as shown, essentially contemporaneously and in parallel throughout the length of the pipeline, with a second part value (pi) now being provided to the p-bin 86. The previous part value (p0) is added to the present portion value (pi), and this is then stored as a second result value (ri) in r-bin 88(i). [0062] Between FIG. 5c and FIG. 5d are m-2 stages that are conceptually much like that just described. [0063] FIG. 5d shows a stage at which the last data sample value (dm) has been received into d-bin 84(<j). Yet again, calculation proceeds as shown, with an m'h result value (rm) now being stored in r-bin 88(m).
[0064] FIG. 5e shows a next stage. Having now partially processed all of the m+1 data sample values (do ... dm), the last data sample value (dm) has been moved to d-bin 84(i) and a zero value is put into d-bin 84(0). Calculation proceeds and a result value (rm+1) is stored in r-bin 88(m+i). [0065] Between FIG. 5e and FIG. 5f are another m-2 stages that are conceptually much like that just described. [0066] FIG. 5f shows a stage at which the last data sample value (dm) is finally finishing being processed. After calculation here an (m+m-l)'h result value (r2m-1) is stored in r-bin 88(2m-i) and processing is complete. The r-bins 88(o..2m-i) now hold the full result of the convolution calculation performed here based on the m+1 data sample values (do ... dm) and the m+1 derivation convolution coefficient values (c'o ... c'm).
[0067] Summarizing, from the above it should now be clear that the inventive convolution system 10 permits completing substantial portions of the necessary calculations in parallel, rather than serially. For instance, in the simplified examples just described, 22 of the processors 14 are performing calculations in parallel. Note, all 24 of the processors 14 in a SEAforth-24A device could have also been employed, but this would not be as fast because processor 14a and processor 14x would then have to do double-duty to cover both calculation and I/O. [0068] As noted at the beginning of this section, the inventive convolution system 10 also permits employing a new class of algorithms, and aspects of this are now discussed. FIGS. 6a-c are graphs depicting convolution performed using both of the approaches presented above. As such, these figures provide a conceptual overview of what has been presented in FIGS. 4a-f and FIGS. 5a-f. [0069] FIG. 6a shows a first trace 92 representing the use of conventional convolution coefficients and a second trace 92' representing the use of derivation convolution coefficients, that is, ones usable by the new class of algorithms and which may be used in the present invention. FIG. 6b shows a single trace 94 representing input data upon which convolution is performed using both of the approaches so far presented (the other trace 94' here is discussed presently). FIG. 6c shows a single trace 96 representing the results of both of the so far discussed approaches. In the particular example shown in FIGS. 6a-c, the trace 92 is represented by the equation:
Figure imgf000017_0001
The trace 92' is represented by u '(t). The trace 94 is represented by the equation:
Figure imgf000017_0002
And the trace 94' is represented by v '(t). Here t is defined on the interval from -1 to 1 with step size 0.01, / ranges from 1 to q by step size of 1, and q is the number of data points (2000 in this example) that pass through the filter function. Collectively, FIGS. 6a-c show how the very same result can be achieved using either of the approaches so far discussed, that result being shown as trace 96 here.
[0070] Yet other approaches are possible using the new class of algorithms. For example, with reference again to FIGS. 6a-c, a derivation data function, say, that represented as trace 94', and a conventional filter function, say, that represented as trace 92, can be used and the result in trace 96 will again be the same. There is some implication in the literature that others are considering this approach, albeit implemented not in the novel manners disclosed herein. The use of function derivations can also be taken further logically. For example, using derivations of both the data and the filter functions is theoretically possible. Yet further, using higher order derivations of either or both the data and the filter functions is also theoretically possible. As a practical matter these approaches may have limited real world utility, but they are nonetheless encompassed by the spirit of the present invention. In FIGS. 6a-c the derivations of both the data and filter functions approach is represented by trace 92' and trace 94', and having the result still being that in trace 96. [0071] Some important considerations when using derivation, in any of the approaches, follow from the effort required to obtain a function derivation. In convolution calculations the number of data sample values used will usually exceed the number of coefficient values being used. Accordingly, it follows that less effort will typically be needed to obtain a derivation of the filter function than will be needed to obtain a derivation of the data function. Of course, particular situations may exist where little or no extra effort is needed to obtain the derivation of a data function, but this will likely be rare. Furthermore, since the filter coefficient values will frequently be the same when performing multiple convolution calculations on what will typically be different data sample values, the effort put into obtaining the filter coefficient values is a reusable or "amortized" effort. In deed, in many applications this effort will be expended in design and the filter values can be entered as program constants (e.g., even stored in the ROM 32 of a device like the SEAforth- 24A).
[0072] Continuing again with FIG. 6a-c, it can be seen that the trace 92 and trace 94 have large amplitude ranges while trace 92' and trace 94' have a markedly lesser amplitude ranges. As a practical matter, this means that the values in trace 92' and trace 94' can be expressed using fewer bits. The importance of this can be grasped when one considers the nature of the available tools, that is, the inherent limitations of digital processors. Although the SEAforth 24A device is actually quite outstanding over many other suitable candidates, we can and do continue using it here to illustrate points about how the inventive convolution system 10 can help overcome some of the inherent limitations in modern digital processors, generally. [0073] For instance, the convolution filter values in trace 92 might have to be expressed using 18-bit values, whereas the values used for the inventive approach in trace 92' might be expressed using 9-bit or even fewer-bit values. Similarly, one can consider that the data sample values used in trace 94 might have to be expressed using 18-bit values, whereas the values used for the inventive approach in trace 94' might be expressed using 9-bit or even fewer-bit values. It has been the present inventor's observation that using all 9-bit values can provide roughly a four fold (4X) speed increase in the inventive convolution system 10.
[0074] Digital processors are inherently limited with respect to the sizes of the values that they can directly perform operations on. For example, the 4004 processor introduced by Intel Corporation in 1971 handled 4-bit values and the processors in most current-generation personal computers directly handle 32- or 64-bit values. Also, multiplication of large values is generally one of the slowest operations available in most processors today. It has been the present inventor's observation that multiplication operations can account for 60-90% of the execution time of a convolution algorithm.
[0075] The SEAforth-24A device is no exception to these general principles of digital processors. It employs the Forth language and relies on numeric values being represented with 18 bits for unsigned values (or 17 bits for signed values), or as being represented with 9 bits for unsigned values (or 8 bits for signed values). If a value requires 10 bits, for example, it effectively therefore must be treated the same as if it requires 18 bits. With reference briefly back to FIG.2 it can be seen again that each processor 14 in the SEAforth-24A device has one 18-bit A-register 44, one 9-bit B- register 46, 18-bit wide words in ROM 32 and RAM 34, and 18-bit wide ports 52. [0076] The equivalent here to multiplying two 18-bit values in the Forth language in a processor 14 requires the following sequence of thirty six operational codes (where "." Represents the nop or no-operation instruction and "+*" represents the plus-star or bit- wise multiply instruction):
(9) .+*.+*.+*.+*.+*.+*.+*.+*.+*.+*.+*.+*.+*.+*.+*.+*.+*. +*
In contrast, the equivalent here to multiplying one 18-bit value and one 9-bit value in the Forth language in a processor 14 requires the following sequence of eighteen operational codes:
(10) .+*.+*.+*.+*.+*.+*.+*.+*.+*
And the equivalent here to multiplying two 9-bit values in the Forth language in a processor 14 requires the following sequence of nine operational codes:
(11) +* +* + *+ *+ *+ *+ *+ * +* Clearly, from the standpoint of computational burden and achievable speed, calculating equation (9) is the least preferred task and calculating equation (11) is the most preferred task. These can be spoken of as running at Ix, 2x, and 4x speeds, respectively. [0077] A more rigorous "proof for the conceptual basis of the above is now presented. The new class of algorithms employable by inventive convolution system 10 uses a derivative representation instead of the direct representation of the integral kernel (see e.g., equation (1) and the Background Art section, generally). The following is essentially a restatement of equation (5): (12) r(t)= f{ct_k)g{ck)Δτ ,
Figure imgf000020_0001
where f(t-τ) represents the integral kernel. However, suppose instead that the integral kernel is represented by f'(t-τ). This results in the following:
(13) f (f) = )r{t - τ)g(τ)dτ = limΔ→o∑r(ct_k)g{ck)Δτ ■
O k=0
[0078] Now assuming that the integral kernel is a particular low pass filter or can be represented by a low pass filter, then the following approximation is reasonable:
(14) r(ct_k)= f(ct_k)-f(ct_k_Δτk) , and it follows that: t
(15) Δ lτim→θ {∑[f(ct_k)-f(ct_k_Δτ)]g(ck)Δτ = k=0
Δ liτm→O∑f-if( xct '_-k«)'g-(vck ")'Δτ - Δ liτm→θ∑f-if( Vct_k_Δτ)g{ck)Δτ
' k=0 "'^ k=O
[0079] At this point it is easy to see that the first sum to the right of the equals sign in equation (14) is simply r(t). What is not so obvious is that the second term to the right of the equals sign is simply just the previous convolution value from just one time step Δτ ago, and that this can be represented in the following way:
(16) Hm0 ∑f{ct_k_Δτ)g{Ck)Aτ = r(t - Δr) .
[0080] Hence the following relationship holds between convolution utilizing direct integral kernel relationship and convolution utilizing derivative of direct integral kernel relationship: (17) ιJ(t)= r{ή- r(t - Δτ) → r{t) = rJ(t) + r{t - Δτ) .
[0081] An important observation here is to realize that convolution utilizing the direct representation is exactly the same as the addition of the convolution utilizing the derivation of the kernel and the previously calculated convolution. This is the same as saying the new sum equals the old sum plus whatever has just been calculated. [0082] Applying this in the context of the new class of algorithms that are usable in the inventive convolution system 10, the direct filter coefficient values (c0 ... Cn) can be used to compute the derivation coefficient values (c'o ... c'n+i) in the following way: c'o = C0 - 0; c' i = C1 - C0; c'2 = C2 - ci ; ...; c'n = Cn - cn-i ; and c'n+1 = 0 - Cn. However, if the value of cø is non-zero, then we simply have c'o = C0 - 0 = C0. Similarly, if CQ is zero, then we simply have c'o = 0 - 0 = 0 and there is no reason to even associate a derivation filter value with the value zero, because it will not contribute towards the accumulated intermediate value (ao). This reasoning can be extended to any direct filter value or to any derivation of a direct filter value that is zero, because it is not necessary to associate a filter coefficient value with a particular node if it will not contribute to the accumulated intermediate value calculated at that node. Nonetheless, other than for the first node, the partial sum at each node still must be accounted for.
[0083] Turning now to why the index n was used in FIGS. 4a-f and the index m was used in FIGS. 4a-f, this was done to emphasize one key distinction between using the direct-based algorithm and the derivation-based algorithm. As can be seen in the last paragraph, where n direct filter coefficient values (co ... Cn) could be used, n+1 derivation coefficient values (c'o ... c'n+i) are needed. Thus, for example, if one were to apply 21 processors to an application using the direct-based algorithm, one would need 22 processors for the same application using the derivation-based algorithm. Alternately, if one were to apply 22 processors to an application using the direct- based algorithm, one would need 23 processors for the same application using the derivation-based algorithm, hi the case of the SEAforth-24A device in FIGS. 1 and
3a-c, this would require leaving one processor unused or combining the I/O functions into one processor so that 23 processors could be employed by the derivation-based algorithm. This may present a slight issue when using a 24-processor device (e.g., the SEAforth-24A), but it is much less an issue when using a 40-processor device (e.g., the SEAforth-40A), and it rapidly becomes trivial when 80-, 96-, 128-, etc. devices are employed.
[0084] Note also, the discussion herein was simplified by using equal numbers of convolution coefficient values and sample data values. If one had 22 sample data values to process when using the direct-based algorithm they would need 23 sample data values to process when using the derivation-based algorithm. Of course, 22 actual data values could be used and "padded" with 23rd value of zero. More typically, however, this will be a non-issue because a large quantity, potentially approaching an infinite quantity, of sample data values will be used in most real-world applications. [0085] In summary, a benefit of utilizing a derivation representation instead of direct representation is that the values required to represent the amplitude of a derivation are often much smaller in magnitude than the values used to represent the amplitude of a direct filter. What transpires in terms of the SEAforth-24A device, again using it as an example, is that instead of needing a full 18-bit data word to represent an amplitude value it will often be the case that a 9-bit data word is sufficient. There are two requirements that allow 9-bit representation to be considered sufficient. The first is that the coefficient values be represented in 9 bits unsigned (or 8 bits signed). The second condition is that the difference between successive direct filter coefficient values is represented by 9 bits unsigned (or 8 bits signed). In the case of a typical low pass filter, such as that used in the example presented in FIGS. 6a-c, the derivation value would have to be represented by only 8 bits because the most significant bit is left as the sign bit. As a general rule, if the values in question are unsigned or can be treated as unsigned and then if the difference between successive direct coefficient values is less than 512 units, the derivation approximation is an appropriate method. Otherwise, the difference between successive direct coefficient values must be less than 256 units.
[0086] FIG. 7 is a code listing of an exemplary direct filter 700. The programming language used here is Forth and the target hardware processor 14 is a SEAforth 24A device.
[0087] An item 702 is a compiler instruction equating "IO" with the IOCS-register
50. This will specify where data is both read from and written to. Note, the IOCS- register 50 in the SEAforth 24A device can concurrently specify reading from and writing to different ports 52. To avoid confusion, those familiar with less sophisticated devices should keep this in mind when reading the following. [0088] An item 704 is a compiler instruction equating "H" with a coefficient value.
Here "123" is simply a value being used for the sake of example. This will be what is in the c-bin 72 for this processor 14. [0089] An item 706 is a comment in the Forth language.
[0090] An item 708 is a location label in the Forth language.
[0091] An item 710 is a sequence of Forth instructions that initializes the processor 14 for the convolution calculation to follow. Specifically, IO is loaded into the top of the data stack; then popped from there into the B-register 46 so that it points to the IOCS-register 50; then H is loaded into the top of the data stack; and a nop pads the 18-bit instruction word used here to contain this instruction sequence.
5 [0092] An item 712 specifies the beginning of a loop within which three cases are dealt with by conditional compilation. This programs the processor 14 depending upon whether is to be the first (processor 14b), a middle (any of processors 14c-v), or the last (processor 14w) in the pipeline. See also, FIGS. 3a-c.
[0093] An item 714 here specifies the start of compilation of instructions for the most
10 typical case, the one where the subject processor 14 is one of processors 14c-v.
[0094] [N.b., the right-side comments on the instruction words in FIGS. 7-8 use a 2- column scheme representing the data stack and the return stack if relevant, wherein the right-ward element is the top-most in the respective stack. The parentheticals in the following discussion show this "translated" into a before ~ after and left-ward 15 element is top-most scheme that is encountered in many Forth textbooks. In this manner both schemes are provided to help facilitate understanding of the present examples.] [0095] An item 716 is another sequence of Forth instructions. Specifically, a data sample value (s) is read from where the B-register 46 points to and is pushed onto the 20 data stack (h ~ s h); then an accumulation value (a) is also read and pushed onto the data stack (s h — a s h); then the top element on the data stack is popped and pushed onto the top of the return stack (D: a s h — s h R: ~ a); then the top element on the data stack is replicated and pushed onto the data stack (D: s h — s s h R: a ~ a). [0100] An item 718 follows, where the top element on the data stack is popped and pushed
25 onto the top of the return stack (D: s s h — s h R: a — s a); then a large multiply ("MULT," a definition provided in the BIOS of the SEAforth 24A device) is performed. The top two elements of the data stack are used here as a multiplier and a multiplicand, and the top element is replaced with the result (a') while the multiplicand is left as is as the second element in the data stack (D: s h — a' h R: s a — s a).
[(MDl] An item 720 follows, where the top element on the return stack is popped off and pushed onto the data stack (D: a' h — s a' h R: s a — a); the top element of the data stack is popped off and written to where the B-register 46 points to (D: s a' h — a' h R: a — a); the top element of the return stack is popped off and pushed onto the data stack (D: a' h — a a' h R: a --); and a nop pads the 18-bit instruction word used. [0102] An item 722 follows, where the top two elements of the data stack are added together, the top is replaced with the new accumulated sum (a") and the second is replaced with the 5 next lower element (D: a a' h ~ a" h R: — ). [0103] An item 724 follows, ending the conditional compilation of the code for the case here where the subject processor 14 is one of processors 14c-v. [0104] Understanding the other two conditional compilation options shown in FIG. 7 should now be straightforward. The case for processor 14b is simpler, because there is no "prior" 10 accumulate value to be read and added. And the case for processor 14v is also somewhat simpler, because the current data sample value does not need to be written to a "subsequent" processor. [0105] Finally, an item 726 is an instruction sequence that is compiled for all of processors
14b-w, where the top element of the data stack is popped off and written to where the B- 15 register 46 points (D: a" h — h R: — ); and the loop then returns to item 712. [0106] FIGS. 8a-b are a code listing of an exemplary derivation filter 800, wherein FIG. 8a shows the code performing the functions that are conceptually similar (other than 9-bit versus
18-bit calculations) to those in FIG. 7 and FIG. 8b shows additional code used by the derivation-based algorithm. [G-E07] As can be seen in FIG. 8a, much of the code here is essentially the same as in the direct filter 700, discussed above. One exception, however, is an item 802, where nine plus star ("+*") operations are used to perform a small multiply (instead of a large multiply performed using the MULT definition).
[0108] An item 804 is a sequence of Forth instructions that initializes a portion value (p) in
25 the return stack to zero. Specifically, here, a literal is placed on the data stack (D: h — p h R:
— ); then pushed from there onto the top of the return stack (D: p h ~ h R: — p); and two nops are used to fill out the instruction word. [Note, this particular approach was chosen to facilitate conceptual comparison with the direct filter 700, and skilled programming artisans will readily appreciate that there are more efficient and elegant ways to handle this.] [OJE09] An item 806 then handles the additional addition employing the current portion value
(p). The current portion value (p) is popped of the return stack and pushed onto the data stack
(D: a" h — p a" h R: p — ); a first nop buys time before the next instruction; the top two elements of the data stack are added together, wherein the top is replaced with the sum which is both the next portion value (p') as well as the accumulated sum (a"), and the second is replaced with the next lower element (D: p a" h ~ p' h R: — ); and a second nop pads the 18- bit instruction word.
[OBlO] An item 808 then retains the accumulated sum (a") in the return stack as a next portion value (p'). The accumulated sum (a") is replicated (D: a" h — p' a" h R: — ); the next portion value (p') is popped off of the data stack and pushed onto the return stack (D: a" h — a" h R: ~ p'); and two nops pad out the 18-bit instruction word.
[0111] Turning now to FIG. 8b, this shows additional code used for the "integrator" step
10 when the derivation-based algorithm is employed. Note, in this particular example this code would be run in an additional processor 14.
[0112] An item 810 is a comment in the Forth language and an item 812 is a location label in the Forth language. This code could be conditionally compiled, by adding appropriate complier directives to the code in FIG. 8a, or it can be separately compiled.
[QE13] An item 814 is a sequence of Forth instructions that, first, fetches the value of IO into the B-register 46 and, second, fetches the value $3F (a port address) into the A-register 44.
[0114] An item 816 is another sequence of Forth instructions. Specifically, one that zeros the data stack. The top element on the data stack is replicated and pushed onto the data stack, and then this is done again (it is irrelevant what that top element is). Then the two topmost 20 elements are popped off of the data stack, XOR' ed, and the result (zero) pushed back onto the data stack.
[0115] An item 818 specifies the beginning of a loop.
[0116] An item 820 is another sequence of Forth instructions. Specifically, a value is read from where the B-register 46 points to and is pushed onto the data stack; then the top two 25 elements on the data stack are added and replace the top element (and the second element is replaced with the next lower element); then the top element on the data stack is replicated and pushed onto the data stack; and then the top element is popped off of the data stack and written to where the A-register 44 points. The net result of this is that the sum is output while a copy is also kept (accumulated) for the next execution of the loop.
[OM 7] And an item 822 is were the loop then returns to item 818.
[0118] As can be seen, the derivation-based algorithm used by the present inventive convolution system 10 requires very little additional code. While various embodiments have been described above, it should be understood that they have been presented by way of example only, and that the breadth and scope of the invention should not be limited by any of the above described exemplary embodiments, but should instead be defined only in accordance with the following claims and their equivalents.

Claims

CLAIMS What is claimed is:
L A system for calculating a convolution of a data function with a filter function, comprising: an array of processors including a first and a last said processors, wherein said processors include: a logic to multiply a coefficient value that is based on a derivation of the filter function and a data value that is representative of the data function to produce a current intermediate value; in said processors other than said first processor, a logic to receive a prior intermediate value that is representative of a previously performed calculation in another of said processors and to add said prior intermediate value to said current intermediate value; and in said processors other than said last processor, a logic to send said data value and said current intermediate value to another said processor; and a logic to hold a prior intermediate value, if any, from said last processor as a prior partial value and to add said prior partial value to said current intermediate value from said last processor to produce a result value; and wherein said array of processors receives a series of said data values and produces a series of said result values that collectively are representative of the convolution of the data function with the filter function.
2. The system of claim 1, wherein said processors perform processing in parallel.
3. The system of claim 1, wherein said processors perform processing asynchronously.
4. The system of claim 1, wherein said processors intercommunicate asynchronously.
5. The system of claim 1, wherein multiple of said processors occupy a single semiconductor die.
6. The system of claim 5, wherein all of said array of processors occupy said semiconductor die.
7. The system of claim 1, wherein said processors further each include a filter storage element to hold said coefficient value.
8. The system of claim 1, further comprising a logic to receive said data value into said first processor from outside of the system.
9. The system of claim 1, further comprising a logic to send said result value out of said last processor to outside of the system.
10. The system of claim 1, wherein said logic to hold said prior said intermediate value is in said last processor.
11. A process for calculating a result value in a convolution of a data function with a filter function, the process comprising: (a) obtaining a sequence of coefficient values that are based on a derivation of the filter function; (b) for a data value that is representative of the data function: (i) for each said coefficient value, in a pipeline of computerized processors including a first and last said processors: (A) multiplying said coefficient value and said data value to produce a current intermediate value; (B) other than in said first processor, adding a prior intermediate value that is representative of a previously performed calculation in another of said processors to said current intermediate value; and (C) other than in said last processor, sending said data value and said current intermediate value to a subsequent said processor; and (ii) adding a prior partial value, if any, to said current intermediate value from said last processor to produce a result value, wherein said prior partial value is a previous intermediate value from said last processor; and (iii) outputting the result value to a digital signal processor employing the process.
12. A process for calculating a convolution of a data function with a filter function, the process comprising: (a) obtaining a sequence of coefficient values that are based on a derivation of the filter function; (b) obtaining a sequence of data values that are representative of the data function; (c) for each said data value: (i) for each said coefficient value, in a pipeline of computerized processors including a first and last said processors: (A) multiplying said coefficient value and said data value to produce a current intermediate value; (B) other than in said first processor, adding a prior intermediate value that is representative of a previously performed calculation in another of said processors to said current intermediate value; and (C) other than in said last processor, sending said data value and said current intermediate value to a subsequent said processor; and (iii) adding a prior partial value, if any, to said current intermediate value from said last processor to produce a result value, wherein said prior partial value is a previous intermediate value from said last processor; (d) accumulating said result values of said (c) as the convolution; and (e) outputting the convolution to a digital signal processor employing the process.
13. The process of claim 12, wherein said (c)(i)(A) is performed concurrently for a plurality of said data values in a plurality of said processors.
14. The process of claim 12, wherein said (c)(i)(A) is performed concurrently for said sequence of coefficient values in a plurality of said processors..
15. An improved system for calculating a convolution of the type in which: at least one processor multiplies a coefficient value that is representative of a filter function with a data value that is representative of a data function; the improvement comprising: said coefficient value being based on a derivation of the filter function.
16. The system of claim 15, wherein the improvement further comprises a plurality of said processors that multiply multiple said coefficient values with multiple said data values in parallel.
17. An improved process for calculating a convolution in a computerized processor of the type in which: coefficient values are representative a filter function; data values are representative of a data function; and there is multiplying of said coefficient values with said data values to produce result values that are collectively representative of the convolution; the improvement comprising: employing said coefficient values that are based on a derivation of the filter function.
18. The process of claim 17, wherein the improvement further comprises performing said multiplying concurrently for a plurality of said data values in a plurality of said processors.
PCT/US2008/004402 2007-04-06 2008-04-04 System for convolution calculation with multiple computer processors WO2008124061A1 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010502137A JP2010524080A (en) 2007-04-06 2008-04-04 Convolution calculation system using multiple computer processors

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US91062607P 2007-04-06 2007-04-06
US60/910,626 2007-04-06
US11/854,215 US20080250092A1 (en) 2007-04-06 2007-09-12 System for convolution calculation with multiple computer processors
US11/854,215 2007-09-12

Publications (1)

Publication Number Publication Date
WO2008124061A1 true WO2008124061A1 (en) 2008-10-16

Family

ID=39827918

Family Applications (1)

Application Number Title Priority Date Filing Date
PCT/US2008/004402 WO2008124061A1 (en) 2007-04-06 2008-04-04 System for convolution calculation with multiple computer processors

Country Status (4)

Country Link
JP (1) JP2009010925A (en)
CN (1) CN101652770A (en)
TW (1) TW200842699A (en)
WO (1) WO2008124061A1 (en)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2564285A (en) * 2016-07-01 2019-01-09 Google Llc Convolutional neural network on programmable two dimensional image processor

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10122346B2 (en) * 2017-03-03 2018-11-06 Synaptics Incorporated Coefficient generation for digital filters

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030113031A1 (en) * 1997-04-15 2003-06-19 Wal Gooitzen Siemen Van Der Parallel pipeline image processing system
US20070041438A1 (en) * 2004-01-30 2007-02-22 Sony Corporation Sampling rate conversion device and method, and audio device
US20070070079A1 (en) * 2002-01-17 2007-03-29 University Of Washington Programmable 3d graphics pipeline for multimedia applications

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20030113031A1 (en) * 1997-04-15 2003-06-19 Wal Gooitzen Siemen Van Der Parallel pipeline image processing system
US20070070079A1 (en) * 2002-01-17 2007-03-29 University Of Washington Programmable 3d graphics pipeline for multimedia applications
US20070041438A1 (en) * 2004-01-30 2007-02-22 Sony Corporation Sampling rate conversion device and method, and audio device

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2564285A (en) * 2016-07-01 2019-01-09 Google Llc Convolutional neural network on programmable two dimensional image processor
GB2564285B (en) * 2016-07-01 2019-07-17 Google Llc Processor and computer program product configured to cause performance of a two-dimensional convolution
US10546211B2 (en) 2016-07-01 2020-01-28 Google Llc Convolutional neural network on programmable two dimensional image processor
US10789505B2 (en) 2016-07-01 2020-09-29 Google Llc Convolutional neural network on programmable two dimensional image processor
US12020027B2 (en) 2016-07-01 2024-06-25 Google Llc Convolutional neural network on programmable two dimensional image processor

Also Published As

Publication number Publication date
TW200842699A (en) 2008-11-01
JP2009010925A (en) 2009-01-15
CN101652770A (en) 2010-02-17

Similar Documents

Publication Publication Date Title
US7814297B2 (en) Algebraic single instruction multiple data processing
USRE46712E1 (en) Data processing device and method of computing the cosine transform of a matrix
CN103092562B (en) Control the device of the bit correction of shift grouped data
JP3750820B2 (en) Device for performing multiplication and addition of packed data
CN100447777C (en) Processor
CN111465924A (en) System and method for converting matrix input to vectorized input for a matrix processor
US20040122887A1 (en) Efficient multiplication of small matrices using SIMD registers
Bowman et al. Efficient dealiased convolutions without padding
WO2015114305A1 (en) A data processing apparatus and method for executing a vector scan instruction
JPS6125188B2 (en)
JPH11203272A (en) Device, system and method for east fourier transformation processing
EP1978450A2 (en) Signal processing
JP3092534B2 (en) Block IIR processor
WO2008124061A1 (en) System for convolution calculation with multiple computer processors
US7774399B2 (en) Shift-add based parallel multiplication
EP3655851A1 (en) Register-based complex number processing
JP3709291B2 (en) Fast complex Fourier transform method and apparatus
Guo An efficient parallel adder based design for one dimensional discrete Fourier transform
Azarmehr et al. A Simple Central Processing Unit with Multi-Dimensional Logarithmic Number System Extensions
GR20170200090U (en) Element by vector operations in a data processing apparatus
GR20170200089U (en) Multiply-accumulation in a data processing apparatus
CA2339919A1 (en) A method and system for processing matrices of complex numbers

Legal Events

Date Code Title Description
WWE Wipo information: entry into national phase

Ref document number: 200880011407.7

Country of ref document: CN

121 Ep: the epo has been informed by wipo that ep was designated in this application

Ref document number: 08727290

Country of ref document: EP

Kind code of ref document: A1

DPE1 Request for preliminary examination filed after expiration of 19th month from priority date (pct application filed from 20040101)
ENP Entry into the national phase

Ref document number: 2010502137

Country of ref document: JP

Kind code of ref document: A

NENP Non-entry into the national phase

Ref country code: DE

122 Ep: pct application non-entry in european phase

Ref document number: 08727290

Country of ref document: EP

Kind code of ref document: A1