Added macros for profiling functions and made it possible to compile the
profiling code out
This commit is contained in:
parent
c053d20a8f
commit
5e84e270bc
@ -2,32 +2,89 @@
|
|||||||
|
|
||||||
CC=clang
|
CC=clang
|
||||||
CXX=clang++
|
CXX=clang++
|
||||||
CFLAGS="-Wall -Wextra -Iinclude "
|
CFLAGS="-Wall -Wextra -I$(realpath ./include) "
|
||||||
|
|
||||||
if [[ "$1" == "release" ]]; then
|
# PARSE ARGUMENTS
|
||||||
|
# From this StackOverflow answer https://stackoverflow.com/a/14203146
|
||||||
|
while [[ $# > 0 ]];do
|
||||||
|
case $1 in
|
||||||
|
--release)
|
||||||
|
RELEASE=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
--enable-profiling)
|
||||||
|
ENABLE_PROFILING=true
|
||||||
|
shift
|
||||||
|
;;
|
||||||
|
*|-*|--*)
|
||||||
|
echo "Unknown option $1"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
# BUILD TYPE
|
||||||
|
if [[ $RELEASE == true ]]; then
|
||||||
CFLAGS+="-O3"
|
CFLAGS+="-O3"
|
||||||
else
|
else
|
||||||
CFLAGS+="-g"
|
CFLAGS+="-g"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# profiler
|
|
||||||
PROFSRC="./src/profiler/timer.c"
|
|
||||||
PROFFLAGS="-c"
|
|
||||||
|
|
||||||
# generator
|
# GENERATOR
|
||||||
GENSRC="./src/generator/gen_argparser.cpp ./src/generator/generator.cpp ./src/haversine.cpp ./src/point_types.cpp ./src/generator/main.cpp"
|
GENSRC="./src/generator/gen_argparser.cpp \
|
||||||
|
./src/generator/generator.cpp \
|
||||||
|
./src/haversine.cpp \
|
||||||
|
./src/point_types.cpp \
|
||||||
|
./src/generator/main.cpp"
|
||||||
GENOUT=genhavr
|
GENOUT=genhavr
|
||||||
|
|
||||||
(set -x ; $CXX $CFLAGS $GENSRC -o $GENOUT)
|
(set -x ; $CXX $CFLAGS $GENSRC -o $GENOUT)
|
||||||
|
echo
|
||||||
|
|
||||||
# processor
|
|
||||||
JSONSRC="./src/json/*.c"
|
# PROFILER
|
||||||
|
PROFSRC="../src/profiler/timer.c"
|
||||||
|
PROFFLAGS="-c"
|
||||||
|
PROF_BUILD_DIR=prof_build
|
||||||
|
|
||||||
|
# PROCESSOR
|
||||||
|
JSONSRC="../src/json/*.c"
|
||||||
JSONFLAGS="-c"
|
JSONFLAGS="-c"
|
||||||
PROCSRC="./*.o ./src/haversine.cpp ./src/point_types.cpp ./src/processor/proc_argparser.cpp ./src/processor/main.cpp"
|
JSON_BUILD_DIR=json_build
|
||||||
|
|
||||||
|
PROCSRC="./$JSON_BUILD_DIR/*.o \
|
||||||
|
./src/haversine.cpp \
|
||||||
|
./src/point_types.cpp \
|
||||||
|
./src/processor/proc_argparser.cpp \
|
||||||
|
./src/processor/main.cpp "
|
||||||
PROCOUT=prochavr
|
PROCOUT=prochavr
|
||||||
|
|
||||||
(set -x ; $CC $CFLAGS $PROFFLAGS $PROFSRC)
|
if [[ $ENABLE_PROFILING == true ]]; then
|
||||||
(set -x ; $CC $CFLAGS $JSONFLAGS $JSONSRC)
|
PROCSRC+="./$PROF_BUILD_DIR/*.o"
|
||||||
(set -x ; $CXX $CFLAGS $PROCSRC -o $PROCOUT)
|
PROCFLAGS="-DENABLE_PROFILING"
|
||||||
|
|
||||||
rm ./*.o
|
mkdir $PROF_BUILD_DIR
|
||||||
|
cd $PROF_BUILD_DIR
|
||||||
|
|
||||||
|
(set -x ; $CC $CFLAGS $PROFFLAGS $PROFSRC)
|
||||||
|
echo
|
||||||
|
|
||||||
|
cd ../
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir $JSON_BUILD_DIR
|
||||||
|
cd $JSON_BUILD_DIR
|
||||||
|
|
||||||
|
(set -x ; $CC $CFLAGS $JSONFLAGS $JSONSRC)
|
||||||
|
echo
|
||||||
|
|
||||||
|
cd ../
|
||||||
|
|
||||||
|
(set -x ; $CXX $CFLAGS $PROCFLAGS $PROCSRC -o $PROCOUT)
|
||||||
|
echo
|
||||||
|
|
||||||
|
|
||||||
|
# CLEAR BUILD FILES
|
||||||
|
rm -rvf $JSON_BUILD_DIR $PROF_BUILD_DIR
|
||||||
|
@ -3,6 +3,22 @@
|
|||||||
|
|
||||||
#include "aliases.h"
|
#include "aliases.h"
|
||||||
|
|
||||||
|
#ifndef MAX_PROFILE_SAMPLES
|
||||||
|
#define MAX_PROFILE_SAMPLES 1024
|
||||||
|
#endif // !MAX_PROFILE_SAMPLES
|
||||||
|
|
||||||
|
#ifdef ENABLE_PROFILING
|
||||||
|
#define PROFILE_START profile_start()
|
||||||
|
#define PROFILE_END profile_end()
|
||||||
|
#define SAMPLE_START(ID, TITLE) profiler_sample_t ID = sample_start(TITLE)
|
||||||
|
#define SAMPLE_END(ID) sample_end(&ID)
|
||||||
|
#else
|
||||||
|
#define PROFILE_START
|
||||||
|
#define PROFILE_END
|
||||||
|
#define SAMPLE_START(ID, TITLE)
|
||||||
|
#define SAMPLE_END(ID)
|
||||||
|
#endif // ENABLE_PROFILING
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
@ -14,20 +14,22 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
profile_start();
|
PROFILE_START;
|
||||||
|
|
||||||
profiler_sample_t cli_parse = sample_start("CLI PARSING");
|
SAMPLE_START(cli_parse, "CLI PARSING");
|
||||||
ProcessorArgs args = parse_args(argc, argv);
|
ProcessorArgs args = parse_args(argc, argv);
|
||||||
sample_end(&cli_parse);
|
SAMPLE_END(cli_parse);
|
||||||
|
|
||||||
profiler_sample_t json_parse = sample_start("JSON PARSING");
|
SAMPLE_START(json_parse, "JSON PARSING");
|
||||||
|
|
||||||
jentity_t *root = load_json(args.filepath);
|
jentity_t *root = load_json(args.filepath);
|
||||||
|
|
||||||
assert(root->type == JENTITY_SINGLE && root->value.type == JVAL_COLLECTION);
|
assert(root->type == JENTITY_SINGLE && root->value.type == JVAL_COLLECTION);
|
||||||
sample_end(&json_parse);
|
|
||||||
|
|
||||||
profiler_sample_t load_pairs_json = sample_start("LOAD JSON PAIRS");
|
SAMPLE_END(json_parse);
|
||||||
|
|
||||||
|
SAMPLE_START(load_pairs_json, "LOAD JSON PAIRS");
|
||||||
|
|
||||||
jentity_t *pairs = root->value.collection->begin;
|
jentity_t *pairs = root->value.collection->begin;
|
||||||
|
|
||||||
assert(pairs->type == JENTITY_PAIR &&
|
assert(pairs->type == JENTITY_PAIR &&
|
||||||
@ -59,9 +61,9 @@ int main(int argc, char *argv[]) {
|
|||||||
point_pairs[index++] = p;
|
point_pairs[index++] = p;
|
||||||
}
|
}
|
||||||
|
|
||||||
sample_end(&load_pairs_json);
|
SAMPLE_END(load_pairs_json);
|
||||||
|
|
||||||
profiler_sample_t binary_file_read = sample_start("BINARY READ");
|
SAMPLE_START(binary_file_read, "BINARY READ");
|
||||||
|
|
||||||
const char *filename = "count_and_distances";
|
const char *filename = "count_and_distances";
|
||||||
|
|
||||||
@ -73,9 +75,9 @@ int main(int argc, char *argv[]) {
|
|||||||
fseek(fp, sizeof(u64), SEEK_SET);
|
fseek(fp, sizeof(u64), SEEK_SET);
|
||||||
}
|
}
|
||||||
|
|
||||||
sample_end(&binary_file_read);
|
SAMPLE_END(binary_file_read);
|
||||||
|
|
||||||
profiler_sample_t haversine_sum = sample_start("HAVERSINE SUM");
|
SAMPLE_START(haversine_sum, "HAVERSINE SUM");
|
||||||
|
|
||||||
f64 sum = 0.0;
|
f64 sum = 0.0;
|
||||||
f64 distance = 0.0;
|
f64 distance = 0.0;
|
||||||
@ -95,13 +97,13 @@ int main(int argc, char *argv[]) {
|
|||||||
sum += distance;
|
sum += distance;
|
||||||
}
|
}
|
||||||
|
|
||||||
sample_end(&haversine_sum);
|
SAMPLE_END(haversine_sum);
|
||||||
|
|
||||||
profiler_sample_t haversine_average = sample_start("HAVERSINE AVERAGE");
|
SAMPLE_START(haversine_average, "HAVERSINE AVERAGE");
|
||||||
printf("\nAVERAGE DISTANCE: %f\n", sum / pair_count);
|
printf("\nAVERAGE DISTANCE: %f\n", sum / pair_count);
|
||||||
sample_end(&haversine_average);
|
SAMPLE_END(haversine_average);
|
||||||
|
|
||||||
profiler_sample_t tear_down = sample_start("TEAR DOWN");
|
SAMPLE_START(tear_down, "TEAR DOWN");
|
||||||
|
|
||||||
if (fp) {
|
if (fp) {
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
@ -109,9 +111,9 @@ int main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
free(point_pairs);
|
free(point_pairs);
|
||||||
|
|
||||||
sample_end(&tear_down);
|
SAMPLE_END(tear_down);
|
||||||
|
|
||||||
profile_end();
|
PROFILE_END;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -6,8 +6,6 @@
|
|||||||
|
|
||||||
#include <x86intrin.h>
|
#include <x86intrin.h>
|
||||||
|
|
||||||
#define MAX_PROFILE_SAMPLES 1024
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
profiler_sample_t samples[MAX_PROFILE_SAMPLES];
|
profiler_sample_t samples[MAX_PROFILE_SAMPLES];
|
||||||
u64 cpu_freq;
|
u64 cpu_freq;
|
||||||
|
Loading…
Reference in New Issue
Block a user