2012-05-31 14 views
40

Czytanie strony , istnieją pewne (niejasne) odniesienia do wielowątkowości z R, ale nie jest jasne, w jaki sposób kompiluje się produkt podstawowy i biblioteki CRAN.wielowątkowość z R?

Revolution Analytics oferuje wielowątkową bazę (?) Do pobrania dla systemu Windows i Redhat.

Czy niektóre inne dystrybucje Linuksa zawierają również wielowątkowe R (i pakiety)?

Dzięki

+3

Gdzie są niejasne odniesienia się odwoływać? Revolution R wykorzystuje wielowątkowy BLAS. Możesz używać dowolnego BLAS, którego potrzebujesz, w tym wielowątkowego BLAS, po prostu musisz [postępuj zgodnie z instrukcjami] (http://cran.r-project.org/doc/manuals/R-admin.html#BLAS). –

+0

Częściowo moje pytanie brzmiało, czy Linux wysyła pliki z wielogłowicowym R (biblioteki, jak wyjaśniono poniżej ...)? – gliptak

+2

Debian (i Ubuntu) udostępnia Open BLAS, który jest całkiem niezły, a także Atlas (który jest dobry, ale zazwyczaj jest zbudowany w konfiguracji z jednym wątkiem). –

Odpowiedz

50

Jesteś zdezorientowany.

Elementy wewnętrzne R (i przed nim, S) są jednowątkowe i prawie na pewno pozostaną jednowątkowe. Jak rozumiem, praca dr Duncan Temple Lang był o przezwyciężenie tego, a jeśli nie może zrobić ...

Powiedział, że istnieją kieszenie wielo-threadedness:

  • pierwsze za każdym razem, gdy wykonujesz połączenia zewnętrzne i przy odpowiednim blokowaniu, możesz przejść do wielu wątków. To właśnie biblioteki BLAS MKL, Goto/Open BLAS, Atlas (jeśli są zbudowane wielowątkowe), ... wszystkie oferują. Revo R "tylko" jest dostarczany z (Intel's) MKL, ponieważ Intel ma być kluczowym inwestorem Revo

  • Jeśli jesteś ostrożny, co robisz, możesz użyć OpenMP (rozszerzenie kompilatora dla wielowątkowości). Zaczęło się od pracy Luke'a Tierneya na temat pnmath i pnmath0 (które były eksperymentalnymi/zewnętrznymi pakietami) i od tego czasu zaczęły powoli, ale pewnie wchodzić w samo R.

  • Następnie, w wielordzeniowym świecie i na właściwym systemie operacyjnym, zawsze możesz fork(). Właśnie to jest pionierem paczek wielordzeniowych i który pakiet jest teraz równoległy.

  • Ostatnia, ale nie mniej ważna jest trasa sieci/RPC z MPI używana przez pakiety takie jak Rmpi, śnieg, równoległy, ... i objęta wprowadzeniem HPC.

+3

OK, więc na http://developer.r-project.org/TODO-DTL.html stwierdza: "Luke i ja pracujemy nad uzyskaniem współbieżności i potencjalnie równoległości w R, dzięki czemu można (przynajmniej wyglądać) będzie wykonywać jednocześnie różne polecenia. Idealnie będziemy mogli wykorzystać wiele procesorów w maszynie i równolegle wykonywać pewne obliczenia. " Więc jeśli dzwonię do niektórych (?) Poprawnie skompilowanych bibliotek, przetwarzanie jest równoległe, ale nie jest, gdy uruchamiane są polecenia "wbudowane"? – gliptak

+4

Czy w dolnym rogu widać również znacznik czasu "Ostatnia modyfikacja"? –

+1

Po prostu zauważam ... Ktoś z odpowiednimi uprawnieniami może chcieć przenieść stronę do folderu archiwum :) – gliptak

2

Co z numerem this? Ponieważ data modyfikacji tej strony to maj 2014, myślę, że wspomniane pakiety są względnie nowe, a może nie były stabilne w momencie napisania pierwszej odpowiedzi.

+2

Po dwóch i pół latach odpowiedź Dirka wciąż trwa. R nie jest z natury równoległe, nawet jeśli ma biblioteki i funkcje, które są. Tak więc, jeśli użyjesz pętli lub funkcji 'apply', nie zostanie ona automatycznie zrównoleglona. Można jednak zrównoleglować znaczną część swojego kodu, korzystając z funkcji i bibliotek równoległych (np. Pakiet [równoległy] (http://stat.ethz.ch/R-manual/R-devel/library/parallel/doc/parallel) .pdf), który został dostarczony z bazą R od wersji 2.14.0 (październik 2011 r.) –

-2

Revolution R Open mówi oferują

wysoka wydajność silnika język R (wielowątkowe przetwarzanie z Intel® Math Kernel Library)

+6

To jest tylko wielowątkowość dla BLAS/LAPACK, którą otrzymujesz również z OpenBLAS.MKL jest dobrym produktem, ale nie zmienia R w multi -threaded application ... –

1

Można skutecznie wielonitkowa R za pomocą KNIME lub inny program, który wykorzystuje plik wykonywalny rserve.exe. W KNIME można wstawić fragment R w obrębie serii węzłów równoległych do operacji wykonywanych rządkowo. W przypadku operacji kolumnowych można podzielić zestaw danych na podzbiory kolumn i wykonać R Snippets na każdym zestawie, a następnie połączyć je ponownie.

Mam nadzieję, że dzięki temu wentylator procesora obraca się szybciej!

2

jest implementacją interpretera opartą na JVM.Twierdzą oni, że:

przeciwieństwie GNU R, Renjin jest wielowątkowy i potrwa szczęśliwie w środowisku Platform-as-a-Service, takie jak Google App Engine, AWS Elastic Beanstalk, Heroku lub Microsoft Azure.

#resourcehttp://www.bedatadriven.com/products/renjin.html

Nadal aktualne pakiety R nazwalibyśmy z R mogą nie być bezpieczne dla wątków.

Zobacz dokumentację wyjaśniającą ten problem pod tytułem Jep pod numerem CPython od .

https://github.com/ninia/jep/wiki/How-Jep-Works#threading-complications

powodu powikłań i ograniczeń JNI, wątku, który tworzy wystąpienie Jep musi być ponownie wykorzystane dla wszystkich sposób wywołania tej instancji JEP. Jep wymusi to i wyrzuci wyjątki wspominając o nieprawidłowym dostępie do wątku. (W przyszłości mamy nadzieję uprościć lub dostarczyć narzędzia do zarządzania wątkami).

Więcej niż jedna instancja Jep nie powinna być uruchomiona na tym samym wątku w tym samym czasie. Chociaż jest to technicznie dozwolone, może potencjalnie zepsuć stan wątku i doprowadzić do zakleszczenia w interpretera Pythona. Prawdopodobnie zostanie to zmienione, aby wyrzucać wyjątek, jeśli zostanie napotkany w przyszłości.

Wydaje się, że istnieje nadzieja z Renjin, ale rzeczywiste pakiety binarne (C/C++, itp.) Muszą zostać zweryfikowane pod kątem bezpieczeństwa wątków.

Istnieją inne implementacje R

https://dynamicecology.wordpress.com/2014/01/14/r-isnt-just-r-anymore/

+1

Renjin ma mniej powikłań związanych z JNI (multi-threading), ponieważ nie używa JNI, ale tłumaczy cały kod C/C++/Fortran na kod bajtowy JVM. – Parham