Though its dubious Intel MPI and other software will use the correct accelerated path even if an AMD processor supports it.
Though its dubious Intel MPI and other software will use the correct accelerated path even if an AMD processor supports it.
"Optimization Notice: Intel’s compilers may or may not optimize to the same degree for non-Intel microprocessors for optimizations that are not unique to Intel microprocessors. These optimizations include SSE2, SSE3, and SSSE3 instruction sets and other optimizations. Intel does not guarantee the availability, functionality, or effectiveness of any optimization on microprocessors not manufactured by Intel. Microprocessor-dependent optimizations in this product are intended for use with Intel microprocessors. Certain optimizations not specific to Intel microarchitecture are reserved for Intel microprocessors. Please refer to the applicable product User and Reference Guides for more information regarding the specific instruction sets covered by this notice. Notice revision #20110804"
TLDR; Intel purposely chooses slower code gen paths for AMD processors in ICC.
This is surely legal but distasteful. They are attempting to manipulate people's perception of competitors' products do that they do not switch, even when the potential performance would be the same if a fair analysis were applied.
I have been an Intel guy my whole life but I can only hope that their near monopoly is destroyed by AMD.
That said I cross compile a 15k LoC numerically heavy app with ICC 2017 and Clang 5 (also MSVC which is not really in the running) and clang handily beats ICC.
Most of the win from clang seems to come from small vector and small string optimizations along with better inlining and whole program optimization.
ICC has better vectorization, but it's a smaller part of the performance than it might seem. Moreover, if a core loop is banking on vectorization, you should probably code it in intrinsics at that point to make sure it's always correctly optimized