Связывание библиотеки ядра Intel Math (MKL) с R в Windows
Использование альтернативного BLAS для R имеет несколько преимуществ, см., например, https://cran.r-project.org/web/packages/gcbd/vignettes/gcbd.pdf.
Microsoft R Open https://mran.revolutionanalytics.com/documents/rro/installation/#sysreq использует Intel MKL вместо стандартного справочного BLAS для ускорения вычислений.
Мой вопрос:
Какими будут шаги по связыванию библиотеки Intel MKL ** вручную с R ** самой последней версией в Windows (https://cran.r-project.org/bin/windows/base/)?
ОБНОВЛЕНИЕ 20-07-2016:
Вот подробное описание того, как создать RBLas.dll на базе OpenBLAS для 64-разрядной R для Windows для R ≥ 3.3.0: http://www.avrahamadler.com/r-tips/build-openblas-for-windows-r64/
Ответы
Ответ 1
Я обнаружил, что в Windows, если в каталоге Program Files/R/R-XX.XX.XX/bin/x64 (например, в последнем выпуске R) вы перезаписываете файлы libiomp5md.dll, Rblas.dll и Rlapack.dll их Intel MKL аналог, что вы будете иметь многопоточные матричные операции. Для меня это обычно приводит к увеличению скорости матричных операций примерно в 10 раз, так что оно того стоит! Дайте мне знать, если это работает для вас! Помимо приведенной выше ссылки dropbox, вы можете получить эти файлы также, если вы просто установите Microsoft Open R и скопируете файлы оттуда в вашу последнюю установку R (просто не забудьте также сказать RStudio использовать вашу обычную версия R вместо Microsoft Open R). Это намного проще, чем перекомпилировать весь R...
Ответ 2
только что попробовал для установки R 3.5.1. Я установил Microsoft R Open вместе с CRAN R и скопировал libiomp5md.dll и перезаписал Rblas.dll, Rlapack.dll из аналогов MRO MKL для связи с CRAN R в Windows (аналогично другому ответу выше, но нужно скопировать файл libiomp5md.dll). также). Это работало нормально, и CRAN R работает так же быстро, как и MRO, в соответствии с пакетом version.compare на Github (https://github.com/andrie/version.compare).
Ответ 3
Я смог связать R 3.6.0 с пользовательскими библиотеками, которые вы создаете с помощью компоновщика. В основном вы должны экспортировать те же символы, Rblas.dll
и Rlapack.dll
и Rlapack.dll
. Запустите Compiler 19.0 Update 4 for Intel 64 Visual Studio 2017 environment
командной строки Compiler 19.0 Update 4 for Intel 64 Visual Studio 2017 environment
:
Получить символы:
dumpbin /exports Rblas.dll > Rblas_list
dumpbin /exports Rlapack.dll > Rlapack_list_R
Отредактируйте оба файла, удалив заголовок и нижний колонтитул и 248 F7 00138CE0 dgeevx_
все строки с именами символов (например, 248 F7 00138CE0 dgeevx_
) были похожи на dgeevx_
(только с именами). Скопируйте каталог builder
куда-нибудь на вашем компьютере и внутри него запустите:
# blas links fine
nmake libintel64 export=..path..\Rblas_list name=Rblas
# save lapack errors in another list
nmake libintel64 export=..path..\Rlapack_list_R name=Rlapack 1> undefined_symbols_list
Отредактируйте undefined_symbols_list
сохраните только имена в каждой строке и создайте новый список с разницей
findstr /v /g:undefined_symbols_list Rlapack_list_R > Rlapack_list
nmake libintel64 export=..path..\Rlapack_list name=Rlapack # this should link
С помощью dumpbin/dependents Rlapack.dll
вы можете видеть, что они зависят от libiomp5md.dll
, которую вы можете найти в папке redist
при установке mkl.