Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 2f441bb8 authored by THIBAULT Samuel's avatar THIBAULT Samuel
Browse files

Adding pruning stats on top of memaccess

parent afbd9e49
No related branches found
No related tags found
1 merge request!32Memaccess stats
......@@ -232,6 +232,13 @@ if(CHAMELEON_SCHED_STARPU)
message("-- ${BoldGreen}CHAMELEON_SIMULATION is set to OFF, turn it ON to use"
" SIMULATION mode (only with StarPU compiled with SimGrid)${ColourReset}")
endif()
option(CHAMELEON_ENABLE_PRUNING_STATS "Enable pruning statistics" OFF)
if (NOT CHAMELEON_ENABLE_PRUNING_STATS)
message("-- ${BoldGreen}CHAMELEON_ENABLE_PRUNING_STATS is set to OFF, turn it ON to build pruning statistics${ColourReset}")
endif()
if(CHAMELEON_ENABLE_PRUNING_STATS)
add_definitions(-DCHAMELEON_ENABLE_PRUNING_STATS)
endif(CHAMELEON_ENABLE_PRUNING_STATS)
endif()
# Initially we need to generate files for different precisions
......
......@@ -126,6 +126,9 @@ double RUNTIME_get_time();
void RUNTIME_start_profiling();
void RUNTIME_stop_profiling();
void RUNTIME_start_stats();
void RUNTIME_stop_stats();
#if defined(PRECISION_z)
void RUNTIME_zdisplay_allprofile ();
void RUNTIME_zdisplay_oneprofile (MORSE_kernel_t);
......
......@@ -88,6 +88,16 @@ void RUNTIME_stop_profiling()
morse_warning("RUNTIME_stop_profiling()", "FxT profiling is not available with PaRSEC\n");
}
void RUNTIME_start_stats()
{
morse_warning("RUNTIME_start_stats()", "pruning stats are not available with PaRSEC\n");
}
void RUNTIME_stop_stats()
{
morse_warning("RUNTIME_stop_stats()", "pruning stats are not available with PaRSEC\n");
}
void RUNTIME_schedprofile_display(void)
{
morse_warning("RUNTIME_schedprofile_display(parsec)", "Scheduler profiling is not available with PaRSEC\n");
......
......@@ -103,6 +103,16 @@ void RUNTIME_stop_profiling()
morse_warning("RUNTIME_stop_profiling()", "FxT profiling is not available with Quark\n");
}
void RUNTIME_start_stats()
{
morse_warning("RUNTIME_start_stats()", "pruning stats are not available with Quark\n");
}
void RUNTIME_stop_stats()
{
morse_warning("RUNTIME_stop_stats()", "pruning stats are not available with Quark\n");
}
void RUNTIME_schedprofile_display(void)
{
morse_warning("RUNTIME_schedprofile_display(quark)", "Scheduler profiling is not available with Quark\n");
......
......@@ -29,6 +29,12 @@
#include <starpu_fxt.h>
#endif
#ifdef CHAMELEON_ENABLE_PRUNING_STATS
unsigned long RUNTIME_total_tasks;
unsigned long RUNTIME_exec_tasks;
unsigned long RUNTIME_comm_tasks;
unsigned long RUNTIME_changed_tasks;
#endif
double RUNTIME_get_time(){
return starpu_timing_now()*1e-6;
......@@ -50,6 +56,21 @@ void RUNTIME_stop_profiling(){
#endif
}
void RUNTIME_start_stats(){
#ifdef CHAMELEON_ENABLE_PRUNING_STATS
RUNTIME_total_tasks = 0;
RUNTIME_exec_tasks = 0;
RUNTIME_comm_tasks = 0;
RUNTIME_changed_tasks = 0;
#endif
}
void RUNTIME_stop_stats(){
#ifdef CHAMELEON_ENABLE_PRUNING_STATS
fprintf(stderr, "\ntasks: %u = exec: %u + comm: %u + changed: %u\n", RUNTIME_total_tasks, RUNTIME_exec_tasks, RUNTIME_comm_tasks, RUNTIME_changed_tasks);
#endif
}
void RUNTIME_profiling_display_info(const char *kernel_name, measure_t perf[STARPU_NMAXWORKERS])
{
int header = 1;
......
......@@ -86,16 +86,52 @@ typedef struct starpu_conf starpu_conf_t;
void RUNTIME_set_reduction_methods(starpu_data_handle_t handle, MORSE_enum dtyp);
#define RUNTIME_BEGIN_ACCESS_DECLARATION
#ifdef CHAMELEON_ENABLE_PRUNING_STATS
#define RUNTIME_PRUNING_STATS_BEGIN_ACCESS_DECLARATION \
int __morse_exec = 0; \
int __morse_changed = 0;
#define RUNTIME_PRUNING_STATS_ACCESS_W(A, Am, An) \
if (morse_desc_islocal(A, Am, An)) \
__morse_exec = 1;
#define RUNTIME_PRUNING_STATS_END_ACCESS_DECLARATION \
RUNTIME_total_tasks++; \
if (__morse_exec) \
RUNTIME_exec_tasks++; \
else if (__morse_need_submit) \
RUNTIME_comm_tasks++; \
else if (__morse_changed) \
RUNTIME_changed_tasks++;
#define RUNTIME_PRUNING_STATS_RANK_CHANGED(rank) \
int __morse_myrank; \
RUNTIME_comm_rank(&__morse_myrank); \
__morse_exec = (rank) == __morse_myrank; \
__morse_changed = 1; \
#define RUNTIME_ACCESS_R(A, Am, An)
#else
#define RUNTIME_PRUNING_STATS_BEGIN_ACCESS_DECLARATION
#define RUNTIME_PRUNING_STATS_ACCESS_W(A, Am, An)
#define RUNTIME_PRUNING_STATS_END_ACCESS_DECLARATION
#endif
#define RUNTIME_BEGIN_ACCESS_DECLARATION \
RUNTIME_PRUNING_STATS_BEGIN_ACCESS_DECLARATION
#define RUNTIME_ACCESS_R(A, Am, An) \
#define RUNTIME_ACCESS_W(A, Am, An)
#define RUNTIME_ACCESS_W(A, Am, An) \
RUNTIME_PRUNING_STATS_ACCESS_W(A, Am, An)
#define RUNTIME_ACCESS_RW(A, Am, An)
#define RUNTIME_ACCESS_RW(A, Am, An) \
RUNTIME_PRUNING_STATS_ACCESS_W(A, Am, An)
#define RUNTIME_RANK_CHANGED(rank)
#define RUNTIME_RANK_CHANGED(rank) \
RUNTIME_PRUNING_STATS_RANK_CHANGED(rank)
#define RUNTIME_END_ACCESS_DECLARATION
#define RUNTIME_END_ACCESS_DECLARATION \
RUNTIME_PRUNING_STATS_END_ACCESS_DECLARATION;
#endif /* _MORSE_STARPU_H_ */
......@@ -26,6 +26,13 @@
#ifndef _PROFILING_H_
#define _PROFILING_H_
#ifdef CHAMELEON_ENABLE_PRUNING_STATS
extern unsigned long RUNTIME_total_tasks;
extern unsigned long RUNTIME_exec_tasks;
extern unsigned long RUNTIME_comm_tasks;
extern unsigned long RUNTIME_changed_tasks;
#endif
typedef struct measure_s {
double sum;
double sum2;
......
......@@ -159,6 +159,7 @@ enum dparam_timing {
*
*/
#define START_TRACING() \
RUNTIME_start_stats(); \
if(iparam[IPARAM_TRACE] == 2) { \
RUNTIME_start_profiling(); \
} \
......@@ -167,6 +168,7 @@ enum dparam_timing {
}
#define STOP_TRACING() \
RUNTIME_stop_stats(); \
if(iparam[IPARAM_TRACE] == 2) { \
RUNTIME_stop_profiling(); \
} \
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment