X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FSparks.h;h=089b3f45977fa1836f2a40982eda6a03525ffbd5;hb=524a6f8bdf35c37998072fc1692c681c45a336f7;hp=25a9d77d0775b7600f2ec0883e219aea410dfe5f;hpb=797d634182ab6f63c5e51e44a567ba8f7bc8b074;p=ghc-hetmet.git diff --git a/ghc/rts/Sparks.h b/ghc/rts/Sparks.h index 25a9d77..089b3f4 100644 --- a/ghc/rts/Sparks.h +++ b/ghc/rts/Sparks.h @@ -1,5 +1,4 @@ /* ----------------------------------------------------------------------------- - * $Id: Sparks.h,v 1.4 2002/01/24 02:06:49 sof Exp $ * * (c) The GHC Team, 2000 * @@ -7,8 +6,34 @@ * * ---------------------------------------------------------------------------*/ -#if defined(GRAN) +#ifndef SPARKS_H +#define SPARKS_H + +#if defined(PARALLEL_HASKELL) || defined(SMP) +StgClosure * findSpark (Capability *cap); +void initSparkPools (void); +void markSparkQueue (evac_fn evac); +void createSparkThread (Capability *cap, StgClosure *p); +StgInt newSpark (StgRegTable *reg, 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, @@ -22,18 +47,55 @@ void print_sparkq(PEs proc); void print_sparkq_stats(void); nat spark_queue_len(PEs proc); void markSparkQueue(void); +#endif -#elif defined(PAR) || defined(SMP) +/* ----------------------------------------------------------------------------- + * PRIVATE below here + * -------------------------------------------------------------------------- */ -StgClosure *findSpark( rtsBool ); -rtsBool initSparkPools( void ); -void markSparkQueue( void ); -#if defined(PAR) -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(PARALLEL_HASKELL) || defined(SMP) + +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 */