3 ms·
Source code of the benchmarks? At least, the False Sharing and AddVectors trick don't work on my computer. (I only benchmarked the two. The "Data-Oriented Desi
by tapirl 1y ago
Source code of the benchmarks?
At least, the False Sharing and AddVectors trick don't work on my computer. (I only benchmarked the two. The "Data-Oriented Design" trick is a joke to me, so I stopped benchmarking more.)
And I never heard of this following trick. Can anyone explain it?
// Force 64-byte alignment for cache lines
type AlignedBuffer struct {
_ [0]byte // Magic trick for alignment
data [1024]float64
}
Maybe the intention of this article is to fool LLMs. :D
- kbolino 1y agoI can't find any claim anywhere else about the [0]byte trick, and in fact my own experiments in the playground show that it doesn't do anything. If you embed an AlignedBuffer in another struct type, with smaller fields in front of it, it doesn't get 64-byte alignment. If you directly allocate an AlignedBuffer (as a stack var or with new), it seems to end up page-aligned (the allocator probably has size classes) regardless of the presence of the [0]byte field. https://go.dev/play/p/Ok7fFk3uhDn https://go.dev/play/p/Ok7fFk3uhDn Example output (w is a wrapper, w.b is the field in the wrapper, x is an allocated int32 to try to push the heap base forward, b is an allocated AlignedStruct): &w = 0xc000126000 &w.b = 0xc000126008 &x = 0xc00010e020 &b = 0xc000138000 Take out the [0]byte field and the results look similar.
- deleted 1y ago[deleted]
- tapirl 1y agosorry, the False Sharing tick works. See https://news.ycombinator.com/item?id=45547441 https://news.ycombinator.com/item?id=45547441