projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Run sparks in batches, instead of creating a new thread for each one
[ghc-hetmet.git]
/
rts
/
Capability.h
diff --git
a/rts/Capability.h
b/rts/Capability.h
index
779a194
..
869fdc3
100644
(file)
--- a/
rts/Capability.h
+++ b/
rts/Capability.h
@@
-106,8
+106,10
@@
struct Capability_ {
StgTRecChunk *free_trec_chunks;
StgTRecHeader *free_trec_headers;
nat transaction_tokens;
StgTRecChunk *free_trec_chunks;
StgTRecHeader *free_trec_headers;
nat transaction_tokens;
-
-}; // typedef Capability, defined in RtsAPI.h
+} // typedef Capability is defined in RtsAPI.h
+ // Capabilities are stored in an array, so make sure that adjacent
+ // Capabilities don't share any cache-lines:
+ ATTRIBUTE_ALIGNED(64);
#if defined(THREADED_RTS)
#if defined(THREADED_RTS)
@@
-242,7
+244,11
@@
rtsBool tryGrabCapability (Capability *cap, Task *task);
// Try to steal a spark from other Capabilities
//
// Try to steal a spark from other Capabilities
//
-rtsBool stealWork (Capability *cap);
+StgClosure *stealWork (Capability *cap);
+
+// True if any capabilities have sparks
+//
+rtsBool anySparks (void);
INLINE_HEADER rtsBool emptySparkPoolCap (Capability *cap);
INLINE_HEADER nat sparkPoolSizeCap (Capability *cap);
INLINE_HEADER rtsBool emptySparkPoolCap (Capability *cap);
INLINE_HEADER nat sparkPoolSizeCap (Capability *cap);
@@
-260,11
+266,12
@@
extern void grabCapability (Capability **pCap);
// cause all capabilities to context switch as soon as possible.
void setContextSwitches(void);
// cause all capabilities to context switch as soon as possible.
void setContextSwitches(void);
-// Free a capability on exit
-void freeCapability (Capability *cap);
+// Free all capabilities
+void freeCapabilities (void);
// FOr the GC:
// FOr the GC:
-void markSomeCapabilities (evac_fn evac, void *user, nat i0, nat delta);
+void markSomeCapabilities (evac_fn evac, void *user, nat i0, nat delta,
+ rtsBool prune_sparks);
void markCapabilities (evac_fn evac, void *user);
void traverseSparkQueues (evac_fn evac, void *user);
void markCapabilities (evac_fn evac, void *user);
void traverseSparkQueues (evac_fn evac, void *user);