- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
对于 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/
我想创建一个 Python 基准测试列表。现在我只找到了 this 中的标准基准测试问题和一些来自 Computer Language Benchmarks Game . Python 还有其他基准测
我正在使用 apache 提供的基准文件 TestDFSIO 测试我的 hadoop 配置。我正在根据本教程(资源 1)运行它: http://www.michael-noll.com/blog/20
我刚刚安装了 Ruby 企业版,想对我的系统 Ruby 运行一些基准测试。是否有我应该实现的规范基准测试? 最佳答案 最有趣最深入Ruby benchmarks Antonio Cangiano 的系
我已经生成了基准,用于比较使用 ffmpeg 工具缩小视频文件 (mp4) 的两种方法。 基准以这种格式记录: x.mp4 Output_Resolution : 360p Method : A re
我正在使用 codeigniter 制作一个网站。 如果用户在他的评论中写入 {memory_usage} 2.75MB 将显示给他。它不会给 codeigniter 编写的代码带来安全漏洞吗?有什么
我正在尝试对 XSLT 的两个版本进行基准测试。目前我使用 Visual Studio 进行调试,因为从 .NET 组件调用的 xml 转换。 VS 2010 是我用于开发的 IDE。 我得到的唯一线
我想知道如何测量每个节点的内存带宽(流基准)。我的这个程序仅在一个节点上进行测量,进程和线程的数量如下: MPI_Comm_size(MPI_COMM_WORLD, &numranks); MPI_C
我正在关注 performance test Dapper 社区创建的。 目前,我在运行测试 10000 次后得到以下信息: EF 5 = 21595 毫秒 ADO.NET = 52183 毫秒 小巧
为了测量 CPU 的峰值 FLOPS 性能,我编写了一个小的 C++ 程序。但是测量结果给我的结果比我的 CPU 的理论峰值 FLOPS 大。怎么了? 这是我写的代码: #include #incl
有没有办法在 JUnit 测试套件中放置简单的开始/停止计时? 当我创建一个测试套件类时,它看起来像这样,我可以运行它。但是我怎么能在这里放一个简单的长开始时间变量来显示所有测试运行了多长时间? pu
我想测试MySQL数据库的InnoDB和MyRock引擎之间的高强度写入。为此,我使用 sysbench 进行基准测试。我的要求是: 多线程并发写入同一张表。 支持批量插入(每次插入事务都会插入大量记
我正在尝试构建一个 Nodejs Web 应用程序。当我添加更多代码时,最好有一种方法来测试此类更改对性能的影响,如果可能的话,以及我的应用程序在哪些方面花费最多时间。我目前正在使用 mocha 作为
我希望编写一个简单的每秒帧数动画基准 Javascript 实用程序。 FPS 在这里可能是一个模糊的术语,但理想情况下,它可以让我更准确地比较和衡量不同动画 (CSS3/canvas/webgl)
我是 Python 新手。这是我的第一种解释语言。到目前为止,我曾经学习过Java。因此,当 Java 程序第一次运行时,它的执行速度比下一次要慢。reasi 正在缓存。 import time de
我在 Ubuntu 虚拟机中使用 Apache 2.4.2。我用它来加载测试,向某些 HTTPS url 发送请求。失败请求数为零。但是我的请求都无法真正处理(已经在数据库中查找)。使用相同的 url
(我不确定这是否应该在 https://softwareengineering.stackexchange.com/ 上,如果您认为是,请评论) 我即将为我的学士论文创建 WebGL 实现的基准。我不
编辑: Clojure 基准测试已达到 the Benchmarks Game 。 我已经制作了这个问题社区 wiki 并邀请其他人保持更新。 有人知道 Clojure 的性能基准吗? 我自己做了一些
关注 this benchmark BSON 需要更多的磁盘空间和时间来创建、序列化、反序列化和遍历所有元素。 BSON 的一大优势是,它的遍历速度要快得多。那么这个基准有什么问题呢? 最佳答案 你的
我正在 NextFlow 上执行分散-聚集操作。 它看起来像下面这样: reads = PATH+"test_1.fq" outdir = "results" split_read_ch = chan
我无法让apache benchmark与我的网站配合使用。每当我发出此命令时 ab https://example.com/ 我会得到这个输出错误: This is ApacheBench, Ver
我是一名优秀的程序员,十分优秀!