小编jsg*_*guy的帖子

什么是__memset_sse2,为什么它会执行这么多指令?

我有两个C++算法的实现,给他们打电话AB.A和之间的唯一区别BA使用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
Run Code Online (Sandbox Code Playgroud)

当我做同样B更快的时候,我得到以下内容:

Overhead  Command  Shared Object        Symbol
  15.17%  B        libc-2.23.so         [.] _int_malloc
  14.94%  B        B                    [.] B::func1()
   5.72%  B …
Run Code Online (Sandbox Code Playgroud)

c++ performance

4
推荐指数
1
解决办法
1326
查看次数

最高有效位基数排序比最低有效位基数排序效率如何?

我只是在阅读以下问题: 基数排序最高有效还是最低有效,哪个更快?

接受答案的作者暗示,MSD基数排序确实更快。我不明白为什么。

我已经实现了LSD和MSD(通过执行移位操作来实现二进制),LSD是迭代的,只需要一个存储桶数组,而MSD是递归的,并且每个递归调用都需要一个单独的存储桶数组。

如果您创建一个由1000万个整数组成的随机数组,那么我将看不到MSD会比LSD快多少,因为每次您重新输入函数时都会分配额外的存储桶数组,并且您还必须面对递归调用的开销他们自己。

我可以看到MSD和LSD的组合如何带来整体提升(对前几位运行MSD,对其余位运行LSD以减少高速缓存未命中),但是单独的MSD有望比LSD更有效考虑到它的递归特性以及每个递归调用都需要一个新的存储桶数组这一事实,与LSD不同,LSD既是迭代的,又只需要一个存储桶数组来完成整个排序过程?

c++ algorithm radix-sort radix

3
推荐指数
1
解决办法
2115
查看次数

对2D numpy数组中的每一行应用相同的排列

要置换一维数组,A我知道您可以运行以下代码:

import numpy as np
A = np.random.permutation(A)
Run Code Online (Sandbox Code Playgroud)

我有一个2D数组,并希望对数组的每一行应用完全相同的排列.你有什么办法可以指定numpy为你做那个吗?

python arrays algorithm numpy

3
推荐指数
1
解决办法
1874
查看次数

当您想减小向量的大小时,为什么 std::vector::resize() 不释放内存?

我不明白为什么我必须使用std::vector::swap()来释放内存vector当我想减小 a 的大小时。

为什么有人想要减小 a 的大小,vector同时保留分配的其余未使用内存?

c++ resize vector

1
推荐指数
1
解决办法
1046
查看次数

标签 统计

c++ ×3

algorithm ×2

arrays ×1

numpy ×1

performance ×1

python ×1

radix ×1

radix-sort ×1

resize ×1

vector ×1