Change chunk size

improvement-double_with_dirty_flag-logs
chortas 3 years ago
parent 5a96c98e9e
commit 4821ba5d3e

@ -4,6 +4,11 @@
#define MAX_CHUNK_SIZE 2048*2048 #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 get_mod(chunk_array_t* chunk_array,int init_pos) {
int mod; int mod;
if (chunk_array->total_size - init_pos > chunk_array->chunk_size ) { if (chunk_array->total_size - init_pos > chunk_array->chunk_size ) {
@ -53,12 +58,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); 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)); buffer_t * buffer = (buffer_t*)malloc(sizeof(buffer_t));
if (buffer == NULL) return NULL; if (buffer == NULL) return NULL;
buffer->data = malloc(MAX_CHUNK_SIZE * sizeof(double)); buffer->data = malloc(size * sizeof(double));
if (buffer->data == NULL) { if (buffer->data == NULL) {
free(buffer); free(buffer);
@ -88,7 +93,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) { if (chunk_array->buffer1 == NULL) {
fclose(chunk_array->fp); fclose(chunk_array->fp);
@ -96,7 +103,7 @@ chunk_array_t* chunk_array_create(char* filename, size_t total_size) {
return NULL; return NULL;
} }
chunk_array->buffer2 = buffer_create(); chunk_array->buffer2 = buffer_create(chunk_array->chunk_size);
if (chunk_array->buffer2 == NULL) { if (chunk_array->buffer2 == NULL) {
fclose(chunk_array->fp); fclose(chunk_array->fp);
@ -105,13 +112,12 @@ chunk_array_t* chunk_array_create(char* filename, size_t total_size) {
return NULL; 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; chunk_array->buffer1->init_pos = 0;
fread(chunk_array->buffer2->data, sizeof(double), MAX_CHUNK_SIZE, chunk_array->fp); fread(chunk_array->buffer2->data, sizeof(double), chunk_array->chunk_size, chunk_array->fp);
chunk_array->buffer2->init_pos = MAX_CHUNK_SIZE; chunk_array->buffer2->init_pos = chunk_array->chunk_size;
chunk_array->filename = filename; chunk_array->filename = filename;
chunk_array->chunk_size = MAX_CHUNK_SIZE;
chunk_array->total_size = total_size; chunk_array->total_size = total_size;
return chunk_array; return chunk_array;
} }

Loading…
Cancel
Save