On Thu, 5 May 2005, Peter Dalgaard wrote:

Jeff Enos <[EMAIL PROTECTED]> writes:

Thanks for these suggestions.  C-level profiling yields the following:

  %   cumulative   self              self     total
 time   seconds   seconds    calls   s/call   s/call  name
 36.01      5.34     5.34   100000     0.00     0.00  get_locale_strings
  4.32      5.98     0.64   100000     0.00     0.00  mktime00
  3.98      6.57     0.59   277462     0.00     0.00  Rf_eval
  3.71      7.12     0.55   472935     0.00     0.00  Rf_findVarInFrame3
  3.64      7.66     0.54   100000     0.00     0.00  strptime_internal
  3.51      8.18     0.52        1     0.52     7.51  do_strptime

It looks like strftime is called from get_locale_strings, which might
be the culprit.  Any suggestions on where I might go from here?

You might try modifying get_locale_strings (and its wide counterpart) with a check for an unchanged locale. E.g.

static char *last_LC_TIME=NULL;

....

 tmp = setlocale(LC_TIME, NULL)
 if (strcmp(tmp, last_LC_TIME)) return;

 last_LC_TIME = tmp;

.... set the strings ....

if the call to setlocale is considerably faster than 40 calls to
strftime(), you might have a winner.

Yes, I think that would be a worthwhile optimization. I didn't bother because I figured it would be fast enough (which at 50musec it almost always is).


However, get_locale_strings is only 36% of the total, and we have at least another 60% to account for. (81.01 vs 1.18 secs.)

--
Brian D. Ripley,                  [EMAIL PROTECTED]
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

______________________________________________
R-devel@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to