Thanks Diego. I didn't know about the `--alloc_space` flag. Quite insightful!!! For anyone else potentially interested in the results, here they are:
Here are the results for the original FieldsFunc from the standard library: <https://lh3.googleusercontent.com/-8lZ_YQGFLAU/WeDUOIwVJOI/AAAAAAAAH7c/vkBpss1l_SAzxnOOgPvJWMaFnrYCNI56ACLcBGAs/s1600/fieldsfunc-old.png> And here are the results for my "simplified" version: <https://lh3.googleusercontent.com/-uNHo6xzAPkA/WeDUjacBDOI/AAAAAAAAH7g/4fe2YBGU9FogJj68AzryJOZW7-9eY7_nwCLcBGAs/s1600/fieldsfunc-new.png> For some reason, it seems that allocating a slice of slices takes up quite a bit of memory, while allocating the slice of structs takes up no memory? Quite interesting. But still can't really make sense of it. On Friday, 13 October 2017 13:11:25 UTC+2, Diego Medina wrote: > > >> This is exactly what I was trying to figure out how I would be able to >> do, and more specifically, if there's an easy way to find out. >> >> > > the pprof tool can read a memory or cpu profile created during your > benchmark, and then you can see details of your function, line by line, and > see the amount of allocations you are making, this should help you see the > differences between one implementation vs the other > > once you are inside the pprof tool, you can run > > list <funcname> > > and it will give you the details > > here is a post I recently wrote, in case you haven't used pprof with go > code before > > https://blog.fmpwizard.com/2017/09/29/memory-profiling-in-go/ > > Regards, > > Diego > > > >> On Tuesday, 10 October 2017 15:38:58 UTC+2, Ian Lance Taylor wrote: >>> >>> On Tue, Oct 10, 2017 at 12:50 AM, Gabriel Aszalos >>> <gabriel...@gmail.com> wrote: >>> > >>> > I would love to find out the answer to this. Even if you don't know >>> the >>> > answer but know how to investigate into it (using pprof or some >>> tracing >>> > flags), I would also appreciate being guided in the right direction >>> and I >>> > would love to embark on the journey of finding out myself. >>> > >>> > What I'm basically saying is that I'd be more interested to find out >>> the way >>> > in which I can tell why one is faster than the other, as opposed to >>> hearing >>> > just the final answer. Hope that makes sense. >>> >>> Start by writing a standalone x_test.go program that provides both >>> versions of the code and uses the benchmark framework to measure both. >>> When you can repeat the issue with -bench=., run it with -benchmem to >>> print the memory allocations. If they are different, that is probably >>> the cause. Then you have to figure out why they are different. If >>> they are not different, you'll need to look at the generated code. On >>> GNU/Linux, the system's perf tool can help you identify which parts of >>> the code take more time. For a larger program I would suggest pprof, >>> but pprof is better at pointing you at a specific function then it is >>> at identifying which part of the function is slow. >>> >>> Ian >>> >>> >>> > On Thursday, 5 October 2017 15:22:47 UTC+2, Marvin Stenger wrote: >>> >> >>> >> I can reproduce the numbers. The only think I'm seeing is that the >>> spans >>> >> array is allocated on the stack. Not sure though if this is the only >>> reason. >>> >> >>> >> Am Donnerstag, 5. Oktober 2017 13:13:56 UTC+2 schrieb Gabriel >>> Aszalos: >>> >>> >>> >>> I was playing around with the implementation of FieldsFunc from the >>> bytes >>> >>> package and I was wondering how it would affect the benchmarks to >>> disregard >>> >>> the extra slice that was used there to calculate offsets. It only >>> made sense >>> >>> that it would make things faster. >>> >>> >>> >>> To my amusement (although expected), it didn't. But I'm quite >>> curious why >>> >>> one is faster than the other and if this reveals any good practices >>> when >>> >>> working with similar algorithms. The benchmark and diff I am talking >>> about >>> >>> can be viewed here: >>> >>> >>> >>> >>> >>> >>> https://github.com/gbbr/go/commit/2f6e92bc746fa232f2f2aea66dae3fa0c04700a5?diff=split >>> >>> >>> >>> >>> Many thanks for looking! >>> >> >>> >> >>> > -- >>> > 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...@googlegroups.com. >>> > For more options, visit https://groups.google.com/d/optout. >>> >> -- 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. For more options, visit https://groups.google.com/d/optout.