• isharipo's avatar
    math/big: speedup nat.setBytes for bigger slices · d2a5263a
    isharipo authored
    Set up to _S (number of bytes in Uint) bytes at time
    by using BigEndian.Uint32 and BigEndian.Uint64.
    
    The performance improves for slices bigger than _S bytes.
    This is the case for 128/256bit arith that initializes
    it's objects from bytes.
    
    name               old time/op  new time/op  delta
    NatSetBytes/8-4    29.8ns ± 1%  11.4ns ± 0%  -61.63%  (p=0.000 n=9+8)
    NatSetBytes/24-4    109ns ± 1%    56ns ± 0%  -48.75%  (p=0.000 n=9+8)
    NatSetBytes/128-4   420ns ± 2%   110ns ± 1%  -73.83%  (p=0.000 n=10+10)
    NatSetBytes/7-4    26.2ns ± 1%  21.3ns ± 2%  -18.63%  (p=0.000 n=8+9)
    NatSetBytes/23-4    106ns ± 1%    67ns ± 1%  -36.93%  (p=0.000 n=9+10)
    NatSetBytes/127-4   410ns ± 2%   121ns ± 0%  -70.46%  (p=0.000 n=9+8)
    
    Found this optimization opportunity by looking at ethereum_corevm
    community benchmark cpuprofile.
    
    name        old time/op  new time/op  delta
    OpDiv256-4   715ns ± 1%   596ns ± 1%  -16.57%  (p=0.008 n=5+5)
    OpDiv128-4   373ns ± 1%   314ns ± 1%  -15.83%  (p=0.008 n=5+5)
    OpDiv64-4    301ns ± 0%   285ns ± 1%   -5.12%  (p=0.008 n=5+5)
    
    Change-Id: I8e5a680ae6284c8233d8d7431d51253a8a740b57
    Reviewed-on: https://go-review.googlesource.com/98775
    Run-TryBot: Iskander Sharipov <iskander.sharipov@intel.com>
    Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    d2a5263a
inl_test.go 5.31 KB