3 ms·
This. In my case a 1Mbyte memcpy in the middle of a loop this morning. Enough to blow the CPU cache out of the water... 300x improvement instantly by moving it
by pling 12y ago
This. In my case a 1Mbyte memcpy in the middle of a loop this morning. Enough to blow the CPU cache out of the water...
300x improvement instantly by moving it out of the loop.
- dbaupp 12y agoAre you sure it wasn't just because you were then no longer doing a large memcpy repeatedly?
- pling 12y agoYes it was entirely covered by that :) I think it was covered by "naive memory management" and "shitty outsourcing". I'm paid to fix their stuff.
- dbaupp 12y agoIf the problem was just the time taken to do a 1MB copy inside a loop, why did you say the problem was clearing the CPU caches?
- pling 12y agoBecause the CPU has 32k of cache in this case (ARM) so the memcpy was evicting the entire cache several times in the loop as a side effect of doing the work. The actual function of the loop had good cache locality as the data was 6 stack vars totalling about 8k.
- dbaupp 12y agoSo? Copying a megabyte is a really expensive thing to do inside a loop, even ignoring caches. (A full speed memcpy would take 40 microseconds, based on a memory bandwidth of 24 GB/s, which is a long time.)
- tomp 12y agoHaha :) Maybe the shipped a better product, but the management said "No, it's not possible that this could run that fast. Something must be wrong.", so they put in some "waiting".