[Libre-soc-dev] cray-style vector of 40 years setting VL=0 at runtime

lkcl luke.leighton at gmail.com
Tue Oct 4 13:47:21 BST 2022

summary so far, almost complete:

* REMAP is ignored on Scalar and is irrelevant
* Fail-First and other VL truncation is a mess and must raise
   Illegal Instruction if attempted in Auto-Scalar (Auto-VL=1) Mode
* SV.Branches are so comprehensive they just should not be
   touched at all. also their existing behaviour *may* be needed
   as a fall-back.
* predicate-result, saturate, normal are all fine, caveat being
   predication in general
* predication with zeroing is fine (first bit is always used)
* predicate masks with all-Scalar args, nonzeroing, and VL>1
   is presently a request, "please test ALL bits".  this because
   although the *predicate* is vector-tested from 0..VL-1 bits
   neither REMAP nor vector-offsetting *at all* alter the reg
   numbers on Scalars.

in other words only if the ENTIRE predicate is zero (or all 1s
on ~r3 or NE) will the scalar operation be skipped.  that's not
"all bits of r3", that's "only the first VL bits".

contrast this really quite useful behaviour (that will be lost) with
ONLY testing the FIRST bit: to emulate the prior behaviour would
need a sv.cror mapreduce/reduction on CR Fields or to use
quite a few instructions, possibly an SV.BranchConditional,
if r3, r10 or r30 is the predicate, to get down to that one bit
to then use as a new predicate on an Auto-Scalared (Auto-VL=1)

this therefore leaves two issues to decide:

1) is the cost in hardware of actually having to decode the
     instruction Suffix *and* the EXTRA2/3 *and* Fail-First mode
     *and* skipping SV.Branch instructions in order to Auto-set
     VL=1 okay?

     that's a hell of a lot of gates right at a critical "Issue" juncture,
     which would otherwise just require checking for any changes
     to SVSTATE.

     given that Fail-First *already* has to be searched for due to its
     interaction with SVSTATE.VL, given that setvl etc. has to be
     searched for, perhaps it is not relatively high

2) is losing the ability to test all *relevant* bits of a predicate mask
     worth it?

     this is a big unknown, i honestly have no idea as to how useful
     this previously undiscovered behaviour would be.

thoughts please.


More information about the Libre-soc-dev mailing list