问题标签 [caliper]

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 投票
1 回答
61 浏览

caliper - 在线发布 Caliper 结果时出现 405

我检查了最新版本的卡尺并运行了一些基准测试。结果生成(作为 json)就好了,但上传到 microbenchmarks appengine 网站失败:

POST http://microbenchmarks.appspot.com .... 返回了 405 Method Not Allowed 的响应状态

Caliper 团队已经提出了这个问题: https ://code.google.com/p/caliper/issues/detail?id=220

...但被关闭为“无效”。所以我假设有另一种上传结果的方法?

0 投票
1 回答
1858 浏览

java - 卡尺:微观和宏观基准

对于ELKI,我需要(并且拥有)比标准 Java JDK 和 Collections API 提供的更灵活的排序实现。(排序不是我的最终目标。我使用部分排序来批量加载索引结构,例如 kd-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 提交为宏基准添加了一些实验性代码。但是,我面临的问题是我需要两者。当运行时间小于定时器分辨率的 0.1% 时,Caliper 宏基准测试失败;对于 10000 个对象,一些算法达到了这个阈值。与此同时,微基准测试抱怨说,当你的运行时间太长时,你应该做一个宏基准测试……

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

现在,我正在尝试通过使用以下方法来模拟它:

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

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

鉴于 caliper WebUI 目前无法使用,您使用什么来分析结果?我目前正在使用一个小型 python 脚本来处理 JSON 结果并报告加权平均值。事实上,我更喜欢旧的文本报告而不是 Web UI。

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

0 投票
0 回答
276 浏览

java - 无法安装谷歌卡尺

我通过下载它的 git 代码安装了 google caliper,并对其进行了 mvn 全新安装。这产生了 caliper-1.0-beta-SNAPSHOT.jar。我将 caliper 作为 maven 依赖项包含在我的项目中,并决定编写一个简单的基准测试,如下所示

代码无法编译并因找不到 SimpleBenchmark 而失败。我也无法在 caliper-1.0-beta-SNAPSHOT.jar 中找到 SimpleBenchmark.class。1)我应该如何构建卡尺以便能够使用它?

0 投票
0 回答
203 浏览

java - 无法在线加载卡尺结果

我遵循了一些在线可用的建议,但没有任何帮助。

得到卡尺并从https://github.com/peterlynch/caliper构建它

export CLASSPATH=/home/deepakkv/projects/poc/benchmarkparquet/target/classes:~/.m2/repository/com/google/code/caliper/caliper/1.0-SNAPSHOT/caliper-1.0-SNAPSHOT.jar:~/projects/poc/caliper/lib/gson.jar:~/projects/poc/caliper/lib/allocation.jar:~/projects/poc/caliper/lib/guava-r09.jar

现在要将结果推送到网络,我们需要指定密钥。这是混乱。我以两种方式都包含了 API 密钥

$猫/home/deepakkv/.caliperrc

钥匙

$ cat /home/deepakkv/.caliper/config.properties

results.upload.options.key = 键

$

我运行基准如下

$ sh ~/projects/poc/caliper/scripts/caliper com.parquet.benchmark.BenchmarkParquetDirectWrites 0% 场景{vm=java, trial=0, benchmark=TestContains1, length=1} 6.47 ns; σ=0.32 ns @ 10 次试验 50% 场景{vm=java, trial=0, benchmark=TestContains2, length=1} 5.34 ns; σ=0.22 ns @ 10 次试验基准 ns 线性运行时 TestContains1 6.47 ============================== TestContains2 5.34 ===== =================== vm: java 试用版: 0 长度: 1 $

它运行成功,并不表示它正在将结果发布到网络。我找不到任何东西@http: //microbenchmarks.appspot.com/runs

我哪里错了?

0 投票
0 回答
98 浏览

caliper - 如何在卡尺中使用正常模式控制代表

当我在调试模式下运行基准测试时,我能够控制代表。sh ~/projects/poc/caliper/scripts/caliper --debug-reps 1 com.parquet.benchmark.BenchmarkParquetDirectWrites

但是,当我在常规模式下运行时 sh ~/projects/poc/caliper/scripts/caliper com.parquet.benchmark.BenchmarkParquetDirectWrites 它运行基准测试 1000 次。我想控制设置为代表的值。我有两个基准,一个是写入,另一个是读取,我希望每个基准运行 X 次而不是 1000 次。

0 投票
2 回答
4008 浏览

java - Google Caliper:入门时遇到问题(Java 基准测试)

我正在尝试使用 Google Caliper 对一些简单的代码进行基准测试。我正在使用他们网站上的示例。这是我到目前为止所做的:

  1. 下载 Caliper JAR 并将其添加到我的 Netbeans 项目中
  2. 遇到困难后,我下载了JUnit.jar和hamcrest.jar。还是行不通。

这是我的代码:

我正在扩展 Benchmark,因为当我尝试在他们的网站上扩展“SimpleBenchmark”时,它告诉我找不到 SimpleBenchmark。然后,我在我的主要方法中创建一个新的 Benchmark1(),希望会发生一些事情。什么都没有。这是我的主类中的代码。

我知道这无疑是一个简单的错误,但尽管谷歌搜索很多,但我无法弄清楚我哪里出错了。代码编译但不运行。

