From: Steinar H. Gunderson Date: Sun, 9 Dec 2007 15:14:22 +0000 (+0100) Subject: Add a SWIG interface, to be able to run recalc-single-result faster. X-Git-Url: https://git.sesse.net/?p=foosball;a=commitdiff_plain;h=2267ce0f1f55deb019db7d2634c4ff9c62e4988d Add a SWIG interface, to be able to run recalc-single-result faster. --- diff --git a/foosrank.cpp b/foosrank.cpp index 4d09eb5..b9208fd 100644 --- a/foosrank.cpp +++ b/foosrank.cpp @@ -366,7 +366,7 @@ static void least_squares(const vector > &curve, double mu1 *sigma_result = sigma; } -static void compute_new_rating(double mu1, double sigma1, double mu2, double sigma2, int score1, int score2, double *mu, double *sigma, double *probability) +void compute_new_rating(double mu1, double sigma1, double mu2, double sigma2, int score1, int score2, double *mu, double *sigma, double *probability) { vector > curve; diff --git a/foosrank.i b/foosrank.i new file mode 100644 index 0000000..4b6b466 --- /dev/null +++ b/foosrank.i @@ -0,0 +1,20 @@ +%module foosrank +%{ +void fftw_import_wisdom_from_file(FILE*); +void compute_new_rating(double mu1, double sigma1, double mu2, double sigma2, int score1, int score2, double *mu, double *sigma, double *probability); +void startup() { + FILE *fp = fopen("fftw-wisdom", "rb"); + if (fp != NULL) { + fftw_import_wisdom_from_file(fp); + fclose(fp); + } +} +%} +%perlcode %{ + sub import { + startup(); + } +%} + +//extern void import(); +extern void compute_new_rating(double, double, double, double, int, int, double *OUTPUT, double *OUTPUT, double *OUTPUT); diff --git a/recalc-single-result.pl b/recalc-single-result.pl index efcd4c7..b6f8b77 100755 --- a/recalc-single-result.pl +++ b/recalc-single-result.pl @@ -5,6 +5,7 @@ use DBI; use CGI; use CGI::Carp qw(fatalsToBrowser); require 'foosball.pm'; +use foosrank; no warnings 'once'; my $dryrun = 0; @@ -47,8 +48,8 @@ while (my $ref = $q->fetchrow_hashref) { $rd1 = foosball::apply_aging($rd1, $age1 / 86400.0); $rd2 = foosball::apply_aging($rd2, $age2 / 86400.0); - my ($newr1, $newrd1, $likelihood) = foosball::calc_rating($rating1, $rd1, $rating2, $rd2, $score1, $score2); - my ($newr2, $newrd2) = foosball::calc_rating($rating2, $rd2, $rating1, $rd1, $score2, $score1); + my ($newr1, $newrd1, $likelihood) = foosrank::compute_new_rating($rating1, $rd1, $rating2, $rd2, $score1, $score2); + my ($newr2, $newrd2) = foosrank::compute_new_rating($rating2, $rd2, $rating1, $rd1, $score2, $score1); $cll += log($likelihood);