Memory Barriers: A Hardware View for Software Hackers (2010) [pdf]
rdrop.com
rdrop.com
I wrote a driver for FreeBSD recently and had to implement memory barriers to get it accepted into mainline. I had never dealt with memory barriers before and I couldn't help but think "great! what is this new thing I have to keep in mind?" It wasn't all that difficult, but still...
We have built up so many layers of complexity that it's becoming very difficult to secure things, for example. I really hope we can somehow drastically simplify computers/software in the future.
There's a really gnarly V*I curve which is not linear(as clock speed increases, voltage also needs to come up) which makes good performance even more key.
Copying data and computing things "just in case" make the software much easier to modify. But it is not a good way to maximize "speed related metrics".
More complexed manufacturing process (smaller), more complex instruction (AVX2, crypto), more complex branch prediction, more complex micro/macro op decoding, more complex bus (QuickPath), the list goes on.
The memory barrier semantics on x86(_64) are the strictest of all the arch. This is at the expense of expense of complexity (cache synch protocols). Compare that to the other archs where the semantics presented to software a more complex.
In my mind the chip designers have handled a lot of complexity on their end to simplify it on the software designers. If you go far enough down the rabbit hole (drivers, high performance) you might have to deal with some of the complexity.