@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.

Reply via email to