繁体   English   中英

优化R代码-Rcpp

[英]Optimization R code - Rcpp

除了基准测试功能外,R中还有任何工具可让我们获取R代码中的最大瓶颈吗?

当我用C ++重写R代码时,我通常对获得的计算增益一无所知。 例如,在每次迭代都需要进行优化的引导程序中,我不知道使用GSL库对对数似然函数进行优化是否有用,因为optim语言函数R使用stats.so文件。 我注意到这是在执行stats ::: C_optim

> stats:::C_optim
$name
[1] "optim"

$address
<pointer: 0x1cb34e0>
attr(,"class")
[1] "RegisteredNativeSymbol"

$dll
DLL name: stats
Filename: /usr/lib/R/library/stats/libs/stats.so
Dynamic lookup: FALSE

$numParameters
[1] 7

attr(,"class")
[1] "ExternalRoutine"  "NativeSymbolInfo"

查看optim函数( edit(optim) )的正文,我发现导入了用C实现的高效函数。例如,有:

.External2(C_optim, par, fn1, gr1, method, con, lower, 
        upper)

疑问 :对于Rcpp用户,您通常在项目中尝试实现所有C ++函数或实现一组用于R函数的小型C ++函数吗?

我知道这是一个非常普遍的问题,但是我使用Rcpp的所有功能始终尝试从头开始实现C ++功能。 我觉得我用C ++编程比使用R语言更多。有时我认为我需要直接用C ++编程。

R具有许多特性,使该语言在执行各种任务时变慢。 我总是尽量避免循环,而让其使用apply系列函数。 但是,我经常发现R非常慢。 这样,由于我不确定什么值得优化,所以最终我用C ++实现了所有东西。

如果您(通常)使用R编写代码更快,并且想编写许多C ++代码,则建议采用以下方法:

  1. 在R中实施您的解决方案。
  2. 仅当 R解决方案不够快时,才尝试对其进行优化。
  3. 优化的第一步是测量性能,即分析代码。
  4. 一旦确定了瓶颈,就可以使用更好的R代码或编译后的代码来改善瓶颈。

凭着经验,您也许可以偷偷摸摸,例如,从一开始就知道问题中的某些事情将需要编译后的代码。 但这确实取决于您正在处理的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM