Libre RISC-V Mailing list Archives (accessible via public-inbox)
 help / color / Atom feed
From: bugzilla-daemon@libre-riscv.org
To: libre-riscv-dev@lists.libre-riscv.org
Subject: [libre-riscv-dev] [Bug 216] LOAD STORE buffer needed
Date: Sun, 15 Mar 2020 21:19:49 +0000
Message-ID: <bug-216-13-N0gqc8vUFf@http.bugs.libre-riscv.org/> (raw)
In-Reply-To: <bug-216-13@http.bugs.libre-riscv.org/>

http://bugs.libre-riscv.org/show_bug.cgi?id=216

--- Comment #12 from Luke Kenneth Casson Leighton <lkcl@lkcl.net> ---
jacob i'm extending the LD/ST-address-conflict matrix to unary-overlap in the
last LSB 4 bits of the address.
an unary map (LD byte == 0b0000 0000 0000 0001, LD dword = 0b0000 0000 1111
1111)
then shifted up by the LSBs of the address, and split into two (if there is
a misalignment), means that two bit-level comparisons detect if the LDs overlap
in the last 4 bits of the address.

the current system already compares bits 4 thru 11 as an *binary* address.
by combining with the unary system it gives a full guaranteed detection
of overlap, based not just on the address but on the length of the operation.

however that leaves the top bits (11 thru 39 or 48, whatever we decide the VM
page size to be).

and that can be taken care of by a 4 or 8 entry mini-L1-cache-aka-LD/ST-buffer

however what is nice is that the mini-L1-cache can:

a) use the fact that the address-conflict matrix has *already* detected
(compared) addresses in bits 0-11

b) find those addresses which *are* equal (in bits 4 and above)

c) make sure the upper bits (11+) are also equal

d) use a merge of the *unary* maps of bits 0..3 to detect which LDs/STs are
covering the same L1 cache line, for all addresses detected in (b+c)

the unary map "merge" is where a popcount will tell us which is the best one to
put straight through to the L1 cache.  if all 16 bits (when merged) are set, we
know that's a full cache line.

the nice thing is, it's not actually that complicated.  we don't want to make
the *entire* L1 cache line this (hence a mini-pre-L1-cache) because it would
mean a popcount function on absolutely every single line of the L1 cache, and a
lot more besides.

plus, an "optimisation" is that for those address bits 4-11, well, because
we've already compared them, instead of doing the comparison again, we can use
the *conflict matrix row number* as a substitute.  i think.

i have to check that.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
_______________________________________________
libre-riscv-dev mailing list
libre-riscv-dev@lists.libre-riscv.org
http://lists.libre-riscv.org/mailman/listinfo/libre-riscv-dev

  parent reply index

Thread overview: 63+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-11 20:28 [libre-riscv-dev] [Bug 216] New: " bugzilla-daemon
2020-03-11 22:54 ` [libre-riscv-dev] [Bug 216] " bugzilla-daemon
2020-03-11 23:08 ` bugzilla-daemon
2020-03-12  1:54 ` bugzilla-daemon
2020-03-12 11:13 ` bugzilla-daemon
2020-03-12 13:35 ` bugzilla-daemon
2020-03-12 17:29 ` bugzilla-daemon
2020-03-13 11:50 ` bugzilla-daemon
2020-03-13 18:37 ` bugzilla-daemon
2020-03-13 20:16 ` bugzilla-daemon
2020-03-15 21:19 ` bugzilla-daemon [this message]
2020-03-16 17:25 ` bugzilla-daemon
2020-03-23 10:21 ` bugzilla-daemon
2020-03-24 13:55 ` bugzilla-daemon
2020-03-24 14:22 ` bugzilla-daemon
2020-03-24 18:00 ` bugzilla-daemon
2020-03-24 20:19 ` bugzilla-daemon
2020-03-24 20:27 ` bugzilla-daemon
     [not found] <bug-216-13@https.bugs.libre-soc.org/>
2020-04-19  9:51 ` bugzilla-daemon
2020-04-19  9:57 ` bugzilla-daemon
2020-04-19 15:22 ` bugzilla-daemon
2020-04-19 17:46 ` bugzilla-daemon
2020-04-20  9:10 ` bugzilla-daemon
2020-04-22 10:53 ` bugzilla-daemon
2020-04-22 12:17 ` bugzilla-daemon
2020-04-25 12:40 ` bugzilla-daemon
2020-04-26 11:28 ` bugzilla-daemon
2020-04-27 11:56 ` bugzilla-daemon
2020-04-29 11:16 ` bugzilla-daemon
2020-04-29 21:42 ` bugzilla-daemon
2020-05-01 13:27 ` bugzilla-daemon
2020-05-01 13:33 ` bugzilla-daemon
2020-05-04 10:21 ` bugzilla-daemon
2020-05-04 20:11 ` bugzilla-daemon
2020-05-06  0:33 ` bugzilla-daemon
2020-05-06  1:09 ` bugzilla-daemon
2020-05-06  1:11 ` bugzilla-daemon
2020-05-06  8:29 ` bugzilla-daemon
2020-05-06  8:42 ` bugzilla-daemon
2020-05-06 12:39 ` bugzilla-daemon
2020-05-06 13:12 ` bugzilla-daemon
2020-05-18  4:09 ` bugzilla-daemon
2020-05-23 15:17 ` bugzilla-daemon
2020-05-23 15:23 ` bugzilla-daemon
2020-05-24 19:29 ` bugzilla-daemon
2020-05-24 19:39 ` bugzilla-daemon
2020-05-25 10:36 ` bugzilla-daemon
2020-05-25 13:55 ` bugzilla-daemon
2020-05-26 12:50 ` bugzilla-daemon
2020-05-27 11:10 ` bugzilla-daemon
2020-05-28 12:35 ` bugzilla-daemon
2020-05-28 12:38 ` bugzilla-daemon
2020-05-28 13:07 ` bugzilla-daemon
2020-05-28 13:26 ` bugzilla-daemon
2020-05-28 20:34 ` bugzilla-daemon
2020-05-29 13:56 ` bugzilla-daemon
2020-05-29 16:17 ` bugzilla-daemon
2020-05-30 19:40 ` bugzilla-daemon
2020-06-02 18:26 ` bugzilla-daemon
2020-06-04 16:49 ` bugzilla-daemon
2020-06-05 19:17 ` bugzilla-daemon
2020-06-05 19:40 ` bugzilla-daemon
2020-06-07 23:42 ` bugzilla-daemon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-216-13-N0gqc8vUFf@http.bugs.libre-riscv.org/ \
    --to=bugzilla-daemon@libre-riscv.org \
    --cc=libre-riscv-dev@lists.libre-riscv.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

Libre RISC-V Mailing list Archives (accessible via public-inbox)

Archives are clonable: git clone --mirror https://inbox.libre-soc.org/libre-riscv-dev

Example config snippet for mirrors


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git