Sorry for this late reply.
As you know, due to the constant improvement of hardware and software, today, GPGPU programming has become much more richer, powerful and easier. A number of applications, from simple embarrassingly parallel to complex one having lot of interactions and dependency, have been implemented for GPUs. So, it has the capability to supports various types of application from different domains. However, the efficiency may vary depending on the particular application type.
Another point is, direct porting of an algorithm/application from CPU to GPU may not improve the efficiency as expected, or, may even degrade the overall performance. The algorithm/application needs to be adapted such a way that it suits GPU hardware model and corresponding programming language. That why, you'll find a lot of parallel version of well known algorithms more suitable of particular targeted GPU and programming model.
Before implementing/porting, a deep study of your existing application is very important. All the portions of an application may not be suitable to port on GPU. You've to analyse and identify the areas which are more suitable for GPU and which are not. Accordingly, you need to distribute your work on particular sub-system say GPU, CPU etc.
Below are few links which may be useful for you.
The 13 application areas where OpenCL can be used - Blog - StreamComputing
How GPU came to be used for general computation
Regards,