编辑:我应该说我正在使用 Caliper 1.0 在 Windows 7 上运行 Netbeans

0 投票
1 回答
1376 浏览

java - Python 或 Java 中强大的 json 解析器

我正在寻找Python 或 Java 中强大的json 解析器(到目前为止,我一直在使用 Python,但是当我使用它来分析 Java 基准测试时,使用 Java 是一个合理的选择。)

截断和不完整的文档具有鲁棒性。

原因是我目前正在将caliper用于一些(微)基准测试,并且当基准测试仍在运行时(或者如果我过早取消它),输出文件将不是完整的 JSON 文档。既json不会也simplejson不会读取这些在某些时候基本上被截断的文件。

(我不喜欢 Caliper Web 界面,因为它很慢,不能扩展到大型实验集,而且很多数据无法提交,然后在运行中丢失。)

大致上,这些文档如下所示:

现在,我正在使用一个讨厌的 hack,它使用 caliper 当前产生的已知缩进将结果文档拆分},\n\ \ {为块,然后只解析这些,直到最后一个失败。但这是一个令人讨厌的黑客行为,并且对未来卡尺输出的变化并不稳健。我也尝试过使用raw_decode,但它仍然会期望完整的文档,并且不会在每个},.

我正在寻找一个类似于 XML pull 的 API,它允许我在基于事件的 API 中访问文档直到它被截断的点。本质上,我对{}wrapper 中的所有完整部分感兴趣[]

0 投票
1 回答
481 浏览

java - 估计实现的实际(非理论)运行时复杂度

计算机科学领域的任何人都知道,理论上 HeapSort 是O(n log n)最坏的情况,而 QuickSort 是O(n^2)最坏的情况。然而,在实践中,一个良好实现的 QuickSort(具有良好的启发式)在每个数据集上都将优于 HeapSort。一方面,我们几乎没有观察到最坏的情况,另一方面,例如 CPU 缓存线、预取等在许多简单任务中产生了巨大的差异。虽然 QuickSort 可以处理 中的预排序数据(具有良好的启发式)O(n),但 HeapSort 将始终重新组织 中的数据O(n log n),因为它不利用现有结构。

对于我的玩具项目caliper-analyze,我最近一直在研究从基准测试结果中估计算法实际平均复杂度的方法。特别是,我尝试了 Lawson 和 Hanson 的 NNLS 拟合不同的多项式。

但是,它还不能很好地工作。有时我得到可用的结果,有时我没有。我认为进行更大的基准测试可能会有所帮助,尤其是尝试更多参数。

以下结果用于以 10% 随机性的 SAW 模式对 Double 对象进行排序。本次运行的 n 最高只有 500,因此对于实际使用来说不是很有代表性……这些数字是估计的运行时依赖于大小。输出是手工编辑和手动排序的,所以它不反映该工具当前提供的内容!

您可以看出,虽然在这种特定设置下(通常它根本无法令人满意),但结果在很大程度上与已知行为一致:冒泡排序确实成本高昂,而快速排序的良好启发式方法要好得多。但是,例如,具有三个启发式中值的 QuickSort 最终会得到一个O(n + n^2)估计,例如,而其他 QuickSort 被估计为O(n + n log n)

所以现在我的实际问题:

  • 您是否知道从基准数据执行运行时复杂性分析的算法/方法/工具,以预测哪种实现(如您在上面看到的,我有兴趣比较同一算法的不同实现!)在真实数据上表现最佳?
  • 你知道这方面的科学文章吗(估计实现的平均复杂度)?
  • 您知道有助于在这里获得更准确估计的稳健拟合方法吗?例如,NNLS 的正则化版本。
  • 您是否知道需要多少样本才能获得合理估计的经验法则?(特别是,该工具何时应避免给出任何估计,因为它可能无论如何都不准确?)

让我再次强调,我对理论复杂性或形式分析不感兴趣。我有兴趣了解实现(理论上甚至是相同的算法)如何在真实 CPU 上的基准数据上执行......共同范围的数值因子对我来说是关键,而不是渐近行为。(不,从长远来看,这不仅仅是时间复杂度和排序。但我对索引结构和其他参数感兴趣。如果我没记错的话,caliper 也可以测量内存消耗)另外,我在java中工作。一种只调用 Matlab 内置函数的方法对我没有用,因为我并不生活在 matlab 世界中。

如果我有时间,我会尝试重新运行其中一些规模更大的基准测试,以便获得更多数据点。也许它会起作用......但我相信我可以使用更强大的回归方法来获得更好的估计,即使是从较小的数据集。另外,我想检测样本何时太小而无法进行任何预测!

0 投票
2 回答
494 浏览

intellij-idea - 无法解析 com.google.caliper.BeforeExperiment

当我将 guava-tests 模块基准设置为 maven source root 时,我从 code.google.com git clone 源代码,但如何解决它也是错误的?看图片
按照弗兰克的建议,我将 bechmark 改为“测试源根”
,但 Idea 显示无法解析符号 BeforeExperiment,但我的 .m2/repository 有 jar。请参阅第一个屏幕截图
在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

当我执行时,结果如下,它是空的。

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.