Blender Git Loki

Git Commits -> Revision cfdd273

Revision cfdd273 by Bastien Montagne (master)
March 19, 2015, 16:37 (GMT)
GHash - code reorganization, performance enhancements, add a few missing utils to API.

This patch is the root of the GHash rework, all other diff will be based on it:

Reduce average load from 3.0 to 0.75
----------------------------------

This is the big performance booster part, e.g. makes tracing a dyntopo stroke between 25% and 30% faster.

Not much to say about it, aside that it obviously increase memory footprint (about 25% - 30% too).

Add optional shrinking
----------------------------------

I.e. ghashes/gsets can now shrink their buckets array when you remove enough entries. This remains optional and OFF by default.

Add code to use masking instead of modulo
----------------------------------

Buckets indices are obtained from hashes by �??reducing�? the hash value into the valid bucket range. This can be done either by bit-masking, or using modulo operation.
The former is quicker, but requires real hashes, while the later is slower (average 10% impact on ghash operations) but can also be used as a 'fake' hashing on raw values, like e.g. indices.

In Blender currently not all ghash usages actually hash their keys, so we stick to modulo for now (masking is ifdef�??ed out), we may however investigate the benefits of switching to masking with systematic very basic hashing later�?�

Add various missing API helpers
----------------------------------

I.e. a way to deep-copy a ghash/gset, and a way to (re-)reserve entries (i.e. manually grow or shrink the ghash after its creation).

Various code refactoring
----------------------------------

* Get rid of the 'hack' regarding ghash size when used as gset (it�??s simpler and safer to have two structs defined here, and cast pointers as needed).
* Various re-shuffle and factorization in low-level internal code.
* Some work on hashing helpers, introducing some murmur2a-based hashing too.

Thanks a bunch to Campbell for the extensive review work. :)

Reviewers: sergey, campbellbarton

Subscribers: psy-fi, lukastoenne

Projects: #bf_blender

Maniphest Tasks: T43766

Differential Revision: https://developer.blender.org/D1178

Commit Details:

Full Hash: cfdd27381c6730dc0d8d4bb51c132b29337b8af5
Parent Commit: 881e05f
Lines Changed: +667, -210

5 Modified Paths:

/source/blender/blenlib/BLI_ghash.h (+46, -7) (Diff)
/source/blender/blenlib/BLI_hash_mm2a.h (+2, -0) (Diff)
/source/blender/blenlib/intern/BLI_ghash.c (+577, -200) (Diff)
/source/blender/blenlib/intern/hash_mm2a.c (+41, -3) (Diff)
/source/blender/makesdna/intern/CMakeLists.txt (+1, -0) (Diff)
Tehnyt: Miika HämäläinenViimeksi päivitetty: 07.11.2014 14:18MiikaH:n Sivut a.k.a. MiikaHweb | 2003-2021