You guys are awesome! I am happy to know that D can indeed offer comparable speed to C++.

But it also shows there is room for the compiler to improve as the C++ version also makes heavy use of loops (or STL algorithms) but they get inlined or unrolled automatically.

On Friday, 31 May 2013 at 05:35:58 UTC, Juan Manuel Cabo wrote:
You might also try changing:

            float[3] t = mixin("v[]"~op~"rhs.v[]");
            return Vec3(t[0], t[1], t[2]);

for:
            Vec3 t;
            t.v[0] = mixin("v[0] "~op~" rhs.v[0]");
            t.v[1] = mixin("v[1] "~op~" rhs.v[1]");
            t.v[2] = mixin("v[2] "~op~" rhs.v[2]");
            return t;

and so on, avoiding the float[3] and the v[] operations (which would loop, unless the compiler/optimizer unrolls them (didn't check)).

I tested this change (removing v[] ops) in Vec3 and in
normalize(), and it made your version slightly faster
with DMD (didn't check with ldmd2).

--jm

Reply via email to