HSA will only work with a good programming interface. Right now, our programming interfaces for HSA like work are, frankly, terrible.
The first big issue is that the model for writing programs looks something like this:
Write in C, load giant string make api call to compiler for giant string, pray that nothing bad happens, pass compiled code into magic API, query magic api for results from program". The giant strings are either CUDA, OpenCL, or some other monstrosity.
The next problem is that the languages are terribly restrictive and low level. Do you like playing with random memory addresses and pointers? because that is what you get, loads of memory addresses and pointer work (especially if you want to be fast).
And finally, the type of data which this is good for is pretty limited. It works great if you want to take every value in a big blob of data and multiply it by 8. It isn't so great if you need to perform a bunch of financial logic that has to access seemingly random portions of the data. In other words, it makes good short work of things like cryptography, compression, and maybe a couple of other things. It fails at handling a request for a web server, talking with a database, or several other mundane but all to common problems.
Even things that benefit from moer cores won't necessarily benefit from 1000 extra GPGPU cores. (A web server being a great example of this).