The Gaudi Framework
master (5c735ca6)
Toggle main menu visibility
Loading...
Searching...
No Matches
SubSlotVsSlotIsolation.py
Go to the documentation of this file.
1
#!/usr/bin/env gaudirun.py
2
12
"""
13
A test for isolating sub-slot data from the parent slot.
14
The main sequence has two steps of creating and running sub-events.
15
16
The ViewTester is an algorithm specifically designed to create sub-event
17
contexts, pass them to the scheduler, and report on the current context.
18
19
Seven instances of ViewTester are used as follows:
20
- Algorithm A1 creates a sub-event context
21
- Algorithms A2 and A3 run within the sub-event, sharing data
22
- Algorithm A4 creates another sub-event contexts, and a data output
23
- Algorithms A5 and A6 run within the new sub-event, but cannot access data from A4
24
- Algorithm A7 runs in the whole event context, after the sub-events
25
26
The test should stall if isolation is working
27
"""
28
29
from
Configurables
import
(
30
AlgResourcePool,
31
AvalancheSchedulerSvc,
32
Gaudi__Sequencer,
33
HiveSlimEventLoopMgr,
34
HiveWhiteBoard,
35
Test__ViewTester,
36
)
37
from
Gaudi.Configuration
import
*
38
39
# metaconfig -------------------------------------------------------------------
40
# It's confortable to collect the relevant parameters at the top of the optionfile
41
evtslots = 1
42
evtMax = 1
43
cardinality = 1
44
threads = 1
45
viewsPerEvt = 1
46
# -------------------------------------------------------------------------------
47
48
# The configuration of the whiteboard ------------------------------------------
49
# It is useful to call it EventDataSvc to replace the usual data service with
50
# the whiteboard transparently.
51
52
whiteboard =
HiveWhiteBoard
(
"EventDataSvc"
, EventSlots=evtslots)
53
54
# -------------------------------------------------------------------------------
55
56
# Event Loop Manager -----------------------------------------------------------
57
# It's called slim since it has less functionalities overall than the good-old
58
# event loop manager. Here we just set its outputlevel to DEBUG.
59
60
slimeventloopmgr =
HiveSlimEventLoopMgr
(
61
SchedulerName=
"AvalancheSchedulerSvc"
, OutputLevel=DEBUG
62
)
63
64
# -------------------------------------------------------------------------------
65
66
# ForwardScheduler -------------------------------------------------------------
67
# We just decide how many algorithms in flight we want to have and how many
68
# threads in the pool. The default value is -1, which is for TBB equivalent
69
# to take over the whole machine.
70
71
scheduler =
AvalancheSchedulerSvc
(
72
ThreadPoolSize=threads, OutputLevel=INFO, VerboseSubSlots=
True
73
)
74
75
# -------------------------------------------------------------------------------
76
77
# Algo Resource Pool -----------------------------------------------------------
78
# Nothing special here, we just set the debug level.
79
AlgResourcePool
(OutputLevel=DEBUG)
80
81
# -------------------------------------------------------------------------------
82
83
# Set up of the crunchers, daily business --------------------------------------
84
85
a1 = Test__ViewTester(
"A1"
)
86
a1.baseViewName =
"viewOne"
87
a1.viewNumber = viewsPerEvt
88
a1.viewNodeName =
"viewNodeOne"
89
90
a2 = Test__ViewTester(
"A2"
)
91
a2.viewNodeName =
""
92
a2.outKeys = [
"/Event/a2"
]
93
94
a3 = Test__ViewTester(
"A3"
)
95
a3.viewNodeName =
""
96
a3.inpKeys = [
"/Event/a2"
]
# Should be able to load a2 from the shared sub-slot
97
98
a4 = Test__ViewTester(
"A4"
)
99
a4.baseViewName =
"viewTwo"
100
a4.viewNumber = viewsPerEvt
101
a4.viewNodeName =
"viewNodeTwo"
102
a4.outKeys = [
"/Event/a4"
]
103
104
a5 = Test__ViewTester(
"A5"
)
105
a5.viewNodeName =
""
106
a5.inpKeys = [
"/Event/a4"
]
# Should not be able to load a4 from the "whole event" slot
107
108
a6 = Test__ViewTester(
"A6"
)
109
a6.viewNodeName =
""
110
111
a7 = Test__ViewTester(
"A7"
)
112
a7.viewNodeName =
""
113
114
for
algo
in
[a1, a2, a3, a4, a5, a6, a7]:
115
algo.Cardinality = cardinality
116
algo.OutputLevel = DEBUG
117
118
viewNodeOne = Gaudi__Sequencer(
119
"viewNodeOne"
, Members=[a2, a3], Sequential=
False
, ShortCircuit=
False
120
)
121
122
viewNodeTwo = Gaudi__Sequencer(
123
"viewNodeTwo"
, Members=[a5, a6], Sequential=
False
, ShortCircuit=
False
124
)
125
126
createViewSeq = Gaudi__Sequencer(
127
"createViewSeq"
,
128
Members=[a1, viewNodeOne, a4, viewNodeTwo, a7],
129
Sequential=
True
,
130
OutputLevel=VERBOSE,
131
)
132
133
# Application Manager ----------------------------------------------------------
134
# We put everything together and change the type of message service
135
136
ApplicationMgr
(
137
EvtMax=evtMax,
138
EvtSel=
"NONE"
,
139
ExtSvc=[whiteboard],
140
EventLoop=slimeventloopmgr,
141
TopAlg=[createViewSeq],
142
MessageSvcType=
"InertMessageSvc"
,
143
)
144
145
# -------------------------------------------------------------------------------
AlgResourcePool
The AlgResourcePool is a concrete implementation of the IAlgResourcePool interface.
Definition
AlgResourcePool.h:35
ApplicationMgr
The Application Manager class.
Definition
ApplicationMgr.h:54
AvalancheSchedulerSvc
Definition
AvalancheSchedulerSvc.h:114
HiveSlimEventLoopMgr
Definition
HiveSlimEventLoopMgr.h:31
HiveWhiteBoard
Data service base class.
Definition
HiveWhiteBoard.cpp:129
Gaudi.Configuration
Definition
Configuration.py:1
GaudiHive
options
SubSlotVsSlotIsolation.py
Generated on
for The Gaudi Framework by
1.17.0