Re: a question about code optimization

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Kevin Long,

> b) in the /*do something*/ block, we may use a.push_back(...) or some other
> functions
> that can change the size of a. if this happen, of course we can not do the
> optimization.

Correct.

> so can gcc know what functions may change the size of a?

Yes, if GCC has sufficient information to guarantee that the size of a is
not being changed it can perform the LIM optimization and hoist the a.size()
method out of the routine.

Note:  a.size() can be hoisted out because it is an inline function.

> is gcc smart enough to optimize the code if those functions are not used?

Yes.

> i am sorry because i am not familiar with the optimization term.

Move loop invariant optimization.  Or loop invariant motion optimization.
Usually abbreviated LIM.

> a) we tell the gcc what function may change the size of a vector

And most C++ compilers accomplish that at a "veneer" level (versus a
"holistic" level).  By the heavy use of inline functions to expose (and
inject) the innards of the methods into the location, "as if" the body of
the routines were typed in place.

Small inline functions optimize very well, and the optimizer has enough
information to perform LIM optimizations.  Especially for leaf-loops (loops
that do not call any non-inline functions within the loop).

NOTE:  I'm assuming correct code.  Incorrect code (what I tend to call
"pathological code") can cause unexpected behavior.  For example, if the
code violates aliasing rules, all bets are off.

> b) in the internal of gcc, gcc can find them out

That's a holistic optimization.  The kind that the LLVM compiler performs,
or the Java JIT optimizer performs.

> which one is more reasonble? or none of them?

They are both reasonable.

I expect the holistic optimization is tricky to implement, and requires
significant infrastructure to support at the object code and library levels.

Sincerely,
--Eljay


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux