1 #ifndef DEVICE_COMPOSITE_CODEC_H_ 2 #define DEVICE_COMPOSITE_CODEC_H_ 18 template <
class Codec1,
class Codec2>
24 assert(
codec1.decodeArrayParallel_minEffectiveLength() > 1);
25 assert(
codec2.decodeArrayParallel_minEffectiveLength() == 1);
32 encodeArray(uint32_t *in,
const size_t length, uint32_t *out,
size_t &nvalue);
35 decodeArray(
const uint32_t *in,
const size_t length, uint32_t *out,
size_t &nvalue);
45 std::ostringstream convert;
46 convert <<
"Composite(" << codec1.name() <<
"-" << codec2.name() <<
")";
50 __device__ __host__
int 52 return codec2.decodeArrayParallel_minEffectiveLength();
55 __device__ __host__
int 57 return min(codec1.decodeArrayParallel_maxBlocks(), codec2.decodeArrayParallel_maxBlocks());
60 __device__ __host__
int 62 assert(codec1.decodeArrayParallel_lengthPerBlock() == codec2.decodeArrayParallel_lengthPerBlock());
63 return codec1.decodeArrayParallel_lengthPerBlock();
66 __device__ __host__
int 68 return min(codec1.decodeArrayParallel_threadsPerBlock(),codec2.decodeArrayParallel_threadsPerBlock());
71 __device__ __host__
int 73 return max(codec1.decodeArrayParallel_threadLoad(),codec2.decodeArrayParallel_threadLoad());
This is the top-level namespace of the project.
__device__ __host__ DeviceCompositeCodec()
const uint32_t * decodeArray(const uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue)
__device__ __host__ int decodeArrayParallel_threadLoad()
__device__ __host__ int decodeArrayParallel_threadsPerBlock()
__device__ __host__ int decodeArrayParallel_minEffectiveLength()
__device__ __host__ int decodeArrayParallel_lengthPerBlock()
__device__ uint32_t * decodeArrayParallel(uint32_t *d_in, size_t length, uint32_t *d_out, size_t &nvalue)
void encodeArray(uint32_t *in, const size_t length, uint32_t *out, size_t &nvalue)
__device__ uint32_t * decodeArraySequential(uint32_t *d_in, size_t length, uint32_t *d_out, size_t &nvalue)
__device__ __host__ int decodeArrayParallel_maxBlocks()