我正在进行C代码优化,并且有许多计算将1.0添加到表达式,该表达式返回双值,如
val = 1.0 + u[8] / c_sq + (u[8] * u[8]) / (2.0 * c_sq * c_sq) - u_sq / (2.0 * c_sq)
所以我很想知道是否有任何优化技术来改进这段代码。
答案 0 :(得分:4)
这一行代码在没有任何上下文的情况下自行采用,就是它的本质。只要您使用的编译器至少在2.0 * c_sq
上执行CSE,就无法进一步优化它。否则,除了特定于域的优化之外,您几乎可以做到这一切。仅仅通过该代码就不会显而易见。
答案 1 :(得分:2)
在典型的当前处理器上,划分非常耗时;它可能需要几十个CPU周期。您可以重新排列表达式,以消除每this answer个两个分区。您也可以进行一些小的其他改进(编译器可能已经捕获):
double t = u[8];
double v = 2*c_sq;
val = 1 + (t*(v+t) - u_sq*c_sq) / (v*c_sq);