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:
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;
|
||||
};
|
||||
|
||||
#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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue