GCC 4.5 Steps Closer To Release
Phoronix: GCC 4.5 Steps Closer To Release
Novell's Richard Guenther has issued a GCC 4.5 status report this morning as yesterday this next major version of the GNU Compiler Collection had left "Stage 3" and is now entering a period in which only regression fixes and documentation work will take place.The first GCC 4.5 release candidate will be made once there are no longer any P1 regressions remaining. As of this morning, of the P1 regressions there were 26, 93 regressions of P2 priority, and then just four P3 regressions...
What's is comming new to 4.5 release?
I hope better optimizations...
I'd say the most important changes are the new link time optimizer, which will allow better interprocedural optimization, support for the Atom as target and the usual C++0x improvements (lambda, yay!).
Originally Posted by Raine
I understand that graphite has been improved quite a bit in version.....
Correct me if I'm wrong, but my understanding of graphite is it takes code written in C or C++ and runs it through a complex algorithm. Which finds areas of that code that have no dependencies on each other and can safely run simultaneously. Then assigns them threads so that the kernels scheduler can execute them on multiple cpu cores at the same time.
Do I understand this correctly? Does this mean we can now get multi-core acceleration of single threaded code?
EDIT: If so, then it looks like a software version of ATi's Ultra Threaded Dispatch Processor as seen here. But made for a scale of processor as seen here.
EDIT2: Also if so, what's the limit to parallelism? How far will it scale? 2 threads? How much parallelism can you actually get out of single threaded code written in C? And can it extract further parallelism out of well written multi-threaded code?
Last edited by duby229; 12-02-2009 at 07:52 PM.
Hmm, I should really do some research but I'm too lazy so I'll just tell you what I think I remember about graphite.
Which is that it's not really about creating threads like that, but instead fully utilizing SIMD hardware.
So if you have a for-loop which does stuff to an array, instead of just trying to optimize the loop as much as possible graphite would recognize that it could replace that with some SSE code instead and do it in much fewer instructions. Of course it gets very complicated because they have to get it working with complicated code that has dependencies, and other types of code than just for-loops, but I think that's the general idea.
Actually, both, and even more. Graphite is a new code representation for loop optimizations, allowing to find better opportunities to rearrange loops for autovectorization (SIMD), parallelization (threaded loops), and also for better cache behaviour (nested loops rearranged to have a smaller, tighter inner loop that can fit right into the cache).
Originally Posted by smitty3268
Could someone explain in simple words if this -flto thing is goig to offer better performance to applications?
Don't know if there's simple words for it. But basically it means that instead of the compiler looking at all the object files as single entities, it allows the compiler to look at all the object files that make up a project as one big program which can help alot when the compiler needs to determine when to inline, reduce duplicate funcionality, eliminate dead code etc. The speed improvements can be very good (of course depending on program), an example of this would be sqlite with their amalgamation approach where all code files are merged into a single one and then compiled giving 5-10% improvement.
Originally Posted by Apopas
And yes really looking forward to the new graphite implementation, the previous one in 4.4 was missing alot (as seen here http://gcc.gnu.org/wiki/Graphite/4.5) and I believe it has alot of potential.
Apart from that I've noticed that PGO (profile guided optimization) is slightly improved aswell when I've tried the weekly snapshots. All in all GCC 4.5 is shaping up to be a great release.