The Gaudi Framework  v41r0 (bdbe7744)
Loading...
Searching...
No Matches
GaudiMP.Parallel.WorkManager Class Reference

Public Member Functions

 __init__ (self, ncpus="autodetect", ppservers=None)
 __del__ (self)
 process (self, task, items, timeout=90000)

Public Attributes

 ncpus = multiprocessing.cpu_count()
 ppservers = ppservers
list sessions = [SshSession(srv) for srv in ppservers]
 server = pp.Server(ncpus=self.ncpus, ppservers=self.ppservers)
str mode = "cluster"
 pool = multiprocessing.Pool(self.ncpus)
dict stats = {}

Protected Member Functions

 _printStatistics (self)
 _mergeStatistics (self, stat)

Detailed Description

Class to in charge of managing the tasks and distributing them to
the workers. They can be local (using other cores) or remote
using other nodes in the local cluster

Definition at line 140 of file Parallel.py.

Constructor & Destructor Documentation

◆ __init__()

GaudiMP.Parallel.WorkManager.__init__ ( self,
ncpus = "autodetect",
ppservers = None )

Definition at line 145 of file Parallel.py.

145 def __init__(self, ncpus="autodetect", ppservers=None):
146 if ncpus == "autodetect":
147 self.ncpus = multiprocessing.cpu_count()
148 else:
149 self.ncpus = ncpus
150 if ppservers:
151 import pp
152
153 self.ppservers = ppservers
154 self.sessions = [SshSession(srv) for srv in ppservers]
155 self.server = pp.Server(ncpus=self.ncpus, ppservers=self.ppservers)
156 self.mode = "cluster"
157 else:
158 self.pool = multiprocessing.Pool(self.ncpus)
159 self.mode = "multicore"
160 self.stats = {}
161

◆ __del__()

GaudiMP.Parallel.WorkManager.__del__ ( self)

Definition at line 162 of file Parallel.py.

162 def __del__(self):
163 if hasattr(self, "server"):
164 self.server.destroy()
165 if hasattr(self, "pool"):
166 self.pool.close()
167

Member Function Documentation

◆ _mergeStatistics()

GaudiMP.Parallel.WorkManager._mergeStatistics ( self,
stat )
protected

Definition at line 213 of file Parallel.py.

213 def _mergeStatistics(self, stat):
214 if stat.name not in self.stats:
215 self.stats[stat.name] = Statistics()
216 s = self.stats[stat.name]
217 s.time += stat.time
218 s.njob += 1
219
220

◆ _printStatistics()

GaudiMP.Parallel.WorkManager._printStatistics ( self)
protected

Definition at line 202 of file Parallel.py.

202 def _printStatistics(self):
203 njobs = 0
204 for stat in self.stats.values():
205 njobs += stat.njob
206 print("Job execution statistics:")
207 print("job count | % of all jobs | job time sum | time per job | job server")
208 for name, stat in self.stats.items():
209 print(
210 f" {stat.njob} | {100.0 * stat.njob / njobs:6.2f} | {stat.time:8.3f} | {stat.time / stat.njob:8.3f} | {name}"
211 )
212

◆ process()

GaudiMP.Parallel.WorkManager.process ( self,
task,
items,
timeout = 90000 )

Definition at line 168 of file Parallel.py.

168 def process(self, task, items, timeout=90000):
169 if not isinstance(task, Task):
170 raise TypeError("task argument needs to be an 'Task' instance")
171 # --- Call the Local initialialization
172 task.initializeLocal()
173 # --- Schedule all the jobs ....
174 if self.mode == "cluster":
175 jobs = [
176 self.server.submit(
177 _prefunction,
178 (_ppfunction, task, item),
179 (),
180 ("GaudiMP.Parallel", "time"),
181 )
182 for item in items
183 ]
184 for job in jobs:
185 result, stat = job()
186 task._mergeResults(result)
187 self._mergeStatistics(stat)
188 self._printStatistics()
189 self.server.print_stats()
190 elif self.mode == "multicore":
191 start = time.time()
192 jobs = self.pool.map_async(_ppfunction, zip([task for i in items], items))
193 for result, stat in jobs.get(timeout):
194 task._mergeResults(result)
195 self._mergeStatistics(stat)
196 end = time.time()
197 self._printStatistics()
198 print("Time elapsed since server creation %f" % (end - start))
199 # --- Call the Local Finalize
200 task.finalize()
201

Member Data Documentation

◆ mode

str GaudiMP.Parallel.WorkManager.mode = "cluster"

Definition at line 156 of file Parallel.py.

◆ ncpus

GaudiMP.Parallel.WorkManager.ncpus = multiprocessing.cpu_count()

Definition at line 147 of file Parallel.py.

◆ pool

GaudiMP.Parallel.WorkManager.pool = multiprocessing.Pool(self.ncpus)

Definition at line 158 of file Parallel.py.

◆ ppservers

GaudiMP.Parallel.WorkManager.ppservers = ppservers

Definition at line 153 of file Parallel.py.

◆ server

GaudiMP.Parallel.WorkManager.server = pp.Server(ncpus=self.ncpus, ppservers=self.ppservers)

Definition at line 155 of file Parallel.py.

◆ sessions

list GaudiMP.Parallel.WorkManager.sessions = [SshSession(srv) for srv in ppservers]

Definition at line 154 of file Parallel.py.

◆ stats

dict GaudiMP.Parallel.WorkManager.stats = {}

Definition at line 160 of file Parallel.py.


The documentation for this class was generated from the following file: