diff options
Diffstat (limited to 'includes/Parallel.h')
-rw-r--r-- | includes/Parallel.h | 360 |
1 files changed, 0 insertions, 360 deletions
diff --git a/includes/Parallel.h b/includes/Parallel.h deleted file mode 100644 index e18fbe9b2c..0000000000 --- a/includes/Parallel.h +++ /dev/null @@ -1,360 +0,0 @@ -/* - Definitions for GUM i.e. running on a parallel machine. - - This section contains definitions applicable only to programs compiled - to run on a parallel machine, i.e. on GUM. Some of these definitions - are also used when simulating parallel execution, i.e. on GranSim. -*/ - -#ifndef PARALLEL_H -#define PARALLEL_H - -#if defined(PAR) || defined(GRAN) /* whole file */ - -/* - * @node Parallel definitions, End of File - * @section Parallel definitions - * - * @menu - * * Basic definitions:: - * * GUM:: - * * GranSim:: - * @end menu - * - * @node Basic definitions, GUM, Parallel definitions, Parallel definitions - * @subsection Basic definitions - */ - -/* This clashes with TICKY, but currently TICKY and PAR hate each other anyway */ -#define _HS sizeofW(StgHeader) - -/* SET_PAR_HDR and SET_STATIC_PAR_HDR now live in ClosureMacros.h */ - -/* Needed for dumping routines */ -#if defined(PAR) -# define NODE_STR_LEN 20 -# define TIME_STR_LEN 120 -# define TIME rtsTime -# define CURRENT_TIME (msTime() - startTime) -# define TIME_ON_PROC(p) (msTime() - startTime) -# define CURRENT_PROC thisPE -# define BINARY_STATS RtsFlags.ParFlags.ParStats.Binary -#elif defined(GRAN) -# define NODE_STR_LEN 20 -# define TIME_STR_LEN 120 -# define TIME rtsTime -# define CURRENT_TIME CurrentTime[CurrentProc] -# define TIME_ON_PROC(p) CurrentTime[p] -# define CURRENT_PROC CurrentProc -# define BINARY_STATS RtsFlags.GranFlags.GranSimStats.Binary -#endif - -#if defined(PAR) -# define MAX_PES 256 /* Maximum number of processors */ - /* MAX_PES is enforced by SysMan, which does not - allow more than this many "processors". - This is important because PackGA [GlobAddr.lc] - **assumes** that a PE# can fit in 8+ bits. - */ - -# define SPARK_POOLS 2 /* no. of spark pools */ -# define REQUIRED_POOL 0 /* idx of pool of mandatory sparks (concurrency) */ -# define ADVISORY_POOL 1 /* idx of pool of advisory sparks (parallelism) */ -#endif - -/* - * @menu - * * GUM:: - * * GranSim:: - * @end menu - * - * @node GUM, GranSim, Basic definitions, Parallel definitions - * @subsection GUM - */ - -#if defined(PAR) -/* - Symbolic constants for the packing code. - - This constant defines how many words of data we can pack into a single - packet in the parallel (GUM) system. -*/ - -/* - * @menu - * * Types:: - * * Externs:: - * * Prototypes:: - * * Macros:: - * @end menu - * - * @node Types, Externs, GUM, GUM - * @subsubsection Types - */ - -/* Sparks and spark queues */ -typedef StgClosure *rtsSpark; -typedef rtsSpark *rtsSparkQ; - -typedef struct rtsPackBuffer_ { - StgInt /* nat */ id; - StgInt /* nat */ size; - StgInt /* nat */ unpacked_size; - StgTSO *tso; - StgWord *buffer[0]; -} rtsPackBuffer; - -#define PACK_BUFFER_HDR_SIZE 4 - -/* - * @node Externs, Prototypes, Types, GUM - * @subsubsection Externs - */ - -/* extern rtsBool do_sp_profile; */ - -extern globalAddr theGlobalFromGA, theGlobalToGA; -extern StgBlockedFetch *PendingFetches; -extern GlobalTaskId *allPEs; - -extern rtsBool IAmMainThread, GlobalStopPending; -/*extern rtsBool fishing; */ -extern rtsTime last_fish_arrived_at; -extern nat outstandingFishes; -extern GlobalTaskId SysManTask; -extern int seed; /* pseudo-random-number generator seed: */ - /* Initialised in ParInit */ -extern StgInt threadId; /* Number of Threads that have existed on a PE */ -extern GlobalTaskId mytid; - -extern GlobalTaskId *allPEs; -extern nat nPEs; -extern nat sparksIgnored, sparksCreated, threadsIgnored, threadsCreated; -extern nat advisory_thread_count; - -extern rtsBool InGlobalGC; /* Are we in the midst of performing global GC */ - -extern ullong startTime; /* start of comp; in RtsStartup.c */ - -/* the spark pools proper */ -extern rtsSpark *pending_sparks_hd[]; /* ptr to start of a spark pool */ -extern rtsSpark *pending_sparks_tl[]; /* ptr to end of a spark pool */ -extern rtsSpark *pending_sparks_lim[]; -extern rtsSpark *pending_sparks_base[]; -extern nat spark_limit[]; - -extern rtsPackBuffer *PackBuffer; /* size: can be set via option */ -extern rtsPackBuffer *buffer; -extern rtsPackBuffer *freeBuffer; -extern rtsPackBuffer *packBuffer; -extern rtsPackBuffer *gumPackBuffer; - -extern nat thisPE; - -/* From Global.c -extern GALA *freeGALAList; -extern GALA *freeIndirections; -extern GALA *liveIndirections; -extern GALA *liveRemoteGAs; -*/ - -/* - * @node Prototypes, Macros, Externs, GUM - * @subsubsection Prototypes - */ - -/* From ParInit.c */ -void initParallelSystem(void); -void SynchroniseSystem(void); -void par_exit(StgInt n); - -PEs taskIDtoPE (GlobalTaskId gtid); -void registerTask (GlobalTaskId gtid); -globalAddr *LAGAlookup (StgClosure *addr); -StgClosure *GALAlookup (globalAddr *ga); -/*static GALA *allocIndirection (StgPtr addr); */ -globalAddr *makeGlobal (StgClosure *addr, rtsBool preferred); -globalAddr *setRemoteGA (StgClosure *addr, globalAddr *ga, rtsBool preferred); -void splitWeight (globalAddr *to, globalAddr *from); -globalAddr *addWeight (globalAddr *ga); -void initGAtables (void); -void RebuildLAGAtable (void); -StgWord PackGA (StgWord pe, int slot); - -# if defined(DEBUG) -/* from Global.c */ -/* highest_slot breaks the abstraction of the slot counter for GAs; it is - only used for sanity checking and should used nowhere else */ -StgInt highest_slot (void); -# endif - -/* - * @node Macros, , Prototypes, GUM - * @subsubsection Macros - */ - -/* delay (in us) between dying fish returning and sending out a new fish */ -#define FISH_DELAY 1000 -/* max no. of outstanding spark steals */ -#define MAX_FISHES 1 - -/* ToDo: check which of these is actually needed! */ - -# define PACK_HEAP_REQUIRED ((RtsFlags.ParFlags.packBufferSize - PACK_HDR_SIZE) / (PACK_GA_SIZE + _HS) * (MIN_UPD_SIZE + 2)) - -# define MAX_GAS (RtsFlags.ParFlags.packBufferSize / PACK_GA_SIZE) - - -# define PACK_GA_SIZE 3 /* Size of a packed GA in words */ - /* Size of a packed fetch-me in words */ -# define PACK_FETCHME_SIZE (PACK_GA_SIZE + _HS) - -# define PACK_HDR_SIZE 1 /* Words of header in a packet */ - -# define PACK_PLC_SIZE 2 /* Size of a packed PLC in words */ - -/* - Definitions relating to the entire parallel-only fixed-header field. - - On GUM, the global addresses for each local closure are stored in a - separate hash table, rather then with the closure in the heap. We call - @getGA@ to look up the global address associated with a local closure (0 - is returned for local closures that have no global address), and @setGA@ - to store a new global address for a local closure which did not - previously have one. */ - -# define GA_HDR_SIZE 0 - -# define GA(closure) getGA(closure) - -# define SET_GA(closure, ga) setGA(closure,ga) -# define SET_STATIC_GA(closure) -# define SET_GRAN_HDR(closure,pe) -# define SET_STATIC_PROCS(closure) - -# define MAX_GA_WEIGHT 0 /* Treat as 2^n */ - -/* At the moment, there is no activity profiling for GUM. This may change. */ -# define SET_TASK_ACTIVITY(act) /* nothing */ - -/* - The following macros are only needed for sanity checking (see Sanity.c). -*/ - -/* NB: this is PVM specific and should be updated for MPI etc - in PVM a task id (tid) is split into 2 parts: the id for the - physical processor it is running on and an index of tasks running - on a processor; PVM_PE_MASK indicates which part of a tid holds the - id of the physical processor (the other part of the word holds the - index on that processor) - MAX_PVM_PES and MAX_PVM_TIDS are maximal values for these 2 components - in GUM we have an upper bound for the total number of PVM PEs allowed: - it's MAX_PE defined in Parallel.h - to check the slot field of a GA we call a fct highest_slot which just - returns the internal counter -*/ -#define PVM_PE_MASK 0xfffc0000 -#define MAX_PVM_PES MAX_PES -#define MAX_PVM_TIDS MAX_PES - -#if 0 -#define LOOKS_LIKE_TID(tid) (((tid & PVM_PE_MASK) != 0) && \ - (((tid & PVM_PE_MASK) + (tid & ~PVM_PE_MASK)) < MAX_PVM_TIDS)) -#define LOOKS_LIKE_SLOT(slot) (slot<=highest_slot()) - -#define LOOKS_LIKE_GA(ga) (LOOKS_LIKE_TID((ga)->payload.gc.gtid) && \ - LOOKS_LIKE_SLOT((ga)->payload.gc.slot)) -#else -rtsBool looks_like_tid(StgInt tid); -rtsBool looks_like_slot(StgInt slot); -rtsBool looks_like_ga(globalAddr *ga); -#define LOOKS_LIKE_TID(tid) looks_like_tid(tid) -#define LOOKS_LIKE_GA(ga) looks_like_ga(ga) -#endif /* 0 */ - -#endif /* PAR */ - -/* - * @node GranSim, , GUM, Parallel definitions - * @subsection GranSim - */ - -#if defined(GRAN) -/* ToDo: Check which of the PAR routines are needed in GranSim -- HWL */ - -/* - * @menu - * * Types:: - * * Prototypes:: - * * Macros:: - * @end menu - * - * @node Types, Prototypes, GranSim, GranSim - * @subsubsection Types - */ - -typedef StgWord *StgBuffer; -typedef struct rtsPackBuffer_ { - StgInt /* nat */ id; - StgInt /* nat */ size; - StgInt /* nat */ unpacked_size; - StgTSO *tso; - StgWord *buffer; -} rtsPackBuffer; - -/* - * @node Macros, , Prototypes, GranSim - * @subsubsection Macros - */ - -/* max no. of outstanding spark steals */ -#define MAX_FISHES 1 - -/* These are needed in the packing code to get the size of the packet - right. The closures itself are never built in GrAnSim. */ -# define FETCHME_VHS IND_VHS -# define FETCHME_HS IND_HS - -# define FETCHME_GA_LOCN FETCHME_HS - -# define FETCHME_CLOSURE_SIZE(closure) IND_CLOSURE_SIZE(closure) -# define FETCHME_CLOSURE_NoPTRS(closure) 0L -# define FETCHME_CLOSURE_NoNONPTRS(closure) (IND_CLOSURE_SIZE(closure)-IND_VHS) - -# define MAX_GAS (RtsFlags.GranFlags.packBufferSize / PACK_GA_SIZE) -# define PACK_GA_SIZE 3 /* Size of a packed GA in words */ - /* Size of a packed fetch-me in words */ -# define PACK_FETCHME_SIZE (PACK_GA_SIZE + _HS) -# define PACK_HDR_SIZE 4 /* Words of header in a packet */ - -# define PACK_HEAP_REQUIRED \ - (RtsFlags.GranFlags.packBufferSize * sizeofW(StgClosure*) + \ - 2 * sizeofW(StgInt) + sizeofW(StgTSO*)) - -# define PACK_FLAG_LOCN 0 -# define PACK_TSO_LOCN 1 -# define PACK_UNPACKED_SIZE_LOCN 2 -# define PACK_SIZE_LOCN 3 -# define MAGIC_PACK_FLAG 0xfabc - -# define GA_HDR_SIZE 1 - -# define PROCS_HDR_POSN PAR_HDR_POSN -# define PROCS_HDR_SIZE 1 - -/* Accessing components of the field */ -# define PROCS(closure) ((closure)->header.gran.procs) -/* SET_PROCS is now SET_GRAN_HEADER in ClosureMacros.h. */ - -#endif /* GRAN */ - -/* - * @node End of File, , Parallel definitions - * @section End of File - */ - -#endif /* defined(PAR) || defined(GRAN) whole file */ - -#endif /* Parallel_H */ - - |