为什么链接到librt在g ++和clang之间交换性能?

时间:2016-05-12 09:59:39

标签: c++ benchmarking librt

我刚从@ tony-d找到了this answer,用一个替代码来测试虚函数调用开销。我使用g++检查了基准:

$ g++ -O2 -o vdt vdt.cpp -lrt
$ ./vdt
virtual dispatch: 150000000 0.128562
switched: 150000000 0.0803207
overheads: 150000000 0.0543323
...

我的表现更好(他的比例约为2),但后来我用clang检查:

$ clang++-3.7 -O2 -o vdt vdt.cpp -lrt
$ ./vdt
virtual dispatch: 150000000 0.462368
switched: 150000000 0.0569544
overheads: 150000000 0.0509332
...

现在比率上升到大约70!

然后我注意到了-lrt命令行参数,经过一些关于librt的谷歌搜索后,我试了g++clang

$ g++ -O2 -o vdt vdt.cpp
$ ./vdt
virtual dispatch: 150000000 0.4661
switched: 150000000 0.0815865
overheads: 150000000 0.0543611
...
$ clang++-3.7 -O2 -o vdt vdt.cpp
$ ./vdt
virtual dispatch: 150000000 0.155901
switched: 150000000 0.0568319
overheads: 150000000 0.0492521
...

如您所见,性能 swaped

根据我发现的librt,需要clock_gettime和其他相关的时间计算(可能我错了,在这种情况下纠正我!)但是代码编译没有{{1从我看到的时间看起来是正确的。

为什么链接-lrt会影响该代码呢?

关于我的系统和编译器的信息:

librt

0 个答案:

没有答案