You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Current results of `cabal bench time` and `cabal bench space` can be found here: <https://travis-ci.org/haskell-perf/graphs>
11
12
12
13
Results on bigger graphs and with more beautiful output can be found here: <https://github.com/haskell-perf/graphs/tree/master/results>
13
14
@@ -21,7 +22,7 @@ You can customize your build using several cabal flags (all of them are on by de
21
22
22
23
* Time: will produce a benchmark suite using `criterion`.
23
24
* Space: will produce a benchmark suite using `weigh`.
24
-
* Datasize: will produce a benchmark suite using `ghc-datasize`.
25
+
* Datasize: will produce a benchmark suite using `ghc-datasize` (disabled by default).
25
26
26
27
### Libraries
27
28
@@ -63,9 +64,13 @@ The benchmark suite `datasize` will use `ghc-datasize` to calculate size of grap
63
64
### Arguments
64
65
65
66
Command-line arguments are self-explaining, but the `--graph "(String,Int)"` requires some explanations:
66
-
We test functions against standards graphs, and they are built with ten-powers vertices. For standard graphs, the Int supplied is the upper-bound of the ten-powers. So `"(Path,100)"` will generate the `Path` with `1`, `10` and `100` vertices. You can specify several graphs.
67
+
Standards graphs are built with ten-powers vertices. The `Int` supplied is the upper-bound of these ten-powers. So `"(Path,3)"` will generate three `Path` with `1`, `10` and `100` vertices. You can specify several graphs.
68
+
69
+
You can force the suite to use only bigger graphs with the `-i` flag.
70
+
71
+
The default is: `[("Mesh",3),("Clique",3)]`.
67
72
68
-
The default is: `[("Mesh",3),("Clique",3)]`
73
+
For real-life graphs (see below) you cannot use an integer greater than 4.
69
74
70
75
#### Real-life graphs
71
76
@@ -86,6 +91,14 @@ The following graphs are supported:
86
91
* Clique
87
92
* RealLife (Note that because we have a limited set, you cannot request more than 4 real-life graphs)
88
93
94
+
### Charts
95
+
96
+
One can produce a chart from the results, use:
97
+
98
+
```
99
+
-f,--chartfile FILENAME Output file WITHOUT extension
100
+
-c,--chart OUTTYPE Output type: Png or Svg
101
+
```
89
102
90
103
## About implementation
91
104
@@ -131,7 +144,6 @@ data Suite g = forall i o. NFData o => Suite
131
144
132
145
This module defines common builders for `Suite`, and particularly provides stable names for standard operations on graphs, and thus allows for simpler comparison (remember, benchmarks are identified by their _name_).
Note: Some functions of Data.Graph was not in the original library (`edgeCount` and `hasEdge`), their defintion can be found in `bench/Containers/Graph.hs`
9
+
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!
7
10
8
11
## What is benchmarked
9
12
@@ -14,7 +17,7 @@ In this folder, you will find the lastest benchmarks of 4 haskell graphs librari
*[Hash-Graph (not yet on hackage)](https://github.com/patrickdoc/hash-graph)
16
19
17
-
The benchmarks were realised using `Stack` and the `stack.newest.yaml` configuration
20
+
The benchmarks were realised using `Stack` and the `stack.yaml` configuration
18
21
19
22
## Tools
20
23
@@ -27,11 +30,22 @@ The benchmarks were realised using `Stack` and the `stack.newest.yaml` configura
27
30
### Benchmarking routine
28
31
29
32
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.
30
-
This may not reflect the reality, so we produced https://github.com/haskell-perf/graphs/blob/master/results/TIME-creation.md where the creation time (from a list of edges) is taken into account.
33
+
34
+
#### Creation
35
+
36
+
This may not reflect the reality, so we produced an alternative table where creation time (from a list of edges) is taken into account:
Containers, Fgl and Hash-Graph are dealing well with a list of edges. This is *not* the case with Alga, so we produced https://github.com/haskell-perf/graphs/blob/master/results/TIME-extra.md where we used the alga representation instead of a list of edges.
44
+
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:
@@ -56,9 +70,11 @@ The functions are benchmarked against:
56
70
The two first graphs are built with successive ten powers vertices. Here, with 1, 10, 100 and 1000 vertices.
57
71
58
72
### Types
73
+
59
74
Libraries are benchmarked against graphs with *Int* vertices.
60
75
61
76
## About arguments
77
+
62
78
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.
0 commit comments