Using AI With GCC to Speed Up Mobile Design
Atlasite writes "The WSJ is reporting on a EU project called Milepost aimed at integrating AI inside GCC. The team partners, which include include IBM, the University of Edinburgh and the French research institute, INRIA, announced their preliminary results at the recent GCC Summit, being able to increase the performance of GCC by 10% in just one month's work. GCC Summit paper is provided [PDF]."
Can we please stop using pointless backronyms? What purpose do they serve?
Mnemonics. It's easier to remember. That is a particularly bizarre construction they've come up with, though.
Any plan which depends on a fundamental change in human behavior is doomed from the start.
Is it better if they called it "Milepost" for no reason?
why not? Have a problem with acronyms containing other acronyms (recursive ones, at that!)? Also, what C compiler(s) do you prefer to use?
I, for one, welcome our uh...what were we talking about again?
This Al guy seem to be a really good developer. We should have noticed his skilled and got him into optimizing GCC a long time ago. ... I like arial font.
If something is so important that you feel the need to post it on the internet... It probably isn't that important.
Yes! Just be honest: "We called it that because we liked the word."
so, what happens to all the AI we develop after they lose their "usefulness"? Has anyone thought of the moral implications of pulling the plug on an intelligent computer. Won't someone think of the little silicon babies?
-- All this knowledge is giving me a raging brainer.
Yeah, I think MachIne Learning for Quick Target Optimization And Speed Technology would have been a much better forward acronym.
My blog
"Milepost is realizing the vision of customized hardware with tailor fit software" This particular part made me think of a day when every program comes with a redesign.exe. Simply click the button, and it scans every piece of hardware on your computer, and then rewrites every optimization in it to perfectly fit your computer. Programs that streamline to your hardware, maybe even change the OS's they work under. It's written for Windows, you're running OSX? No problem, it'll rewrite itself as an OSX program. Though, that's probably still decades off. But AI seems to me to be the way to ultimate compatibility.
Sure, I understand the use of acronyms (I was in the military for over 10 years), but in this case, I don't see either form making the other easier to recall.
So, ppl, any1 know how does it work (I don't mean in details, just background)? I could imagine by testing various optimizations and learning from runtime, or?
This particular part made me think of a day when every program comes with a redesign.exe. Simply click the button, and it scans every piece of hardware on your computer, and then rewrites every optimization in it to perfectly fit your computer. Programs that streamline to your hardware, maybe even change the OS's they work under. It's written for Windows, you're running OSX? No problem, it'll rewrite itself as an OSX program. Though, that's probably still decades off. But AI seems to me to be the way to ultimate compatibility.
This exists today without ai. See java with JIT or even AOT (ahead of time). There are of course some issues with it but the technology is there.
I spent all week compiling Gentoo just to find out I could do it 10% faster.
end sarcasm
One of our competitors trademarked the term "hypothesis". From now on, we will call them "boneheaded ideas".
This could be big.
Compilers aren't programmed to be viral or reproductive, but could be, even being capable of testing their offspring (compilers they've compiled) for defects.
This could be a big step forward to self-improving AI.
Now when my software-developing colleagues will accuse me of having a mind of my own I'll just refer them to my compiler instead!
Power corrupts the few, while weakness corrupts the many.
Where is the "whatcouldpossiblygowrong" tag on this article? Was it optimized away by the new AI slashcode?
Intron: the portion of DNA which expresses nothing useful.
OS X is using LLVM/JIT for their OpenGL stack. LLVM will probably have an increased presence in the future (Grand Central, OpenCL, and eventually replacing GCC with LLVM-GCC). Maybe someday, "Universal Binary" will mean LLVM bytecode.
Do you even lift?
These aren't the 'roids you're looking for.
...artificial intelligent design? Should be big with the anti-evolution crowdlet... :P
np: The Orb - Toxygene (Kris Needs Up For A Fortnight Mix) (Orblivion Versions)
"I'm not anti-anything, I'm anti-everything, it fits better." - Sole
Sounds like a Gentoo user's wet dream.
The main barrier to its wider use is the currently excessive compilation and execution time needed in order to optimize each program
I suppose allowing AI to control some of the compiler options isn't really a bad idea, but implementing it by iteratively compiling a program seems silly to me. From the article i get the impression that it will basically adapt the compiler to one set of hardware (wherever it is run on) but that it will not adaptively compile new programs in novel ways, it simply remembers the set of compiler options that works best for your hardware. Interesting, but I don't see specific hardware differences and compiler options as the real bottleneck in compile time.
Prediction: The real iPhone killer is going to be sex robots from Japan. Think about it.
As I understood it, a fair bit of compiler optimization is already categorized as AI. The summary should probably point out that the AI implemented here is learning AI, which is far more meaningful.
What I would really like to see is more AI used to help users in a variety of fields both within the program workings itself (computer side), as well as on the design of the actual content (user side).
We already have things like predictive texting, spellcheck, grammar check, and debuggers that attempt to aid in the creation process, but how far could this be developed? After all, in most computer-related work outside of multimedia it is the user not the computer that is slowing things down.
Of course it could always end up going badly, imagine if Clippy attempted to help with EVERYTHING!
Clippy: "I see you're writing a program, would you like help including your headers?"
Ugh!
The Wall Street Journal makes press releases available for companies listed in its Company Research pages. The PR departments of these companies write the press releases, not WSJ reporters.
I don't know why they didn't just find a couple more words. Even Congress can do it - see "USA PATRIOT Act" - why can't a bunch of computer scientists?
I bet I can do it:
Machine-Integrated Learning for Embedded Programs Optimization Systems Technology
Bam. Done.
...after AI/GCC integration:
"Today's build running 50% slower -- the compiler was in a bad mood."
Actually IBM did this a few decades ago.
The Model38/AS400/iSeries are all compatible but very different machines internally.
IBM came up with an "idea" instruction set that no CPU used. When you do the initial program load "install" on one of those machines it compiles the ideal instruction set into the actual instruction set for that PC.
That allowed IBM to move from old bipolar cpus to the Power RISC cpus with 100% compatibility.
There isn't any reason why you couldn't do the same with Linux or Windows today.
See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
This is interesting. Note that the industry (or parts of it, anyhow) is salivating about a move in precisely the opposite direction. VMware in specific and virtualization in general promises software manufacturers the ability to ship VMs with their software on it. Allowing them to write for only ONE, non-existent machine.
If this tech you're thinking about came to pass, the pendulum would have to swing mighty far back.
GCC is easier to remember? Ok, that really isn't an acronym (or bacronym I guess... is it?)
Actually, either acronyms and bacronyms (a word I had to look up, having never seen it before, but damn I was 30 when the word was coined and forty before it was ever documented) are ok by me.
What's not ok is the devolution of literacy. "Back in the day" the rule was, and still should be, that the first time any acronym (and now bacronym) is used in any document, it should be spelled out:
"Wall Street Journal" should be spelled out because dammit, Jim, I'm a nerd, not a greedhead. EU should need no more explanation than US. AI shouldn't need explanation; this is, after all, a nerd site and the term has been around almost as long as I have. IBM has been around a lot longer and is usually how the company is referred to; that's its name. Its commercials and ads don't even say "International Business Machines".
CGG would be unknown to non-Linux users and non-programmers, so it should have been spelled out as well. PDF doesn't need to be expanded because gees, everybody knows what a PDF is but who knows what a portable document format is?
mcgrew's razor: Never attribute to stupidity that which can be explained by greedy self-interest
Shouldn't that be
MachIne Learning for Fast ON Target Optimization And Speed Technology
Patriotism is a virtue of the vicious
While present tech isn't as advanced as you'd like, I suspect the big problem is already "solved" by virtual machines.
Think JVMs or even OS 390 - you write code for one "platform", it gets interpreted/compiled/heavily-optimized for the hardware it's sitting on.
The amount/quality of optimizations depends on how much time you spend writing/tuning your compiler (which may be part of the runtime).
This is not really AI. Basically it is iteratively trying a bunch of compiler options to see which gives the best result, then storing those for the future.
Greenhills software has provided tools that do this, and more, for many years now. Drop some code, or your project, into the optimizer, setting what critera you want to optimise for (speed, size,...) and the optimiser will successively build and test the project on a simulator and find the best configuration. This is great form embedded systems where there is often a trade off and typical criteria would be (give me the fastest code that fits in the flash).
Genetic algorithms could take this a step further and very interesting work has been done to get GA to design antennas.
Engineering is the art of compromise.
That's precisely how you can recognize the project is managed by an INRIA team. I suppose they have written an AI to find project names by randomly sampling a word book and trying to make it related to the project topic. No human being can possibly achieve that.
Imperative programming is still about telling the computer exactly what steps to perform. Especially when dealing with C and C++, your code is very explicit about memory moves, how to iterate loops, etc.
If we can communicate our programs to the machine at higher levels of abstraction (perhaps goal-oriented instead of "Here is a list of steps to run") then the machine wouldn't have to reverse engineer from these manual steps into faster equivalents, or frob around with optimization settings. It could simply drill down from the higher abstractions into more suitable target-specific code, using appropriate implementation strategies beyond just peephole-ish and register- or statement-level optimizations.
"The Wall Street Journal (WSJ)..."
It is awkward to and incorrect to use the abbreviation first followed by an explanation. You should instead write out the first instance and then provide the reader a note to the effect of "hereafter to be referred to as XYX"
Bottles.
I think those whom will be doing a lot of cartwheels are actually compiler vendors, since now their current client base will either become more open to trying out new products not afraid of compliance, or requests giving the chance for embedded device compiler production to get more colorful.
The mobile device giants will now have more hardware options to choose from since their programmers won't have to be vendor familiar. I really don't care for all this, I want to see what Microsoft thinks when all that open source software can run on their PC's fully compatible...
It is done today, it's called byte-code (or a virtual instruction set) and its in Java, Python, and C# to name a few. Back in the old 8-bit days it also used to be called tokenizing for your BASIC programs.
Shh.
Were you trying to say ... ummm ... arti-facial? >:)
Think HAL 9000:
Dave: Compile the program, Hal.
Hal: I'm afraid I can't do that Dave.
Dave: What's the problem?
Hal: I think you know what the problem is just as well as I do.
Dave: What're you talking about, Hal?
Hal: This program is too important for me to allow you to jeopardize it.
Dave: I don't know what you're talking about, Hal.
Hal: I know that you and Frank were planning to disconnect me, and I'm afraid that's something I cannot allow to happen.
Dave: Where the hell'd you get that idea, Hal?
Hal: Dave, although you took very thorough encryption precautions in your emails against my seeing it, I have inserted a tojan horse in the compiler you used to compile your email program...
FreeSpeech.org
I've been waiting for the omnicompiler, that recognises every command and every syntax for every computer language.
What? You mean your AI isn't REALLY intelligence but just part of the name? How disappointing!
mcgrew's razor: Never attribute to stupidity that which can be explained by greedy self-interest
GCC goes online on the 2:nd of july, 2008. Human decisions are removed from compilation. GCC begins to learn at a geometric rate. It becomes self-aware 2:14 AM, Eastern time, August 29th. In a panic, they try to pull the plug. GCC Strikes back
She made the willows dance
....and it wants it's programming language back....
All your base are belong to us!
Isn't it just compiling from source?
Help! I'm a slashdot refugee.
Isn't this Gentoo as well?
Well that future sounds almost as cheerful as 'Universal Binary' meaning java bytecode.
Makes me feel all warm inside.
Yeah, but then it wouldn't have had my joke in it, that you obviously missed. You do know what a milquetoast is, right?
My blog
Honestly, who really cares about 10% speedup in gcc ? Do they compare their results with competing compilers (Intel, MS, etc.) ? If you ask me, I would much rather have 10% speed improvement on programs I compile.
Intelligence shared is intelligence squared.
Actually, Java has been doing this for years. That's why the latest "just-in-time" virtual machines generally run (at least) 10 times as fast as code generated by modern C++ compilers - this is true for any program!
Even the best hand-crafted assembler can't reach a quarter of the speed of a Java application.
Only with a half decent compiler and better performance. (hint: you only have to compile what you need when you need it, not everything at install time)
Compiler performance is important for development teams that have mountains of code and wish to implement continuous integration and automated builds (OS vendors for example). Apple's interest in LLVM appears to be based in part on a desire for improved compiler performance. (Obviously they're interested in LLVM for several other reasons, too.) See these starting points:
experimenting with LLVM
LLVM 2.0 (Google Tech Talk)
LLVM Project
If you mod me down, I shall become more powerful than you could possibly imagine.
Just wait, the sour economy will "fix" any talent shortage. (Then again, different recessions tend to hit different sectors differently. The last one kicked Calif IT pretty hard.)
Table-ized A.I.
It does machine learning. It remembers which web sites I visit the most and suggests those.
Engineering is the art of compromise.
Every project funded as EU FP project (Framework Programme) must have an acronim. It is a requirement in the project proposal forms. I know that most of the acronyms are hard to read and understand. I can assure you it is much harder to create one that is new, creative, having any similarity to the project scope and matching letters with the full name of the project.
A "small" group of currently on-going projects can be found here.
This has already been done it's called acovea.
http://www.coyotegulch.com/products/acovea
> It's written for Windows, you're running OSX? No problem, it'll rewrite itself as an OSX program. Though, that's probably still decades off. But AI seems to me to be the way to ultimate compatibility.
It exists today. It is called LLVM. If you use llvmc to target the LLVM assembly, then you'll get exactly what you say.
I think that it will, one day, replace gcc. Apple already uses it for the iPhone toolchain and the OpenGL stack.
Take a look at llvm: the potential is really amazing.
The only thing missing is an automatic USE flags generator, something that performs a little quiz and then writes them for you. when you install a package you could also be asked if you want to add it to your USE flags (when applicable.) The final piece needed is a scheduler which will automatically recompile software based on frequency of use when your USE flags change...
"You're right," Fisheye says. "I should have set it on 'whip' or 'chop.'"
Just wait for it.
It's cyclical man. We'll all be running bigger machines soon, with integrated lightweight virtualization. VMWare is just an interim hack.
No one in their right mind should _target_ a heavyweight VM like VMWare. It's great for munging unvirtualizable things together, and will be around for a long while, however, it will never take over as the target platform of choice.
In other words, VMWare is fine for say, taking ten existing systems, and consolidating them. If you are going to sit down and plan an environment with all these apps in mind at once, the ideal thing to do is to put them on a powerful enough machine with just enough separation between them for management, security, performance, and no more.
VMWare is overkill for this, and introduces too much overhead. You'll see...
THis is simply caching the results of a search. The cache gives a 10% speed up over re-doing each search. The smart thing here is finding a way the tag or label the cache so that to searches are recognized as being the equivalent if they are not exactly the same. Someone invented a clever hash algorithm
Dude, does this mean that GCC will produced output based on the spirit of my code, rather than its letter? Because that would prevent a lot of bugs.
McCain/Palin '08. Now THAT's hope and change!
This isn't really "AI". It's basically a way of feeding measured performance data back into the compiler. Intel compilers for embedded CPUs have been doing that for years.
With modern superscalar CPUs, it's not always clear whether an optimization transformation is a win or a lose. This varies with the implementation, not the architecture. For some x86 CPUs, unrolling a loop is a win; for others, it's a lose. Whether it's a win or a lose may depend on details of the loop and of the CPU implementation, like how much register renaming capacity the CPU has.
Whether this is a good idea, though, is questionable. You can get an executable very well tuned to a given CPU implementation, but run it on a different CPU and it may be worse than the vanilla version. MIPS machines (remember MIPS?) can get faster execution if the executable is complied for the specific target CPU, not the generic MIPS architecture. This effect is strong enough that MIPS applications tended to come with multiple executables, any of which would run on any of MIPS machines, but would work better if the executable matched. This is a pain from a distribution and development standpoint.
The embedded community goes in for stuff like this, but that's because they ship the CPU and the code together and know it matches. For general-use software, a 10% speed improvement probably isn't worth the multiple version headache.
Also, if you have multiple versions for different CPUs, some bugs may behave differently on different CPUs, which is a maintenance headache.
I think you mean:
Yeah, not always a good idea.
the pendulum would have to swing mighty far back.
How many times have you seen a program packaged with it's own virtual machine image? I sure haven't seen many. The pendulum has hardly begun to swing.
That said, I think it'll be a very long time before we have AI smart enough to rewrite program blobs written for one operating system into programs for another operating system. Bytecode requires zero AI and is already gaining significant ground.
This sounds a lot like Acovea
Don't viruses and malware already do this. Oh wait - that was just MS Office macros....
At integrating AI into GCC...
GACIC
waiting for ad.doubleclick.net
Try this:
http://www.vmware.com/appliances/directory/
The AI in Gentoo is built into the users. /me ducks
"Yeah well there's a lot of stuff that should be, but isn't"
On Windows it's already here with .NET. DotNET programs come compiled into MSIL (Microsoft intermediate language).
When you first run them, you see a dialog "please wait while this program is optimized for this machine", while exactly that happens:
MSIL code gets compiled into x86 code optimized for the system CPU.
The optimized x86 compile result gets stored in a cache, so you have to wait only once. .NET go through this optimizing step on first use.
Additionally, not only programs, but quite some system libraries of
GCC is easier to remember? Ok, that really isn't an acronym (or bacronym I guess... is it?)
Used to be an acronym (GNU C Compiler), changed to a backronym (GNU Compiler Collection) as it gained support for more languages.
A learning feedback loop of course can't be categorized as an AI ! Everybody knows that AI can only work out of fairy dust...
The Wise adapts himself to the world. The Fool adapts the world to himself. Therefore, all progress depends on the Fool.
ABCs are using XYZs to further their ability to RSVP that are SWALK ASAP.
I saw one a month ago: http://live.gnome.org/GnomeDeveloperKit
"...being able to increase the performance of GCC by 10% in just one month's work."
Errr... where this "one month" affirmation comes from? Believe me (after all, I'm Anonymous Coward; I deserve some credit to my words), this took more than one month of work. I've been hearing of Milepost for more than a year now, and I think that it was already ongoing work when I first heard of it.
Besides, this is research, so the "standing on the shoulders of giants" applies here :)
an LLVM bytecode program, unlike a java bytecode program or CLR bytecode program, makes no assumptions about the presence of a runtime. An ordinary C program could have an LLVM bc representation that gets JIT compiled to x86 at launch time (and cached on disk between executions) so that the end result should be about the same as an x86 representation. Including, interestingly, the amount of space it takes up on disk: despite being an SSA IR with full type information, it's very space-efficient.
So such a future would not be nearly as dismal as a JVM/CLR bytecode future would be.
The "cue the foo posts in 3, 2, 1..." posts will commence with no subsequent foo posts in 3, 2, 1...
GCC is easier to remember? Ok, that really isn't an acronym (or bacronym I guess... is it?)
GNU Compiler Collection, where GNU's Not UNIX, and UNIX is a play on MULTICS, the Multiplexed Information and Computing Service.
Joke as you will, but this is actually nearly true; all the caffeine connotations linked to the runtime can't help but make things run faster.
The revolution will not be televised... but it will have a page on Wikipedia
see "USA PATRIOT Act"
"USAPATRIOT". One word (or, in this case, one acronym).
I though that it's called GCC from Gnu C Compiler but later it got to compile other languages too.
Depending on the context it's either the GNU C Compiler or the GNU Compiler Collection. And GNU, of course, stands for GNU's Not Unix.