Skip to content

Instantly share code, notes, and snippets.

@colstrom
Created July 20, 2018 18:46
Show Gist options
  • Save colstrom/77d4982161ba666d06efcd859684d6d4 to your computer and use it in GitHub Desktop.
Save colstrom/77d4982161ba666d06efcd859684d6d4 to your computer and use it in GitHub Desktop.
Ruby Vector Benchmarks (Component Scaling - matrix vs numo/narray)
Warming up --------------------------------------
V * F (1) 123.890k i/100ms
V.dot(V) (1) 122.505k i/100ms
NA * F (1) 37.836k i/100ms
NA * NA (1) 59.097k i/100ms
Calculating -------------------------------------
V * F (1) 1.730M (± 2.3%) i/s - 8.672M in 5.015293s
V.dot(V) (1) 1.731M (± 2.3%) i/s - 8.698M in 5.028631s
NA * F (1) 399.584k (± 2.8%) i/s - 2.005M in 5.022543s
NA * NA (1) 668.977k (± 2.4%) i/s - 3.369M in 5.038234s
Comparison:
V.dot(V) (1): 1730595.9 i/s
V * F (1): 1730062.2 i/s - same-ish: difference falls within error
NA * NA (1): 668976.9 i/s - 2.59x slower
NA * F (1): 399583.9 i/s - 4.33x slower
Warming up --------------------------------------
V * F (2) 109.311k i/100ms
V.dot(V) (2) 98.526k i/100ms
NA * F (2) 35.882k i/100ms
NA * NA (2) 55.749k i/100ms
Calculating -------------------------------------
V * F (2) 1.510M (± 3.6%) i/s - 7.652M in 5.072453s
V.dot(V) (2) 1.305M (± 3.8%) i/s - 6.601M in 5.065095s
NA * F (2) 396.180k (± 3.5%) i/s - 2.009M in 5.078209s
NA * NA (2) 672.906k (± 2.8%) i/s - 3.401M in 5.057723s
Comparison:
V * F (2): 1510423.6 i/s
V.dot(V) (2): 1305140.4 i/s - 1.16x slower
NA * NA (2): 672905.8 i/s - 2.24x slower
NA * F (2): 396179.7 i/s - 3.81x slower
Warming up --------------------------------------
V * F (3) 101.852k i/100ms
V.dot(V) (3) 84.646k i/100ms
NA * F (3) 35.386k i/100ms
NA * NA (3) 55.560k i/100ms
Calculating -------------------------------------
V * F (3) 1.372M (± 3.9%) i/s - 6.926M in 5.056073s
V.dot(V) (3) 1.080M (± 3.5%) i/s - 5.417M in 5.022222s
NA * F (3) 395.054k (± 3.2%) i/s - 1.982M in 5.021437s
NA * NA (3) 670.999k (± 2.7%) i/s - 3.389M in 5.054594s
Comparison:
V * F (3): 1371881.2 i/s
V.dot(V) (3): 1079981.2 i/s - 1.27x slower
NA * NA (3): 670999.1 i/s - 2.04x slower
NA * F (3): 395054.4 i/s - 3.47x slower
Warming up --------------------------------------
V * F (4) 79.149k i/100ms
V.dot(V) (4) 76.499k i/100ms
NA * F (4) 36.030k i/100ms
NA * NA (4) 56.615k i/100ms
Calculating -------------------------------------
V * F (4) 990.799k (± 2.8%) i/s - 4.986M in 5.036806s
V.dot(V) (4) 946.231k (± 3.4%) i/s - 4.743M in 5.018112s
NA * F (4) 403.729k (± 3.2%) i/s - 2.018M in 5.002730s
NA * NA (4) 661.204k (± 2.1%) i/s - 3.340M in 5.054030s
Comparison:
V * F (4): 990798.8 i/s
V.dot(V) (4): 946230.5 i/s - same-ish: difference falls within error
NA * NA (4): 661203.8 i/s - 1.50x slower
NA * F (4): 403728.7 i/s - 2.45x slower
Warming up --------------------------------------
V * F (5) 73.382k i/100ms
V.dot(V) (5) 68.790k i/100ms
NA * F (5) 35.155k i/100ms
NA * NA (5) 56.757k i/100ms
Calculating -------------------------------------
V * F (5) 925.190k (± 2.2%) i/s - 4.696M in 5.078566s
V.dot(V) (5) 842.449k (± 3.7%) i/s - 4.265M in 5.069524s
NA * F (5) 404.541k (± 2.8%) i/s - 2.039M in 5.044313s
NA * NA (5) 666.461k (± 2.8%) i/s - 3.349M in 5.028337s
Comparison:
V * F (5): 925190.2 i/s
V.dot(V) (5): 842448.6 i/s - 1.10x slower
NA * NA (5): 666460.7 i/s - 1.39x slower
NA * F (5): 404541.0 i/s - 2.29x slower
Warming up --------------------------------------
V * F (6) 72.095k i/100ms
V.dot(V) (6) 59.733k i/100ms
NA * F (6) 35.304k i/100ms
NA * NA (6) 55.329k i/100ms
Calculating -------------------------------------
V * F (6) 886.287k (± 3.0%) i/s - 4.470M in 5.047798s
V.dot(V) (6) 745.441k (± 3.1%) i/s - 3.763M in 5.053289s
NA * F (6) 396.464k (± 2.5%) i/s - 2.012M in 5.078907s
NA * NA (6) 661.352k (± 2.6%) i/s - 3.320M in 5.022930s
Comparison:
V * F (6): 886286.6 i/s
V.dot(V) (6): 745440.9 i/s - 1.19x slower
NA * NA (6): 661352.2 i/s - 1.34x slower
NA * F (6): 396463.7 i/s - 2.24x slower
Warming up --------------------------------------
V * F (7) 68.614k i/100ms
V.dot(V) (7) 57.090k i/100ms
NA * F (7) 36.406k i/100ms
NA * NA (7) 55.311k i/100ms
Calculating -------------------------------------
V * F (7) 823.400k (± 2.2%) i/s - 4.117M in 5.002111s
V.dot(V) (7) 670.789k (± 3.4%) i/s - 3.368M in 5.027298s
NA * F (7) 385.169k (± 4.2%) i/s - 1.930M in 5.018650s
NA * NA (7) 651.711k (± 4.4%) i/s - 3.263M in 5.019526s
Comparison:
V * F (7): 823399.8 i/s
V.dot(V) (7): 670788.7 i/s - 1.23x slower
NA * NA (7): 651711.5 i/s - 1.26x slower
NA * F (7): 385168.8 i/s - 2.14x slower
Warming up --------------------------------------
V * F (8) 64.567k i/100ms
V.dot(V) (8) 52.885k i/100ms
NA * F (8) 34.978k i/100ms
NA * NA (8) 54.164k i/100ms
Calculating -------------------------------------
V * F (8) 779.653k (± 4.9%) i/s - 3.939M in 5.065447s
V.dot(V) (8) 597.181k (± 3.6%) i/s - 3.014M in 5.054659s
NA * F (8) 378.967k (± 3.3%) i/s - 1.924M in 5.082206s
NA * NA (8) 632.984k (± 3.6%) i/s - 3.196M in 5.055242s
Comparison:
V * F (8): 779653.3 i/s
NA * NA (8): 632983.5 i/s - 1.23x slower
V.dot(V) (8): 597181.4 i/s - 1.31x slower
NA * F (8): 378966.7 i/s - 2.06x slower
Warming up --------------------------------------
V * F (9) 59.438k i/100ms
V.dot(V) (9) 48.323k i/100ms
NA * F (9) 33.918k i/100ms
NA * NA (9) 53.916k i/100ms
Calculating -------------------------------------
V * F (9) 724.024k (± 5.1%) i/s - 3.626M in 5.021311s
V.dot(V) (9) 564.415k (± 3.0%) i/s - 2.851M in 5.055915s
NA * F (9) 384.046k (± 3.0%) i/s - 1.933M in 5.038592s
NA * NA (9) 643.137k (± 3.3%) i/s - 3.235M in 5.035323s
Comparison:
V * F (9): 724024.4 i/s
NA * NA (9): 643137.4 i/s - 1.13x slower
V.dot(V) (9): 564415.5 i/s - 1.28x slower
NA * F (9): 384046.1 i/s - 1.89x slower
Warming up --------------------------------------
V * F (10) 59.647k i/100ms
V.dot(V) (10) 46.010k i/100ms
NA * F (10) 35.443k i/100ms
NA * NA (10) 55.489k i/100ms
Calculating -------------------------------------
V * F (10) 732.077k (± 4.3%) i/s - 3.698M in 5.060854s
V.dot(V) (10) 511.990k (± 4.0%) i/s - 2.577M in 5.040557s
NA * F (10) 387.423k (± 3.7%) i/s - 1.949M in 5.038582s
NA * NA (10) 648.042k (± 2.9%) i/s - 3.274M in 5.056538s
Comparison:
V * F (10): 732077.2 i/s
NA * NA (10): 648042.5 i/s - 1.13x slower
V.dot(V) (10): 511990.4 i/s - 1.43x slower
NA * F (10): 387423.4 i/s - 1.89x slower
Warming up --------------------------------------
V * F (11) 59.705k i/100ms
V.dot(V) (11) 37.636k i/100ms
NA * F (11) 34.728k i/100ms
NA * NA (11) 55.783k i/100ms
Calculating -------------------------------------
V * F (11) 692.688k (± 2.9%) i/s - 3.463M in 5.003505s
V.dot(V) (11) 473.526k (± 3.9%) i/s - 2.371M in 5.014956s
NA * F (11) 398.329k (± 3.6%) i/s - 2.014M in 5.063385s
NA * NA (11) 650.631k (± 3.1%) i/s - 3.291M in 5.063225s
Comparison:
V * F (11): 692688.4 i/s
NA * NA (11): 650631.5 i/s - 1.06x slower
V.dot(V) (11): 473525.9 i/s - 1.46x slower
NA * F (11): 398329.0 i/s - 1.74x slower
Warming up --------------------------------------
V * F (12) 56.570k i/100ms
V.dot(V) (12) 40.026k i/100ms
NA * F (12) 34.648k i/100ms
NA * NA (12) 54.778k i/100ms
Calculating -------------------------------------
V * F (12) 659.005k (± 1.6%) i/s - 3.338M in 5.066012s
V.dot(V) (12) 441.132k (± 1.7%) i/s - 2.241M in 5.082688s
NA * F (12) 383.464k (± 2.1%) i/s - 1.940M in 5.062075s
NA * NA (12) 631.804k (± 1.8%) i/s - 3.177M in 5.030313s
Comparison:
V * F (12): 659004.6 i/s
NA * NA (12): 631803.7 i/s - 1.04x slower
V.dot(V) (12): 441131.5 i/s - 1.49x slower
NA * F (12): 383463.8 i/s - 1.72x slower
Warming up --------------------------------------
V * F (13) 54.197k i/100ms
V.dot(V) (13) 37.258k i/100ms
NA * F (13) 33.636k i/100ms
NA * NA (13) 53.135k i/100ms
Calculating -------------------------------------
V * F (13) 612.993k (± 1.5%) i/s - 3.089M in 5.040658s
V.dot(V) (13) 399.135k (± 2.2%) i/s - 2.012M in 5.043300s
NA * F (13) 349.297k (± 3.0%) i/s - 1.749M in 5.012178s
NA * NA (13) 550.251k (± 3.7%) i/s - 2.763M in 5.028858s
Comparison:
V * F (13): 612992.6 i/s
NA * NA (13): 550251.3 i/s - 1.11x slower
V.dot(V) (13): 399135.1 i/s - 1.54x slower
NA * F (13): 349296.6 i/s - 1.75x slower
Warming up --------------------------------------
V * F (14) 45.999k i/100ms
V.dot(V) (14) 31.357k i/100ms
NA * F (14) 30.870k i/100ms
NA * NA (14) 48.989k i/100ms
Calculating -------------------------------------
V * F (14) 569.387k (± 1.9%) i/s - 2.852M in 5.010588s
V.dot(V) (14) 376.633k (± 1.3%) i/s - 1.913M in 5.079523s
NA * F (14) 355.693k (± 3.2%) i/s - 1.790M in 5.038828s
NA * NA (14) 554.239k (± 3.6%) i/s - 2.792M in 5.044985s
Comparison:
V * F (14): 569387.1 i/s
NA * NA (14): 554239.3 i/s - same-ish: difference falls within error
V.dot(V) (14): 376632.5 i/s - 1.51x slower
NA * F (14): 355692.8 i/s - 1.60x slower
Warming up --------------------------------------
V * F (15) 43.857k i/100ms
V.dot(V) (15) 29.827k i/100ms
NA * F (15) 30.646k i/100ms
NA * NA (15) 48.628k i/100ms
Calculating -------------------------------------
V * F (15) 552.214k (± 1.7%) i/s - 2.763M in 5.004846s
V.dot(V) (15) 352.292k (± 1.1%) i/s - 1.790M in 5.080537s
NA * F (15) 365.581k (± 2.0%) i/s - 1.839M in 5.031718s
NA * NA (15) 617.591k (± 1.8%) i/s - 3.112M in 5.040859s
Comparison:
NA * NA (15): 617591.1 i/s
V * F (15): 552214.4 i/s - 1.12x slower
NA * F (15): 365581.4 i/s - 1.69x slower
V.dot(V) (15): 352292.2 i/s - 1.75x slower
Warming up --------------------------------------
V * F (16) 47.856k i/100ms
V.dot(V) (16) 30.453k i/100ms
NA * F (16) 31.872k i/100ms
NA * NA (16) 50.300k i/100ms
Calculating -------------------------------------
V * F (16) 536.495k (± 1.3%) i/s - 2.728M in 5.085379s
V.dot(V) (16) 331.147k (± 0.6%) i/s - 1.675M in 5.058093s
NA * F (16) 359.945k (± 2.4%) i/s - 1.817M in 5.050072s
NA * NA (16) 612.965k (± 2.1%) i/s - 3.068M in 5.007902s
Comparison:
NA * NA (16): 612964.9 i/s
V * F (16): 536495.3 i/s - 1.14x slower
NA * F (16): 359945.1 i/s - 1.70x slower
V.dot(V) (16): 331146.6 i/s - 1.85x slower
Warming up --------------------------------------
V * F (17) 46.963k i/100ms
V.dot(V) (17) 29.886k i/100ms
NA * F (17) 33.092k i/100ms
NA * NA (17) 51.546k i/100ms
Calculating -------------------------------------
V * F (17) 524.211k (± 1.6%) i/s - 2.630M in 5.018157s
V.dot(V) (17) 323.700k (± 1.0%) i/s - 1.644M in 5.078461s
NA * F (17) 363.844k (± 2.6%) i/s - 1.820M in 5.005405s
NA * NA (17) 595.007k (± 2.5%) i/s - 2.990M in 5.027704s
Comparison:
NA * NA (17): 595007.2 i/s
V * F (17): 524211.1 i/s - 1.14x slower
NA * F (17): 363843.9 i/s - 1.64x slower
V.dot(V) (17): 323700.2 i/s - 1.84x slower
Warming up --------------------------------------
V * F (18) 43.624k i/100ms
V.dot(V) (18) 27.852k i/100ms
NA * F (18) 31.987k i/100ms
NA * NA (18) 49.448k i/100ms
Calculating -------------------------------------
V * F (18) 503.549k (± 1.3%) i/s - 2.530M in 5.025571s
V.dot(V) (18) 300.311k (± 0.5%) i/s - 1.504M in 5.008272s
NA * F (18) 358.613k (± 2.5%) i/s - 1.823M in 5.087352s
NA * NA (18) 610.894k (± 2.1%) i/s - 3.066M in 5.020786s
Comparison:
NA * NA (18): 610894.0 i/s
V * F (18): 503548.6 i/s - 1.21x slower
NA * F (18): 358612.9 i/s - 1.70x slower
V.dot(V) (18): 300311.1 i/s - 2.03x slower
Warming up --------------------------------------
V * F (19) 43.767k i/100ms
V.dot(V) (19) 27.405k i/100ms
NA * F (19) 32.298k i/100ms
NA * NA (19) 49.379k i/100ms
Calculating -------------------------------------
V * F (19) 484.550k (± 1.5%) i/s - 2.451M in 5.059374s
V.dot(V) (19) 285.517k (± 0.8%) i/s - 1.452M in 5.087454s
NA * F (19) 355.977k (± 2.2%) i/s - 1.809M in 5.083216s
NA * NA (19) 595.406k (± 2.2%) i/s - 3.012M in 5.061396s
Comparison:
NA * NA (19): 595405.5 i/s
V * F (19): 484549.7 i/s - 1.23x slower
NA * F (19): 355976.8 i/s - 1.67x slower
V.dot(V) (19): 285517.1 i/s - 2.09x slower
Warming up --------------------------------------
V * F (20) 42.035k i/100ms
V.dot(V) (20) 26.368k i/100ms
NA * F (20) 33.078k i/100ms
NA * NA (20) 53.152k i/100ms
Calculating -------------------------------------
V * F (20) 505.201k (± 1.8%) i/s - 2.564M in 5.077204s
V.dot(V) (20) 289.630k (± 0.8%) i/s - 1.450M in 5.007575s
NA * F (20) 355.492k (± 3.4%) i/s - 1.786M in 5.030544s
NA * NA (20) 578.368k (± 2.6%) i/s - 2.923M in 5.057925s
Comparison:
NA * NA (20): 578368.5 i/s
V * F (20): 505201.3 i/s - 1.14x slower
NA * F (20): 355492.1 i/s - 1.63x slower
V.dot(V) (20): 289630.1 i/s - 2.00x slower
#! /usr/bin/env ruby
# -*- ruby -*-
require 'benchmark/ips'
require 'matrix'
require 'numo/narray'
F = rand
(1..20).each do |n|
a = n.times.map { rand }
Benchmark.ips do |b|
v = ::Vector[*a]
na = ::Numo::Float64[*a]
b.report("V * F (#{n})") { v * F }
b.report("V.dot(V) (#{n})") { v.dot(v) }
b.report("NA * F (#{n})") { na * F }
b.report("NA * NA (#{n})") { na * na }
b.compare!
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment