Callgrind: Profile a specific part of my code

后端 未结 2 418
臣服心动
臣服心动 2020-12-28 18:01

I\'m trying to profile (with Callgrind) a specific part of my code by removing noise and computation that I don\'t care about. Here is an example of what I want to do:

相关标签:
2条回答
  • 2020-12-28 18:43

    The toggle-collect option is very picky in how you specify the method to use as trigger. You actually need to specify its argument list as well, and even the whitespace needs to match! Use the method name exactly as it appears in the callgrind output. For instance, I am using this invokation:

    $ valgrind 
        --tool=callgrind 
        --collect-atstart=no 
        "--toggle-collect=ctrl_simulate(float, int)"
        ./swaag
    

    Please observe:

    • The double quotes around the option.
    • The argument list including parentheses.
    • The whitespace after the comma character.
    0 讨论(0)
  • 2020-12-28 18:47

    I finally managed to solve this issue... This was a config issue:

    I kept the code

    for (int i=0; i<maxSample; ++i) {
        //Prepare data to be processed...
        CALLGRIND_TOGGLE_COLLECT;
        //Method to be profiled with these data
        CALLGRIND_TOGGLE_COLLECT;
        //Post operation on the data
    }
    CALLGRIND_DUMP_STATS;
    

    But ran the callgrind with --collect-atstart=no (and without the --instr-atstart=no!!!) and it worked perfectly, in a reasonable time (~1min).

    The issue with START/STOP instrumentation was that callgrind dumps a file (callgrind.out.#number) at each iteration (each STOP) thus it was really really slow... (after 5min I had only 5000 runs for a 300 000 iterations benchmark... unsuitable for a regression test).

    0 讨论(0)
提交回复
热议问题