CMS 3D CMS Logo

AtomicPairCounter.h
Go to the documentation of this file.
1 #ifndef HeterogeneousCore_CUDAUtilities_interface_AtomicPairCounter_h
2 #define HeterogeneousCore_CUDAUtilities_interface_AtomicPairCounter_h
3 
4 #include <cstdint>
5 
7 
8 namespace cms {
9  namespace cuda {
10 
12  public:
13  using c_type = unsigned long long int;
14 
17 
19  counter.ac = i;
20  return *this;
21  }
22 
23  struct Counters {
24  uint32_t n; // in a "One to Many" association is the number of "One"
25  uint32_t m; // in a "One to Many" association is the total number of associations
26  };
27 
28  union Atomic2 {
31  };
32 
33  static constexpr c_type incr = 1UL << 32;
34 
35  __device__ __host__ Counters get() const { return counter.counters; }
36 
37  // increment n by 1 and m by i. return previous value
39  c_type c = i;
40  c += incr;
41  Atomic2 ret;
42 #ifdef __CUDA_ARCH__
43  ret.ac = atomicAdd(&counter.ac, c);
44 #else
45  ret.ac = counter.ac;
46  counter.ac += c;
47 #endif
48  return ret.counters;
49  }
50 
51  private:
53  };
54 
55  } // namespace cuda
56 } // namespace cms
57 
58 #endif // HeterogeneousCore_CUDAUtilities_interface_AtomicPairCounter_h
runTheMatrix.ret
ret
prodAgent to be discontinued
Definition: runTheMatrix.py:373
counter
Definition: counter.py:1
mps_fire.i
i
Definition: mps_fire.py:428
cms::cuda::AtomicPairCounter::AtomicPairCounter
AtomicPairCounter(c_type i)
Definition: AtomicPairCounter.h:16
cms::cuda::AtomicPairCounter::Counters
Definition: AtomicPairCounter.h:23
__device__
#define __device__
Definition: cudaCompat.h:92
cms::cuda::AtomicPairCounter::Atomic2::counters
Counters counters
Definition: AtomicPairCounter.h:29
cms::cuda::AtomicPairCounter::get
Counters get() const
Definition: AtomicPairCounter.h:35
cms::cuda::AtomicPairCounter::Atomic2::ac
c_type ac
Definition: AtomicPairCounter.h:30
cms::cudacompat::atomicAdd
T1 atomicAdd(T1 *a, T2 b)
Definition: cudaCompat.h:46
prod1Switch_cff.cuda
cuda
Definition: prod1Switch_cff.py:11
cms::cuda::AtomicPairCounter::AtomicPairCounter
AtomicPairCounter()
Definition: AtomicPairCounter.h:15
cms::cuda::AtomicPairCounter::Counters::m
uint32_t m
Definition: AtomicPairCounter.h:25
cms::cuda::AtomicPairCounter
Definition: AtomicPairCounter.h:11
__host__
#define __host__
Definition: cudaCompat.h:91
PVValHelper::add
void add(std::map< std::string, TH1 * > &h, TH1 *hist)
Definition: PVValidationHelpers.cc:12
createfilelist.int
int
Definition: createfilelist.py:10
cms::cuda::AtomicPairCounter::Counters::n
uint32_t n
Definition: AtomicPairCounter.h:24
HltBtagPostValidation_cff.c
c
Definition: HltBtagPostValidation_cff.py:31
cms::cuda::AtomicPairCounter::operator=
AtomicPairCounter & operator=(c_type i)
Definition: AtomicPairCounter.h:18
__forceinline__
#define __forceinline__
Definition: cudaCompat.h:103
cms::cuda::AtomicPairCounter::counter
Atomic2 counter
Definition: AtomicPairCounter.h:52
cms::cuda::AtomicPairCounter::c_type
unsigned long long int c_type
Definition: AtomicPairCounter.h:13
cudaCompat.h
cms::cuda::AtomicPairCounter::Atomic2
Definition: AtomicPairCounter.h:28
cms::cuda::AtomicPairCounter::incr
static constexpr c_type incr
Definition: AtomicPairCounter.h:33
cms
Namespace of DDCMS conversion namespace.
Definition: ProducerAnalyzer.cc:21