13int main(
const int argc,
const char **argv)
20 std::ifstream
in(argv[1], std::ios_base::binary);
21 std::ofstream
out(argv[2], std::ios_base::binary);
26 in.seekg(0, std::ios_base::end);
27 size_t in_size =
in.tellg();
28 in.seekg(0, std::ios_base::beg);
33 std::vector<char> in_data(in_size);
34 in.read(in_data.data(), in_size);
39 size_t out_size = ZSTD_compressBound(in_size);
40 if (ZSTD_isError(out_size)) {
43 std::vector<char> out_data(out_size);
45 ZSTD_CCtx *cctx = ZSTD_createCCtx();
49 ZSTD_CCtx_setParameter(cctx, ZSTD_c_compressionLevel, 19);
57 unsigned int workers = std::thread::hardware_concurrency();
64 if (
const char *env = std::getenv(
"CYCLES_ZSTD_WORKERS")) {
65 const int env_workers = std::atoi(env);
66 if (env_workers >= 0) {
67 workers =
static_cast<unsigned int>(env_workers);
70 ZSTD_CCtx_setParameter(cctx, ZSTD_c_nbWorkers,
static_cast<int>(workers));
71 out_size = ZSTD_compress2(cctx, out_data.data(), out_data.size(), in_data.data(), in_data.size());
73 if (ZSTD_isError(out_size)) {
77 out.write(out_data.data(), out_size);