Mercurial > cgi-bin > hgwebdir.cgi > VMS > VMS_Implementations > VCilk_impls > VCilk__MC_shared_impl
view VCilk.h @ 9:5131f941f42c
update to newer VMS var names
| author | Nina Engelhardt <nengel@mailbox.tu-berlin.de> |
|---|---|
| date | Tue, 09 Jul 2013 13:52:57 +0200 |
| parents | 58d0c2b1d6a4 |
| children |
line source
1 /*
2 * Copyright 2009 OpenSourceStewardshipFoundation.org
3 * Licensed under GNU General Public License version 2
4 *
5 * Author: seanhalle@yahoo.com
6 *
7 */
9 #ifndef _VCilk_H
10 #define _VCilk_H
12 #include "Queue_impl/PrivateQueue.h"
13 #include "Hash_impl/PrivateHash.h"
14 #include "VMS_impl/VMS.h"
18 /*This header defines everything specific to the VCilk semantic plug-in
19 */
21 //===========================================================================
22 #define NUM_STRUCS_IN_SEM_ENV 1000
24 #define MIN_WORK_UNIT_CYCLES 20000
25 //===========================================================================
26 typedef struct _VCilkSemReq VCilkSemReq;
27 typedef void (*PtrToAtomicFn ) ( void * ); //executed atomically in master
29 //===========================================================================
32 /*WARNING: assembly hard-codes position of endInstrAddr as first field
33 */
34 typedef struct
35 {
36 void *endInstrAddr;
37 int32 hasBeenStarted;
38 int32 hasFinished;
39 PrivQueueStruc *waitQ;
40 }
41 VCilkSingleton;
43 /*Semantic layer-specific data sent inside a request from lib called in app
44 * to request handler called in MasterLoop
45 */
46 enum VCilkReqType
47 {
48 syncReq = 1,
49 mallocReq,
50 freeReq,
51 singleton_fn_start,
52 singleton_fn_end,
53 singleton_data_start,
54 singleton_data_end,
55 atomic,
56 trans_start,
57 trans_end
58 };
60 struct _VCilkSemReq
61 { enum VCilkReqType reqType;
62 SlaveVP *requestingPr;
64 int32 sizeToMalloc;
65 void *ptrToFree;
67 TopLevelFnPtr fnPtr;
68 void *initData;
69 int32 coreToSpawnOnto;
71 int32 singletonID;
72 VCilkSingleton **singletonPtrAddr;
74 PtrToAtomicFn fnToExecInMaster;
75 void *dataForFn;
77 int32 transID;
78 }
79 /* VCilkSemReq */;
81 typedef struct
82 {
83 SlaveVP *VPCurrentlyExecuting;
84 PrivQueueStruc *waitingVPQ;
85 }
86 VCilkTrans;
88 typedef struct
89 {
90 PrivQueueStruc **readyVPQs;
91 HashTable *commHashTbl;
92 int32 numVirtPr;
93 int32 nextCoreToGetNewPr;
94 int32 primitiveStartTime;
96 //fix limit on num with dynArray
97 VCilkSingleton fnSingletons[NUM_STRUCS_IN_SEM_ENV];
98 VCilkTrans transactionStrucs[NUM_STRUCS_IN_SEM_ENV];
99 }
100 VCilkSemEnv;
102 typedef struct _TransListElem TransListElem;
103 struct _TransListElem
104 {
105 int32 transID;
106 TransListElem *nextTrans;
107 };
108 //TransListElem
110 typedef struct
111 {
112 int32 syncPending;
113 int32 numLiveChildren;
114 SlaveVP *parentPr;
116 int32 highestTransEntered;
117 TransListElem *lastTransEntered;
118 }
119 VCilkSemData;
121 //===========================================================================
123 void
124 VCilk__create_seed_procr_and_do_work( TopLevelFnPtr fn, void *initData );
126 int32
127 VCilk__giveMinWorkUnitCycles( float32 percentOverhead );
129 void inline
130 VCilk__start_primitive();
132 int32 inline
133 VCilk__end_primitive_and_give_cycles();
135 int32
136 VCilk__giveIdealNumWorkUnits();
138 //=======================
140 void
141 VCilk__init();
143 void
144 VCilk__cleanup_at_end_of_shutdown();
146 //=======================
148 void inline
149 VCilk__spawn( int32 coreToSpawnOnto, TopLevelFnPtr fnPtr,
150 void *initData, SlaveVP *creatingPr );
152 int32
153 VCilk__give_number_of_cores_to_spawn_onto();
155 void
156 VCilk__sync( SlaveVP *animatingPr );
158 void *
159 VCilk__malloc( int32 sizeToMalloc, SlaveVP *animPr );
161 void
162 VCilk__free( void *ptrToFree, SlaveVP *animPr );
164 void
165 VCilk__dissipate_procr( SlaveVP *procrToDissipate );
168 //======================= Concurrency Stuff ======================
169 void
170 VCilk__start_fn_singleton( int32 singletonID, SlaveVP *animPr );
172 void
173 VCilk__end_fn_singleton( int32 singletonID, SlaveVP *animPr );
175 void
176 VCilk__start_data_singleton( VCilkSingleton **singeltonAddr, SlaveVP *animPr );
178 void
179 VCilk__end_data_singleton( VCilkSingleton **singletonAddr, SlaveVP *animPr );
181 void
182 VCilk__animate_short_fn_in_isolation( PtrToAtomicFn ptrToFnToExecInMaster,
183 void *data, SlaveVP *animPr );
185 void
186 VCilk__start_transaction( int32 transactionID, SlaveVP *animPr );
188 void
189 VCilk__end_transaction( int32 transactionID, SlaveVP *animPr );
192 //========================= Internal use only =============================
193 void
194 VCilk__Request_Handler( SlaveVP *requestingPr, void *_semEnv );
196 SlaveVP *
197 VCilk__schedule_virt_procr( void *_semEnv, AnimSlot *slot );
199 void inline
200 resume_procr( SlaveVP *procr, VCilkSemEnv *semEnv );
201 #endif /* _VCilk_H */
