2015-01-27 9 views
3

У меня есть R на моем Mac, установленном через CRAN. У меня также есть openblas, установленный через homebrew. Я могу переключаться между реализациями BLAS следующим образом:R и nvblas.dynlib (на mac)

Reference Блас (Netlib я думаю):

ln -sf /Library/Frameworks/R.framework/Resources/lib/libRblas.0.dylib /Library/Frameworks/R.framework/Resources/lib/libRblas.dylib 

vecLib (BLAS компании Apple):

ln -sf /System/Library/Frameworks/Accelerate.framework/Frameworks/vecLib.framework/Versions/Current/libBLAS.dylib /Library/Frameworks/R.framework/Resources/lib/libRblas.dylib 

openblas (при условии, через доморощенного):

brew link openblas --force 
ln -sf /usr/local/lib/libopenblas.dylib /Library/Frameworks/R.framework/Resources/lib/libRblas.dylib 

Из 3 возможных вариантов openblas представляется самым быстрым вариантом (хотя vecLib является очень близким дир).

Однако, я хочу попробовать больше власти:

More Power

I installed CUDA 6.5 from NVIDIA. Это загружает кучу файлов в /Developer/NVIDIA/ и связывает некоторые из них с /usr/local/cuda. Я поставил свои переменные окружения в CUDA ~/.profile:

export PATH="/usr/local/cuda/bin:$PATH" 
export LD_LIBRARY_PATH="/usr/local/cuda/lib:$LD_LIBRARY_PATH" 
export CUDA_ROOT="/usr/local/cuda/bin" 
export CUDA_HOME="/usr/local/cuda" 
export NVBLAS_CONFIG_FILE="/Users/me/nvblas.conf" 

Я тогда сделал "/Users/me/nvblas.conf" со следующими записями:

NVBLAS_CPU_BLAS_LIB /usr/local/lib/libopenblas.dylib 
NVBLAS_GPU_LIST ALL0 
NVBLAS_TILE_DIM 2048 
NVBLAS_AUTOPIN_MEM_ENABLED 

В теории, это должно указывать nvblas.dylib назад до libopenblas.dylib для функций BLAS, которые не включены в nvblas.dylib.

Пока все хорошо. Следующий шаг заключается в соединение R против nvblas.dylib:

ln -sf /usr/local/cuda/lib/libnvblas.dylib /Library/Frameworks/R.framework/Resources/lib/libRblas.dylib 

Однако, когда я начинаю R, кажется, что libRlapack.dylib не может найти все BLAS функции его ищу:

me:~ me$ R 
[NVBLAS] Using devices :0 
[NVBLAS] Config parsed 

R version 3.1.2 (2014-10-31) -- "Pumpkin Helmet" 
Copyright (C) 2014 The R Foundation for Statistical Computing 
Platform: x86_64-apple-darwin13.4.0 (64-bit) 

R is free software and comes with ABSOLUTELY NO WARRANTY. 
You are welcome to redistribute it under certain conditions. 
Type 'license()' or 'licence()' for distribution details. 

    Natural language support but running in an English locale 

R is a collaborative project with many contributors. 
Type 'contributors()' for more information and 
'citation()' on how to cite R or R packages in publications. 

Type 'demo()' for some demos, 'help()' for on-line help, or 
'help.start()' for an HTML browser interface to help. 
Type 'q()' to quit R. 

Error in dyn.load(file, DLLpath = DLLpath, ...) : 
    unable to load shared object '/Library/Frameworks/R.framework/Versions/3.1/Resources/library/stats/libs/stats.so': 
    dlopen(/Library/Frameworks/R.framework/Versions/3.1/Resources/library/stats/libs/stats.so, 6): Symbol not found: _dasum_ 
    Referenced from: /Library/Frameworks/R.framework/Versions/3.1/Resources/lib/libRlapack.dylib 
    Expected in: /Library/Frameworks/R.framework/Versions/3.1/Resources/lib/libRblas.dylib 
in /Library/Frameworks/R.framework/Versions/3.1/Resources/lib/libRlapack.dylib 
During startup - Warning message: 
package ‘stats’ in options("defaultPackages") was not found 

openblas работы отлично по своему усмотрению, и предоставляет все функциональные возможности R, поэтому я думаю, что ошибка в том, что libnvblas.dylib неправильно возвращается к libopenblas.dylib.

Это происходит независимо от того, что CPU BLAS I указывает libnvblas.dylib на (netlib, vecLib, openblas). Может ли кто-нибудь помочь мне разобраться в этой ошибке? Есть ли что-нибудь еще, что мне нужно добавить к моему пути или ссылке, чтобы получить libnvblas.dylib, правильно работая с R на Mac?

Соответствующая ошибка, вероятно:

Symbol not found: _dasum_ 
Referenced from: /Library/Frameworks/R.framework/Versions/3.1/Resources/lib/libRlapack.dylib 
Expected in: /Library/Frameworks/R.framework/Versions/3.1/Resources/lib/libRblas.dylib 

Который смотрит на меня как nvblas не пересылает _dasum_ в openblas.

/редактировать:

otool -L /Library/Frameworks/R.framework/Resources/lib/libRblas.dylib 

Урожайность:

/Library/Frameworks/R.framework/Resources/lib/libRblas.dylib: 
    @rpath/libnvblas.6.5.dylib (compatibility version 0.0.0, current version 6.5.14) 
    @rpath/libcublas.6.5.dylib (compatibility version 0.0.0, current version 6.5.14) 
    /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 635.21.0) 
    /usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 52.0.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) 
+0

Хороший вопрос. Вы проверили 'otool -L/Library/Frameworks/R.framework/Resources/lib/libRblas.dylib'? –

+0

@MaratTalipov Добавлен вывод. Не уверен, как интерпретировать. – Zach

+0

Это всего лишь способ убедиться, что rBlas может видеть библиотеки, от которых он зависит. 'otool' скажет« не найден »в отношении отсутствующих библиотек. –

ответ

2

У меня была такая же проблема, как и вы.В OSX, заменяющем библиотеку вместо замены библиотеки в R.framework, проблема решена для меня:

$ DYLD_FORCE_FLAT_NAMESPACE=y DYLD_INSERT_LIBRARIES=/Developer/NVIDIA/CUDA-7.0/lib/libnvblas.7.0.dylib R 
+0

Я попробую! Спасибо – Zach

+1

Это также сработало для меня. Чтобы сэкономить некоторое время, вам также понадобится nvblas.conf –