1 /* skeleton for a broadcast routine from node 0 */
11 /* scan over hypotetical virtual */
12 /* machine of 15 nodes */
14 for ( rank =0 ; rank<size ; rank++ )
16 my_broadcast( rank, size );
22 int my_broadcast( int rank, int size )
24 int two_to_generation;
28 target = (int *)malloc( (unsigned) size * sizeof(int) );
30 printf( " rank = %d ", rank );
31 /* two_to_generation reflects the */
32 /* steps in the tree broadcast */
34 two_to_generation = 1;
35 while( two_to_generation < size )
36 { /* receive message */
37 if ( rank >= two_to_generation &&
38 rank < two_to_generation*2 )
40 from = rank - two_to_generation;
42 printf ( " -- from %d ", from );
44 if ( rank < two_to_generation )
46 to = rank + two_to_generation;
53 two_to_generation = 2 * two_to_generation;
55 /* done for a given rank */
60 for ( to=0 ; to<Nto ; to++ )
62 printf( " -- to %d ", target[ to ] );