I have a feeling glass jaws like this are one reason memory renaming got added to Ice Lake. Arguments passed by address on the stack can easily suffer this slow store forwarding fate, and the compiler can't do anything about it across non-inlined function boundaries.
-
-
-
That's much less common on x64 vs x86 code since they changed the calling convention, but it still happens all the time, as in your example of passing-by-pointer (or reference). Ice Lake won't actually help your case, I think, because it seems vector stores aren't renamed.
- Još 3 druga odgovora
Novi razgovor -
-
-
FYI there’s a typo in “modvqu”
-
Thank you, fixed!
Kraj razgovora
Novi razgovor -
-
-
I think in the last assembly example the %12 should be %r12?
-
Fixed, thank you! That's what I get for physically separating work and personal blogging (:
Kraj razgovora
Novi razgovor -
-
-
Great read, thanks!
-
Just read it as well. Fascinating. I hope more such blog posts will follow. Reminds me a bit of that binary search stalls masked using coroutines talk at cppcon.
- Još 3 druga odgovora
Novi razgovor -
-
-
Nice write-up. On Xbox 360 there was no store forwarding so a load-hit-store (a load from a recently stored address) would flush the pipelines to wait for the correct value. It cost about 40 cycles. Ouch. Best to avoid that.
- Još 2 druga odgovora
Novi razgovor -
Čini se da učitavanje traje već neko vrijeme.
Twitter je možda preopterećen ili ima kratkotrajnih poteškoća u radu. Pokušajte ponovno ili potražite dodatne informacije u odjeljku Status Twittera.