Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Patatrack integration - calorimeters shared code (6/N) #31704

6 changes: 6 additions & 0 deletions CUDADataFormats/CaloCommon/BuildFile.xml
@@ -0,0 +1,6 @@
<use name="CUDADataFormats/Common" />
<use name="HeterogeneousCore/CUDAUtilities"/>

<export>
<lib name="1"/>
</export>
68 changes: 68 additions & 0 deletions CUDADataFormats/CaloCommon/interface/Common.h
@@ -0,0 +1,68 @@
#ifndef CUDADataFormats_CaloCommon_interface_Common_h
#define CUDADataFormats_CaloCommon_interface_Common_h

#include <vector>

#include "HeterogeneousCore/CUDAUtilities/interface/HostAllocator.h"
#include "HeterogeneousCore/CUDAUtilities/interface/device_unique_ptr.h"

namespace calo {
namespace common {

// FIXME: not able to get enums to work with genreflex
namespace tags {

struct Vec {};
struct Ptr {};
struct DevPtr {};

} // namespace tags

template <typename tag>
struct AddSize {};

template <>
struct AddSize<tags::Ptr> {
uint32_t size;
};

template <>
struct AddSize<tags::DevPtr> {
uint32_t size;
};

struct ViewStoragePolicy {
using TagType = tags::Ptr;

template <typename T>
struct StorageSelector {
using type = T*;
};
};

struct DevStoragePolicy {
using TagType = tags::DevPtr;

template <typename T>
struct StorageSelector {
using type = cms::cuda::device::unique_ptr<T[]>;
};
};

template <template <typename> typename Allocator = std::allocator>
struct VecStoragePolicy {
using TagType = tags::Vec;

template <typename T>
struct StorageSelector {
using type = std::vector<T, Allocator<T>>;
};
};

template <typename T>
using CUDAHostAllocatorAlias = cms::cuda::HostAllocator<T>;

} // namespace common
} // namespace calo

#endif // CUDADataFormats_CaloCommon_interface_Common_h
2 changes: 2 additions & 0 deletions CUDADataFormats/CaloCommon/src/classes.h
@@ -0,0 +1,2 @@
#include "DataFormats/Common/interface/Wrapper.h"
#include "CUDADataFormats/CaloCommon/interface/Common.h"
8 changes: 8 additions & 0 deletions CUDADataFormats/CaloCommon/src/classes_def.xml
@@ -0,0 +1,8 @@
<lcgdict>
<enum name="calo::common::tags::Ptr"/>
<enum name="calo::common::tags::Vec"/>
<enum name="calo::common::tags::DevPtr"/>
<class name="calo::common::AddSize<calo::common::tags::Ptr>"/>
<class name="calo::common::AddSize<calo::common::tags::Vec>"/>
<class name="calo::common::AddSize<calo::common::tags::DevPtr>"/>
</lcgdict>