From bates at stat.wisc.edu  Wed Apr 21 19:46:29 2004
From: bates at stat.wisc.edu (Douglas Bates)
Date: Wed Apr 21 19:46:35 2004
Subject: [Rd] optim-Bug (PR#6720)
In-Reply-To: <Pine.LNX.4.44.0404210747500.18446-100000@gannet.stats>
References: <Pine.LNX.4.44.0404210747500.18446-100000@gannet.stats>
Message-ID: <6rd661mdfu.fsf@bates4.stat.wisc.edu>

Prof Brian Ripley <ripley@stats.ox.ac.uk> writes:
...
> Zeroing the workspace is not a requirement of the original L-BFGS-B code 
> that I can see.  Given that it was originally in Fortran, and Fortran 
> often does zero it seems a likely symptom, but it does mean that a 
> variable is being used uninitialized somewhere in the code (converted to 
> C).  It would be better to leave vect alone and to zero the workspace with 
> a memset call in lbfgsb.  (Incidentally, I don't know why S_alloc does not 
> use memset -- we do require standard C and use in seeral other places.)

I had planned to suggest that we use memset more widely and perhaps
add a macro Memset, defined like the current Memcpy, to R_ext/RS.h.  I
felt that memset was likely to be more efficient for zeroing large
areas of memory than running a loop would be.  Recently Peter Dalgaard
and Andy Liaw and I discussed this with regard to a test to see if
vectors using more than 4 GB of memory could be allocated on an
Opteron.  Andy installed my suggested modification to do_makevector to
use memset for zeroing freshly allocated vectors and found that the
running time for a test on an Opteron/Linux system actually increased.
It appears that, at least on that system, memset runs a loop at the
level of characters.

I still think it would be a good idea to use memset but we would want
to do some timing comparisons to make sure we don't slow things down.


[Rd] optim-Bug (PR#6720)
Douglas Bates