Giter Site home page Giter Site logo

snoyberg / bytestring-builders-benchmark Goto Github PK

View Code? Open in Web Editor NEW

This project forked from haskell-perf/strict-bytestring-builders

0.0 3.0 0.0 40 KB

A benchmark comparing different ways of building a bytestring in Haskell

License: MIT License

Haskell 100.00%

bytestring-builders-benchmark's Introduction

Summary

This project exists purely for research purposes of determining the optimal way of building strict bytestrings. The ideas behind this project stem from a discussion on Reddit.

If you know any way of optimizing any particular benchmark or can suggest another benchmark subject, instead of complaining, PR without hesitation! This is intended to be a community project.

Current results

ByteString.TreeBuilder is the clear winner. With the standard and "blaze" builders being at least 4 times slower on all input sizes.

benchmarking Small Input/ByteString.TreeBuilder
time                 246.3 ns   (245.9 ns .. 246.8 ns)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 246.2 ns   (245.7 ns .. 246.8 ns)
std dev              1.820 ns   (1.295 ns .. 2.648 ns)

benchmarking Small Input/Main.BufferBuilderMonoid
time                 1.190 μs   (1.188 μs .. 1.193 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 1.194 μs   (1.193 μs .. 1.196 μs)
std dev              5.331 ns   (4.264 ns .. 6.613 ns)

benchmarking Small Input/Main.DListWithSize
time                 317.9 ns   (314.2 ns .. 324.3 ns)
                     0.997 R²   (0.993 R² .. 1.000 R²)
mean                 320.6 ns   (316.6 ns .. 329.9 ns)
std dev              19.11 ns   (11.58 ns .. 28.94 ns)
variance introduced by outliers: 76% (severely inflated)

benchmarking Small Input/Main.DList
time                 506.4 ns   (503.8 ns .. 509.5 ns)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 504.2 ns   (502.3 ns .. 506.5 ns)
std dev              6.717 ns   (5.523 ns .. 8.757 ns)
variance introduced by outliers: 13% (moderately inflated)

benchmarking Small Input/Main.Seq
time                 462.1 ns   (445.8 ns .. 479.5 ns)
                     0.993 R²   (0.989 R² .. 0.998 R²)
mean                 452.7 ns   (443.5 ns .. 464.1 ns)
std dev              32.35 ns   (19.47 ns .. 41.83 ns)
variance introduced by outliers: 81% (severely inflated)

benchmarking Small Input/Blaze.ByteString.Builder
time                 907.2 ns   (903.3 ns .. 913.3 ns)
                     0.998 R²   (0.997 R² .. 0.999 R²)
mean                 946.4 ns   (924.9 ns .. 974.1 ns)
std dev              82.87 ns   (57.21 ns .. 106.4 ns)
variance introduced by outliers: 86% (severely inflated)

benchmarking Small Input/Data.ByteString.Builder
time                 907.4 ns   (905.0 ns .. 910.6 ns)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 907.7 ns   (905.5 ns .. 911.1 ns)
std dev              9.069 ns   (6.812 ns .. 12.97 ns)

benchmarking Small Input/Data.ByteString
time                 283.9 ns   (282.7 ns .. 285.8 ns)
                     1.000 R²   (0.999 R² .. 1.000 R²)
mean                 284.2 ns   (283.3 ns .. 286.7 ns)
std dev              4.749 ns   (2.022 ns .. 9.003 ns)
variance introduced by outliers: 19% (moderately inflated)

benchmarking Medium Input/ByteString.TreeBuilder
time                 89.01 μs   (88.83 μs .. 89.19 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 89.02 μs   (88.88 μs .. 89.18 μs)
std dev              496.9 ns   (416.6 ns .. 628.3 ns)

benchmarking Medium Input/Main.BufferBuilderMonoid
time                 199.3 μs   (198.3 μs .. 200.5 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 199.0 μs   (198.2 μs .. 199.9 μs)
std dev              2.767 μs   (2.354 μs .. 3.574 μs)

benchmarking Medium Input/Main.DListWithSize
time                 213.3 μs   (211.1 μs .. 217.3 μs)
                     0.996 R²   (0.992 R² .. 0.999 R²)
mean                 216.4 μs   (213.5 μs .. 220.7 μs)
std dev              12.36 μs   (7.734 μs .. 16.59 μs)
variance introduced by outliers: 55% (severely inflated)

benchmarking Medium Input/Main.DList
time                 487.5 μs   (486.3 μs .. 488.7 μs)
                     1.000 R²   (1.000 R² .. 1.000 R²)
mean                 488.5 μs   (487.6 μs .. 489.6 μs)
std dev              3.251 μs   (2.642 μs .. 4.093 μs)

benchmarking Medium Input/Main.Seq
time                 708.3 μs   (701.5 μs .. 718.0 μs)
                     0.998 R²   (0.997 R² .. 1.000 R²)
mean                 716.3 μs   (708.8 μs .. 725.9 μs)
std dev              30.78 μs   (21.69 μs .. 38.88 μs)
variance introduced by outliers: 35% (moderately inflated)

benchmarking Medium Input/Blaze.ByteString.Builder
time                 362.0 μs   (359.1 μs .. 367.1 μs)
                     0.998 R²   (0.997 R² .. 1.000 R²)
mean                 363.5 μs   (361.1 μs .. 367.4 μs)
std dev              11.13 μs   (7.231 μs .. 16.41 μs)
variance introduced by outliers: 24% (moderately inflated)

benchmarking Medium Input/Data.ByteString.Builder
time                 369.7 μs   (362.5 μs .. 377.2 μs)
                     0.997 R²   (0.995 R² .. 0.999 R²)
mean                 375.1 μs   (369.9 μs .. 382.8 μs)
std dev              19.79 μs   (16.84 μs .. 22.34 μs)
variance introduced by outliers: 48% (moderately inflated)

benchmarking Medium Input/Data.ByteString
time                 2.164 ms   (2.154 ms .. 2.173 ms)
                     1.000 R²   (0.999 R² .. 1.000 R²)
mean                 2.164 ms   (2.155 ms .. 2.176 ms)
std dev              33.16 μs   (25.29 μs .. 45.23 μs)

benchmarking Large Input/ByteString.TreeBuilder
time                 21.04 ms   (20.84 ms .. 21.23 ms)
                     0.999 R²   (0.999 R² .. 1.000 R²)
mean                 21.25 ms   (21.08 ms .. 21.52 ms)
std dev              518.4 μs   (265.1 μs .. 897.1 μs)

benchmarking Large Input/Main.BufferBuilderMonoid
time                 44.05 ms   (43.23 ms .. 45.13 ms)
                     0.999 R²   (0.997 R² .. 1.000 R²)
mean                 44.26 ms   (43.97 ms .. 44.59 ms)
std dev              674.0 μs   (525.9 μs .. 942.3 μs)

benchmarking Large Input/Main.DListWithSize
time                 89.62 ms   (88.34 ms .. 91.35 ms)
                     0.999 R²   (0.998 R² .. 1.000 R²)
mean                 90.52 ms   (89.63 ms .. 91.28 ms)
std dev              1.350 ms   (990.7 μs .. 1.789 ms)

benchmarking Large Input/Main.DList
time                 110.2 ms   (107.2 ms .. 114.9 ms)
                     0.998 R²   (0.994 R² .. 1.000 R²)
mean                 109.7 ms   (108.1 ms .. 111.3 ms)
std dev              2.341 ms   (1.202 ms .. 3.324 ms)
variance introduced by outliers: 11% (moderately inflated)

benchmarking Large Input/Main.Seq
time                 178.1 ms   (164.7 ms .. 191.1 ms)
                     0.994 R²   (0.980 R² .. 1.000 R²)
mean                 175.9 ms   (170.3 ms .. 183.2 ms)
std dev              7.247 ms   (4.811 ms .. 9.299 ms)
variance introduced by outliers: 14% (moderately inflated)

benchmarking Large Input/Blaze.ByteString.Builder
time                 124.6 ms   (119.2 ms .. 130.7 ms)
                     0.997 R²   (0.992 R² .. 1.000 R²)
mean                 126.1 ms   (123.8 ms .. 128.0 ms)
std dev              2.915 ms   (2.060 ms .. 4.029 ms)
variance introduced by outliers: 11% (moderately inflated)

benchmarking Large Input/Data.ByteString.Builder
time                 122.0 ms   (105.6 ms .. 142.2 ms)
                     0.984 R²   (0.946 R² .. 0.999 R²)
mean                 128.1 ms   (123.6 ms .. 138.2 ms)
std dev              9.119 ms   (4.847 ms .. 13.69 ms)
variance introduced by outliers: 23% (moderately inflated)

benchmarking Large Input/Data.ByteString
time                 13.99 s    (13.28 s .. NaN s)
                     1.000 R²   (0.999 R² .. 1.000 R²)
mean                 14.06 s    (13.93 s .. 14.12 s)
std dev              117.7 ms   (0.0 s .. 124.7 ms)
variance introduced by outliers: 19% (moderately inflated)

bytestring-builders-benchmark's People

Contributors

nikita-volkov avatar snoyberg avatar ekmett avatar

Watchers

 avatar James Cloos avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.