#pragma once #include #include #define GIB(x) (x * 1024 * 1024 * 1024ull) #define GB(x) (x * 1000 * 1000 * 1000ull) #define KEY_SIZE 10 #define VALUE_SIZE 90 // 500 // 502 // 246 #define INDEX_SIZE 5 #define WRITE_BLOCK_SIZE 4095 // 4096 #define READ_ARRAY_SIZE GB(50) // Should be a multiple of IDX_RECORD_SIZE. #define READ_BUFFER_SIZE GB(50) // RUNs are equal to READ buffer size #define WRITE_BUFFER_SIZE GB(50) // NOTE: This has no use in WiscSort #define READ_SIZE 1 // in BLOCK_SIZE #define WRITE_SIZE 1 //////////////////////////////////////////////////////////////////// #define RECORD_SIZE (KEY_SIZE + VALUE_SIZE) #define REC_PER_BLOCK (BLOCK_SIZE / RECORD_SIZE) #define READ_BUFFER_COUNT (READ_BUFFER_SIZE / BLOCK_SIZE) #define WRITE_BUFFER_COUNT (WRITE_BUFFER_SIZE / BLOCK_SIZE) #define REC_PER_WRITE_BUFFER ((WRITE_BUFFER_COUNT * BLOCK_SIZE) / RECORD_SIZE) // Not required. #define REC_PER_READ_BUFFER ((READ_BUFFER_COUNT * BLOCK_SIZE) / RECORD_SIZE) //// Index #define IDX_RECORD_SIZE (KEY_SIZE + INDEX_SIZE) #define IDX_REC_PER_BLK (WRITE_BLOCK_SIZE / IDX_RECORD_SIZE) //// Beta #define READ_ARRAY_COUNT (READ_ARRAY_SIZE / RECORD_SIZE) struct Config { std::vector files; std::string output_dir; size_t read_buffer_size; size_t write_buffer_size; // Maybe needed for version 2? size_t block_size; int mode; // Three concurrency modes int read_thrds; int sort_thrds; int write_thrds; // Not from cmdline int record_size; size_t recs_per_blk; size_t read_buff_blk_count; size_t write_buff_blk_count; size_t read_buff_rec_count; size_t write_buff_rec_count; int idx_record_size; size_t idx_recs_per_blk; }; // Initialize a global struct, perhaps replace this with a singleton? extern struct Config conf;