2016-01-20 61 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