[Rd] Possible with enableJIT function
Berend Hasselman
bhh at xs4all.nl
Wed Jun 14 16:48:50 CEST 2017
> On 13 Jun 2017, at 22:05, luke-tierney at uiowa.edu wrote:
>
> Thanks. This should be resolved in R-devel(r72788) and R-patched
> (r72789)
>
Also thanks.
It is resolved in R-patched.
Berend
> Best,
>
> luke
>
> On Mon, 12 Jun 2017, Berend Hasselman wrote:
>
>>
>>
>> In this email to the R-help list: https://stat.ethz.ch/pipermail/r-help/2017-June/447474.html
>> and in this question on Stackoverflow: https://stackoverflow.com/questions/44486643/nleqslv-memory-use-in-r
>>
>> Andrew Leach has raised a question about the memory usage of my package nleqslv.
>> In a model with a loop within a function he has experienced continuously increasing memory usage
>> by package nleqslv leading to an out of memory condition.
>>
>> I have been able to reproduce the continuously increasing memory usage with the following small example.
>>
>> <code>
>> library(nleqslv,lib.loc="../nleqslv.Rcheck")
>> library(pryr)
>> dslnex <- function(x) {
>> y <- numeric(2)
>> y[1] <- x[1]^2 + x[2]^2 - 2
>> y[2] <- exp(x[1]-1) + x[2]^3 - 2
>> y
>> }
>> xstart <- c(x1=1.5,x2=2)
>> nsims <- 10
>> for(test_iter in seq_len(nsims)){
>> z <- nleqslv(xstart,dslnex,jacobian=NULL)
>> print(paste("nleqslv iteration",test_iter,"and memory used is",mem_used()))
>> }
>> memory.profile()
>> gc()
>> print(paste("At end memory used is", mem_used()))
>> </code>
>>
>> The final output is
>>
>> <output>
>> [1] "nleqslv iteration 1 and memory used is 28921288"
>> [1] "nleqslv iteration 2 and memory used is 29133256"
>> [1] "nleqslv iteration 3 and memory used is 29132992"
>> [1] "nleqslv iteration 4 and memory used is 29134712"
>> [1] "nleqslv iteration 5 and memory used is 29136432"
>> [1] "nleqslv iteration 6 and memory used is 29138152"
>> [1] "nleqslv iteration 7 and memory used is 29139872"
>> [1] "nleqslv iteration 8 and memory used is 29141592"
>> [1] "nleqslv iteration 9 and memory used is 29143312"
>> [1] "nleqslv iteration 10 and memory used is 29145032"
>>>
>>> memory.profile()
>> NULL symbol pairlist closure environment promise
>> 1 8554 194726 4230 1065 6534
>> language special builtin char logical integer
>> 51374 45 671 9786 8030 37258
>> double complex character ... any list
>> 2645 1 53795 0 0 18487
>> expression bytecode externalptr weakref raw S4
>> 1 14662 2233 592 593 1049
>>> gc()
>> used (Mb) gc trigger (Mb) max used (Mb)
>> Ncells 416340 22.3 750400 40.1 581181 31.1
>> Vcells 726127 5.6 1308461 10.0 1191521 9.1
>>> print(paste("At end memory used is", mem_used()))
>> [1] "At end memory used is 29126472"
>> </output>
>>
>> Indeed memory used increases in each pass of the for loop.
>>
>> I have added these two lines at the top of the code after the library(pryr) invocation.
>>
>> library(compiler)
>> oldJIT <- enableJIT(0)
>>
>> This resolves the issue in the sense that memory used remains constant after the first iteration.
>> Output in the for loop is now:
>> <output>
>> [1] "nleqslv iteration 1 and memory used is 24487784"
>> [1] "nleqslv iteration 2 and memory used is 24495816"
>> [1] "nleqslv iteration 3 and memory used is 24495816"
>> [1] "nleqslv iteration 4 and memory used is 24495816"
>> [1] "nleqslv iteration 5 and memory used is 24495816"
>> [1] "nleqslv iteration 6 and memory used is 24495816"
>> [1] "nleqslv iteration 7 and memory used is 24495816"
>> [1] "nleqslv iteration 8 and memory used is 24495816"
>> [1] "nleqslv iteration 9 and memory used is 24495816"
>> [1] "nleqslv iteration 10 and memory used is 24495816"
>> </output>
>>
>> My questions are
>>
>> - is this a bug(let) in the JIT compiler?
>> - if it isn't what would need to be changed in nleqslv.R in the package source? (I haven't a clue)
>>
>> regards
>>
>> Berend Hasselman
>>
>> My sessionInfo:
>>
>> R version 3.4.0 (2017-04-21)
>> Platform: x86_64-apple-darwin15.6.0 (64-bit)
>> Running under: macOS Sierra 10.12.5
>>
>> Matrix products: default
>> BLAS: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRblas.0.dylib
>> LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib
>>
>> locale:
>> [1] en_IE.UTF-8/en_IE.UTF-8/en_IE.UTF-8/C/en_IE.UTF-8/en_IE.UTF-8
>>
>> attached base packages:
>> [1] stats graphics grDevices utils datasets methods base
>>
>> loaded via a namespace (and not attached):
>> [1] compiler_3.4.0
>>
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>
> --
> Luke Tierney
> Ralph E. Wareham Professor of Mathematical Sciences
> University of Iowa Phone: 319-335-3386
> Department of Statistics and Fax: 319-335-3017
> Actuarial Science
> 241 Schaeffer Hall email: luke-tierney at uiowa.edu
> Iowa City, IA 52242 WWW: http://www.stat.uiowa.edu
More information about the R-devel
mailing list