I've already programed a grammatical evolution on GPU with a very satisfactory result (an improvement on time of about 140% with relative small datasets, expecting better results whith big ones). Currently, using CUDA, I just 'fill' one core on my GPU, having a low memory usage so i'm thinking about filling every multiprocesor by executing the same code. I'm talking, of course, of populating synchronous islands and using them as ecosystems with ocasional information sharing.
I've thought aswell on modifiying my algorithm for being run on a homemade raspberry cluster (not built yet) and treat every raspberry as an island aswell.
My problem is that, without implementing both systems, I don't know how to calculate or estimate what the best approach will be or knowing if the number of cores will result on a better execution time.
I know there are values i'll have to take in consideration, such as FLOPS of both systems, number of CUDA cores or raspberries, memory bandwidth ,etc. But i'd like to make a equation as exact as possible and I don't even know how to start to deal with the problem.
I know that is a very general problem, any suggestion will be listened to. I'm can provide any further information by editing the question
Thank you
Edit 1: In order to clarify the two first comments below this post i'll edit at here:
@Raphael♦ There will be communication about once every 10 seconds, with a transference of a bidimensional array of int[255][10] I'm not sure, maybe (probably) i'll be able to fit the memory of a raspberry. The most important memory size used contains on every thread a matrix of int[255][500]. The communication between the threads have not to be synchronous at all, they could be synchronized with a random couple they found free on that moment.
@TRex22 It's good to know that rasps aren't a good testing evnironement for researching purposes. My algorithm takes an input with an array of two or three points (x,y) or (x,y,z) and calculates the mathematical function f(x)=y or f(x,y) = z. The big matrix i have mentioned before, are DNA which codifies results for productions in a grammar (grammatical evolution). In my current algorithm the bandwith is not REALLY important, because every generation i'll only transfer the best solution (with a size of int[255]). Thanks anyway for your suggestion on OpenMP an MPI, i'll take a look.