Oh the shame!!!! Thank you for pointing that out :)
On Mon, 22 Jun 2020, 20:03 Martin Schnabel, <m...@mb0.org> wrote: > Let me quickly point out that your logic is inverted in the second code > snippet because you break on the condition. That is most likely the > reason for the difference. I guess the second example exits on the first > iteration. > > for pos := 0; true; pos++ { > if pos < suffixLen && pos < previousSuffixLen { > continue > } > break > } > > On 22.06.20 14:15, Yonatan Ben-Nes wrote: > > Hi, > > > > I'm encountering a weird issue which I fail to explain. It boils down to > > 2 almost identical functions which give wildly different benchmark > results. > > > > The difference between the functions is that at the slow func there is a > > for loop like this: > > for pos := 0; pos < suffixLen && pos < previousSuffixLen; pos++ { > > } > > > > While at the fast func the loop is like this: > > for pos := 0; true; pos++ { > > if pos < suffixLen && pos < previousSuffixLen { > > break > > } > > } > > * do note that the check at both versions is the same. > > > > Other than that the functions are identical but when I benchmark them I > get: > > $ go test -bench=Weird . > > goos: linux > > goarch: amd64 > > BenchmarkWeirdFast-4 280394 3602 ns/op > > BenchmarkWeirdSlow-4 1866 618953 ns/op > > > > It's extra weird since getting the condition check into the loop should > > be the slower form, or at least that what I intuitively thought. > > > > Also, the extra time cost is divided between the loop section and an > > append function call which run immediately at the start of the function > > and is not connected in any way to the for loop. > > And it's extra weird as the append cost also get smaller if instead of > > reading the test text from a file I just declare a string variable with > > the same text for the benchmark (mind you that I b.ResetTimer() after > > doing either of those options). > > > > I attached the files to this message as they will make everything more > > clear and I also added comments describing what happen at the right > points. > > > > I'm using Ubuntu 18.04 and go is version 1.14.2, and I also checked it > > on a GCP compute engine and got the same results. > > > > Any thoughts will be much appreciated as I'm totally confused here! :) > > > > -- > > 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 > > <mailto:golang-nuts+unsubscr...@googlegroups.com>. > > To view this discussion on the web visit > > > https://groups.google.com/d/msgid/golang-nuts/3cf40b00-96ec-42a6-8093-7f1c27bfd93fn%40googlegroups.com > > < > https://groups.google.com/d/msgid/golang-nuts/3cf40b00-96ec-42a6-8093-7f1c27bfd93fn%40googlegroups.com?utm_medium=email&utm_source=footer > >. > -- 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/CALtqQdvudO1oHKJCfRt_0YXv8nEp7jhZf671HijVqNFFOfcLbQ%40mail.gmail.com.