Skip to content
This repository has been archived by the owner on Dec 9, 2024. It is now read-only.

Commit

Permalink
use device/TDev template argument trait for Buf instead of accelerato…
Browse files Browse the repository at this point in the history
…r/TAcc ; add modulesBuffersES as pointer to const (ES) module data not owned by SDL
  • Loading branch information
slava77devel committed Jan 3, 2024
1 parent d38a5fe commit 5f3c8af
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 75 deletions.
7 changes: 4 additions & 3 deletions SDL/Constants.h
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ namespace SDL {
#elif ALPAKA_ACC_GPU_HIP_ENABLED
using Acc = alpaka::AccGpuHipRt<Dim, Idx>;
#endif
using Dev = alpaka::Dev<Acc>;

// Needed for files that are compiled by g++ to not throw an error.
// uint4 is defined only for CUDA, so we will have to revisit this soon when running on other backends.
Expand All @@ -69,12 +70,12 @@ namespace SDL {
#endif

// Buffer type for allocations where auto type can't be used.
template <typename TAcc, typename TData>
using Buf = alpaka::Buf<TAcc, TData, Dim1d, Idx>;
template <typename TDev, typename TData>
using Buf = alpaka::Buf<TDev, TData, Dim1d, Idx>;

// Allocation wrapper function to make integration of the caching allocator easier and reduce code boilerplate.
template <typename T, typename TAcc, typename TSize, typename TQueue>
ALPAKA_FN_HOST ALPAKA_FN_INLINE Buf<TAcc, T> allocBufWrapper(TAcc const& devAccIn, TSize nElements, TQueue queue) {
ALPAKA_FN_HOST ALPAKA_FN_INLINE Buf<alpaka::Dev<TAcc>, T> allocBufWrapper(TAcc const& devAccIn, TSize nElements, TQueue queue) {
#ifdef CACHE_ALLOC
return cms::alpakatools::allocCachedBuf<T, Idx>(devAccIn, queue, Vec1d(static_cast<Idx>(nElements)));
#else
Expand Down
90 changes: 46 additions & 44 deletions SDL/Event.cc
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
#include "Event.h"

Check notice on line 1 in SDL/Event.cc

View workflow job for this annotation

GitHub Actions / linter

Run clang-format on SDL/Event.cc

File SDL/Event.cc does not conform to Custom style guidelines. (lines 174)

using Acc = SDL::Acc;
SDL::modules* SDL::modulesInGPU = new SDL::modules();
SDL::modulesBuffer<Acc>* SDL::modulesBuffers = new SDL::modulesBuffer<Acc>(devAcc);
SDL::modulesBuffer<SDL::Dev>* SDL::modulesBuffers = new SDL::modulesBuffer<SDL::Dev>(devAcc);
SDL::modulesBuffer<SDL::Dev> const* SDL::modulesBuffersES = nullptr;
std::shared_ptr<SDL::pixelMap> SDL::pixelMapping = std::make_shared<pixelMap>();
uint16_t SDL::nModules;
uint16_t SDL::nLowerModules;
Expand Down Expand Up @@ -166,11 +166,13 @@ void SDL::Event::resetEvent() {
void SDL::initModules(const char* moduleMetaDataFilePath) {
QueueAcc queue(devAcc);

// Set the relevant data pointers.
modulesInGPU->setData(*modulesBuffers);

// nModules gets filled here
loadModulesFromFile(modulesBuffers, nModules, nLowerModules, *pixelMapping, queue, moduleMetaDataFilePath);

// Set the relevant data pointers.
modulesBuffersES = modulesBuffers;
modulesInGPU->setData(*modulesBuffersES);

}

// Temporary solution to the global variables. Should be freed with shared_ptr.
Expand Down Expand Up @@ -591,7 +593,7 @@ void SDL::Event::createTriplets() {

// Allocate and copy module_nConnectedModules from device to host
auto module_nConnectedModules_buf = allocBufWrapper<uint16_t>(devHost, nLowerModules, queue);
alpaka::memcpy(queue, module_nConnectedModules_buf, modulesBuffers->nConnectedModules_buf, nLowerModules);
alpaka::memcpy(queue, module_nConnectedModules_buf, modulesBuffersES->nConnectedModules_buf, nLowerModules);
alpaka::wait(queue);

uint16_t* module_nConnectedModules = alpaka::getPtrNative(module_nConnectedModules_buf);
Expand Down Expand Up @@ -1181,10 +1183,10 @@ void SDL::Event::addMiniDoubletsToEventExplicit() {
alpaka::memcpy(queue, nMDsCPU_buf, miniDoubletsBuffers->nMDs_buf, nLowerModules);

auto module_subdets_buf = allocBufWrapper<short>(devHost, nLowerModules, queue);
alpaka::memcpy(queue, module_subdets_buf, modulesBuffers->subdets_buf, nLowerModules);
alpaka::memcpy(queue, module_subdets_buf, modulesBuffersES->subdets_buf, nLowerModules);

auto module_layers_buf = allocBufWrapper<short>(devHost, nLowerModules, queue);
alpaka::memcpy(queue, module_layers_buf, modulesBuffers->layers_buf, nLowerModules);
alpaka::memcpy(queue, module_layers_buf, modulesBuffersES->layers_buf, nLowerModules);

auto module_hitRanges_buf = allocBufWrapper<int>(devHost, nLowerModules * 2, queue);
alpaka::memcpy(queue, module_hitRanges_buf, hitsBuffers->hitRanges_buf, nLowerModules * 2);
Expand Down Expand Up @@ -1212,10 +1214,10 @@ void SDL::Event::addSegmentsToEventExplicit() {
alpaka::memcpy(queue, nSegmentsCPU_buf, segmentsBuffers->nSegments_buf, nLowerModules);

auto module_subdets_buf = allocBufWrapper<short>(devHost, nLowerModules, queue);
alpaka::memcpy(queue, module_subdets_buf, modulesBuffers->subdets_buf, nLowerModules);
alpaka::memcpy(queue, module_subdets_buf, modulesBuffersES->subdets_buf, nLowerModules);

auto module_layers_buf = allocBufWrapper<short>(devHost, nLowerModules, queue);
alpaka::memcpy(queue, module_layers_buf, modulesBuffers->layers_buf, nLowerModules);
alpaka::memcpy(queue, module_layers_buf, modulesBuffersES->layers_buf, nLowerModules);

alpaka::wait(queue);

Expand All @@ -1239,10 +1241,10 @@ void SDL::Event::addQuintupletsToEventExplicit() {
alpaka::memcpy(queue, nQuintupletsCPU_buf, quintupletsBuffers->nQuintuplets_buf, nLowerModules);

auto module_subdets_buf = allocBufWrapper<short>(devHost, nModules, queue);
alpaka::memcpy(queue, module_subdets_buf, modulesBuffers->subdets_buf, nModules);
alpaka::memcpy(queue, module_subdets_buf, modulesBuffersES->subdets_buf, nModules);

auto module_layers_buf = allocBufWrapper<short>(devHost, nLowerModules, queue);
alpaka::memcpy(queue, module_layers_buf, modulesBuffers->layers_buf, nLowerModules);
alpaka::memcpy(queue, module_layers_buf, modulesBuffersES->layers_buf, nLowerModules);

auto module_quintupletModuleIndices_buf = allocBufWrapper<int>(devHost, nLowerModules, queue);
alpaka::memcpy(queue, module_quintupletModuleIndices_buf, rangesBuffers->quintupletModuleIndices_buf, nLowerModules);
Expand Down Expand Up @@ -1270,10 +1272,10 @@ void SDL::Event::addTripletsToEventExplicit() {
alpaka::memcpy(queue, nTripletsCPU_buf, tripletsBuffers->nTriplets_buf, nLowerModules);

auto module_subdets_buf = allocBufWrapper<short>(devHost, nLowerModules, queue);
alpaka::memcpy(queue, module_subdets_buf, modulesBuffers->subdets_buf, nLowerModules);
alpaka::memcpy(queue, module_subdets_buf, modulesBuffersES->subdets_buf, nLowerModules);

auto module_layers_buf = allocBufWrapper<short>(devHost, nLowerModules, queue);
alpaka::memcpy(queue, module_layers_buf, modulesBuffers->layers_buf, nLowerModules);
alpaka::memcpy(queue, module_layers_buf, modulesBuffersES->layers_buf, nLowerModules);

alpaka::wait(queue);
int* nTripletsCPU = alpaka::getPtrNative(nTripletsCPU_buf);
Expand Down Expand Up @@ -1853,23 +1855,23 @@ SDL::modulesBuffer<alpaka::DevCpu>* SDL::Event::getFullModules() {
modulesInCPUFull = new SDL::modulesBuffer<alpaka::DevCpu>(devHost, nModules, 1);
modulesInCPUFull->setData(*modulesInCPUFull);

alpaka::memcpy(queue, modulesInCPUFull->detIds_buf, modulesBuffers->detIds_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->moduleMap_buf, modulesBuffers->moduleMap_buf, 40 * nModules);
alpaka::memcpy(queue, modulesInCPUFull->nConnectedModules_buf, modulesBuffers->nConnectedModules_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->drdzs_buf, modulesBuffers->drdzs_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->slopes_buf, modulesBuffers->slopes_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->nLowerModules_buf, modulesBuffers->nLowerModules_buf, 1);
alpaka::memcpy(queue, modulesInCPUFull->nModules_buf, modulesBuffers->nModules_buf, 1);
alpaka::memcpy(queue, modulesInCPUFull->layers_buf, modulesBuffers->layers_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->rings_buf, modulesBuffers->rings_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->modules_buf, modulesBuffers->modules_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->rods_buf, modulesBuffers->rods_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->subdets_buf, modulesBuffers->subdets_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->sides_buf, modulesBuffers->sides_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->isInverted_buf, modulesBuffers->isInverted_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->isLower_buf, modulesBuffers->isLower_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->moduleType_buf, modulesBuffers->moduleType_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->moduleLayerType_buf, modulesBuffers->moduleLayerType_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->detIds_buf, modulesBuffersES->detIds_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->moduleMap_buf, modulesBuffersES->moduleMap_buf, 40 * nModules);
alpaka::memcpy(queue, modulesInCPUFull->nConnectedModules_buf, modulesBuffersES->nConnectedModules_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->drdzs_buf, modulesBuffersES->drdzs_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->slopes_buf, modulesBuffersES->slopes_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->nLowerModules_buf, modulesBuffersES->nLowerModules_buf, 1);
alpaka::memcpy(queue, modulesInCPUFull->nModules_buf, modulesBuffersES->nModules_buf, 1);
alpaka::memcpy(queue, modulesInCPUFull->layers_buf, modulesBuffersES->layers_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->rings_buf, modulesBuffersES->rings_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->modules_buf, modulesBuffersES->modules_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->rods_buf, modulesBuffersES->rods_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->subdets_buf, modulesBuffersES->subdets_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->sides_buf, modulesBuffersES->sides_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->isInverted_buf, modulesBuffersES->isInverted_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->isLower_buf, modulesBuffersES->isLower_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->moduleType_buf, modulesBuffersES->moduleType_buf, nModules);
alpaka::memcpy(queue, modulesInCPUFull->moduleLayerType_buf, modulesBuffersES->moduleLayerType_buf, nModules);
alpaka::wait(queue);
}
return modulesInCPUFull;
Expand All @@ -1881,19 +1883,19 @@ SDL::modulesBuffer<alpaka::DevCpu>* SDL::Event::getModules() {
modulesInCPU = new SDL::modulesBuffer<alpaka::DevCpu>(devHost, nModules, 1);
modulesInCPU->setData(*modulesInCPU);

alpaka::memcpy(queue, modulesInCPU->nLowerModules_buf, modulesBuffers->nLowerModules_buf, 1);
alpaka::memcpy(queue, modulesInCPU->nModules_buf, modulesBuffers->nModules_buf, 1);
alpaka::memcpy(queue, modulesInCPU->detIds_buf, modulesBuffers->detIds_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->isLower_buf, modulesBuffers->isLower_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->layers_buf, modulesBuffers->layers_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->subdets_buf, modulesBuffers->subdets_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->rings_buf, modulesBuffers->rings_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->rods_buf, modulesBuffers->rods_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->modules_buf, modulesBuffers->modules_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->sides_buf, modulesBuffers->sides_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->eta_buf, modulesBuffers->eta_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->r_buf, modulesBuffers->r_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->moduleType_buf, modulesBuffers->moduleType_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->nLowerModules_buf, modulesBuffersES->nLowerModules_buf, 1);
alpaka::memcpy(queue, modulesInCPU->nModules_buf, modulesBuffersES->nModules_buf, 1);
alpaka::memcpy(queue, modulesInCPU->detIds_buf, modulesBuffersES->detIds_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->isLower_buf, modulesBuffersES->isLower_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->layers_buf, modulesBuffersES->layers_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->subdets_buf, modulesBuffersES->subdets_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->rings_buf, modulesBuffersES->rings_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->rods_buf, modulesBuffersES->rods_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->modules_buf, modulesBuffersES->modules_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->sides_buf, modulesBuffersES->sides_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->eta_buf, modulesBuffersES->eta_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->r_buf, modulesBuffersES->r_buf, nModules);
alpaka::memcpy(queue, modulesInCPU->moduleType_buf, modulesBuffersES->moduleType_buf, nModules);
alpaka::wait(queue);
}
return modulesInCPU;
Expand Down
3 changes: 2 additions & 1 deletion SDL/Event.h
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,8 @@ namespace SDL {

//global stuff
extern SDL::modules* modulesInGPU;
extern SDL::modulesBuffer<Acc>* modulesBuffers;
extern SDL::modulesBuffer<Dev>* modulesBuffers;
extern SDL::modulesBuffer<Dev> const* modulesBuffersES; // not owned const buffers
extern uint16_t nModules;
extern uint16_t nLowerModules;
void initModules(const char* moduleMetaDataFilePath = "data/centroid.txt"); //read from file and init
Expand Down
54 changes: 27 additions & 27 deletions SDL/Module.h
Original file line number Diff line number Diff line change
Expand Up @@ -254,34 +254,34 @@ namespace SDL {
}
};

template <typename TAcc>
template <typename TDev>
struct modulesBuffer : modules {
Buf<TAcc, unsigned int> detIds_buf;
Buf<TAcc, uint16_t> moduleMap_buf;
Buf<TAcc, unsigned int> mapdetId_buf;
Buf<TAcc, uint16_t> mapIdx_buf;
Buf<TAcc, uint16_t> nConnectedModules_buf;
Buf<TAcc, float> drdzs_buf;
Buf<TAcc, float> slopes_buf;
Buf<TAcc, uint16_t> nModules_buf;
Buf<TAcc, uint16_t> nLowerModules_buf;
Buf<TAcc, uint16_t> partnerModuleIndices_buf;

Buf<TAcc, short> layers_buf;
Buf<TAcc, short> rings_buf;
Buf<TAcc, short> modules_buf;
Buf<TAcc, short> rods_buf;
Buf<TAcc, short> subdets_buf;
Buf<TAcc, short> sides_buf;
Buf<TAcc, float> eta_buf;
Buf<TAcc, float> r_buf;
Buf<TAcc, bool> isInverted_buf;
Buf<TAcc, bool> isLower_buf;
Buf<TAcc, bool> isAnchor_buf;
Buf<TAcc, ModuleType> moduleType_buf;
Buf<TAcc, ModuleLayerType> moduleLayerType_buf;
Buf<TAcc, int> sdlLayers_buf;
Buf<TAcc, unsigned int> connectedPixels_buf;
Buf<TDev, unsigned int> detIds_buf;
Buf<TDev, uint16_t> moduleMap_buf;
Buf<TDev, unsigned int> mapdetId_buf;
Buf<TDev, uint16_t> mapIdx_buf;
Buf<TDev, uint16_t> nConnectedModules_buf;
Buf<TDev, float> drdzs_buf;
Buf<TDev, float> slopes_buf;
Buf<TDev, uint16_t> nModules_buf;
Buf<TDev, uint16_t> nLowerModules_buf;
Buf<TDev, uint16_t> partnerModuleIndices_buf;

Buf<TDev, short> layers_buf;
Buf<TDev, short> rings_buf;
Buf<TDev, short> modules_buf;
Buf<TDev, short> rods_buf;
Buf<TDev, short> subdets_buf;
Buf<TDev, short> sides_buf;
Buf<TDev, float> eta_buf;
Buf<TDev, float> r_buf;
Buf<TDev, bool> isInverted_buf;
Buf<TDev, bool> isLower_buf;
Buf<TDev, bool> isAnchor_buf;
Buf<TDev, ModuleType> moduleType_buf;
Buf<TDev, ModuleLayerType> moduleLayerType_buf;
Buf<TDev, int> sdlLayers_buf;
Buf<TDev, unsigned int> connectedPixels_buf;

template <typename TDevAcc>
modulesBuffer(TDevAcc const& devAccIn, unsigned int nMod = modules_size, unsigned int nPixs = pix_tot)
Expand Down

0 comments on commit 5f3c8af

Please sign in to comment.