On Thursday, 27 October 2022 at 17:17:01 UTC, ab wrote:
How can I prevent the compiler from removing the code I want to measure?

With many C compilers, you can use volatile assembly blocks for that. With LDC -O3, a regular assembly block also does the trick currently:

```D
void main()
{
    import std.datetime.stopwatch;
    import std.stdio: write, writeln, writef, writefln;
    import std.conv : to;

    void f0() {}
    void f1()
    {
        foreach(i; 0..4_000_000)
        {
            // nothing, loop gets optimized out
        }
    }
    void f2()
    {
        foreach(i; 0..4_000_000)
        {
            // defeat optimizations
            asm @safe pure nothrow @nogc {}
        }
    }
    auto r = benchmark!(f0, f1, f2)(1);
    writeln(r[0]); // 4 μs
    writeln(r[1]); // 4 μs
    writeln(r[2]); // 1 ms
}
```

Reply via email to