tdf#109097 - mdds accelerating random lookups

Michael Meeks michael.meeks at collabora.com
Mon Aug 28 11:26:42 UTC 2017


Hi there,

On 27/08/17 07:28, Noel Grandin wrote:
> One relatively simple thing that might be worth trying is simply moving
> the block_size member out of the block and into it's own std::vector.

	Multi-type-vector has:

    struct block
    {
        size_type m_size;
        element_block_type* mp_data; ...
    }

    typedef std::vector<block*> blocks_type;

	Which is interesting;

> That will make the search vastly more friendly to the cache and memory
> subsystem, and will probably give you between 4x and 10x speedup on
> large spreadsheets, depending on the CPU in use.

	Not entirely convinced here - -but- I expect that dropping one
indirection eg.

	typedef std::vector<block> blocks_type;

	rather than that extra indirection should significantly improve cache
locality for iteration.

	Kohei - does having that extra indirection help with the implementation
of iterators ? I assume that transferring the mp_data pointer as well as
the size is much the same as transferring a block* ?

	Also from a perf. perspective - if we have to shuffle, move chunks of
the pointer vector down, and we remove the pointer chasing / scattered
accesses there - I suspect we can get the re-numbering almost for free
at the same time for insert/delete.

	Regards,

		Michael.

-- 
michael.meeks at collabora.com <><, Pseudo Engineer, itinerant idiot


More information about the LibreOffice mailing list