[Mesa-dev] [PATCH 1/2] glsl: Don't rehash the values when copying to new table
Tapani Pälli
tapani.palli at intel.com
Fri Dec 30 06:08:49 UTC 2016
On 12/30/2016 05:53 AM, Vladislav Egorov wrote:
> I've looked into it recently (I'm working on series of many various
> trivial optimizations)
>
> and it's faster to just memcpy() it. Just throwing out superfluous
> hashing still keeps slow
>
> hash-table insertion around -- with resizing, rehashing, memory
> allocation/deallocation, internal
>
> hash-function through integer division, collisions and so on. It
> produces a nice speed improvement
>
> actually. It's possible to explore approaches without any copying at
> LOOP/IF entering at all,
>
> but I am not sure it will improve performance.
When profiling copy_propagation(_elements) pass you can use Martina's
testcase from this bug:
https://bugs.freedesktop.org/show_bug.cgi?id=94477
We still have a very long compile time for the WebGL case mentioned in
the bug so would be cool to have some optimizations there.
>
> 30.12.2016 02:49, Thomas Helland пишет:
>> Really, we should have some kind of function for copying the whole table,
>> but this will work for now.
>> ---
>> src/compiler/glsl/opt_copy_propagation.cpp | 6 ++++--
>> 1 file changed, 4 insertions(+), 2 deletions(-)
>>
>> diff --git a/src/compiler/glsl/opt_copy_propagation.cpp
>> b/src/compiler/glsl/opt_copy_propagation.cpp
>> index 247c498..e9f82e0 100644
>> --- a/src/compiler/glsl/opt_copy_propagation.cpp
>> +++ b/src/compiler/glsl/opt_copy_propagation.cpp
>> @@ -210,7 +210,8 @@
>> ir_copy_propagation_visitor::handle_if_block(exec_list *instructions)
>> /* Populate the initial acp with a copy of the original */
>> struct hash_entry *entry;
>> hash_table_foreach(orig_acp, entry) {
>> - _mesa_hash_table_insert(acp, entry->key, entry->data);
>> + _mesa_hash_table_insert_pre_hashed(acp, entry->hash,
>> + entry->key, entry->data);
>> }
>> visit_list_elements(this, instructions);
>> @@ -259,7 +260,8 @@ ir_copy_propagation_visitor::handle_loop(ir_loop
>> *ir, bool keep_acp)
>> if (keep_acp) {
>> struct hash_entry *entry;
>> hash_table_foreach(orig_acp, entry) {
>> - _mesa_hash_table_insert(acp, entry->key, entry->data);
>> + _mesa_hash_table_insert_pre_hashed(acp, entry->hash,
>> + entry->key, entry->data);
>> }
>> }
>>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list