Latanius
Latanius

Reputation: 2653

MPI: master-slave with the master also doing work

I'm implementing a standard MPI master/slave system: there is a master that distributes work, and there are slaves who ask for chunks and process data.

However... if implemented in a naive way (rank==0 is master, the rest are slaves), the master ends up doing no real work, but still takes one core for what needs practically no real computing power. So I tried to implement a separate "scheduler" thread in the master, but that involved sending MPI messages to itself, and didn't really work...

Do you have any ideas how to solve this?

Upvotes: 3

Views: 2667

Answers (1)

Latanius
Latanius

Reputation: 2653

As I realized after some googling: you can send messages to yourself using tags. Tags are a kind of filter: if you do a recv for only tag==1, then you'll receive only those, with later messages being able to overtake eariler ones.

So, as for the solution:

  • tag the "scheduler to worker" and "worker to scheduler" messages with a different id
  • if rank==0: start a scheduler thread
  • afterwards, regardless of the rank, request work.

This way, the rank 0 worker won't receive its own "let's give me work" messages, because they will have a "to be received by the scheduler only" tag.

Edit: this thing doesn't really seem to be thread-safe though... (= it sometimes crashes in "free()" even though it's written in Python...) so I'd be still interested in the real & proven solution :)

Upvotes: 3

Related Questions