Подтвердить что ты не робот

Многопоточность с R?

Считая веб-сайт R-project, есть некоторые (неясные) ссылки на многопоточность с R, но неясно, как базовый продукт и CRAN компилируются.

Revolution Analytics предлагает многопоточную базу (?) для Windows и Redhat.

Будут ли некоторые другие дистрибутивы Linux включать многопоточные R (и пакеты)?

Спасибо

4b9b3361

Ответ 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)