For example, techniques for optimal mapping of independent pieces of a parallel program so they can be executed simultaneously on different nodes in a parallel processor is an active area of research in computer science. Programmers who use parallel processors often need to allocate tasks themselves using system- dependent library routines to send information from one task to another. Knowing how processors are interconnected will have an impact on how efficiently messages are passed. Computer scientists used three related terms to describe the general area of low-level machine organization. Computer architecture is the study of the components that make up computer systems and how they are interconnected.
Computer organization is concerned with the implementation of a computer architecture.
As an example of the difference between architecture and implementation, consider the vector supercomputers from Cray Research. The systems have very different organizations, however, since they may have a different number of processors, memory sizes may vary, operands are transferred from memory to the processor in different ways, and the time to execute an instruction varies from one system to another. Programmers often use knowledge of a system's architecture, and sometimes organization, to optimize performance of their programs, but rarely, if ever, are they concerned with engineering aspects. The goal of this chapter is to introduce the basic concepts of computer architecture and organization in order to allow computational scientists to recognize when programs are not as efficient as they could be and to transform them so they make better use of the underlying machine. We cannot hope to present a comprehensive collection of performance tips for languages and systems likely to be used in computational science.