Professional Multicore Programming: Design and Implementation for C++ Developers presents the basics of multicore programming in a simple, easy-to-understand manner so that you can easily apply the concepts to your everyday projects. Learn the fundamentals of programming for multiprocessor and multithreaded architecture, progress to multi-core programming and eventually become comfortable with programming techniques that otherwise can be difficult to understand. Anticipate the pitfalls and traps of concurrency programming and synchronization before you encounter them yourself by finding them outlined in this indispensable guide to multicore programming.
What you will learn from this book
* The various pitfalls, traps, and challenges of concurrency programming and synchronization
* Methods and techniques for debugging and testing multicore programming
* How to take advantage of processor-specific features using cross-platform techniques
* The role of the operating system in multicore programming
* Ways to take advantage of framework classes as building blocks for concurrency
* How to reduce the complexity of task synchronization and communication through the use of interface classes
Contents:
Professional Multicore Programming
Introduction ............................................................................................. xxi
Chapter 1: The New Architecture ................................................................ 1
Chapter 2: Four Effective Multicore Designs ............................................. 19
Chapter 3: The Challenges of Multicore Programming .............................. 35
Chapter 4: The Operating System’s Role ................................................ 67
Chapter 5: Processes, C++ Interface Classes, and Predicates ..................95
Chapter 6: Multithreading ....................................................................... 143
Chapter 7: Communication and Synchronization of Concurrent Tasks ... 203
Chapter 8: PADL and PBS: Approaches to Application Design ................. 283
Chapter 9: Modeling Software Systems That Require Concurrency ........ 331
Chapter 10: Testing and Logical Fault Tolerance for Parallel Programs ...375
Appendix A: UML for Concurrent Design ................................................. 401
Appendix B: Concurrency Models ............................................................. 411
Appendix C: POSIX Standard for Thread Management ............................ 427
Appendix D: POSIX Standard for Process Managemnet ........................... 567
Bibliography ............................................................................................. 593
Index ........................................................................................................ 597
Introduction:
Themulticore revolution is at hand. Parallel processing is no longer the exclusive domain of supercomputers or clusters. The entry - level server and even the basic developer workstation have the capacity for hardware - and software - level parallel processing. The question is what does this mean forthe software developer and what impact will it have on the software development process? In the racefor who has the fastest computer, it is now more attractive for chip manufacturers to place multiple processors on a single chip than it is to increase the speed of the processor. Until now the software developer could rely on the next new processor to speed up the software without having to make any actual improvements to the software. Those days are gone. To increase overall system performance, computer manufacturers have decided to add more processors rather than increase clock frequency. Thmeans if the software developer wants the application to benefit from the next new processor, the application will have to be modified to exploit multiprocessor computers. Althoughsequential programming and single core application development have a place and will remain with us, the landscape of software development now reflects a shift toward multithreading andmultiprocessing. Parallel programming techniques that were once only the concern of theoretical computer scientists and university academics are in the process of being reworked for the masses. Theideas of multicore application design and development are now a concern for the mainstream. ........