SES Benchmark (Measure code execution speed.)

Discussion in 'RGSS3 Scripts (RMVX Ace)' started by Solistra, May 8, 2014.

    Tags:
  1. Solistra

    Solistra Veteran Veteran

    Messages:
    593
    Likes Received:
    242
    SES Benchmark v1.0
    by Solistra
    Introduction
    This script provides a simple benchmarking tool similar to the Benchmark module present in the Ruby standard library. Essentially, this script allows you to run specified code and objectively determine its execution speed. This is primarily a scripter's tool.

    Change Log
    • v1.0 (April 20th, 2014) - Initial release.
    Features
    • Objectively determine execution speed of code.
    • Displays speed in real-time and user processing time.
    • Allows testing of multiple strategies in a single measurement.
    • Easily modify the number of iterations for each benchmark.
    Screenshot
    [​IMG]
    Usage
    This script is intended to be used entirely through the benchmarking method SES::Benchmark.measure. This method takes the number of iterations to run the passed block as an argument -- if no argument is given, the block is run SES::Benchmark.iterations times (10,000 by default, though this can be redefined in the configuration area or during runtime). For example, we could measure Array#pop 100,000 times like so:
     
    Code:
    SES::Benchmark.measure(100_000) { [1, 2, 3].pop }
    The SES::Benchmark.measure method can also report on any number of ways to potentially run code -- very useful for benchmarking alternative methods of attaining the same result. To do so, simply pass a block that takes a single argument; the argument passed yields a Reporter instance with the report method. For example, this is how we could benchmark Array#sort versus Array#sort!:
     
    Code:
    SES::Benchmark.measure do |x|  a = (1..100).to_a.shuffle!  x.report('Array#sort')  { a.sort  }  x.report('Array#sort!') { a.sort! }end
    NOTE: Reports are executed in the order that they are given -- running the code above with the report calls switched would produce misleading results. (Labels for reports are also optional, but highly recommended.)

    In addition to this, you may run individual reports a different number of times than the other reports in a measure block. For instance, we could default to running iterations 100,000 times while running a single report for 200,000 like so (using the previous example):


    Code:
    SES::Benchmark.iterations = 100_000SES::Benchmark.measure do |x|  a = (1..100).to_a.shuffle!  x.report('Array#sort')           { a.sort  }  x.report('Array#sort!', 200_000) { a.sort! }end
    Script
    This script is available from SES VX Ace.

    Installation
    Place this script below the SES Core (v2.0) script (if you are using it) or the Materials header, but above all other custom scripts. This script does not require the SES Core (v2.0), but it is recommended.

    Credit and Thanks
    • Solistra
    Author's Notes
    This script is made available under the terms of the MIT Expat license. View this page for more information.
     
    #1
    ♥SOURCE♥ and Evgenij like this.

Share This Page