StarPU Handbook
Loading...
Searching...
No Matches
starpu_profiling.h
Go to the documentation of this file.
1/* StarPU --- Runtime system for heterogeneous multicore architectures.
2 *
3 * Copyright (C) 2010-2021 Université de Bordeaux, CNRS (LaBRI UMR 5800), Inria
4 * Copyright (C) 2020 Federal University of Rio Grande do Sul (UFRGS)
5 *
6 * StarPU is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU Lesser General Public License as published by
8 * the Free Software Foundation; either version 2.1 of the License, or (at
9 * your option) any later version.
10 *
11 * StarPU is distributed in the hope that it will be useful, but
12 * WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
14 *
15 * See the GNU Lesser General Public License in COPYING.LGPL for more details.
16 */
17
18#ifndef __STARPU_PROFILING_H__
19#define __STARPU_PROFILING_H__
20
21#include <starpu.h>
22#include <errno.h>
23#include <time.h>
24
25#ifdef __cplusplus
26extern "C"
27{
28#endif
29
38#define STARPU_PROFILING_DISABLE 0
42#define STARPU_PROFILING_ENABLE 1
43
49{
51 struct timespec submit_time;
52
54 struct timespec push_start_time;
56 struct timespec push_end_time;
58 struct timespec pop_start_time;
60 struct timespec pop_end_time;
61
63 struct timespec acquire_data_start_time;
65 struct timespec acquire_data_end_time;
66
68 struct timespec start_time;
70 struct timespec end_time;
71
73 struct timespec release_data_start_time;
75 struct timespec release_data_end_time;
76
78 struct timespec callback_start_time;
80 struct timespec callback_end_time;
81
82 /* TODO add expected length, expected start/end ? */
83
86
88 uint64_t used_cycles;
90 uint64_t stall_cycles;
93};
94
101{
103 struct timespec start_time;
105 struct timespec total_time;
107 struct timespec executing_time;
109 struct timespec sleeping_time;
112
114 uint64_t used_cycles;
116 uint64_t stall_cycles;
119
120 double flops;
121};
122
124{
126 struct timespec start_time;
128 struct timespec total_time;
130 int long long transferred_bytes;
133};
134
140
144void starpu_profiling_set_id(int new_id);
145
157
163
164#ifdef BUILDING_STARPU
165#include <common/utils.h>
166#ifdef __GNUC__
167extern int _starpu_profiling;
168#define starpu_profiling_status_get() ({ \
169 int __ret; \
170 ANNOTATE_HAPPENS_AFTER(&_starpu_profiling); \
171 __ret = _starpu_profiling; \
172 ANNOTATE_HAPPENS_BEFORE(&_starpu_profiling); \
173 __ret; \
174})
175#endif
176#endif
177
186
191
195int starpu_bus_get_id(int src, int dst);
196
200int starpu_bus_get_src(int busid);
201
205int starpu_bus_get_dst(int busid);
206void starpu_bus_set_direct(int busid, int direct);
207int starpu_bus_get_direct(int busid);
208void starpu_bus_set_ngpus(int busid, int ngpus);
209int starpu_bus_get_ngpus(int busid);
210
216
217/* Some helper functions to manipulate profiling API output */
218/* Reset timespec */
219static __starpu_inline void starpu_timespec_clear(struct timespec *tsp)
220{
221 tsp->tv_sec = 0;
222 tsp->tv_nsec = 0;
223}
224
225#define STARPU_NS_PER_S 1000000000
226
227/* Computes result = a + b */
228static __starpu_inline void starpu_timespec_add(struct timespec *a,
229 struct timespec *b,
230 struct timespec *result)
231{
232 result->tv_sec = a->tv_sec + b->tv_sec;
233 result->tv_nsec = a->tv_nsec + b->tv_nsec;
234
235 if (result->tv_nsec >= STARPU_NS_PER_S)
236 {
237 ++(result)->tv_sec;
238 result->tv_nsec -= STARPU_NS_PER_S;
239 }
240}
241
242/* Computes res += b */
243static __starpu_inline void starpu_timespec_accumulate(struct timespec *result,
244 struct timespec *a)
245{
246 result->tv_sec += a->tv_sec;
247 result->tv_nsec += a->tv_nsec;
248
249 if (result->tv_nsec >= STARPU_NS_PER_S)
250 {
251 ++(result)->tv_sec;
252 result->tv_nsec -= STARPU_NS_PER_S;
253 }
254}
255
256/* Computes result = a - b */
257static __starpu_inline void starpu_timespec_sub(const struct timespec *a,
258 const struct timespec *b,
259 struct timespec *result)
260{
261 result->tv_sec = a->tv_sec - b->tv_sec;
262 result->tv_nsec = a->tv_nsec - b->tv_nsec;
263
264 if ((result)->tv_nsec < 0)
265 {
266 --(result)->tv_sec;
267 result->tv_nsec += STARPU_NS_PER_S;
268 }
269}
270
271#define starpu_timespec_cmp(a, b, CMP) \
272 (((a)->tv_sec == (b)->tv_sec) ? ((a)->tv_nsec CMP (b)->tv_nsec) : ((a)->tv_sec CMP (b)->tv_sec))
273
277double starpu_timing_timespec_delay_us(struct timespec *start, struct timespec *end);
278
282double starpu_timing_timespec_to_us(struct timespec *ts);
283
290
297
305
308#ifdef __cplusplus
309}
310#endif
311
312#endif /* __STARPU_PROFILING_H__ */
int long long transferred_bytes
Definition: starpu_profiling.h:130
struct timespec executing_time
Definition: starpu_profiling.h:107
struct timespec acquire_data_end_time
Definition: starpu_profiling.h:65
int workerid
Definition: starpu_profiling.h:85
uint64_t stall_cycles
Definition: starpu_profiling.h:116
struct timespec callback_end_time
Definition: starpu_profiling.h:80
int transfer_count
Definition: starpu_profiling.h:132
struct timespec submit_time
Definition: starpu_profiling.h:51
struct timespec total_time
Definition: starpu_profiling.h:128
struct timespec callback_start_time
Definition: starpu_profiling.h:78
double energy_consumed
Definition: starpu_profiling.h:118
struct timespec pop_start_time
Definition: starpu_profiling.h:58
uint64_t used_cycles
Definition: starpu_profiling.h:114
struct timespec push_end_time
Definition: starpu_profiling.h:56
double energy_consumed
Definition: starpu_profiling.h:92
int executed_tasks
Definition: starpu_profiling.h:111
uint64_t stall_cycles
Definition: starpu_profiling.h:90
struct timespec start_time
Definition: starpu_profiling.h:126
struct timespec acquire_data_start_time
Definition: starpu_profiling.h:63
struct timespec release_data_end_time
Definition: starpu_profiling.h:75
struct timespec pop_end_time
Definition: starpu_profiling.h:60
struct timespec push_start_time
Definition: starpu_profiling.h:54
struct timespec total_time
Definition: starpu_profiling.h:105
struct timespec release_data_start_time
Definition: starpu_profiling.h:73
struct timespec start_time
Definition: starpu_profiling.h:68
struct timespec sleeping_time
Definition: starpu_profiling.h:109
struct timespec end_time
Definition: starpu_profiling.h:70
uint64_t used_cycles
Definition: starpu_profiling.h:88
struct timespec start_time
Definition: starpu_profiling.h:103
void starpu_profiling_worker_helper_display_summary(void)
void starpu_profiling_bus_helper_display_summary(void)
void starpu_profiling_init(void)
void starpu_data_display_memory_stats()
int starpu_bus_get_profiling_info(int busid, struct starpu_profiling_bus_info *bus_info)
int starpu_bus_get_id(int src, int dst)
int starpu_bus_get_src(int busid)
double starpu_timing_timespec_to_us(struct timespec *ts)
int starpu_profiling_worker_get_info(int workerid, struct starpu_profiling_worker_info *worker_info)
int starpu_bus_get_count(void)
int starpu_bus_get_dst(int busid)
int starpu_profiling_status_set(int status)
double starpu_timing_timespec_delay_us(struct timespec *start, struct timespec *end)
void starpu_profiling_set_id(int new_id)
int starpu_profiling_status_get(void)
Definition: starpu_profiling.h:124
Definition: starpu_profiling.h:49
Definition: starpu_profiling.h:101