Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
d482315
Write tracked V0s, cascades and 3-bodies in collision order (#15838)
sawenzel Sep 24, 2026
52af41a
Ship the NIEL damage weights as CSV (#15841)
sawenzel Sep 24, 2026
9a93b68
GPU: route noexcept through GPUnoexcept() for Metal
ktf Sep 24, 2026
4f90725
Give the MFT support volume a name of its own
sawenzel Sep 24, 2026
dccd039
GPU: three additional Metal adaptations
ktf Sep 24, 2026
42e7264
GPUTracking: give Metal its own Float16_t at the conversion site
ktf Sep 25, 2026
b5768c9
Use ClassDefOverride in the derived interaction samplers
sawenzel Sep 25, 2026
341b315
Terminate the LinkDef rules that rootcling rejected
sawenzel Sep 25, 2026
2e6f841
ITSMFT: unify cellular automaton tracking for ITS and MFT
mpuccio Sep 25, 2026
4d42b5b
Fix the merger exit-status check in o2-sim
sawenzel Sep 24, 2026
adb24c4
Do not cache external-kinematics generators in the primary server
sawenzel Sep 24, 2026
4957f17
Skip malformed info requests in the primary server
sawenzel Sep 24, 2026
4b704ea
Fix the event-flush loop of the o2-sim hit merger
sawenzel Sep 24, 2026
ba873ef
Release per-event buffers in the o2-sim hit merger
sawenzel Sep 24, 2026
47c5a64
Initialise the output pointers of the o2-sim hit merger
sawenzel Sep 24, 2026
614ac84
Finish detector events before sending hits in parallel o2-sim
sawenzel Sep 24, 2026
c5c3d22
Make the shared-memory hit-buffer busy flag atomic
sawenzel Sep 24, 2026
8751577
Remove the o2-sim shared-memory segment when its last user detaches
sawenzel Sep 24, 2026
33345fb
Send the hit transport mode with the hits in o2-sim
sawenzel Sep 24, 2026
772a0cf
Adopt decoded hit containers in the o2-sim hit merger
sawenzel Sep 24, 2026
8876f2c
Move instead of copy when merging hits in the o2-sim hit merger
sawenzel Sep 24, 2026
bbd63ce
Flush the output files of the o2-sim hit merger concurrently
sawenzel Sep 24, 2026
2912c67
Move the o2-sim device implementations into source files
sawenzel Sep 24, 2026
d292355
Create the hit-merger detector instances from a table
sawenzel Sep 24, 2026
900b5e4
Keep the hit-merger hit buffers as a detector member
sawenzel Sep 24, 2026
bf6a591
GPU: extend two existing OpenCL device workarounds to Metal
ktf Sep 25, 2026
e9ab21f
Move the Geant4 run configuration from FastSim to gconfig
sawenzel Sep 25, 2026
238a5e3
Relax the Geant4 field epsilons outside the muon spectrometer
sawenzel Sep 25, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Common/MathUtils/include/MathUtils/SMatrixGPU.h
Original file line number Diff line number Diff line change
Expand Up @@ -518,7 +518,7 @@ class SMatrixGPU
R mRep;
};

#if !defined(__OPENCL__) && !defined(__METAL__) // TODO: current C++ for OpenCL 2021 and MSL 4.1 are both at C++17, so no concepts. But we don't need this trick there anyway, so we can just hide it.
#if __cplusplus >= 202002L // the constraint below is a requires-clause; we do not need the trick where there are no concepts
template <class T, unsigned int D1, unsigned int D2, class R, typename Y, typename X = Y>
requires(sizeof(typename X::traits_type::pos_type) != 0) // do not provide a template to fair::Logger, etc... (pos_type is a member type of all std::ostream classes)
GPUd() X& operator<<(Y& y, const SMatrixGPU<T, D1, D2, R>&)
Expand Down
14 changes: 8 additions & 6 deletions Common/MathUtils/include/MathUtils/detail/Bracket.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
#ifndef ALICEO2_BRACKET_H
#define ALICEO2_BRACKET_H

#include "GPUCommonDef.h"

#include <GPUCommonRtypes.h>
#ifndef GPUCA_GPUCODE_DEVICE
#include <string>
Expand Down Expand Up @@ -53,9 +55,9 @@ class Bracket
bool operator==(const Bracket<T>& other) const;
bool operator!=(const Bracket<T>& other) const;

void setMax(T v) noexcept;
void setMin(T v) noexcept;
void set(T minv, T maxv) noexcept;
void setMax(T v) GPUnoexcept();
void setMin(T v) GPUnoexcept();
void set(T minv, T maxv) GPUnoexcept();

T& getMax();
T& getMin();
Expand Down Expand Up @@ -129,19 +131,19 @@ inline bool Bracket<T>::operator!=(const Bracket<T>& rhs) const
}

template <typename T>
inline void Bracket<T>::setMax(T v) noexcept
inline void Bracket<T>::setMax(T v) GPUnoexcept()
{
mMax = v;
}

template <typename T>
inline void Bracket<T>::setMin(T v) noexcept
inline void Bracket<T>::setMin(T v) GPUnoexcept()
{
mMin = v;
}

template <typename T>
inline void Bracket<T>::set(T minv, T maxv) noexcept
inline void Bracket<T>::set(T minv, T maxv) GPUnoexcept()
{
this->setMin(minv);
this->setMax(maxv);
Expand Down
6 changes: 5 additions & 1 deletion Common/Utils/src/ShmManager.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ bool ShmManager::createGlobalSegment(int nsegments)
LOG(info) << "CREATING SIM SHARED MEM SEGMENT FOR " << nsegments << " WORKERS";
// LOG(info) << "SIZEOF ShmMetaInfo " << sizeof(ShmMetaInfo);
const auto totalsize = sizeof(ShmMetaInfo) + SHMPOOLSIZE * nsegments;
if ((mShmID = shmget(IPC_PRIVATE, totalsize, IPC_CREAT | 0666)) == -1) {
if ((mShmID = shmget(IPC_PRIVATE, totalsize, IPC_CREAT | 0600)) == -1) {
perror("shmget: shmget failed");
} else {
// We are attaching once to determine a common virtual address under which everyone else should attach.
Expand All @@ -143,6 +143,10 @@ bool ShmManager::createGlobalSegment(int nsegments)
// TODO: consider using named posix shared memory segments to avoid this
setenv(SHMIDNAME, std::to_string(mShmID).c_str(), 1);
setenv(SHMADDRNAME, std::to_string((unsigned long long)(addr)).c_str(), 1);

// mark the segment for removal right away: Linux still lets the workers attach by id,
// and the kernel frees it when the last process detaches, even after a crash
shmctl(mShmID, IPC_RMID, nullptr);
return true;
}
LOG(info) << "SHARED MEM INITIALIZED AT ID " << mShmID;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ class FixedSkipBC_InteractionSampler : public InteractionSampler
private:
int mEveryN; // the skip number ---> fills every N-th BC in the bunch filling scheme
int mMultiplicity; // how many events to put if bc is filled
ClassDef(FixedSkipBC_InteractionSampler, 1);
ClassDefOverride(FixedSkipBC_InteractionSampler, 1);
};

// A version of the interaction sampler which can sample according to non-uniform mu(bc) as
Expand All @@ -152,7 +152,7 @@ class NonUniformMuInteractionSampler : public InteractionSampler
private:
// non-uniformity
std::vector<float> mBCIntensityScales;
ClassDef(NonUniformMuInteractionSampler, 1);
ClassDefOverride(NonUniformMuInteractionSampler, 1);
};

} // namespace steer
Expand Down
14 changes: 8 additions & 6 deletions Detectors/AOD/src/AODProducerWorkflowSpec.cxx
Original file line number Diff line number Diff line change
Expand Up @@ -1527,7 +1527,7 @@ void AODProducerWorkflowDPL::prepareStrangenessTracking(const o2::globaltracking
std::exclusive_scan(mVertexStrLUT.begin(), mVertexStrLUT.end(), mVertexStrLUT.begin(), 0);

// sort by collision ID
std::sort(mCollisionStrTrk.begin(), mCollisionStrTrk.end(), [](const auto& a, const auto& b) { return a.first < b.first; });
std::stable_sort(mCollisionStrTrk.begin(), mCollisionStrTrk.end(), [](const auto& a, const auto& b) { return a.first < b.first; });
mStrTrkIndices.clear();
mStrTrkIndices.resize(mCollisionStrTrk.size(), -1);
}
Expand All @@ -1536,7 +1536,6 @@ template <typename V0C, typename CC, typename D3BC>
void AODProducerWorkflowDPL::fillStrangenessTrackingTables(const o2::globaltracking::RecoContainer& recoData, V0C& v0Curs, CC& cascCurs, D3BC& d3BodyCurs)
{
int itsTableIdx = -1;
int sTrkID = 0;
int nV0 = 0;
int nCasc = 0;
int nD3Body = 0;
Expand All @@ -1555,7 +1554,10 @@ void AODProducerWorkflowDPL::fillStrangenessTrackingTables(const o2::globaltrack
cascCurs.reserve(nCasc);
d3BodyCurs.reserve(nD3Body);

for (const auto& sTrk : recoData.getStrangeTracks()) {
// Write the rows grouped by collision, the order analyses slice these tables in
auto sTracks = recoData.getStrangeTracks();
for (const auto& collStrTrk : mCollisionStrTrk) {
const auto& sTrk = sTracks[collStrTrk.second];
auto ITSIndex = GIndex{sTrk.mITSRef, GIndex::ITS};
auto item = mGIDToTableID.find(ITSIndex);
if (item != mGIDToTableID.end()) {
Expand All @@ -1565,7 +1567,7 @@ void AODProducerWorkflowDPL::fillStrangenessTrackingTables(const o2::globaltrack
continue;
}
if (sTrk.mPartType == dataformats::kStrkV0) {
v0Curs(mStrTrkIndices[sTrkID++],
v0Curs(mStrTrkIndices[collStrTrk.second],
itsTableIdx,
sTrk.mDecayRef,
sTrk.mDecayVtx[0],
Expand All @@ -1577,7 +1579,7 @@ void AODProducerWorkflowDPL::fillStrangenessTrackingTables(const o2::globaltrack
sTrk.mTopoChi2,
sTrk.getAverageClusterSize());
} else if (sTrk.mPartType == dataformats::kStrkCascade) {
cascCurs(mStrTrkIndices[sTrkID++],
cascCurs(mStrTrkIndices[collStrTrk.second],
itsTableIdx,
sTrk.mDecayRef,
sTrk.mDecayVtx[0],
Expand All @@ -1589,7 +1591,7 @@ void AODProducerWorkflowDPL::fillStrangenessTrackingTables(const o2::globaltrack
sTrk.mTopoChi2,
sTrk.getAverageClusterSize());
} else {
d3BodyCurs(mStrTrkIndices[sTrkID++],
d3BodyCurs(mStrTrkIndices[collStrTrk.second],
itsTableIdx,
sTrk.mDecayRef,
sTrk.mDecayVtx[0],
Expand Down
Loading
Loading