Explore chapters and articles related to this topic
Parallelizing High-Level Synthesis: A Code Transformational Approach to High-Level Synthesis
Published in Louis Scheffer, Luciano Lavagno, Grant Martin, EDA for IC System Design, Verification, and Testing, 2018
Gaurav Singh, Sumit Gupta, Sandeep Shukla, Rajesh Gupta
Common subexpression elimination is a well-known basic compiler transformation that attempts to detect repeating subexpressions in a piece of code, compute them once and reuse the stored result wherever the subexpression occurs subsequently [1]. Often compilers apply CSE on three-operand instructions. However, Gupta et al. [3,72] have shown that applying CSE on the source code can often expose opportunities for optimizations not otherwise available. In addition to this, CSE can also be applied dynamically during scheduling as explained later in Section 11.3.3.2. Loop-invariant operations are computations within a loop body that produce the same results each time the loop is executed [1,64]. These computations can be moved outside the loop body, without changing the results of the code. In this way, these computations will execute only once before the loop, instead of for each iteration of the loop body.
Low-Power/Energy Compiler Optimizations
Published in Christian Piguet, Low-Power Processors and Systems on Chips, 2018
Early work on optimizing compilers for power and energy management suggested that optimization transformations for performance subsume those for power and energy management. Therefore, power/energy is not an optimization objective in its own right [13]. Traditional optimizations, such as common subexpression elimination, partial redundancy elimination, strength reduction, or dead code elimination increase the performance of a program by reducing the work to be done during program execution [2,12]. Clearly, reducing the workload may also result in power/energy savings. Memory hierarchy optimizations, such as loop tiling and register allocation, try to keep data closer to the processor because such data can be accessed more quickly. Keeping a value in an on-chip cache instead of an off-chip memory, or in a register instead of the cache, also saves power/energy due to reduced switching activities and switching capacitance.
A benchmark of selected algorithmic differentiation tools on some problems in computer vision and machine learning
Published in Optimization Methods and Software, 2018
Filip Srajer, Zuzana Kukelova, Andrew Fitzgibbon
Alternative approaches to automatic differentiation include symbolic differentiation, finite differences (FD) and differentiation by hand. Symbolic differentiation using symbolic algebra systems typically has to represent the whole function as a single expression, which is limited by available memory, meaning it cannot handle larger functions. For efficient code generation, it should also include common subexpression elimination.