Многопоточность с R?
Считая веб-сайт R-project, есть некоторые (неясные) ссылки на многопоточность с R, но неясно, как базовый продукт и CRAN компилируются.
Revolution Analytics предлагает многопоточную базу (?) для Windows и Redhat.
Будут ли некоторые другие дистрибутивы Linux включать многопоточные R (и пакеты)?
Спасибо
Ответы
Ответ 1
Вы смущены.
Внутренние элементы R (и перед ним, S) являются однопоточными и почти наверняка останутся однопоточными. Насколько я понимаю, работа Дункана Храма Ланга PhD заключалась в преодолении этого, и если он не может этого сделать...
Тем не менее, есть карманы многопоточности:
-
Во-первых, всякий раз, когда вы делаете внешние вызовы и с надлежащей блокировкой, вы можете использовать многопоточность. Это то, что библиотеки BLAS MKL, Goto/Open BLAS, Atlas (если они построены
многопоточность),... все предлагают. Revo R "просто" поставляется с (Intel) MKL, поскольку Intel
быть ключевым инвестором Revo
-
Если вы внимательно относитесь к тому, что вы делаете, вы можете использовать OpenMP (расширение компилятора для многопоточности). Это началось с работы Люка Тирни над pnmath и pnmath0 (которые раньше были экспериментальными/внешними пакетами) и с тех пор медленно, но верно входила в R.
-
Далее, в многоядерном мире и в правой операционной системе вы всегда можете fork()
. Это то, что пакет многоядерных пионеров и параллельный пакет теперь продолжается.
-
Наконец, есть маршрут сети /RPC с MPI, используемый такими пакетами, как Rmpi, snow, parallel,... и распространяется в приложениях HPC.
Ответ 2
Как насчет this? Поскольку дата изменения этой страницы в мае 2014 года, я думаю, что упомянутые пакеты являются относительно новыми или, может быть, они не были стабильными на момент написания первого ответа.
Ответ 3
Вы можете эффективно использовать многопоточный R, используя KNIME или любую другую программу, которая использует исполняемый файл rserve.exe. В KNIME вы можете поместить фрагмент R в серии Parallel Chunk node для выполнения операций по строкам. Для операций с колонками вы можете разбить набор данных на поднаборы столбцов и выполнить фрагменты R на каждом наборе, а затем объединить их вместе.
Надеюсь, это ускорит вращение вашего процессора!
Ответ 4
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, не могут быть потокобезопасными.
См. документацию Jep
, объясняющую эту проблему с точки зрения вызова CPython
из Java/Scala
.
https://github.com/ninia/jep/wiki/How-Jep-Works#threading-complications
Из-за осложнений и ограничений JNI поток, создающий экземпляр Jep, должен быть повторно использован для всех вызовов методов для этого экземпляра Jep. Jep будет применять это и исключать исключения, ссылающиеся на недопустимый доступ к потоку. (В будущем мы надеемся упростить или предоставить утилиты для управления потоками).
Несколько экземпляров Jep не должны запускаться в одном потоке одновременно. Хотя это технически разрешено, это может потенциально испортить состояние потока и привести к взаимоблокировке в интерпретаторе Python. Вероятно, это будет изменено, чтобы вызывать исключение, если оно встречается в будущем.
Таким образом, существует надежда на Renjin
, но фактические бинарные (C/С++ и т.д.) пакеты должны быть проверены для безопасности потоков.
Существуют и другие реализации R
https://dynamicecology.wordpress.com/2014/01/14/r-isnt-just-r-anymore/
Ответ 5
Revolution R Open говорит, что они предлагают
Высокопроизводительный движок языка R (многопоточная обработка с Intel® Math Kernel Library)