PIPS
|
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "genC.h"
#include "linear.h"
#include "ri.h"
#include "effects.h"
#include "complexity_ri.h"
#include "text.h"
#include "ri-util.h"
#include "effects-util.h"
#include "effects-generic.h"
#include "effects-convex.h"
#include "text-util.h"
#include "database.h"
#include "pipsdbm.h"
#include "resources.h"
#include "properties.h"
#include "complexity.h"
#include "accel-util.h"
Go to the source code of this file.
Data Structures | |
struct | computation_intensity_param |
Functions | |
static void | init_computation_intensity_param (computation_intensity_param *p) |
read properties to initialize cost model More... | |
static bool | do_computation_intensity (statement s, computation_intensity_param *p) |
a loop statement is considered as compute intensive if transfer costs a re greater than execution cost More... | |
bool | computation_intensity (const char *module_name) |
mark all loops (do / for /while) that have sufficient computation intensity with a pragma, suitable for treatment by other phases. More... | |
bool computation_intensity | ( | const char * | module_name | ) |
mark all loops (do / for /while) that have sufficient computation intensity with a pragma, suitable for treatment by other phases.
The computation intensity is derived from the complexity and the memory footprint. It assumes the cost model: execution_time = startup_overhead + memory_footprint / bandwidth + complexity / frequency
init stuff
do it now !
validate changes
reset
module_name | odule_name |
Definition at line 123 of file computation_intensity.c.
References db_get_memory_resource(), DB_PUT_MEMORY_RESOURCE, do_computation_intensity(), gen_context_recurse, gen_null2(), get_current_module_statement(), init_computation_intensity_param(), module_name(), module_name_to_entity(), reset_complexity_map(), reset_cumulated_rw_effects(), reset_current_module_entity(), reset_current_module_statement(), set_complexity_map(), set_cumulated_rw_effects(), set_current_module_entity(), set_current_module_statement(), and statement_domain.
|
static |
a loop statement is considered as compute intensive if transfer costs a re greater than execution cost
compute instruction contribution to execution time
compute transfer contribution to execution time
now let's compare them, using their difference
heuristic to check the behavior at the infinite: assumes all variables are positives, take the higher degree monomial and decide upon its coefficient
seems a computation intensive loop !
Definition at line 72 of file computation_intensity.c.
References add_pragma_str_to_statement(), computation_intensity_param::bandwidth, complexity_polynome(), FOREACH, computation_intensity_param::frequency, int, load_cumulated_rw_effects_list(), load_statement_complexity(), monome_coeff, monome_term, polynome_add(), polynome_dup(), polynome_max_degree(), polynome_monome, polynome_negate(), POLYNOME_NUL, POLYNOME_NUL_P, polynome_rm(), polynome_scalar_add(), polynome_scalar_mult(), polynome_succ, computation_intensity_param::pragma, REGION, region_enumerate(), computation_intensity_param::startup_overhead, statement_loop_p(), and vect_sum().
Referenced by computation_intensity().
|
static |
read properties to initialize cost model
Definition at line 62 of file computation_intensity.c.
References computation_intensity_param::bandwidth, computation_intensity_param::frequency, get_int_property(), get_string_property(), computation_intensity_param::pragma, and computation_intensity_param::startup_overhead.
Referenced by computation_intensity().