我有一個算法的兩個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