Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Fast way of multiplying two 1-D arrays

I have the following data:

A = [a0 a1 a2 a3 a4 a5 .... a24]
B = [b0 b1 b2 b3 b4 b5 .... b24]

which I then want to multiply as follows:

C = A * B' = [a0b0 a1b1 a2b2 ... a24b24]

This clearly involves 25 multiplies.

However, in my scenario, only 5 new values are shifted into A per "loop iteration" (and 5 old values are shifted out of A). Is there any fast way to exploit the fact that data is shifting through A rather than being completely new? Ideally I want to minimize the number of multiplication operations (at a cost of perhaps more additions/subtractions/accumulations). I initially thought a systolic array might help, but it doesn't (I think!?)

Update 1: Note B is fixed for long periods, but can be reprogrammed.

Update 2: the shifting of A is like the following: a[24] <= a[19], a[23] <= a[18]... a[1] <= new01, a[0] <= new00. And so on so forth each clock cycle

Many thanks!

like image 261
trican Avatar asked Oct 22 '22 12:10

trican


1 Answers

Is there any fast way to exploit the fact that data is shifting through A rather than being completely new?

Even though all you're doing is the shifting and adding new elements to A, the products in C will, in general, all be different since one of the operands will generally change after each iteration. If you have additional information about the way the elements of A or B are structured, you could potentially use that structure to reduce the number of multiplications. Barring any such structural considerations, you will have to compute all 25 products each loop.

Ideally I want to minimize the number of multiplication operations (at a cost of perhaps more additions/subtractions/accumulations).

In theory, you can reduce the number of multiplications to 0 by shifting and adding the array elements to simulate multiplication. In practice, this will be slower than a hardware multiplication so you're better off just using any available hardware-based multiplication unless there's some additional, relevant constraint you haven't mentioned.

like image 100
andand Avatar answered Oct 24 '22 17:10

andand