ATLAS Offline Software
Loading...
Searching...
No Matches
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
26
27class 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 {
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 {
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
#define ATH_CHECK
Evaluate an expression and check for errors.
static const std::string & type()
Incident type.
Definition Incidents.h:49
Base class to provide some basic common infrastructure for initializing CUDA only at the right place ...
virtual ~CaloGPUCUDAInitialization()=default
virtual StatusCode initialize_CUDA()
Initialization that invokes CUDA functions.
void handle(const Incident &incident) override
virtual StatusCode initialize_non_CUDA()
Initialization that does not invoke CUDA functions.