diff --git a/compression/JFJochCompressor.cpp b/compression/JFJochCompressor.cpp index 1afa0177..c144abb1 100644 --- a/compression/JFJochCompressor.cpp +++ b/compression/JFJochCompressor.cpp @@ -37,7 +37,7 @@ JFJochBitShuffleCompressor::JFJochBitShuffleCompressor(CompressionAlgorithm in_a size_t JFJochBitShuffleCompressor::CompressBlock(char *dest, const char *source, size_t nelements, size_t elem_size) { // Assert nelements < block_size const char *src_ptr; - int64_t bshuf_ret = bitshuf_encode_block(tmp_space.data(), source, scratch, nelements, elem_size); + int64_t bshuf_ret = bitshuf_encode_block(tmp_space.data(), source, scratch.data(), nelements, elem_size); if (bshuf_ret < 0) throw JFJochException(JFJochExceptionCategory::Compression, "bshuf_trans_bit_elem error"); src_ptr = tmp_space.data(); @@ -100,6 +100,8 @@ int64_t JFJochBitShuffleCompressor::Compress(void *dest, size_t dest_size, const if (tmp_space.size() < DefaultBlockSize * elem_size) tmp_space.resize(DefaultBlockSize * elem_size); + if (scratch.size() < DefaultBlockSize * elem_size) + scratch.resize(DefaultBlockSize * elem_size); size_t num_full_blocks = nelements / DefaultBlockSize; size_t reminder_size = nelements - num_full_blocks * DefaultBlockSize; diff --git a/compression/JFJochCompressor.h b/compression/JFJochCompressor.h index 255a49cb..30bcbcc7 100644 --- a/compression/JFJochCompressor.h +++ b/compression/JFJochCompressor.h @@ -17,10 +17,11 @@ class JFJochBitShuffleCompressor { JFJochZstdCompressor zstd_compressor; CompressionAlgorithm algorithm; std::vector tmp_space; + std::vector scratch; size_t CompressBlock(char *dest, const char * source, size_t nelements, size_t elem_size); public: - constexpr static const size_t DefaultBlockSize = 4096; + constexpr static const size_t DefaultBlockSize = 16384; explicit JFJochBitShuffleCompressor(CompressionAlgorithm algorithm); @@ -35,8 +36,6 @@ public: } std::vector Compress(const void* source, size_t nelements, size_t elem_size); int64_t Compress(void *dest, size_t dest_size, const void* source, size_t nelements, size_t elem_size); -private: - char scratch[DefaultBlockSize * sizeof(uint64_t)]; }; template std::vector bitshuffle(const std::vector &input, size_t block_size) {