GENIE
DeviceDeltaHelper.h
Go to the documentation of this file.
1 
6 #ifndef DEVICE_DELTA_HELPER_H_
7 #define DEVICE_DELTA_HELPER_H_
8 
9 namespace genie
10 {
11 namespace compression
12 {
13 
14 template <class T>
16 
17  static void
18  delta(const T initoffset, T *data, const size_t size) {
19  if (size == 0)
20  return; // nothing to do
21  if (size > 1)
22  for (size_t i = size - 1; i > 0; --i) {
23  data[i] -= data[i - 1];
24  }
25  data[0] -= initoffset;
26  }
27 
28  static void
29  inverseDelta(const T initoffset, T *data, const size_t size) {
30  if (size == 0)
31  return; // nothing to do
32  data[0] += initoffset;
33  const size_t UnrollQty = 4;
34  const size_t sz0 =
35  (size / UnrollQty) * UnrollQty; // equal to 0, if size < UnrollQty
36  size_t i = 1;
37  if (sz0 >= UnrollQty) {
38  T a = data[0];
39  for (; i < sz0 - UnrollQty; i += UnrollQty) {
40  a = data[i] += a;
41  a = data[i + 1] += a;
42  a = data[i + 2] += a;
43  a = data[i + 3] += a;
44  }
45  }
46  for (; i != size; ++i) {
47  data[i] += data[i - 1];
48  }
49  }
50 
51  __device__ static void
52  inverseDeltaOnGPU(const T initoffset, T *d_data, const size_t size) {
53  if (size == 0)
54  return; // nothing to do
55  d_data[0] += initoffset;
56  for (size_t i = 1; i != size; ++i) {
57  d_data[i] += d_data[i - 1];
58  }
59  }
60 };
61 
62 } // namespace compression
63 } // namespace genie
64 
65 #endif
This is the top-level namespace of the project.
static void delta(const T initoffset, T *data, const size_t size)
static __device__ void inverseDeltaOnGPU(const T initoffset, T *d_data, const size_t size)
static void inverseDelta(const T initoffset, T *data, const size_t size)