#include "../headers/common.h" #include "../headers/codecfactory.h" #include "../headers/caltime.h" #include "../headers/lr.h" int random(int m) { return rand() % m; } int main(int argc, const char *argv[]) { using namespace Codecset; std::string method = std::string(argv[1]); std::string source_file = std::string(argv[2]); int blocks = atoi(argv[3]); int model_size = atoi(argv[4]); std::ios::sync_with_stdio(false); // We pick a CODEC IntegerCODEC &codec = *CODECFactory::getFromName(method); std::vector data; std::ifstream srcFile("../data/" + source_file, std::ios::in); if (!srcFile) { std::cout << "error opening source file." << std::endl; return 0; } while (srcFile.good()) { uint32_t next; srcFile >> next; // std::cout< block_start_vec; std::vector start_index; int totalsize = 0; double start = getNow(); for (int i = 0; i < blocks; i++) { int block_length = block_size; if (i == blocks - 1) { block_length = N - (blocks - 1) * block_size; } uint8_t *descriptor = (uint8_t *)malloc(block_length * sizeof(uint64_t)+1000); uint8_t *res = descriptor; // std::cout< recover(data.size()); double totaltime = 0.0; // std::cout << "decompress all!" << std::endl; int repeat = 10; start = getNow(); for (int iter = 0; iter < repeat; iter++) { for (int i = 0; i < blocks; i++) { int block_length = block_size; if (i == blocks - 1) { block_length = N - (blocks - 1) * block_size; } codec.decodeArray8(block_start_vec[i], block_length, recover.data() + i * block_size, i); } for (auto index : codec.mul_add_diff_set) { recover[index] += 1; } for (auto index : codec.mul_add_diff_set_minus) { recover[index] -= 1; } for (int j = 0; j < N; j++) { if (data[j ] != recover[j ]) { std::cout<< " num: " << j << " true is: " << data[j] << " predict is: " << recover[j] << std::endl; std::cout << "something wrong! decompress failed" << std::endl; flag = false; break; } } if (!flag) { break; } } end = getNow(); totaltime += (end - start); double da_ns = totaltime / (repeat * data.size()) * 1000000000; // std::cout << da_ns << std::endl; // std::cout << "random access decompress!" << std::endl; std::vector ra_pos; repeat = 1; for(int i=0;i buffer(data.size()); double randomaccesstime = 0.0; start = getNow(); uint32_t mark = 0; for (auto index : ra_pos) { uint32_t tmpvalue = codec.randomdecodeArray8(block_start_vec[(int)index / block_size], index % block_size, buffer.data(), N); mark += tmpvalue; if (data[index] != tmpvalue) { std::cout << "num: " << index << "true is: " << data[index] << " predict is: " << tmpvalue << std::endl; flag = false; std::cout << "something wrong! decompress failed" << std::endl; } if (!flag) { break; } } end = getNow(); randomaccesstime += (end - start); std::ofstream outfile("fix_log", std::ios::app); outfile<