From a861b426ec58327996b5d8a7bf36eae3a04e6a6b Mon Sep 17 00:00:00 2001 From: Christopher Kenna Date: Fri, 14 Oct 2011 23:55:39 -0400 Subject: Add coin flipping to RTSpin.Beta --- bin/rtspin.beta.c | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/bin/rtspin.beta.c b/bin/rtspin.beta.c index 4c8a56f..556660e 100644 --- a/bin/rtspin.beta.c +++ b/bin/rtspin.beta.c @@ -36,13 +36,16 @@ static int num[NUMS]; static char* progname; static gsl_rng *beta_rng; +static gsl_rng *coin_rng; static void setup_rng(unsigned long seed) { beta_rng = gsl_rng_alloc(gsl_rng_taus); - if (!beta_rng) + coin_rng = gsl_rng_alloc(gsl_rng_taus); + if (!beta_rng || !coin_rng) bail_out("Could not initialize RNG"); gsl_rng_set(beta_rng, seed); + gsl_rng_set(coin_rng, seed); } static int loop_once(void) @@ -122,6 +125,8 @@ enum crit_level str2crit(const char* str) #define OPTSTR "a:b:d:p:c:wlves:r:i:" +#define COIN_PROB 0.5 + int main(int argc, char** argv) { int ret; @@ -257,8 +262,12 @@ int main(int argc, char** argv) start = wctime(); do { - beta_sample = gsl_ran_beta(beta_rng, alpha, beta); - exec_time = lvl_c_time * 20.0 * beta_sample * scale; + double coin_flip = gsl_rng_uniform(coin_rng); + if (coin_flip < COIN_PROB) { + beta_sample = gsl_ran_beta(beta_rng, alpha, beta); + exec_time = lvl_c_time * 20.0 * beta_sample * scale; + } else + exec_time = lvl_c_time; /* convert to seconds */ exec_time = exec_time * 0.000000001; } while(job(exec_time, start + duration)); @@ -268,6 +277,7 @@ int main(int argc, char** argv) bail_out("could not become regular task (huh?)"); gsl_rng_free(beta_rng); + gsl_rng_free(coin_rng); return 0; } -- cgit v1.2.2