ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Calorimeter
CaloRecGPU
CaloRecGPU
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
17
#include "
AthenaInterprocess/Incidents.h
"
18
19
26
27
class
CaloGPUCUDAInitialization
:
virtual
public
IIncidentListener
28
{
29
protected
:
30
31
33
virtual
StatusCode
initialize_non_CUDA
()
34
{
35
return
StatusCode::SUCCESS;
36
}
37
39
virtual
StatusCode
initialize_CUDA
()
40
{
41
return
StatusCode::SUCCESS;
42
}
43
44
virtual
StatusCode
initialize
()
45
{
46
ATH_CHECK
(this->
initialize_non_CUDA
());
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
ATH_CHECK
#define ATH_CHECK
Evaluate an expression and check for errors.
Definition
AthCheckMacros.h:40
Incidents.h
AthenaInterprocess::UpdateAfterFork::type
static const std::string & type()
Incident type.
Definition
Incidents.h:49
CaloGPUCUDAInitialization
Base class to provide some basic common infrastructure for initializing CUDA only at the right place ...
Definition
CaloGPUCUDAInitialization.h:28
CaloGPUCUDAInitialization::~CaloGPUCUDAInitialization
virtual ~CaloGPUCUDAInitialization()=default
CaloGPUCUDAInitialization::initialize
virtual StatusCode initialize()
Definition
CaloGPUCUDAInitialization.h:44
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
CaloGPUCUDAInitialization::initialize_non_CUDA
virtual StatusCode initialize_non_CUDA()
Initialization that does not invoke CUDA functions.
Definition
CaloGPUCUDAInitialization.h:33
ServiceHandle
Definition
ClusterMakerTool.h:36
Generated on
for ATLAS Offline Software by
1.17.0