projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Allow work units smaller than a block to improve load balancing
[ghc-hetmet.git]
/
rts
/
sm
/
GC.h
diff --git
a/rts/sm/GC.h
b/rts/sm/GC.h
index
01c6024
..
bc14840
100644
(file)
--- a/
rts/sm/GC.h
+++ b/
rts/sm/GC.h
@@
-73,12
+73,11
@@
------------------------------------------------------------------------- */
typedef struct step_workspace_ {
------------------------------------------------------------------------- */
typedef struct step_workspace_ {
- step * stp; // the step for this workspace
+ step * step; // the step for this workspace
struct gc_thread_ * gct; // the gc_thread that contains this workspace
// block that is currently being scanned
bdescr * scan_bd;
struct gc_thread_ * gct; // the gc_thread that contains this workspace
// block that is currently being scanned
bdescr * scan_bd;
- StgPtr scan; // the scan pointer
// where objects to be scavenged go
bdescr * todo_bd;
// where objects to be scavenged go
bdescr * todo_bd;
@@
-91,10
+90,14
@@
typedef struct step_workspace_ {
// where large objects to be scavenged go
bdescr * todo_large_objects;
// where large objects to be scavenged go
bdescr * todo_large_objects;
- // Objects that need not be, or have already been, scavenged.
+ // Objects that have already been, scavenged.
bdescr * scavd_list;
lnat n_scavd_blocks; // count of blocks in this list
bdescr * scavd_list;
lnat n_scavd_blocks; // count of blocks in this list
+ // Partially-full, scavenged, blocks
+ bdescr * part_list;
+ unsigned int n_part_blocks; // count of above
+
} step_workspace;
/* ----------------------------------------------------------------------------
} step_workspace;
/* ----------------------------------------------------------------------------
@@
-137,7
+140,7
@@
typedef struct gc_thread_ {
// variable).
rtsBool failed_to_evac; // failure to evacuate an object typically
// variable).
rtsBool failed_to_evac; // failure to evacuate an object typically
- // causes it to be recorded in the mutable
+ // Causes it to be recorded in the mutable
// object list
rtsBool eager_promotion; // forces promotion to the evac gen
// object list
rtsBool eager_promotion; // forces promotion to the evac gen
@@
-156,8
+159,7
@@
typedef struct gc_thread_ {
lnat copied;
lnat any_work;
lnat no_work;
lnat copied;
lnat any_work;
lnat no_work;
- lnat scav_global_work;
- lnat scav_local_work;
+ lnat scav_find_work;
// -------------------
// workspaces
// -------------------
// workspaces
@@
-172,6
+174,7
@@
typedef struct gc_thread_ {
extern nat N;
extern rtsBool major_gc;
extern nat N;
extern rtsBool major_gc;
+extern nat n_gc_threads;
extern gc_thread **gc_threads;
register gc_thread *gct __asm__("%rbx");
extern gc_thread **gc_threads;
register gc_thread *gct __asm__("%rbx");
@@
-194,4
+197,6
@@
extern nat mutlist_MUTVARS, mutlist_MUTARRS, mutlist_MVARS, mutlist_OTHERS;
StgClosure * isAlive(StgClosure *p);
StgClosure * isAlive(StgClosure *p);
+#define WORK_UNIT_WORDS 128
+
#endif /* GC_H */
#endif /* GC_H */