如何编写与Intel MKL链接的CRAN可发布包?

如何编写与Intel MKL链接的CRAN可发布包?,r,rcpp,intel-mkl,R,Rcpp,Intel Mkl,我正在编写一个R软件包,理想情况下需要Intel MKL中的vdCdfNormInv函数 如何配置命名空间文件和makevar文件? 此函数的标量版本来自Rmath.h。但是,如果可能的话,MKL版本应该有更好的性能。< P>使用C++预处理器宏。下面是一个例子: double result; #ifdef INTEL_MKL_VERSION result = vdCdfNormInv(...); #else result = vdCdfNormInv_generic(...); #endif

我正在编写一个
R
软件包,理想情况下需要
Intel MKL
中的
vdCdfNormInv
函数

如何配置
命名空间
文件和
makevar
文件?


此函数的标量版本来自
Rmath.h
。但是,如果可能的话,MKL版本应该有更好的性能。

< P>使用C++预处理器宏。下面是一个例子:

double result;
#ifdef INTEL_MKL_VERSION 
result = vdCdfNormInv(...);
#else
result = vdCdfNormInv_generic(...);
#endif
或者,如果未定义
INTEL\u MKL\u版本
,则可以直接抛出错误(
std::runtime\u error
Rcpp::stop

但我认为,如果你向CRAN提交一个包,你应该努力让没有MKL的人可以使用它,即使速度较慢

另见参考资料:

< P>使用C++预处理器宏。下面是一个例子:

double result;
#ifdef INTEL_MKL_VERSION 
result = vdCdfNormInv(...);
#else
result = vdCdfNormInv_generic(...);
#endif
或者,如果未定义
INTEL\u MKL\u版本
,则可以直接抛出错误(
std::runtime\u error
Rcpp::stop

但我认为,如果你向CRAN提交一个包,你应该努力让没有MKL的人可以使用它,即使速度较慢

另见参考资料:

你已经试过了吗?如果是,出了什么问题?然而,MKL是由Intel授权的,可能没有办法使其可被CRAN发布,但我可能错了。我只发现您可以更改
Makevar
文件中的
PKG_LIBS
变量,以链接R使用的默认BLAS和LAPACK库。我不知道如何链接到像MKL这样的外部库。谢谢,但是,链接到MKL可能是不允许的。如果您在合理的时间内没有在这里得到答案,您可以尝试
r-package-devel@r-org
邮件列表。。。您是否在Rmath库中完成了英特尔MKL版本与pnorm版本的一些基准测试?基于,我想您必须将MKL添加到
说明
文件中的
SystemRequirements
,但我不知道
Makevars
文件中需要什么,请参见一些可能的链接标志。您应该使用
configure
脚本测试MKL的存在。然后,您可以按照@thc的建议使用预处理器宏在MKL和NON MKL使用之间取消语言。您已经尝试过了吗?如果是,出了什么问题?然而,MKL是由Intel授权的,可能没有办法使其可被CRAN发布,但我可能错了。我只发现您可以更改
Makevar
文件中的
PKG_LIBS
变量,以链接R使用的默认BLAS和LAPACK库。我不知道如何链接到像MKL这样的外部库。谢谢,但是,链接到MKL可能是不允许的。如果您在合理的时间内没有在这里得到答案,您可以尝试
r-package-devel@r-org
邮件列表。。。您是否在Rmath库中完成了英特尔MKL版本与pnorm版本的一些基准测试?基于,我想您必须将MKL添加到
说明
文件中的
SystemRequirements
,但我不知道
Makevars
文件中需要什么,请参见一些可能的链接标志。您应该使用
configure
脚本测试MKL的存在。然后,您可以按照@thc的建议使用预处理器宏在MKL和NON MKL使用之间取消语言。