views:

72

answers:

3

I'm looking to implement 'branch and bound' over a cluster (like Amazon's say), as I want it to be horizontally scalable, not limited to a single CPU. There's a paper "Task Pool Teams: A Hybrid Programming Environment for Irregular Algorithms on SMP Clusters" by Judith Hippold and Gudula Runger. It's basically a bottom-up, task-stealing framework like Intel's TBB, except for ad-hoc networks instead of shared memory. If this library was available I'd use it (replacing the local, threaded part with TBB). Unfortunately they don't seem to have made it available for download anywhere that I could find, so I wonder are there other implementations, or similar libraries out there?

It doesn't look like Microsoft's Task Parallel Library has the equivalent, either, to steal from.

(I tried to make a tag 'taskpool' after 'threadpool', the most-used variant (before 'thread-pool') but, didn't have enough points. Anyone heavy enough think it's worth adding?)

edit:

I haven't tried it yet, but it PEBBL (under here: software.sandia.gov/trac/acro/wiki/Packages) claims to scale really high. The paper that the answerer mentions from the Wiley book 'Parallel Branch-and-Bound Algorithms', Crainic, Le Cun and Roucairol, 2006, from "Parallel Combinatorial Optimization", 2006 edited by El-Ghazali Talbi was where I found it, and there are other libraries listed; some may be better, I reserve the right to update this :). Funny that Google didn't find these libs, either my Googling was weak or Google itself fails to be magic sometimes.

+1  A: 

you basically need some kind of distributed synchronization/queue

I suggest looking into armci as a low-level distributed memory interface with synchronization and build on top of that.

Alternative is to allocate mpi process as Master to distribute work allocation.

http://www.cs.utk.edu/~dongarra/ccgsc2008/talks/Talk10-Lusk.pdf

aaa
+1  A: 

One thing you might consider is investigating shared message queues like RabbitMQ. It is a AMQP server (a messaging protocol developed so distributed applications can send messages to each other).

Andrew
+1  A: 

When you say "over a cluster" it sounds like you mean distributed memory, and parallelizing branch and bound is a notoriously difficult problem for distributed memory - at least in a way that guarantees scalability. The seminal paper on this topic is available here, and there's an excerpt from a Wiley book on the topic here.

Shared memory branch is bound is an easier problem because you can implement a global task queue. A good high level description of how to do both shared memory and message passing implementations is available here. If nothing else, the references section is worth purusing for ideas and existing implementations.

Rob Neely
Thanks, I found PEBBL under here: https://software.sandia.gov/trac/acro/wiki/PackagesSee my modified topic for details (not quite enough space here). BTW in your last-mentioned paper, they distribute the nodes master -> worker, and the master becomes a bottleneck. More recent architectures do master-hub-worker (to any number of layers of hubs) or task-stealing, which the 'Task Pool Teams...' I started with, does. So, I'll see how well this or one of the others does but, they make good claims.
JDonner