benchmark-plot 0.1 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/HISTORY.md +8 -1
- data/README.md +41 -1
- data/Rakefile +2 -0
- data/benchmark-plot.gemspec +2 -3
- data/examples/mapflat_vs_flat_map/benchmark_plot_graph.png +0 -0
- data/examples/mapflat_vs_flat_map/flat_vs_flat_map.rb +18 -4
- data/examples/matrix_vs_nmatrix/matrix_multiplication/matrix_multiplication.png +0 -0
- data/examples/matrix_vs_nmatrix/matrix_multiplication/matrix_multiplication.rb +19 -0
- data/examples/nmatrix_vs_narray/matrix_creation.rb +3 -0
- data/lib/benchmark/plot.rb +47 -0
- data/lib/benchmark/plot/plotter.rb +3 -1
- data/lib/benchmark/plot/version.rb +1 -1
- metadata +9 -10
- data/examples/flat_vs_flat_map.rb +0 -26
- data/examples/matrix_benchmarks.rb +0 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ad54756fcf89b2ae23e8f8993bb4738c37ce339d
|
4
|
+
data.tar.gz: ae95a1da2c424dc44c7c96b030bc90414a923966
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3594f791ad1d9267ba901febd3366a5be3d56274ee7c4f2b604a80f085891626db1df27fbfafcb02996638b056573132eb197d6b3f105fe7317200b899846b80
|
7
|
+
data.tar.gz: ef3d1b36344b03d0ce0bf5a85ab9e79f469298aee10f912b34b620c7290a20dc2ecd33f66bcd8be472a9e5ed646f09082d1ed1ca59b568c7bbc83ddc9a5703e6
|
data/.gitignore
CHANGED
data/HISTORY.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
1
|
# 0.1
|
2
2
|
|
3
|
-
* First gem release. Support for basic args and options.
|
3
|
+
* First gem release. Support for basic args and options.
|
4
|
+
|
5
|
+
# 0.1.1
|
6
|
+
|
7
|
+
* Remove uncalled for puts statement from plotter.rb.
|
8
|
+
* Add more examples.
|
9
|
+
* More options and default Y axis label of 'Seconds'.
|
10
|
+
* Lots of documentation.
|
data/README.md
CHANGED
@@ -1,6 +1,46 @@
|
|
1
1
|
# benchmark-plot
|
2
|
+
|
2
3
|
A Ruby benchmark extension to allow comparative plotting of benchmarks.
|
3
4
|
|
5
|
+
# Usage
|
6
|
+
|
7
|
+
This gem is mainly useful for benchmarking code over a number of inputs. This input should be supplied in the form of an object capable of calling `#each`.
|
8
|
+
|
9
|
+
Sample benchmarking script:
|
10
|
+
|
11
|
+
``` ruby
|
12
|
+
require 'benchmark/plot'
|
13
|
+
|
14
|
+
class TestArray
|
15
|
+
attr_reader :arr
|
16
|
+
|
17
|
+
def initialize arr
|
18
|
+
@arr = arr
|
19
|
+
end
|
20
|
+
|
21
|
+
def to_s
|
22
|
+
@arr.size.to_s
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
test_data = [5, 25, 50, 75, 100, 125, 150, 175, 200,250,300]
|
27
|
+
test_data.map! {|e| TestArray.new(Array.new(e) {|i| i}) }
|
28
|
+
|
29
|
+
Benchmark.plot(test_data) do |x|
|
30
|
+
x.report("map.flatten") do |data|
|
31
|
+
data.arr.map { [nil] }.flatten
|
32
|
+
end
|
33
|
+
|
34
|
+
x.report("flat_map") do |data|
|
35
|
+
data.arr.flat_map { [nil] }
|
36
|
+
end
|
37
|
+
end
|
38
|
+
```
|
39
|
+
|
40
|
+
Output:
|
41
|
+
|
42
|
+

