Errata for Designing and Building Parallel Programs

-----

The following errors have been corrected both in the online version and in the second printing of the text (available soon from Addison-Wesley).

(Page 69) In Algorithm 2.2, the assignment Amin = infinity needs to occur outside the procedure b&b_search.

(Page 73) In Algorithm 2.3, line 5 should read

for k = 1 to i

(Page 80) In the third-to-last line, Seijen should read Feijen.

(Page 96) In line 4 of Example 3.3, ``2 usec'' should read ``1 usec''.

(Page 96) In Figure 3.8, the line labeled "Message Volume" is actually "Message Volume + Message Startup".

(Page 125) In the paragraph starting "In the kth step": Ik1, Ik2, ..., IkN should be Ik0, Ik1, ..., Ik(N-1).

(Page 127, Algorithm 3.2) In line 9, each of the two occurences of Lmt should be length((vm,vt)), for consistency with Algorithm 3.1.

(Page 128) In the paragraph labeled Parallel Dijkstra 1, replace 1.6 with F.

(Page 147) In the formula for convolution, the greek letter Pi is missing between the "2" and the "i" in the exponent.

(Page 178) In the caption to Figure 5.1, the text "first reads and then writes" should read "first writes and then reads".

(Page 178) In the first code example, the first line "global int *gp;" should read "int *global gp;"

(Page 179) In line 7 of Program 5.5, "datum" should read "Length"

(Page 253) In Figure 7.6 (f), A(1) should be aligned with the first column of array D, rather than the last row.

(Page 253) Third line up from the bottom should read:

!HPF$ ALIGN X(*) WITH Y(*,j)

(Page 256) In Program 7.3, the first line in the do loop should read:

Tmp = CSHIFT(Tmp, 1)

(Page 257) The first and second examples of FORALL should read

FORALL (i=1:m, j=1:n) X(i,j) = i+j
FORALL (i=1:n, j=1:n, i<j) Y(i,j) = 0.0

(Page 259) Example 7.5 uses a column-based decomposition, rather than a row-based decomposition as stated in the first sentence.

(Page 286) In Figure 8.3, "one-to-all gather" should read "all-to-one gather".

(Page 306) In Program 8.9, each myid/3 should be mod(myid,3).

(Page 308) In the C-language binding to MPI_GET_COUNT, the Status argument should have type MPI_Status *. (A last minute change to the MPI specification, made after this book went to press!)

(Page 356) In reference 81, "W.H. Seijen" should be "W.H.J. Feijen".

-----

Paul Pritchard points out that the mathematics in the treatment of isoefficiency in Example 3.4 can be improved significantly.

At present, the text substitutes N = P and N = sqrt(P) respectively, to obtain approximate equations involving E. Disadvantages of this approach are that the respective substitutions are "magically" obtained, and that the substitutions force a single fixed value of E (in each case).

A better approach is to first solve for P. In the first case, this is extremely easy, and we get that P is approximately linear in N (for all possible E). In the second, we have terms involving P and sqrt(P). Treating this as a quadratic equation in sqrt(P), we solve for sqrt(P) using the standard formula.

-----

Designing and Building Parallel Programs / dbpp@mcs.anl.gov