1
2
BitArray.cpp代码的快速峰值显示:
m_数组的类型为std::vector stl vectors上的[]运算符具有恒定的复杂性,但它很可能实现为对vectors::begin的调用,以获取数组的基地址,然后计算偏移量以获得所需的值。因为bitarray.cpp在每次位访问时都调用[]运算符,所以您会收到很多调用。 考虑到您的用例,我将创建bitaray.cpp中包含的功能的自定义实现,并根据您的顺序逐位访问模式对其进行调优。
|
2
6
您在概要文件输出中看到许多内联函数的事实意味着它们没有被内联——也就是说,您没有在启用优化的情况下进行编译。所以优化代码最简单的方法就是使用-o2或-o3。 分析未优化的代码很少有价值,因为优化和未优化的代码的执行概要可能完全不同。33 |
3
1
如果看不到您的代码,就很难对如何加速您正在做的事情做出具体的评论。然而,
实际上,我建议使用更现代的探查器,例如 OProfile 这将给您提供更多细粒度的信息,根据您是如何运行的,您的程序花费时间到实际的C++行,或者甚至单个ASM指令。
作为旁白-你为什么选择使用
bitarray.cpp
而不是香草
|
4
0
您可以通过使用指针/迭代器(我不确定bitaray.cpp究竟为您做了什么)来提高性能,如下所示:
我在这里只使用int i,因为我不确定您的位数组是否将以空终止,在这种情况下,您的条件可能只是
或者你可以设计一个更好的最终条件。使用std::迭代器最好,但我怀疑您的位数组是否支持它。 编辑: 通常这是一个微优化,但是如果循环处理足够多的事情,它可能会稍微提高性能。 |
5
0
如果性能足够重要,您必须担心访问单个位,那么您可能应该将代码并行化。由于您将其描述为图像处理,很可能位的状态i不会影响您处理位i+1到i+6的方式,因此您可能可以重写代码以一次对字节和字进行操作。只要能够将计数器的增量减少8到64倍,就可以显著地提高性能,而且还可以使编译器更容易地优化代码。 |
Hatsune Miku · 比较或if语句是否更快[已关闭] 1 年前 |
Black Swan · 无法解压缩的值太多(应为2)错误 1 年前 |
Kai · 有什么方法可以轻松优化VSCode中的锈迹? 2 年前 |
Balfar · 处理NumPy阵列上的循环最有效的方法是什么? 2 年前 |
Daniel · C#轻松存储快速访问的大型位矩阵 6 年前 |
halbe · 优化音频DSP程序的numpy计算 6 年前 |
Afsara · 是否有任何方法不能优化我们的应用程序? 6 年前 |