gpt4 book ai didi

c++ - 什么是 __memset_sse2 以及它为什么执行这么多指令?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:42:26 25 4
gpt4 key购买 nike

我有两个算法的 C++ 实现,称它们为 AB . A之间的唯一区别和 B是那个A使用 std::unordered_map<int, int> hashmap;但是B使用 google::dense_hash_map<int, int> hashmap; .

我在 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 用于 implementations memset 函数针对支持 SSE2 的架构进行了优化.当您看到它大约花费了三分之二的执行时间时,这意味着大部分时间用于初始化单个内存块,该内存块的大小相对较大。哈希表很可能使用 memset 来初始化它的哈希桶。

google::dense_hash_map 似乎针对大小进行了优化,因此在运行您的示例时不需要初始化那么多的内存。

注意:观察到初始化占用了三分之二的 CPU 时间可能意味着您的基准测试设计不正确。也许您通过哈希容器放入的数据量相对较小,或者您在每次运行时都在重建容器。

关于c++ - 什么是 __memset_sse2 以及它为什么执行这么多指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43443232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com