Skip to content

Commit

Permalink
Init each algorithm just before we benchmark it and de-init it after …
Browse files Browse the repository at this point in the history
…each run (not timed). This way, we test all algos and don't run into OutOfMemory errors
  • Loading branch information
kripton committed Nov 17, 2021
1 parent 5806ea7 commit 5a602ab
Show file tree
Hide file tree
Showing 13 changed files with 54 additions and 11 deletions.
4 changes: 4 additions & 0 deletions src/algo-brotli.c
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,7 @@ void brotli_uncompress(uint8_t *input, size_t insize, uint8_t *output, size_t *o
{
BrotliDecoderDecompress(insize, input, outsize, output);
}

void brotli_deinit()
{
}
1 change: 1 addition & 0 deletions src/algo-brotli.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
void brotli_init();
void brotli_compress(uint8_t* input, size_t insize, uint8_t* output, size_t* outsize);
void brotli_uncompress(uint8_t* input, size_t insize, uint8_t* output, size_t* outsize);
void brotli_deinit();

#endif // __ALGO_BROTLI_H__
6 changes: 6 additions & 0 deletions src/algo-heatshrink.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,3 +72,9 @@ void heatshrink_uncompress(uint8_t *input, size_t insize, uint8_t *output, size_

*outsize = polled;
}

void heatshrink_deinit()
{
heatshrink_decoder_reset(&dec);
heatshrink_encoder_reset(&enc);
}
1 change: 1 addition & 0 deletions src/algo-heatshrink.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
void heatshrink_init();
void heatshrink_compress(uint8_t* input, size_t insize, uint8_t* output, size_t* outsize);
void heatshrink_uncompress(uint8_t* input, size_t insize, uint8_t* output, size_t* outsize);
void heatshrink_deinit();

#endif // __ALGO_HEATSHRINK_H__
4 changes: 4 additions & 0 deletions src/algo-snappy.c
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,7 @@ void mysnappy_uncompress(uint8_t *input, size_t insize, uint8_t *output, size_t
{
snappy_uncompress(input, insize, output, outsize);
}

void mysnappy_deinit()
{
}
1 change: 1 addition & 0 deletions src/algo-snappy.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
void mysnappy_init();
void mysnappy_compress(uint8_t* input, size_t insize, uint8_t* output, size_t* outsize);
void mysnappy_uncompress(uint8_t* input, size_t insize, uint8_t* output, size_t* outsize);
void mysnappy_deinit();

#endif // __ALGO_SNAPPY_H__
5 changes: 5 additions & 0 deletions src/algo-snappyc.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,8 @@ void mysnappyc_uncompress(uint8_t *input, size_t insize, uint8_t *output, size_t
{
SNAPPYC_FUNCTION_NAME_PREFIXsnappy_uncompress(input, insize, output);
}

void mysnappyc_deinit()
{
snappy_free_env(&env);
}
1 change: 1 addition & 0 deletions src/algo-snappyc.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
void mysnappyc_init();
void mysnappyc_compress(uint8_t* input, size_t insize, uint8_t* output, size_t* outsize);
void mysnappyc_uncompress(uint8_t* input, size_t insize, uint8_t* output, size_t* outsize);
void mysnappyc_deinit();

#endif // __ALGO_SNAPPYC_H__
4 changes: 4 additions & 0 deletions src/algo-zlib.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,3 +18,7 @@ void zlib_uncompress(uint8_t *input, size_t insize, uint8_t *output, size_t *out
long unsigned int outsize2 = *outsize;
uncompress(output, &outsize2, input, insize);
}

void zlib_deinit()
{
}
1 change: 1 addition & 0 deletions src/algo-zlib.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
void zlib_init();
void zlib_compress(uint8_t* input, size_t insize, uint8_t* output, size_t* outsize);
void zlib_uncompress(uint8_t* input, size_t insize, uint8_t* output, size_t* outsize);
void zlib_deinit();

#endif // __ALGO_ZLIB_H__
6 changes: 6 additions & 0 deletions src/algo-zstd.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,9 @@ void zstd_uncompress(uint8_t *input, size_t insize, uint8_t *output, size_t *out
{
*outsize = ZSTD_decompressDCtx(dctx, output, *outsize, input, insize);
}

void zstd_deinit()
{
ZSTD_freeCCtx(cctx);
ZSTD_freeDCtx(dctx);
}
1 change: 1 addition & 0 deletions src/algo-zstd.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,6 @@
void zstd_init();
void zstd_compress(uint8_t* input, size_t insize, uint8_t* output, size_t* outsize);
void zstd_uncompress(uint8_t* input, size_t insize, uint8_t* output, size_t* outsize);
void zstd_deinit();

#endif // __ALGO_ZSTD_H__
30 changes: 19 additions & 11 deletions src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ struct algo {
void (*init)();
void (*compress)(uint8_t* input, size_t insize, uint8_t* output, size_t* outsize);
void (*uncompress)(uint8_t* input, size_t insize, uint8_t* output, size_t* outsize);
void (*deinit)();
};

enum {
Expand Down Expand Up @@ -195,40 +196,40 @@ int main() {
algos[ALGO_HEATSHRINK].init = heatshrink_init;
algos[ALGO_HEATSHRINK].compress = heatshrink_compress;
algos[ALGO_HEATSHRINK].uncompress = heatshrink_uncompress;
algos[ALGO_HEATSHRINK].init();
algos[ALGO_HEATSHRINK].deinit = heatshrink_deinit;

sprintf(algos[ALGO_ZLIB].name, "ZLIB");
algos[ALGO_ZLIB].init = zlib_init;
algos[ALGO_ZLIB].compress = zlib_compress;
algos[ALGO_ZLIB].uncompress = zlib_uncompress;
algos[ALGO_ZLIB].init();
algos[ALGO_ZLIB].deinit = zlib_deinit;

#if HAVE_ALGO_ZSTD
sprintf(algos[ALGO_ZSTD].name, "ZSTD");
algos[ALGO_ZSTD].init = zstd_init;
algos[ALGO_ZSTD].compress = zstd_compress;
algos[ALGO_ZSTD].uncompress = zstd_uncompress;
algos[ALGO_ZSTD].init();
algos[ALGO_ZSTD].deinit = zstd_deinit;
#endif

sprintf(algos[ALGO_SNAPPY].name, "SNAPPY");
algos[ALGO_SNAPPY].init = mysnappy_init;
algos[ALGO_SNAPPY].compress = mysnappy_compress;
algos[ALGO_SNAPPY].uncompress = mysnappy_uncompress;
algos[ALGO_SNAPPY].init();
algos[ALGO_SNAPPY].deinit = mysnappy_deinit;

sprintf(algos[ALGO_SNAPPYC].name, "SNAPPY-C");
algos[ALGO_SNAPPYC].init = mysnappyc_init;
algos[ALGO_SNAPPYC].compress = mysnappyc_compress;
algos[ALGO_SNAPPYC].uncompress = mysnappyc_uncompress;
algos[ALGO_SNAPPYC].init();
algos[ALGO_SNAPPYC].deinit = mysnappyc_deinit;

#if HAVE_ALGO_BROTLI
sprintf(algos[ALGO_BROTLI].name, "BROTLI");
algos[ALGO_BROTLI].init = brotli_init;
algos[ALGO_BROTLI].compress = brotli_compress;
algos[ALGO_BROTLI].uncompress = brotli_uncompress;
algos[ALGO_BROTLI].init();
algos[ALGO_BROTLI].deinit = brotli_deinit;
#endif

finish_time = time_us_32();
Expand All @@ -252,6 +253,9 @@ int main() {
size_t outsize = OUTBUF_SIZE;
size_t outsize_2 = OUTBUF_SIZE;

// Init
algos[i].init();

// Compress
memset(outbuf, 0, OUTBUF_SIZE);
start_time = time_us_32();
Expand All @@ -266,6 +270,8 @@ int main() {
finish_time = time_us_32();
elapsed_time_2 = finish_time - start_time;

algos[i].deinit();

int ratio = outsize * 100 / testvecs[j].size;
for(int k = 0; k < (32 - strlen(testvecs[j].name)); k++) {
printf(" ");
Expand All @@ -275,9 +281,11 @@ int main() {
}
}

printf("\n");
sleep_ms(500);
printf("\n");
sleep_ms(500);
printf("\n");
printf("\n ... all done :)\n");

// Idle here instead of returning since that would halt the core
// and prevent correctly printing the last lines via USB
while (true) {
sleep_ms(1);
}
};

0 comments on commit 5a602ab

Please sign in to comment.