ABSTRACT

This introduction presents an overview of the key concepts discussed in the subsequent chapters of this book. The book describes the current state-of-the-art in programming the systems and proposes an approach for developing a performance-portable application that can effectively utilize all of the systems from a single application. It proposes a strategy for optimizing an application for multi/manycore architectures. The book looks at the three typical architectures, all with advantages and disadvantages. It addresses the application developer's relationship with the compiler. The book investigates the use of the new stacked memory technology being used on CPUs such as the Intel Phi Knight's Landing processor. It examines future hardware advancements, and how the application developer may prepare for those advancements. The book also looks at several major applications, particularly looking at approaches that can be used to make them more amenable to vectorization and/or parallelization.