Quote Originally Posted by razzle View Post
In that case I strongly suggest you go back to the drawing board before you continue because you most certainly have an NP-hard problem on your hands. No amount of hardware and micro-optimizations will fix this. You need an algorithmic solution.
Unless the problem is defined incorrectly, NP (hard) problems tend not to have algorithmic solutions (or rather "none have been foud yet").

In that case, parallellizing is a feasible solution to try more possibilities in a given timeframe.

Small scale, this could be a rack of CPU servers.
Larger scale, this could be an elementary grid.
Massively scaled up, it could be a global effort.

There's a reason why we have such stuff like SETI@Home, Protein (un)folding and lots of other internet based efforts. It is by no means ideal, but it is a way to chop off a few digits in the total computation time needed.

Many NP (hard) type problems find "adequate" solutions using genetic algoritms, or "ant colonies" or other similar. In that case, parallellizing/sharing the computation means you can try significantly more combinations and find better results within the same amount of time.