2011-04-26 51 views
17

在使用來自inline package的cxxfunction的R中,如何更改cpp編譯程序的優化標誌?R:使用內聯程序包時的C++優化標誌

默認情況下,在我的機器上,它編譯爲-g -O2。但我想使用-O3優化來獲得速度。如果這有什麼不同,我使用Rcpp插件。

我已經嘗試創建自己的插件,並試圖設置cxxfunction的不同參數,但沒有任何工作。

我想一種選擇是使用R CMD SHLIB而不是使用cxxfunction來編譯它。但是Rcpp建議使用inline,因爲他們的大多數測試用例都在使用它。

感謝您的幫助,讓我知道如果你需要任何澄清

回答

15

有幾個選項:

  1. 最好的解決辦法是修改這個由R所有情況,以便創造例如文件~/.R/Makevars並設置CFLAGS,CXXFLAGS,...在那裏。這會影響所有使用R CMD INSTALL ...,R CMD SHLIB ...等pp和cxxfunction()從內聯使用它,它也適用於這裏。

  2. 特定於內聯和Rcpp:修改插件,這就是爲什麼它是一個插件系統。請參閱Rcpp:::Rcpp.plugin.maker()

  3. cxxfunction()切換回cfunction(),因此不要使用插件並手動設置所有參數。

不用說,我喜歡選項1並自己使用它。

編輯:我過去使用的第四種(和原油!!)方法是編輯$R_HOME/Makeconf和/或Makeconf.site

+0

我使用了選項1,它馬上就能工作!很多! – tlamadon 2011-04-26 12:45:52

+0

感謝您的確認和接受,您也可以通過點擊向上的三角形給予這個'加價' – 2011-04-26 12:47:52

+0

我會,但顯然我的名聲太低(低於15):-) – tlamadon 2011-04-26 12:59:16

0

我可以建議一個黑客。編寫一個小包裝程序(也稱爲cpp),它調用真正的cpp並將所有參數傳遞給它,除了它通過-O3進行優化。然後確保你的程序的可執行文件的路徑分辨率R.

第一次出現
+2

這相當粗糙。 – 2011-04-26 12:30:48

+1

有罪! – hawk 2011-04-26 16:37:15

+2

但它工作;我們都做了類似的事情來完成工作。 – 2011-04-26 16:48:06