summaryrefslogtreecommitdiff
path: root/SCAN-RSS
diff options
context:
space:
mode:
authorDaniel Friesel <daniel.friesel@uos.de>2023-05-24 13:43:26 +0200
committerDaniel Friesel <daniel.friesel@uos.de>2023-05-24 13:43:26 +0200
commitd39c7edd8af938250052f2d954c82135ec0b2884 (patch)
treec5264ab8c51236fb93a0ec6eeb5afa5b98f33e3d /SCAN-RSS
parentf27c88aedeba2fe4927645ef916e3f60d8fb939b (diff)
SCAN-RSS baseline: add dfatool support
Diffstat (limited to 'SCAN-RSS')
-rw-r--r--SCAN-RSS/baselines/cpu/app_baseline.cpp77
-rwxr-xr-xSCAN-RSS/baselines/cpu/run.sh17
-rw-r--r--SCAN-RSS/support/params.h3
-rwxr-xr-xSCAN-RSS/support/timer.h7
4 files changed, 73 insertions, 31 deletions
diff --git a/SCAN-RSS/baselines/cpu/app_baseline.cpp b/SCAN-RSS/baselines/cpu/app_baseline.cpp
index 3840eb4..5fb619e 100644
--- a/SCAN-RSS/baselines/cpu/app_baseline.cpp
+++ b/SCAN-RSS/baselines/cpu/app_baseline.cpp
@@ -22,7 +22,6 @@
#include <sys/time.h>
#include <vector>
-
#include <thrust/device_vector.h>
#include <thrust/host_vector.h>
#include <thrust/scan.h>
@@ -35,6 +34,9 @@
#include "../../support/common.h"
#include "../../support/timer.h"
+#define XSTR(x) STR(x)
+#define STR(x) #x
+
#define ANSI_COLOR_RED "\x1b[31m"
#define ANSI_COLOR_GREEN "\x1b[32m"
#define ANSI_COLOR_RESET "\x1b[0m"
@@ -72,7 +74,6 @@ typedef struct Params {
unsigned int input_size;
int n_warmup;
int n_reps;
- int exp;
int n_threads;
}Params;
@@ -84,7 +85,6 @@ void usage() {
"\n -h help"
"\n -w <W> # of untimed warmup iterations (default=1)"
"\n -e <E> # of timed repetition iterations (default=3)"
- "\n -x <X> Weak (0) or strong (1) scaling (default=0)"
"\n -t <T> # of threads (default=8)"
"\n"
"\nBenchmark-specific options:"
@@ -97,11 +97,10 @@ struct Params input_params(int argc, char **argv) {
p.input_size = 2 << 20;
p.n_warmup = 1;
p.n_reps = 3;
- p.exp = 0;
p.n_threads = 8;
int opt;
- while((opt = getopt(argc, argv, "hi:w:e:x:t:")) >= 0) {
+ while((opt = getopt(argc, argv, "hi:w:e:t:")) >= 0) {
switch(opt) {
case 'h':
usage();
@@ -110,7 +109,6 @@ struct Params input_params(int argc, char **argv) {
case 'i': p.input_size = atoi(optarg); break;
case 'w': p.n_warmup = atoi(optarg); break;
case 'e': p.n_reps = atoi(optarg); break;
- case 'x': p.exp = atoi(optarg); break;
case 't': p.n_threads = atoi(optarg); break;
default:
fprintf(stderr, "\nUnrecognized option!\n");
@@ -133,7 +131,7 @@ int main(int argc, char **argv) {
unsigned int nr_of_dpus = 1;
unsigned int i = 0;
- const unsigned int input_size = p.input_size;
+ const unsigned int input_size = p.input_size;
assert(input_size % (p.n_threads) == 0 && "Input size!");
// Input/output allocation
@@ -155,7 +153,7 @@ int main(int argc, char **argv) {
// Compute output on CPU (performance comparison and verification purposes)
if(rep >= p.n_warmup)
- start(&timer, 0, rep - p.n_warmup);
+ start(&timer, 0, 0);
scan_host(C, A, input_size);
if(rep >= p.n_warmup)
stop(&timer, 0);
@@ -164,36 +162,59 @@ int main(int argc, char **argv) {
omp_set_num_threads(p.n_threads);
+ unsigned int nr_threads = 0;
+#pragma omp parallel
+#pragma omp atomic
+ nr_threads++;
+
if(rep >= p.n_warmup)
- start(&timer, 1, rep - p.n_warmup);
+ start(&timer, 1, 0);
thrust::exclusive_scan(thrust::omp::par, h_output.begin(),h_output.end(),h_output.begin());
if(rep >= p.n_warmup)
stop(&timer, 1);
- }
- // Print timing results
- printf("CPU ");
- print(&timer, 0, p.n_reps);
- printf("Kernel ");
- print(&timer, 1, p.n_reps);
-
- // Check output
- bool status = true;
- for (i = 0; i < input_size; i++) {
- if(C[i] != h_output[i]){
- status = false;
- //printf("%d: %lu -- %lu\n", i, C[i], h_output[i]);
+ // Check output
+ bool status = true;
+ for (i = 0; i < input_size; i++) {
+ if(C[i] != h_output[i]){
+ status = false;
+ //printf("%d: %lu -- %lu\n", i, C[i], h_output[i]);
+ }
}
+ if (status) {
+ printf("[" ANSI_COLOR_GREEN "OK" ANSI_COLOR_RESET "] Outputs are equal\n");
+
+ if(rep >= p.n_warmup) {
+ printf("[::] n_threads=%d e_type=%s n_elements=%d "
+ "| throughput_cpu_ref_MBps=%f throughput_cpu_thrust_MBps=%f\n",
+ nr_threads, XSTR(T), input_size,
+ input_size * sizeof(T) / timer.time[0],
+ input_size * sizeof(T) / timer.time[1]);
+ printf("[::] n_threads=%d e_type=%s n_elements=%d "
+ "| throughput_cpu_ref_MOpps=%f throughput_cpu_thrust_MOpps=%f\n",
+ nr_threads, XSTR(T), input_size,
+ input_size / timer.time[0],
+ input_size / timer.time[1]);
+ printf("[::] n_threads=%d e_type=%s n_elements=%d | ",
+ nr_threads, XSTR(T), input_size);
+ printall(&timer, 1);
+ }
+ } else {
+ printf("[" ANSI_COLOR_RED "ERROR" ANSI_COLOR_RESET "] Outputs differ!\n");
+ }
+
}
- if (status) {
- printf("[" ANSI_COLOR_GREEN "OK" ANSI_COLOR_RESET "] Outputs are equal\n");
- } else {
- printf("[" ANSI_COLOR_RED "ERROR" ANSI_COLOR_RESET "] Outputs differ!\n");
- }
+
+ // Print timing results
+ //printf("CPU ");
+ //print(&timer, 0, p.n_reps);
+ //printf("Kernel ");
+ //print(&timer, 1, p.n_reps);
+
// Deallocation
free(A);
free(C);
-
+
return 0;
}
diff --git a/SCAN-RSS/baselines/cpu/run.sh b/SCAN-RSS/baselines/cpu/run.sh
new file mode 100755
index 0000000..c2e80bc
--- /dev/null
+++ b/SCAN-RSS/baselines/cpu/run.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+set -e
+
+echo "prim-benchmarks SCAN-RSS CPU/Thrust (dfatool edition)"
+echo "Started at $(date)"
+echo "Revision $(git describe --always)"
+
+for nr_threads in 1 2 4 6 8 12 16 20 24 32; do
+ for i in 2048 4096 8192 16384 65536 262144 1048576 3932160 15728640 31457280 262144000 1258291200 2516582400; do
+ for dt in UINT32 UINT64 INT32 INT64 FLOAT DOUBLE; do
+ if make -B TYPE=${dt}; then
+ ./scan -i ${i} -w 0 -e 100 -t ${nr_threads} || true
+ fi
+ done
+ done
+done
diff --git a/SCAN-RSS/support/params.h b/SCAN-RSS/support/params.h
index bb86211..ebf3301 100644
--- a/SCAN-RSS/support/params.h
+++ b/SCAN-RSS/support/params.h
@@ -7,7 +7,6 @@ typedef struct Params {
unsigned int input_size;
int n_warmup;
int n_reps;
- int exp;
}Params;
static void usage() {
@@ -30,7 +29,6 @@ struct Params input_params(int argc, char **argv) {
p.input_size = 3932160;
p.n_warmup = 1;
p.n_reps = 3;
- p.exp = 0;
int opt;
while((opt = getopt(argc, argv, "hi:w:e:x:")) >= 0) {
@@ -42,7 +40,6 @@ struct Params input_params(int argc, char **argv) {
case 'i': p.input_size = atoi(optarg); break;
case 'w': p.n_warmup = atoi(optarg); break;
case 'e': p.n_reps = atoi(optarg); break;
- case 'x': p.exp = atoi(optarg); break;
default:
fprintf(stderr, "\nUnrecognized option!\n");
usage();
diff --git a/SCAN-RSS/support/timer.h b/SCAN-RSS/support/timer.h
index b53d95f..4d597b9 100755
--- a/SCAN-RSS/support/timer.h
+++ b/SCAN-RSS/support/timer.h
@@ -57,3 +57,10 @@ void stop(Timer *timer, int i) {
}
void print(Timer *timer, int i, int REP) { printf("Time (ms): %f\t", timer->time[i] / (1000 * REP)); }
+
+void printall(Timer *timer, int maxt) {
+ for (int i = 0; i <= maxt; i++) {
+ printf(" timer%d_us=%f", i, timer->time[i]);
+ }
+ printf("\n");
+}