multithreading с R?
Считывая веб – сайт R-проекта , есть некоторые (непонятные) ссылки на multithreading с R, но неясно, как скомпилированы базовый продукт и библиотеки CRAN .
Revolution Analytics предлагает многопоточную базу (?) Для Windows и Redhat.
Будут ли некоторые другие дистрибутивы Linux включать многопоточные R (и пакеты)?
- Открытие всех файлов в папке и применение функции
- Программируемая версия подмножества - для оценки ее состояния при вызове из другой функции
- R: Маскированные функции
- Создать имя переменной с «вставкой» в R?
- Отменить список фреймов данных
- используя substitute для получения имени аргумента с помощью
- как вернуть число десятичных знаков в R
- Максимальная длина для вектора в R
- Почему я получаю «предупреждение, что длинная длина объекта не кратная короткой длине объекта»?
- Скомпилировать R-скрипт в автономный .exe-файл?
- Как мне назвать столбец имен строк в r
- если / else строит внутренние и внешние функции
- Поиск локальных максимумов и минимумов
Ты смущен.
Внутренние элементы R (и перед ним, S) являются однопоточными и почти наверняка останутся однопоточными. Насколько я понимаю, работа доктора Дункана Темпл Ланга заключалась в преодолении этого, и если он не может этого сделать …
Тем не менее, есть карманы многопоточности:
-
Во-первых, всякий раз, когда вы делаете внешние вызовы и с правильной блокировкой, вы можете использовать multithreading. Это то, что библиотеки BLAS MKL, Goto / Open BLAS, Atlas (если построено многопоточное), … все предлагают. Revo R «просто» поставляется с (Intel) MKL, поскольку Intel является ключевым инвестором Revo
-
Если вы внимательно относитесь к тому, что вы делаете, вы можете использовать OpenMP (расширение компилятора для многопоточности). Это началось с работы Люка Тирни по pnmath и pnmath0 (которая раньше была экспериментальной / внешней упаковкой) и с тех пор медленно входила в R, медленно, но верно.
-
Далее, в многоядерном мире и в правильной операционной системе вы всегда можете
fork()
. Это то, что первый многопроцессорный пакет и параллельный пакет теперь продолжается. -
И последнее, но не менее важное: маршрут сети / RPC с MPI, используемый такими пакетами, как Rmpi, snow, parallel, … и распространяется в приложениях HPC.
Как насчет этого ? Поскольку дата модификации этой страницы в мае 2014 года, я думаю, что упомянутые пакеты являются относительно новыми или, может быть, они не были стабильными на момент написания первого ответа.
Renjin
– это реализация интерпретатора на основе JVM. Они утверждают, что:
В отличие от GNU R, Renjin многопоточен и успешно работает в среде Platform-as-a-Service, такой как Google Appengine, AWS Elastic Beanstalk, Heroku или Microsoft Azure.
#resource
http://www.bedatadriven.com/products/renjin.html
Тем не менее, фактические пакеты R, которые мы будем звонить из R, не могут быть streamобезопасными.
См. Документацию Jep
объясняющую эту проблему с точки зрения вызова CPython
из Java/Scala
.
https://github.com/ninia/jep/wiki/How-Jep-Works#threading-complications
Из-за осложнений и ограничений JNI stream, создающий экземпляр Jep, должен быть повторно использован для всех вызовов методов для этого экземпляра Jep. Jep будет применять это и исключать исключения, ссылающиеся на недопустимый доступ к streamу. (В будущем мы надеемся упростить или предоставить утилиты для управления streamами).
Одновременно нельзя запускать более одного экземпляра Jep в одном и том же streamе. Хотя это технически разрешено, это может потенциально испортить состояние streamа и привести к взаимоблокировке в интерпретаторе Python. Вероятно, это изменение будет изменено, чтобы вызвать исключение, если оно встречается в будущем.
Таким образом, похоже, что у Renjin
есть надежда, но используемые фактические бинарные (C / C ++ и т. Д.) Пакеты должны быть проверены для обеспечения безопасности streamов.
Существуют и другие реализации R
https://dynamicecology.wordpress.com/2014/01/14/r-isnt-just-r-anymore/
Вы можете эффективно использовать многопоточный R, используя KNIME или любую другую программу, которая использует исполняемый файл rserve.exe. В KNIME вы можете поместить R Snippet в ряд узлов параллельного узла для операций, выполняемых по-разному. Для операций с колонками вы можете разбить dataset на поднаборы столбцов и выполнить fragmentы R на каждом наборе, а затем объединить их вместе.
Надеюсь, это ускорит rotation вашего процессора!
Revolution R Open говорит, что они предлагают
Высокопроизводительный движок языка R (многопоточная обработка с библиотекой ядра Intel® Math Kernel )