Add improvements
parent
f4ccbbff6f
commit
f35afe06f2
File diff suppressed because one or more lines are too long
@ -0,0 +1,36 @@
|
|||||||
|
#ifndef _CHUNKARRAY_H
|
||||||
|
#define _CHUNKARRAY_H
|
||||||
|
|
||||||
|
#include <stdarg.h>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
#define MAX_CHUNK_SIZE 32
|
||||||
|
|
||||||
|
typedef struct chunk_array {
|
||||||
|
size_t init_pos;
|
||||||
|
size_t chunk_size;
|
||||||
|
size_t total_size;
|
||||||
|
FILE* fp;
|
||||||
|
double* data;
|
||||||
|
}chunk_array_t;
|
||||||
|
|
||||||
|
chunk_array_t* chunk_array_create(char* filename, size_t total_size, size_t chunk_size);
|
||||||
|
|
||||||
|
void chunk_array_read(chunk_array_t* chunk_array);
|
||||||
|
|
||||||
|
//void chunk_array_write(chunk_array_t* chunk_array, char* filename);
|
||||||
|
|
||||||
|
void chunk_array_free(chunk_array_t* chunk_array);
|
||||||
|
|
||||||
|
bool chunk_array_get(chunk_array_t* chunk_array, size_t pos, double *value_ptr);
|
||||||
|
|
||||||
|
bool chunk_array_save(chunk_array_t* chunk_array, size_t pos, double valor);
|
||||||
|
|
||||||
|
void chunk_array_flush(chunk_array_t* chunk_array);
|
||||||
|
|
||||||
|
size_t chunk_array_size(chunk_array_t* chunk_array);
|
||||||
|
|
||||||
|
#endif
|
@ -0,0 +1,72 @@
|
|||||||
|
#include "chunk_array.h"
|
||||||
|
#include "stdbool.h"
|
||||||
|
|
||||||
|
void chunk_array_free(chunk_array_t* chunk_array) {
|
||||||
|
fclose(chunk_array->fp);
|
||||||
|
free(chunk_array->data);
|
||||||
|
free(chunk_array);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool chunk_array_update_read(chunk_array_t* chunk_array) {
|
||||||
|
size_t newLen = fread(chunk_array->data, sizeof(double), chunk_array->chunk_size, chunk_array->fp);
|
||||||
|
chunk_array->init_pos += newLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool chunk_array_get(chunk_array_t* chunk_array, size_t pos, double *valor) {
|
||||||
|
if (pos>((chunk_array->init_pos + chunk_array->chunk_size)-1)) {
|
||||||
|
chunk_array_update_read(chunk_array);
|
||||||
|
}
|
||||||
|
*valor=chunk_array->data[pos%chunk_array->chunk_size];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool chunk_array_save(chunk_array_t* chunk_array, size_t pos, double valor) {
|
||||||
|
if (pos>((chunk_array->init_pos + chunk_array->chunk_size)-1)) {
|
||||||
|
chunk_array_flush(chunk_array);
|
||||||
|
}
|
||||||
|
chunk_array->data[pos%chunk_array->chunk_size]=valor;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
chunk_array_t* chunk_array_create(char* filename, size_t total_size, size_t chunk_size) {
|
||||||
|
chunk_array_t* chunk_array = (chunk_array_t*)malloc(sizeof(chunk_array_t));
|
||||||
|
|
||||||
|
chunk_array->fp = fopen(filename, "w+");
|
||||||
|
|
||||||
|
if (chunk_array == NULL || chunk_array->fp == NULL) {
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
chunk_array->data = malloc(chunk_size * sizeof(double));
|
||||||
|
|
||||||
|
if (chunk_size > 0 && chunk_array->data == NULL) {
|
||||||
|
free(chunk_array);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
chunk_array->init_pos = 0;
|
||||||
|
chunk_array->chunk_size = chunk_size;
|
||||||
|
chunk_array->total_size = total_size;
|
||||||
|
return chunk_array;
|
||||||
|
}
|
||||||
|
|
||||||
|
void chunk_array_read(chunk_array_t* chunk_array) {
|
||||||
|
rewind(chunk_array->fp);
|
||||||
|
chunk_array->init_pos = 0;
|
||||||
|
size_t newLen = fread(chunk_array->data, sizeof(double), chunk_array->chunk_size, chunk_array->fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
void chunk_array_write(chunk_array_t* chunk_array, char* filename) {
|
||||||
|
chunk_array->fp = fopen(filename, "w");
|
||||||
|
if (chunk_array->fp == NULL) {
|
||||||
|
printf("ke");
|
||||||
|
fclose(chunk_array->fp);
|
||||||
|
chunk_array->fp = fopen(filename, "w");
|
||||||
|
}
|
||||||
|
chunk_array->init_pos = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void chunk_array_flush(chunk_array_t* chunk_array) {
|
||||||
|
size_t newLen = fwrite(chunk_array->data, sizeof(double), chunk_array->chunk_size, chunk_array->fp);
|
||||||
|
chunk_array->init_pos += newLen;
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
import collections
|
||||||
|
|
||||||
|
def parse_array():
|
||||||
|
with open("log_16-aa") as log_file:
|
||||||
|
|
||||||
|
# rearrange data
|
||||||
|
lines_parsed = []
|
||||||
|
lines = log_file.readlines()
|
||||||
|
for line in lines:
|
||||||
|
if "iv[0]" in line:
|
||||||
|
line_splitted = line.split()[2::3]
|
||||||
|
lines_parsed.append(line_splitted)
|
||||||
|
|
||||||
|
# create histogram
|
||||||
|
histogram = {}
|
||||||
|
for i in range(len(lines_parsed)):
|
||||||
|
for j in range(len(lines_parsed[i])):
|
||||||
|
histogram[j] = histogram.get(j, [])
|
||||||
|
histogram[j].append(lines_parsed[i][j])
|
||||||
|
|
||||||
|
# iterate histogram
|
||||||
|
for position, values in histogram.items():
|
||||||
|
print(collections.Counter(values))
|
||||||
|
|
||||||
|
parse_array()
|
@ -1,2 +1,2 @@
|
|||||||
python3 setup.py install --user
|
python3 setup.py install --user
|
||||||
ENV=analysis python3 test.py $1 2>&1 | split -l 5000000 - log_$1-
|
ENV=analysis python3 test.py $1 2>&1 | split -l 5000000 - log_$1_generate_improve-
|
Loading…
Reference in New Issue