1 /*
2  * Copyright (c) 2013-2021, The OSKAR Developers.
3  * See the LICENSE file at the top-level directory of this distribution.
4  */
5 
6 #include <gtest/gtest.h>
7 
8 #include "utility/oskar_timer.h"
9 #include <cstdlib>
10 
11 #if 0
12 #include <unistd.h> // Needed for sleep() function.
13 
14 TEST(Timer, test_consistency)
15 {
16     oskar_Timer *t_cuda, *t_omp, *t_native;
17     t_native = oskar_timer_create(OSKAR_TIMER_NATIVE);
18     t_cuda = oskar_timer_create(OSKAR_TIMER_CUDA);
19 
20     // Time a sleep(1).
21     oskar_timer_resume(t_native);
22     oskar_timer_resume(t_cuda);
23     oskar_timer_resume(t_omp);
24     sleep(1);
25     oskar_timer_pause(t_native);
26     oskar_timer_pause(t_cuda);
27     oskar_timer_pause(t_omp);
28 
29     // Don't time this sleep.
30     sleep(1);
31 
32     // Time another sleep(1).
33     oskar_timer_resume(t_native);
34     oskar_timer_resume(t_cuda);
35     oskar_timer_resume(t_omp);
36     sleep(1);
37     oskar_timer_pause(t_native);
38     oskar_timer_pause(t_cuda);
39     oskar_timer_pause(t_omp);
40 
41     double elapsed_native = oskar_timer_elapsed(t_native);
42     double elapsed_cuda = oskar_timer_elapsed(t_cuda);
43     double elapsed_omp = oskar_timer_elapsed(t_omp);
44     EXPECT_NEAR(2.0, elapsed_native, 1e-2);
45 #ifdef OSKAR_HAVE_CUDA
46     EXPECT_NEAR(elapsed_native, elapsed_cuda, 5e-3);
47     EXPECT_NEAR(2.0, elapsed_cuda, 1e-2);
48 #endif
49 #ifdef _OPENMP
50     EXPECT_NEAR(elapsed_native, elapsed_omp, 5e-3);
51     EXPECT_NEAR(2.0, elapsed_omp, 1e-2);
52 #endif
53 
54     oskar_timer_free(t_native);
55     oskar_timer_free(t_cuda);
56     oskar_timer_free(t_omp);
57 }
58 #endif
59 
time_timer(int type,const char * label)60 static void time_timer(int type, const char* label)
61 {
62     oskar_Timer *tmr = 0, *t = 0;
63     int runs = 1000;
64     t = oskar_timer_create(OSKAR_TIMER_NATIVE);
65     tmr = oskar_timer_create(type);
66     oskar_timer_start(t);
67     for (int i = 0; i < runs; ++i)
68     {
69         oskar_timer_resume(tmr);
70         oskar_timer_pause(tmr);
71     }
72     printf("%s timer overhead: %.4e s.\n", label,
73             oskar_timer_elapsed(t) / runs);
74     oskar_timer_free(t);
75     oskar_timer_free(tmr);
76 }
77 
TEST(Timer,test_performance)78 TEST(Timer, test_performance)
79 {
80 #ifdef OSKAR_HAVE_CUDA
81     time_timer(OSKAR_TIMER_CUDA,   "  CUDA");
82 #endif
83 #ifdef _OPENMP
84 #endif
85     time_timer(OSKAR_TIMER_NATIVE, "Native");
86 }
87