az0re has quit [Remote host closed the connection]
<ZirconiumX>
echo 'REEBE: NOP qverpgbel vf n ut jbexvat pbcl! Erzbir nop/ naq er-eha "znxr".' | tr 'A-Za-z' 'N-ZA-Mn-za-m'
<ZirconiumX>
Claire has a sense of humour, it seems
<daveshah>
This is actually for a good reason
<daveshah>
It's so "ERROR" doesn't appear when make echos the command, unless there actually is an error
<ZirconiumX>
Mmm
<ZirconiumX>
But you can equally get Make to not echo the command, so
<daveshah>
I remember this being discussed before, but I can't remember where
<ZirconiumX>
(@ prefix)
<daveshah>
Yosys uses this, but it is disabled in verbose mode, iirc
rswarbrick has joined #yosys
X-Scale` has joined #yosys
anticw has quit [Ping timeout: 256 seconds]
X-Scale has quit [Ping timeout: 272 seconds]
X-Scale` is now known as X-Scale
anticw has joined #yosys
Asu has quit [Remote host closed the connection]
Asu has joined #yosys
Asu has quit [Remote host closed the connection]
Asu has joined #yosys
anticw has quit [Ping timeout: 256 seconds]
anticw has joined #yosys
jakobwenzel has quit [Remote host closed the connection]
anticw has quit [Ping timeout: 246 seconds]
anticw has joined #yosys
rswarbrick has quit [Remote host closed the connection]
citypw has quit [Ping timeout: 240 seconds]
emeb has joined #yosys
anticw has quit [Ping timeout: 246 seconds]
anticw has joined #yosys
rswarbrick has joined #yosys
jfcaron has joined #yosys
anticw has quit [Ping timeout: 240 seconds]
anticw has joined #yosys
<rswarbrick>
ZirconiumX: Hi there! Can we follow up quickly on PR #2083 here?
<ZirconiumX>
Sure
<rswarbrick>
Can you explain exactly what you measured? Those numbers definitely look worse with -DYOSYS_NO_IDS_REFCNT, but that seems slightly surprising to me (with or without the patch in the PR).
<ZirconiumX>
Execution time
<ZirconiumX>
Unfortunately I'm under WSL, so I can't run it under perf
<ZirconiumX>
(otherwise I would)
<rswarbrick>
That's not what I meant. Did you compile the same code with and without the flag? And was that with or without the patch in the PR?
<ZirconiumX>
Same code with and without the flag
<ZirconiumX>
Didn't touch the patch, since I had a hunch it wasn't necessary
<ZirconiumX>
Number of instructions has little correlation with speed
<rswarbrick>
Ok, so I think you've just proved that this benchmark isn't affected by time spent refcounting.
<rswarbrick>
Re # insns / speed: Yes, until you get an icache miss. yosys is 8MB, so this is actually relevant, I thin
<rswarbrick>
*think
<ZirconiumX>
...no
<rswarbrick>
Can you explain what the "...no" is in answer to?
<ZirconiumX>
If instruction count had any relation to speed then Rust code would not be competitive with C, for example
<ZirconiumX>
But because we live in a world with superscalar out of order execution, giant caches and latency hiding, I really don't see it as a problem
anticw has quit [Ping timeout: 260 seconds]
<ZirconiumX>
The entirety of the Yosys executable could fit in my processor's cache
<ZirconiumX>
And it won't all be used at once
anticw has joined #yosys
<rswarbrick>
Oh, so you have an 8MB L1 icache and then a separate dcache? That's quite a bit bigger than my laptop.
<ZirconiumX>
It doesn't need to all fit in L1
<rswarbrick>
... but if it doesn't then you get cache misses. Which cost time.
<ZirconiumX>
I feel like you're arguing on what you *think* the problem is
<rswarbrick>
I think you're arguing about what you think I'm trying to improve :-D
<ZirconiumX>
The SNES core is a pretty major workout for Yosys
<ZirconiumX>
At 19.4k LUT4s
<ZirconiumX>
If reference counting had any significant effect on the performance of Yosys, that would surely amplify it
<ZirconiumX>
But nothing changes
<rswarbrick>
Wait a sec...
<ZirconiumX>
27.2k cells, all of which need names (strings!)
<rswarbrick>
My motivation here is that the code does less stuff with the patch. This may or may not improve wall-clock times today, but it definitely won't hurt, and makes things simpler over time. You're right that wall-clock times are the right thing to balance against "should we make the code more complicated".
<ZirconiumX>
Regardless of my own feelings on the patch, it'll still get vetoed by Claire
<rswarbrick>
I would argue that your benchmarking shows that we should never use YOSYS_NO_IDS_REFCNT (for safety, since the performance cost is tiny) and that we may as well pass the smart pointers by reference to avoid +1 -1 round-trips.
<rswarbrick>
Ok. In which case, I hope she can weigh in on what she thinks the right approach is between do nothing / do something clever. I agree that the patch at the PR at the moment is neither of the two!
<ZirconiumX>
If it was my own code, I would probably merge your patch, tbh
<rswarbrick>
Thanks for your vote of confidence on the PR :-p
<ZirconiumX>
Though I'd be even more in favour of "use less IdStrings" over this
anticw has quit [Ping timeout: 256 seconds]
anticw has joined #yosys
<rswarbrick>
Yeah. I guess I understand the value of interning stuff into a symbol table, though, so I'm not completely sure.
<ZirconiumX>
The main aim is to speed up equality tests
<rswarbrick>
I've worked on a compiler in the past: I do understand what a symbol table does! :-)
<rswarbrick>
You also get a total ordering on symbols (operator<), which can be handy.
<rswarbrick>
e.g. you can compare sets of symbols for equality by first sorting (by the cheap integer comparison) and then ticking them off one-by-one.
<rswarbrick>
In a very different world, Maxima (a computer algebra system) uses this as a trick for efficiently representing multivariate polynomials!
<ZirconiumX>
In my own world - chess - we use sequential probability ratio tests to decide if something is better or not, but I haven't quite got the infrastructure to do that for FPGAs
<rswarbrick>
Hmm, that's a new phrase to me. /me goes googling...
<sorear>
oh you worked on maxima? need
<rswarbrick>
sorear: Not recently, but I spent quite a bit of time on it 10 years ago or so.
anticw has quit [Ping timeout: 256 seconds]
anticw has joined #yosys
vidbina has quit [Ping timeout: 246 seconds]
anticw has quit [Ping timeout: 256 seconds]
kraiskil has quit [Ping timeout: 260 seconds]
anticw has joined #yosys
dys has quit [Ping timeout: 244 seconds]
emeb_mac has joined #yosys
kraiskil has joined #yosys
anticw has quit [Ping timeout: 272 seconds]
anticw has joined #yosys
anticw has quit [Ping timeout: 260 seconds]
anticw has joined #yosys
jakobwenzel has joined #yosys
marex-cloud has quit [Ping timeout: 256 seconds]
kraiskil has quit [Ping timeout: 256 seconds]
rjeli has quit [Ping timeout: 240 seconds]
emilazy has quit [Ping timeout: 272 seconds]
kraiskil has joined #yosys
mithro has quit [Read error: Connection reset by peer]
bubble_buster has quit [Ping timeout: 240 seconds]
emilazy has joined #yosys
bubble_buster has joined #yosys
rswarbrick has quit [Ping timeout: 260 seconds]
mithro has joined #yosys
anticw has quit [Ping timeout: 256 seconds]
anticw has joined #yosys
emilazy has quit [Ping timeout: 272 seconds]
bubble_buster has quit [Ping timeout: 260 seconds]
az0re has joined #yosys
mithro has quit [Ping timeout: 260 seconds]
bubble_buster has joined #yosys
emilazy has joined #yosys
rjeli has joined #yosys
anticw has quit [Ping timeout: 256 seconds]
mithro has joined #yosys
anticw has joined #yosys
kraiskil has quit [Ping timeout: 264 seconds]
anticw has quit [Remote host closed the connection]