[Mesa-dev] [PATCH] gallium/u_threaded: replace pipe_resource_reference with atomic_inc

Michel Dänzer michel at daenzer.net
Wed Jun 14 03:56:48 UTC 2017


On 14/06/17 07:36 AM, Marek Olšák wrote:
> On Tue, Jun 13, 2017 at 5:18 AM, Michel Dänzer <michel at daenzer.net> wrote:
>> On 13/06/17 01:31 AM, Marek Olšák wrote:
>>> From: Marek Olšák <marek.olsak at amd.com>
>>>
>>> ---
>>>  src/gallium/auxiliary/util/u_threaded_context.c | 9 +++++++--
>>>  1 file changed, 7 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/src/gallium/auxiliary/util/u_threaded_context.c b/src/gallium/auxiliary/util/u_threaded_context.c
>>> index 3038fc6..a97f016 100644
>>> --- a/src/gallium/auxiliary/util/u_threaded_context.c
>>> +++ b/src/gallium/auxiliary/util/u_threaded_context.c
>>> @@ -195,22 +195,27 @@ _tc_sync(struct threaded_context *tc, const char *info, const char *func)
>>>
>>>     tc_debug_check(tc);
>>>  }
>>>
>>>  #define tc_sync(tc) _tc_sync(tc, "", __func__)
>>>  #define tc_sync_msg(tc, info) _tc_sync(tc, info, __func__)
>>>
>>>  static void
>>>  tc_set_resource_reference(struct pipe_resource **dst, struct pipe_resource *src)
>>>  {
>>> -   *dst = NULL;
>>> -   pipe_resource_reference(dst, src);
>>> +   /* Unexpectedly, pipe_resource_reference is a bottleneck here, taking 3.7%
>>> +    * of CPU time in a state-heavy microbenchmark. The problem here is that
>>> +    * pipe_resource_reference isn't inlined here.
>>> +    */
>>> +   *dst = src;
>>> +   if (src)
>>> +      p_atomic_inc(&src->reference.count);
>>>  }
>>
>> That's pretty ugly.

That was probably too harsh, sorry.


>> Does the attached patch help as well? It allows
>> pipe_resource_reference to be inlined again, and has a pretty dramatic
>> effect on the size of the generated code for me:
>>
>>    text    data     bss     dec     hex filename
>>   42586     512       0   43098    a85a u_threaded_context.o
>>   35282     512       0   35794    8bd2 u_threaded_context.o.patched
>>
>>    text    data     bss     dec     hex filename
>> 10434626         271176 2062272 12768074         c2d34a /tmp/radeonsi_dri.so
>> 10001218         271176 2062272 12334666         bc364a /tmp/radeonsi_dri.so.patched
>>
>>
>> It might also help for other pipe_resource_reference callers.
> 
> Yes, the patch helps.

Thanks for testing, I hope the v3 patch still helps.


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer


More information about the mesa-dev mailing list