Я обнаружил, что использование одного из BLAS/ATLAS/MKL/OPENBLAS улучшит скорость в R. Однако улучшит ли он пакет R, написанный на C или C++? например, пакет R Glmnet реализован на FORTRAN, а пакет rpart R реализован на C++. Будет ли просто установка BLAS/...etc улучшать время выполнения? или нам нужно перестроить (создать новый код C) пакет на основе BLAS/... и т. д.?
Ускорит ли установка BLAS/ATLAS/MKL/OPENBLAS пакет R, написанный на C/C++?
Ответы (1)
Часто указывается, в том числе в комментарии здесь, что «вы должны перекомпилировать R», чтобы использовать другую библиотеку BLAS или LAPACK. Это не правильно.
Вам не нужно перекомпилировать R при условии, что он собран с использованием версий общей библиотеки BLAS и LAPACK.
У меня есть пакет и виньетка на CRAN, в которых этот факт используется для создания системы сравнительного анализа, в которой различные BLAS и версии LAPACK синхронизируются друг с другом, просто устанавливая разные версии (одна команда в Debian/Ubuntu) и запуская тесты — это настолько просто, что может быть автоматизировано в таком пакете, как этот.
Результаты в этом пакете дадут представление о возможных различиях в скорости. То, как именно они сработают, зависит от вашего компьютера, ваших данных (размера), вашей проблемы и т. д. Но если, скажем, ваша проблема использует функции LAPACK, которые могут работать с преимуществами от многопоточности, тогда может помочь установка OpenBLAS. Это верно для любого пакета R, использующего LAPACK, поскольку они будут использовать ту же установку LAPACK, доступ к которой осуществляется через are, и их можно изменить.