While dividing my application in various tasks and convert it for a multi thread environment, I have realized that fundamentally I've got the base concept wrong: OpenCL is not suited for the kind of operations that I need to do in my app, but only for the mathematical part of the problem.
So at this point I was wondering if I could use MPI to fire up n threads on different devices, and then fire up OpenCL kernels if the device has a GPU.
Is this something that is commonly done, or using MPI exclude OCL and vice-versa?
My objective is to run an app on a computer and use any device attached to it (if present), to increase the computational power and share the task. The task itself is divided between crunching numbers (perfect for OCL), OGL render of the results coming from the data crunching part, UI management and interaction and data management (save, store, replace).
From what I understand MPI is not able to address threads to the GPU like OCL does, but OCL main use is math crunching, so it would not do any good if for example my app needs to access the network to retrieve information, or if it needs to use OGL to plot the results of a thread; in which case the best choice would be MPI.
Any suggestion about a viable option would be more than appreciated.