Skip to content

Conversation

@tkoolen
Copy link
Contributor

@tkoolen tkoolen commented Apr 24, 2019

Manually extract out a separate noinline _throw_not_readable function.

Addresses #28481 (comment).

Benchmark scenario:

using BenchmarkTools, Random
const N = 1000
@btime read(buf, Float64) evals = N setup = begin
    rng = MersenneTwister(1)
    writebuf = IOBuffer()
    map(1 : N) do _
        write(writebuf, rand(rng, Float64))
    end
    buf = IOBuffer(take!(writebuf))
end

Benchmark results (CPU: Intel(R) Core(TM) i7-6950X CPU @ 3.00GHz):

  • Before: 2.533 ns (0 allocations: 0 bytes)
  • After: 1.775 ns (0 allocations: 0 bytes)

Performance is now much closer to, but still not quite at the level of FastIOBuffers.FastReadBuffer (1.555 ns (0 allocations: 0 bytes)).

Manually extract out a separate noinline _throw_not_readable function.

Addresses
JuliaLang#28481 (comment).

Benchmark scenario:

```julia
using BenchmarkTools, Random
const N = 1000
@Btime read(buf, Float64) evals = N setup = begin
    rng = MersenneTwister(1)
    writebuf = IOBuffer()
    map(1 : N) do _
        write(writebuf, rand(rng, Float64))
    end
    buf = IOBuffer(take!(writebuf))
end
```

Benchmark results (CPU: Intel(R) Core(TM) i7-6950X CPU @ 3.00GHz):

* Before: 2.533 ns (0 allocations: 0 bytes)
* After: 1.775 ns (0 allocations: 0 bytes)

Performance is now much closer to, but still not quite at the level of
FastIOBuffers.FastReadBuffer (1.555 ns (0 allocations: 0 bytes)).
@tkoolen tkoolen mentioned this pull request Apr 24, 2019
@JeffBezanson JeffBezanson added io Involving the I/O subsystem: libuv, read, write, etc. performance Must go faster labels Apr 24, 2019
Copy link
Member

@vtjnash vtjnash left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It’s probably good to consolidate all these too

@fredrikekre fredrikekre merged commit 98b34fd into JuliaLang:master Apr 24, 2019
@tkoolen tkoolen deleted the tk/iobuffer-read-noinline branch April 24, 2019 13:08
KristofferC pushed a commit that referenced this pull request May 9, 2019
Manually extract out a separate noinline _throw_not_readable function.
Addresses #28481 (comment).

(cherry picked from commit 98b34fd)
@KristofferC KristofferC mentioned this pull request May 9, 2019
58 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

io Involving the I/O subsystem: libuv, read, write, etc. performance Must go faster

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants