diff options
author | Simon Marlow <simonmar@microsoft.com> | 2006-04-07 02:05:11 +0000 |
---|---|---|
committer | Simon Marlow <simonmar@microsoft.com> | 2006-04-07 02:05:11 +0000 |
commit | 0065d5ab628975892cea1ec7303f968c3338cbe1 (patch) | |
tree | 8e2afe0ab48ee33cf95009809d67c9649573ef92 /rts/Sparks.h | |
parent | 28a464a75e14cece5db40f2765a29348273ff2d2 (diff) | |
download | haskell-0065d5ab628975892cea1ec7303f968c3338cbe1.tar.gz |
Reorganisation of the source tree
Most of the other users of the fptools build system have migrated to
Cabal, and with the move to darcs we can now flatten the source tree
without losing history, so here goes.
The main change is that the ghc/ subdir is gone, and most of what it
contained is now at the top level. The build system now makes no
pretense at being multi-project, it is just the GHC build system.
No doubt this will break many things, and there will be a period of
instability while we fix the dependencies. A straightforward build
should work, but I haven't yet fixed binary/source distributions.
Changes to the Building Guide will follow, too.
Diffstat (limited to 'rts/Sparks.h')
-rw-r--r-- | rts/Sparks.h | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/rts/Sparks.h b/rts/Sparks.h new file mode 100644 index 0000000000..77d280bea8 --- /dev/null +++ b/rts/Sparks.h @@ -0,0 +1,104 @@ +/* ----------------------------------------------------------------------------- + * + * (c) The GHC Team, 2000-2006 + * + * Sparking support for GRAN, PAR and THREADED_RTS versions of the RTS. + * + * ---------------------------------------------------------------------------*/ + +#ifndef SPARKS_H +#define SPARKS_H + +#if !defined(GRAN) +StgInt newSpark (StgRegTable *reg, StgClosure *p); +#endif + +#if defined(PARALLEL_HASKELL) || defined(THREADED_RTS) +StgClosure * findSpark (Capability *cap); +void initSparkPools (void); +void markSparkQueue (evac_fn evac); +void createSparkThread (Capability *cap, StgClosure *p); + +INLINE_HEADER void discardSparks (StgSparkPool *pool); +INLINE_HEADER nat sparkPoolSize (StgSparkPool *pool); +INLINE_HEADER rtsBool emptySparkPool (StgSparkPool *pool); + +INLINE_HEADER void discardSparksCap (Capability *cap); +INLINE_HEADER nat sparkPoolSizeCap (Capability *cap); +INLINE_HEADER rtsBool emptySparkPoolCap (Capability *cap); +#endif + +#if defined(PARALLEL_HASKELL) +StgTSO *activateSpark (rtsSpark spark) ; +rtsBool add_to_spark_queue( StgClosure *closure, StgSparkPool *pool ); +void markSparkQueue( void ); +nat spark_queue_len( StgSparkPool *pool ); +void disposeSpark( StgClosure *spark ); +#endif + +#if defined(GRAN) +void findLocalSpark (rtsEvent *event, rtsBool *found_res, rtsSparkQ *spark_res); +rtsBool activateSpark (rtsEvent *event, rtsSparkQ spark); +rtsSpark *newSpark(StgClosure *node, nat name, nat gran_info, + nat size_info, nat par_info, nat local); +void add_to_spark_queue(rtsSpark *spark); +rtsSpark *delete_from_sparkq (rtsSpark *spark, PEs p, rtsBool dispose_too); +void disposeSpark(rtsSpark *spark); +void disposeSparkQ(rtsSparkQ spark); +void print_spark(rtsSpark *spark); +void print_sparkq(PEs proc); +void print_sparkq_stats(void); +nat spark_queue_len(PEs proc); +void markSparkQueue(void); +#endif + +/* ----------------------------------------------------------------------------- + * PRIVATE below here + * -------------------------------------------------------------------------- */ + +#if defined(PARALLEL_HASKELL) || defined(THREADED_RTS) + +INLINE_HEADER rtsBool +emptySparkPool (StgSparkPool *pool) +{ + return (pool->hd == pool->tl); +} + +INLINE_HEADER rtsBool +emptySparkPoolCap (Capability *cap) +{ return emptySparkPool(&cap->r.rSparks); } + +INLINE_HEADER nat +sparkPoolSize (StgSparkPool *pool) +{ + if (pool->hd <= pool->tl) { + return (pool->hd - pool->tl); + } else { + return (pool->lim - pool->hd + pool->tl - pool->base); + } +} + +INLINE_HEADER nat +sparkPoolSizeCap (Capability *cap) +{ return sparkPoolSize(&cap->r.rSparks); } + +INLINE_HEADER void +discardSparks (StgSparkPool *pool) +{ + pool->hd = pool->tl; +} + +INLINE_HEADER void +discardSparksCap (Capability *cap) +{ return discardSparks(&cap->r.rSparks); } + + +#elif defined(THREADED_RTS) + +INLINE_HEADER rtsBool +emptySparkPoolCap (Capability *cap STG_UNUSED) +{ return rtsTrue; } + +#endif + +#endif /* SPARKS_H */ |