diff --git a/SDL/Constants.h b/SDL/Constants.h index 75ff589a..25fd4314 100644 --- a/SDL/Constants.h +++ b/SDL/Constants.h @@ -119,13 +119,6 @@ namespace SDL { const unsigned int size_superbins = 45000; - // Temporary fix for endcap buffer allocation. - const unsigned int endcap_size = 9104; - - // Temporary fix for module buffer allocation. - const unsigned int modules_size = 26401; - const unsigned int pix_tot = 1795336; - //defining the constant host device variables right up here ALPAKA_STATIC_ACC_MEM_GLOBAL const float miniMulsPtScaleBarrel[6] = {0.0052, 0.0038, 0.0034, 0.0034, 0.0032, 0.0034}; ALPAKA_STATIC_ACC_MEM_GLOBAL const float miniMulsPtScaleEndcap[5] = {0.006, 0.006, 0.006, 0.006, 0.006}; diff --git a/SDL/EndcapGeometry.cc b/SDL/EndcapGeometry.cc index 6a150e46..2b5be62e 100644 --- a/SDL/EndcapGeometry.cc +++ b/SDL/EndcapGeometry.cc @@ -1,19 +1,16 @@ #include "EndcapGeometry.h" -SDL::EndcapGeometry::EndcapGeometry(SDL::Dev const& devAccIn, unsigned int sizef) - : geoMapDetId_buf(allocBufWrapper(devAccIn, sizef)), - geoMapPhi_buf(allocBufWrapper(devAccIn, sizef)) {} - SDL::EndcapGeometry::EndcapGeometry(SDL::Dev const& devAccIn, SDL::QueueAcc& queue, - std::string filename, - unsigned int sizef) - : geoMapDetId_buf(allocBufWrapper(devAccIn, sizef)), - geoMapPhi_buf(allocBufWrapper(devAccIn, sizef)) { - load(queue, filename); + SDL::EndcapGeometryHost const& endcapGeometryIn) + : geoMapDetId_buf(allocBufWrapper(devAccIn, endcapGeometryIn.centroid_phis_.size())), + geoMapPhi_buf(allocBufWrapper(devAccIn, endcapGeometryIn.centroid_phis_.size())) { + dxdy_slope_ = endcapGeometryIn.dxdy_slope_; + centroid_phis_ = endcapGeometryIn.centroid_phis_; + fillGeoMapArraysExplicit(queue); } -void SDL::EndcapGeometry::load(SDL::QueueAcc& queue, std::string filename) { +void SDL::EndcapGeometryHost::load(std::string filename) { dxdy_slope_.clear(); centroid_phis_.clear(); @@ -41,21 +38,11 @@ void SDL::EndcapGeometry::load(SDL::QueueAcc& queue, std::string filen } } } - - fillGeoMapArraysExplicit(queue); } void SDL::EndcapGeometry::fillGeoMapArraysExplicit(SDL::QueueAcc& queue) { unsigned int phi_size = centroid_phis_.size(); - // Temporary check for endcap initialization. - if (phi_size != endcap_size) { - std::cerr << "\nError: phi_size and endcap_size are not equal.\n"; - std::cerr << "phi_size: " << phi_size << ", endcap_size: " << endcap_size << "\n"; - std::cerr << "Please change endcap_size in Constants.h to make it equal to phi_size.\n"; - throw std::runtime_error("Mismatched sizes"); - } - // Allocate buffers on host SDL::DevHost const& devHost = cms::alpakatools::host(); auto mapPhi_host_buf = allocBufWrapper(devHost, phi_size); @@ -82,4 +69,17 @@ void SDL::EndcapGeometry::fillGeoMapArraysExplicit(SDL::QueueAcc& queu alpaka::wait(queue); } -float SDL::EndcapGeometry::getdxdy_slope(unsigned int detid) { return dxdy_slope_[detid]; } +float SDL::EndcapGeometry::getdxdy_slope(unsigned int detid) const { + if (dxdy_slope_.find(detid) != dxdy_slope_.end()) { + return dxdy_slope_.at(detid); + } else { + return 0; + } +} +float SDL::EndcapGeometryHost::getdxdy_slope(unsigned int detid) const { + if (dxdy_slope_.find(detid) != dxdy_slope_.end()) { + return dxdy_slope_.at(detid); + } else { + return 0; + } +} diff --git a/SDL/EndcapGeometry.h b/SDL/EndcapGeometry.h index 61ae01fc..93da945c 100644 --- a/SDL/EndcapGeometry.h +++ b/SDL/EndcapGeometry.h @@ -18,10 +18,30 @@ #include "HeterogeneousCore/AlpakaInterface/interface/host.h" namespace SDL { + + // FIXME: Need to separate this better into host and device classes + // This is only needed for host, but we template it to avoid symbol conflicts template - class EndcapGeometry {}; + class EndcapGeometryHost; + template <> - class EndcapGeometry { + class EndcapGeometryHost { + public: + std::map dxdy_slope_; // dx/dy slope + std::map centroid_phis_; // centroid phi + + EndcapGeometryHost() = default; + ~EndcapGeometryHost() = default; + + void load(std::string); + float getdxdy_slope(unsigned int detid) const; + }; + + template + class EndcapGeometry; + + template <> + class EndcapGeometry { private: std::map dxdy_slope_; // dx/dy slope std::map centroid_phis_; // centroid phi @@ -32,14 +52,11 @@ namespace SDL { unsigned int nEndCapMap; - EndcapGeometry(Dev const& devAccIn, unsigned int sizef = endcap_size); - EndcapGeometry(Dev const& devAccIn, QueueAcc& queue, std::string filename, unsigned int sizef = endcap_size); + EndcapGeometry(Dev const& devAccIn, QueueAcc& queue, SDL::EndcapGeometryHost const& endcapGeometryIn); ~EndcapGeometry() = default; - void load(QueueAcc& queue, std::string); - void fillGeoMapArraysExplicit(QueueAcc& queue); - float getdxdy_slope(unsigned int detid); + float getdxdy_slope(unsigned int detid) const; }; } // namespace SDL diff --git a/SDL/Event.cc b/SDL/Event.cc index 54aea9b3..2eb98b58 100644 --- a/SDL/Event.cc +++ b/SDL/Event.cc @@ -1,5 +1,4 @@ #include "Event.h" -#include "Globals.h" void SDL::Event::init(bool verbose) { addObjects = verbose; @@ -149,22 +148,6 @@ void SDL::Event::resetEvent() { } } -void SDL::Event::initModules(QueueAcc& queue, - const MapPLStoLayer& pLStoLayer, - const char* moduleMetaDataFilePath) { - // nModules gets filled here - loadModulesFromFile(Globals::modulesBuffers, - Globals::nModules, - Globals::nLowerModules, - *Globals::pixelMapping, - queue, - moduleMetaDataFilePath, - pLStoLayer); - - // hand over to the const access ("ES") - Globals::modulesBuffersES = Globals::modulesBuffers; -} - void SDL::Event::addHitToEvent(std::vector x, std::vector y, std::vector z, @@ -176,14 +159,13 @@ void SDL::Event::addHitToEvent(std::vector x, // Initialize space on device/host for next event. if (hitsInGPU == nullptr) { hitsInGPU = new SDL::hits(); - hitsBuffers = new SDL::hitsBuffer(Globals::nModules, nHits, devAcc, queue); + hitsBuffers = new SDL::hitsBuffer(nModules_, nHits, devAcc, queue); hitsInGPU->setData(*hitsBuffers); } if (rangesInGPU == nullptr) { rangesInGPU = new SDL::objectRanges(); - rangesBuffers = - new SDL::objectRangesBuffer(Globals::nModules, Globals::nLowerModules, devAcc, queue); + rangesBuffers = new SDL::objectRangesBuffer(nModules_, nLowerModules_, devAcc, queue); rangesInGPU->setData(*rangesBuffers); } @@ -204,18 +186,17 @@ void SDL::Event::addHitToEvent(std::vector x, WorkDiv const hit_loop_workdiv = createWorkDiv(blocksPerGrid1, threadsPerBlock1, elementsPerThread); hitLoopKernel hit_loop_kernel; - auto const hit_loop_task( - alpaka::createTaskKernel(hit_loop_workdiv, - hit_loop_kernel, - Endcap, - TwoS, - Globals::nModules, - SDL::Globals::endcapGeometry->nEndCapMap, - alpaka::getPtrNative(SDL::Globals::endcapGeometry->geoMapDetId_buf), - alpaka::getPtrNative(SDL::Globals::endcapGeometry->geoMapPhi_buf), - *Globals::modulesBuffersES->data(), - *hitsInGPU, - nHits)); + auto const hit_loop_task(alpaka::createTaskKernel(hit_loop_workdiv, + hit_loop_kernel, + Endcap, + TwoS, + nModules_, + endcapGeometry_->nEndCapMap, + alpaka::getPtrNative(endcapGeometry_->geoMapDetId_buf), + alpaka::getPtrNative(endcapGeometry_->geoMapPhi_buf), + *modulesBuffers_->data(), + *hitsInGPU, + nHits)); alpaka::enqueue(queue, hit_loop_task); @@ -224,11 +205,8 @@ void SDL::Event::addHitToEvent(std::vector x, WorkDiv const module_ranges_workdiv = createWorkDiv(blocksPerGrid2, threadsPerBlock2, elementsPerThread); moduleRangesKernel module_ranges_kernel; - auto const module_ranges_task(alpaka::createTaskKernel(module_ranges_workdiv, - module_ranges_kernel, - *Globals::modulesBuffersES->data(), - *hitsInGPU, - Globals::nLowerModules)); + auto const module_ranges_task(alpaka::createTaskKernel( + module_ranges_workdiv, module_ranges_kernel, *modulesBuffers_->data(), *hitsInGPU, nLowerModules_)); // Waiting isn't needed after second kernel call. Saves ~100 us. // This is because addPixelSegmentToEvent (which is run next) doesn't rely on hitsBuffers->hitrange variables. @@ -266,12 +244,12 @@ void SDL::Event::addPixelSegmentToEvent(std::vector hitI } unsigned int mdSize = 2 * size; - uint16_t pixelModuleIndex = Globals::pixelMapping->pixelModuleIndex; + uint16_t pixelModuleIndex = pixelMapping_->pixelModuleIndex; if (mdsInGPU == nullptr) { - // Create a view for the element nLowerModules inside rangesBuffers->miniDoubletModuleOccupancy - auto dst_view_miniDoubletModuleOccupancy = alpaka::createSubView( - rangesBuffers->miniDoubletModuleOccupancy_buf, (Idx)1u, (Idx)Globals::nLowerModules); + // Create a view for the element nLowerModules_ inside rangesBuffers->miniDoubletModuleOccupancy + auto dst_view_miniDoubletModuleOccupancy = + alpaka::createSubView(rangesBuffers->miniDoubletModuleOccupancy_buf, (Idx)1u, (Idx)nLowerModules_); // Create a source view for the value to be set int value = N_MAX_PIXEL_MD_PER_MODULES; @@ -286,10 +264,8 @@ void SDL::Event::addPixelSegmentToEvent(std::vector hitI createWorkDiv(blocksPerGridCreateMD, threadsPerBlockCreateMD, elementsPerThread); SDL::createMDArrayRangesGPU createMDArrayRangesGPU_kernel; - auto const createMDArrayRangesGPUTask(alpaka::createTaskKernel(createMDArrayRangesGPU_workDiv, - createMDArrayRangesGPU_kernel, - *Globals::modulesBuffersES->data(), - *rangesInGPU)); + auto const createMDArrayRangesGPUTask(alpaka::createTaskKernel( + createMDArrayRangesGPU_workDiv, createMDArrayRangesGPU_kernel, *modulesBuffers_->data(), *rangesInGPU)); alpaka::enqueue(queue, createMDArrayRangesGPUTask); alpaka::wait(queue); @@ -303,7 +279,7 @@ void SDL::Event::addPixelSegmentToEvent(std::vector hitI nTotalMDs += N_MAX_PIXEL_MD_PER_MODULES; mdsInGPU = new SDL::miniDoublets(); - miniDoubletsBuffers = new SDL::miniDoubletsBuffer(nTotalMDs, Globals::nLowerModules, devAcc, queue); + miniDoubletsBuffers = new SDL::miniDoubletsBuffer(nTotalMDs, nLowerModules_, devAcc, queue); mdsInGPU->setData(*miniDoubletsBuffers); alpaka::memcpy(queue, miniDoubletsBuffers->nMemoryLocations_buf, nTotalMDs_view); @@ -321,7 +297,7 @@ void SDL::Event::addPixelSegmentToEvent(std::vector hitI SDL::createSegmentArrayRanges createSegmentArrayRanges_kernel; auto const createSegmentArrayRangesTask(alpaka::createTaskKernel(createSegmentArrayRanges_workDiv, createSegmentArrayRanges_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *rangesInGPU, *mdsInGPU)); @@ -336,8 +312,8 @@ void SDL::Event::addPixelSegmentToEvent(std::vector hitI nTotalSegments += N_MAX_PIXEL_SEGMENTS_PER_MODULE; segmentsInGPU = new SDL::segments(); - segmentsBuffers = new SDL::segmentsBuffer( - nTotalSegments, Globals::nLowerModules, N_MAX_PIXEL_SEGMENTS_PER_MODULE, devAcc, queue); + segmentsBuffers = + new SDL::segmentsBuffer(nTotalSegments, nLowerModules_, N_MAX_PIXEL_SEGMENTS_PER_MODULE, devAcc, queue); segmentsInGPU->setData(*segmentsBuffers); alpaka::memcpy(queue, segmentsBuffers->nMemoryLocations_buf, nTotalSegments_view); @@ -397,7 +373,7 @@ void SDL::Event::addPixelSegmentToEvent(std::vector hitI addPixelSegmentToEventKernel addPixelSegmentToEvent_kernel; auto const addPixelSegmentToEvent_task(alpaka::createTaskKernel(addPixelSegmentToEvent_workdiv, addPixelSegmentToEvent_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *rangesInGPU, *hitsInGPU, *mdsInGPU, @@ -415,9 +391,9 @@ void SDL::Event::addPixelSegmentToEvent(std::vector hitI } void SDL::Event::createMiniDoublets() { - // Create a view for the element nLowerModules inside rangesBuffers->miniDoubletModuleOccupancy - auto dst_view_miniDoubletModuleOccupancy = alpaka::createSubView( - rangesBuffers->miniDoubletModuleOccupancy_buf, (Idx)1u, (Idx)Globals::nLowerModules); + // Create a view for the element nLowerModules_ inside rangesBuffers->miniDoubletModuleOccupancy + auto dst_view_miniDoubletModuleOccupancy = + alpaka::createSubView(rangesBuffers->miniDoubletModuleOccupancy_buf, (Idx)1u, (Idx)nLowerModules_); // Create a source view for the value to be set int value = N_MAX_PIXEL_MD_PER_MODULES; @@ -432,10 +408,8 @@ void SDL::Event::createMiniDoublets() { createWorkDiv(blocksPerGridCreateMD, threadsPerBlockCreateMD, elementsPerThread); SDL::createMDArrayRangesGPU createMDArrayRangesGPU_kernel; - auto const createMDArrayRangesGPUTask(alpaka::createTaskKernel(createMDArrayRangesGPU_workDiv, - createMDArrayRangesGPU_kernel, - *Globals::modulesBuffersES->data(), - *rangesInGPU)); + auto const createMDArrayRangesGPUTask(alpaka::createTaskKernel( + createMDArrayRangesGPU_workDiv, createMDArrayRangesGPU_kernel, *modulesBuffers_->data(), *rangesInGPU)); alpaka::enqueue(queue, createMDArrayRangesGPUTask); alpaka::wait(queue); @@ -451,20 +425,19 @@ void SDL::Event::createMiniDoublets() { if (mdsInGPU == nullptr) { mdsInGPU = new SDL::miniDoublets(); - miniDoubletsBuffers = new SDL::miniDoubletsBuffer(nTotalMDs, Globals::nLowerModules, devAcc, queue); + miniDoubletsBuffers = new SDL::miniDoubletsBuffer(nTotalMDs, nLowerModules_, devAcc, queue); mdsInGPU->setData(*miniDoubletsBuffers); } Vec const threadsPerBlockCreateMDInGPU = createVec(1, 16, 32); - Vec const blocksPerGridCreateMDInGPU = - createVec(1, Globals::nLowerModules / threadsPerBlockCreateMDInGPU[1], 1); + Vec const blocksPerGridCreateMDInGPU = createVec(1, nLowerModules_ / threadsPerBlockCreateMDInGPU[1], 1); WorkDiv const createMiniDoubletsInGPUv2_workDiv = createWorkDiv(blocksPerGridCreateMDInGPU, threadsPerBlockCreateMDInGPU, elementsPerThread); SDL::createMiniDoubletsInGPUv2 createMiniDoubletsInGPUv2_kernel; auto const createMiniDoubletsInGPUv2Task(alpaka::createTaskKernel(createMiniDoubletsInGPUv2_workDiv, createMiniDoubletsInGPUv2_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *hitsInGPU, *mdsInGPU, *rangesInGPU)); @@ -480,7 +453,7 @@ void SDL::Event::createMiniDoublets() { auto const addMiniDoubletRangesToEventExplicitTask( alpaka::createTaskKernel(addMiniDoubletRangesToEventExplicit_workDiv, addMiniDoubletRangesToEventExplicit_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *mdsInGPU, *rangesInGPU, *hitsInGPU)); @@ -496,20 +469,20 @@ void SDL::Event::createMiniDoublets() { void SDL::Event::createSegmentsWithModuleMap() { if (segmentsInGPU == nullptr) { segmentsInGPU = new SDL::segments(); - segmentsBuffers = new SDL::segmentsBuffer( - nTotalSegments, Globals::nLowerModules, N_MAX_PIXEL_SEGMENTS_PER_MODULE, devAcc, queue); + segmentsBuffers = + new SDL::segmentsBuffer(nTotalSegments, nLowerModules_, N_MAX_PIXEL_SEGMENTS_PER_MODULE, devAcc, queue); segmentsInGPU->setData(*segmentsBuffers); } Vec const threadsPerBlockCreateSeg = createVec(1, 1, 64); - Vec const blocksPerGridCreateSeg = createVec(1, 1, Globals::nLowerModules); + Vec const blocksPerGridCreateSeg = createVec(1, 1, nLowerModules_); WorkDiv const createSegmentsInGPUv2_workDiv = createWorkDiv(blocksPerGridCreateSeg, threadsPerBlockCreateSeg, elementsPerThread); SDL::createSegmentsInGPUv2 createSegmentsInGPUv2_kernel; auto const createSegmentsInGPUv2Task(alpaka::createTaskKernel(createSegmentsInGPUv2_workDiv, createSegmentsInGPUv2_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *mdsInGPU, *segmentsInGPU, *rangesInGPU)); @@ -522,12 +495,11 @@ void SDL::Event::createSegmentsWithModuleMap() { createWorkDiv(blocksPerGridAddSeg, threadsPerBlockAddSeg, elementsPerThread); SDL::addSegmentRangesToEventExplicit addSegmentRangesToEventExplicit_kernel; - auto const addSegmentRangesToEventExplicitTask( - alpaka::createTaskKernel(addSegmentRangesToEventExplicit_workDiv, - addSegmentRangesToEventExplicit_kernel, - *Globals::modulesBuffersES->data(), - *segmentsInGPU, - *rangesInGPU)); + auto const addSegmentRangesToEventExplicitTask(alpaka::createTaskKernel(addSegmentRangesToEventExplicit_workDiv, + addSegmentRangesToEventExplicit_kernel, + *modulesBuffers_->data(), + *segmentsInGPU, + *rangesInGPU)); alpaka::enqueue(queue, addSegmentRangesToEventExplicitTask); alpaka::wait(queue); @@ -547,7 +519,7 @@ void SDL::Event::createTriplets() { SDL::createTripletArrayRanges createTripletArrayRanges_kernel; auto const createTripletArrayRangesTask(alpaka::createTaskKernel(createTripletArrayRanges_workDiv, createTripletArrayRanges_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *rangesInGPU, *segmentsInGPU)); @@ -561,8 +533,8 @@ void SDL::Event::createTriplets() { alpaka::wait(queue); tripletsInGPU = new SDL::triplets(); - tripletsBuffers = new SDL::tripletsBuffer( - *alpaka::getPtrNative(maxTriplets_buf), Globals::nLowerModules, devAcc, queue); + tripletsBuffers = + new SDL::tripletsBuffer(*alpaka::getPtrNative(maxTriplets_buf), nLowerModules_, devAcc, queue); tripletsInGPU->setData(*tripletsBuffers); alpaka::memcpy(queue, tripletsBuffers->nMemoryLocations_buf, maxTriplets_buf); @@ -573,31 +545,27 @@ void SDL::Event::createTriplets() { unsigned int max_InnerSeg = 0; // Allocate host index - auto index_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + auto index_buf = allocBufWrapper(devHost, nLowerModules_, queue); uint16_t* index = alpaka::getPtrNative(index_buf); // Allocate device index - auto index_gpu_buf = allocBufWrapper(devAcc, Globals::nLowerModules, queue); + auto index_gpu_buf = allocBufWrapper(devAcc, nLowerModules_, queue); // Allocate and copy nSegments from device to host - auto nSegments_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); - alpaka::memcpy(queue, nSegments_buf, segmentsBuffers->nSegments_buf, Globals::nLowerModules); + auto nSegments_buf = allocBufWrapper(devHost, nLowerModules_, queue); + alpaka::memcpy(queue, nSegments_buf, segmentsBuffers->nSegments_buf, nLowerModules_); alpaka::wait(queue); unsigned int* nSegments = alpaka::getPtrNative(nSegments_buf); // Allocate and copy module_nConnectedModules from device to host - auto module_nConnectedModules_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); - alpaka::memcpy(queue, - module_nConnectedModules_buf, - Globals::modulesBuffersES->nConnectedModules_buf, - Globals::nLowerModules); + auto module_nConnectedModules_buf = allocBufWrapper(devHost, nLowerModules_, queue); + alpaka::memcpy(queue, module_nConnectedModules_buf, modulesBuffers_->nConnectedModules_buf, nLowerModules_); alpaka::wait(queue); uint16_t* module_nConnectedModules = alpaka::getPtrNative(module_nConnectedModules_buf); - for (uint16_t innerLowerModuleIndex = 0; innerLowerModuleIndex < Globals::nLowerModules; - innerLowerModuleIndex++) { + for (uint16_t innerLowerModuleIndex = 0; innerLowerModuleIndex < nLowerModules_; innerLowerModuleIndex++) { uint16_t nConnectedModules = module_nConnectedModules[innerLowerModuleIndex]; unsigned int nInnerSegments = nSegments[innerLowerModuleIndex]; if (nConnectedModules != 0 and nInnerSegments != 0) { @@ -619,7 +587,7 @@ void SDL::Event::createTriplets() { SDL::createTripletsInGPUv2 createTripletsInGPUv2_kernel; auto const createTripletsInGPUv2Task(alpaka::createTaskKernel(createTripletsInGPUv2_workDiv, createTripletsInGPUv2_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *mdsInGPU, *segmentsInGPU, *tripletsInGPU, @@ -635,12 +603,11 @@ void SDL::Event::createTriplets() { createWorkDiv(blocksPerGridAddTrip, threadsPerBlockAddTrip, elementsPerThread); SDL::addTripletRangesToEventExplicit addTripletRangesToEventExplicit_kernel; - auto const addTripletRangesToEventExplicitTask( - alpaka::createTaskKernel(addTripletRangesToEventExplicit_workDiv, - addTripletRangesToEventExplicit_kernel, - *Globals::modulesBuffersES->data(), - *tripletsInGPU, - *rangesInGPU)); + auto const addTripletRangesToEventExplicitTask(alpaka::createTaskKernel(addTripletRangesToEventExplicit_workDiv, + addTripletRangesToEventExplicit_kernel, + *modulesBuffers_->data(), + *tripletsInGPU, + *rangesInGPU)); alpaka::enqueue(queue, addTripletRangesToEventExplicitTask); alpaka::wait(queue); @@ -672,7 +639,7 @@ void SDL::Event::createTrackCandidates() { SDL::crossCleanpT3 crossCleanpT3_kernel; auto const crossCleanpT3Task(alpaka::createTaskKernel(crossCleanpT3_workDiv, crossCleanpT3_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *rangesInGPU, *pixelTripletsInGPU, *segmentsInGPU, @@ -688,7 +655,7 @@ void SDL::Event::createTrackCandidates() { SDL::addpT3asTrackCandidatesInGPU addpT3asTrackCandidatesInGPU_kernel; auto const addpT3asTrackCandidatesInGPUTask(alpaka::createTaskKernel(addpT3asTrackCandidatesInGPU_workDiv, addpT3asTrackCandidatesInGPU_kernel, - Globals::nLowerModules, + nLowerModules_, *pixelTripletsInGPU, *trackCandidatesInGPU, *segmentsInGPU, @@ -719,7 +686,7 @@ void SDL::Event::createTrackCandidates() { SDL::crossCleanT5 crossCleanT5_kernel; auto const crossCleanT5Task(alpaka::createTaskKernel(crossCleanT5_workDiv, crossCleanT5_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *quintupletsInGPU, *pixelQuintupletsInGPU, *pixelTripletsInGPU, @@ -735,7 +702,7 @@ void SDL::Event::createTrackCandidates() { SDL::addT5asTrackCandidateInGPU addT5asTrackCandidateInGPU_kernel; auto const addT5asTrackCandidateInGPUTask(alpaka::createTaskKernel(addT5asTrackCandidateInGPU_workDiv, addT5asTrackCandidateInGPU_kernel, - Globals::nLowerModules, + nLowerModules_, *quintupletsInGPU, *trackCandidatesInGPU, *rangesInGPU)); @@ -750,7 +717,7 @@ void SDL::Event::createTrackCandidates() { SDL::checkHitspLS checkHitspLS_kernel; auto const checkHitspLSTask(alpaka::createTaskKernel( - checkHitspLS_workDiv, checkHitspLS_kernel, *Globals::modulesBuffersES->data(), *segmentsInGPU, true)); + checkHitspLS_workDiv, checkHitspLS_kernel, *modulesBuffers_->data(), *segmentsInGPU, true)); alpaka::enqueue(queue, checkHitspLSTask); #endif @@ -763,7 +730,7 @@ void SDL::Event::createTrackCandidates() { SDL::crossCleanpLS crossCleanpLS_kernel; auto const crossCleanpLSTask(alpaka::createTaskKernel(crossCleanpLS_workDiv, crossCleanpLS_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *rangesInGPU, *pixelTripletsInGPU, *trackCandidatesInGPU, @@ -782,7 +749,7 @@ void SDL::Event::createTrackCandidates() { SDL::addpLSasTrackCandidateInGPU addpLSasTrackCandidateInGPU_kernel; auto const addpLSasTrackCandidateInGPUTask(alpaka::createTaskKernel(addpLSasTrackCandidateInGPU_workDiv, addpLSasTrackCandidateInGPU_kernel, - Globals::nLowerModules, + nLowerModules_, *trackCandidatesInGPU, *segmentsInGPU)); @@ -824,8 +791,7 @@ void SDL::Event::createPixelTriplets() { unsigned int nInnerSegments; auto nInnerSegments_src_view = alpaka::createView(devHost, &nInnerSegments, (size_t)1u); - auto dev_view_nSegments = - alpaka::createSubView(segmentsBuffers->nSegments_buf, (Idx)1u, (Idx)Globals::nLowerModules); + auto dev_view_nSegments = alpaka::createSubView(segmentsBuffers->nSegments_buf, (Idx)1u, (Idx)nLowerModules_); alpaka::memcpy(queue, nInnerSegments_src_view, dev_view_nSegments); alpaka::wait(queue); @@ -848,11 +814,10 @@ void SDL::Event::createPixelTriplets() { unsigned int* connectedPixelIndex_host = alpaka::getPtrNative(connectedPixelIndex_host_buf); alpaka::wait(queue); - int pixelIndexOffsetPos = Globals::pixelMapping->connectedPixelsIndex[size_superbins - 1] + - Globals::pixelMapping->connectedPixelsSizes[size_superbins - 1]; - int pixelIndexOffsetNeg = Globals::pixelMapping->connectedPixelsIndexPos[size_superbins - 1] + - Globals::pixelMapping->connectedPixelsSizesPos[size_superbins - 1] + - pixelIndexOffsetPos; + int pixelIndexOffsetPos = + pixelMapping_->connectedPixelsIndex[size_superbins - 1] + pixelMapping_->connectedPixelsSizes[size_superbins - 1]; + int pixelIndexOffsetNeg = pixelMapping_->connectedPixelsIndexPos[size_superbins - 1] + + pixelMapping_->connectedPixelsSizesPos[size_superbins - 1] + pixelIndexOffsetPos; // TODO: check if a map/reduction to just eligible pLSs would speed up the kernel // the current selection still leaves a significant fraction of unmatchable pLSs @@ -868,19 +833,19 @@ void SDL::Event::createPixelTriplets() { // Used pixel type to select correct size-index arrays if (pixelType == 0) { connectedPixelSize_host[i] = - Globals::pixelMapping->connectedPixelsSizes[superbin]; // number of connected modules to this pixel - auto connectedIdxBase = Globals::pixelMapping->connectedPixelsIndex[superbin]; + pixelMapping_->connectedPixelsSizes[superbin]; // number of connected modules to this pixel + auto connectedIdxBase = pixelMapping_->connectedPixelsIndex[superbin]; connectedPixelIndex_host[i] = connectedIdxBase; // index to get start of connected modules for this superbin in map } else if (pixelType == 1) { connectedPixelSize_host[i] = - Globals::pixelMapping->connectedPixelsSizesPos[superbin]; // number of pixel connected modules - auto connectedIdxBase = Globals::pixelMapping->connectedPixelsIndexPos[superbin] + pixelIndexOffsetPos; + pixelMapping_->connectedPixelsSizesPos[superbin]; // number of pixel connected modules + auto connectedIdxBase = pixelMapping_->connectedPixelsIndexPos[superbin] + pixelIndexOffsetPos; connectedPixelIndex_host[i] = connectedIdxBase; // index to get start of connected pixel modules } else if (pixelType == 2) { connectedPixelSize_host[i] = - Globals::pixelMapping->connectedPixelsSizesNeg[superbin]; // number of pixel connected modules - auto connectedIdxBase = Globals::pixelMapping->connectedPixelsIndexNeg[superbin] + pixelIndexOffsetNeg; + pixelMapping_->connectedPixelsSizesNeg[superbin]; // number of pixel connected modules + auto connectedIdxBase = pixelMapping_->connectedPixelsIndexNeg[superbin] + pixelIndexOffsetNeg; connectedPixelIndex_host[i] = connectedIdxBase; // index to get start of connected pixel modules } } @@ -898,7 +863,7 @@ void SDL::Event::createPixelTriplets() { auto const createPixelTripletsInGPUFromMapv2Task( alpaka::createTaskKernel(createPixelTripletsInGPUFromMapv2_workDiv, createPixelTripletsInGPUFromMapv2_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *rangesInGPU, *mdsInGPU, *segmentsInGPU, @@ -945,7 +910,7 @@ void SDL::Event::createQuintuplets() { auto const createEligibleModulesListForQuintupletsGPUTask( alpaka::createTaskKernel(createEligibleModulesListForQuintupletsGPU_workDiv, createEligibleModulesListForQuintupletsGPU_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *tripletsInGPU, *rangesInGPU)); @@ -964,8 +929,7 @@ void SDL::Event::createQuintuplets() { if (quintupletsInGPU == nullptr) { quintupletsInGPU = new SDL::quintuplets(); - quintupletsBuffers = - new SDL::quintupletsBuffer(nTotalQuintuplets, Globals::nLowerModules, devAcc, queue); + quintupletsBuffers = new SDL::quintupletsBuffer(nTotalQuintuplets, nLowerModules_, devAcc, queue); quintupletsInGPU->setData(*quintupletsBuffers); alpaka::memcpy(queue, quintupletsBuffers->nMemoryLocations_buf, nTotalQuintuplets_buf); @@ -980,7 +944,7 @@ void SDL::Event::createQuintuplets() { SDL::createQuintupletsInGPUv2 createQuintupletsInGPUv2_kernel; auto const createQuintupletsInGPUv2Task(alpaka::createTaskKernel(createQuintupletsInGPUv2_workDiv, createQuintupletsInGPUv2_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *mdsInGPU, *segmentsInGPU, *tripletsInGPU, @@ -999,7 +963,7 @@ void SDL::Event::createQuintuplets() { auto const removeDupQuintupletsInGPUAfterBuildTask( alpaka::createTaskKernel(removeDupQuintupletsInGPUAfterBuild_workDiv, removeDupQuintupletsInGPUAfterBuild_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *quintupletsInGPU, *rangesInGPU)); @@ -1014,7 +978,7 @@ void SDL::Event::createQuintuplets() { auto const addQuintupletRangesToEventExplicitTask( alpaka::createTaskKernel(addQuintupletRangesToEventExplicit_workDiv, addQuintupletRangesToEventExplicit_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *quintupletsInGPU, *rangesInGPU)); @@ -1035,7 +999,7 @@ void SDL::Event::pixelLineSegmentCleaning() { SDL::checkHitspLS checkHitspLS_kernel; auto const checkHitspLSTask(alpaka::createTaskKernel( - checkHitspLS_workDiv, checkHitspLS_kernel, *Globals::modulesBuffersES->data(), *segmentsInGPU, false)); + checkHitspLS_workDiv, checkHitspLS_kernel, *modulesBuffers_->data(), *segmentsInGPU, false)); alpaka::enqueue(queue, checkHitspLSTask); alpaka::wait(queue); @@ -1059,8 +1023,7 @@ void SDL::Event::createPixelQuintuplets() { auto nInnerSegments_src_view = alpaka::createView(devHost, &nInnerSegments, (size_t)1u); // Create a sub-view for the device buffer - auto dev_view_nSegments = - alpaka::createSubView(segmentsBuffers->nSegments_buf, (Idx)1u, (Idx)Globals::nLowerModules); + auto dev_view_nSegments = alpaka::createSubView(segmentsBuffers->nSegments_buf, (Idx)1u, (Idx)nLowerModules_); alpaka::memcpy(queue, nInnerSegments_src_view, dev_view_nSegments); alpaka::wait(queue); @@ -1083,11 +1046,10 @@ void SDL::Event::createPixelQuintuplets() { unsigned int* connectedPixelIndex_host = alpaka::getPtrNative(connectedPixelIndex_host_buf); alpaka::wait(queue); - int pixelIndexOffsetPos = Globals::pixelMapping->connectedPixelsIndex[size_superbins - 1] + - Globals::pixelMapping->connectedPixelsSizes[size_superbins - 1]; - int pixelIndexOffsetNeg = Globals::pixelMapping->connectedPixelsIndexPos[size_superbins - 1] + - Globals::pixelMapping->connectedPixelsSizesPos[size_superbins - 1] + - pixelIndexOffsetPos; + int pixelIndexOffsetPos = + pixelMapping_->connectedPixelsIndex[size_superbins - 1] + pixelMapping_->connectedPixelsSizes[size_superbins - 1]; + int pixelIndexOffsetNeg = pixelMapping_->connectedPixelsIndexPos[size_superbins - 1] + + pixelMapping_->connectedPixelsSizesPos[size_superbins - 1] + pixelIndexOffsetPos; // Loop over # pLS for (unsigned int i = 0; i < nInnerSegments; i++) { @@ -1101,20 +1063,18 @@ void SDL::Event::createPixelQuintuplets() { // Used pixel type to select correct size-index arrays if (pixelType == 0) { connectedPixelSize_host[i] = - Globals::pixelMapping->connectedPixelsSizes[superbin]; //number of connected modules to this pixel - unsigned int connectedIdxBase = Globals::pixelMapping->connectedPixelsIndex[superbin]; + pixelMapping_->connectedPixelsSizes[superbin]; //number of connected modules to this pixel + unsigned int connectedIdxBase = pixelMapping_->connectedPixelsIndex[superbin]; connectedPixelIndex_host[i] = connectedIdxBase; } else if (pixelType == 1) { connectedPixelSize_host[i] = - Globals::pixelMapping->connectedPixelsSizesPos[superbin]; //number of pixel connected modules - unsigned int connectedIdxBase = - Globals::pixelMapping->connectedPixelsIndexPos[superbin] + pixelIndexOffsetPos; + pixelMapping_->connectedPixelsSizesPos[superbin]; //number of pixel connected modules + unsigned int connectedIdxBase = pixelMapping_->connectedPixelsIndexPos[superbin] + pixelIndexOffsetPos; connectedPixelIndex_host[i] = connectedIdxBase; } else if (pixelType == 2) { connectedPixelSize_host[i] = - Globals::pixelMapping->connectedPixelsSizesNeg[superbin]; //number of pixel connected modules - unsigned int connectedIdxBase = - Globals::pixelMapping->connectedPixelsIndexNeg[superbin] + pixelIndexOffsetNeg; + pixelMapping_->connectedPixelsSizesNeg[superbin]; //number of pixel connected modules + unsigned int connectedIdxBase = pixelMapping_->connectedPixelsIndexNeg[superbin] + pixelIndexOffsetNeg; connectedPixelIndex_host[i] = connectedIdxBase; } } @@ -1132,7 +1092,7 @@ void SDL::Event::createPixelQuintuplets() { auto const createPixelQuintupletsInGPUFromMapv2Task( alpaka::createTaskKernel(createPixelQuintupletsInGPUFromMapv2_workDiv, createPixelQuintupletsInGPUFromMapv2_kernel, - *Globals::modulesBuffersES->data(), + *modulesBuffers_->data(), *mdsInGPU, *segmentsInGPU, *tripletsInGPU, @@ -1166,7 +1126,7 @@ void SDL::Event::createPixelQuintuplets() { SDL::addpT5asTrackCandidateInGPU addpT5asTrackCandidateInGPU_kernel; auto const addpT5asTrackCandidateInGPUTask(alpaka::createTaskKernel(addpT5asTrackCandidateInGPU_workDiv, addpT5asTrackCandidateInGPU_kernel, - Globals::nLowerModules, + nLowerModules_, *pixelQuintupletsInGPU, *trackCandidatesInGPU, *segmentsInGPU, @@ -1186,19 +1146,17 @@ void SDL::Event::createPixelQuintuplets() { } void SDL::Event::addMiniDoubletsToEventExplicit() { - auto nMDsCPU_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); - alpaka::memcpy(queue, nMDsCPU_buf, miniDoubletsBuffers->nMDs_buf, Globals::nLowerModules); + auto nMDsCPU_buf = allocBufWrapper(devHost, nLowerModules_, queue); + alpaka::memcpy(queue, nMDsCPU_buf, miniDoubletsBuffers->nMDs_buf, nLowerModules_); - auto module_subdets_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); - alpaka::memcpy( - queue, module_subdets_buf, Globals::modulesBuffersES->subdets_buf, Globals::nLowerModules); + auto module_subdets_buf = allocBufWrapper(devHost, nLowerModules_, queue); + alpaka::memcpy(queue, module_subdets_buf, modulesBuffers_->subdets_buf, nLowerModules_); - auto module_layers_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); - alpaka::memcpy( - queue, module_layers_buf, Globals::modulesBuffersES->layers_buf, Globals::nLowerModules); + auto module_layers_buf = allocBufWrapper(devHost, nLowerModules_, queue); + alpaka::memcpy(queue, module_layers_buf, modulesBuffers_->layers_buf, nLowerModules_); - auto module_hitRanges_buf = allocBufWrapper(devHost, Globals::nLowerModules * 2, queue); - alpaka::memcpy(queue, module_hitRanges_buf, hitsBuffers->hitRanges_buf, Globals::nLowerModules * 2u); + auto module_hitRanges_buf = allocBufWrapper(devHost, nLowerModules_ * 2, queue); + alpaka::memcpy(queue, module_hitRanges_buf, hitsBuffers->hitRanges_buf, nLowerModules_ * 2u); alpaka::wait(queue); @@ -1207,7 +1165,7 @@ void SDL::Event::addMiniDoubletsToEventExplicit() { short* module_layers = alpaka::getPtrNative(module_layers_buf); int* module_hitRanges = alpaka::getPtrNative(module_hitRanges_buf); - for (unsigned int i = 0; i < Globals::nLowerModules; i++) { + for (unsigned int i = 0; i < nLowerModules_; i++) { if (!(nMDsCPU[i] == 0 or module_hitRanges[i * 2] == -1)) { if (module_subdets[i] == Barrel) { n_minidoublets_by_layer_barrel_[module_layers[i] - 1] += nMDsCPU[i]; @@ -1219,16 +1177,14 @@ void SDL::Event::addMiniDoubletsToEventExplicit() { } void SDL::Event::addSegmentsToEventExplicit() { - auto nSegmentsCPU_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); - alpaka::memcpy(queue, nSegmentsCPU_buf, segmentsBuffers->nSegments_buf, Globals::nLowerModules); + auto nSegmentsCPU_buf = allocBufWrapper(devHost, nLowerModules_, queue); + alpaka::memcpy(queue, nSegmentsCPU_buf, segmentsBuffers->nSegments_buf, nLowerModules_); - auto module_subdets_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); - alpaka::memcpy( - queue, module_subdets_buf, Globals::modulesBuffersES->subdets_buf, Globals::nLowerModules); + auto module_subdets_buf = allocBufWrapper(devHost, nLowerModules_, queue); + alpaka::memcpy(queue, module_subdets_buf, modulesBuffers_->subdets_buf, nLowerModules_); - auto module_layers_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); - alpaka::memcpy( - queue, module_layers_buf, Globals::modulesBuffersES->layers_buf, Globals::nLowerModules); + auto module_layers_buf = allocBufWrapper(devHost, nLowerModules_, queue); + alpaka::memcpy(queue, module_layers_buf, modulesBuffers_->layers_buf, nLowerModules_); alpaka::wait(queue); @@ -1236,7 +1192,7 @@ void SDL::Event::addSegmentsToEventExplicit() { short* module_subdets = alpaka::getPtrNative(module_subdets_buf); short* module_layers = alpaka::getPtrNative(module_layers_buf); - for (unsigned int i = 0; i < Globals::nLowerModules; i++) { + for (unsigned int i = 0; i < nLowerModules_; i++) { if (!(nSegmentsCPU[i] == 0)) { if (module_subdets[i] == Barrel) { n_segments_by_layer_barrel_[module_layers[i] - 1] += nSegmentsCPU[i]; @@ -1248,18 +1204,16 @@ void SDL::Event::addSegmentsToEventExplicit() { } void SDL::Event::addQuintupletsToEventExplicit() { - auto nQuintupletsCPU_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + auto nQuintupletsCPU_buf = allocBufWrapper(devHost, nLowerModules_, queue); alpaka::memcpy(queue, nQuintupletsCPU_buf, quintupletsBuffers->nQuintuplets_buf); - auto module_subdets_buf = allocBufWrapper(devHost, Globals::nModules, queue); - alpaka::memcpy( - queue, module_subdets_buf, Globals::modulesBuffersES->subdets_buf, Globals::nModules); + auto module_subdets_buf = allocBufWrapper(devHost, nModules_, queue); + alpaka::memcpy(queue, module_subdets_buf, modulesBuffers_->subdets_buf, nModules_); - auto module_layers_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); - alpaka::memcpy( - queue, module_layers_buf, Globals::modulesBuffersES->layers_buf, Globals::nLowerModules); + auto module_layers_buf = allocBufWrapper(devHost, nLowerModules_, queue); + alpaka::memcpy(queue, module_layers_buf, modulesBuffers_->layers_buf, nLowerModules_); - auto module_quintupletModuleIndices_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + auto module_quintupletModuleIndices_buf = allocBufWrapper(devHost, nLowerModules_, queue); alpaka::memcpy(queue, module_quintupletModuleIndices_buf, rangesBuffers->quintupletModuleIndices_buf); alpaka::wait(queue); @@ -1269,7 +1223,7 @@ void SDL::Event::addQuintupletsToEventExplicit() { short* module_layers = alpaka::getPtrNative(module_layers_buf); int* module_quintupletModuleIndices = alpaka::getPtrNative(module_quintupletModuleIndices_buf); - for (uint16_t i = 0; i < Globals::nLowerModules; i++) { + for (uint16_t i = 0; i < nLowerModules_; i++) { if (!(nQuintupletsCPU[i] == 0 or module_quintupletModuleIndices[i] == -1)) { if (module_subdets[i] == Barrel) { n_quintuplets_by_layer_barrel_[module_layers[i] - 1] += nQuintupletsCPU[i]; @@ -1281,23 +1235,21 @@ void SDL::Event::addQuintupletsToEventExplicit() { } void SDL::Event::addTripletsToEventExplicit() { - auto nTripletsCPU_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); + auto nTripletsCPU_buf = allocBufWrapper(devHost, nLowerModules_, queue); alpaka::memcpy(queue, nTripletsCPU_buf, tripletsBuffers->nTriplets_buf); - auto module_subdets_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); - alpaka::memcpy( - queue, module_subdets_buf, Globals::modulesBuffersES->subdets_buf, Globals::nLowerModules); + auto module_subdets_buf = allocBufWrapper(devHost, nLowerModules_, queue); + alpaka::memcpy(queue, module_subdets_buf, modulesBuffers_->subdets_buf, nLowerModules_); - auto module_layers_buf = allocBufWrapper(devHost, Globals::nLowerModules, queue); - alpaka::memcpy( - queue, module_layers_buf, Globals::modulesBuffersES->layers_buf, Globals::nLowerModules); + auto module_layers_buf = allocBufWrapper(devHost, nLowerModules_, queue); + alpaka::memcpy(queue, module_layers_buf, modulesBuffers_->layers_buf, nLowerModules_); alpaka::wait(queue); unsigned int* nTripletsCPU = alpaka::getPtrNative(nTripletsCPU_buf); short* module_subdets = alpaka::getPtrNative(module_subdets_buf); short* module_layers = alpaka::getPtrNative(module_layers_buf); - for (uint16_t i = 0; i < Globals::nLowerModules; i++) { + for (uint16_t i = 0; i < nLowerModules_; i++) { if (nTripletsCPU[i] != 0) { if (module_subdets[i] == Barrel) { n_triplets_by_layer_barrel_[module_layers[i] - 1] += nTripletsCPU[i]; @@ -1542,7 +1494,7 @@ SDL::hitsBuffer* SDL::Event::getHits() //std::shared_ alpaka::wait(queue); unsigned int nHits = *alpaka::getPtrNative(nHits_buf); - hitsInCPU = new SDL::hitsBuffer(Globals::nModules, nHits, devHost, queue); + hitsInCPU = new SDL::hitsBuffer(nModules_, nHits, devHost, queue); hitsInCPU->setData(*hitsInCPU); *alpaka::getPtrNative(hitsInCPU->nHits_buf) = nHits; @@ -1564,7 +1516,7 @@ SDL::hitsBuffer* SDL::Event::getHitsInCMSSW() { alpaka::wait(queue); unsigned int nHits = *alpaka::getPtrNative(nHits_buf); - hitsInCPU = new SDL::hitsBuffer(Globals::nModules, nHits, devHost, queue); + hitsInCPU = new SDL::hitsBuffer(nModules_, nHits, devHost, queue); hitsInCPU->setData(*hitsInCPU); *alpaka::getPtrNative(hitsInCPU->nHits_buf) = nHits; @@ -1576,8 +1528,7 @@ SDL::hitsBuffer* SDL::Event::getHitsInCMSSW() { SDL::objectRangesBuffer* SDL::Event::getRanges() { if (rangesInCPU == nullptr) { - rangesInCPU = new SDL::objectRangesBuffer( - Globals::nModules, Globals::nLowerModules, devHost, queue); + rangesInCPU = new SDL::objectRangesBuffer(nModules_, nLowerModules_, devHost, queue); rangesInCPU->setData(*rangesInCPU); alpaka::memcpy(queue, rangesInCPU->hitRanges_buf, rangesBuffers->hitRanges_buf); @@ -1598,7 +1549,7 @@ SDL::miniDoubletsBuffer* SDL::Event::getMiniDoublets() alpaka::wait(queue); unsigned int nMemHost = *alpaka::getPtrNative(nMemHost_buf); - mdsInCPU = new SDL::miniDoubletsBuffer(nMemHost, Globals::nLowerModules, devHost, queue); + mdsInCPU = new SDL::miniDoubletsBuffer(nMemHost, nLowerModules_, devHost, queue); mdsInCPU->setData(*mdsInCPU); *alpaka::getPtrNative(mdsInCPU->nMemoryLocations_buf) = nMemHost; @@ -1621,7 +1572,7 @@ SDL::segmentsBuffer* SDL::Event::getSegments() { unsigned int nMemHost = *alpaka::getPtrNative(nMemHost_buf); segmentsInCPU = new SDL::segmentsBuffer( - nMemHost, Globals::nLowerModules, N_MAX_PIXEL_SEGMENTS_PER_MODULE, devHost, queue); + nMemHost, nLowerModules_, N_MAX_PIXEL_SEGMENTS_PER_MODULE, devHost, queue); segmentsInCPU->setData(*segmentsInCPU); *alpaka::getPtrNative(segmentsInCPU->nMemoryLocations_buf) = nMemHost; @@ -1656,7 +1607,7 @@ SDL::tripletsBuffer* SDL::Event::getTriplets() { alpaka::wait(queue); unsigned int nMemHost = *alpaka::getPtrNative(nMemHost_buf); - tripletsInCPU = new SDL::tripletsBuffer(nMemHost, Globals::nLowerModules, devHost, queue); + tripletsInCPU = new SDL::tripletsBuffer(nMemHost, nLowerModules_, devHost, queue); tripletsInCPU->setData(*tripletsInCPU); *alpaka::getPtrNative(tripletsInCPU->nMemoryLocations_buf) = nMemHost; @@ -1690,8 +1641,7 @@ SDL::quintupletsBuffer* SDL::Event::getQuintuplets() { alpaka::wait(queue); unsigned int nMemHost = *alpaka::getPtrNative(nMemHost_buf); - quintupletsInCPU = - new SDL::quintupletsBuffer(nMemHost, Globals::nLowerModules, devHost, queue); + quintupletsInCPU = new SDL::quintupletsBuffer(nMemHost, nLowerModules_, devHost, queue); quintupletsInCPU->setData(*quintupletsInCPU); *alpaka::getPtrNative(quintupletsInCPU->nMemoryLocations_buf) = nMemHost; @@ -1855,9 +1805,9 @@ SDL::trackCandidatesBuffer* SDL::Event::getTrackCandid SDL::modulesBuffer* SDL::Event::getModules(bool isFull) { if (modulesInCPU == nullptr) { // The last input here is just a small placeholder for the allocation. - modulesInCPU = new SDL::modulesBuffer(devHost); + modulesInCPU = new SDL::modulesBuffer(devHost, nModules_, nPixels_); - modulesInCPU->copyFromSrc(queue, *Globals::modulesBuffersES, isFull); + modulesInCPU->copyFromSrc(queue, *modulesBuffers_, isFull); } return modulesInCPU; } diff --git a/SDL/Event.h b/SDL/Event.h index 7c799dcb..3d301c2c 100644 --- a/SDL/Event.h +++ b/SDL/Event.h @@ -4,9 +4,11 @@ #ifdef LST_IS_CMSSW_PACKAGE #include "RecoTracker/LSTCore/interface/alpaka/Constants.h" #include "RecoTracker/LSTCore/interface/alpaka/Module.h" +#include "RecoTracker/LSTCore/interface/alpaka/LST.h" #else #include "Constants.h" #include "Module.h" +#include "LST.h" #endif #include "Hit.h" @@ -84,10 +86,27 @@ namespace SDL { int* superbinCPU; int8_t* pixelTypeCPU; + // Stuff that used to be global + const uint16_t nModules_; + const uint16_t nLowerModules_; + const unsigned int nPixels_; + const std::shared_ptr> modulesBuffers_; + const std::shared_ptr pixelMapping_; + const std::shared_ptr> endcapGeometry_; + public: // Constructor used for CMSSW integration. Uses an external queue. template - Event(bool verbose, TQueue const& q) : queue(q), devAcc(alpaka::getDev(q)), devHost(cms::alpakatools::host()) { + Event(bool verbose, TQueue const& q, const LSTESDeviceData* deviceESData) + : queue(q), + devAcc(alpaka::getDev(q)), + devHost(cms::alpakatools::host()), + nModules_(deviceESData->nModules), + nLowerModules_(deviceESData->nLowerModules), + nPixels_(deviceESData->nPixels), + modulesBuffers_(deviceESData->modulesBuffers), + pixelMapping_(deviceESData->pixelMapping), + endcapGeometry_(deviceESData->endcapGeometry) { init(verbose); } void resetEvent(); @@ -183,9 +202,6 @@ namespace SDL { pixelTripletsBuffer* getPixelTriplets(); pixelQuintupletsBuffer* getPixelQuintuplets(); modulesBuffer* getModules(bool isFull = false); - - //read from file and init - static void initModules(QueueAcc& queue, const MapPLStoLayer& pLStoLayer, const char* moduleMetaDataFilePath); }; } // namespace SDL diff --git a/SDL/Globals.cc b/SDL/Globals.cc deleted file mode 100644 index ab015d5b..00000000 --- a/SDL/Globals.cc +++ /dev/null @@ -1,27 +0,0 @@ -#include "Globals.h" - -SDL::modulesBuffer* SDL::Globals::modulesBuffers = nullptr; -SDL::modulesBuffer const* SDL::Globals::modulesBuffersES = nullptr; -std::shared_ptr SDL::Globals::pixelMapping = nullptr; -uint16_t SDL::Globals::nModules; -uint16_t SDL::Globals::nLowerModules; - -SDL::EndcapGeometry* SDL::Globals::endcapGeometry = nullptr; - -SDL::TiltedGeometry SDL::Globals::tiltedGeometry; -SDL::ModuleConnectionMap SDL::Globals::moduleConnectionMap; - -void SDL::Globals::freeEndcap() { - if (endcapGeometry != nullptr) { - delete endcapGeometry; - endcapGeometry = nullptr; - } -} - -// Temporary solution to the global variables. Should be freed with shared_ptr. -void SDL::Globals::freeModules() { - if (modulesBuffers != nullptr) { - delete modulesBuffers; - modulesBuffers = nullptr; - } -} diff --git a/SDL/Globals.h b/SDL/Globals.h deleted file mode 100644 index 9366405f..00000000 --- a/SDL/Globals.h +++ /dev/null @@ -1,38 +0,0 @@ -#ifndef Globals_h -#define Globals_h - -#ifdef LST_IS_CMSSW_PACKAGE -#include "RecoTracker/LSTCore/interface/alpaka/Constants.h" -#include "RecoTracker/LSTCore/interface/alpaka/Module.h" -#else -#include "Constants.h" -#include "Module.h" -#endif - -#include "TiltedGeometry.h" -#include "EndcapGeometry.h" -#include "ModuleConnectionMap.h" -#include "PixelMap.h" - -namespace SDL { - template - struct Globals; - template <> - struct Globals { - static SDL::modulesBuffer* modulesBuffers; - static SDL::modulesBuffer const* modulesBuffersES; // not owned const buffers - static uint16_t nModules; - static uint16_t nLowerModules; - static std::shared_ptr pixelMapping; - - static EndcapGeometry* endcapGeometry; - static TiltedGeometry tiltedGeometry; - static ModuleConnectionMap moduleConnectionMap; - - static void freeEndcap(); - static void freeModules(); - }; - -} // namespace SDL - -#endif diff --git a/SDL/Hit.h b/SDL/Hit.h index 22699955..dfe9c4c5 100644 --- a/SDL/Hit.h +++ b/SDL/Hit.h @@ -217,12 +217,12 @@ namespace SDL { struct hitLoopKernel { template ALPAKA_FN_ACC void operator()(TAcc const& acc, - uint16_t Endcap, // Integer corresponding to endcap in module subdets - uint16_t TwoS, // Integer corresponding to TwoS in moduleType - unsigned int nModules, // Number of modules - unsigned int nEndCapMap, // Number of elements in endcap map - unsigned int* geoMapDetId, // DetId's from endcap map - float* geoMapPhi, // Phi values from endcap map + uint16_t Endcap, // Integer corresponding to endcap in module subdets + uint16_t TwoS, // Integer corresponding to TwoS in moduleType + unsigned int nModules, // Number of modules + unsigned int nEndCapMap, // Number of elements in endcap map + const unsigned int* geoMapDetId, // DetId's from endcap map + const float* geoMapPhi, // Phi values from endcap map struct SDL::modules modulesInGPU, struct SDL::hits hitsInGPU, unsigned int const& nHits) const // Total number of hits in event diff --git a/SDL/LST.cc b/SDL/LST.cc index 776663ea..9eb11503 100644 --- a/SDL/LST.cc +++ b/SDL/LST.cc @@ -5,100 +5,13 @@ #endif #include "Event.h" -#include "Globals.h" #include "Math/Vector3D.h" using XYZVector = ROOT::Math::XYZVector; -namespace { - std::string trackLooperDir() { - const char* path = std::getenv("LST_BASE"); - std::string path_str; - if (path != nullptr) { - path_str = path; - } else { - // FIXME: temporary solution, will need to pass a value from FileInPath or CMSSW search path - // in the `LSTProducer` or a related ES producer - path_str = std::getenv("CMSSW_BASE"); - path_str += "/src/RecoTracker/LSTCore/TrackLooper"; - } - return path_str; - } - - std::string get_absolute_path_after_check_file_exists(const std::string name) { - std::filesystem::path fullpath = std::filesystem::absolute(name.c_str()); - if (not std::filesystem::exists(fullpath)) { - std::cout << "ERROR: Could not find the file = " << fullpath << std::endl; - exit(2); - } - return fullpath.string(); - } - - void loadMaps(SDL::Dev const& devAccIn, SDL::QueueAcc& queue, SDL::MapPLStoLayer& pLStoLayer) { - // Module orientation information (DrDz or phi angles) - auto endcap_geom = - get_absolute_path_after_check_file_exists(trackLooperDir() + "/data/OT800_IT615_pt0.8/endcap_orientation.bin"); - auto tilted_geom = get_absolute_path_after_check_file_exists( - trackLooperDir() + "/data/OT800_IT615_pt0.8/tilted_barrel_orientation.bin"); - if (SDL::Globals::endcapGeometry == nullptr) { - SDL::Globals::endcapGeometry = - new SDL::EndcapGeometry(devAccIn, queue, endcap_geom); // centroid values added to the map - } - - SDL::Globals::tiltedGeometry.load(tilted_geom); - - // Module connection map (for line segment building) - auto mappath = get_absolute_path_after_check_file_exists( - trackLooperDir() + "/data/OT800_IT615_pt0.8/module_connection_tracing_merged.bin"); - SDL::Globals::moduleConnectionMap.load(mappath); - - auto pLSMapDir = trackLooperDir() + "/data/OT800_IT615_pt0.8/pixelmap/pLS_map"; - const std::array connects{ - {"_layer1_subdet5", "_layer2_subdet5", "_layer1_subdet4", "_layer2_subdet4"}}; - std::string path; - - static_assert(connects.size() == std::tuple_size>{}); - for (unsigned int i = 0; i < connects.size(); i++) { - auto connectData = connects[i].data(); - - path = pLSMapDir + connectData + ".bin"; - pLStoLayer[0][i] = SDL::ModuleConnectionMap(get_absolute_path_after_check_file_exists(path)); - - path = pLSMapDir + "_pos" + connectData + ".bin"; - pLStoLayer[1][i] = SDL::ModuleConnectionMap(get_absolute_path_after_check_file_exists(path)); - - path = pLSMapDir + "_neg" + connectData + ".bin"; - pLStoLayer[2][i] = SDL::ModuleConnectionMap(get_absolute_path_after_check_file_exists(path)); - } - } - -} // namespace - -void SDL::LST::loadAndFillES(SDL::QueueAcc& queue, struct modulesBuffer* modules) { - SDL::MapPLStoLayer pLStoLayer; - SDL::Dev const& devAccIn = alpaka::getDev(queue); - ::loadMaps(devAccIn, queue, pLStoLayer); - - auto path = - get_absolute_path_after_check_file_exists(trackLooperDir() + "/data/OT800_IT615_pt0.8/sensor_centroids.bin"); - if (SDL::Globals::modulesBuffers == nullptr) { - SDL::Globals::modulesBuffers = new SDL::modulesBuffer(devAccIn); - } - if (SDL::Globals::pixelMapping == nullptr) { - SDL::Globals::pixelMapping = std::make_shared(); - } - SDL::loadModulesFromFile(modules, - SDL::Globals::nModules, - SDL::Globals::nLowerModules, - *SDL::Globals::pixelMapping, - queue, - path.c_str(), - pLStoLayer); -} - void SDL::LST::run(SDL::QueueAcc& queue, - const SDL::modulesBuffer* modules, bool verbose, + const LSTESDeviceData* deviceESData, const std::vector see_px, const std::vector see_py, const std::vector see_pz, @@ -118,8 +31,7 @@ void SDL::LST::run(SDL::QueueAcc& queue, const std::vector ph2_x, const std::vector ph2_y, const std::vector ph2_z) { - SDL::Globals::modulesBuffersES = modules; - auto event = SDL::Event(verbose, queue); + auto event = SDL::Event(verbose, queue, deviceESData); prepareInput(see_px, see_py, see_pz, diff --git a/SDL/LST.h b/SDL/LST.h index a0360932..7d9d1174 100644 --- a/SDL/LST.h +++ b/SDL/LST.h @@ -3,11 +3,12 @@ #ifdef LST_IS_CMSSW_PACKAGE #include "RecoTracker/LSTCore/interface/alpaka/Constants.h" +#include "RecoTracker/LSTCore/interface/alpaka/LSTESData.h" #else #include "Constants.h" +#include "LSTESData.h" #endif -#include #include #include #include @@ -17,9 +18,6 @@ namespace SDL { template class Event; - template - struct modulesBuffer; - template class LST; @@ -28,11 +26,9 @@ namespace SDL { public: LST() = default; - static void loadAndFillES(SDL::QueueAcc& queue, struct modulesBuffer* modules); - - void run(SDL::QueueAcc& queue, - const SDL::modulesBuffer* modules, + void run(QueueAcc& queue, bool verbose, + const LSTESDeviceData* deviceESData, const std::vector see_px, const std::vector see_py, const std::vector see_pz, diff --git a/SDL/LSTESData.cc b/SDL/LSTESData.cc new file mode 100644 index 00000000..06dd4463 --- /dev/null +++ b/SDL/LSTESData.cc @@ -0,0 +1,113 @@ +#ifdef LST_IS_CMSSW_PACKAGE +#include "RecoTracker/LSTCore/interface/alpaka/LSTESData.h" +#else +#include "LSTESData.h" +#endif + +#include "EndcapGeometry.h" +#include "ModuleConnectionMap.h" +#include "TiltedGeometry.h" +#include "PixelMap.h" +#include "ModuleMethods.h" + +namespace { + std::string trackLooperDir() { + const char* path_lst_base = std::getenv("LST_BASE"); + const char* path_tracklooperdir = std::getenv("TRACKLOOPERDIR"); + std::string path_str; + if (path_lst_base != nullptr) { + path_str = path_lst_base; + } else if (path_tracklooperdir != nullptr) { + path_str = path_tracklooperdir; + } else { + // FIXME: temporary solution, will need to pass a value from FileInPath or CMSSW search path + // in the `LSTProducer` or a related ES producer + path_str = std::getenv("CMSSW_BASE"); + path_str += "/src/RecoTracker/LSTCore/TrackLooper"; + } + return path_str; + } + + std::string get_absolute_path_after_check_file_exists(const std::string name) { + std::filesystem::path fullpath = std::filesystem::absolute(name.c_str()); + if (not std::filesystem::exists(fullpath)) { + std::cout << "ERROR: Could not find the file = " << fullpath << std::endl; + exit(2); + } + return fullpath.string(); + } + + void loadMapsHost(SDL::MapPLStoLayer& pLStoLayer, + std::shared_ptr> endcapGeometry, + std::shared_ptr> tiltedGeometry, + std::shared_ptr> moduleConnectionMap) { + // Module orientation information (DrDz or phi angles) + auto endcap_geom = + get_absolute_path_after_check_file_exists(trackLooperDir() + "/data/OT800_IT615_pt0.8/endcap_orientation.bin"); + auto tilted_geom = get_absolute_path_after_check_file_exists( + trackLooperDir() + "/data/OT800_IT615_pt0.8/tilted_barrel_orientation.bin"); + // Module connection map (for line segment building) + auto mappath = get_absolute_path_after_check_file_exists( + trackLooperDir() + "/data/OT800_IT615_pt0.8/module_connection_tracing_merged.bin"); + + endcapGeometry->load(endcap_geom); + tiltedGeometry->load(tilted_geom); + moduleConnectionMap->load(mappath); + + auto pLSMapDir = trackLooperDir() + "/data/OT800_IT615_pt0.8/pixelmap/pLS_map"; + const std::array connects{ + {"_layer1_subdet5", "_layer2_subdet5", "_layer1_subdet4", "_layer2_subdet4"}}; + std::string path; + + static_assert(connects.size() == std::tuple_size>{}); + for (unsigned int i = 0; i < connects.size(); i++) { + auto connectData = connects[i].data(); + + path = pLSMapDir + connectData + ".bin"; + pLStoLayer[0][i] = SDL::ModuleConnectionMap(get_absolute_path_after_check_file_exists(path)); + + path = pLSMapDir + "_pos" + connectData + ".bin"; + pLStoLayer[1][i] = SDL::ModuleConnectionMap(get_absolute_path_after_check_file_exists(path)); + + path = pLSMapDir + "_neg" + connectData + ".bin"; + pLStoLayer[2][i] = SDL::ModuleConnectionMap(get_absolute_path_after_check_file_exists(path)); + } + } +} // namespace + +std::unique_ptr> SDL::loadAndFillESHost() { + auto pLStoLayer = std::make_shared(); + auto endcapGeometry = std::make_shared>(); + auto tiltedGeometry = std::make_shared>(); + auto moduleConnectionMap = std::make_shared>(); + ::loadMapsHost(*pLStoLayer, endcapGeometry, tiltedGeometry, moduleConnectionMap); + return std::make_unique>(pLStoLayer, endcapGeometry, tiltedGeometry, moduleConnectionMap); +} + +std::unique_ptr> SDL::loadAndFillESDevice(SDL::QueueAcc& queue, + const LSTESHostData* hostData) { + SDL::Dev const& devAccIn = alpaka::getDev(queue); + uint16_t nModules; + uint16_t nLowerModules; + unsigned int nPixels; + std::shared_ptr> modulesBuffers = nullptr; + auto endcapGeometry = std::make_shared>(devAccIn, queue, *hostData->endcapGeometry); + auto pixelMapping = std::make_shared(); + auto moduleConnectionMap = hostData->moduleConnectionMap; + + auto path = + get_absolute_path_after_check_file_exists(trackLooperDir() + "/data/OT800_IT615_pt0.8/sensor_centroids.bin"); + SDL::loadModulesFromFile(queue, + hostData->mapPLStoLayer.get(), + path.c_str(), + nModules, + nLowerModules, + nPixels, + modulesBuffers, + pixelMapping.get(), + endcapGeometry.get(), + hostData->tiltedGeometry.get(), + moduleConnectionMap.get()); + return std::make_unique>( + nModules, nLowerModules, nPixels, modulesBuffers, endcapGeometry, pixelMapping); +} diff --git a/SDL/LSTESData.h b/SDL/LSTESData.h new file mode 100644 index 00000000..29ae19a5 --- /dev/null +++ b/SDL/LSTESData.h @@ -0,0 +1,94 @@ +#ifndef LSTESData_H +#define LSTESData_H + +#ifdef LST_IS_CMSSW_PACKAGE +#include "RecoTracker/LSTCore/interface/alpaka/Constants.h" +#else +#include "Constants.h" +#endif + +#include "HeterogeneousCore/AlpakaInterface/interface/CopyToDevice.h" + +#include +#include + +namespace SDL { + + struct pixelMap; + + template + class TiltedGeometry; + + template + class ModuleConnectionMap; + using MapPLStoLayer = std::array, 4>, 3>; + + template + struct modulesBuffer; + + template + class EndcapGeometryHost; + + template + class EndcapGeometry; + + template + struct LSTESHostData; + + // FIXME: This shouldn't be a templated struct + template <> + struct LSTESHostData { + std::shared_ptr mapPLStoLayer; + std::shared_ptr> endcapGeometry; + std::shared_ptr> tiltedGeometry; + std::shared_ptr> moduleConnectionMap; + + LSTESHostData(std::shared_ptr mapPLStoLayerIn, + std::shared_ptr> endcapGeometryIn, + std::shared_ptr> tiltedGeometryIn, + std::shared_ptr> moduleConnectionMapIn) + : mapPLStoLayer(mapPLStoLayerIn), + endcapGeometry(endcapGeometryIn), + tiltedGeometry(tiltedGeometryIn), + moduleConnectionMap(moduleConnectionMapIn) {} + }; + + template + struct LSTESDeviceData { + uint16_t nModules; + uint16_t nLowerModules; + unsigned int nPixels; + std::shared_ptr> modulesBuffers; + std::shared_ptr> endcapGeometry; + std::shared_ptr pixelMapping; + + LSTESDeviceData(uint16_t nModulesIn, + uint16_t nLowerModulesIn, + unsigned int nPixelsIn, + std::shared_ptr> modulesBuffersIn, + std::shared_ptr> endcapGeometryIn, + std::shared_ptr pixelMappingIn) + : nModules(nModulesIn), + nLowerModules(nLowerModulesIn), + nPixels(nPixelsIn), + modulesBuffers(modulesBuffersIn), + endcapGeometry(endcapGeometryIn), + pixelMapping(pixelMappingIn) {} + }; + + std::unique_ptr> loadAndFillESHost(); + std::unique_ptr> loadAndFillESDevice(SDL::QueueAcc& queue, const LSTESHostData* hostData); + +} // namespace SDL + +namespace cms::alpakatools { + template <> + struct CopyToDevice> { + template + static auto copyAsync(TQueue& queue, SDL::LSTESHostData const& hostData) { + return std::make_unique>(hostData); + } + }; +} // namespace cms::alpakatools + +#endif diff --git a/SDL/Module.h b/SDL/Module.h index a6b86e78..0a269eaa 100644 --- a/SDL/Module.h +++ b/SDL/Module.h @@ -288,7 +288,7 @@ namespace SDL { Buf sdlLayers_buf; Buf connectedPixels_buf; - modulesBuffer(TDev const& dev, unsigned int nMod = modules_size, unsigned int nPixs = pix_tot) + modulesBuffer(TDev const& dev, unsigned int nMod, unsigned int nPixs) : detIds_buf(allocBufWrapper(dev, nMod)), moduleMap_buf(allocBufWrapper(dev, nMod * MAX_CONNECTED_MODULES)), mapdetId_buf(allocBufWrapper(dev, nMod)), @@ -360,10 +360,7 @@ namespace SDL { } template - modulesBuffer(TQueue queue, - const modulesBuffer& src, - unsigned int nMod = modules_size, - unsigned int nPixs = pix_tot) + modulesBuffer(TQueue queue, const modulesBuffer& src, unsigned int nMod, unsigned int nPixs) : modulesBuffer(alpaka::getDev(queue), nMod, nPixs) { copyFromSrc(queue, src); } diff --git a/SDL/ModuleMethods.h b/SDL/ModuleMethods.h index e7d781ec..dc0eb0fc 100644 --- a/SDL/ModuleMethods.h +++ b/SDL/ModuleMethods.h @@ -16,7 +16,6 @@ #include "EndcapGeometry.h" #include "ModuleConnectionMap.h" #include "PixelMap.h" -#include "Globals.h" #include "HeterogeneousCore/AlpakaInterface/interface/host.h" @@ -30,9 +29,11 @@ namespace SDL { // https://github.com/cms-sw/cmssw/blob/5e809e8e0a625578aa265dc4b128a93830cb5429/Geometry/TrackerGeometryBuilder/interface/TrackerGeometry.h#L29 }; - template - inline void fillPixelMap(struct modulesBuffer* modulesBuf, - struct pixelMap& pixelMapping, + template + inline void fillPixelMap(std::shared_ptr>& modulesBuf, + uint16_t nModules, + unsigned int& nPixels, + pixelMap& pixelMapping, TQueue queue, const MapPLStoLayer& pLStoLayer, struct ModuleMetaData& mmd) { @@ -84,13 +85,12 @@ namespace SDL { } unsigned int connectedPix_size = totalSizes + totalSizes_pos + totalSizes_neg; + nPixels = connectedPix_size; - // Temporary check for module initialization. - if (pix_tot != connectedPix_size) { - std::cerr << "\nError: pix_tot and connectedPix_size are not equal.\n"; - std::cerr << "pix_tot: " << pix_tot << ", connectedPix_size: " << connectedPix_size << "\n"; - std::cerr << "Please change pix_tot in Constants.h to make it equal to connectedPix_size.\n"; - throw std::runtime_error("Mismatched sizes"); + // Now we can initialize modulesBuf + if (modulesBuf == nullptr) { + SDL::Dev const& devAcc = alpaka::getDev(queue); + modulesBuf = std::make_shared>(devAcc, nModules, nPixels); } DevHost const& devHost = cms::alpakatools::host(); @@ -115,7 +115,8 @@ namespace SDL { inline void fillConnectedModuleArrayExplicit(struct modulesBuffer* modulesBuf, unsigned int nMod, TQueue queue, - struct ModuleMetaData& mmd) { + struct ModuleMetaData& mmd, + const ModuleConnectionMap* moduleConnectionMap) { DevHost const& devHost = cms::alpakatools::host(); auto moduleMap_buf = allocBufWrapper(devHost, nMod * MAX_CONNECTED_MODULES); uint16_t* moduleMap = alpaka::getPtrNative(moduleMap_buf); @@ -126,7 +127,7 @@ namespace SDL { for (auto it = mmd.detIdToIndex.begin(); it != mmd.detIdToIndex.end(); ++it) { unsigned int detId = it->first; uint16_t index = it->second; - auto& connectedModules = Globals::moduleConnectionMap.getConnectedModuleDetIds(detId); + auto& connectedModules = moduleConnectionMap->getConnectedModuleDetIds(detId); nConnectedModules[index] = connectedModules.size(); for (uint16_t i = 0; i < nConnectedModules[index]; i++) { moduleMap[index * MAX_CONNECTED_MODULES + i] = mmd.detIdToIndex[connectedModules[i]]; @@ -222,24 +223,20 @@ namespace SDL { mmd.detIdToIndex[1] = counter; //pixel module is the last module in the module list counter++; nModules = counter; - - // Temporary check for module initialization. - if (modules_size != nModules) { - std::cerr << "\nError: modules_size and nModules are not equal.\n"; - std::cerr << "modules_size: " << modules_size << ", nModules: " << nModules << "\n"; - std::cerr << "Please change modules_size in Constants.h to make it equal to nModules.\n"; - throw std::runtime_error("Mismatched sizes"); - } }; - template - void loadModulesFromFile(struct modulesBuffer* modulesBuf, + template + void loadModulesFromFile(TQueue& queue, + const MapPLStoLayer* pLStoLayer, + const char* moduleMetaDataFilePath, uint16_t& nModules, uint16_t& nLowerModules, - struct pixelMap& pixelMapping, - TQueue& queue, - const char* moduleMetaDataFilePath, - const MapPLStoLayer& pLStoLayer) { + unsigned int& nPixels, + std::shared_ptr>& modulesBuf, + pixelMap* pixelMapping, + const EndcapGeometry* endcapGeometry, + const TiltedGeometry* tiltedGeometry, + const ModuleConnectionMap* moduleConnectionMap) { ModuleMetaData mmd; loadCentroidsFromFile(moduleMetaDataFilePath, mmd, nModules); @@ -359,9 +356,8 @@ namespace SDL { host_isAnchor[index] = false; } - host_dxdys[index] = (subdet == Endcap) ? Globals::endcapGeometry->getdxdy_slope(detId) - : Globals::tiltedGeometry.getDxDy(detId); - host_drdzs[index] = (subdet == Barrel) ? Globals::tiltedGeometry.getDrDz(detId) : 0; + host_dxdys[index] = (subdet == Endcap) ? endcapGeometry->getdxdy_slope(detId) : tiltedGeometry->getDxDy(detId); + host_drdzs[index] = (subdet == Barrel) ? tiltedGeometry->getDrDz(detId) : 0; } host_sdlLayers[index] = @@ -385,6 +381,9 @@ namespace SDL { } } + // modulesBuf is initialized in fillPixelMap since both nModules and nPix will be known + fillPixelMap(modulesBuf, nModules, nPixels, *pixelMapping, queue, *pLStoLayer, mmd); + auto src_view_nModules = alpaka::createView(devHost, &nModules, (Idx)1u); alpaka::memcpy(queue, modulesBuf->nModules_buf, src_view_nModules); @@ -412,9 +411,8 @@ namespace SDL { alpaka::memcpy(queue, modulesBuf->sdlLayers_buf, sdlLayers_buf); alpaka::wait(queue); - fillConnectedModuleArrayExplicit(modulesBuf, nModules, queue, mmd); - fillMapArraysExplicit(modulesBuf, nModules, queue, mmd); - fillPixelMap(modulesBuf, pixelMapping, queue, pLStoLayer, mmd); + fillConnectedModuleArrayExplicit(modulesBuf.get(), nModules, queue, mmd, moduleConnectionMap); + fillMapArraysExplicit(modulesBuf.get(), nModules, queue, mmd); }; } // namespace SDL #endif diff --git a/SDL/TiltedGeometry.cc b/SDL/TiltedGeometry.cc index abc94cfb..862155ab 100644 --- a/SDL/TiltedGeometry.cc +++ b/SDL/TiltedGeometry.cc @@ -32,17 +32,17 @@ void SDL::TiltedGeometry::load(std::string filename) { } } -float SDL::TiltedGeometry::getDrDz(unsigned int detid) { +float SDL::TiltedGeometry::getDrDz(unsigned int detid) const { if (drdzs_.find(detid) != drdzs_.end()) { - return drdzs_[detid]; + return drdzs_.at(detid); } else { return 0; } } -float SDL::TiltedGeometry::getDxDy(unsigned int detid) { +float SDL::TiltedGeometry::getDxDy(unsigned int detid) const { if (dxdys_.find(detid) != dxdys_.end()) { - return dxdys_[detid]; + return dxdys_.at(detid); } else { return 0; } diff --git a/SDL/TiltedGeometry.h b/SDL/TiltedGeometry.h index 578d2ca8..51481762 100644 --- a/SDL/TiltedGeometry.h +++ b/SDL/TiltedGeometry.h @@ -31,8 +31,8 @@ namespace SDL { void load(std::string); - float getDrDz(unsigned int detid); - float getDxDy(unsigned int detid); + float getDrDz(unsigned int detid) const; + float getDxDy(unsigned int detid) const; }; } // namespace SDL diff --git a/bin/sdl.cc b/bin/sdl.cc index 3c37053d..b4f52d13 100644 --- a/bin/sdl.cc +++ b/bin/sdl.cc @@ -306,7 +306,8 @@ void run_sdl() // Load various maps used in the SDL reconstruction TStopwatch full_timer; full_timer.Start(); - loadMaps(devAcc, queues[0]); + auto hostESData = SDL::loadAndFillESHost(); + auto deviceESData = SDL::loadAndFillESDevice(queues[0], hostESData.get()); float timeForMapLoading = full_timer.RealTime()*1000; if (ana.do_write_ntuple) @@ -388,7 +389,11 @@ void run_sdl() std::vector*> events; for (int s = 0; s < ana.streams; s++) { - SDL::Event *event = new SDL::Event(ana.verbose>=2, queues[s]); + SDL::Event *event = new SDL::Event( + ana.verbose>=2, + queues[s], + deviceESData.get() + ); events.push_back(event); } float timeForEventCreation = full_timer.RealTime()*1000; @@ -527,9 +532,5 @@ void run_sdl() delete events.at(s); } - SDL::Globals::freeModules(); - SDL::Globals::freeEndcap(); - delete ana.output_tfile; } - diff --git a/bin/sdl.h b/bin/sdl.h index dec3f980..c97f331d 100644 --- a/bin/sdl.h +++ b/bin/sdl.h @@ -19,6 +19,7 @@ #include "SDL/EndcapGeometry.h" // SDL::EndcapGeometr #include "SDL/ModuleConnectionMap.h" // SDL::ModuleConnectionMap #include "SDL/Event.h" +#include "SDL/LST.h" // Efficiency study modules #include "AnalysisConfig.h" diff --git a/code/core/trkCore.cc b/code/core/trkCore.cc index 9104e3aa..90a01759 100644 --- a/code/core/trkCore.cc +++ b/code/core/trkCore.cc @@ -1,55 +1,4 @@ #include "trkCore.h" -#include "Globals.h" - -//___________________________________________________________________________________________________________________________________________________________________________________________ -void loadMaps(SDL::Dev& devAccIn, SDL::QueueAcc& queue) -{ - // From the environment variable figure out the main tracklooper absolute path - TString TrackLooperDir = gSystem->Getenv("TRACKLOOPERDIR"); - - // Module orientation information (DrDz or phi angles) - TString endcap_geom = get_absolute_path_after_check_file_exists(TString::Format("%s/data/OT800_IT615_pt0.8/endcap_orientation.bin", TrackLooperDir.Data()).Data()); - TString tilted_geom = get_absolute_path_after_check_file_exists(TString::Format("%s/data/OT800_IT615_pt0.8/tilted_barrel_orientation.bin", TrackLooperDir.Data()).Data()); - TString mappath = get_absolute_path_after_check_file_exists(TString::Format("%s/data/OT800_IT615_pt0.8/module_connection_tracing_merged.bin", TrackLooperDir.Data()).Data()); - TString centroid = get_absolute_path_after_check_file_exists(TString::Format("%s/data/OT800_IT615_pt0.8/sensor_centroids.bin", gSystem->Getenv("TRACKLOOPERDIR")).Data()).Data(); - TString pLSMapDir = TrackLooperDir+"/data/OT800_IT615_pt0.8/pixelmap"; - - std::cout << "============ CMSSW_12_2_0_pre2 geometry ===========" << std::endl; - std::cout << "endcap geometry: " << endcap_geom << std::endl; - std::cout << "tilted geometry: " << tilted_geom << std::endl; - std::cout << "module map: " << mappath << std::endl; - std::cout << "pLS map: " << pLSMapDir << std::endl; - std::cout << "centroid: " << centroid << std::endl; - - if (SDL::Globals::endcapGeometry == nullptr) { - SDL::Globals::endcapGeometry = new SDL::EndcapGeometry(devAccIn, queue, endcap_geom.Data()); // centroid values added to the map - } - SDL::Globals::tiltedGeometry.load(tilted_geom.Data()); - SDL::Globals::moduleConnectionMap.load(mappath.Data()); - - SDL::MapPLStoLayer pLStoLayer; - const std::array pLSMapPath{{ "layer1_subdet5", "layer2_subdet5", "layer1_subdet4", "layer2_subdet4" }}; - static_assert(pLStoLayer[0].size() == pLSMapPath.size()); - for (unsigned int i=0; i::modulesBuffers == nullptr) { - SDL::Globals::modulesBuffers = new SDL::modulesBuffer(devAccIn); - } - if (SDL::Globals::pixelMapping == nullptr) { - SDL::Globals::pixelMapping = std::make_shared(); - } - SDL::Event::initModules(queue, pLStoLayer, centroid.Data()); -} //___________________________________________________________________________________________________________________________________________________________________________________________ bool goodEvent() @@ -199,7 +148,7 @@ float runQuintuplet(SDL::Event* event) if (ana.verbose >= 2) std::cout << "# of Quintuplets produced endcap layer 5: " << event->getNumberOfQuintupletsByLayerEndcap(4) << std::endl; return t5_elapsed; - + } //___________________________________________________________________________________________________________________________________________________________________________________________ @@ -258,11 +207,11 @@ float runTrackCandidateTest_v2(SDL::Event* event) -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- @@ -497,11 +446,11 @@ int getDenomSimTrkType(std::vector simidxs) -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- @@ -610,11 +559,11 @@ TVector3 calculateR3FromPCA(const TVector3 &p3, const float dxy, const float dz) -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- @@ -1109,11 +1058,11 @@ void printTimingInformation(std::vector>& timing_information, -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- @@ -1202,11 +1151,11 @@ void writeMetaData() -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- -// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- +// ---------------------------------- =========================================== ---------------------------------------------- @@ -1244,7 +1193,7 @@ float addInputsToLineSegmentTracking(SDL::Event &event, bool useOMP) std::vector ptErr_vec; std::vector etaErr_vec; std::vector eta_vec; - std::vector phi_vec; + std::vector phi_vec; std::vector charge_vec; std::vector seedIdx_vec; std::vector deltaPhi_vec; diff --git a/code/core/trkCore.h b/code/core/trkCore.h index d236f22a..e45ad4dc 100644 --- a/code/core/trkCore.h +++ b/code/core/trkCore.h @@ -13,7 +13,6 @@ // --------------------- ======================== --------------------- -void loadMaps(SDL::Dev& devAccIn, SDL::QueueAcc& queue); bool goodEvent(); float runMiniDoublet(SDL::Event* event, int evt); float runSegment(SDL::Event* event);