From f39be23c18b70815c252f183325c0b2463692990 Mon Sep 17 00:00:00 2001 From: Oli Date: Sun, 6 Feb 2022 13:56:47 -0300 Subject: [PATCH] fix --- fftma_module/gen/include/chunk_array.h | 1 + fftma_module/gen/lib_src/chunk_array.c | 25 ++++++++++++------------- fftma_module/gen/lib_src/fourt.c | 5 ----- 3 files changed, 13 insertions(+), 18 deletions(-) diff --git a/fftma_module/gen/include/chunk_array.h b/fftma_module/gen/include/chunk_array.h index 6f11aad..5dd2082 100644 --- a/fftma_module/gen/include/chunk_array.h +++ b/fftma_module/gen/include/chunk_array.h @@ -22,6 +22,7 @@ typedef struct chunk_array { buffer_t* buffer1; buffer_t* buffer2; buffer_t** buffers; + size_t n_buffers; }chunk_array_t; chunk_array_t* chunk_array_create(char* filename, size_t total_size); diff --git a/fftma_module/gen/lib_src/chunk_array.c b/fftma_module/gen/lib_src/chunk_array.c index 6f583cf..ba3e5fb 100644 --- a/fftma_module/gen/lib_src/chunk_array.c +++ b/fftma_module/gen/lib_src/chunk_array.c @@ -3,7 +3,7 @@ #include "stdlib.h" #include -#define MAX_CHUNK_SIZE 2048 +#define MAX_CHUNK_SIZE 2048*2048 #define N_BUFFERS 3 int min(int value1, int value2) { @@ -30,7 +30,7 @@ bool inside_buffer(chunk_array_t* chunk_array,int init_pos, size_t pos) { void chunk_array_free(chunk_array_t* chunk_array) { if (chunk_array->mmap_array) munmap(chunk_array->mmap_array, chunk_array->total_size * sizeof(double)); - for (int i = 0; i < N_BUFFERS; i++) { + for (int i = 0; i < chunk_array->n_buffers; i++) { buffer_free(chunk_array->buffers[i]); } free(chunk_array->buffers); @@ -38,7 +38,7 @@ void chunk_array_free(chunk_array_t* chunk_array) { } void buffer_flush(chunk_array_t* chunk_array, buffer_t* buffer) { - if (buffer->dirty) { + if (buffer->dirty && chunk_array->mmap_array) { int mod = get_mod(chunk_array, buffer->init_pos); memcpy(&chunk_array->mmap_array[buffer->init_pos], buffer->data, mod * sizeof(double)); @@ -53,8 +53,9 @@ void buffer_update(chunk_array_t* chunk_array, buffer_t* buffer, size_t pos) { int new_init = pos/chunk_array->chunk_size; buffer->init_pos = new_init * chunk_array->chunk_size; int mod = get_mod(chunk_array, buffer->init_pos); - - memcpy(buffer->data, &chunk_array->mmap_array[buffer->init_pos], mod * sizeof(double)); + if (chunk_array->mmap_array) { + memcpy(buffer->data, &chunk_array->mmap_array[buffer->init_pos], mod * sizeof(double)); + } } buffer_t* buffer_create(int size) { @@ -105,8 +106,11 @@ chunk_array_t* chunk_array_create(char* filename, size_t total_size) { chunk_array->buffers[0]->init_pos = 0; + chunk_array->n_buffers = 1; + for (int i = 1; i i*chunk_array->chunk_size) { + chunk_array->n_buffers++; chunk_array->buffers[i] = buffer_create(chunk_array->chunk_size); chunk_array->buffers[i]->init_pos = chunk_array->chunk_size; } else { @@ -124,20 +128,15 @@ buffer_t* chunk_array_update(chunk_array_t* chunk_array, size_t pos) { buffer_t* buffer = chunk_array->buffers[0]; int distance = abs(buffer->init_pos - pos); - printf("[CHUNK UPDATE][%s] pos: %d \n",chunk_array->filename, pos); - - for(int i=1; in_buffers; i++) { int new_distance = abs(chunk_array->buffers[i]->init_pos - pos); if (new_distance < distance) { distance = new_distance; buffer = chunk_array->buffers[i]; } } - buffer_update(chunk_array, buffer, pos); return buffer; - - } bool chunk_array_get(chunk_array_t* chunk_array, size_t pos, double *valor) { @@ -149,7 +148,7 @@ bool chunk_array_get(chunk_array_t* chunk_array, size_t pos, double *valor) { // mmap buffer_t* buffer = NULL; - for (int i = 0; in_buffers; i++) { if (inside_buffer(chunk_array, chunk_array->buffers[i]->init_pos, pos)) { buffer = chunk_array->buffers[i]; } @@ -176,7 +175,7 @@ bool chunk_array_save(chunk_array_t* chunk_array, size_t pos, double valor) { // mmap buffer_t* buffer = NULL; - for (int i = 0; in_buffers; i++) { if (inside_buffer(chunk_array, chunk_array->buffers[i]->init_pos, pos)) { buffer = chunk_array->buffers[i]; } diff --git a/fftma_module/gen/lib_src/fourt.c b/fftma_module/gen/lib_src/fourt.c index c504b79..cab614b 100644 --- a/fftma_module/gen/lib_src/fourt.c +++ b/fftma_module/gen/lib_src/fourt.c @@ -335,11 +335,6 @@ void fourt(chunk_array_t* datar, chunk_array_t* datai, int nn[3], int ndim, int //chunk_array_get(datar, j, &valuerj); //chunk_array_get(datai, j, &valueij); - printf("start\n"); - printf("[GET] %d\n", j); - printf("[SAVE] %d\n", i); - printf("[SAVE] %d\n", j); - printf("end\n"); chunk_array_save(datar, j, valuerj + tempr); chunk_array_save(datai, j, valueij + tempi);