A Review of GCC 4.0
ChaoticCoyote writes "
I've just posted a short review of GCC 4.0, which compares it against GCC 3.4.3 on Opteron and Pentium 4 systems, using LAME, POV-Ray, the Linux kernel, and SciMark2 as benchmarks. My conclusion:
Is GCC 4.0 better than its predecessors? In terms of raw numbers, the answer is a definite "no". I've tried GCC 4.0 on other programs, with similar results to the tests above, and I won't be recompiling my Gentoo systems with GCC 4.0 in the near future. The GCC 3.4 series still has life in it, and the GCC folk have committed to maintaining it. A 3.4.4 update is pending as I write this.
That said, no one should expect a "point-oh-point-oh" release to deliver the full potential of a product, particularly when it comes to a software system with the complexity of GCC. Version 4.0.0 is laying a foundation for the future, and should be seen as a technological step forward with new internal architectures and the addition of Fortran 95. If you compile a great deal of C++, you'll want to investigate GCC 4.0.
Keep an eye on 4.0. Like a baby, we won't really appreciate its value until it's matured a bit.
"
Well clearly the problem is that you compiled GCC 4.0.0 with GCC 3.4.3! What I did was go through the GCC 4.0 source code in two seperate windows, fire up hexedit in another, and go through line by line "compiling" GCC 4.0 with the GCC 4.0 source, in my head. I wouldn't recommend doing this with -funroll-loops, my hands started cramping up.
Or you could wait to compile 4.0 until the 3.0 branch makes it to 3.9.9, then it will be close enough anyway. YMMV, people say I give out bad advice, go figure...
It was a long time before GCC 3 got better than 2.95. I expect the same thing will happen here.
Give me Classic Slashdot or give me death!
...Tiger? Wasn't it compiled with GCC 4.0?
Some people spend 10 hours tweaking compiler settings and optimizations to get an extra 5% performance from their code.
Other people spend 2 hours selecting the proper algorithm in the first place and get an extra 500% performance from their code.
To semi-quote The Matrix: One of these endeavors... is intelligent. And one of them is not.
wasn't one of the goals of 4.0 to become more like intel's prized x86 compiler?
"Like a baby, we won't really appreciate its value until it's matured a bit."
Does this mean I have to wait until it's 18?
I tried to email you about your "thethere" mistake, but you don't want to talk to people apparently. Not the most important of corrections maybe, but anyway...
scott.ladd@coyotegulch.com
SMTP error from remote mailer after RCPT TO::
host smtp.secureserver.net [64.202.166.12]:
553 217.209.223.* mail rejected due to excessive spam
It's damn fast for KDE compile as someone tested.
While I know the benefits of Fortran 95 are a big thing, saying it's a technological step forward to incorporate for the first time a 10 year old standard seems a bit ridiculous. When I first saw this article I had to check my calendar to make sure it was May 1st and not April 1st.
Is that what you say to new parents? :-)
Where are the screenshots?
http://www.kdedevelopers.org/node/view/1004
;)
Qt:
-O0 -O2
gcc 3.3.5 23m40 31m38
gcc 3.4.3 22m47 28m45
gcc 4.0.0 13m16 19m23
KDElibs (with --enable-final)
-O0 -O2
gcc 3.3.5 14m44 27m28
gcc 3.4.3 14m49 27m03
gcc 4.0.0 9m54 23m30
KDElibs (without --enable-final)
-O0
gcc 3.3.5 32m56
gcc 3.4.3 32m49
gcc 4.0.0 15m15
I think KDE and Gentoo people will like GCC 4.0
You've got to benchmark each platform separately. Sure, they share some higher level optimizations, but the type of processor determines a lot of important stuff (like instruction scheduling) and is dominant.
What happened to the -ftracer option? Is is still generally useful for optimization in GCC 3.4 (and later)? Or has it now become part of one of the -O options?
One of the problems with MINGW32 is that the linker doesn't respect the --gc-sections. When I read about the improved dead code ellimination (in the what's new of GCC 4.0), i wonder if we windows users could *finally* deliver executables as small as those made with the VC++ compiler.
Any info on this? When's the mingw port going to be done? Has anyone tested the unofficial mingw build (forgot the url, sorry)?
Where would I find on which architectures fpmath is set to sse by default? The info file doesn't seem to have that information. And is it possible to tell the compiler to always use SSE instead of the FP registers, so I wouldn't have to have so many emms's all over the code? (In generic MMX-using routines which don't usually know what'll happen after them)
I love the open source movement but I wonder why the following comment is OK for open source projects and not close source?
quote "That said, no one should expect a "point-oh-point-oh" release to deliver the full potential of a product, particularly when it comes to a software system with the complexity of GCC."
I bet no one would dare say that about certain product from Redmond.
Like a baby, we won't really appreciate its value until it's matured a bit.
And if it dies, we'll be left with a lot of jokes
Support the FairTax
"Like a baby, we won't really appreciate its value until it's matured a bit."
Seriously, this is why I don't appreciate babies. At least after about 4 or 5 years, they're useful for mild manual labour. Sure they'll complain and cry, but all you gotta do is tie their dishwashing to the number of fish heads they're allotted that week. Works pretty well, I gotta say. Anyway, at least they're not a net productivity drain like babies are.
Anyway, what I mean to say is: from your description, it looks like I'll be staying away from GCC 4 for a while, too. Goddamn babies.
-Laxitive
Second, the runtime benchmarks were close enough to be statistically meaningless in most cases. The author concludes with:
My take would have been "in terms of raw numbers, it's not really any better yet." It's close enough to equal (and slower in few enough cases that I'd be willing to accept them), though, that I'd be willing to switch to it if I could do so without having to modify a lot of incompatible code. It's clearly the way of the future, and as long as it's not worse than the current gold standard, why not?
Dewey, what part of this looks like authorities should be involved?
This is just what Linux needs more bloat and less speed.
Oh well, release early, release often. Especially when you don't have improvements to release.
I agree that this compiler is a cornerstone of free software.
But it was very frustrating to me to try to port the compiler to a new platform by modifying existing back ends for similar platforms.
After spending a few months on it (m68k in this case), I could not escape the layers of hack upon cruft upon hack upon cruft, that made it extremely difficult to make even fairly superficial mods because everyone seemed to be using the features differently and all the power seemed lost in hacks that made it impossible to do simple things (for me anyway). I am quite familiar with many assemblers and optimizing compilers.
I hope that the new work makes a somewhat-clean break with the old, otherwise, I would fear yet another layer to be hacked and interwoven, with the other ones that were so poorly fit to the back ends.
I suspect that not all backends are the same and perhaps the same experience would not be true for a more-popular target, but it seems to me it shouldn't be that hard to create a model that is more powerful yet more simple. Such would seem to me to be a major step forward and enable much greateer optimization, utilization, maintainability, etc.
The whole point of gcc4.0.0 is the tree-ssa thing. The author of this test didn't seem to notice that this stuff doesn't get enabled in -O2 nor -O3, but does have to be enabled by hand. This includes autovectorization (-ftree-vectorice) among other things which may make a difference.
If I was him, I'd repeat the tests again enabling the -ftree stuff when building with gcc4.0.0.
So the more code you have, the more you want it to run more slowly. Perfect sense.
"It's the height of ridiculousness to say for those 9 lines you get hundreds of millions."
At what point (of 3's evolution) would you say it surpassed 2.95? Why?
Constitutionally Correct
Like a baby, we won't really appreciate its value until it's matured a bit
I'll just have to make sure you never babysit for me, if babies are that value-less to you.
Best death? What, die from a naked lady avalanche?
This is the stupidest review of GCC4 I can imagine. I won't go so far as to say typical gentoo stereotype focusing on lots of flags to get "really fast" results, but you know some people are thinking it.
Where are the C++ benchmarks? That's what's supposed to be big in GCC4. Compiling C++, and doing it faster than GCC3 did (which isn't hard). How fast does this compile KDE? Qt? How big are the binaries? etc. I see all of ONE compile time statistic, and that's on the linux kernel.
WTF is this? Can someone with a clue please do a real review?
Don't think of it as a flame---it's more like an argument that does 3d6 fire damage
What about the performance on MIPS? PPC? C'mon, people...enquiring minds want to know!
Constitutionally Correct
I found this in the osnews announcement
"Before we get a bunch of complaints about the fact that most binaries generated by GCC 4.0 are only marginally faster (and some a bit slower) than those compiled with 3.4, let me point out a few things that I've gathered from casually browsing the GCC development lists. I'm neither a GCC contributor nor a compiler expert.
Prior to GCC 4.0, the implementation of optimizations was mostly language-specific; there was little or no integration of optimization techniques across all languages. The main goal of the 4.0 release is to roll out a new, unified optimization framework (Tree-SSA), and to begin converting the old, fragmented optimization strategies to the unified framework.
Major improvements to the quality of the generated code aren't expected to arrive until later versions, when GCC contributors will have had a chance to really begin to leverage the new optimization infrastructure instead of just migrating to it.
So, although GCC 4.0 brings fairly dramatic benefits to compilation speed, the speed of generated binaries isn't expected to be markedly better than 3.4; that latter speedup isn't expected until later installments in the 4.x series."
Like a baby, we won't really appreciate its value until it's matured a bit.
"Come here son. Did you know your mother and I almost decided to not keep you when you were born? You were just a baby at the time, you didn't seem to have any value. I mean, seriously, what use is there for a baby? I'm glad we didn't make that mistake.
Now go play outside and don't come back before dinner time, and pick up the trash when you leave."
...on Diego's web site here.
The Army reading list
There was one test case I did for my own use. I've got a small C++ program that's computationally heavey and has a small working set of memory.
On that program (on a P4) I got an 11% reduction in runtime using GCC 4 vs. GCC 3.3.5. This was actually a big deal for me work.
The lesson here: You're mileage with GCC 4.0's improvements may vary from the benchmarks, and you might want to try it on your own code.
For C code gcc 4.0 produces noticably slower code than 3.4.3. (5-10% slower).
Maybe it's because of the different inlining-limit heuristics or something. Better stick to 3.4.3 if you want maximum performance for C code.
I don't wanna read the review it reveals the ending or something. I mean what good is a compiler without some big unexpected surpises?
Typical ... "okay, like i compiled all my kewl apps that I like totally rice out with the optimization flags because it's all about optimization, and this new one didn't give me nothing. I mean, I didn't use that tree-ssa because well I didn't read about it or nuthin, and I don't do any C++ because KDE is so totally like windoze (Micro$uck, lol!) and C is where you learn about your system and all, so hey I want it all to be about C, and the buncha flags that make things go fast worked exactly the same as they did the last time, what's up with that lol!"
What tests are you referring to?
-
sig sig sputnik
Are you kidding? Babies are worth $15,000-$20,000 easily, even if they're female. Once e-Bay stops being a bunch of pussies and we get some open bidding started, I expect their value to go up even higher.
Once again, we see that the
What's up with all these speed and performance benchmarks. I may be dead wrong (or at least outdated), but I thought GCC was developed with architecture compatibility, standards, and language features in mind--in that order. If you really want performance, you're usually better off using a commercial compiler targetted at a specific architecture, like Intel's. Did things change, or is this review completely missing the mark?
You didn't mean it, but you've managed to insult all past, present, and future parents!
Otherwise, thanks for the review. Consider yourself appreciated. Really.Only on /. could this get modded up...
He's not a dumbass because he uses Gentoo. It's pretty obvious that he doesn't know what he's talking about. Straight from TFA:
Some folk may object to my use of -ffast-math -- however, in numerous accuracy tests, -ffast-math produces code that is both faster and more accurate than code generated without it.
"I don't know about you, but if I want my math done fast and wrong I'll ask my cat" - Anonymous
What did I do?
optimized data structures (not algorithms)
moved a critical function from one class to another - still puzzles me why 25%
considered branch penalties
one batch of auto-generated C code - refined several times
rewrote some functions as plain C
rewrote one complex expression in asm
It's a lot of work, but I spent at least as much time considering algorithms prior to the optimization effort. Both strategies are important for making fast code.
Besides, in these benchmarks everything was the same except the compiler version...
Like a baby, we won't really appreciate its value until it's matured a bit
Look, babies are great.... it is the teenagers you want to get rid of.
I am very small, utmostly microscopic.
Unless the GCC documentation is very wrong, the only tree-ssa optimizations in 4.0 which don't get turned on by default at -O3 are -ftree-loop-linear, -ftree-loop-im, -ftree-loop-ivcanon, -fivopts, and -ftree-vectorize. It's true that some of these may be good optimization wins (probably increasing compile time in the process, but that's what the higher optimization levels are all about), but there are plenty of tree-ssa optimization passes being used in these tests.
Auto-vectorization, by the way, does not fall into a "obvious optimization wins which perhaps should be enabled at -O3 by default" category. It can bring very big performance benefits in some situations, but it should be used with caution.
Recently, a discussion took place on a FreeBSD mailing list wether the project wanted to use GCC 4.0.0 as the system compiler. Some objections where:
If I understood it right, We won't have a GCC 4.0.0 system compiler on FreeBSD anytime soon. Installing the gcc40 port is, of course, always possible.
cpghost at Cordula's Web.
The new tree-ssa optimization passes do not affect the backends. The backends continue to be written using RTL. It is very difficult to make a "somewhat-clean break" here, since that would imply rewriting or dropping every existing backend.
In other words, writing a gcc backend continues to be a relatively black art. That said, there is of course continuing effort to clean up the backend interface and make it easier to use and to understand.
Finally I'll note that the m68k is a very old processor and is one of the oldest gcc backends. It would be an odd choice to pick that backend to modify to support a new processor, unless the new processor is a direct variant of the m68k like ColdFire. For any other processor, you should certainly start by looking at a different backend. And, in fact, in general, I think you should write a new backend from scratch. I've done it both ways, and starting from scratch, while of course looking at existing backends, means that you understand all the code and you don't have a lot of cruft which is irrelevant for your processor.
"Like a baby, we won't really appreciate its value until it's matured a bit."
I'd like to say "it's apparent you're not a parent," but instead I have to say: I hope you're not a parent. It scares me to think what you might mean by its "value."
[And no, I'm not a "fundamentalist" of any religious persuasion (including those which worship money and/or capitalism), in case you were wondering.]
Uh, and this review is helping us... how?
lame uses assembler code for vectorization. One of the new features of gcc 4 is the beginnings of a vectorization model. A good test for gcc 4 would have been to compile some C-only bignum libraries, and Ogg Vorbis! povray is also a good example, but then you need to test more than one specific test-run. Maybe gcc 4 makes radiosity in pov-ray 400% faster at a 2% cost in the rest of the code?
This guy is the Tom's Hardware of Linux reviews, except he doesn't have the annoying ads, and he does not split his lack of content over 30 HTML pages.
The new warnings of gcc 4 have helped me find a bug in my code. That saved me a week. Consider how much faster gcc 4 needs to make pov-ray or lame to save you a week of work!
gcc 4 can now reorder functions according to profile feedback. That should make large C++ projects faster. Also, the ELF visibility should make KDE start much faster. This should have been tested!
Please note that I'm not saying gcc 4 produces faster code. I don't rightly know. I do know it produces smaller code for my project dietlibc, where size matters more than speed.
When I saw "GCC 4.0 Review", I expected to see a review of the way the compilers (especially C++) handles the syntax. Is the compiler any closer to the C++ specification? Has it improved the way it handles templates? Is it likely to break old code? All he talked about was tiny little speed increases (or lack thereof). If a speed increase is less than 20%, it's probably not even noticable. And thanks to Moore's law, even a large speed increase will be irrelevant in a short time. I care more about my productivity as a developer.
Those who have heard of it and looked into it take it seriously - but most haven't. Sure, it was mentioned on /. a while ago, but that was when the compiler was way back in beta-land - and it was announced as something completely new, so you can't blame people for not taking notice.
Now it's closing in on 1.0, and is very usable. Give it a try if you haven't already. I used to be a C++ guy. After using D for six months, just looking at C++ code makes my eyes hurt, nevermind coding in it.
A prospective professor gave a talk at our school, he'd been working at some grid computing lab. Well their code was underperforming, so they profiled it and found that sprintf was taking 30? 50? 70? % (I forget) of their code time - the machines had to communicate with each other a lot, and they used sprintf to serialize. (It's an easy fix - C++'s stream operators are much faster, since the type is known at compile time.)
:)
Oh yeah, also, for Quake 1, John Carmack hired Michael Abrash, an assembly language guru, to help out. Well Abrash found that GCC's memcpy() (or whatever it was) was copying byte-by-byte instead of by word (or something, I don't remember) and his reimplementation of that alone, doubled the frame rate!
Just some interesting counter examples to keep in mind
Someday we'll all be negroes
It is from my understanding that the usage of a compiler is to obtain extreamly streamlined code for the instruction set of the chip. To have fast compile times are fine if one is developing code that needs fast turn arround time. (Things like, will this bug fix address the issue.) However, when a compiler really shines is figuring out that a specific processor is 0.3% faster when this instruction is called. (And it's called 10e4 thousand times.) So spend some time finding that bit of code. In this article that is not disscussed. In my opinion that is where a compiler should be judged.
Does Gentoo have users? I though they only had installers.
It isn't a huge deal for most people, but it seems like the new GCC is singificantly better at optimizing for the PowerPC now.
I've been working with the GNU GSL on my mac a lot, and I recently updated to Tiger. The first thing I noticed when I recompiled the GSL with Apple's modified GCC4.0 is the significant and noticable speed increase. With this intense math stuff, doing SVD on 300x200 matricies, and it's shocking how much faster it is. I went from 3-5 seconds down to less than one.
I am not going to post any hard numbers because I haven't rigorously compared them yet, but I'll make some formal comparisons this week.
Slashdot. It's Not For Common Sense
ACK! If 70% of your time is spent in a serialization function call, FORGET about optimizing the function call.... You are WAY too fine grained in your algorithm for effective parallelization. He's have been better off running the whole damn thing serially on a single box methinks. His fancy grid algorithm spent more time doing "grid" stuff than working on his problem!
If your compiler compiles correctly, a program (leaving floating point inaccuracies aside) should produce the same result no matter what compiler it is compiled with. I.e. a gcc 4.0 should produce the same results no matter if it's itself compiled with 3.4.3 or 4.0.
It seems aside from extremely rare cases, gcc still generates exclusively 386 assembly. The commercial compilers have long since migrated into MMX, MMX2, SSE, SSE2, 3DNow instructions. The new versions of Windows software are all compiled with modern instructions but GCC and all of Linux is still using old 386 instructions.
If the amount of energy being spent on redesigning the kernel architecture, redesigning the compiler architecture, and redesigning the command usages was spent supporting new instruction sets, it could probably catch up to MSVC from 2000.
It's sort of sad that instead of improving the computer's ability to perform a certain amount of work in a certain amount of time, all the energy in GCC has always gone towards the study of compiler design itself.
You must have loved APL. ;)
SCO, Microsoft, P2P, what's your hot button?
Yeah, didn't Itanium replace that tired old CISC architecture?
Many tasks involve computation on data gathered. I cannot start my program 10 minutes earlier because the data has not arrived yet.
There is a configure check in KDE, if your compiler is gcc 4.0 it will fail in the ./configure step. This bug is acknowledged by the gcc developers, who are working on it. (They have some test fixes, but are not confident in them yet)
I'm sure kde will love 4.0.1 if the bugs are fixed, and the compile speed is still as fast, but 4.0 is a no-go.
At least we don't have to worry about the horror of having to downgrading from 2.96 to 2.95. Was I the only one about to give up on Linux after that disaster? Just for reference: http://linux.slashdot.org/article.pl?sid=00/10/07/ 0027218&tid=106
I don't get it. I was very serious when I wrote that, still this comment has 60%Funny, and even 20%Troll. ....
Oh well. I guess this comment will now lose all its Funny mod points, but what the heck.
To the contray, now it's even funnier.
"There is more worth loving than we have strength to love." - Brian Jay Stanley
You truly undervalue babies in your statement. I suggest that you read
A Modest Proposal (1729) by Jonathan Swift.
Whoa. This guy has something more valuable that benchmarks to share.
I didn't have to worry about that horror at all and I'm into my 10th year of using Linux now. You see, gcc-2.96 was a RedHat-only branch of gcc and it was broken. So you tried RedHat once and were put off Linux? RedHat may be corporate America's standar d Linux, but it's by no means the only Linux or the best.
Stick Men
coldfire is becoming an increasingly important architecture, and gcc could do well to support it. problem is there's a lot of coldfire variants with all sorts of nifty stuff, all different. ("you are in a maze of twisty passages, all different. you might get eaten by a grue.")
a simplified backend would help greatly in porting to these architectures. especially if the autovectorization could be mangled to support the EMAC in some of the coldfire variants.
After reading the results, I'm wondering if AMD invested money and human resource in helping the GCC team in developing their compilers. If they are, then what is the reason behind the poorer performance as compared to an older version. If they're not, why? Don't they have a vested interest in seeing this compiler work better on their hardware platform?
It seems that certain types of 64 bit floating point code suffer from some stupid optimizations done in the GLIB header files. I think it is worthwhile reading the following message for people needing fastest possible floating point code on AMB64 processors:
http://gcc.gnu.org/ml/gcc/2005-04/msg01733.html
Marcel
i wonder if we windows users could *finally* deliver executables as small as those made with the VC++ compiler.
Have you tried 1. compiling with gcc -Os to disable unnecessary unrolling and 2. stripping out debugging symbols at link time with gcc -s on builds on which you don't plan to use a symbolic debugger?
You know, I remember when someone did this to GCC 3, comparing against 2.9.5.
4.0.0 is a brand new compiler. Lots of techniques in it are brand new. Lots of tweaks and polish can be applied. If you actually take the time to compare 3.4 to 3.0, you'll find that the gap is bigger than 4.0 to 3.4. Furthermore, if you compare 2.9.5 to 3.0, you'll find 2.9.5 is better than 3.0 by a much wider margin than 3.4 is to 4.0.
This is a misunderstanding of the nature of progress. 4.0 is a brand new compiler with brand new internal behaviors. Lots of things are at the It Works stage, instead of the It's Efficient stage. You can't compare a 3-year polished compiler to a 3-week polished compiler; it's utter nonsense.
If you want to compare 4.0 to something, compare it to 3.0, or sit down.
StoneCypher is Full of BS
What happened to 2.6.11.8 - 4.6.11.7?
Have they added working support for the SB Live! Audigy LS soundcard yet?
Real men don't write sigs
Yup. Embedded stuff has to live by some different performance rules. Sometimes optimizing code that is only using 2% of your CPU cycles is exactly the right thing to do. Two words spring to mind immediately: interrupt handler.
Multithreaded code runs into the same issues for the same reason. When you are holding a lock, work fast. This generally has little to do with whether your CPU is fast enough for the overall throughput. It has to do with handling critical sections of code within particular timing windows so that you can get back to listening for the next input.
The net will not be what we demand, but what we make it. Build it well.
Sorry, my answer was ambiguous. gcc does already support the ColdFire in many variants. I was just using that as an example of why you might use the m68k backend, not as an example of work which needed to be done.
if you moved it from a big class to a little class you may have reduced the size of the stack that's allocated before calling the function.
Without seeing, and profiling, the code in question we probably won't ever know. The first possibility that occurred to me was that it reduced page faults by putting the function close to whatever was calling it. Either of us could be right. This is just another illustration of why programmer instincts are not a reliable guide to what needs optimizing. We're better at doing the optimizations rather than finding opportunities for them.
The net will not be what we demand, but what we make it. Build it well.
yes it does, but the support is poor. not only for coldfire but for 68k in general. gcc tends to make poor use of register-rich architectures. you can see this in eg powerpc assembly output. there is also no MAC/EMAC support in gcc afaik, so no autovectorization...
For your information: C is s subset of C++, and floating point intensive code in C++ is treated no better than in C. Likewise for integer-intensive code.
... feel free to carry out and publish your own test. Until then ... why not keep a civil tongue in your head?
Therefore: with respect to the floating preformance of GCC 4.0 (generally what matters most in technical and scientific work) this is an informative and valid test. Furthermore the fact that the author carefully states what benchmarks he runs allows you to scoff at him.
If you would like a test that measures how fast GCC can juggle dense forests of pointers
babies are free!
When it comes to gcc 4, I disagree. I think gcc does much better with register-rich architectures than with register-poor architectures. By modern standards, of course, m68k is not register rich (nor register poor)--it only has 16 registers, and they are not fully orthogonal in that some instructions require data registers and some require address registers.
I also think that the m68k backend does not include EMAC support. Do you want to contribute support?
Question is, should they be upset at the compiler?
Recently, I found this thread on the reactos forums. It is about compiling reactos with gcc 4. Sure enough, there were problems. One thing that caught my eye is this:
Seems like a good opportunity to start checking code against 4.0.0 and fix them warnings before they get promoted to errors in a subsequent version...the rockbox project are porting to iriver (cf5249) and have done some work getting gcc to properly support it. i know they have emac macros, dont know what it would take to get them working in the gcc backend.
To keep down the noise, I've removed the comment about the value of babies. Sheesh. ;)
I appreciate the responses herein, even the annoying ones. ;) Frankly, I'd love to see people do much longer, in-depth reviews of FOSS projects, if only to spur attention to issues of quality.
For those folk who have opposing opinions to mine: Please feel free to publish your own comparison or review.
All about me
Actually strlen() can be a hotspot, and I've helped optimize projects where strlen/strcmp were at the top of the cumulative time list.
However, optimizing strlen itself *is* pretty crazy. Much better to use a string class/struct where the length of the string is a field, so that the strlen equivalent is an inlined "return _len;".
It's a typo. Get over it. It's italicized because were I speaking that sentence outloud, I would have stressed that word.
just cp the changelog from 2.x to 3.0...
What's New:
Broke virtually everything
Fixed nothing
Made it slower
Yay!
"Champagne for my real friends - and real pain for my sham friends!" http://ericblade.postalboard.com/
Are all the amd64 code optimization bugs fixed, or is this just another version of Beta-ware?
"I don't know about you, but if I want my maths (=mathematics) misspelled I'll ask an American." - Anonymous
The addition of Fortran 95 seems more like a technological step ten years back.
4.0? Does that mean that 3.x is getting reliable enough to upgrade from 2.something?
Apparently not, as of linux-2.6.11.8, 2.95.x is stil recommended.
The recommended compiler for the kernel is gcc 2.95.x (x >= 3), and it should be used when you need absolute stability. You may use gcc 3.0.x instead if you wish, although it may cause problems. Later versions of gcc have not received much testing for Linux kernel compilation, and there are almost certainly bugs (mainly, but not exclusively, in the kernel) that will need to be fixed in order to use these compilers.
Thanks for the pointer. I actually do know about ATLAS and LAPACK. The reason I'm using the GSL is because of deployment ease. It's much harder to deploy fortran-based software than it is C-based software.
But it might be cool to distribute an ATLAS backend too.
Slashdot. It's Not For Common Sense
Better compile time, code size, run time, ... all because of flawlessy old software!!!.
open4free © : gcc -Wall -pipe -Os -fomit-frame-pointer -march=i686
Yeah that was in my early days, I almost didn't continue with Linux.
So what is the best?
I've got two boxen at home, one RH9 which is great. The other is FC3 which is like beta testing for their RHEL. At work I've got RHEL and it is really great. I just need something for home that doesn't cost $$ and allows more flexiability than Windows.
I have a 27 KLOC project which is a lot of modern C++ (as in templates, iterators, traits, smart pointers, generic algorithms a.s.o.) and not optimized for any particular compiler.
My crude results (on PPC) is: 25% smaller code, but twice as slow as GCC 3.3.
I haven't followed the GCC development so I don't know which state it's currently in or what's planned for the future. But I guess it'll only get better from here.
I get it, it's the same process whereby you get an infinite improbability drive, right?
Ignorance is curable, stupid is forever.