@@ -345,7 +345,7 @@ void TimeFrameGPU<nLayers>::allocMemAsync(void** ptr, size_t size, Stream* strPt
345345 if (extAllocator) {
346346 *ptr = mAllocator ->allocate (size);
347347 } else {
348- LOGP (debug , " Calling default CUDA allocator" );
348+ LOGP (info , " Calling default CUDA allocator" );
349349 checkGPUError (cudaMallocAsync (reinterpret_cast <void **>(ptr), size, strPtr->get ()));
350350 }
351351}
@@ -376,17 +376,11 @@ void TimeFrameGPU<nLayers>::registerHostMemory(const int maxLayers)
376376template <int nLayers>
377377void TimeFrameGPU<nLayers>::unregisterHostMemory(const int maxLayers)
378378{
379- if (!mHostRegistered ) {
380- return ;
381- }
382- for (auto iLayer{0 }; iLayer < maxLayers; ++iLayer) {
383- checkGPUError (cudaHostUnregister (mClusters [iLayer].data ()));
384- checkGPUError (cudaHostUnregister (mNClustersPerROF [iLayer].data ()));
385- checkGPUError (cudaHostUnregister (mIndexTables [iLayer].data ()));
379+ for (auto iLayer{0 }; iLayer < nLayers; ++iLayer) {
380+ checkGPUError (cudaHostUnregister (mTrackingFrameInfo [iLayer].data ()));
386381 }
387- checkGPUError (cudaHostUnregister (mHostNTracklets .data ()));
388- checkGPUError (cudaHostUnregister (mHostNCells .data ()));
389- mHostRegistered = false ;
382+ checkGPUError (cudaHostUnregister (mTrackingFrameInfoDevice .data ()));
383+ mAllocator ->deallocate ();
390384}
391385
392386template <int nLayers>
@@ -525,17 +519,21 @@ void TimeFrameGPU<nLayers>::loadClustersDevice()
525519}
526520
527521template <int nLayers>
528- void TimeFrameGPU<nLayers>::loadTrackingFrameInfoDevice()
522+ void TimeFrameGPU<nLayers>::loadTrackingFrameInfoDevice(const int iteration )
529523{
530524 for (auto iLayer{0 }; iLayer < nLayers; ++iLayer) {
531525 LOGP (debug, " gpu-transfer: loading {} tfinfo on layer {}, for {} MB." , mTrackingFrameInfo [iLayer].size (), iLayer, mTrackingFrameInfo [iLayer].size () * sizeof (TrackingFrameInfo) / MB );
532526 allocMemAsync (reinterpret_cast <void **>(&mTrackingFrameInfoDevice [iLayer]), mTrackingFrameInfo [iLayer].size () * sizeof (TrackingFrameInfo), nullptr , getExtAllocator ());
533527 // Register and move data
534- checkGPUError (cudaHostRegister (mTrackingFrameInfo [iLayer].data (), mTrackingFrameInfo [iLayer].size () * sizeof (TrackingFrameInfo), cudaHostRegisterPortable));
528+ if (!iteration) {
529+ checkGPUError (cudaHostRegister (mTrackingFrameInfo [iLayer].data (), mTrackingFrameInfo [iLayer].size () * sizeof (TrackingFrameInfo), cudaHostRegisterPortable));
530+ }
535531 checkGPUError (cudaMemcpyAsync (mTrackingFrameInfoDevice [iLayer], mTrackingFrameInfo [iLayer].data (), mTrackingFrameInfo [iLayer].size () * sizeof (TrackingFrameInfo), cudaMemcpyHostToDevice, mGpuStreams [0 ].get ()));
536532 }
537533 allocMemAsync (reinterpret_cast <void **>(&mTrackingFrameInfoDeviceArray ), nLayers * sizeof (TrackingFrameInfo*), nullptr , getExtAllocator ());
538- checkGPUError (cudaHostRegister (mTrackingFrameInfoDevice .data (), nLayers * sizeof (TrackingFrameInfo*), cudaHostRegisterPortable));
534+ if (!iteration) {
535+ checkGPUError (cudaHostRegister (mTrackingFrameInfoDevice .data (), nLayers * sizeof (TrackingFrameInfo*), cudaHostRegisterPortable));
536+ }
539537 checkGPUError (cudaMemcpyAsync (mTrackingFrameInfoDeviceArray , mTrackingFrameInfoDevice .data (), nLayers * sizeof (TrackingFrameInfo*), cudaMemcpyHostToDevice, mGpuStreams [0 ].get ()));
540538}
541539
@@ -573,7 +571,7 @@ template <int nLayers>
573571void TimeFrameGPU<nLayers>::loadRoadsDevice()
574572{
575573 LOGP (debug, " gpu-transfer: loading {} roads, for {} MB." , mRoads .size (), mRoads .size () * sizeof (Road<nLayers - 2 >) / MB );
576- allocMemAsync (reinterpret_cast <void **>(&mRoadsDevice ), mRoads .size () * sizeof (Road<nLayers - 2 >), &(mGpuStreams [0 ]), false );
574+ allocMemAsync (reinterpret_cast <void **>(&mRoadsDevice ), mRoads .size () * sizeof (Road<nLayers - 2 >), &(mGpuStreams [0 ]), getExtAllocator () );
577575 checkGPUError (cudaHostRegister (mRoads .data (), mRoads .size () * sizeof (Road<nLayers - 2 >), cudaHostRegisterPortable));
578576 checkGPUError (cudaMemcpyAsync (mRoadsDevice , mRoads .data (), mRoads .size () * sizeof (Road<nLayers - 2 >), cudaMemcpyHostToDevice, mGpuStreams [0 ].get ()));
579577}
@@ -582,7 +580,7 @@ template <int nLayers>
582580void TimeFrameGPU<nLayers>::loadTrackSeedsDevice(std::vector<CellSeed>& seeds)
583581{
584582 LOGP (debug, " gpu-transfer: loading {} track seeds, for {} MB." , seeds.size (), seeds.size () * sizeof (CellSeed) / MB );
585- allocMemAsync (reinterpret_cast <void **>(&mTrackSeedsDevice ), seeds.size () * sizeof (CellSeed), &(mGpuStreams [0 ]), false );
583+ allocMemAsync (reinterpret_cast <void **>(&mTrackSeedsDevice ), seeds.size () * sizeof (CellSeed), &(mGpuStreams [0 ]), getExtAllocator () );
586584 checkGPUError (cudaHostRegister (seeds.data (), seeds.size () * sizeof (CellSeed), cudaHostRegisterPortable));
587585 checkGPUError (cudaMemcpyAsync (mTrackSeedsDevice , seeds.data (), seeds.size () * sizeof (CellSeed), cudaMemcpyHostToDevice, mGpuStreams [0 ].get ()));
588586}
@@ -592,8 +590,8 @@ void TimeFrameGPU<nLayers>::createTrackITSExtDevice(const std::vector<CellSeed>&
592590{
593591 mTrackITSExt .clear ();
594592 mTrackITSExt .resize (seeds.size ());
595- LOGP (debug , " gpu-allocation: reserving {} tracks, for {} MB." , seeds.size (), seeds.size () * sizeof (o2::its::TrackITSExt) / MB );
596- allocMemAsync (reinterpret_cast <void **>(&mTrackITSExtDevice ), seeds.size () * sizeof (o2::its::TrackITSExt), &(mGpuStreams [0 ]), false );
593+ LOGP (info , " gpu-allocation: reserving {} tracks, for {} MB." , seeds.size (), seeds.size () * sizeof (o2::its::TrackITSExt) / MB );
594+ allocMemAsync (reinterpret_cast <void **>(&mTrackITSExtDevice ), seeds.size () * sizeof (o2::its::TrackITSExt), &(mGpuStreams [0 ]), getExtAllocator () );
597595 checkGPUError (cudaMemsetAsync (mTrackITSExtDevice , 0 , seeds.size () * sizeof (o2::its::TrackITSExt), mGpuStreams [0 ].get ()));
598596 checkGPUError (cudaHostRegister (mTrackITSExt .data (), seeds.size () * sizeof (o2::its::TrackITSExt), cudaHostRegisterPortable));
599597}
@@ -603,8 +601,8 @@ void TimeFrameGPU<nLayers>::createTrackITSExtDevice()
603601{
604602 mTrackITSExt .clear ();
605603 mTrackITSExt .resize (mRoads .size ());
606- LOGP (debug , " gpu-allocation: reserving {} tracks, for {} MB." , mRoads .size (), mRoads .size () * sizeof (o2::its::TrackITSExt) / MB );
607- allocMemAsync (reinterpret_cast <void **>(&mTrackITSExtDevice ), mRoads .size () * sizeof (o2::its::TrackITSExt), &(mGpuStreams [0 ]), false );
604+ LOGP (info , " gpu-allocation: reserving {} tracks, for {} MB." , mRoads .size (), mRoads .size () * sizeof (o2::its::TrackITSExt) / MB );
605+ allocMemAsync (reinterpret_cast <void **>(&mTrackITSExtDevice ), mRoads .size () * sizeof (o2::its::TrackITSExt), &(mGpuStreams [0 ]), getExtAllocator () );
608606 checkGPUError (cudaMemsetAsync (mTrackITSExtDevice , 0 , mRoads .size () * sizeof (o2::its::TrackITSExt), mGpuStreams [0 ].get ()));
609607 checkGPUError (cudaHostRegister (mTrackITSExt .data (), mRoads .size () * sizeof (o2::its::TrackITSExt), cudaHostRegisterPortable));
610608}
0 commit comments