OpenMP、R 和 MacOS

13
当我尝试运行一个名为BTYDplus的软件包时,加载时出现以下警告:

This data.table install has not detected OpenMP support. It will work but slower in single threaded mode.

虽然可以在没有OpenMP的情况下运行,但速度非常慢,因此我尝试按照此教程安装OpenMP:http://thecoatlessprofessor.com/programming/openmp-in-r-on-os-x/,但我被卡在了实现“Enabling R to Compile Code with OpenMP on OS X”部分,特别是当我尝试运行vim ~/.R/Makevars/时,结果出现"~/.R/Makevars/" Illegal file name
请问如何让R使用GCC?

1
“~ / .R / Makevars /” 将是一个文件夹,而不是一个文件。也许没有结尾处的“/”会更好? - rosscova
1
"这让我感到惊讶。我仍在使用1.9.6版本,它不提供OpenMP支持,但速度远非缓慢。" - Roland
从Roland提供的链接中,我得到的印象是它可能不存在。如果不存在,你需要创建.R目录和其中的Makevars文件。 - william
@Roland 嗯,也许是因为我在马尔科夫链中使用了500个链条,所以速度很慢? 我已经尝试按照您提供的链接上的说明进行操作,但没有成功。 - william
1
仍然很有趣去找出这里的问题。我按照@Roland在data.table GitHub上提到的指示进行操作,但在加载包时仍然收到相同的警告。 - altabq
显示剩余6条评论
2个回答

3
如果您使用clang编译OpenMP代码,您将需要libomp库。我发现最简单的方法是通过homebrew安装brew install libomp

2
尽管在Mac Sierra上更新clang(不确定较新版本的MacOS是否通过更新clang来解决此问题)可以使OpenMP编译工作,如在Mac OS X(Sierra)中启用clang的OpenMP支持,但也可以让Apple默认的clang工作。只需将以下内容添加到〜/ .R / Makevars中即可。
SHLIB_OPENMP_CFLAGS=-Xpreprocessor -fopenmp
SHLIB_OPENMP_CXXFLAGS=-Xpreprocessor -fopenmp

这是利用特殊的CXX/CFLAGS,在编译OpenMP包时应该使用的R软件包,并且

Apple Clang允许您使用-Xpreprocessor -fopenmp处理OpenMP编译指示,然后您可以手动链接到OpenMP库。

更多细节在这里

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接