- #include <stdio.h>
- #include <math.h>
- /* tree broadcast routine:
- * 0 -(gen=1)-> 1
- *
- * 0 -(gen=2)-> 2
- * 1 -(gen=2)-> 3
- *
- * 0 -(gen=4)-> 4
- * 1 -(gen=4)-> 5
- * 2 -(gen=4)-> 6
- * 3 -(gen=4)-> 7
- * ...
- *
- * In gen, processes (gen <= rank < 2*gen) will receive the broadcast data.
- */
- int main(int argc, char *argv[])
- {
- int gen, rank, size;
- int to, from;
- /* scan over a hypothetical virtual machine of 15 nodes */
- size = 15;
- for (rank = 0; rank < size; rank++) {
- /* gen reflects the generation (depth) in the tree broadcast */
- gen = 1;
- while (gen < size) {
- if (rank >= 2 * gen) { /* wait for the data to come out */
- } else if (rank >= gen && rank < 2 * gen) { /* receive message */
- from = rank - gen;
- } else if (rank < gen) { /* send message */
- to = rank + gen;
- if (to < size)
- }
- gen *= 2;
- }
- /* done for a given rank */
- }
- }
Raw Paste