News for hackers. Stuff that matters.
Re:Intel C/C++ compilers complete adoption of LLVM by MauranKilom on Thursday August 12, 2021 @05:55AM (#28154220)
> Also: if icc is going to go with LLVM as a backend, then what is the point of using icc at all? Why not just use clang?

From the blog post:

"Not all our optimization techniques get upstreamed—sometimes because they are too new, sometimes because they are very specific for Intel architecture. This is to be expected and is consistent with other compilers that have adopted LLVM."

I don't see any good technical reason in this marketing language though, tbh:

- "Our optimizations are too new" -> So put them behind a feature flag when upstreaming? And why inflict them on icx customers if they are "too new"? What does that even mean?

- "Our optimizations are architecture specific" -> ...yes? Emitting good architecture-specific code is the whole point of an optimizing compiler? How is that an argument against upstreaming?

- "Other compilers also don't upstream everything" -> That's a non-argument.

I get it, there's no money to be made in just implementing all your optimizations in clang directly. But these reasons (together with the repeated emphasis of how they do contribute to LLVM) seem silly. To be clear, I'm all for Intel helping improve LLVM, but the technical arguments for maintaining a separate commercial version don't convince me at all.

Re:Intel C/C++ compilers complete adoption of LLVM by volta83 on Thursday August 12, 2021 @06:04AM (#28154290)
What that sentence actually means is "we don't want to help our competition (AMD, NVIDIA) but we don't want to re-implement the wheel".

The API and fundamental part of LLVM is its IR, LLVM-IR, which is where most optimizations happen.

From this point-of-view, LLVM is a "platform", and an extremely brittle one: every release has breaking changes to the IR, the IR is constantly evolved to support new hardware and new optimizations, etc.

When you build a tool on top of LLVM, you are buying into this rapidly changing platform.

The only proven way of using the LLVM platform competitively is to be part of its future: follow upstream closely, upstream most of your code, and actively participate in the platform evolution so that your competitors can't turn it against you.

If you keep most of your code private, following upstream gets very hard. You skip one release, and then its 10x harder, so you skip another release and stop participating in LLVM's evolution cause you'll have to wait years for changes to upstream to land on your compiler. Your competitors do what's best for them, and those can be things that are bad for you, and then you are proper screwed, cause you can't migrate away from LLVM either.

Companies like Intel and NVIDIA do this, e.g., nvcc and ISPC are stuck on LLVM 7 (~4 years old), but these companies have built huge technology stacks like CUDA or DPC++ on top of it!

Intel and NVIDIA might have enough manpower to maintain their own outdated fork of LLVM forever, but at some point it just stops being LLVM, and these companies are not really much better off than where they started.

IMO, building all your technology on top of a platform that either is or can be under your competitors control is just a really bad idea.

One would hope that these companies would realize this and contribute back and help the community as much as possible, but in practice they just don't. By the time they realize it, it's already too late.

Re:Intel C/C++ compilers complete adoption of LLVM by floatboth on Thursday August 12, 2021 @07:59AM (#28155116)
ISPC is not stuck on LLVM 7. Only fails on 12 currently, works on 11 and earlier:

https://github.com/freebsd/freebsd-ports/blob/85cccf4f15c42d...

But hopefully that will be fixed soon.

Re:Intel C/C++ compilers complete adoption of LLVM by volta83 on Thursday August 12, 2021 @09:06AM (#28155765)
+1 thanks for the correction, should have verified this. Last time I used ISPC it was using an extremely outdated LLVM version (5) or so, and it took years to move it to LLVM 7. I wasn't aware that they have been slowly migrating to newer LLVM versions.
Re:Intel C/C++ compilers complete adoption of LLVM by thereddaikon on Thursday August 12, 2021 @11:15AM (#28157371)
I think its even simpler than that. They don't want to reveal any of their secret sauce through available source be it tipping off competitors to hardware designs or just revealing compiler optimizations they believe are valuable enough to keep as trade secrets. Why would they make AMD's job easier?

Intel's C compiler has always played games with non-intel x86 architectures compared to their own.

Re:Intel C/C++ compilers complete adoption of LLVM by varajelle on Thursday August 12, 2021 @06:51AM (#28154606)
Same thing with C++Builder whose last version from this year is still based on LLVM 5, I think. Even Apple's clang is behind LLVM upstream if I'm not mistaken.

The joy of permissive licenses!

Re:Intel C/C++ compilers complete adoption of LLVM by floatboth on Thursday August 12, 2021 @07:56AM (#28155105)
Copyleft licenses have no way of forcing anyone to follow upstreams more closely.

Android is a great example. Typical Qualcomm/Mediatek/etc. behavior: take a "stable" kernel, stuff it with custom undocumented drivers and junk, be stuck on that version forever. The only thing the GPL changes is the vendor posts a source dump of dubious usefulness in some obscure section of their website.

Re:Intel C/C++ compilers complete adoption of LLVM by qayxc on Thursday August 12, 2021 @08:12AM (#28155228)
> Android is a great example. Typical Qualcomm/Mediatek/etc. behavior: take a "stable" kernel, stuff it with custom undocumented drivers and junk, be stuck on that version forever.

I don't think that's such a great example in this context.

Qualcomm, Mediatek, etc. are hardware vendors after all. Software to them is a necessary evil, not a reason d'être or complementary tool (as it is for NVIDIA and Intel). Their customers fall in the same category - smartphone manufacturers want to sell units, not keep software up-to-date.

Re:Intel C/C++ compilers complete adoption of LLVM by jitl on Thursday August 12, 2021 @08:24AM (#28155340)
Intel and NVIDIA make their money selling hardware.
Re:Intel C/C++ compilers complete adoption of LLVM by qayxc on Thursday August 12, 2021 @09:01AM (#28155708)
> "NVIDIA is a software-defined company today," Huang said, "with rich software content like GeForce NOW, NVIDIA virtual workstation in the cloud, NVIDIA AI, and NVIDIA Drive that will add recurring software revenue to our business model."

https://www.msn.com/en-us/money/technologyinvesting/nvidia-i...

It's a very similar story for Intel. NVIDIA and Intel are selling hardware because of their software portfolio. How many GPUs would NVIDIA sell in the HPC market if it wasn't for CUDA and the various support libraries around it?

Intel's non-client solution revenue was over 40% of their total revenue in 2020. This includes their (software-) AI solutions, applications, licence business and services. So Intel, too makes a significant amount of money from software and services around their software ecosystem.

Re:Intel C/C++ compilers complete adoption of LLVM by volta83 on Friday August 13, 2021 @01:07PM (#28171607)
> How many GPUs would NVIDIA sell in the HPC market if it wasn't for CUDA and the various support libraries around it?

We don't have to hypothesize about this. The HPC GPU market has multiple vendors, just look at how many HPC GPUs AMD or Intel are selling: AMD and Intel have ~0.8% or so market share. NVIDIA has >99%.

Pretty much every review of HPC GPUs states that AMD GPUs are both faster and cheaper.

So how come they don't sell?

The answer is software.

Re:Intel C/C++ compilers complete adoption of LLVM by varajelle on Thursday August 12, 2021 @08:44AM (#28155526)
Yes that's true, the licence alone is not enough.

That said, this "junk" dump can still be used by the community of users to upgrade themselves the software on that hardware, so that's still a nice improvement.

Back to LLVM the question is whether these companies decide to not contribute upstream because they don't bother to make clean patches or because they want to keep it for themselves.

I'd argue that they would be much better off long-term making clean patches anyway, so that's not a valid reason for not contributing.

And even if theynjust dumped their patches, the community could still take them and incorporate nice optimization into upstream.

Re:Intel C/C++ compilers complete adoption of LLVM by beached_whale on Thursday August 12, 2021 @11:46AM (#28157773)
Apple's is up to 6mo old at release, so currently around clang10/11. Every so often it gets 2 releases behind as they are both on 6mo cycles. It's not bad really and currently Clang 12 brings few compelling reasons to upgrade. The issue will be Clang 13 is supposed to have a bunch of C++20 things, I think, and it will also be one of those ones that has a long time before Apple releases their next one.
Re:Intel C/C++ compilers complete adoption of LLVM by zetalyrae on Thursday August 12, 2021 @07:53AM (#28155078)
>The only proven way of using the LLVM platform competitively is to be part of its future: follow upstream closely, upstream most of your code, and actively participate in the platform evolution so that your competitors can't turn it against you.

>If you keep most of your code private, following upstream gets very hard. You skip one release, and then its 10x harder, so you skip another release and stop participating in LLVM's evolution cause you'll have to wait years for changes to upstream to land on your compiler. Your competitors do what's best for them, and those can be things that are bad for you, and then you are proper screwed, cause you can't migrate away from LLVM either.

This is an interesting take. I've heard the claim that GCC kept its codebase cryptic to prevent companies running home with it and not upstreaming changes, maybe that's LLVM's strategy.

Re:Intel C/C++ compilers complete adoption of LLVM by volta83 on Friday August 13, 2021 @04:54AM (#28166859)
This is not really a strategy, but rather a consequence of LLVM having hundreds of developers, most of which use LLVM upstream, and therefore don't care about maintaining an API compatibility that they themselves do not need.

It turns out that it is impossible to convince people working on LLVM on their free time or academics to invest part of their time on "preserving" API compatibility instead of adding new features, fixing bugs, or improving perf, for the benefit of companies that don't want to contribute their improvements to the community.

Re:Intel C/C++ compilers complete adoption of LLVM by infogulch on Thursday August 12, 2021 @10:01AM (#28156468)
I like this strategy to encourage contributing back to open source by being a huge and foundational and producing so fast that the cost of forking is almost never worth it except in extreme circumstances. This feels more like voluntary cooperation than being smacked in the face with ~~the book~~ a license. Though I suppose it wouldn't always work if you're not a big project with lots of contributions.
Re:Intel C/C++ compilers complete adoption of LLVM by pjmlp on Thursday August 12, 2021 @07:24AM (#28154871)
Besides C++ Builder already referred in a sibiling comment, that is how you get stabilitiy on bitcode for watchOS apps.
Re:Intel C/C++ compilers complete adoption of LLVM by CJefferson on Thursday August 12, 2021 @06:49AM (#28154593)
You over-estimate how much LLVM might want Intel's code dumps.

Based on (minor) personal experience of gcc forks, it's not unusual to make some fairly significant change to some major data structure to make your CPU work better, but which would break several other backends.

There may not be any nice way of integrating these changes in a way which would make the acceptable upstream, without multi-months of work refactoring huge chunks of the compiler (which would still also need lots of work on all those other architectures, to make them compatible with your changes).

Re:Intel C/C++ compilers complete adoption of LLVM by account42 on Thursday August 12, 2021 @07:40AM (#28154993)
> sometimes because they are very specific for Intel architecture

Like the famous check-for-intel-model-instead-of-feature-flag optimization? [0]

[0] https://www.agner.org/optimize/blog/read.php?i=49#49

Re:Intel C/C++ compilers complete adoption of LLVM by UncleOxidant on Thursday August 12, 2021 @01:53PM (#28159340)
I never understood why Intel sold their compilers anyway. The revenue from compilers must be a tiny drop in Intel's revenue bucket. And if you're fine tuning your compiler to work best with your architecture it seems like you'd want to be giving that away to further promote sales of your chips.

Now that they're using LLVM they should just upstream everything to the LLVM project and quit selling icc.

Re:Intel C/C++ compilers complete adoption of LLVM by pengaru on Thursday August 12, 2021 @05:35PM (#28161819)
I agree they should upstream everything to gcc/clang to make their processors smoke the competition, but always assumed icc being a paid-for product came with additional support and access to Intel's expertise in using their tools and processors.
Re:Intel C/C++ compilers complete adoption of LLVM by fsloth on Thursday August 12, 2021 @06:14AM (#28154351)
"I get it, there's no money to be made in just implementing all your optimizations in clang directly."

Sounds really shortsighted. I would imagine revenue from Intel dev tools is a rounding error in Intel's complete revenue stream?

Re:Intel C/C++ compilers complete adoption of LLVM by kevin_thibedeau on Thursday August 12, 2021 @11:48AM (#28157791)
It's a marketing tool to make their competitors look bad. That it is sometimes useful is a secondary side effect.
Re:Intel C/C++ compilers complete adoption of LLVM by CalChris on Thursday August 12, 2021 @12:23PM (#28158232)
The Intel post didn't say "Other compilers also don't upstream everything". So you shouldn't put that in quotes.

However, that is an actual argument. This isn't GCC where that would be required. This is LLVM where that is allowed. This is a choice, Intel's choice, because LLVM allows that, and it's probably at the corner case level of an Intel-specific icc-specific feature, as in, not particularly generally useful.

There is a benefit of this for normal LLVM development as well. It means that Intel is responsible for maintaining it and normal LLVM developers aren't. If I do something that breaks something in the LLVM AMD GPU backend, that's on me. If I do something that breaks something in Intel's code, that's on them.

Re:Intel C/C++ compilers complete adoption of LLVM by formerly_proven on Thursday August 12, 2021 @06:29AM (#28154461)
> I get it, there's no money to be made in just implementing all your optimizations in clang directly.

ICC Classic is legacy/dead and also free now. The LLVM-based DPC++ compilers are free as well. These are only making money indirectly and through support contracts.

Re:Intel C/C++ compilers complete adoption of LLVM by pjmlp on Thursday August 12, 2021 @07:26AM (#28154887)
Yeah, but if you give all the golden eggs away, others can offer support contracts as well.
Re:Intel C/C++ compilers complete adoption of LLVM by bluGill on Thursday August 12, 2021 @08:47AM (#28155557)
They can, but who knows more about the issue in question, Intel who designed it, or a third party? This is also a curse to Intel though: they need to ensure their people actually know something, level one support with a bad script and no access to anyone with more ability will get caught quickly when the third party offers better support and generally can figure things out.

There are pros and cons for sure. I'm not sure what it best.

Re:Intel C/C++ compilers complete adoption of LLVM by phkahler on Thursday August 12, 2021 @10:57AM (#28157115)
>> I'm all for Intel helping improve LLVM, but the technical arguments for maintaining a separate commercial version don't convince me at all.

This is exactly why GCC is GPL and why RMS didn't want to make it more modular. Taken to the extreme we could end up with proprietary hardware that requires a proprietary (closed) compiler even though it's built on open source. Going back to "trusting trust" things might not be so good, and we know Intel is happy to build untrustworthy chips.

Re:Intel C/C++ compilers complete adoption of LLVM by DSingularity on Thursday August 12, 2021 @11:04AM (#28157211)
What does “trusting trust” have to do with this? That problem is a bootstrapping problem when trying to establish a trusted base. Simple summary is: if the first compiler was backdoored to detect when it is compiling other versions of itself and then inserting the same backdoor in the assembly of the target then how can you trust anything compiled by it?
Re:Intel C/C++ compilers complete adoption of LLVM by phkahler on Friday August 13, 2021 @09:32AM (#28168611)
You're right, the "trusting trust" compiler hack is way more complicated.