@Jacob Carlborg
I would say use structs. For compiler I would go with LDC or GDC. Both of these are faster for floating point calculations than DMD. You can always benchmark.
Thank you for the advice! I installed ldc and used ldmd2. Te benchmarks are amazing! :O DMD > compile = 2503 > run = 26210 LDMD > compile = 3953 > run = 8935 These are in milliseconds, benchmarked with time command. Both were compiled with smae Flags: -O -inline -release -noboundscheck @finalpatch
I find it critical to ensure all loops are unrolled in basic vector ops (copy/arithmathc/dot etc.)
In these crucial parts I don't use loops, made these operations by hand. There are simple 3 named doubles. But thanks for the advice. @ponce
If you are on x86, SSE 4.1 introduced an instruction called DPPS which performs a dot product. Maybe you can force it into doing a cross-product with clever swizzles and masks.
Could you give me a hint, how it could be implemented in D to use that dot product? I am not expirienced with such low-level programming. And would you suggest to try to use SIMD double4 for 3D vectors? It would take some time to change code.