[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

[ANN] Bench 1.0.0 released

Jan Friedrich

6/10/2008 7:31:00 PM

Bench version 1.0.0 released!
http://bench.rub...

== DESCRIPTION

Do you remeber how to use the benchmark library from the Ruby standard
lib? I don't.

Now you need not to remember, there is Bench: A DSL around the benchmark
lib of the Ruby
standard lib with the goal to make benchmarking as easy as possible.

== SYNOPSIS

Adapted example of the benchmark documentation from the pickaxe version 2
page 657

require 'bench'

string = 'Stormy Weather'
m = string.method(:length)

benchmark 'code' do
m.call
end

benchmark 'send' do
string.send(:length)
end

benchmark 'eval' do
eval "string.length"
end

run 10_000

== CREDITS

Copyright 2008 by Jan Friedrich (janfri.rubyforge@gmail.com)

== LICENSE

Ruby's license.
8 Answers

Ryan Davis

6/10/2008 9:12:00 PM

0


On Jun 10, 2008, at 12:34 , Jan Friedrich wrote:

> Do you remeber how to use the benchmark library from the Ruby standard
> lib? I don't.
>
> Now you need not to remember, there is Bench: A DSL around the
> benchmark
> lib of the Ruby standard lib with the goal to make benchmarking as
> easy as possible.

If I don't remember how to use the benchmark library, why would I
remember how to use your DSL?

That is what ri is for. `ri Benchmark` obviates the need for Bench.


Daniel Berger

6/11/2008 12:50:00 AM

0



On Jun 10, 3:11 pm, Ryan Davis <ryand-r...@zenspider.com> wrote:
> On Jun 10, 2008, at 12:34 , Jan Friedrich wrote:
>
> > Do you remeber how to use the benchmark library from the Ruby standard
> > lib? I don't.
>
> > Now you need not to remember, there is Bench: A DSL around the
> > benchmark
> > lib of the Ruby standard lib with the goal to make benchmarking as
> > easy as possible.
>
> If I don't remember how to use the benchmark library, why would I
> remember how to use your DSL?
>
> That is what ri is for. `ri Benchmark` obviates the need for Bench.

Agreed. However, I would like a nicer interface:

http://djberg96.livejournal.com/...

I've submitted "bench-unit" as a RubyForge project.

Regards,

Dan

Jan Friedrich

6/11/2008 8:02:00 AM

0

Ryan Davis wrote:
> If I don't remember how to use the benchmark library, why would I
> remember how to use your DSL?
Because it has only 2 commands: benchmark and run. ;)

> That is what ri is for. `ri Benchmark` obviates the need for Bench.
Maybe, but with bench it's a pleasure to doing benchmarks interactive
with irb:

>> require 'bench'

>> benchmark 'simple' do
?> /ll/ =~ 'hello world'
>> end

>> benchmark 'freezed' do
?> /ll/.freeze =~ 'hello world'
>> end

>> run 1000
user system total real
simple 0.000000 0.000000 0.000000 ( 0.003960)
freezed 0.010000 0.000000 0.010000 ( 0.004870)

>> run 1000
user system total real
simple 0.010000 0.000000 0.010000 ( 0.003969)
freezed 0.000000 0.000000 0.000000 ( 0.004624)

>> # let's try more iterations
?> run 10000
user system total real
simple 0.060000 0.000000 0.060000 ( 0.058049)
freezed 0.060000 0.000000 0.060000 ( 0.058636)

>> run 100000
user system total real
simple 0.500000 0.000000 0.500000 ( 0.502427)
freezed 0.540000 0.000000 0.540000 ( 0.533421)

>> # now another benchmark sample
?> RE = /ll/

>> benchmark 'constant' do
?> RE =~ 'hello world'
>> end

>> run
user system total real
simple 0.000000 0.000000 0.000000 ( 0.000031)
freezed 0.000000 0.000000 0.000000 ( 0.000469)
constant 0.000000 0.000000 0.000000 ( 0.000031)

But It's certainly a question of taste. :)

Regards,
Jan Friedrich

Michel Martens

6/11/2008 6:10:00 PM

0

On Wed, Jun 11, 2008 at 5:04 AM, Jan Friedrich
<janfri.rubyforge@gmail.com> wrote:
> Ryan Davis wrote:
>> If I don't remember how to use the benchmark library, why would I
>> remember how to use your DSL?
> Because it has only 2 commands: benchmark and run. ;)

Agree :-)

Good job!

--
Michel

Trans

6/11/2008 8:52:00 PM

0



On Jun 10, 3:34=A0pm, Jan Friedrich <janfri.rubyfo...@gmail.com> wrote:
> Bench version 1.0.0 released!http://bench.rub...
>
> =3D=3D DESCRIPTION
>
> Do you remeber how to use the benchmark library from the Ruby standard
> lib? I don't.
>
> Now you need not to remember, there is Bench: A DSL around the benchmark
> lib of the Ruby
> standard lib with the goal to make benchmarking as easy as possible.
>
> =3D=3D SYNOPSIS
>
> Adapted example of the benchmark documentation from the pickaxe version 2
> page 657
>
> =A0 require 'bench'
>
> =A0 string =3D 'Stormy Weather'
> =A0 m =3D string.method(:length)
>
> =A0 benchmark 'code' do
> =A0 =A0 m.call
> =A0 end
>
> =A0 benchmark 'send' do
> =A0 =A0 string.send(:length)
> =A0 end
>
> =A0 benchmark 'eval' do
> =A0 =A0 eval "string.length"
> =A0 end
>
> =A0 run 10_000

What is the underlying translation of benchmark? I.e. the original
Benchmark library has a few different methods, which did you use? I
like the simplicity of your DSL. In the long run it might be nice to
see this advance beyond a dependency on the original benchmark
library.

T.

Jan Friedrich

6/12/2008 8:09:00 AM

0

Trans <transfire@gmail.com> wrote:
> What is the underlying translation of benchmark? I.e. the original
> Benchmark library has a few different methods, which did you use? I like
> the simplicity of your DSL. In the long run it might be nice to see this
> advance beyond a dependency on the original benchmark library.
Let's look at the code:

def run count=1
size = Bench.queue.inject(0) {|max, bm| size = bm.name.size; size >
max ? size : max}
Benchmark.bm(size) do |x|
Bench.queue.each do |bm|
x.report(bm.name) { count.times {bm.proc.call} }
end
end
end


Two methods of the original benchmark are called:
* Benchmark.bm with an automatic calculated label_width (I don't want to
think about that).
* Benchmark::Report#report

You can call run as often as you want and do GC.start or whatever before,
so you can simulate the Benchmark.bmbm method. That is enough for my
needs.

Maybe there is a better approach? Feel free to contribute:
http://gitorious.org/proj... :)

Regards
Jan Friedrich

Joel VanderWerf

6/12/2008 8:09:00 PM

0

Jan Friedrich wrote:
> x.report(bm.name) { count.times {bm.proc.call} }

Suggestion:

x.report(bm.name) { count.times(&bm.proc) }

This will run faster, and more importantly less of the reported time
will be due to framework overhead.

--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

Jan Friedrich

6/13/2008 10:12:00 AM

0

Joel VanderWerf <vjoel@path.berkeley.edu> wrote:
> x.report(bm.name) { count.times(&bm.proc) }
>
> This will run faster, and more importantly less of the reported time
> will be due to framework overhead.
Thanks a lot. :)

Regards
Jan Friedrich