Curious, in the cases of where you were able to eliminate the bounds checks 
what was the performance difference in the overall process?

I would be very surprised, even in matrix type loops, that this makes an 
appreciable difference given modern cpu branch predictors. 

I think a better area of attack would be adding cpu vector operations support. 

> On Feb 21, 2020, at 1:20 PM, Bruno Albuquerque <b...@gmail.com> wrote:
> 
> 
> [now sending to the entire group]
> 
> And the plot thickens.
> 
> https://play.golang.org/p/P2JPI42YJa8
> 
> Basically, this is a very simple loop iterated with different step increments.
> 
> For step increments of 1, 2, 4, 5 and 10, there are no bound checks.
> 
> For step increments of 3, 6, 7, 8 and 9 there are bound checks.
> 
> So, in this simplified case, if the step divides the length evenly, then 
> there are no bound checks. If it does not, then bound checks are inserted.
> 
> This seems to be an unnecessary check as the actual relevant thing is to make 
> sure that the index is not equal to or greater than the slice length. Either 
> that or I am missing something
> 
>> On Fri, Feb 21, 2020 at 10: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/CAEd86Tw_1qLzK4HEw9rA06Wqnrtzs6CuzMT6VAK3Y40Bs7yPBw%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/A74C610B-37C5-4658-A9F0-73742D9B5B93%40ix.netcom.com.

Reply via email to