With a p-stage pipeline we can add a sequence of n numbers in n/p + p - 1 pipeline cycles. The program pipe_sum.c defines the summation algorithm, for a sequence of p*(p+1) numbers. The output of a run on 7 processors is below:
prompt]$ mpirun -np 7 pipe_sum The data to sum : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 Manager starts pipeline for sequence 0... Manager received sum 36. Manager starts pipeline for sequence 1... Manager received sum 100. Manager starts pipeline for sequence 2... Manager received sum 164. Manager starts pipeline for sequence 3... Manager received sum 228. Manager starts pipeline for sequence 4... Manager received sum 292. Manager starts pipeline for sequence 5... Manager received sum 356. Manager starts pipeline for sequence 6... Manager received sum 420. The total sum : 1596 Processor 2 receives sequence 0 : 6 4 5 6 7 8 Processor 2 receives sequence 1 : 30 12 13 14 15 16 Processor 2 receives sequence 2 : 54 20 21 22 23 24 Processor 2 receives sequence 3 : 78 28 29 30 31 32 Processor 2 receives sequence 4 : 102 36 37 38 39 40 Processor 2 receives sequence 5 : 126 44 45 46 47 48 Processor 2 receives sequence 6 : 150 52 53 54 55 56 Processor 6 receives sequence 0 : 28 8 Processor 6 receives sequence 1 : 84 16 Processor 6 receives sequence 2 : 140 24 Processor 6 receives sequence 3 : 196 32 Processor 6 receives sequence 4 : 252 40 Processor 6 receives sequence 5 : 308 48 Processor 6 receives sequence 6 : 364 56 Processor 3 receives sequence 0 : 10 5 6 7 8 Processor 3 receives sequence 1 : 42 13 14 15 16 Processor 3 receives sequence 2 : 74 21 22 23 24 Processor 3 receives sequence 3 : 106 29 30 31 32 Processor 3 receives sequence 4 : 138 37 38 39 40 Processor 3 receives sequence 5 : 170 45 46 47 48 Processor 3 receives sequence 6 : 202 53 54 55 56 Processor 4 receives sequence 0 : 15 6 7 8 Processor 4 receives sequence 1 : 55 14 15 16 Processor 4 receives sequence 2 : 95 22 23 24 Processor 4 receives sequence 3 : 135 30 31 32 Processor 4 receives sequence 4 : 175 38 39 40 Processor 4 receives sequence 5 : 215 46 47 48 Processor 4 receives sequence 6 : 255 54 55 56 Processor 1 receives sequence 0 : 3 3 4 5 6 7 8 Processor 1 receives sequence 1 : 19 11 12 13 14 15 16 Processor 1 receives sequence 2 : 35 19 20 21 22 23 24 Processor 1 receives sequence 3 : 51 27 28 29 30 31 32 Processor 1 receives sequence 4 : 67 35 36 37 38 39 40 Processor 1 receives sequence 5 : 83 43 44 45 46 47 48 Processor 1 receives sequence 6 : 99 51 52 53 54 55 56 Processor 5 receives sequence 0 : 21 7 8 Processor 5 receives sequence 1 : 69 15 16 Processor 5 receives sequence 2 : 117 23 24 Processor 5 receives sequence 3 : 165 31 32 Processor 5 receives sequence 4 : 213 39 40 Processor 5 receives sequence 5 : 261 47 48 Processor 5 receives sequence 6 : 309 55 56 prompt]$The communication overhead shows that this type of computation is only suitable for shared memory multicomputers.
Insertion sort requires O(n^2) comparisons, which make it inferior to quicksort and other O(n*log(n)) methods as soon as n becomes larger. The program pipe_sort.c illustrates how a p-stage pipeline can sort a sequence of p numbers in 2*p pipeline cycles. The output of a run on 7 processors is below:
prompt]$ mpirun -np 7 pipe_sort The 7 numbers to sort : 97 80 39 60 62 70 16 Manager gets 97. Manager gets 80. Node 0 sends 97 to 1. Manager gets 39. Node 0 sends 80 to 1. Manager gets 60. Node 0 sends 60 to 1. Manager gets 62. Node 0 sends 62 to 1. Manager gets 70. Node 0 sends 70 to 1. Manager gets 16. Node 0 sends 39 to 1. Node 1 receives 97. Node 1 receives 80. Node 2 receives 97. Node 2 receives 80. Node 3 receives 97. Node 3 receives 80. Node 4 receives 97. Node 5 receives 97. Node 5 receives 80. Node 1 sends 97 to 2. Node 1 receives 60. Node 1 sends 80 to 2. Node 1 receives 62. Node 1 sends 62 to 2. Node 1 receives 70. Node 1 sends 70 to 2. Node 1 receives 39. Node 1 sends 60 to 2. Node 4 receives 80. Node 4 sends 97 to 5. Node 4 receives 70. Node 4 sends 80 to 5. Node 3 sends 97 to 4. Node 3 receives 70. Node 3 sends 80 to 4. Node 3 receives 62. Node 3 sends 70 to 4. Node 2 sends 97 to 3. Node 2 receives 62. Node 2 sends 80 to 3. Node 2 receives 70. Node 2 sends 70 to 3. Node 2 receives 60. Node 2 sends 62 to 3. Node 5 sends 97 to 6. Node 6 receives 97. The sorted sequence : 16 39 60 62 70 80 97 prompt]$