X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=simple_v_extension.mdwn;fp=simple_v_extension.mdwn;h=6052db45f14896bfcb239098d0c18fcb053f1f5a;hb=39ff8e9c2e131af301fed4057c03ae5ef167bf6f;hp=a62cbca7729c6bd3cdf562770e041eb70d2fcf4d;hpb=10d163a1d1c433e36355127b8c6c564db74202f4;p=libreriscv.git diff --git a/simple_v_extension.mdwn b/simple_v_extension.mdwn index a62cbca77..6052db45f 100644 --- a/simple_v_extension.mdwn +++ b/simple_v_extension.mdwn @@ -1680,6 +1680,38 @@ of the L1 cache without architectural harm (may incur additional latency). +> > > so, let's say instead of another LR *cancelling* the load +> > > reservation, the SMP core / hardware thread *blocks* for +> > > up to 63 further instructions, waiting for the reservation +> > > to clear. +> > +> > Can you explain what you mean by this paragraph? +> +> best put in sequential events, probably. +> +> LR <-- 64-instruction countdown starts here +> ... 63 +> ... 62 +> LR same address <--- notes that core1 is on 61, +> so pauses for **UP TO** 61 cycles +> ... 32 +> SC <- core1 didn't reach zero, therefore valid, therefore +> core2 is now **UNBLOCKED**, is granted the +> load-reservation (and begins its **own** 64-cycle +> LR instruction countdown) +> ... 63 +> ... 62 +> ... +> ... +> SC <- also valid + +Looks to me that you could effect the same functionality by simply +holding onto the cache line in core 1 preventing core 2 from + getting past the LR. + +On the other hand, the freeze is similar to how the MP CRAYs did +ATOMIC stuff. + # References * SIMD considered harmful