Created
July 20, 2018 18:46
-
-
Save colstrom/77d4982161ba666d06efcd859684d6d4 to your computer and use it in GitHub Desktop.
Ruby Vector Benchmarks (Component Scaling - matrix vs numo/narray)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /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