chundoong-lab-ta/APWS23/project/util.cpp

102 lines
2.5 KiB
C++

#include "util.h"
#include <cstdio>
#include <cstdlib>
#include <unistd.h>
#include <time.h>
// Defined in main.cpp
extern int random_seed;
extern int N;
extern int print_max;
extern int MAX_LEN;
extern char *parameter_fname;
extern char *output_fname;
void *read_binary(const char *filename, size_t *size) {
size_t size_;
FILE *f = fopen(filename, "rb");
CHECK_ERROR(f != NULL, "Failed to read %s", filename);
fseek(f, 0, SEEK_END);
size_ = ftell(f);
rewind(f);
void *buf = malloc(size_);
size_t ret = fread(buf, 1, size_, f);
fclose(f);
CHECK_ERROR(size_ == ret, "Failed to read %ld bytes from %s", size_,
filename);
if (size != NULL)
*size = size_;
return buf;
}
void WriteFile(const char *filename, size_t size, void *buf) {
FILE *f = fopen(filename, "wb");
CHECK_ERROR(f != NULL, "Failed to write %s", filename);
size_t ret = fwrite(buf, 1, size, f);
fclose(f);
CHECK_ERROR(size == ret, "Failed to write %ld bytes to %s", size, filename);
}
double get_time() {
struct timespec tv;
clock_gettime(CLOCK_MONOTONIC, &tv);
return tv.tv_sec + tv.tv_nsec * 1e-9;
}
void print_usage_exit(int argc, char **argv) {
printf("Usage %s [parameter bin] [output] [N] [seed] \n", argv[0]);
printf(" parameter bin: File conatining DNN parameters\n");
printf(" output: File to write results\n");
printf(" N: Number of images to style\n");
printf(" seed: Random seed\n");
EXIT(0);
}
void check_and_parse_args(int argc, char **argv) {
if (argc != 5)
print_usage_exit(argc, argv);
int c;
while ((c = getopt(argc, argv, "h")) != -1) {
switch (c) {
case 'h':
break;
default:
print_usage_exit(argc, argv);
}
}
parameter_fname = argv[1];
output_fname = argv[2];
N = atoi(argv[3]);
random_seed = atoi(argv[4]);
}
void print_first_few_result(char *output, int print_max, double elapsed_time){
// Print first few results
int print_cnt = N < print_max ? N : print_max;
printf("First %d results are:", print_cnt);
for (int i = 0; i < print_cnt; i++) {
printf(" %s%c", output + i * (MAX_LEN + 1),
i == (print_cnt - 1) ? '\n' : ',');
}
// Write the results to file
printf("Writing to %s ...", output_fname);
fflush(stdout);
FILE *output_fp = (FILE *)fopen(output_fname, "w");
for (int i = 0; i < N; i++) {
fprintf(output_fp, "%s\n", output + i * (MAX_LEN + 1));
}
fclose(output_fp);
printf("Done!\n");
// Print elapsed time
printf("Elapsed time: %.6f seconds\n", elapsed_time);
printf("Throughput: %.3f images/sec\n", (double)N / elapsed_time);
}