On 8 October 2016 at 11:58, Marek Olšák <mar...@gmail.com> wrote: > From: Marek Olšák <marek.ol...@amd.com> > > time GALLIUM_NOOP=1 ./run shaders/private/alien_isolation/ >/dev/null > > Before (2 takes): > > real 0m8.734s 0m8.773s > user 0m34.232s 0m34.348s > sys 0m0.084s 0m0.056s > > After (2 takes): > > real 0m8.448s 0m8.463s > user 0m33.104s 0m33.160s > sys 0m0.088s 0m0.076s > > Average change in "real" time spent: -3.4% > > calloc should only do 2 things compared to malloc: > - check for overflow of "n * size" > - call memset > > I'm not sure if that explains the difference. The difference is quite interesting indeed.
One small suggestion below. > --- > src/util/ralloc.c | 17 ++++++++++++++++- > 1 file changed, 16 insertions(+), 1 deletion(-) > > diff --git a/src/util/ralloc.c b/src/util/ralloc.c > index 9526011..23c89e5 100644 > --- a/src/util/ralloc.c > +++ b/src/util/ralloc.c > @@ -91,20 +91,23 @@ get_header(const void *ptr) > static void > add_child(ralloc_header *parent, ralloc_header *info) > { > if (parent != NULL) { > info->parent = parent; > info->next = parent->child; > parent->child = info; > > if (info->next != NULL) > info->next->prev = info; > + } else { > + info->parent = NULL; > + info->next = NULL; add_child is used on two occasions - rzalloc_size after memset* and ralloc_steal after unlink_block. The latter of which already clears the parent and siblings pointers. Thus we can move the above two lines... > } > } > > void * > ralloc_context(const void *ctx) > { > return ralloc_size(ctx, 0); > } > > void * > @@ -115,27 +118,39 @@ ralloc_size(const void *ctx, size_t size) > * > * TODO: Make ralloc_size not zero fill memory, and cleanup any code that > * should instead be using rzalloc. > */ > return rzalloc_size(ctx, size); > } > > void * > rzalloc_size(const void *ctx, size_t size) > { > - void *block = calloc(1, size + sizeof(ralloc_header)); > + void *block = malloc(size + sizeof(ralloc_header)); > ralloc_header *info; > ralloc_header *parent; > > if (unlikely(block == NULL)) > return NULL; > + > info = (ralloc_header *) block; > + /* measurements have shown that calloc is slower, so clear things > + * manually > + */ > + info->child = NULL; > + info->prev = NULL; > + info->destructor = NULL; > + /* add_child() clears other members */ > + ... here and drop the comment. Emil _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev