20得票3回答
为什么边界检查无法被消除?

我写了一个简单的benchmark,以便找出当数组通过按位与运算来计算时,边界检查是否可以被消除。这基本上是几乎所有哈希表所做的:它们计算 h & (table.length - 1) 作为索引进入table,其中h是hashCode或派生值。results显示边界检查未被消除。...

19得票2回答
在MSVC中,“Escape”和“Clobber”的等效术语是什么?

在Chandler Carruth的CppCon 2015演讲中,他介绍了两个神奇的函数,可以在不产生额外性能损失的情况下击败优化器。 以下是这些函数的参考代码(使用GNU风格的内联汇编): void escape(void* p) { asm volatile("" : : "g...

18得票1回答
循环惯用语的奇怪 JIT 优化失效

在分析最近这里的一个问题的结果时,我遇到了一个非常奇怪的现象:显然一层额外的HotSpot JIT优化实际上会使我的机器执行速度变慢。这是我用于测量的代码:@OutputTimeUnit(TimeUnit.NANOSECONDS) @BenchmarkMode(Mode.AverageTime...

18得票3回答
为什么在Java 11中,对于空字符串,String.strip()比String.trim()快5倍

我遇到了一个有趣的场景。由于某种原因,在Java 11中,使用strip()处理只包含空格字符的空字符串时,速度比使用trim()快得多。 基准测试public class Test { public static final String TEST_STRING = " ";...

17得票2回答
启用性能分析工具对调用图的符号解析

如何在perf callgraph中启用C++符号重整?当我进入annotate模式时,它似乎会对符号进行解析,但在主callgraph中没有。示例代码(使用Google Benchmark):#include <benchmark/benchmark.h> #include &l...

17得票1回答
为什么我的Rust程序比同等的Java程序慢?

我在 Rust 中尝试使用二进制序列化和反序列化,并发现与 Java 相比,二进制反序列化要慢几个数量级。为了排除由于分配和开销等原因导致的开销可能性,我仅仅从每个程序中读取一个二进制流。每个程序都从磁盘上的二进制文件中读取,其中包含一个 4 字节整数,其中包含输入值的数量,以及一个连续的 8...

16得票20回答
我的Python程序比同样的Java程序执行得更快。这是怎么回事?

更新:2009年5月29日 感谢所有的建议和意见。我使用了你们的建议,使我的生产代码的平均执行速度比几天前的最佳结果快2.5倍。最终,我成功地使java代码运行得最快。 教训: 我的示例代码下面展示了原始int的插入,但是实际的生产代码存储了字符串(我的错)。当我进行更正后,pytho...

15得票1回答
惯用的性能评估方式?

我正在评估我的项目中的网络+渲染工作负载。 该程序持续运行一个主循环:while (true) { doSomething() drawSomething() doSomething2() sendSomething() } 主循环每秒运行超过60次。 我想看到性能...

14得票1回答
为什么Python的timeit使用“最佳3次”来测量经过的时间?

我不明白为什么Python的timeit模块要使用best of 3来测量时间。这是来自我的控制台的一个例子:~ python -m timeit 'sum(range(10000))' 10000 loops, best of 3: 119 usec per loop 直觉上,我会把整个时间...

14得票4回答
在提高Haskell在斐波那契微基准测试中的性能方面与C进行比较

我看到了这个问题,它比较了各种编译器在计算斐波那契数列的朴素方法上的性能。 我尝试用Haskell实现这个问题,并与C进行比较。 C代码:#include <stdio.h> #include <stdlib.h> int fib (int n) { if (...