-
Notifications
You must be signed in to change notification settings - Fork 18.3k
Closed
Labels
FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.The path to resolution is known, but the work has not been done.Performance
Milestone
Description
Please answer these questions before submitting your issue. Thanks!
What did you do?
From https://github.com/bamiaux/iobit
I copied binary.BigEndian.Uint64 implementation, renamed it load64, and replaced the single call in Reader.get64 with the load64 function
What did you expect to see?
I expected no performance changes
What did you see instead?
Severe performance loss, every function using get64 is now not inlined while the code is strictly the same
benchmark old ns/op new ns/op delta
BenchmarkReads/byte-4 475 1009 +112.42%
BenchmarkReads/le16-4 260 582 +123.85%
BenchmarkReads/be16-4 254 504 +98.43%
BenchmarkReads/le32-4 173 329 +90.17%
BenchmarkReads/be32-4 109 235 +115.60%
BenchmarkReads/le64-4 128 265 +107.03%
BenchmarkReads/be64-4 103 251 +143.69%
BenchmarkReads/u8_7bits-4 533 1158 +117.26%
BenchmarkReads/i8_7bits-4 531 1207 +127.31%
BenchmarkReads/u16_15bits-4 253 586 +131.62%
BenchmarkReads/i16_15bits-4 274 586 +113.87%
BenchmarkReads/u32_31bits-4 128 311 +142.97%
BenchmarkReads/i32_31bits-4 126 316 +150.79%
BenchmarkReads/u64_63bits-4 157 264 +68.15%
BenchmarkReads/i64_63bits-4 157 270 +71.97%
Using go tool compile -m show that go now consider the get64 function not inlinable anymore
But the function from encoding.binary is inlinable
System details
go version go1.8 windows/amd64
GOARCH="amd64"
GOBIN=""
GOEXE=".exe"
GOHOSTARCH="amd64"
GOHOSTOS="windows"
GOOS="windows"
GOPATH="c:\dev\gopath"
GORACE=""
GOROOT="C:\apps\go-1.8"
GOTOOLDIR="C:\apps\go-1.8\pkg\tool\windows_amd64"
GCCGO="gccgo"
CC="gcc"
GOGCCFLAGS="-m64 -mthreads -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"
PKG_CONFIG="pkg-config"
CGO_CFLAGS="-g -O2"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-g -O2"
CGO_FFLAGS="-g -O2"
CGO_LDFLAGS="-g -O2"
GOROOT/bin/go version: go version go1.8 windows/amd64
GOROOT/bin/go tool compile -V: compile version go1.8 X:framepointer
OneOfOne
Metadata
Metadata
Assignees
Labels
FrozenDueToAgeNeedsFixThe path to resolution is known, but the work has not been done.The path to resolution is known, but the work has not been done.Performance