From ac25951f657265fc0324b219015a9dfded6c691d Mon Sep 17 00:00:00 2001 From: Giulio Eulisse <10544+ktf@users.noreply.github.com> Date: Mon, 21 Sep 2026 21:27:57 +0200 Subject: [PATCH] Common: put the namespace-scope constants in the constant address space MSL requires every program-scope variable to live in the constant address space. GPUglobalconstexpr() already spells that out per backend, so the constants that reach device code go through it: the particle masses in PhysicsConstants.h, which arrive via PID.h, and the LHC timing and TPC geometry constants. --- .../include/CommonConstants/LHCConstants.h | 14 +- .../CommonConstants/PhysicsConstants.h | 276 +++++++++--------- .../CommonConstants/make_pdg_header.py | 2 +- .../TPC/include/DataFormatsTPC/Defs.h | 6 +- 4 files changed, 150 insertions(+), 148 deletions(-) diff --git a/Common/Constants/include/CommonConstants/LHCConstants.h b/Common/Constants/include/CommonConstants/LHCConstants.h index 1582f2166ca0f..38ac3d7b18433 100644 --- a/Common/Constants/include/CommonConstants/LHCConstants.h +++ b/Common/Constants/include/CommonConstants/LHCConstants.h @@ -30,13 +30,13 @@ enum BeamDirection : int { BeamA, // beamA = beam 0, NBeamDirections, InteractingBC = -1 // as used in the BunchFilling class }; -GPUglobalconstexpr() int LHCMaxBunches = 3564; // max N bunches -constexpr double LHCRFFreq = 400.789e6; // LHC RF frequency in Hz -constexpr double LHCBunchSpacingNS = 10 * 1.e9 / LHCRFFreq; // bunch spacing in ns (10 RFbuckets) -constexpr double LHCOrbitNS = LHCMaxBunches * LHCBunchSpacingNS; // orbit duration in ns -constexpr double LHCRevFreq = 1.e9 / LHCOrbitNS; // revolution frequency -constexpr double LHCBunchSpacingMUS = LHCBunchSpacingNS * 1e-3; // bunch spacing in \mus (10 RFbuckets) -constexpr double LHCOrbitMUS = LHCOrbitNS * 1e-3; // orbit duration in \mus +GPUglobalconstexpr() int LHCMaxBunches = 3564; // max N bunches +GPUglobalconstexpr() double LHCRFFreq = 400.789e6; // LHC RF frequency in Hz +GPUglobalconstexpr() double LHCBunchSpacingNS = 10 * 1.e9 / LHCRFFreq; // bunch spacing in ns (10 RFbuckets) +GPUglobalconstexpr() double LHCOrbitNS = LHCMaxBunches * LHCBunchSpacingNS; // orbit duration in ns +GPUglobalconstexpr() double LHCRevFreq = 1.e9 / LHCOrbitNS; // revolution frequency +GPUglobalconstexpr() double LHCBunchSpacingMUS = LHCBunchSpacingNS * 1e-3; // bunch spacing in \mus (10 RFbuckets) +GPUglobalconstexpr() double LHCOrbitMUS = LHCOrbitNS * 1e-3; // orbit duration in \mus GPUglobalconstexpr() unsigned int MaxNOrbits = 0xffffffff; // Offsets of A, C beam bunches at P2 diff --git a/Common/Constants/include/CommonConstants/PhysicsConstants.h b/Common/Constants/include/CommonConstants/PhysicsConstants.h index 051fb6d2a6e89..b9a5ffb7a7251 100644 --- a/Common/Constants/include/CommonConstants/PhysicsConstants.h +++ b/Common/Constants/include/CommonConstants/PhysicsConstants.h @@ -18,6 +18,8 @@ #ifndef ALICEO2_PHYSICSCONSTANTS_H_ #define ALICEO2_PHYSICSCONSTANTS_H_ +#include "GPUCommonDef.h" + namespace o2::constants::physics { // particles masses @@ -102,153 +104,153 @@ enum Pdg { }; /// \brief Declarations of masses for additional particles -constexpr double MassEta = 0.547862; -constexpr double MassOmega = 0.78266; -constexpr double MassEtaPrime = 0.95778; -constexpr double MassB0 = 5.27966; -constexpr double MassB0Bar = 5.27966; -constexpr double MassBPlus = 5.27934; -constexpr double MassBCPlus = 6.27447; -constexpr double MassBS = 5.36692; -constexpr double MassBSBar = 5.36692; -constexpr double MassD0 = 1.86484; -constexpr double MassD0Bar = 1.86484; -constexpr double MassD0StarPlus = 2.272; -constexpr double MassD0Star0 = 2.343; -constexpr double MassD1Plus = 2.372; -constexpr double MassD10 = 2.412; -constexpr double MassD2StarPlus = 2.4601; -constexpr double MassD2Star0 = 2.4611; -constexpr double MassDMinus = 1.86966; -constexpr double MassDPlus = 1.86966; -constexpr double MassDS = 1.96835; -constexpr double MassDSBar = 1.96835; -constexpr double MassDSStar = 2.1122; -constexpr double MassDS1 = 2.53511; -constexpr double MassDS1Star2700 = 2.714; -constexpr double MassDS1Star2860 = 2.859; -constexpr double MassDS2Star = 2.5691; -constexpr double MassDS3Star2860 = 2.86; -constexpr double MassDStar = 2.01026; -constexpr double MassDStar0 = 2.00685; -constexpr double MassChiC1 = 3.51067; -constexpr double MassJPsi = 3.0969; -constexpr double MassLambdaB0 = 5.6196; -constexpr double MassLambdaCPlus = 2.28646; -constexpr double MassLambdaCPlus2860 = 2.8561; -constexpr double MassLambdaCPlus2880 = 2.8816; -constexpr double MassLambdaCPlus2940 = 2.9396; -constexpr double MassOmegaC0 = 2.6952; -constexpr double MassK0Star892 = 0.89555; -constexpr double MassKPlusStar892 = 0.89167; -constexpr double MassPhi = 1.019461; -constexpr double MassSigmaC0 = 2.45375; -constexpr double MassSigmaCPlusPlus = 2.45397; -constexpr double MassSigmaCStar0 = 2.51848; -constexpr double MassSigmaCStarPlusPlus = 2.51841; -constexpr double MassX3872 = 3.87165; -constexpr double MassXi0 = 1.31486; -constexpr double MassXiB0 = 5.7919; -constexpr double MassXiCCPlusPlus = 3.62155; -constexpr double MassXiCPlus = 2.46771; -constexpr double MassXiC0 = 2.47044; -constexpr double MassXiC3055Plus = 3.0559; -constexpr double MassXiC3080Plus = 3.0772; -constexpr double MassXiC3055_0 = 3.059; -constexpr double MassXiC3080_0 = 3.0799; -constexpr double MassDeuteron = 1.87561294257; -constexpr double MassTriton = 2.80892113298; -constexpr double MassHelium3 = 2.80839160743; -constexpr double MassAlpha = 3.7273794066; -constexpr double MassLithium4 = 3.7513; -constexpr double MassHyperTriton = 2.991134; -constexpr double MassHyperHydrogen4 = 3.922434; -constexpr double MassHyperHelium4 = 3.921728; -constexpr double MassHyperHelium5 = 4.839961; -constexpr double MassHyperHelium4Sigma = 3.995; -constexpr double MassLambda1520_Py = 1.5195; -constexpr double MassK1_1270_0 = 1.253; -constexpr double MassK1_1270Plus = 1.272; -constexpr double MassCDeuteron = 3.226; +GPUglobalconstexpr() double MassEta = 0.547862; +GPUglobalconstexpr() double MassOmega = 0.78266; +GPUglobalconstexpr() double MassEtaPrime = 0.95778; +GPUglobalconstexpr() double MassB0 = 5.27966; +GPUglobalconstexpr() double MassB0Bar = 5.27966; +GPUglobalconstexpr() double MassBPlus = 5.27934; +GPUglobalconstexpr() double MassBCPlus = 6.27447; +GPUglobalconstexpr() double MassBS = 5.36692; +GPUglobalconstexpr() double MassBSBar = 5.36692; +GPUglobalconstexpr() double MassD0 = 1.86484; +GPUglobalconstexpr() double MassD0Bar = 1.86484; +GPUglobalconstexpr() double MassD0StarPlus = 2.272; +GPUglobalconstexpr() double MassD0Star0 = 2.343; +GPUglobalconstexpr() double MassD1Plus = 2.372; +GPUglobalconstexpr() double MassD10 = 2.412; +GPUglobalconstexpr() double MassD2StarPlus = 2.4601; +GPUglobalconstexpr() double MassD2Star0 = 2.4611; +GPUglobalconstexpr() double MassDMinus = 1.86966; +GPUglobalconstexpr() double MassDPlus = 1.86966; +GPUglobalconstexpr() double MassDS = 1.96835; +GPUglobalconstexpr() double MassDSBar = 1.96835; +GPUglobalconstexpr() double MassDSStar = 2.1122; +GPUglobalconstexpr() double MassDS1 = 2.53511; +GPUglobalconstexpr() double MassDS1Star2700 = 2.714; +GPUglobalconstexpr() double MassDS1Star2860 = 2.859; +GPUglobalconstexpr() double MassDS2Star = 2.5691; +GPUglobalconstexpr() double MassDS3Star2860 = 2.86; +GPUglobalconstexpr() double MassDStar = 2.01026; +GPUglobalconstexpr() double MassDStar0 = 2.00685; +GPUglobalconstexpr() double MassChiC1 = 3.51067; +GPUglobalconstexpr() double MassJPsi = 3.0969; +GPUglobalconstexpr() double MassLambdaB0 = 5.6196; +GPUglobalconstexpr() double MassLambdaCPlus = 2.28646; +GPUglobalconstexpr() double MassLambdaCPlus2860 = 2.8561; +GPUglobalconstexpr() double MassLambdaCPlus2880 = 2.8816; +GPUglobalconstexpr() double MassLambdaCPlus2940 = 2.9396; +GPUglobalconstexpr() double MassOmegaC0 = 2.6952; +GPUglobalconstexpr() double MassK0Star892 = 0.89555; +GPUglobalconstexpr() double MassKPlusStar892 = 0.89167; +GPUglobalconstexpr() double MassPhi = 1.019461; +GPUglobalconstexpr() double MassSigmaC0 = 2.45375; +GPUglobalconstexpr() double MassSigmaCPlusPlus = 2.45397; +GPUglobalconstexpr() double MassSigmaCStar0 = 2.51848; +GPUglobalconstexpr() double MassSigmaCStarPlusPlus = 2.51841; +GPUglobalconstexpr() double MassX3872 = 3.87165; +GPUglobalconstexpr() double MassXi0 = 1.31486; +GPUglobalconstexpr() double MassXiB0 = 5.7919; +GPUglobalconstexpr() double MassXiCCPlusPlus = 3.62155; +GPUglobalconstexpr() double MassXiCPlus = 2.46771; +GPUglobalconstexpr() double MassXiC0 = 2.47044; +GPUglobalconstexpr() double MassXiC3055Plus = 3.0559; +GPUglobalconstexpr() double MassXiC3080Plus = 3.0772; +GPUglobalconstexpr() double MassXiC3055_0 = 3.059; +GPUglobalconstexpr() double MassXiC3080_0 = 3.0799; +GPUglobalconstexpr() double MassDeuteron = 1.87561294257; +GPUglobalconstexpr() double MassTriton = 2.80892113298; +GPUglobalconstexpr() double MassHelium3 = 2.80839160743; +GPUglobalconstexpr() double MassAlpha = 3.7273794066; +GPUglobalconstexpr() double MassLithium4 = 3.7513; +GPUglobalconstexpr() double MassHyperTriton = 2.991134; +GPUglobalconstexpr() double MassHyperHydrogen4 = 3.922434; +GPUglobalconstexpr() double MassHyperHelium4 = 3.921728; +GPUglobalconstexpr() double MassHyperHelium5 = 4.839961; +GPUglobalconstexpr() double MassHyperHelium4Sigma = 3.995; +GPUglobalconstexpr() double MassLambda1520_Py = 1.5195; +GPUglobalconstexpr() double MassK1_1270_0 = 1.253; +GPUglobalconstexpr() double MassK1_1270Plus = 1.272; +GPUglobalconstexpr() double MassCDeuteron = 3.226; /// \brief Declarations of masses for particles in ROOT PDG_t -constexpr double MassDown = 0.00467; -constexpr double MassDownBar = 0.00467; -constexpr double MassUp = 0.00216; -constexpr double MassUpBar = 0.00216; -constexpr double MassStrange = 0.0934; -constexpr double MassStrangeBar = 0.0934; -constexpr double MassCharm = 1.27; -constexpr double MassCharmBar = 1.27; -constexpr double MassBottom = 4.18; -constexpr double MassBottomBar = 4.18; -constexpr double MassTop = 172.5; -constexpr double MassTopBar = 172.5; -constexpr double MassGluon = 0.0; -constexpr double MassElectron = 0.000510999; -constexpr double MassPositron = 0.000510999; -constexpr double MassNuE = 0.0; -constexpr double MassNuEBar = 0.0; -constexpr double MassMuonMinus = 0.1056584; -constexpr double MassMuonPlus = 0.1056584; -constexpr double MassNuMu = 0.0; -constexpr double MassNuMuBar = 0.0; -constexpr double MassTauMinus = 1.77686; -constexpr double MassTauPlus = 1.77686; -constexpr double MassNuTau = 0.0; -constexpr double MassNuTauBar = 0.0; -constexpr double MassGamma = 0.0; -constexpr double MassZ0 = 91.1876; -constexpr double MassWPlus = 80.377; -constexpr double MassWMinus = 80.377; -constexpr double MassPi0 = 0.1349768; -constexpr double MassK0Long = 0.497611; -constexpr double MassPiPlus = 0.1395704; -constexpr double MassPiMinus = 0.1395704; -constexpr double MassProton = 0.9382721; -constexpr double MassProtonBar = 0.9382721; -constexpr double MassNeutron = 0.9395654; -constexpr double MassNeutronBar = 0.9395654; -constexpr double MassK0Short = 0.497611; -constexpr double MassK0 = 0.497611; -constexpr double MassK0Bar = 0.497611; -constexpr double MassKPlus = 0.493677; -constexpr double MassKMinus = 0.493677; -constexpr double MassLambda0 = 1.115683; -constexpr double MassLambda0Bar = 1.115683; -constexpr double MassLambda1520 = 1.519; -constexpr double MassSigmaMinus = 1.197449; -constexpr double MassSigmaBarPlus = 1.197449; -constexpr double MassSigmaPlus = 1.18937; -constexpr double MassSigmaBarMinus = 1.18937; -constexpr double MassSigma0 = 1.192642; -constexpr double MassSigma0Bar = 1.192642; -constexpr double MassXiMinus = 1.32171; -constexpr double MassXiPlusBar = 1.32171; -constexpr double MassOmegaMinus = 1.67245; -constexpr double MassOmegaPlusBar = 1.67245; +GPUglobalconstexpr() double MassDown = 0.00467; +GPUglobalconstexpr() double MassDownBar = 0.00467; +GPUglobalconstexpr() double MassUp = 0.00216; +GPUglobalconstexpr() double MassUpBar = 0.00216; +GPUglobalconstexpr() double MassStrange = 0.0934; +GPUglobalconstexpr() double MassStrangeBar = 0.0934; +GPUglobalconstexpr() double MassCharm = 1.27; +GPUglobalconstexpr() double MassCharmBar = 1.27; +GPUglobalconstexpr() double MassBottom = 4.18; +GPUglobalconstexpr() double MassBottomBar = 4.18; +GPUglobalconstexpr() double MassTop = 172.5; +GPUglobalconstexpr() double MassTopBar = 172.5; +GPUglobalconstexpr() double MassGluon = 0.0; +GPUglobalconstexpr() double MassElectron = 0.000510999; +GPUglobalconstexpr() double MassPositron = 0.000510999; +GPUglobalconstexpr() double MassNuE = 0.0; +GPUglobalconstexpr() double MassNuEBar = 0.0; +GPUglobalconstexpr() double MassMuonMinus = 0.1056584; +GPUglobalconstexpr() double MassMuonPlus = 0.1056584; +GPUglobalconstexpr() double MassNuMu = 0.0; +GPUglobalconstexpr() double MassNuMuBar = 0.0; +GPUglobalconstexpr() double MassTauMinus = 1.77686; +GPUglobalconstexpr() double MassTauPlus = 1.77686; +GPUglobalconstexpr() double MassNuTau = 0.0; +GPUglobalconstexpr() double MassNuTauBar = 0.0; +GPUglobalconstexpr() double MassGamma = 0.0; +GPUglobalconstexpr() double MassZ0 = 91.1876; +GPUglobalconstexpr() double MassWPlus = 80.377; +GPUglobalconstexpr() double MassWMinus = 80.377; +GPUglobalconstexpr() double MassPi0 = 0.1349768; +GPUglobalconstexpr() double MassK0Long = 0.497611; +GPUglobalconstexpr() double MassPiPlus = 0.1395704; +GPUglobalconstexpr() double MassPiMinus = 0.1395704; +GPUglobalconstexpr() double MassProton = 0.9382721; +GPUglobalconstexpr() double MassProtonBar = 0.9382721; +GPUglobalconstexpr() double MassNeutron = 0.9395654; +GPUglobalconstexpr() double MassNeutronBar = 0.9395654; +GPUglobalconstexpr() double MassK0Short = 0.497611; +GPUglobalconstexpr() double MassK0 = 0.497611; +GPUglobalconstexpr() double MassK0Bar = 0.497611; +GPUglobalconstexpr() double MassKPlus = 0.493677; +GPUglobalconstexpr() double MassKMinus = 0.493677; +GPUglobalconstexpr() double MassLambda0 = 1.115683; +GPUglobalconstexpr() double MassLambda0Bar = 1.115683; +GPUglobalconstexpr() double MassLambda1520 = 1.519; +GPUglobalconstexpr() double MassSigmaMinus = 1.197449; +GPUglobalconstexpr() double MassSigmaBarPlus = 1.197449; +GPUglobalconstexpr() double MassSigmaPlus = 1.18937; +GPUglobalconstexpr() double MassSigmaBarMinus = 1.18937; +GPUglobalconstexpr() double MassSigma0 = 1.192642; +GPUglobalconstexpr() double MassSigma0Bar = 1.192642; +GPUglobalconstexpr() double MassXiMinus = 1.32171; +GPUglobalconstexpr() double MassXiPlusBar = 1.32171; +GPUglobalconstexpr() double MassOmegaMinus = 1.67245; +GPUglobalconstexpr() double MassOmegaPlusBar = 1.67245; // END OF THE GENERATED BLOCK // legacy names -constexpr double MassPhoton = MassGamma; -constexpr double MassMuon = MassMuonMinus; -constexpr double MassPionCharged = MassPiPlus; -constexpr double MassPionNeutral = MassPi0; -constexpr double MassKaonCharged = MassKPlus; -constexpr double MassKaonNeutral = MassK0; -constexpr double MassLambda = MassLambda0; -constexpr double MassHyperhydrog4 = MassHyperHydrogen4; -constexpr double MassHyperhelium4 = MassHyperHelium4; -constexpr double MassHyperhelium4sigma = MassHyperHelium4Sigma; +GPUglobalconstexpr() double MassPhoton = MassGamma; +GPUglobalconstexpr() double MassMuon = MassMuonMinus; +GPUglobalconstexpr() double MassPionCharged = MassPiPlus; +GPUglobalconstexpr() double MassPionNeutral = MassPi0; +GPUglobalconstexpr() double MassKaonCharged = MassKPlus; +GPUglobalconstexpr() double MassKaonNeutral = MassK0; +GPUglobalconstexpr() double MassLambda = MassLambda0; +GPUglobalconstexpr() double MassHyperhydrog4 = MassHyperHydrogen4; +GPUglobalconstexpr() double MassHyperhelium4 = MassHyperHelium4; +GPUglobalconstexpr() double MassHyperhelium4sigma = MassHyperHelium4Sigma; // Light speed -constexpr float LightSpeedCm2S = 299792458.e2; // C in cm/s -constexpr float LightSpeedCm2NS = LightSpeedCm2S * 1e-9; // C in cm/ns -constexpr float LightSpeedCm2PS = LightSpeedCm2S * 1e-12; // C in cm/ps +GPUglobalconstexpr() float LightSpeedCm2S = 299792458.e2; // C in cm/s +GPUglobalconstexpr() float LightSpeedCm2NS = LightSpeedCm2S * 1e-9; // C in cm/ns +GPUglobalconstexpr() float LightSpeedCm2PS = LightSpeedCm2S * 1e-12; // C in cm/ps // Light speed inverse -constexpr float invLightSpeedCm2PS = 1. / LightSpeedCm2PS; // 1/C in ps/cm +GPUglobalconstexpr() float invLightSpeedCm2PS = 1. / LightSpeedCm2PS; // 1/C in ps/cm } // namespace o2::constants::physics diff --git a/Common/Constants/include/CommonConstants/make_pdg_header.py b/Common/Constants/include/CommonConstants/make_pdg_header.py index b2dac688fd098..471aed64e8dcc 100755 --- a/Common/Constants/include/CommonConstants/make_pdg_header.py +++ b/Common/Constants/include/CommonConstants/make_pdg_header.py @@ -171,7 +171,7 @@ def mass(code): def declare_mass(pdg, mass_type="double") -> str: """Returns a C++ declaration of a particle mass constant.""" - return f"constexpr {mass_type} Mass{pdg.name[1:]} = {mass(pdg.value)};" + return f"GPUglobalconstexpr() {mass_type} Mass{pdg.name[1:]} = {mass(pdg.value)};" def main(): diff --git a/DataFormats/Detectors/TPC/include/DataFormatsTPC/Defs.h b/DataFormats/Detectors/TPC/include/DataFormatsTPC/Defs.h index a5be0da32f641..5c6e49f32e4ed 100644 --- a/DataFormats/Detectors/TPC/include/DataFormatsTPC/Defs.h +++ b/DataFormats/Detectors/TPC/include/DataFormatsTPC/Defs.h @@ -42,9 +42,9 @@ enum Side { A = 0, GPUglobalconstexpr() unsigned char SECTORSPERSIDE = 18; GPUglobalconstexpr() unsigned char SIDES = 2; -constexpr double PI = 3.14159265358979323846; -constexpr double TWOPI = 2. * PI; -constexpr double SECPHIWIDTH = TWOPI / 18.; +GPUglobalconstexpr() double PI = 3.14159265358979323846; +GPUglobalconstexpr() double TWOPI = 2. * PI; +GPUglobalconstexpr() double SECPHIWIDTH = TWOPI / 18.; /// TPC ROC types enum RocType { IROC = 0,