Description
The PUB Library [1] a german BSP lib contains a very interesting feature called "oblivious synchronization" or in short "BSP_OBLSYNC".
The signature of the method looks like this:
bsp oblsync (bsp, numMsgs)
{{{
The oblivious synchronization should be used if the programmer knows the number of messages
each processor will receive in a superstep. E.g., if each processor sends a message to its right
neighbour then every processor knows that it will receive exactly one message. Thus, in the oblivious
synchronization each processor waits until nmsgs are received. This type of synchronization
is much faster than the other one since no additional communication is needed. The standard
synchronization should be used if the number of messages to receive is unknown. Supersteps with
standard synchronization can alternate with oblivious synchronizations, but within one superstep
each processor has to use the same type of synchronization
}}}
With such an feature, we can greatly speedup kmeans clustering by avoiding barrier synchronization, because the message exchanged are constant throughout all supersteps.