On the point or portability, there's then a distinction of your focus. If you do research on numerical methods, then yes, you would write highly optimized code for a particular machine, as an end in and of itself. I myself am merely a user, and our research group does not have the expertise to write such optimized code. We pay for time on supercomputing clusters, which constantly bring online new machines and retire old ones. Every year our subscription can change, and we are allowed to use resources on different computers. Therefore, from my standpoint, portability is very important. Otherwise, if we were to write our own code in-house, we basically have a 1 year (ok, fine, maybe 2 or 3 year) window in which to develop, test, and run it. It just doesn't seem worthwhile to spend so much effort developing a one-time use piece of code. I'd rather write something which will outlive my stay in the research program.