Finally, Section 3.5 discusses the relationships between programming languages and parallel architectures. In Section 4.1 we introduce the basic ILP- classes. We emphasize both their common and distinctive characteristics, and also point out the sequence of their evolution. Next, in Section 4.2 we give an overview of possible dependencies between instructions of a program. As dependencies are common to all ILP-classes, we discuss them jointly.
Dependencies impose constraints on the parallel execution of instructions.
In Section 4.3 we overview how dependencies can be detected and resolved by instruction scheduling and at the same time how ILP-execution can be optimized. Pipelining boosts performance by executing instructions like an assembly line. Replication means using multiple EUs operating in parallel. Evidently, pipelining is the principle behind pipelined processors, while replication is the foundation for VLIWs and superscalar processors. We emphasize that pipelining and replication are two orthogonal concepts.