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