Clang performance drop for specific C++ random number generation

后端 未结 1 891
情话喂你
情话喂你 2021-02-04 00:24

Using C++11\'s random module, I encountered an odd performance drop when using std::mt19937 (32 and 64bit versions) in combination with a uniform_real_distrib

相关标签:
1条回答
  • 2021-02-04 01:15

    As already stated in the comments, the problem is caused by the fact that gcc inlines more aggressive than clang. If we make clang inline very aggressively, the effect disappears:

    Compiling your code with g++ -O3 yields

    runtime_int_default: 3000.32
    runtime_int_mt: 3112.11
    runtime_int_mt_64: 3069.48
    runtime_float_default: 859.14
    runtime_float_mt: 1027.05
    runtime_float_mt_64: 1777.48
    

    while clang++ -O3 -mllvm -inline-threshold=10000 yields

    runtime_int_default: 3623.89
    runtime_int_mt: 751.484
    runtime_int_mt_64: 751.132
    runtime_float_default: 1072.53
    runtime_float_mt: 968.967
    runtime_float_mt_64: 1781.34
    

    Apparently, clang now out-inlines gcc in the int_mt cases, but all of the other runtimes are now in the same order of magnitude. I used gcc 4.8.3 and clang 3.4 on Fedora 20 64 bit.

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