The situation is thus; a set of calculations (written in C++) that would be best done making use of whatever GPU is available on the user's system, or their CPU if no such GPU exists, where that user system is not the build machine and will be of an unknown (but pretty standard desktop) configuration.
Currently, I can write code using Thrust but (unless I misunderstand) at the point of actually building it, the target is set (broadly speaking, Nvidia or just CPU) and the binary will only make use of GPU hardware on the user's machine (possible won't even run otherwise) if it's from the same GPU family as the binary was built for.
What I would like, in a magical ideal world, is a binary that will identify what (if any) GPU (Nvidia, ATI, fallback to just plain CPU) family is available on the machine its running on, and make use of it. Having to build three separate versions and make sure each user gets the right one for their particular machine is a non-starter (the targets are pretty standard desktops; Windows, Linux and Solaris - let's put that aside though, as having a different build for each of those three is completely acceptable; the aim is to have a binary for each of those three targets that identifies and uses the available GPU by itself, whether it's Nvidia, ATI or just plain CPU).
I have been typing some hopeful terms into the google but not found anything addressing this yet; for all I know it's a completely solved problem and I've just not typed the right words.
Can anyone tell me what (if any) the standard way to do this is?
Edits: removed bad thrust information, added note about ultimate target hardware