29得票2回答
在x86汇编中,将两个有符号整数取平均值的最快方法是什么?

假设我们有两个寄存器长度的有符号整数,例如a和b。 我们想要计算值(a + b) / 2,无论是向上舍入、向下舍入、朝零舍入还是远离零,以任何一种方式都可以(即我们不关心舍入方向)。 结果是另一个寄存器长度的有符号整数(很明显,平均值必须在一个寄存器长度的有符号整数范围内)。 如何最快地执...

29得票1回答
如何在C#中进行性能优化的单元测试?

我正在构建一些搜索代码,并使用优化后的Levenshtein算法。我有功能单元测试来验证算法是否返回正确的结果,但在这种情况下,算法的性能也非常重要。我希望为项目添加一些测试覆盖率,以便如果未来的修改影响了优化,它们将显示为失败的测试 - 因为该算法是确定性的并针对已知的测试数据运行,所以这可...

28得票11回答
什么更快:多个if语句还是else if语句?

我正在遍历一个数组,并将其按值排序为一周中的某些天。 为了这样做,我使用了许多 if 语句。使用许多 if 语句与使用一组 else if 语句相比,对处理速度是否有任何影响?

28得票4回答
Intel SnB家族CPU中涉及微码指令的循环分支对齐

这与此问题相关,但并不相同:x86-64汇编的性能优化 - 对齐和分支预测,与我的上一个问题略有关联:无符号64位转换为双精度:为什么来自g ++的算法 以下是非真实世界测试用例。这个素数测试算法是不明智的。我怀疑任何现实世界的算法都不会执行这么多次如此小的内部循环(num是大小约为2 **...

27得票8回答
条件运算符是否慢?

我正在查看一些代码,其中有一个巨大的switch语句和在每个case中都有if-else语句,我立即感到需要进行优化。作为一个好的开发者,我应该做的是获得一些硬性的定时数据,并开始尝试三种变体: 原始代码如下:public static bool SwitchIfElse(Key inKe...

26得票4回答
现代x86架构中有哪些方法可以高效地扩展指令长度?

想象一下,您希望将一系列x86汇编指令对齐到特定的边界。例如,您可能希望将循环对齐到16或32字节边界,或者将指令打包以便它们有效地放置在uop缓存或其他位置。 实现这一点最简单的方法是使用单字节NOP指令,紧随其后的是多字节NOP。尽管后者通常更有效率,但两种方法都不是免费的:NOP使用前...

26得票3回答
为什么在x86上代码应该对齐到偶地址边界?

我正在学习Kip Irvine的"Assembly Language for x86 Processors, sixth edition",并且非常喜欢它。 我刚刚在下面的段落中读到了NOP助记符: 有时编译器和汇编程序员使用它[NOP]将代码对齐到偶数地址边界。 给出...

24得票7回答
三个无符号整数的平均值的高效计算(避免溢出)

这里有一个现有问题, 是关于高效计算三个有符号整数平均值的。 但是,使用无符号整数可以实现一些额外的优化,而这些优化不适用于前一个问题的场景。这个问题是关于高效计算三个无符号整数平均值的,其中平均值向零舍入,即在数学上我想计算⌊ (a + b + c) / 3 ⌋。 一种直接计算此平均值的...

24得票5回答
对alloca的使用和滥用

我正在开发一个软实时事件处理系统。我希望尽可能减少代码中具有非确定性时间的调用。我需要构建一个包含字符串、数字、时间戳和GUID的消息,可能使用std::vector和boost::variant。 在过去的类似项目中,我一直想使用alloca函数。然而,在研究系统编程文献时,总是会对这个函...

24得票4回答
Switch语句中case的顺序是否会影响性能?

假设我有以下的switch语句switch(alphabet) { case "f": //do something break; case "c": //do something break; ca...