Is Parallel Programming Hard, And, If So, What Can You Do About It? - The purpose of this book is to help you program shared-memory parallel machines without risking your sanity.
It provides in-depth analysis of parallel programming at the cpu level of programming. A downloadable, git versioned, pdf.