It was sometimes pure joy telling it to emit the assembly language and looking at the code to work out what it was doing. Intel must have had, and still probably has, some awesomely clever people in the basement writing that stuff.
It was sometimes pure joy telling it to emit the assembly language and looking at the code to work out what it was doing. Intel must have had, and still probably has, some awesomely clever people in the basement writing that stuff.
But still, if it's not hot spot, probably won't really change in real world situation. And if it is, you want to vectorize manually anyway.
It also still seems better than clang/gcc at working out whether inlining is worth it or not.
But it's also still quite buggy (it used to be as well, the number of work-arounds/#ifdefs needed to get some cross-platform applications built used to be quite annoying. In some cases, we couldn't even use exactly the same version of the compiler per platform, we had to split versions per platform!).
This is really something you want your compiler to take care of. And that indeed is something icc excels at. You just don't have to care about code size, because that _will_ grow, big time.
And no, Intel's new LLVM-based icx compiler is not at the same level yet as the (now 'classic') icc compiler.
Presumably intel only optimized for intel. Wouldn't the best case scenario be if everyone copied the intel optimizations leaving other chips in the dust?
Using an other ISA than x86 is something that prevents this compiler from being used for other chips. The intermediate representation on which these optimizations are made is probably not related to x86.
Also, such compilers usually use models of machine resources and latencies to perform better scheduling. But latency and resource models are micro-architecture dependent, so using it on a chip with the same architecture but different micro-architecture would produce non-optimal scheduling
https://pharr.org/matt/blog/2018/04/29/ispc-retrospective#th...