Skip to content

Commit 231ab4d

Browse files
author
Arjun Ramaswami
committed
Time the entire API call
1 parent 3174d0c commit 231ab4d

File tree

5 files changed

+42
-5
lines changed

5 files changed

+42
-5
lines changed

examples/common/helper.c

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
// Author: Arjun Ramaswami
22

3+
#define _POSIX_C_SOURCE 199309L
34
#include <stdio.h>
45
#include <stdlib.h>
56
#include <stdbool.h>
67
#include <math.h>
78
#include "helper.h"
9+
#include <time.h>
10+
#include <sys/time.h>
11+
#include <math.h>
12+
#define _USE_MATH_DEFINES
813

914
/**
1015
* \brief create random single precision complex floating point values
@@ -71,14 +76,21 @@ void print_config(int N, int dim, int iter, int inv, int sp, int use_bram){
7176

7277
/**
7378
* \brief print time taken for fpga and fftw runs to a file
79+
* \param total_api_time: time taken to call iter times the host code
7480
* \param timing: kernel execution and pcie transfer timing
7581
* \param N: fft size
7682
* \param dim: number of dimensions of size
7783
* \param iter: number of iterations of each transformation (if BATCH mode)
7884
* \param inv: 1 if backward transform
7985
* \param single precision floating point transformation
8086
*/
81-
void display_measures(double pcie_rd, double pcie_wr, double exec_t, int N, int dim, int iter, int inv, int sp){
87+
void display_measures(double total_api_time, double pcie_rd, double pcie_wr, double exec_t, int N, int dim, int iter, int inv, int sp){
88+
89+
double avg_api_time = 0.0;
90+
91+
if (total_api_time != 0.0){
92+
avg_api_time = total_api_time / iter;
93+
}
8294

8395
double pcie_read = pcie_rd / iter;
8496
double pcie_write = pcie_wr / iter;
@@ -106,4 +118,18 @@ void display_measures(double pcie_rd, double pcie_wr, double exec_t, int N, int
106118
printf("Kernel Execution = %.2lfms\n", exec);
107119
printf("PCIe Read = %.2lfms\n", pcie_read);
108120
printf("Throughput = %.2lfGFLOPS/s | %.2lf GB/s\n", gflops, gBytes_per_sec);
121+
printf("Avg API runtime = %.2lfms\n", avg_api_time);
122+
}
123+
124+
/**
125+
* \brief compute walltime in milliseconds
126+
* \return time in milliseconds
127+
*/
128+
double getTimeinMilliseconds(){
129+
struct timespec a;
130+
if(clock_gettime(CLOCK_MONOTONIC, &a) != 0){
131+
fprintf(stderr, "Error in getting wall clock time \n");
132+
exit(EXIT_FAILURE);
133+
}
134+
return (double)(a.tv_nsec) * 1.0e-6 + (double)(a.tv_sec) * 1.0E3;
109135
}

examples/common/helper.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ bool fft_create_data(double2 *inp, int N);
1212

1313
void print_config(int N, int dim, int iter, int inv, int sp, int use_bram);
1414

15-
void display_measures(double pcie_rd, double pcie_wr, double exec, int N, int dim, int iter, int inv, int sp);
15+
void display_measures(double total_api_time, double pcie_rd, double pcie_wr, double exec, int N, int dim, int iter, int inv, int sp);
1616

17+
double getTimeinMilliseconds();
1718
#endif // HELPER_H

examples/fft1d.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ int main(int argc, const char **argv) {
8484
return EXIT_FAILURE;
8585
}
8686

87-
display_measures(timing.pcie_read_t, timing.pcie_write_t, timing.exec_t, N, dim, iter, inv, sp);
87+
display_measures(0.0, timing.pcie_read_t, timing.pcie_write_t, timing.exec_t, N, dim, iter, inv, sp);
8888
}
8989
else{
9090
fprintf(stderr, "Invalid timing measurement. Function returned prematurely\n");

examples/fft2d.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ int main(int argc, const char **argv) {
2424
fpga_t timing = {0.0, 0.0, 0.0, 0};
2525
int use_svm = 0, use_emulator = 0;
2626
double avg_rd = 0.0, avg_wr = 0.0, avg_exec = 0.0;
27+
double temp_timer = 0.0, total_api_time = 0.0;
2728
bool status = true;
2829

2930
struct argparse_option options[] = {
@@ -72,11 +73,15 @@ int main(int argc, const char **argv) {
7273

7374
if(use_bram == 1){
7475
// use bram for 2d Transpose
76+
temp_timer = getTimeinMilliseconds();
7577
timing = fftfpgaf_c2c_2d_bram(N, inp, out, inv);
78+
total_api_time += getTimeinMilliseconds() - temp_timer;
7679
}
7780
else{
7881
// use global memory for 2d Transpose
82+
temp_timer = getTimeinMilliseconds();
7983
timing = fftfpgaf_c2c_2d_ddr(N, inp, out, inv);
84+
total_api_time += getTimeinMilliseconds() - temp_timer;
8085
}
8186

8287
#ifdef USE_FFTW
@@ -108,7 +113,7 @@ int main(int argc, const char **argv) {
108113
fpga_final();
109114

110115
// display performance measures
111-
display_measures(avg_rd, avg_wr, avg_exec, N, dim, iter, inv, sp);
116+
display_measures(total_api_time, avg_rd, avg_wr, avg_exec, N, dim, iter, inv, sp);
112117

113118
return EXIT_SUCCESS;
114119
}

examples/fft3d.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ int main(int argc, const char **argv) {
2424
fpga_t timing = {0.0, 0.0, 0.0, 0};
2525
int use_svm = 0, use_emulator = 0;
2626
double avg_rd = 0.0, avg_wr = 0.0, avg_exec = 0.0;
27+
double temp_timer = 0.0, total_api_time = 0.0;
2728
bool status = true;
2829

2930
struct argparse_option options[] = {
@@ -73,11 +74,15 @@ int main(int argc, const char **argv) {
7374

7475
if(use_bram == 1){
7576
// use bram for 3d Transpose
77+
temp_timer = getTimeinMilliseconds();
7678
timing = fftfpgaf_c2c_3d_bram(N, inp, out, inv);
79+
total_api_time += getTimeinMilliseconds() - temp_timer;
7780
}
7881
else{
7982
// use ddr for 3d Transpose
83+
temp_timer = getTimeinMilliseconds();
8084
timing = fftfpgaf_c2c_3d_ddr(N, inp, out, inv);
85+
total_api_time += getTimeinMilliseconds() - temp_timer;
8186
}
8287

8388
#ifdef USE_FFTW
@@ -109,7 +114,7 @@ int main(int argc, const char **argv) {
109114
fpga_final();
110115

111116
// display performance measures
112-
display_measures(avg_rd, avg_wr, avg_exec, N, dim, iter, inv, sp);
117+
display_measures(total_api_time, avg_rd, avg_wr, avg_exec, N, dim, iter, inv, sp);
113118

114119
return EXIT_SUCCESS;
115120
}

0 commit comments

Comments
 (0)