mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-15 16:20:17 +02:00
Bump fluid cache size to 16 entries
* libguile/cache-internal.h (SCM_CACHE_SIZE): Bump to 16. It seems that a thread accesses more than 8 fluids by default (%stacks, the exception handler, current ports, current-fiber, port read/write waiters) which leads every fiber to cause cache eviction and copying the value table, which is a bottleneck. Instead just bump this cache size. (scm_cache_lookup): Update unrolled search.
This commit is contained in:
parent
60035b66c7
commit
2864f11d34
1 changed files with 2 additions and 1 deletions
|
@ -39,7 +39,7 @@ struct scm_cache_entry
|
||||||
scm_t_bits value;
|
scm_t_bits value;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define SCM_CACHE_SIZE 8
|
#define SCM_CACHE_SIZE 16
|
||||||
|
|
||||||
struct scm_cache
|
struct scm_cache
|
||||||
{
|
{
|
||||||
|
@ -81,6 +81,7 @@ scm_cache_lookup (struct scm_cache *cache, SCM k)
|
||||||
scm_t_bits k_bits = SCM_UNPACK (k);
|
scm_t_bits k_bits = SCM_UNPACK (k);
|
||||||
struct scm_cache_entry *entry = cache->entries;
|
struct scm_cache_entry *entry = cache->entries;
|
||||||
/* Unrolled binary search, compiled to branchless cmp + cmov chain. */
|
/* Unrolled binary search, compiled to branchless cmp + cmov chain. */
|
||||||
|
if (entry[8].key <= k_bits) entry += 8;
|
||||||
if (entry[4].key <= k_bits) entry += 4;
|
if (entry[4].key <= k_bits) entry += 4;
|
||||||
if (entry[2].key <= k_bits) entry += 2;
|
if (entry[2].key <= k_bits) entry += 2;
|
||||||
if (entry[1].key <= k_bits) entry += 1;
|
if (entry[1].key <= k_bits) entry += 1;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue