From d432a48c8e7cc2df95d4952af415f18809f60409 Mon Sep 17 00:00:00 2001 From: Johannes Ranke Date: Thu, 24 Mar 2016 07:26:55 +0100 Subject: Address feedback from CRAN submission - Put the CRAN URL that the badge points to into canonical form. I had missed the requirement to use the canonical form before, as the R CMD check message complained about a (possibily) invalid URL, so I overlooked the explanation later in the check log. Thanks to Uwe for his patience. Fix checked with winbuilder. - Slightly reduced the build time for the compiled_models vignette by skipping the warm-up. 3 repetitions are necessary for the autoplot method to work --- vignettes/compiled_models.html | 413 ++++++++++++++++++++++++++++++----------- 1 file changed, 302 insertions(+), 111 deletions(-) (limited to 'vignettes/compiled_models.html') diff --git a/vignettes/compiled_models.html b/vignettes/compiled_models.html index 756a2753..3215a386 100644 --- a/vignettes/compiled_models.html +++ b/vignettes/compiled_models.html @@ -1,94 +1,246 @@ + + + - +Benchmark for a model that can also be solved with Eigenvalues - + - - - + + - - - + + - - + -
- - + -
+

Benchmark for a model that can also be solved with Eigenvalues

-

This evaluation is taken from the example section of mkinfit. When using an mkin version equal to or greater than 0.9-36 and a C compiler (gcc) is available, you will see a message that the model is being compiled from autogenerated C code when defining a model using mkinmod. The mkinmod() function checks for presence of the gcc compiler using

-
Sys.which("gcc")
+ +

This evaluation is taken from the example section of mkinfit. When using an mkin version +equal to or greater than 0.9-36 and a C compiler (gcc) is available, you will see +a message that the model is being compiled from autogenerated C code when +defining a model using mkinmod. The mkinmod() function checks for presence of +the gcc compiler using

+ +
Sys.which("gcc")
+
+
##            gcc 
-## "/usr/bin/gcc"
+## "/usr/bin/gcc" + +

First, we build a simple degradation model for a parent compound with one metabolite.

-
library("mkin")
-SFO_SFO <- mkinmod(
+
+
library("mkin")
+
+ +
## Loading required package: minpack.lm
+## Loading required package: rootSolve
+## Loading required package: inline
+## Loading required package: methods
+## Loading required package: parallel
+
+ +
SFO_SFO <- mkinmod(
   parent = mkinsub("SFO", "m1"),
-  m1 = mkinsub("SFO"))
-
## Successfully compiled differential equation model from auto-generated C code.
-

We can compare the performance of the Eigenvalue based solution against the compiled version and the R implementation of the differential equations using the microbenchmark package.

-
library("microbenchmark")
+  m1 = mkinsub("SFO"))
+
+ +
## Successfully compiled differential equation model from auto-generated C code.
+
+ +

We can compare the performance of the Eigenvalue based solution against the +compiled version and the R implementation of the differential equations using +the microbenchmark package.

+ +
library("microbenchmark")
 library("ggplot2")
 mb.1 <- microbenchmark(
   "deSolve, not compiled" = mkinfit(SFO_SFO, FOCUS_2006_D, 
@@ -98,76 +250,115 @@ mb.1 <- microbenchmark(
                                solution_type = "eigen", quiet = TRUE),
   "deSolve, compiled" = mkinfit(SFO_SFO, FOCUS_2006_D, 
                                 solution_type = "deSolve", quiet = TRUE),
-  times = 3, control = list(warmup = 1))
+  times = 3, control = list(warmup = 0))
+
+ +
## Warning in microbenchmark(`deSolve, not compiled` = mkinfit(SFO_SFO,
+## FOCUS_2006_D, : Could not measure overhead. Your clock might lack
+## precision.
+
+ +
smb.1 <- summary(mb.1)
+print(mb.1)
+
-smb.1 <- summary(mb.1) -print(mb.1)
## Unit: milliseconds
 ##                   expr       min        lq      mean    median        uq
-##  deSolve, not compiled 9539.3064 9543.1547 9554.1987 9547.0031 9561.6448
-##       Eigenvalue based  927.5569  928.1716  943.8293  928.7864  951.9656
-##      deSolve, compiled  734.6125  737.3273  739.0161  740.0420  741.2179
+##  deSolve, not compiled 4652.4576 4653.2263 4673.1220 4653.9950 4683.4543
+##       Eigenvalue based  749.7771  750.1327  764.7881  750.4882  772.2936
+##      deSolve, compiled  641.9152  647.6028  651.6533  653.2904  656.5223
 ##        max neval cld
