1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 03:40:34 +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:
Andy Wingo 2017-02-17 11:01:19 +01:00
parent 60035b66c7
commit 2864f11d34

View file

@ -39,7 +39,7 @@ struct scm_cache_entry
scm_t_bits value;
};
#define SCM_CACHE_SIZE 8
#define SCM_CACHE_SIZE 16
struct scm_cache
{
@ -81,6 +81,7 @@ scm_cache_lookup (struct scm_cache *cache, SCM k)
scm_t_bits k_bits = SCM_UNPACK (k);
struct scm_cache_entry *entry = cache->entries;
/* 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[2].key <= k_bits) entry += 2;
if (entry[1].key <= k_bits) entry += 1;