|
43
|
+
|
4
44
|
# Acknowledgements
|
5
45
|
|
6
|
-
@tgxworld for providing the co-working space during the Open Source Breakfast Hack during Red Dot Ruby
|
46
|
+
[@tgxworld](https://github.com/tgxworld) for providing the co-working space during the Open Source Breakfast Hack during Red Dot Ruby Conference 2016 where this gem was built.
|
data/Rakefile
ADDED
data/benchmark-plot.gemspec
CHANGED
@@ -6,9 +6,8 @@ require 'benchmark/plot/version.rb'
|
|
6
6
|
Benchmark::Plot::DESCRIPTION = <<MSG
|
7
7
|
benchmark-plot is an extension to the Ruby standard benchmarking library.
|
8
8
|
|
9
|
-
It let's you easily create plots
|
10
|
-
|
11
|
-
benchmarking.
|
9
|
+
It let's you easily create plots of any code that you want to benchmark over
|
10
|
+
a varied number of inputs. It also supports comparative benchmarking.
|
12
11
|
MSG
|
13
12
|
|
14
13
|
Gem::Specification.new do |spec|
|
Binary file
|
@@ -1,12 +1,26 @@
|
|
1
|
+
require 'benchmark/plot'
|
2
|
+
|
3
|
+
class TestArray
|
4
|
+
attr_reader :arr
|
5
|
+
|
6
|
+
def initialize arr
|
7
|
+
@arr = arr
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
@arr.size.to_s
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
1
15
|
test_data = [5, 25, 50, 75, 100, 125, 150, 175, 200,250,300]
|
2
|
-
test_data.map! {|e| Array.new(e) {|i| i} }
|
16
|
+
test_data.map! {|e| TestArray.new(Array.new(e) {|i| i}) }
|
3
17
|
|
4
18
|
Benchmark.plot(test_data) do |x|
|
5
19
|
x.report("map.flatten") do |data|
|
6
|
-
data.map { [nil] }.flatten
|
20
|
+
data.arr.map { [nil] }.flatten
|
7
21
|
end
|
8
22
|
|
9
23
|
x.report("flat_map") do |data|
|
10
|
-
data.flat_map { [nil] }
|
24
|
+
data.arr.flat_map { [nil] }
|
11
25
|
end
|
12
|
-
end
|
26
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'benchmark/plot'
|
2
|
+
require 'matrix'
|
3
|
+
require 'nmatrix'
|
4
|
+
require 'nmatrix/atlas'
|
5
|
+
|
6
|
+
sizes = [5, 10, 50, 100, 150, 200]
|
7
|
+
|
8
|
+
Benchmark.plot sizes, title: "Matrix multiplication",
|
9
|
+
file_name: "matrix_multiplication" do |x|
|
10
|
+
x.report "NMatrix with ATLAS" do |size|
|
11
|
+
n = NMatrix.new([size,size], [1]*size*size, dtype: :float32)
|
12
|
+
n.dot(n)
|
13
|
+
end
|
14
|
+
|
15
|
+
x.report "Matrix" do |size|
|
16
|
+
n = Matrix[*[[1]*size]*size]
|
17
|
+
n * n
|
18
|
+
end
|
19
|
+
end
|
data/lib/benchmark/plot.rb
CHANGED
@@ -6,6 +6,53 @@ require 'benchmark/plot/report_maker'
|
|
6
6
|
require 'benchmark/plot/version'
|
7
7
|
|
8
8
|
module Benchmark
|
9
|
+
# Create a plot of the benchmarked code over a varied number of inputs.
|
10
|
+
#
|
11
|
+
# @param test_data [Enumerable] An object containing the data that is to be
|
12
|
+
# used for the benchmarking. This object must be Enumerable, i.e. it must
|
13
|
+
# have the `#each` method defined. Each of the constituent objects of
|
14
|
+
# `test_data` should have a `#to_s` method defined, which will be used for
|
15
|
+
# populating the X axis labels.
|
16
|
+
# @param [Hash] opts The options for configuring the graph.
|
17
|
+
# @option opts [Symbol, String] :title (:Benchmarks) Title of the graph.
|
18
|
+
# @option opts [Symbol, String] :file_name (:benchmark_plot_graph) Name of
|
19
|
+
# file to which plot is written.
|
20
|
+
# @option opts [Symbol] :time (:real) The kind of time that should be displayed
|
21
|
+
# on the graph. Can be `:real` for elapsed real time, `:stime` for System
|
22
|
+
# CPU time, `:utime` for User CPU time, `:cstime` for System CPU time of children,
|
23
|
+
# `:cutime` for User CPU time of children, and `:total` for the total time
|
24
|
+
# that is `:utime + :stime + :cutime + :cstime`.
|
25
|
+
# @option opts [TrueClass, FalseClass] :x_labels (true) Whether you want X-axis
|
26
|
+
# labels or not.
|
27
|
+
# @option opts [String, Symbol] :x_axis_label (nil) X-axis label string.
|
28
|
+
# @example Benchmark map{}.flatten vs. flat_map
|
29
|
+
# require 'benchmark/plot'
|
30
|
+
# class TestArray
|
31
|
+
# attr_reader :arr
|
32
|
+
#
|
33
|
+
# def initialize arr
|
34
|
+
# @arr = arr
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# # The to_s method is called for populating the X axis labels.
|
38
|
+
# def to_s
|
39
|
+
# @arr.size.to_s
|
40
|
+
# end
|
41
|
+
# end
|
42
|
+
#
|
43
|
+
# test_data = [5, 25, 50, 75, 100, 125, 150, 175, 200,250,300]
|
44
|
+
# test_data.map! {|e| TestArray.new(Array.new(e) {|i| i}) }
|
45
|
+
#
|
46
|
+
# Benchmark.plot(test_data) do |x|
|
47
|
+
# x.report("map.flatten") do |data|
|
48
|
+
# # Here `data` will be of an object of type `TestArray`.
|
49
|
+
# data.arr.map { [nil] }.flatten
|
50
|
+
# end
|
51
|
+
#
|
52
|
+
# x.report("flat_map") do |data|
|
53
|
+
# data.arr.flat_map { [nil] }
|
54
|
+
# end
|
55
|
+
# end
|
9
56
|
def self.plot test_data, opts={}, &block
|
10
57
|
include Benchmark::Plot
|
11
58
|
|
@@ -7,6 +7,7 @@ module Benchmark
|
|
7
7
|
@title = opts[:title] || :Benchmarks
|
8
8
|
@time = opts[:time] || :real
|
9
9
|
@x_labels = opts[:x_labels] || true
|
10
|
+
@x_axis_label = opts[:x_axis_label]
|
10
11
|
@test_data = test_data
|
11
12
|
end
|
12
13
|
|
@@ -22,8 +23,9 @@ module Benchmark
|
|
22
23
|
plot.data label, time_data
|
23
24
|
end
|
24
25
|
positions = Array.new(@test_data.size) { |i| i }
|
25
|
-
puts positions.zip(@test_data.map(&:to_s)).to_h
|
26
26
|
plot.labels = positions.zip(@test_data.map(&:to_s)).to_h if @x_labels
|
27
|
+
plot.x_axis_label = @x_axis_label if @x_axis_label
|
28
|
+
plot.y_axis_label = 'Seconds'
|
27
29
|
plot.write("#{@file_name}.png")
|
28
30
|
end
|
29
31
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: benchmark-plot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sameer Deshmukh
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-06-
|
11
|
+
date: 2016-06-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gruff
|
@@ -24,12 +24,9 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
-
description:
|
28
|
-
|
29
|
-
|
30
|
-
It let's you easily create plots in the form of PNG images of any code that you
|
31
|
-
want to benchmark over a varied number of inputs. It also supports comparative
|
32
|
-
benchmarking.
|
27
|
+
description: "benchmark-plot is an extension to the Ruby standard benchmarking library.\n\nIt
|
28
|
+
let's you easily create plots of any code that you want to benchmark over \na varied
|
29
|
+
number of inputs. It also supports comparative benchmarking.\n"
|
33
30
|
email:
|
34
31
|
- sameer.deshmukh93@gmail.com
|
35
32
|
executables: []
|
@@ -40,11 +37,13 @@ files:
|
|
40
37
|
- HISTORY.md
|
41
38
|
- LICENSE
|
42
39
|
- README.md
|
40
|
+
- Rakefile
|
43
41
|
- benchmark-plot.gemspec
|
44
|
-
- examples/flat_vs_flat_map.rb
|
45
42
|
- examples/mapflat_vs_flat_map/benchmark_plot_graph.png
|
46
43
|
- examples/mapflat_vs_flat_map/flat_vs_flat_map.rb
|
47
|
-
- examples/
|
44
|
+
- examples/matrix_vs_nmatrix/matrix_multiplication/matrix_multiplication.png
|
45
|
+
- examples/matrix_vs_nmatrix/matrix_multiplication/matrix_multiplication.rb
|
46
|
+
- examples/nmatrix_vs_narray/matrix_creation.rb
|
48
47
|
- lib/benchmark/plot.rb
|
49
48
|
- lib/benchmark/plot/plotter.rb
|
50
49
|
- lib/benchmark/plot/report_maker.rb
|
@@ -1,26 +0,0 @@
|
|
1
|
-
require 'benchmark/plot'
|
2
|
-
|
3
|
-
class TestArray
|
4
|
-
attr_reader :arr
|
5
|
-
|
6
|
-
def initialize arr
|
7
|
-
@arr = arr
|
8
|
-
end
|
9
|
-
|
10
|
-
def to_s
|
11
|
-
@arr.size.to_s
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
test_data = [5, 25, 50, 75, 100, 125, 150, 175, 200,250,300]
|
16
|
-
test_data.map! {|e| TestArray.new(Array.new(e) {|i| i}) }
|
17
|
-
|
18
|
-
Benchmark.plot(test_data) do |x|
|
19
|
-
x.report("map.flatten") do |data|
|
20
|
-
data.arr.map { [nil] }.flatten
|
21
|
-
end
|
22
|
-
|
23
|
-
x.report("flat_map") do |data|
|
24
|
-
data.arr.flat_map { [nil] }
|
25
|
-
end
|
26
|
-
end
|
@@ -1,14 +0,0 @@
|
|
1
|
-
require 'nmatrix'
|
2
|
-
require 'matrix'
|
3
|
-
|
4
|
-
test_data = [5,10,15,20,25,30,35]
|
5
|
-
|
6
|
-
Benchmark.plot(test_data) do |x, data|
|
7
|
-
x.report("nmatrix creation") do
|
8
|
-
Array.new(data) { |i| i }
|
9
|
-
end
|
10
|
-
|
11
|
-
x.report("matrix creation") do
|
12
|
-
Array.new(data) { |i| i }
|
13
|
-
end
|
14
|
-
end
|