14.01.2017 02:32, Connor Abbott пишет:
On Fri, Jan 13, 2017 at 1:55 PM, Thomas Helland
<thomashellan...@gmail.com> wrote:
2017-01-13 18:41 GMT+01:00 Vladislav Egorov <vegorov...@gmail.com>:
13.01.2017 15:31, Tapani Pälli пишет:
On 01/12/2017 09:23 PM, Thomas Helland wrote:
Walking the whole hash table, inserting entries by hashing them first
is just a really really bad idea. We can simply memcpy the whole thing.
Maybe it is just 'really' not 'really really' since I don't spot any
difference in time running the torture test in bug #94477 (oscillates close
to 120s with both with and without these patches), I would expect at least
some difference as it is utilizing this path a lot. Did you measure
performance difference?
It wouldn't help the torture case from the bug, because that shader doesn't
have LOOP and IF blocks, so more efficient copying the ACP for LOOP/IF
blocks would not be even touched.
Quick benchmark of Tom's patches on shader-db.
Default shader-db, ./run -1, 10 runs:
BEFORE AFTER
softpipe 3.20s 3.15s
radeonsi 5.17s 5.12s
i965/Haswell 7.33s 7.19s
On my full shader-db (50K+ shaders from games):
BEFORE AFTER
softpipe (5 runs) 156.6s 153.9s
i965 625s 613s
So it brings 1-2% speed across the board.
What he said. It only helps when there are if's or loops.
The other patch I wrote based on Connor's suggestion makes a big impact.
But as he found out, and I confirmed, yesterday, the approach doesn't work.
So it is back to the drawing board on that one. And I thought I was so close :-/
Did you try deep copying the hash table (making new copies of the
acp_entry's and fixing up their pointers)? It won't be as fast, and
you can't do this optimization, but it might still be faster.
I don't see a reason to copy anything at all. From what I see copying
the ACP is done to remove new COPY entries created inside of a block
when leaving this block, while kills propagate to parent ACPs (if you
are killed in the Matrix, you are killed in the real life, but your
gains in the Matrix mean nothing in the real life). From what I see just
single shared ACP table can be used. New COPY entries can be logged and
then just undone rewinding the log when exiting the block. And kills can
be done on the common ACP table directly. I've experimented with this
approach on glsl_to_tgsi_visitor::copy_propagate() and it worked great.
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev