跳到内容

haskell-perf/图表

存储库文件导航

图形库基准套件

简介

该项目是作为2018年谷歌夏季代码的一部分开发的。请随时提出问题:)

结果

高级副总裁

的当前结果阴谋集团工作时间密室长凳空间可以在这里找到:https://travis-ci.org/haskell-perf/graphs网站

可以在此处找到更大图形和更漂亮输出的结果:https://github.com/haskell-perf/graphs/tree/master/results

生成

我们两者都支持阴谋集团堆栈来构建项目。请注意,使用堆栈将允许下载和构建尚未在Hackage上运行的库。

您可以使用几个cabal标志自定义构建。

套房

  • 时间:将使用标准.
  • 空间:将使用生成基准套件权衡.
  • Datasize:将使用ghc数据大小(默认情况下禁用)。

图书馆

默认情况下,我们进行基准测试容器,fgl公司藻类.散列粒度可以使用哈希图标志。

您可以通过禁用标志来禁用最后三个(从而避免依赖它们):

  • Fgl公司
  • 藻类
  • 哈希图

其他标志

  • RealLife:允许根据“真实生活图”进行基准测试(见下文)。启用此选项时,编译可能需要一些时间。禁用此标志将删除此构建步骤,并且显然会删除使用此类图进行基准测试的能力。

  • 图表:允许生成包含结果的图表。由于它可能需要下载和构建许多依赖项,因此此选项不适用于Travis实例中的构建。禁用它将删除图表包,以及创建图表的能力。

用法

时间

基准套件时间将使用运行所有排队的基准测试标准.

要运行基准测试,请使用时间运行。它提供了几个选项来自定义运行(您可以选择要比较的库等)。

要列出基准,请使用时间表.

空间

基准套件空间将使用运行所有排队的基准测试权衡.

要运行基准测试,请使用太空运行。它提供了几个选项来自定义运行(您可以选择要比较的库,等等…)。请注意,基准测试都会在打印之前运行,因此要在屏幕上打印任何内容可能需要很长时间,主要是使用大图形。

要列出基准,请使用空间列表.

数据大小

基准套件数据大小将使用ghc数据大小计算图形的大小。

论据

命令行的论点是自我解释的,但--graph“(字符串,Int)”需要一些解释:标准图是用十次幂顶点构建的。这个国际供应是这十种权力的上限。所以“(路径,3)”将生成三个路径具有1,10100顶点。您可以指定多个图形。

您可以使用-我标志。

默认值为:[(“网格”,3),(“集团”,3.

对于实际图形(请参见下文),不能使用大于4的整数。

真实生活图

我们还提供了一组“真实”的图表,其中目前包括蛋白质相互作用网络。

它们是在第一次编译时从文本文件生成的,因此可能需要一些时间。

要强制重新生成haskell-graph表示,可以安全地删除src/BenchGraph/ReaLife/Generated.hs。这将触发重建。

图形名称

支持以下图形:

  • 路径
  • 电路
  • 网格
  • 完成
  • 集团
  • RealLife(请注意,因为我们有一个有限的集合,所以您不能请求超过4个真实图形)

原始结果

您可以使用-第页选项。它将生成一个JSON文件,其中包含:

  • 使用的图形参数
  • 数据
    • 对于标准,它将是计算的时间和标准偏差(按此顺序)。

使用结果数据类型来自基准图。提供。结果.

请注意,生成的JSON忘记了一些事情(例如,用于测试函数的参数)。

制作图表

原始结果可用于生成图表,请参阅相关帮助空间时间可执行文件。

图表

可以使用以下方法从结果中生成图表:

-f、 --图表文件FILENAME输出文件,无扩展名

关于实施

这个图形Impl

所有库都需要提供图形Impl实例:

类型 边缘 =[(国际,国际)] 图形Impl  哪里
    mkGraph(mkGraph) :: 边缘 -> 
    mkVertex公司 :: 

它允许转换边缘(边列表)到库的图形表示。当列表为空时,可以保证使用mkVertex公司它生成一个只有一个顶点的图0.

这个命名类型

类型 命名  =(字符串,)

我们高度使用这种类型,不要感到惊讶。

这个套房g数据

测试台的所有功能都封装在一套数据:

数据 一套  = 对于所有人  o个. NFData公司 o个 => 一套
  { 名称 :: 字符串,描述 :: 字符串,算法 ::  ->  -> o个,输入    :: 边缘 ->[命名 ]}
  • 名称 标识基准函数。不同库中的相同函数(例如hasEdge公司)将得到相同的名称以便进行比较。
  • 描述描述了套件,仅在输出中使用。
  • 算法是要进行基准测试的实际函数。它需要一个参数,一个图表,然后产生一些东西。
  • 输入将接收实际图形,并将用于生成算法的输入。

基准图。套房

此模块定义了一套,特别是为图上的标准操作提供了稳定的名称,因此可以进行更简单的比较(记住,基准是通过其名称).

以创造为基准?

我们提供两种基准测试方法:

  • 默认情况下,我们构建一个图,然后使用DeepSeq(深度序列)将其强制为标准形式,然后将其传递给基准函数。
  • 然而,随着-b条选项,您还将对创建进行基准测试,也就是说,我们将只强制使用通用表示(边列表),然后对图形创建函数和算法进行基准测试。

事实上,我们有:

如果基准创建然后nf(算法参数.mkGraph)$!!边缘其他的nf(算法参数)$!!mkGraph边

如果我不在乎,只想添加基准测试?

按照中开始的说明进行操作工作台/YourLib/Graph.hs

关于

未提供描述、网站或主题。

资源

许可证

星星

观察者

叉子

包装

未发布包

贡献者4

  •  
  •  
  •  
  •