03.12.2012 Views

C++ for Scientists - Technische Universität Dresden

C++ for Scientists - Technische Universität Dresden

C++ for Scientists - Technische Universität Dresden

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

260 CHAPTER 13. PARALLELISM<br />

}<br />

MPI Finalize();<br />

return 0 ;<br />

13.2.2 Generic Message Passing<br />

Everybody sends to process number 0.<br />

#include <br />

#include <br />

#include <br />

int main (int argc, char∗ argv[])<br />

{<br />

MPI Init(&argc, &argv);<br />

}<br />

int myrank, nprocs;<br />

MPI Comm rank(MPI COMM WORLD, &myrank);<br />

MPI Comm size(MPI COMM WORLD, &nprocs);<br />

float vec[2];<br />

vec[0]= 2∗myrank; vec[1]= vec[0]+1;<br />

// Local accumulation<br />

float local= std::abs(vec[0]) + std::abs(vec[1]);<br />

// Global accumulation<br />

float global= 0.0f;<br />

MPI Status st;<br />

// Receive from predecessor<br />

if (myrank > 0)<br />

MPI Recv(&global, 1, MPI FLOAT, myrank−1, 387, MPI COMM WORLD, &st);<br />

// Increment<br />

global+= local;<br />

// Send to successor<br />

if (myrank+1 < nprocs)<br />

MPI Send(&global, 1, MPI FLOAT, myrank+1, 387, MPI COMM WORLD);<br />

else<br />

std::cout ≪ ”Hello, I am the last process and I know that |v| 1 is ” ≪ global ≪ ”.\n”;<br />

MPI Finalize();<br />

return 0 ;<br />

low abstraction level<br />

The library per<strong>for</strong>ms the reduction.<br />

#include <br />

#include <br />

#include

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!