This one is from 2007 when the unified shader pipeline was still new, graphics cards switched from vector processors to scalar processors and geometry shaders had been introduced (seriously, this was 7 years ago and here people are still behaving as if shaders were some crazy new stuff...). However, the article is about optimizing shaders for that hardware, offers some really interesting insights and while most things aren´t as critical anymore, most are still relevant.
http://developer.amd.com/wordpress/media/2012/10/ATI_Radeon_HD_2000_programming_guide.pdf