[Libre-soc-dev] [RFC] Matrix and DCT/FFT SVP64 REMAP

Luke Kenneth Casson Leighton lkcl at lkcl.net
Sat Jul 3 01:56:28 BST 2021


hm. to create the appearance of matrix multiply as 3 flattened arrays,
if the formula is this:

for x in x_r:
 for y in y_r:
   for z in z_r:
     result[y][z] +=
        a[x][y] *
        b[x][z]

(something like that)

then the flattened indices are actually:

for x in x_r:
 for y in y_r:
   for z in z_r:
     ridx = zlen*y+z
     aidx = ylen*x+y
     bidx = zlen*x+z

and the 1D array form would be:

     result[zidz] +=
          a[aidx] *
          b[bidx]

which actually means, the 3 bits currently allocated to "permute
order" are redundant, and can be replaced with:

index = 0
multby = 1
if permute[0]
    index = z
    multby *= zdim
if permute[1]:
    index *= multby
    index += y
    multby *= ydim
if permute[2]:
    index *= multby
    index += x

then, to generate ridx you would set:

  permute = 0b011

for aidx:

  permute = 0b101

for bidx:

  permute = 0b110

something like that?

no, it's more sophisticated than that, isn't it.  the order of what
gets added and multby'd has to be controlled, doesn't it?

needs more thought.

l.



More information about the Libre-soc-dev mailing list