Title:
Parallel programming in C with MPI and openMP
Personal Author:
Publication Information:
Dubuque, Iowa : McGraw-Hill, 2004
ISBN:
9780072822564
Available:*
Library | Item Barcode | Call Number | Material Type | Item Category 1 | Status |
---|---|---|---|---|---|
Searching... | 30000010038251 | QA76.73.C15 Q55 2004 | Open Access Book | Book | Searching... |
Searching... | 30000004859116 | QA76.73.C15 Q55 2004 | Open Access Book | Book | Searching... |
Searching... | 30000010077024 | QA76.73.C15 Q55 2004 | Unknown | 1:CHECKING | Searching... |
On Order
Summary
Summary
This volume gives a high-level overview of parallel architectures, including processor arrays, centralized multi-processors, distributed multi-processors, commercial multi-computers and commodity clusters. A six-chapter tutorial introduces 25 MPI functions by developing parallel programs to solve a series of increasingly difficult problems. Each program is taken from problem description through design and analysis to implementation and benchmarking on an actual commodity cluster, providing the reader with a wealth of examples.
Table of Contents
Preface | p. xiv |
Chapter 1 Motivation and History | p. 1 |
1.1 Introduction | p. 1 |
1.2 Modern Scientific Method | p. 3 |
1.3 Evolution of Supercomputing | p. 4 |
1.4 Modern Parallel Computers | p. 5 |
1.5 Seeking Concurrency | p. 9 |
1.6 Data Clustering | p. 14 |
1.7 Programming Parallel Computers | p. 17 |
1.8 Summary | p. 21 |
1.9 Key Terms | p. 22 |
1.10 Bibliographic Notes | p. 22 |
1.11 Exercises | p. 23 |
Chapter 2 Parallel Architectures | p. 27 |
2.1 Introduction | p. 27 |
2.2 Interconnection Networks | p. 28 |
2.3 Processor Arrays | p. 37 |
2.4 Multiprocessors | p. 43 |
2.5 Multicomputers | p. 49 |
2.6 Flynn's Taxonomy | p. 54 |
2.7 Summary | p. 58 |
2.8 Key Terms | p. 59 |
2.9 Bibliographic Notes | p. 59 |
2.10 Exercises | p. 60 |
Chapter 3 Parallel Algorithm Design | p. 63 |
3.1 Introduction | p. 63 |
3.2 The Task/Channel Model | p. 63 |
3.3 Foster's Design Methodology | p. 64 |
3.4 Boundary Value Problem | p. 73 |
3.5 Finding the Maximum | p. 77 |
3.6 The n-Body Problem | p. 82 |
3.7 Adding Data Input | p. 86 |
3.8 Summary | p. 89 |
3.9 Key Terms | p. 90 |
3.10 Bibliographic Notes | p. 90 |
3.11 Exercises | p. 90 |
Chapter 4 Message-Passing Programming | p. 93 |
4.1 Introduction | p. 93 |
4.2 The Message-Passing Model | p. 94 |
4.3 The Message-Passing Interface | p. 95 |
4.4 Circuit Satisfiability | p. 96 |
4.5 Introducing Collective Communication | p. 104 |
4.6 Benchmarking Parallel Performance | p. 108 |
4.7 Summary | p. 110 |
4.8 Key Terms | p. 110 |
4.9 Bibliographic Notes | p. 110 |
4.10 Exercises | p. 111 |
Chapter 5 The Sieve of Eratosthenes | p. 115 |
5.1 Introduction | p. 115 |
5.2 Sequential Algorithm | p. 115 |
5.3 Sources of Parallelism | p. 117 |
5.4 Data Decomposition Options | p. 117 |
5.5 Developing the Parallel Algorithm | p. 121 |
5.6 Analysis of Parallel Sieve Algorithm | p. 122 |
5.7 Documenting the Parallel Program | p. 123 |
5.8 Benchmarking | p. 128 |
5.9 Improvements | p. 129 |
5.10 Summary | p. 133 |
5.11 Key Terms | p. 134 |
5.12 Bibliographic Notes | p. 134 |
5.13 Exercises | p. 134 |
Chapter 6 Floyd's Algorithm | p. 137 |
6.1 Introduction | p. 137 |
6.2 The All-Pairs Shortest-Path Problem | p. 137 |
6.3 Creating Arrays at Run Time | p. 139 |
6.4 Designing the Parallel Algorithm | p. 140 |
6.5 Point-to-Point Communication | p. 145 |
6.6 Documenting the Parallel Program | p. 149 |
6.7 Analysis and Benchmarking | p. 151 |
6.8 Summary | p. 154 |
6.9 Key Terms | p. 154 |
6.10 Bibliographic Notes | p. 154 |
6.11 Exercises | p. 154 |
Chapter 7 Performance Analysis | p. 159 |
7.1 Introduction | p. 159 |
7.2 Speedup and Efficiency | p. 159 |
7.3 Amdahl's Law | p. 161 |
7.4 Gustafson-Barsis's Law | p. 164 |
7.5 The Karp-Flatt Metric | p. 167 |
7.6 The Isoefficiency Metric | p. 170 |
7.7 Summary | p. 174 |
7.8 Key Terms | p. 175 |
7.9 Bibliographic Notes | p. 175 |
7.10 Exercises | p. 176 |
Chapter 8 Matrix-Vector Multiplication | p. 178 |
8.1 Introduction | p. 178 |
8.2 Sequential Algorithm | p. 179 |
8.3 Data Decomposition Options | p. 180 |
8.4 Rowwise Block-Striped Decomposition | p. 181 |
8.5 Columnwise Block-Striped Decomposition | p. 189 |
8.6 Checkerboard Block Decomposition | p. 199 |
8.7 Summary | p. 210 |
8.8 Key Terms | p. 211 |
8.9 Bibliographic Notes | p. 211 |
8.10 Exercises | p. 211 |
Chapter 9 Document Classification | p. 216 |
9.1 Introduction | p. 216 |
9.2 Parallel Algorithm Design | p. 217 |
9.3 Nonblocking Communications | p. 223 |
9.4 Documenting the Parallel Program | p. 226 |
9.5 Enhancements | p. 232 |
9.6 Summary | p. 235 |
9.7 Key Terms | p. 236 |
9.8 Bibliographic Notes | p. 236 |
9.9 Exercises | p. 236 |
Chapter 10 Monte Carlo Methods | p. 239 |
10.1 Introduction | p. 239 |
10.2 Sequential Random Number Generators | p. 243 |
10.3 Parallel Random Number Generators | p. 245 |
10.4 Other Random Number Distributions | p. 248 |
10.5 Case Studies | p. 253 |
10.6 Summary | p. 268 |
10.7 Key Terms | p. 269 |
10.8 Bibliographic Notes | p. 269 |
10.9 Exercises | p. 270 |
Chapter 11 Matrix Multiplication | p. 273 |
11.1 Introduction | p. 273 |
11.2 Sequential Matrix Multiplication | p. 274 |
11.3 Rowwise Block-Striped Parallel Algorithm | p. 277 |
11.4 Cannon's Algorithm | p. 281 |
11.5 Summary | p. 286 |
11.6 Key Terms | p. 287 |
11.7 Bibliographic Notes | p. 287 |
11.8 Exercises | p. 287 |
Chapter 12 Solving Linear Systems | p. 290 |
12.1 Introduction | p. 290 |
12.2 Terminology | p. 291 |
12.3 Back Substitution | p. 292 |
12.4 Gaussian Elimination | p. 296 |
12.5 Iterative Methods | p. 306 |
12.6 The Conjugate Gradient Method | p. 309 |
12.7 Summary | p. 313 |
12.8 Key Terms | p. 314 |
12.9 Bibliographic Notes | p. 314 |
12.10 Exercises | p. 314 |
Chapter 13 Finite Difference Methods | p. 318 |
13.1 Introduction | p. 318 |
13.2 Partial Differential Equations | p. 320 |
13.3 Vibrating String | p. 322 |
13.4 Steady-State Heat Distribution | p. 329 |
13.5 Summary | p. 334 |
13.6 Key Terms | p. 335 |
13.7 Bibliographic Notes | p. 335 |
13.8 Exercises | p. 335 |
Chapter 14 Sorting | p. 338 |
14.1 Introduction | p. 338 |
14.2 Quicksort | p. 339 |
14.3 A Parallel Quicksort Algorithm | p. 340 |
14.4 Hyperquicksort | p. 343 |
14.5 Parallel Sorting by Regular Sampling | p. 346 |
14.6 Summary | p. 349 |
14.7 Key Terms | p. 349 |
14.8 Bibliographic Notes | p. 350 |
14.9 Exercises | p. 350 |
Chapter 15 The Fast Fourier Transform | p. 353 |
15.1 Introduction | p. 353 |
15.2 Fourier Analysis | p. 353 |
15.3 The Discrete Fourier Transform | p. 355 |
15.4 The Fast Fourier Transform | p. 360 |
15.5 Parallel Program Design | p. 363 |
15.6 Summary | p. 367 |
15.7 Key Terms | p. 367 |
15.8 Bibliographic Notes | p. 367 |
15.9 Exercises | p. 367 |
Chapter 16 Combinatorial Search | p. 369 |
16.1 Introduction | p. 369 |
16.2 Divide and Conquer | p. 370 |
16.3 Backtrack Search | p. 371 |
16.4 Parallel Backtrack Search | p. 374 |
16.5 Distributed Termination Detection | p. 377 |
16.6 Branch and Bound | p. 380 |
16.7 Parallel Branch and Bound | p. 385 |
16.8 Searching Game Trees | p. 388 |
16.9 Parallel Alpha-Beta Search | p. 395 |
16.10 Summary | p. 399 |
16.11 Key Terms | p. 400 |
16.12 Bibliographic Notes | p. 400 |
16.13 Exercises | p. 401 |
Chapter 17 Shared-Memory Programming | p. 404 |
17.1 Introduction | p. 404 |
17.2 The Shared-Memory Model | p. 405 |
17.3 Parallel for Loops | p. 407 |
17.4 Declaring Private Variables | p. 410 |
17.5 Critical Sections | p. 413 |
17.6 Reductions | p. 415 |
17.7 Performance Improvements | p. 417 |
17.8 More General Data Parallelism | p. 421 |
17.9 Functional Parallelism | p. 428 |
17.10 Summary | p. 430 |
17.11 Key Terms | p. 432 |
17.12 Bibliographic Notes | p. 432 |
17.13 Exercises | p. 433 |
Chapter 18 Combining MPI and OpenMP | p. 436 |
18.1 Introduction | p. 436 |
18.2 Conjugate Gradient Method | p. 438 |
18.3 Jacobi Method | p. 444 |
18.4 Summary | p. 448 |
18.5 Exercises | p. 448 |
Appendix A MPI Functions | p. 450 |
Appendix B Utility Functions | p. 485 |
B.1 Header File MyMPI.h | p. 485 |
B.2 Source File MyMPI.c | p. 486 |
Appendix C Debugging MPI Programs | p. 505 |
C.1 Introduction | p. 505 |
C.2 Typical Bugs in MPI Programs | p. 505 |
C.3 Practical Debugging Strategies | p. 507 |
Appendix D Review of Complex Numbers | p. 509 |
Appendix E OpenMP Functions | p. 513 |
Bibliography | p. 515 |
Author Index | p. 520 |
Subject Index | p. 522 |