From fa84e8c23960b2c543b74bd610e6b60e69e48d7b Mon Sep 17 00:00:00 2001 From: chortas Date: Sat, 29 Jan 2022 19:33:48 -0300 Subject: [PATCH] Change chunk size --- fftma_module/gen/lib_src/chunk_array.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/fftma_module/gen/lib_src/chunk_array.c b/fftma_module/gen/lib_src/chunk_array.c index 13158d4..e353f75 100644 --- a/fftma_module/gen/lib_src/chunk_array.c +++ b/fftma_module/gen/lib_src/chunk_array.c @@ -4,6 +4,11 @@ #define MAX_CHUNK_SIZE 2048*2048 +int min(int value1, int value2) { + if (value1 < value2) return value1; + return value2; +} + int get_mod(chunk_array_t* chunk_array,int init_pos) { int mod; if (chunk_array->total_size - init_pos > chunk_array->chunk_size ) { @@ -50,12 +55,12 @@ void buffer_update(chunk_array_t* chunk_array, buffer_t* buffer, size_t pos) { fread(buffer->data, sizeof(double), chunk_array->chunk_size, chunk_array->fp); } -buffer_t* buffer_create() { +buffer_t* buffer_create(int size) { buffer_t * buffer = (buffer_t*)malloc(sizeof(buffer_t)); if (buffer == NULL) return NULL; - buffer->data = malloc(MAX_CHUNK_SIZE * sizeof(double)); + buffer->data = malloc(size * sizeof(double)); if (buffer->data == NULL) { free(buffer); @@ -84,7 +89,9 @@ chunk_array_t* chunk_array_create(char* filename, size_t total_size) { } } - chunk_array->buffer1 = buffer_create(); + chunk_array->chunk_size = min(MAX_CHUNK_SIZE, total_size); + + chunk_array->buffer1 = buffer_create(chunk_array->chunk_size); if (chunk_array->buffer1 == NULL) { fclose(chunk_array->fp); @@ -92,7 +99,7 @@ chunk_array_t* chunk_array_create(char* filename, size_t total_size) { return NULL; } - chunk_array->buffer2 = buffer_create(); + chunk_array->buffer2 = buffer_create(chunk_array->chunk_size); if (chunk_array->buffer2 == NULL) { fclose(chunk_array->fp); @@ -101,13 +108,12 @@ chunk_array_t* chunk_array_create(char* filename, size_t total_size) { return NULL; } - fread(chunk_array->buffer1->data, sizeof(double), MAX_CHUNK_SIZE, chunk_array->fp); + fread(chunk_array->buffer1->data, sizeof(double), chunk_array->chunk_size, chunk_array->fp); chunk_array->buffer1->init_pos = 0; - fread(chunk_array->buffer2->data, sizeof(double), MAX_CHUNK_SIZE, chunk_array->fp); - chunk_array->buffer2->init_pos = MAX_CHUNK_SIZE; + fread(chunk_array->buffer2->data, sizeof(double), chunk_array->chunk_size, chunk_array->fp); + chunk_array->buffer2->init_pos = chunk_array->chunk_size; chunk_array->filename = filename; - chunk_array->chunk_size = MAX_CHUNK_SIZE; chunk_array->total_size = total_size; return chunk_array; }