2013-05-22 20 views
6

Tôi có gói R mà tôi đã chuyển một thuật toán MCMC chứa đại số ma trận sang C++ bằng gói RcppEigen giúp cải thiện đáng kể tốc độ.Làm cách nào để cải thiện tệp Makevars cho gói Rcpp (RcppEigen)?

Tuy nhiên, R CMD check cung cấp cho các NOTE sau trên Linux (Thanks to R-Forge):

* checking installed package size ... NOTE 
    installed size is 6.6Mb 
    sub-directories of 1Mb or more: 
    libs 6.1Mb 

Cảnh báo này có lẽ không phải do kích thước đáng kinh ngạc của tôi C++ mã (which is only around 150 lines), vì nó chỉ xuất hiện trên Linux, nhưng có lẽ do tôi không có khả năng cấu hình chính xác tệp Makevars. (Tôi chưa từng sử dụng make hoặc makefile trước đây).
Ngoài ra khi gửi gói tới CRAN, Brian Ripley đã viết một điều gì đó về việc này NOTE khiến tôi mong đợi đó là sự cố Makevars: "Nó đến từ biểu tượng gỡ lỗi".

My Makevars là tiêu chuẩn RcppMakevars (dưới đây) được sản xuất bởi Rcpp.package.skeleton.

Câu hỏi của tôi:

  • Làm thế nào tôi có thể cấu hình của tôi Makevars trong một cách mà làm giảm kích thước của thư viện biên soạn trên Linux (ví dụ: thoát khỏi NOTE)?
  • Tài nguyên nào tốt để tìm hiểu về ma thuật Makevars cho Rcpp?
    (tôi không tìm thấy bất cứ điều gì trong GalleryR extension manual on this cũng là khó hiểu với tôi)

tôi Makevars:

## Use the R_HOME indirection to support installations of multiple R version 
PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"` 
PKG_CPPFLAGS = -I. -I../inst/include 

tôi Makevars.win:

## This assume that we can call Rscript to ask Rcpp about its locations 
## Use the R_HOME indirection to support installations of multiple R version 
PKG_LIBS = $(shell $(R_HOME)/bin/Rscript.exe -e "Rcpp:::LdFlags()") 
PKG_CPPFLAGS = -I. -I../inst/include 

Trả lời

7

Bạn trích dẫn những gì chúng tôi đã viết. Không có gì cụ thể ở đây: bạn chỉ muốn tìm hiểu về cú pháp Makefile cơ bản và các tùy chọn.

Đấu với src/Makevars, trừ khi bạn hiểu những gì bạn đang làm, không được khuyến nghị. Bạn có thể sẽ phá vỡ một cái gì đó, đặc biệt là xây dựng trên kiến ​​trúc khác. Simon Urbanek rất kiên quyết về lời khuyên này.

Brian Ripley dĩ nhiên là chính xác: Nếu bạn đã bật gỡ lỗi, thư viện sẽ lớn hơn. Nhưng CXXFLAGS không bao giờ được đặt, đặc biệt là không có cờ -g được đặt để bật gỡ lỗi. Vì vậy, nó không phải là chúng tôi: nếu gỡ lỗi được kích hoạt theo mặc định, cái gì khác bật nó lên. Có thể là R theo mặc định. Xem số .R/Makevars của bạn.

Trình điều khiển khác cho kích thước là mẫu C++. So sánh với các gói khác sử dụng (Rcpp) Eigen, chúng cũng có khả năng lớn. Điều này "chỉ là một chi phí kinh doanh": các mẫu cung cấp cho bạn sức mạnh (mã hóa) mà bạn thích.

Edited cho mọi lỗi

+1

Cảm ơn đã phản ứng, chỉ cần làm rõ: Những gì bạn đang nói về cơ bản là (a) có thực sự là không có vấn đề, kích thước xuất phát từ cấu trúc của 'Eigen', (b) không có cờ 'CXXFLAGS' được đề xuất nào để đặt cho 'RcppEigen' và (c) nếu bạn muốn thay đổi cờ đi và tìm hiểu cú pháp Makefile _basic và tùy chọn_. Tôi có hiểu bạn đúng không? – Henrik

+0

Có đến a) và c); chúng tôi nói những gì bạn cần trong b) và cung cấp cho bạn; xem các tài liệu, ví dụ và bộ khung của RcppEigen - nhưng về bản chất bạn chỉ cần LinkingTo: RcppEigen. Bạn sử dụng RcppEigen, và không tách riêng bản sao của Eigen, phải không? –

+0

Vâng, tôi sử dụng 'RcppEigen' và có lẽ tôi đã sử dụng' RcppEigen.package.sk '(như tôi có 'RcppEigen' trước' Rcpp' trên cả hai Depends và LinkingTo trong 'DESCRIPTION'). Câu hỏi của tôi có lẽ là nếu có ý nghĩa để đặt ví dụ: tùy chọn '-O3' nổi tiếng (và nếu vậy, làm thế nào)? – Henrik

Các vấn đề liên quan