gpt4 book ai didi

java - Caliper:微观和宏观基准

转载 作者:搜寻专家 更新时间:2023-11-01 02:12:28 25 4
gpt4 key购买 nike

对于 ELKI我需要(并且拥有)比标准 Java JDK 和 Collections API 提供的更灵活的排序实现。 (排序不是我的最终目标。我使用部分排序来批量加载索引结构,例如 k-d-tree 和 R*-tree,我想对这些可用的实现进行相当通用的实现,比目前在 ELKI 中的更通用- 但无论哪种方式,优化排序意味着优化索引构建时间)。

但是,排序算法的缩放比例因数据大小而异。对于微型数组,插入排序可以很好地执行是众所周知的事实(事实上,大多数快速排序实现会在低于某个阈值时回退到插入排序);不是根据理论,而是根据排序理论未考虑的 CPU 流水线和代码大小影响。

所以我目前正在对一些排序实现进行基准测试,以找到满足我特定需求的最佳组合;我希望我的更灵活的实现在某种程度上与 JDK 默认实现相当(已经进行了微调,但可能适用于不同的 JDK 版本)。

从长远来看,我需要这些东西易于复制和重新运行。在某个时候,我们会看到 JDK8。在 Dalvik VM 上,结果也可能与在 Java 7 上不同。哎呀,它们甚至可能在 AMD、Core i7 和 Atom CPU 上也不同。所以也许 Cervidae 会包含不同的排序策略,并在类加载时间上选择最合适的。

我目前的工作在 GitHub 上:https://github.com/kno10/cervidae

现在进入实际问题。最新的 caliper commit 添加了一些用于宏基准测试的实验代码。但是,我面临的问题是我需要两者。当运行时小于定时器分辨率的 0.1% 时,Caliper 宏基准测试失败;对于 10000 个对象,某些算法会达到此阈值。同时,微基准测试提示当你的运行时间太长时你应该做一个宏基准测试......

因此,为了对不同的排序大小进行基准测试,我实际上需要一种根据运行时从微基准测试动态切换到宏基准测试的方法。事实上,我什至更喜欢 caliper 是否会自动意识到运行时足够大以进行宏观基准测试,然后只进行一次迭代。

现在,我正在尝试使用以下方法来模拟这一点:

@Macrobenchmark
public int macroBenchmark() { ... }

public int timeMicroBenchmark(int reps) {
int ret = 0;
for (int i = 0; i < reps; i++) {
ret += macroBenchmark();
}
}

在两种情况下共享基准测试代码。另一种代码是使用

@Macrobenchmark
public int macroBenchmark() {
return timeMicroBenchmark(1);
}

public int timeMicroBenchmark(int reps) { ... }

两个“适配器”中哪个更可取?获得从微观到宏观的一致基准测试的任何其他提示?

鉴于卡尺 WebUI 目前无法正常工作,您使用什么来分析结果?我目前正在使用一个微型 python 脚本来处理 JSON 结果并报告加权平均值。事实上,与 Web UI 相比,我更喜欢旧的文本报告。

哦,有没有办法让 Caliper 在基准测试循环中发生 Hotspot 编译时重新运行基准测试?现在它记录了一个错误,但也许它可以重新启动基准测试的那一部分?

最佳答案

我认为问题在于微基准测试工具的输出被误解为“提示”。它说:

"INFO: This experiment does not require a microbenchmark. The granularity of the timer (%s) is less than 0.1%% of the measured runtime. If all experiments for this benchmark have runtimes greater than %s, consider the macrobenchmark instrument."

该消息的措辞特别表明,个别实验 很长,但由于针对该基准方法的其他实验可能并非如此,因此这当然不是错误。微基准测试工具的开销要多一些,但是虽然您的实验可能不需要微基准测试,但结果仍然完全有效。

关于java - Caliper:微观和宏观基准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15834059/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com