63 static void slave(
void);
68 static unsigned int numCalls = 0;
69 for (
unsigned int i = 0; i <
numEntries; ++i )
70 ret[i] = i + numCalls;
78 static double do_work(
double* work);
80 int main(
int argc,
char **argv)
86 MPI_Init(&argc, &argv);
90 MPI_Comm_rank(MPI_COMM_WORLD, &myrank);
116 tc * ( ( ne * (ne - 1.0) )/2.0 ) +
117 ne * ( tc * (tc - 1.0) )/2.0;
122 MPI_Comm_size(MPI_COMM_WORLD, &ntasks);
126 for (rank = 1; rank < ntasks; ++rank) {
146 while (work != NULL) {
176 for (rank = 1; rank < ntasks; ++rank) {
177 MPI_Recv(&result, 1, MPI_DOUBLE, MPI_ANY_SOURCE,
178 MPI_ANY_TAG, MPI_COMM_WORLD, &status);
185 for (rank = 1; rank < ntasks; ++rank) {
186 MPI_Send(0, 0, MPI_INT, rank,
DIETAG, MPI_COMM_WORLD);
188 cout <<
"Tot = " << tot <<
", expected = " << expectedTot << endl;
203 MPI_Recv( work,
numEntries, MPI_DOUBLE, 0, MPI_ANY_TAG,
204 MPI_COMM_WORLD, &status);
208 if (status.MPI_TAG ==
DIETAG) {
218 MPI_Send(&result, 1, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD);
int main(int argc, char **argv)
static double do_work(double *work)
static double * get_next_work_item()