Intel: Milking the cow at both ends

When you buy your fancy top-end CPU, you expect stuff to run faster. Only it hasn’t been that simple since before the 386. Your new CPU isn’t really going to kick into gear until you get software that uses the shiny new features of your CPU.

In the case of Intel, they are very guarded about how their new features work. Probably because – as it happens – Intel also sells compilers: the software that programmers use to turn their text into machine instructions.

So your Intel CPU isn’t going to run anything at top whack until software companies have forked out for Intel’s compiler. Now, that’s a pretty nice deal for Intel, isn’t it? They sell the hardware that runs your software, which makes your user think your software isn’t running very well, because it doesn’t run very fast on the guys new hardware, unless you buy the software that Intel sells to make the hardware run the software properly. Ugh.

Their compilers are really good at optimizing code. We got a sizeable FPS increase in WWII Online just from switching to the Intel compiler.

But in just about every other aspect it’s a real pile of crap…

For example, it can’t read Unicode/UTF8 encoded source files. Every now and again it goes into some weird state in the background and prevents you from compiling unless you use task manager to forcibly kill all the lingering instances of it around. You get weird error messages like “Problem with Microsoft compiler”. Hrm. Really? Other goodies include a 2 minute wait followed by “There may have been an error”, “Build complete” without doing anything because (read carefully) nothing did not need compiling.

And it’s freaking slow: Even when you’re compiling without optimizations, it crawls. You may recall, I’d gotten the client build time down to 55 seconds under Windows. And with a few more tweaks I got it under 30s.

Shortly after we switched to the Intel compiler and – even building a debug build without optimizations, it’s back up to the 5 minute mark :(

Now – their compilers aren’t that expensive, unless you want to be picking and compare with GCC or Clang or even Visual Studio.

Wait a second: Visual Studio isn’t just a compiler, it’s a complete Development Suite. A special programming editor, a debugger, libraries, tools, C++ compiler, C compiler and C# compiler, and tons of other stuff.

And it’s from Microsoft, it should cost an arm and a leg.

Microsoft Visual Studio 2008: $299.

Intel C++ Compiler: $599.

And because ICC doesn’t provide an IDE, that means you’re probably going to wind up buying Visual Studio as well: frankly, by using MSVC to build your debug builds, you’ll have saved $299 within the first week or two of using Intel’s compiler :(

There is one last little twist. Intel’s compiler has some options to really optimize the crap out of your application with Intel-only features – which means using special instructions that AMD chips don’t have that will cause the code to crash.

So I’m thinking: I bet Intel’s suits don’t see a reason to put a whole lot of money into their compiler product. Which means that, by and large, most software running on an Intel CPU ain’t performing at best capacity, because most of it runs under Windows and most Windows software is built with a Microsoft compiler, and Microsoft’s compiler – while good – doesn’t generate code that performs anything like Intel’s compiler does.

But surely the suits would see the potential for milking the cow from both ends: if Intel’s compiler was the standard, then their shiny new Xepeeon CPUs would be running kick-ass “omg was I using an abacus before” software in short order, and more developers would want to buy the Intel compiler.


Can I say it? Buy more RAM. ;)

is there any way to get a ICC compiled version for the intels (with the boost) and another one for the amd’s, like we had already before with the SSE and X86 versions?

While it may not be suitable for the client due to non-amd instructions, it might prove useful for the server which is a controlled environment.

The server code is compiled with GCC and tuned for the specific architecture it’s being built for.

The Intel C/C++ Compiler optimizes the code so much better than MSVC that the “worst case” path is still better than the MSVC path.

We’re not using any Intel optimized code paths at this point, so actually both AMD and Intel users get the same executable path anyway. And, as I said, we got a significant performance boost from it. The producers were immediately concerned about AMD CPUs and the first machines we benchmarked the new builds on were AMD systems.

I think we’ve been using ICC for at least a year or more on release builds…

We may start using the ‘SSE 4.2’ optimization path for some of the code, just because there are some significant benefits to be had from it – although I don’t know whether or not the compiler will quietly ignore those paths for AMD CPUs.

I happened to be looking at this yesterday, and while I don’t care about running on AMD since all the centers I use happen to have Intel boxes, I thought there was a way to include several code paths.

Of course given what was said about the Intel/AMD settlement, it seemed like anything compiled on icc checks the vendor string and doesn’t run any SSE code path on anything but Intel regardless of what the processor is capable of (from e.g., so in that case it doesn’t matter what you do until Intel fixes that. Which I guess they’ll do shortly after forking over the $1.25G…

Intel doesn’t really make any money on their compilers. The compilers are there to make software run faster on Intel’s chips…it’s not a P&L for them.

Also, Intel’s compilers emit SSE2 code for AMD CPUs. In some cases they may not use the most recent extensions (e.g. SSE4).


Leave a Reply

Name and email address are required. Your email address will not be published.

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <pre> <q cite=""> <s> <strike> <strong> 

%d bloggers like this: