It seems that a side-effect of writing parallel code for multiple processors is that it requires highly specialized libraries and/or hardware support. Though I'm sure that some of the theory behind different libraries is similar, in practice, writing code for each can be very different.
How different are the programming paradigms or thought processes behind different parallel libraries?
How rapidly is the parallel programming environment changing (ex: every 5 years, a new parallel library becomes the "norm")?
To add to this stream of thought, I think your choice of GPU-library/GPU-programming language is determined by your requirements.
For example, lets say you were writing an iOS app that needs to utilize the GPU to serve a reasonable frame rate. Now, if your goals include things like the ability to port your app to Android some day in the future, you might want to stick with cross-platform compatible languages like OpenGLES. While on the other hand, if peak performance optimization is your top priority, then you'll want to stick with a language like Metal, which will give you better performance on iOS devices at the cost of portability.