Tree Structured Communication
void Get_data1(float* a_ptr, float* b_ptr, int* n_ptr, int my_rank, int p) {
int I_receive( int stage, int my_rank, int* source_ptr);
int I_send(int stage, int my_rank, int p, int* dest_ptr);
void Send(float a, float b, int n, int dest);
void Receive(float* a_ptr, float* b_ptr, int* n_ptr, int source);
printf("Enter a, b, and n\n");
scanf("%f %f %d", a_ptr, b_ptr, n_ptr);
for (stage = 0; stage < Ceiling_log2(p); stage++)
if (I_receive(stage, my_rank, &source))
Receive(a_ptr, b_ptr, n_ptr, source);
else if (I_send(stage, my_rank, p, &dest))
Send(*a_ptr, *b_ptr, *n_ptr, dest);