#include #include #include int main() { int rank; double prefixSums[3]; double values[3] = {1, 2, 3}; MPI_Init(NULL, NULL); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (rank % 2 == 0) MPI_Scan(values, prefixSums, 3, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); else MPI_Exscan(values, prefixSums, 3, MPI_DOUBLE, MPI_SUM, MPI_COMM_WORLD); printf("I'm rank %d, my results are %f, %f, %f\n", rank, prefixSums[0], prefixSums[1], prefixSums[2]); assert(prefixSums[0] == rank+1 && prefixSums[1] == 2 * (rank + 1) && prefixSums[2] == 3 * (rank + 1)); MPI_Finalize(); return 0; }