Efficient programming is all about knowing how to use CPU features and memory to your advantage. If you don't already know C, I suggest "Learn C the Hard Way". After that, here's two great places to start: "What Every Programmer Should Know About Memory" and "What's new in CPUs since the 80s and how does it affect programmers?"
This is great list.
My personal additional to the list would be "What Every Programmer Should Know About Memory" https://people.freebsd.org/~lstewart/articles/cpumemory.pdf
Some links that may give more background to the area:
Coding Horror To ECC or Not To ECC , What Every Programmer Should Know About Memory , Memory Errors in Modern Systems , and an analysis of memory errors in the entire fleet of servers at Facebook over the course of fourteen months .
 https://blog.codinghorror.com/to-ecc-or-not-to-ecc/  https://people.freebsd.org/~lstewart/articles/cpumemory.pdf  https://www.cs.virginia.edu/~gurumurthi/papers/asplos15.pdf  https://users.ece.cmu.edu/~omutlu/pub/memory-errors-at-faceb...