It entirely depends on how you want to program your GPU. If you want fine grained control, you should really use raw OpenCL/CUDA. If however you need something higher level, it may be better to choose one of a number of DSLs that are available. E.g. Haskell's accellerate (for array programming), a DSL from the Delite/Forge project.
For general purpose high level programming however, there isn't really anything acceptable. Skeletal/pattern based programming is covered fairly well with frameworks such as SkelCL or SkePU, however (from what I've seen) there doesn't seem to be a nice functional, or even procedural general purpose language for GPU programming.
For general purpose high level programming however, there isn't really anything acceptable. Skeletal/pattern based programming is covered fairly well with frameworks such as SkelCL or SkePU, however (from what I've seen) there doesn't seem to be a nice functional, or even procedural general purpose language for GPU programming.