Align a variable on the stack.

TheFlyingFiddle via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Thu Nov 5 15:37:43 PST 2015


On Thursday, 5 November 2015 at 21:24:03 UTC, TheFlyingFiddle 
wrote:
> On Thursday, 5 November 2015 at 21:22:18 UTC, TheFlyingFiddle 
> wrote:
>> On Thursday, 5 November 2015 at 11:14:50 UTC, Marc Schütz 
>> wrote:
>> ~10x slowdown...
>
> I forgot to mention this but I am using DMD 2.069.0-rc2 for x86 
> windows.

I reduced it further:

struct A { float x, y, z ,w; }
struct B
{
    float x=float.nan;
    float y=float.nan;
    float z=float.nan;
    float w=float.nan;
}

void initVal(T)(ref T t, ref float k) { pragma(inline, false); }

void benchA()
{
    foreach(float f; 0 .. 1000_000)
    {
       A val = A.init;
       initVal(val, f);
    }
}

void benchB()
{
    foreach(float f; 0 .. 1000_000)
    {
       B val = B.init;
       initVal(val, f);
    }
}

int main(string[] argv)
{
    import std.datetime;
    import std.stdio;

    auto res = benchmark!(benchA, benchB)(1);
    writeln("Default:  ", res[0]);
    writeln("Explicit: ", res[1]);

    readln;
    return 0;
}

also i am using dmd -release -boundcheck=off -inline

The pragma(inline, false) is there to prevent it from removing 
the assignment in the loop.


More information about the Digitalmars-d-learn mailing list