On Tuesday, 5 April 2016 at 08:34:32 UTC, Walter Bright wrote:
On 4/4/2016 11:10 PM, 9il wrote:
It is impossible to deduct from that combination that Xeon Phi has 32 FP registers.

Since dmd doesn't generate specific code for a Xeon Phi, having a compile time switch for it is meaningless.


"Since the compiler never generates AVX or AVX2" - this is definitely nor true,
see, for example, LLVM vectorization and SLP vectorization.

dmd is not LLVM.

The particular design and limitations of the dmd backend shouldn't be used to define D. In the extreme, your argument would imply that there's no point having version(ARM) built in to the language, because dmd doesn't support it.


It's entirely practical to compile code with different source code, link them *both* into the executable, and switch between them based on runtime detection
of the CPU.
This approach is complex,

Not at all. Used to do it all the time in the DOS world (FPU vs emulation).


I just want an unified instrument to receive CT information about target and optimization switches. It is OK if this information would have different
switches on different compilers.

Optimizations simply do not transfer from one compiler to another, whether the switch is the same or not. They are highly implementation dependent.


Auto vectorization is only example (maybe bad). I would use SIMD vectors, but I need CT information about target CPU, because it is impossible to build optimal
BLAS kernels without it!

I still don't understand why you cannot just set '-version=xxx' on the command line and then switch off that version in your custom code.

So you're suggesting that libraries invent their own list of versions for specific architectures / CPU features, which the user then has to specify somehow on the command line?

I want to be able to write code that uses standardised versions that work across various D compilers, with the user only needing to type e.g. -march=native on GDC and get the fastest possible code.

Reply via email to