|
/* Find number of cycles used by function that takes 2 arguments */
|
|
|
|
/* Function to be tested takes two integer arguments */
|
|
typedef int (*test_funct)(int, int);
|
|
|
|
/* Compute time used by function f */
|
|
double fcyc2(test_funct f, int param1, int param2, int clear_cache);
|
|
|
|
/********* These routines are used to help with the analysis *********/
|
|
|
|
/*
|
|
Parameters:
|
|
k: How many samples must be within epsilon for convergence
|
|
epsilon: What is tolerance
|
|
maxsamples: How many samples until give up?
|
|
*/
|
|
|
|
/* Full version of fcyc with control over parameters */
|
|
double fcyc2_full(test_funct f, int param1, int param2, int clear_cache,
|
|
int k, double epsilon, int maxsamples, int compensate);
|
|
|
|
/* Get current minimum */
|
|
double get_min();
|
|
|
|
/* What is convergence status for k minimum measurements within epsilon
|
|
Returns 0 if not converged, #samples if converged, and -1 if can't
|
|
reach convergence
|
|
*/
|
|
|
|
int has_converged(int k, double epsilon, int maxsamples);
|
|
|
|
/* What is error of current measurement */
|
|
double err(int k);
|
|
|
|
/************* Try other clocking methods *****************/
|
|
|
|
/* Full version that uses the time of day clock */
|
|
double fcyc2_full_tod(test_funct f, int param1, int param2, int clear_cache,
|
|
int k, double epsilon, int maxsamples, int compensate);
|
|
|
|
double fcyc2_tod(test_funct f, int param1, int param2, int clear_cache);
|