Intel Clang-based C++ Compiler [pdf]
llvm.org
llvm.org
Right, because Intel should spend their finite resources buying every imaginable Intel-compatible CPU from other vendors just to test and qualify them for the Intel compiler.
2) As mentioned above, Intel has a history of undermining compilation on non-Intel processors. It's not just a question of passively not spending time testing on other CPUs.
That's not what people are asking. Removing the code that sabotages performance on non-Intel processors would be trivial for Intel to do and would benefit users enormously.
Of course. This is obvious, if you had any idea about what you were talking about.
" I would only enable specific optimizations when I could guarantee the output would be optimal or a given model."
You can do that with compiler flags, ever heard of them?
If your CPU lies about its feature support, there are far, far, far bigger problems for the end user than whether a binary is optimal or not.
In this case, the optimal thing to do was not to use these instructions despite the processors claiming support.
They're already doing that by checking whether it says it's a genuine Intel. If you can't trust it when it says that it supports a feature, why trust it when it reports a manufacturer?
If you want more, use a different compiler, period. $VENDOR spends money on their compiler to support their chips, not to appease every whining, butt-hurt user on the Interwebz that thinks $BIGCO owes them something on a competing chip.
It's not that the engineers behind ICC failed to take the architectures of non-Intel processors into account, it's that it intentionally uses a slow path on non-Intel processors that cripples performance. We're talking assuming that the CPU doesn't support SIMD bad here. If you use virtualization to make your CPUID vendor string look like "GenuineIntel", or modify the executable to remove the Intel processor check, the "Intel optimized" builds run just as fast (barring relative processor strengths) on comparable AMD processors.
This matters because:
Until this became public, Intel gave no mention or disclaimer of suboptimal performance for ICC-generated code on non-Intel processors.
News outlets did and probably still do use ICC-generated binaries for benchmarking, giving an unfair marketing advantage to Intel processors ("Look how poorly this AMD CPU runs this binary we specifically designed to function horribly on their CPU! Buy Intel today!")
Almost no one is aware of this.
Case in point, take bench completion time on a Xeon supercomputer [1]. Compare that to relative completion time on an Opteron supercomputer [2] (for both, lower is better). If that's Intel's compiler handicapping AMD performance, I wonder what GCC is trying to do?
[1]: http://www.nersc.gov/users/computational-systems/edison/perf...
[2]: http://www.nersc.gov/assets/_resampled/resizedimage730421-ho...
looks promising, and cannot wait to try this in trunk.
I know Clang and LLVM were made with licenses explicitly designed to allow such extension (used, for example, to allow Xcode to integrate so tightly).
If not now.. its very common that the project dont get the traction they are expecting.. and then they just open it up to at least get some good marketing of it..
Theres also the whole net effect.. hiring people to get to know a open source project.. that can contribute back to it, or get hired by someone else that do contribute back..
I think in the end, open source with BSD/MIT licenses are likely to have better results for the open source project as a whole..
I think GNU make a lot of sense when stallman give birth to it.. because the software "ecosystem" was very brutal about openness back than.. it required strong leadership and actions.. i think it makes less sense nowadays.. you know.. even microsoft are opening their stuff!!
I think we need to think now more about open data, because there a lot of sensitive stuff behind black boxes and paywalls..
Edit: https://software.intel.com/en-us/articles/intel-software-dev...
As I understand it, LLVM produces some low level byte-code that is then compiled.
Is it because LLVM is better at parsing and Intel compiler better at performances that they combined both ?
Is this for OS X only?