mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-08 21:20:19 +02:00
Update documentation
This commit is contained in:
parent
e40b224faf
commit
ea15d142fc
2 changed files with 9 additions and 7 deletions
|
@ -24,11 +24,12 @@ entries to the worker's [shared worklist](../src/shared-worklist.h).
|
||||||
When a worker runs out of local work, it will first try to remove work
|
When a worker runs out of local work, it will first try to remove work
|
||||||
from its own shared worklist, then will try to steal from other workers.
|
from its own shared worklist, then will try to steal from other workers.
|
||||||
|
|
||||||
Because threads compete to evacuate objects, `pcc` uses [atomic
|
If only one tracing thread is enabled (`parallelism=1`), `pcc` uses
|
||||||
compare-and-swap instead of simple forwarding pointer
|
non-atomic forwarding, but if multiple threads compete to evacuate
|
||||||
updates](./manual.md#forwarding-objects), which imposes around a ~30%
|
objects, `pcc` uses [atomic compare-and-swap instead of simple
|
||||||
performance penalty. `pcc` generally starts to outperform `scc` when it
|
forwarding pointer updates](./manual.md#forwarding-objects). This
|
||||||
can trace with 2 threads, and gets better with each additional thread.
|
imposes around a ~30% performance penalty but having multiple tracing
|
||||||
|
threads is generally worth it, unless the object graph is itself serial.
|
||||||
|
|
||||||
As with `scc`, the memory used for the external worklist is dynamically
|
As with `scc`, the memory used for the external worklist is dynamically
|
||||||
allocated from the OS and is not currently counted as contributing to
|
allocated from the OS and is not currently counted as contributing to
|
||||||
|
|
|
@ -6,8 +6,7 @@ Whippet has five collectors currently:
|
||||||
- [Serial copying collector (`scc`)](./collector-scc.md): Like `semi`,
|
- [Serial copying collector (`scc`)](./collector-scc.md): Like `semi`,
|
||||||
but with support for multiple mutator threads.
|
but with support for multiple mutator threads.
|
||||||
- [Parallel copying collector (`pcc`)](./collector-pcc.md): Like `scc`,
|
- [Parallel copying collector (`pcc`)](./collector-pcc.md): Like `scc`,
|
||||||
but with support for multiple tracing threads. Faster than `scc` if
|
but with support for multiple tracing threads.
|
||||||
multiple cores are available at collection-time.
|
|
||||||
- [Whippet collector (`whippet`)](./collector-whippet.md):
|
- [Whippet collector (`whippet`)](./collector-whippet.md):
|
||||||
Immix-inspired collector. Optionally parallel, conservative (stack
|
Immix-inspired collector. Optionally parallel, conservative (stack
|
||||||
and/or heap), and/or generational.
|
and/or heap), and/or generational.
|
||||||
|
@ -27,6 +26,8 @@ out mutator/embedder bugs. Then if memory is tight, switch to
|
||||||
If you are aiming for maximum simplicity and minimal code size (ten
|
If you are aiming for maximum simplicity and minimal code size (ten
|
||||||
kilobytes or so), use `semi`.
|
kilobytes or so), use `semi`.
|
||||||
|
|
||||||
|
Only use `scc` if you are investigating GC internals.
|
||||||
|
|
||||||
If you are writing a new project, you have a choice as to whether to pay
|
If you are writing a new project, you have a choice as to whether to pay
|
||||||
the development cost of precise roots or not. If you choose to not have
|
the development cost of precise roots or not. If you choose to not have
|
||||||
precise roots, then go for `stack-conservative-parallel-whippet`
|
precise roots, then go for `stack-conservative-parallel-whippet`
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue