diff options
author | rander <rander.wang@intel.com> | 2017-06-16 09:50:27 +0800 |
---|---|---|
committer | Yang Rong <rong.r.yang@intel.com> | 2017-06-23 16:05:54 +0800 |
commit | f0c3b352c3da283aaf4199136894b1da352832f7 (patch) | |
tree | 743b542f1f258c927e2da81f62e4e04867a73f47 /Android.mk | |
parent | 8d3e93fa9286b0000225c6071eca21f60a396dad (diff) |
backend: refine load/store merging algorithm
Now it works for sequence: load(0), load(1), load(2)
but it cant work for load(2), load(0), load(1). because
it compared the last merged load and the new one not all
the loads
for sequence: load(0), load(1), load(2). the load(0) is the
start, can find that load(1) is successor without space, so
put it to a merge fifo. then the start is moving to the top
of fifo load(1), and compared with load(2). Also load(2) can be merged
for load(2), load(0), load(1). load(2) cant be merged with
load(0) for a space between them. So skip load(0) and mov to next
load(1).And this load(1) can be merged. But it never go back merge
load(0)
Now change the algorithm.
(1) find all loads maybe merged arround the start by the distance to
the start. the distance is depended on data type, for 32bit data, the
distance is 4. Put them in a list
(2) sort the list by the distance from the start.
(3) search the continuous sequence including the start to merge
V2: (1)refine the sort and compare algoritm. First find all the IO
in small offset compared to start. Then call std:sort
(2)check the number of candidate IO to be favorable to performance
for most cases there is no chance to merge IO
Signed-off-by: rander.wang <rander.wang@intel.com>
Reviewed-by: Ruiling Song <ruiling.song@intel.com>
Diffstat (limited to 'Android.mk')
0 files changed, 0 insertions, 0 deletions