Another, closely related, goal is to provide the necessary background in computer architecture to evaluate competing algorithms to decide which is likely to be the most efficient for a given machine, even before they are expressed in a programming language. Performance will depend on several factors, for example how data is laid out in memory and the patterns in which it is accessed. In many cases an algorithm with worse asymptotic complexity may turn out to be the best for a certain class of machines because it requires fewer processors or less memory (see Numerical Linear Algebra ).
The chapter begins with an overview of basic computer architecture. It describes the main components of a typical system and how they interact. Section 3, is on the architecture and implementation of modern high performance systems, including vector processors and parallel processors; readers who are already familiar with basic computer architecture may want to skip directly to this section. In both sections we will describe the basic concepts, introduce performance models, and discuss factors that limit efficient use of the machines. Programming issues, for example organizing loops so they can be executed more efficiently by a vector processor or accessing data structures in ways that are most efficient for certain memory systems, are discussed in the chapter on programming languages