4 ms·
Not generating model-specific code for a processor that doesn't match your CPUID table is hardly what I'd call "sabotaging."
by garenp 12y ago
Not generating model-specific code for a processor that doesn't match your CPUID table is hardly what I'd call "sabotaging."
- mikeash 12y agoIgnoring the results of feature checking when on a competitor's CPU is, though, and that's what they do.
- garenp 12y agoSo they should just then believe what another third-party vendor CPU says, and ship the compiler and hope for the best? Not what I would do. I would only enable specific optimizations when I could guarantee the output would be optimal or a given model. "Hope is not a plan."
- raverbashing 12y ago"So they should just then believe what another third-party vendor CPU says" 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?
- hdevalence 12y agoYes, they should. 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.
- ponce 12y agoI remember earlier AMD processors, supporting SSE1 (with the CPUID bit on), but this was so slow to be unusable in practice, slower than general instructions. In this case, the optimal thing to do was not to use these instructions despite the processors claiming support.
- wmf 12y agoI'd argue that the optimal thing for a compiler to do is to use SSE when the processor supports it... and then the optimal thing for customers to do is not buy processors that run reasonable code slowly.
- ori_b 12y ago> So they should just then believe what another third-party vendor CPU says, 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?
- ginko 12y agoBecause they would be breaking Intel's trademark if they claimed to be GenuineIntel.
- zokier 12y agoIt would be questionable if Intel could actually enforce their trademark there. The case would not be all too dissimilar to the Sega v. Accolade case, which Sega lost: http://en.wikipedia.org/wiki/Sega_v._Accolade http://en.wikipedia.org/wiki/Sega_v._Accolade
- mikeash 12y agoThese are not "specific optimizations", they are things like "use SSE3 iff SSE3 is available on this CPU". Except that they actually code it as, "use SSE3 iff SSE3 is available on this CPU and it is an Intel CPU".
- oomkiller 12y agoTraditionally (with ICC) the criticism has been that it just checks the vendor string for "GenuineIntel" instead of actually checking for feature support with CPUID. People just want the option to be able to just check just for feature support.
- garenp 12y agoA given "feature" does not behave identically on different CPUs. To generate optimal code, you need to know which model is being targeted to make codegen decisions. It is simply not reasonable to expect Intel to do the work on their compiler to figure that all out and test it for competing vendor chips. 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.
- Marat_Dukhan 12y agoThere are such options. Just use -mavx instead of -xAVX and it will compile for any AVX-compatible processor.
- simula67 12y agoWill that make the compiler code harder to maintain ?