-##  9576.2865     3   c
-##   975.1447     3  b 
-##   742.3938     3 a
-
autoplot(mb.1)
-

-

We see that using the compiled model is by a factor of 12.9 faster than using the R version with the default ode solver, and it is even faster than the Eigenvalue based solution implemented in R which does not need iterative solution of the ODEs:

-
rownames(smb.1) <- smb.1$expr
-smb.1["median"]/smb.1["deSolve, compiled", "median"]
-
##                          median
-## deSolve, not compiled 12.900624
-## Eigenvalue based       1.255046
-## deSolve, compiled      1.000000
-
-
+## 4712.9136 3 c +## 794.0990 3 b +## 659.7542 3 a + + +
autoplot(mb.1)
+
+ +

plot of chunk benchmark_SFO_SFO

+ +

We see that using the compiled model is by a factor of +7.1 +faster than using the R version with the default ode solver, and it is even +faster than the Eigenvalue based solution implemented in R which does not need +iterative solution of the ODEs:

+ +
rownames(smb.1) <- smb.1$expr
+smb.1["median"]/smb.1["deSolve, compiled", "median"]
+
+ +
##                         median
+## deSolve, not compiled 7.123930
+## Eigenvalue based      1.148782
+## deSolve, compiled     1.000000
+
+

Benchmark for a model that can not be solved with Eigenvalues

-

This evaluation is also taken from the example section of mkinfit.

-
FOMC_SFO <- mkinmod(
+
+

This evaluation is also taken from the example section of mkinfit.

+ +
FOMC_SFO <- mkinmod(
   parent = mkinsub("FOMC", "m1"),
-  m1 = mkinsub( "SFO"))
-
## Successfully compiled differential equation model from auto-generated C code.
-
mb.2 <- microbenchmark(
+  m1 = mkinsub( "SFO"))
+
+ +
## Successfully compiled differential equation model from auto-generated C code.
+
+ +
mb.2 <- microbenchmark(
   "deSolve, not compiled" = mkinfit(FOMC_SFO, FOCUS_2006_D, 
                                     use_compiled = FALSE, quiet = TRUE),
   "deSolve, compiled" = mkinfit(FOMC_SFO, FOCUS_2006_D, quiet = TRUE),
-  times = 3, control = list(warmup = 1))
-smb.2 <- summary(mb.2)
-print(mb.2)
+ times = 3, control = list(warmup = 0)) +
+ +
## Warning in microbenchmark(`deSolve, not compiled` = mkinfit(FOMC_SFO,
+## FOCUS_2006_D, : Could not measure overhead. Your clock might lack
+## precision.
+
+ +
smb.2 <- summary(mb.2)
+print(mb.2)
+
+
## Unit: seconds
 ##                   expr       min        lq      mean    median        uq
-##  deSolve, not compiled 20.728228 20.867978 20.959811 21.007729 21.075602
-##      deSolve, compiled  1.343219  1.382365  1.399697  1.421511  1.427936
+##  deSolve, not compiled 10.202245 10.243829 10.260112 10.285413 10.289045
+##      deSolve, compiled  1.176863  1.182699  1.188555  1.188536  1.194402
 ##        max neval cld
-##  21.143476     3   b
-##   1.434362     3  a
-
smb.2["median"]/smb.2["deSolve, compiled", "median"]
+## 10.292677 3 b +## 1.200267 3 a + + +
smb.2["median"]/smb.2["deSolve, compiled", "median"]
+
+
##   median
 ## 1     NA
-## 2     NA
-
autoplot(mb.2)
-

-

Here we get a performance benefit of a factor of 14.8 using the version of the differential equation model compiled from C code using the inline package!

-

This vignette was built with mkin 0.9.42 on

-
## R version 3.2.4 Revised (2016-03-16 r70336)
-## Platform: x86_64-pc-linux-gnu (64-bit)
-## Running under: Debian GNU/Linux 8 (jessie)
-
## CPU model: Intel(R) Core(TM) i7-4710MQ CPU @ 2.50GHz
-
+## 2 NA + +
autoplot(mb.2)
+
-
+

plot of chunk benchmark_FOMC_SFO

- +
## R Under development (unstable) (2016-03-23 r70368)
+## Platform: x86_64-pc-linux-gnu (64-bit)
+## Running under: Debian GNU/Linux 8 (jessie)
+
+
## CPU model: Intel(R) Core(TM) i7-4710MQ CPU @ 2.50GHz
+
+ -- cgit v1.2.1