Beställningsvara. Skickas inom 11-20 vardagar. Fri frakt för medlemmar vid köp för minst 249 kr.
This book presents the principles and techniques of program specialization — a general method to make programs faster (and possibly smaller) when some inputs can be known in advance. As an illustration, it describes the architecture of Tempo, an offline program specializer for C that can also specialize code at runtime, and provides figures for concrete applications in various domains. Technical details address issues related to program analysis precision, value reification, incomplete program specialization, strategies to exploit specialized program, incremental specialization, and data specialization. The book, that targets both researchers and software engineers, also opens scientific and industrial perspectives.
Renaud Marlet is senior researcher at école des Ponts ParisTech (ENPC), head of the IMAGINE research group, and delegate director by interim of the Laboratoire d'Informatique Gaspard Monge (LIGM) for the école des Ponts ParisTech, France.
Chapter 1. Main Principles of Program Specialization 11.1. Specialized program 21.2. Specializing to improve performance 161.3. Automatic specialization 221.4. Main applications of specialization 271.5. Specialization times 331.6. Financial viability of specialization 37Chapter 2. Specialization Techniques 432.1. Transforming specialization programs 442.2. Termination of specialization 572.3. Correctness of specialization 602.4. Other forms of specialization 65Chapter 3. Offline Specialization 713.1. Main principles of offline specialization 723.2. Compared advantages of offline specialization 923.3. Main components of binding-time analysis 993.4. When static inputs become dynamic 109Chapter 4. A Specializer for C: Tempo 1174.1. History 1184.2. Disruptive technologies 1214.3. Architecture 1234.4. Engineering economics 1324.5. Beyond Tempo 1394.6. Other specializers for the C language 142Chapter 5. Applications of Specialization 1455.1. Applications in operating systems and networks 1465.2. Applications to numerical computation 1595.3. Applications to compilation using an interpreter 1605.4. Applications to the optimization of software architectures 1645.5. Specialization as a software engineering tool 180Chapter 6. Precision of Program Analysis 1856.1. Choosing the precision of an analysis 1866.2. Sensitivity to (control) flow 1896.3. Sensitivity to speculative evaluation 1936.4. Sensitivity to data structure components 1946.5. Sensitivity to data structure instances 1966.6. Sensitivity to use (of memory locations) 2016.7. Sensitivity to use of literal constants 2086.8. Intraprocedural versus interprocedural analysis 2116.9. Sensitivity to the context (of function call) 2136.10. Sensitivity to the return value 2146.11. Other precision forms 2166.12. Precision of the existing C specializers 217Chapter 7. Reification: From a Value to a Term 2217.1. Different types of reification 2227.2. Constraints of lifting 2267.3. Lifting of immutable data 2317.4. Lifting of a non-shared mutable piece of data 2347.5. Reification of a shared mutable piece of data 2377.6. Reification of a reference 2387.7. Physical data sharing between execution times 2437.8. Reification and binding time 245Chapter 8. Specialization of Incomplete Programs 2498.1. Constraints on the code to be specialized 2508.2. Specialization module and language module 2548.3. Revision of the expression of specialization 2568.4. Calling context of a function to be specialized 2648.5. Effect of external function calls 2668.6. Abstract modeling languages 2698.7. Concrete modeling 272Chapter 9. Exploitation of Specialization 2839.1. Means of exploiting specialization 2849.2. Invariant execution context 2869.3. Optimistic specialization 2889.4. Selection by necessity of a specialized function 2949.5. Selection by anticipation of a specialized function 298Chapter 10. Incremental Runtime Specialization 30910.1. Data availability staging 31010.2. Models for incremental specialization 31310.3. Binding-time analyses for incremental specialization 32210.4. Implementation 32310.5. Compared advantages of iterated specialization 33510.6. Related works 33910.7. Improving incremental runtime specialization 341Chapter 11. Data Specialization 34311.1. Program specialization and loop unrolling 34411.2. General concept of data specialization 35011.3. Caching and binding time 36011.4. Structuring the cache 36511.5. The question of control in data specialization 37111.6. Reconstructions of control 37511.7. Program specialization versus data specialization 38211.8. Experimental results 387Chapter 12. Scientific Perspectives 39312.1. Improving the specialized code 39412.2. Complexity of the process of specialization 40412.3. Simplifying the process of specialization 40812.4. Integration into a software engineering process 418Chapter 13. Conclusion: From Prototype to Product 42113.1. The race for performance 42213.2. A different viewpoint 42313.3. Difficulties for investing in software engineering 42513.4. Niche uses 42913.5. Developing a specialization platform 432Appendix. Basic Facts about Languages and Programs 435Bibliography 487Index 523