簡體   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