got it down to two: https://play.golang.org/p/jmTqhLGaLY_T
On Fri, Feb 21, 2020 at 11:24 AM Bruno Albuquerque <b...@gmail.com> wrote: > > This is interesting. If I simplify the loop to something like this: > > nrgbaData := make([]byte, len(rgbData)+(len(rgbData)/3)) > > _ = nrgbaData[len(rgbData)] > > for i := 0; i < len(rgbData); i++ { > nrgbaData[i] = rgbData[i] > } > > then the bounds check at the line inside the for loop is removed. > > But if I change it to this: > > nrgbaData := make([]byte, len(rgbData)+(len(rgbData)/3)) > > _ = nrgbaData[len(rgbData)] > > for i := 0; i < len(rgbData); i += 3 { > nrgbaData[i] = rgbData[i] > } > > then the bounds check is not eliminated. > > Considering it is still guaranteed that "i" inside the loop will never be > equal to or greater than len(rgbData), I do not understand why the bounds > check is now required. > > Any ideas? > > > On Fri, Feb 21, 2020 at 10:07 AM Bruno Albuquerque <b...@gmail.com> wrote: >> >> Nope. Bound checks are still there. I am puzzled by this one. >> >> >> On Fri, Feb 21, 2020 at 9:34 AM Sebastien Binet <bi...@cern.ch> wrote: >>> >>> >>> >>> On Fri, Feb 21, 2020 at 5:36 PM Bruno Albuquerque <b...@gmail.com> wrote: >>>> >>>> I wrote some simple code to convert a RGB24 image represented as a []byte >>>> to a NRGBA image (also as a []byte), like so: >>>> >>>> https://play.golang.org/p/Y7ICg7t4_nd >>>> >>>> Unfortunately, the performance is lacking here and I am trying to improve >>>> it. The first low hanging fruit seems to be taking advantage of BCE: >>>> >>>> $go test -bench . >>>> goos: linux >>>> goarch: amd64 >>>> BenchmarkNRGBA-8 484 2636344 ns/op >>>> >>>> $ go test -gcflags="-B" -bench . >>>> goos: linux >>>> goarch: amd64 >>>> BenchmarkNRGBA-8 855 1654882 ns/op >>>> >>>> Unfortunately, I could not find an incantation that would remove the bound >>>> checks. My naive attempt was to just do >>>> >>>> _ = nrgbaData[len(nrgbaData)-1] >>>> >>>> at around line 7 in the program above but this did not help and added one >>>> extra bound check. >>>> >>>> Funny enough, if I do >>>> >>>> _ = nrgbaData[len(nrgbaData)] >>>> >>>> all the bound checks seem to be eliminated but, obviously, the program >>>> panics at this line. >>> >>> what about: >>> _ = nrgbaData[:len(nrgbaData)] >>> >>> does this also remove the bound checks? >>> >>> -s > > -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > To view this discussion on the web visit > https://groups.google.com/d/msgid/golang-nuts/CAEd86TwC19nJDwAe-kR6Ze8zPf4zjPQp0dMksPAwMwsXCGWRiw%40mail.gmail.com. -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/golang-nuts/CAK4xykXszWjjPf25Un8ze7g2F_epnSFB0BaJmWGhJ%2BpLE_Mm0Q%40mail.gmail.com.