Связывание библиотеки ядра 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.