使用编译器(JIT)时,R的速度明显减慢

使用编译器(JIT)时,R的速度明显减慢,r,performance,compiler-construction,jit,R,Performance,Compiler Construction,Jit,当我使用“编译器”来加速代码时,我得到了有趣的结果。我见过,但我觉得我的问题没有得到回答 我有一个函数,它由几个不同的函数和循环组成。本质上,它是一个使用glmnet的正则逻辑回归,但它运行了好几次。让我们把这个函数称为myFunction 对于我尝试的每种方法,我将记下几次运行的平均次数: temp <- NULL for (i in 1:10) temp <- c(temp,system.time(myFunction())["elapsed"]) mean(temp) tem

当我使用“编译器”来加速代码时,我得到了有趣的结果。我见过,但我觉得我的问题没有得到回答

我有一个函数,它由几个不同的函数和循环组成。本质上,它是一个使用glmnet的正则逻辑回归,但它运行了好几次。让我们把这个函数称为myFunction

对于我尝试的每种方法,我将记下几次运行的平均次数:

temp <- NULL
for (i in 1:10) temp <- c(temp,system.time(myFunction())["elapsed"])
mean(temp)

temp我有时也会遇到这种情况。从我在几个网站(这里有很多网站)上读到的内容来看,通过字节码编译,函数调用的第一个实例会更慢。因此,如果您只有很少的迭代,那么这样做可能不值得。如果你有很多,你可能会赶上。我也是这么想的。但从第一轮到最后一轮没有太大区别。以下是调用enableJIT(1)后另一个函数(称为myFunction2)的结果:16.736 17.111 17.507 17.890 17.484 15.202 15.285 16.002 15.775 15.940,因此最后一次运行仍然与第一次运行一样慢。如果不使用enableJIT,但“手动”编译函数,是否会发生同样的情况?即
库(编译器);myfun该函数中也有很多函数,但是当我编译这个函数和其中的几个函数时,时间稍微减少了(10%)。我想尝试启用JIT,主要是因为我认为它可以编译所有这些函数,所以我可以获得10%以上的收益。如果您找到解决方案,请发布。另一方面,(尽管与您的问题无关),您显然希望加快这个过程,而且因为您明确提到for循环,所以您可能希望研究并行化代码的可能性。这通常比人们想象的要容易,对于计算密集型过程来说,这是值得做的。请参见并行
enableJIT(1)
temp <- NULL
for (i in 1:10) temp <- c(temp,system.time(myFunction())["elapsed"])
mean(temp)
enableJIT(0)
temp <- NULL
for (i in 1:10) temp <- c(temp,system.time(myFunction())["elapsed"])
mean(temp)