Modify Algorithms so that they work for any number of processes,not just the powers of 2. 1. procedure GENERAL_ONE_TO_ALL_BC(d, my_id, source, X) 2. begin 3. my_virtual id := my_id XOR source; 4. mask := 2ᵈ - 1; 5. for i := d - 1 downto 0 do /* Outer loop */ 6. mask := mask XOR 2ⁱ; /* Set bit i of mask to 0 */ 7. if (my_virtual_id AND mask) = 0 then 8. if (my_virtual_id AND 2ⁱ) = 0 t
Modify
1. procedure GENERAL_ONE_TO_ALL_BC(d, my_id, source, X)
2. begin
3. my_virtual id := my_id XOR source; 4. mask := 2ᵈ - 1;
5. for i := d - 1 downto 0 do /* Outer loop */
6. mask := mask XOR 2ⁱ; /* Set bit i of mask to 0 */
7. if (my_virtual_id AND mask) = 0 then
8. if (my_virtual_id AND 2ⁱ) = 0 then
9. virtual_dest := my_virtual_id XOR 2ⁱ;
10. send X to (virtual_dest XOR source);
/* Convert virtual_dest to the label of the physical destination */
11. else
12. virtual_source := my_virtual_id XOR 2ⁱ;
13. receive X from (virtual_source XOR source);
/* Convert virtual_source to the label of the physical source */
14. endelse;
15. endfor;
16. end GENERAL_ONE_TO_ALL_BC
Step by step
Solved in 3 steps with 3 images