[mpich-discuss] Why does MPICH perform busy wait?

Tim Jammer 3jammer at informatik.uni-hamburg.de
Thu Sep 29 09:07:33 CDT 2016


Hi

Within my bachelor thesis I come across that the MPICH Implementation 
implements a busy wait.
In our application, this leads to a waste of energy as all processes are
spinning in a barrier while one process performs I/O.

Therefore I want to propse to not wait as busy as it is done now.
On the test system this saves 50% energy compared to busy wait.
My basic prototype implementation causes only a negligible additional 
runtime overhead.

My proposal is to sleep between polling if the communication has not 
finished yet.
Within the first few iterations the implementation should not sleep, to 
guarantee maximum performance.
But if the communication was not finished right away, the importance of 
saving energy grows.
Therefore I propose to sleep and increase this sleeping time after every 
polling
up to a maximum value in order to not waste much additional runtime on 
waiting.
This will allow the CPU to power down and save energy.

my basic prototype basically works as follows:

int stime=0;
     while (/* Incoming data does not match the request*/)
     {
usleep(stime);
stime++;
// do the actual polling...

I can imagine, that the user can choose to activate this behaviour (i.e. 
with an environment variable) if he wants to save energy.

I have attached the section of my thesis which describe it more in detail.


My question is: was something like this considered before and are there 
any arguments why this was not implemented.

Regards
Tim Jammer
-------------- next part --------------
A non-text attachment was scrubbed...
Name: busyWait.pdf
Type: application/pdf
Size: 380206 bytes
Desc: not available
URL: <http://lists.mpich.org/pipermail/discuss/attachments/20160929/449c7efb/attachment.pdf>


More information about the discuss mailing list