ATLAS Offline Software
CaloGPUCUDAInitialization.h
Go to the documentation of this file.
1 //
2 // Copyright (C) 2002-2024 CERN for the benefit of the ATLAS collaboration
3 //
4 // Dear emacs, this is -*- c++ -*-
5 //
6 
7 #ifndef CALORECGPU_CALOGPUCUDAINITIALIZATION_H
8 #define CALORECGPU_CALOGPUCUDAINITIALIZATION_H
9 
10 #include "GaudiKernel/IProperty.h"
11 
12 #include "GaudiKernel/IIncidentListener.h"
13 #include "GaudiKernel/IIncidentSvc.h"
14 #include "GaudiKernel/ServiceHandle.h"
15 #include "GaudiKernel/ConcurrencyFlags.h"
16 
18 
19 
27 class CaloGPUCUDAInitialization : virtual public IIncidentListener
28 {
29  protected:
30 
31 
34  {
35  return StatusCode::SUCCESS;
36  }
37 
40  {
41  return StatusCode::SUCCESS;
42  }
43 
45  {
47 
48  const bool is_multiprocess = (Gaudi::Concurrency::ConcurrencyFlags::numProcs() > 0);
49 
50  if (is_multiprocess)
51  {
52  ServiceHandle<IIncidentSvc> incidentSvc("IncidentSvc","CaloGPUCUDAInitialization");
53 
54  incidentSvc->addListener(this, AthenaInterprocess::UpdateAfterFork::type());
55  }
56  else
57  {
58  ATH_CHECK(this->initialize_CUDA());
59  }
60 
61  return StatusCode::SUCCESS;
62  }
63 
64  public:
65 
66  void handle(const Incident & incident) override
67  {
68  const bool is_multiprocess = (Gaudi::Concurrency::ConcurrencyFlags::numProcs() > 0);
69  if (is_multiprocess && incident.type() == AthenaInterprocess::UpdateAfterFork::type())
70  {
71  if (!this->initialize_CUDA().isSuccess())
72  {
73  throw GaudiException("Failed to perform the CUDA initialization!",
74  "CaloGPUCUDAInitialization::handle",
75  StatusCode::FAILURE);
76  }
77  }
78  }
79 
80  virtual ~CaloGPUCUDAInitialization() = default;
81 
82 };
83 
84 #endif //CALORECGPU_CALOGPUTIMED_H
CaloGPUCUDAInitialization::~CaloGPUCUDAInitialization
virtual ~CaloGPUCUDAInitialization()=default
CaloGPUCUDAInitialization::initialize
virtual StatusCode initialize()
Definition: CaloGPUCUDAInitialization.h:44
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
Incidents.h
ATH_CHECK
#define ATH_CHECK
Definition: AthCheckMacros.h:40
CaloGPUCUDAInitialization
Base class to provide some basic common infrastructure for initializing CUDA only at the right place ...
Definition: CaloGPUCUDAInitialization.h:28
CaloGPUCUDAInitialization::initialize_non_CUDA
virtual StatusCode initialize_non_CUDA()
Initialization that does not invoke CUDA functions.
Definition: CaloGPUCUDAInitialization.h:33
AthenaInterprocess::UpdateAfterFork::type
static const std::string & type()
Incident type.
Definition: Incidents.h:49
CaloGPUCUDAInitialization::initialize_CUDA
virtual StatusCode initialize_CUDA()
Initialization that invokes CUDA functions.
Definition: CaloGPUCUDAInitialization.h:39
CaloGPUCUDAInitialization::handle
void handle(const Incident &incident) override
Definition: CaloGPUCUDAInitialization.h:66
ServiceHandle< IIncidentSvc >