2016-01-20 62 views
2

我试图在HPC群集上的Redhat Linux环境中编译R.我已经使用环境模块来安装包括GCC 5.2.0在内的许多工具的最新版本。我无法让R从源代码构建。它未通过`GOMP_parallel'的未定义引用失败。当我用--disable-openmp选项进行编译时,它编译得很好。使用gcc OpenMP支持从源代码构建R时出错

array.o: In function `do_colsum': 
array.c:(.text+0x5829): undefined reference to `GOMP_parallel' 
collect2: error: ld returned 1 exit status 
make[3]: *** [R.bin] Error 1 
make[3]: Leaving directory `/scratch/kokul/240763.hpc5/R- 3.2.3/src/main' 
make[2]: *** [R] Error 2 
make[2]: Leaving directory `/scratch/kokul/240763.hpc5/R- 3.2.3/src/main' 
make[1]: *** [R] Error 1 
make[1]: Leaving directory `/scratch/kokul/240763.hpc5/R-3.2.3/src' 
make: *** [R] Error 1 

几个问题

  1. 什么是具有启用OpenMP的,我假定这将提升性能的优势是什么?
  2. 如何解决我在建筑时遇到的错误?这与链接正确的库有关吗?建设时正确使用-fopenmp。 libgomp。*文件也位于$ LIBRARY_PATH和$ LD_LIBRARY_PATH中。

这可能是一件简单的事情,我错过了,但我试图寻找一个没有成功的正确答案。

先进的谢谢你的任何帮助。

+0

我远不是这方面的专家,但OpenMP是运行R多线程的一种方法。不过,我认为你必须专门为它编写代码,所以如果你不打算使用它,它可能并不重要。 – alistaire

+0

它看起来像R的基础包中的colSum函数似乎正在使用openMP。我将不得不深入研究一下,看看在OpenMP和没有OpenMP的情况下运行时间是否会有所不同。 –

+0

对于问题1,多线程对于现代计算基本上是必不可少的。你会得到显着的提升。 –

回答

2

我有同样的问题:

GCC轮候册, - 出口动态-fopenmp -L在/ usr/local/lib目录-o R.bin Rmain.o CommandLineArgs.o Rdynload.o Renviron。 RNG.o agrep.o apply.o arithmetic.o array.o attrib.o bind.o builtin.o character.o coerce.o colors.o complex.o connections.o context.o cum.o dcf.o datetime .o debug.o deparse.o devices.o dotcode.o dounzip.o dstruct.o duplicate.o edit.o engine.o envir.o errors.o eval.o format.o gevents.o gram.o gram-ex .o graphics.o grep.o identical.o inlined.o inspect.o internet.o iosupport.o lapack.o list.o localecharset.o logic.o main.o mapply.o match.o memory.o names.o objects.o options.o paste.o platform.o plot.o plot3d.o plotmath.o print.o printarray.o printvector.o printutils.o qsort.o radixsort.o random.o raw.o registration.o relop.o rlocale.o saveload.o scan.o seq.o serialize.o sort.o source.o split.o sprintf.o startup.o subassign.o subscript.o subset.o summary.o sysutils.o times。 o unique.o util.o version.o g_alab_her.o g_cntrlify.o g_fontdb.o g_her_glyph.o xxxpr.o ls ../unix/*.o ../appl/*.o ../nmath/*.o ../extra/tre/libtre.a -L ../../ lib -lRblas -L/usr/lib/gcc/x86_64-linux-gnu/4.8 -lgfortran -lm -lquadmath -lreadline -lpcre -llzma -lbz2 -lz -lrt -ldl -lm array.o:在函数do_colsum': /home/myaccount/Downloads/R-patched/src/main/array.c:1437: undefined reference to GOMP_parallel' collect2:error: ld返回1退出状态 Makefile:144:目标'R.bin'的配方失败

这是来自R(autotools问题)的配置问题。我的电脑有gcc 4.8(附带操作系统)和最新版本的gcc 5.2(我从源代码构建)。海湾合作委员会5.2位于/ usr /本地

我看到R是混合这两个了,而不是拿起5.2库的位置。

我改变了Makefile(这只是一次性修复,因为make文件是由autotool生成的)。

首先进入src/main目录。然后编辑Makefile:

143 $(R_binary):$(R_bin_OBJECTS)$(R_bin_DEPENDENCIES) 144 $(MAIN_LINK)-o $ @ $(R_bin_OBJECTS)$(R_bin_LDADD)

Edite行144:

144 $(MAIN_LINK)-o $ @ $(R_bin_OBJECTS)-L在/ usr /本地/ lib64的-lgomp $(R_bin_LDADD)

这个固定我的问题。我很难为R项目提交一个bug。如果R开发人员看到了这一点,他们是否可以在自动配置级别解决这个问题?自动探测只需要一点点智能。

+0

我也有同样的问题。 – shevy