From 503a66009def0b89e7085113e5be7cabd52b0520 Mon Sep 17 00:00:00 2001 From: "Julian M. Kunkel" Date: Tue, 20 Aug 2019 15:54:18 +0100 Subject: [PATCH] First build version. --- emulation/ngi.c | 5 +++++ emulation/ngi.h | 9 +++++++++ test/data-gen.c | 32 ++++++++++++++++++++++++++++++++ test/reduce-ngi.c | 39 +++++++++++++++++++++++++++++++++++++++ test/reduce-traditional.c | 36 ++++++++++++++++++++++++++++++++++++ test/run.sh | 19 +++++++++++++++++++ 6 files changed, 140 insertions(+) create mode 100644 emulation/ngi.c create mode 100644 emulation/ngi.h create mode 100644 test/data-gen.c create mode 100644 test/reduce-ngi.c create mode 100644 test/reduce-traditional.c create mode 100755 test/run.sh diff --git a/emulation/ngi.c b/emulation/ngi.c new file mode 100644 index 0000000..913fa87 --- /dev/null +++ b/emulation/ngi.c @@ -0,0 +1,5 @@ +#include + +void server_reduce(FILE * file, size_t off, size_t size){ + +} diff --git a/emulation/ngi.h b/emulation/ngi.h new file mode 100644 index 0000000..0a4efdb --- /dev/null +++ b/emulation/ngi.h @@ -0,0 +1,9 @@ +#ifndef NGI_H_ +#define NGI_H_ + +#include +#include + +void server_reduce(FILE * file, size_t off, size_t size); + +#endif diff --git a/test/data-gen.c b/test/data-gen.c new file mode 100644 index 0000000..013ed72 --- /dev/null +++ b/test/data-gen.c @@ -0,0 +1,32 @@ +#include +#include +#include +#include +#include +#include +#include + + +/* + * Generate test data + */ + +// generate some data such that we can reduce it later +void prepare_data(int size){ + float * data = malloc(size * sizeof(float)); + for(int i=0; i < size; i++){ + data[i] = (float) i; + } + + FILE * file = fopen("data.bin", "wb"); + fwrite(data, size*sizeof(float), 1, file); + + fclose(file); + free(data); +} + +int main(){ + int size = 100; + prepare_data(size); + return 0; +} diff --git a/test/reduce-ngi.c b/test/reduce-ngi.c new file mode 100644 index 0000000..3376a12 --- /dev/null +++ b/test/reduce-ngi.c @@ -0,0 +1,39 @@ +#include +#include +#include +#include +#include +#include +#include + +#include + +/* + * This application applies the reduce operation using the server-side compute using NGI + */ + +// read the data and reduce it +void reduce_data(int size){ + float * data = malloc(size * sizeof(float)); + FILE * file = fopen("data.bin", "rb"); + fread(data, size*sizeof(float), 1, file); + fclose(file); + + server_reduce(file, 0, size*sizeof(float)); + + float mx = FLT_MIN; + for(int i=0; i < size; i++){ + mx = data[i] > mx ? data[i]: mx; + } + free(data); + + printf("Maximum: %f\n", mx); +} + + + +int main(){ + int size = 100; + reduce_data(size); + return 0; +} diff --git a/test/reduce-traditional.c b/test/reduce-traditional.c new file mode 100644 index 0000000..f97d9e0 --- /dev/null +++ b/test/reduce-traditional.c @@ -0,0 +1,36 @@ +#include +#include +#include +#include +#include +#include +#include + + +/* + * This application shows a traditional reduce operation + */ + +// read the data and reduce it +void reduce_data(int size){ + float * data = malloc(size * sizeof(float)); + FILE * file = fopen("data.bin", "rb"); + fread(data, size*sizeof(float), 1, file); + fclose(file); + + float mx = FLT_MIN; + for(int i=0; i < size; i++){ + mx = data[i] > mx ? data[i]: mx; + } + free(data); + + printf("Maximum: %f\n", mx); +} + + + +int main(){ + int size = 100; + reduce_data(size); + return 0; +} diff --git a/test/run.sh b/test/run.sh new file mode 100755 index 0000000..2895cf1 --- /dev/null +++ b/test/run.sh @@ -0,0 +1,19 @@ +#!/bin/bash -e + +gcc -Wall -Wextra data-gen.c -o data-gen -g3 + +gcc -Wall -Wextra reduce-traditional.c -o reduce-traditional -g3 + + + +# Build NGI lib +gcc -Wall -Wextra ../emulation/ngi.c -shared -fpic -o libngi.so -g3 -I../emulation/ +# Build client application +gcc -Wall -Wextra reduce-ngi.c -o reduce-ngi -g3 -I../emulation/ -L. -l ngi -Wl,-rpath=$PWD + +echo "Data generation" +./data-gen +echo "Executing traditional" +./reduce-traditional +echo "Executing NGI" +./reduce-ngi