问题标签 [microbenchmark]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
268 浏览

c++ - Why does the cost of C++ virtual call depend on the number of derived classes?

EDIT: At the request of n.m., I have included the complete code I was using despite its verbosity.

I've written a short example program that I was using to study the overhead of virtual calls.

timer.h:

virtual.h:

virtual.cpp:

virtual_impl.cpp:

I compile virtual_impl.cpp into a shared library to prevent the compiler from messing around and devirtualizing or inlining things:

The result I get is:

As you can see, with 10 derived classes, the cost is nearly 3x greater than with only one derived class. Branch prediction seems like a likely target, but somehow on a list sorted by type, the performance is even worse than the random list!

EDIT2: There doesn't seem to be any black magic occurring in the code generation. I found the disassembly for measure_call here:

0 投票
1 回答
173 浏览

java - Console output in Caliper 1.0

In Caliper ~0.5, benchmark runs were accompanied by some human readable console output for each benchmark run, e.g.:

This output doesn't seem to be available in Caliper 1.0, but I'm wondering if there is any way to restore it?

The text output is very useful as both immediate feedback (especially when repeatedly tuning the benchmark or the code being timed), as well as textual output that can be easily and permanently embedded into various text sources. The web app is superior for most purposes (and includes additional critical information, such as the deviation of the results) - but there are times where the text output would be appreciated.

0 投票
1 回答
993 浏览

java - 是否可以在 main 内部使用 IntelliJ 'run' 命令运行 caliper?

我是 caliper 的新手,我想知道我是否可以创建一个主要方法,然后右键单击并选择使用 IntelliJ 的“运行”?

当我尝试运行上述内容时,出现此错误:

另外,由于我使用的是 IntelliJ,并且我的卡尺是在 maven 中定义的(即测试范围):

我将如何从命令行运行 caliper?

0 投票
6 回答
152 浏览

java - 额外的“如果检查”是否已经设置了值 - 什么更快,什么使用更多资源?

假设我们有一个给定的接口:

和以下实现:

此外,假设方法negate*Check()可以被调用 1 次以上,很难说调用次数的上限是多少。

  • 问题是根据执行速度、垃圾收集、内存分配等,两种实现中的哪种方法“更好” - negateWithCheck还是negateWithoutCheck

  • 答案是否取决于我们使用的两个提议的实现中的哪一个,或者无关紧要?

  • 答案是否取决于估计的呼叫次数?使用一种一种方法更好地计数多少?

0 投票
1 回答
2383 浏览

benchmarking - 如何在 jmh 基准测试中生成方法?

我使用 jmh( http://openjdk.java.net/projects/code-tools/jmh/ ) 对某些方法进行基准测试。此外,我还有一组参数,我想将它们用作运行此方法的参数。是否可以为每个特定的参数值生成一个方法(使用 @GenerateMicroBenchmark 注释)?

现在我使用类似的实现,但不是那么方便,因为我必须手动编写很多统一的代码:

0 投票
2 回答
1201 浏览

java - ByteBuffer.putLong 使用非本地 ByteOrder 快 2 倍

尽管广泛阅读了 JDK 源代码并检查了内在例程,但我还是无法一概而论。

我正在测试清除 a ByteBuffer,分配给allocateDirectusing ByteBuffer.putLong(int index, long value)。根据 JDK 代码,如果缓冲区是“本机字节顺序”,则这会导致单个 8 字节写入,或者字节交换,如果不是,则随后是相同的。

所以我希望本机字节顺序(对我来说是小端)至少与非本机一样快。然而,事实证明,非本机的速度要快约 2 倍。

这是我在 Caliper 0.5x 中的基准:

结果是:

这是一致的。如果我换成putLongputFloat本地订单的速度大约快 4 倍。如果你看看它是如何putLong工作的,它在非本地情况下做了更多的工作:

请注意,unaligned在任何一种情况下都是如此。本机和非本机字节顺序之间的唯一区别是Bits.swap有利于本机情况(小端)。

0 投票
4 回答
133 浏览

php - PHP 微基准测试(变量与条件语句)

这个问题可能“有点离题”。但或多或少是微基准代码,但它是为了提高我对 PHP 后端的标准和一般知识。

所以!我来了,我的问题!与在 PHP 中调用额外的 else 条件相比,调用两次变量需要更少的内存(和 CPU 负载)吗?哪个需要更多资源?为什么?

下面的例子:
A,显示调用一个变量两次,B,显示调用一个额外的 else 条件。当然,两者都有相同的最终结果

对任何答案(响应)的任何额外引用也将被高度使用!如果可能的话。

示例 A:



示例 B:

0 投票
0 回答
426 浏览

dart - 如何加速这个 Dart 微基准测试?

我在 Dart 编辑器中对这个函数进行了基准测试:

我创建了命令行应用程序并未选中Run in checked mode. 我还能做些什么来让它运行得更快吗?我注意到Process properties对话框--debug在命令行中显示选项。删除调试选项的方法是什么?是否有发布或优化选项?

允许对代码进行小的、保留算法的修改(例如更简洁的符号),但不允许使其更冗长(例如循环展开)。考虑到这些限制,你能写出一个更快的版本e28()吗?

我目前在 Xubuntu 13.04 64 位 Core i5 3450S 2.8GHz 上的结果比使用 LLVM 编译的 C++ 或 D 中的相同代码慢约 10 倍。好处是它击败了 Scala、Julia、F#,当然还有 Python,但我预计 Dart 的性能会更快一些。

这是它的计时方式:

顺便说一句,当我使用官方基准测试工具时,我的运行时间延长了 10 倍。我怀疑这benchmark_harness.dart没有报告最短时间,但可能是中值时间。[编辑]没关系 10x 问题benchmark_harness.dart:这是设计使然。

0 投票
1 回答
3832 浏览

c - 简单数学函数的基准测试:为什么 Fortran 和 Julia 比 C 更快

有各种说法认为,在某些情况下,Fortran 可以比 C 更快,例如在别名方面,我经常听说它比 C 更好地进行自动矢量化(请参阅此处进行一些很好的讨论)。

但是,对于像计算斐波那契数和 Mandelbrot 这样的简单函数,使用直接的解决方案,没有任何技巧和编译器的额外提示/关键字,我希望它们确实执行相同的操作。

C实现:

Fortran 实现:

朱莉娅实现:

(可以在这里找到包括其他基准函数在内的完整代码。)

根据Julia 主页,Julia 和 Fortran (with ) 在这两个函数上的-O3性能优于 C (with )。-O3

这个怎么可能?

0 投票
1 回答
58 浏览

c - 硬编码巨型数组以进行基准测试的最佳方法

我想在我的程序中硬编码一个巨大的整数数组。我这样做是因为我想对排序算法进行基准测试。如果我将数组存储为文本文件并将其读入,那么我将测量读取大文件+排序的性能,而不是单独排序。稍后我将对文件读取进行基准测试。我可以int vals[] = {<huge number of values here>}直接放入我的.main文件中,但这往往会使我的文本编辑器崩溃,所以我希望有某种方法可以放入一个单独的文件中。我有什么办法#include吗?有没有好的方法来做到这一点?