我有一个算法的两个C++实现,称它们为A
和B
。 A
和B
之间唯一的区别是A
使用std::unordered_map<int, int> hashmap;
,但B
使用google::dense_hash_map<int, int> hashmap;
。什么是__memset_sse2,它为什么执行如此多的指令?
我发现一个输入,其中A
比B
慢得多,我不明白为什么。
对于相同的输入,我跑sudo perf record -e instructions ./A input.txt
,然后我得到这样的结果:
Overhead Command Shared Object Symbol
65.90% A libc-2.23.so [.] __memset_sse2
6.63% A libc-2.23.so [.] _int_malloc
3.44% A libc-2.23.so [.] malloc
2.61% A libc-2.23.so [.] _int_free
当我为B
这是做同样的快,我得到如下:
Overhead Command Shared Object Symbol
15.17% B libc-2.23.so [.] _int_malloc
14.94% B B [.] B::func1()
5.72% B B [.] B::func2()
5.58% B B [.] B::func3()
什么是__memset_sse2
以及它为什么执行如此多的指令?
'__memset_sse2'只是SSE2优化的[memset]版本(http://en.cppreference.com/w/cpp/string/byte/memset)。尝试使用'-g'运行'perf'并检查输出中的调用图 – myaut