http://semipublic.comp-arch.net/wiki/CSE_(common_sub-expression)
CSE is an optimization that recognizes common sub-expressions, and saves them and reuses them rather than recalculating them.
E.g.
var1 := (a*b) + c
var2 := (a*b) + d;
can be rewritten as
tmp := a*b
var1 := tmp + c
var2 := tmp + d
This is obvious, right?
It is less obvious when you have, e.g. complex addressing modes such as (base+index*scale+offset).
Should you CSE part of address computation?
Sometimes it is cheaper to recalculate than it is to store, allocating a register that may spill other registers.
[[Memoization]] is a form of hardware CSE, where an expensive execution recognizes recently performed calculations and avoids reperforming them.
[[1/x inverse instructions]] provide greater opportunity for CSE than do ordinary [[divide instructions]].
[[Micro-optimization_primitive_instructions]] provide more opportunity for [[CSE]]ing.
[[Hardware common-sub-expression elimination]] has been proposed - by me (Andy Glew), in my abandoned Ph.D. on [[instruction refinement]],
if by no one elsse. In fact [[nearly all Dragon-book compiler optimizations can be doone in hardware]].
[[Instruction reuse]] is a hardware technique that extenddsCSE dynamically over moderate to large distances.
Disclaimer
The content of this blog is my personal opinion only. Although I am an employee - currently of Nvidia, in the past of other companies such as Iagination Technologies, MIPS, Intellectual Ventures, Intel, AMD, Motorola, and Gould - I reveal this only so that the reader may account for any possible bias I may have towards my employer's products. The statements I make here in no way represent my employer's position, nor am I authorized to speak on behalf of my employer. In fact, this posting may not even represent my personal opinion, since occasionally I play devil's advocate.
See http://docs.google.com/View?id=dcxddbtr_23cg5thdfj for photo credits.
See http://docs.google.com/View?id=dcxddbtr_23cg5thdfj for photo credits.
Friday, February 18, 2011
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment