You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
With using the GPU stack allocator, we cannot in the perPrimaryVertexProcessing push to the stack in initialiseTimeFrame since it is only called once while computeLayerTracklets to findRoads is called once per vertex. In findRoads we tried to clear a tag from a previous iteration while the stack is empty leading to a fatal. This fixes that and avoid creating the tracklet LUT buffer on each pass.
constbool loadFirstPassData = this->mTrkParams[iteration].PassFlags[IterationStep::FirstPass] && iVertex <= 0; // load data only on first pass and first vertex
71
70
for (int iLayer{0}; iLayer < this->mTrkParams[iteration].NLayers; ++iLayer) {
72
-
if (this->mTrkParams[iteration].PassFlags[IterationStep::FirstPass]) {
71
+
if (loadFirstPassData) {
73
72
mTimeFrameGPU->createUsedClustersDevice(iLayer);
74
73
mTimeFrameGPU->loadClustersDevice(iLayer);
75
74
mTimeFrameGPU->loadClustersIndexTables(iLayer);
@@ -78,9 +77,16 @@ void TrackerTraitsGPU<NLayers>::computeLayerTracklets(const int iteration, int i
78
77
mTimeFrameGPU->recordEvent(iLayer);
79
78
}
80
79
80
+
for (int linkId{0}; linkId < hostTopology.nLinks; ++linkId) {
81
+
mTimeFrameGPU->createTrackletsLUTDevice(loadFirstPassData, linkId); // on first pass allocates, then only clears memory
82
+
}
83
+
84
+
// Stack allocations created from trackleting through road finding are scoped to one tracker pass.
85
+
// With per-primary-vertex processing, the chain is called once per vertex while initialisation is only done once.
86
+
mTimeFrameGPU->pushMemoryStack(iteration);
87
+
81
88
for (int linkId{0}; linkId < hostTopology.nLinks; ++linkId) {
0 commit comments