performance - sirve - justo a tiempo
Posibles deficiencias para usar JIT con R? (3)
Recientemente descubrí que se puede usar la compilación JIT (justo a tiempo) con R utilizando el paquete del compilador (resumo mis hallazgos sobre este tema en una publicación reciente del blog ).
Una de las preguntas que me hicieron fue:
¿Hay alguna trampa? suena demasiado bueno para ser cierto, solo ponga una línea de código y eso es todo.
Después de mirar alrededor pude encontrar un posible problema relacionado con el tiempo de "inicio" del JIT. ¿Pero hay algún otro problema que tener cuidado al usar JIT?
Supongo que habrá alguna limitación relacionada con la arquitectura de entornos de R, pero no puedo pensar en una simple ilustración del problema, ¿alguna sugerencia o señal de advertencia me será de gran ayuda?
el resultado de una prueba simple con rpart podría ser un consejo para no utilizar enableJIT en TODOS los casos:
library(rpart)
fo <- function() for(i in 1:500){rpart(Kyphosis ~ Age + Number + Start, data=kyphosis)}
system.time(fo())
#User System verstrichen
#2.11 0.00 2.11
require(compiler)
enableJIT(3)
system.time(fo())
#User System verstrichen
#35.46 0.00 35.60
¿Alguna explicación?
Además de la respuesta anterior, la experimentación muestra que el problema no está en la compilación del ciclo, sino en la compilación de cierres. [enableJIT (0) o enableJIT (1) dejan el código rápido, enableJIT (2) lo reduce drásticamente y habilita que JIT (3) sea ligeramente más rápido que la opción anterior (pero aún muy lento)]. También contrario al comentario de Hansi, cmpfun ralentiza la ejecución en un grado similar.
El ejemplo anterior dado anteriormente, ya no parece ser un problema:
library("rpart")
fo = function() {
for(i in 1:500){
rpart(Kyphosis ~ Age + Number + Start, data=kyphosis)
}
} system.time(fo())
# user system elapsed
# 1.212 0.000 1.206
compiler::enableJIT(3)
# [1] 3
system.time(fo())
# user system elapsed
# 1.212 0.000 1.210
También probé otros ejemplos, como
- creciendo un vector;
- Una función que es solo una envoltura alrededor de la
mean
Si bien no siempre obtengo una aceleración, nunca he experimentado una desaceleración significativa.
R> sessionInfo()
R version 3.3.0 (2016-05-03)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 16.04 LTS