GENIE
DeviceCodecs.h
Go to the documentation of this file.
1 #ifndef DEVICE_CODECS_H_
2 #define DEVICE_CODECS_H_
3 
4 #include <cassert>
5 #include <cstring>
6 #include <string>
7 #include <stdexcept>
8 #include <vector>
9 
10 namespace genie
11 {
12 namespace compression
13 {
14 
15 template <class CODEC> __global__ void
17  uint32_t *d_Input,
18  size_t arrayLength,
19  uint32_t *d_Output,
20  size_t capacity,
21  size_t *d_decomprLength);
22 
23 
24 template <class CODEC> void
26  int blocks,
27  int threads,
28  uint32_t *d_Input,
29  size_t arrayLength,
30  uint32_t *d_Output,
31  size_t capacity,
32  size_t *d_decomprLength);
33 
34 
36 public:
37  __device__ __host__
39 
40  virtual void
41  encodeArray(uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue) = 0;
42 
43  virtual const uint32_t*
44  decodeArray(const uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue) = 0;
45 
53  __device__ const uint32_t*
54  decodeArraySequential(const uint32_t *d_in, const size_t length, uint32_t *d_out, size_t &nvalue) {return NULL;}
55 
62  __device__ const uint32_t*
63  decodeArrayParallel(const uint32_t *d_in, const size_t length, uint32_t *d_out, size_t &nvalue) {return NULL;}
64 
65  virtual std::string
66  name() const {return std::string();};
67 
69  virtual __device__ __host__ int
71 
73  virtual __device__ __host__ int
75 
77  virtual __device__ __host__ int
79 
81  virtual __device__ __host__ int
83 
85  virtual __device__ __host__ int
87 };
88 
90 public:
91 
92  __device__ __host__
94 
95  void
96  encodeArray(uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue)
97  {
98  std::memcpy(out, in, sizeof(uint32_t) * length);
99  nvalue = length;
100  }
101 
102  const uint32_t*
103  decodeArray(const uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue)
104  {
105  std::memcpy(out, in, sizeof(uint32_t) * length);
106  nvalue = length;
107  return in + length;
108  }
109 
110  __device__ uint32_t*
111  decodeArraySequential(uint32_t *d_in, size_t length, uint32_t *d_out, size_t &nvalue);
112 
113  __device__ uint32_t*
114  decodeArrayParallel(uint32_t *d_in, size_t length, uint32_t *d_out, size_t &nvalue);
115 
116  std::string
117  name() const { return "CopyMB"; }
118 
119  __device__ __host__ int decodeArrayParallel_maxBlocks() { return 65535; }
120  __device__ __host__ int decodeArrayParallel_minEffectiveLength() { return 1; }
121  __device__ __host__ int decodeArrayParallel_lengthPerBlock() { return 1024; }
122  __device__ __host__ int decodeArrayParallel_threadsPerBlock() { return 1024; }
123  __device__ __host__ int decodeArrayParallel_threadLoad() { return 1; }
124 
125 };
126 
128 public:
129 
130  __device__ __host__
132 
133  void
134  encodeArray(uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue)
135  {
136  std::memcpy(out, in, sizeof(uint32_t) * length);
137  nvalue = length;
138  }
139 
140  const uint32_t*
141  decodeArray(const uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue)
142  {
143  std::memcpy(out, in, sizeof(uint32_t) * length);
144  nvalue = length;
145  return in + length;
146  }
147 
148  __device__ uint32_t*
149  decodeArraySequential(uint32_t *d_in, size_t length, uint32_t *d_out, size_t &nvalue);
150 
151 
152  __device__ uint32_t*
153  decodeArrayParallel(uint32_t *d_in, size_t length, uint32_t *d_out, size_t &nvalue);
154 
155  std::string
156  name() const { return "Copy"; }
157 
158  __device__ __host__ int decodeArrayParallel_maxBlocks() { return 1; }
159  __device__ __host__ int decodeArrayParallel_minEffectiveLength() { return 1; }
160  __device__ __host__ int decodeArrayParallel_lengthPerBlock() { return 1024; }
161  __device__ __host__ int decodeArrayParallel_threadsPerBlock() { return 256; }
162  __device__ __host__ int decodeArrayParallel_threadLoad() { return 4; }
163 
164 };
165 
166 
168 public:
169 
170  __device__ __host__
172 
173  void
174  encodeArray(uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue);
175 
176  const uint32_t*
177  decodeArray(const uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue);
178 
179  __device__ const uint32_t*
180  decodeArraySequential(const uint32_t *d_in, const size_t length, uint32_t *d_out, size_t &nvalue);
181 
182  __device__ uint32_t*
183  decodeArrayParallel(uint32_t *d_in, size_t length, uint32_t *d_out, size_t &nvalue);
184 
185  std::string
186  name() const { return "Delta"; }
187 
188  __device__ __host__ int decodeArrayParallel_maxBlocks() { return 1; }
189  __device__ __host__ int decodeArrayParallel_minEffectiveLength() { return 1; }
190  __device__ __host__ int decodeArrayParallel_lengthPerBlock() { return 1024; }
191  __device__ __host__ int decodeArrayParallel_threadsPerBlock() { return 256; }
192  __device__ __host__ int decodeArrayParallel_threadLoad() { return 4; }
193 };
194 
195 } // namespace compression
196 } // namespace genie
197 
198 #endif
virtual __device__ __host__ int decodeArrayParallel_maxBlocks()
Definition: DeviceCodecs.h:74
__device__ __host__ int decodeArrayParallel_maxBlocks()
Definition: DeviceCodecs.h:119
void decodeArrayParallel(int blocks, int threads, uint32_t *d_Input, size_t arrayLength, uint32_t *d_Output, size_t capacity, size_t *d_decomprLength)
This is the top-level namespace of the project.
__device__ __host__ int decodeArrayParallel_threadLoad()
Definition: DeviceCodecs.h:123
virtual __device__ __host__ int decodeArrayParallel_lengthPerBlock()
Definition: DeviceCodecs.h:78
virtual __device__ __host__ int decodeArrayParallel_threadLoad()
Definition: DeviceCodecs.h:86
__device__ __host__ int decodeArrayParallel_lengthPerBlock()
Definition: DeviceCodecs.h:160
__device__ __host__ int decodeArrayParallel_threadsPerBlock()
Definition: DeviceCodecs.h:122
virtual void encodeArray(uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue)=0
__device__ const uint32_t * decodeArrayParallel(const uint32_t *d_in, const size_t length, uint32_t *d_out, size_t &nvalue)
Definition: DeviceCodecs.h:63
__device__ __host__ int decodeArrayParallel_threadsPerBlock()
Definition: DeviceCodecs.h:191
const uint32_t * decodeArray(const uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue)
Definition: DeviceCodecs.h:103
__device__ __host__ int decodeArrayParallel_threadLoad()
Definition: DeviceCodecs.h:162
__device__ __host__ int decodeArrayParallel_lengthPerBlock()
Definition: DeviceCodecs.h:190
virtual std::string name() const
Definition: DeviceCodecs.h:66
void encodeArray(uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue)
Definition: DeviceCodecs.h:96
__device__ __host__ int decodeArrayParallel_maxBlocks()
Definition: DeviceCodecs.h:158
virtual const uint32_t * decodeArray(const uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue)=0
const uint32_t * decodeArray(const uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue)
Definition: DeviceCodecs.h:141
void encodeArray(uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue)
Definition: DeviceCodecs.h:134
__device__ __host__ DeviceDeltaCodec()
Definition: DeviceCodecs.h:171
virtual __device__ __host__ int decodeArrayParallel_minEffectiveLength()
Definition: DeviceCodecs.h:70
__device__ __host__ int decodeArrayParallel_maxBlocks()
Definition: DeviceCodecs.h:188
__device__ __host__ DeviceCopyCodec()
Definition: DeviceCodecs.h:131
__device__ __host__ int decodeArrayParallel_minEffectiveLength()
Definition: DeviceCodecs.h:159
__device__ __host__ int decodeArrayParallel_minEffectiveLength()
Definition: DeviceCodecs.h:189
__device__ __host__ int decodeArrayParallel_minEffectiveLength()
Definition: DeviceCodecs.h:120
__device__ __host__ int decodeArrayParallel_lengthPerBlock()
Definition: DeviceCodecs.h:121
__global__ void g_decodeArrayParallel(uint32_t *d_Input, size_t arrayLength, uint32_t *d_Output, size_t capacity, size_t *d_decomprLength)
__device__ const uint32_t * decodeArraySequential(const uint32_t *d_in, const size_t length, uint32_t *d_out, size_t &nvalue)
Definition: DeviceCodecs.h:54
__device__ __host__ DeviceIntegerCODEC()
Definition: DeviceCodecs.h:38
__device__ __host__ int decodeArrayParallel_threadLoad()
Definition: DeviceCodecs.h:192
__device__ __host__ int decodeArrayParallel_threadsPerBlock()
Definition: DeviceCodecs.h:161
virtual __device__ __host__ int decodeArrayParallel_threadsPerBlock()
Definition: DeviceCodecs.h:82