Switch branches/tags
Find file History
Latest commit dac74c3 Aug 13, 2018
Permalink
Type Name Latest commit message Commit time
..
Failed to load latest commit information.
README.md newStack is master Aug 13, 2018
SPACE.md Add how results were produced Jul 2, 2018
TIME-creation.md More precise results Aug 8, 2018
TIME-creation.svg Remove merge context of charts Aug 7, 2018
TIME-extra.md Add time extra Aug 7, 2018
TIME-extra.svg Remove merge context of charts Aug 7, 2018
TIME.md More precise results Aug 8, 2018
TIME.svg Remove merge context of charts Aug 7, 2018

README.md

Results

svg

Note: Some functions of some libraries are not implemented so we use a "hand-made" implementation. Defintions can be found in bench/. Suggestions are welcome!

What is benchmarked

In this folder, you will find the lastest benchmarks of 4 haskell graphs libraries:

The benchmarks were realised using Stack and the stack.yaml configuration

Tools

Benchmarking routine

For the main results, we produce a generic list of edges (in ascending orders, but none of the libraries rely on this), create a graph from it, fully evaluate this graph to Normal Form, then pass it to then benchmarked function.

Creation

This may not reflect the reality, so we produced an alternative table where creation time (from a list of edges) is taken into account:

svg

https://github.com/haskell-perf/graphs/blob/master/results/TIME-creation.md

The list of edges

Containers, Fgl and Hash-Graph are dealing well with a list of edges. This is not the case with Alga, so we produced an alternative table where we used the alga representation instead of a list of edges:

svg

https://github.com/haskell-perf/graphs/blob/master/results/TIME-extra.md

Some words about graphs

The functions are benchmarked against:

  • A mesh: This graph can be represented as a regular tiling of a plane, with edges going only right or up. It is a good example of a sparse graph. For example a mesh with nine vertices can be viewed as:
6 7 8
3 4 5
1 1 2
  • A clique: This a graph such as every two distinct vertices are adjacent. It is a good example of a dense graph. The list of the edges of a clique with 5 vertices will look like:
[(0,1),(0,2),(0,3),(0,4),(1,2),(1,3),(1,4),(2,3),(2,4),(3,4)]

The two first graphs are built with successive ten powers vertices. Here, with 1, 10, 100 and 1000 vertices.

Types

Libraries are benchmarked against graphs with Int vertices.

About arguments

All the functions are tested with arguments in the domain of the graph, where applicable: unless it is mentioned, edges and vertices generated for the test can be in the complete graph with the same number of vertices.

Remarks

  • Results are condensed in table, without the detail of arguments. For more precise results, please run the benchmark suite.
  • Other graphs are supported (path, circuit and complete), you can run the benchmark suite using them.