2009-11-17 7 views
5

depuis la dernière version d'Ubuntu (karma koala), j'ai remarqué que le paquet R interne annonce au démarrage le paquet REvolution. Il semble s'agir d'une collection de bibliothèques pour les calculs matriciels haute performance. Et cela semble fonctionner vraiment, apparemment. Par exemple sur une transposition matricielle avec REvolution:REvolution pour R

> system.time(t(matrix(rnorm(10000000),ncol=1000))) 
    user system elapsed 
    1.280 0.150 1.556 

Et sans REvolution:

> system.time(t(matrix(rnorm(10000000),ncol=1000))) 
    user system elapsed 
    1.320 0.170 1.725 

Quelqu'un est-il l'utiliser? Est-ce que ça marche vraiment? Quels types de calcul spécifiques améliorent-ils et comment? Un inconvénient?

Merci :-)

+0

Vous semblez avoir le cas "sans" deux fois. –

Répondre

10

Oui, sur une machine multi-cœurs, les bibliothèques Intel MKL mettant en œuvre la BLAS - et fournis par le paquet revolution-mkl et rabattues par paquet r-revolution-revobase travailleront en parallèle pour des problèmes d'algèbre linéaire, et vous devriez voir une différence au base de l'utilisation des paquets libblas *.

Cependant, votre exemple ci-dessus est pas important, je fais souvent quelque chose comme

mean(replicate(N, system.time(someStuffHere())["elapsed"]), trim=0.05) 

pour calculer une moyenne tronquée sur un certain nombre de réplications. Plus important encore, notez que votre exemple inclut le RNG dessine dans les timings qui sont i) cher, et ii) invariant à la méthode utilisée, donc vous devez générer cela en dehors de system.time(). Outre le MKL, revolution-r apporte également certains des paquetages créés par REvolution à partir de CRAN qui peuvent être utilisés pour l'exécution en parallèle. (Déni: J'ai aidé REvo à mettre cela ensemble pour Ubuntu 9.10)

+0

Merci, aussi pour les conseils sur le timing :-) –

+0

J'ai révolutionné installé sur Ubuntu 13.04, et basé sur le script de référence 2.5, la performance ne change pas du tout après l'installation. Je me demande si quelque chose a mal tourné. S'il vous plaît également voir cette question: http://askubuntu.com/questions/297968/how-to-make-revobase-package-work-in-r-3-0-1 – qed

+0

Maintenant, j'ai utilisé le script de référence sur les deux R3 .0.1 et R2.15, avec ou sans révolution-r, les résultats sont pratiquement les mêmes. Quelqu'un pourrait-il confirmer cela? – qed

4

Voir cette blog post de REvolution pour plus d'informations. REvolution R 3.0 devrait être 100% compatible avec R-2.9.2 de CRAN. Fondamentalement, ils utilisent des bibliothèques d'algèbre linéaire multi-thread, haute performance et l'optimisation des compilateurs. améliorations REVOLUTION comprennent:

  • bibliothèques mathématiques de haute performance optimisé pour tirer parti du cache du processeur, des instructions vectorielles et multithreading (Intel Math Kernel Library - MKL) et
  • compilateurs et bibliothèques optimisation d'exécution.

Il existe des tests de performances sur la page Web REvolution: REvolution R Performance et Simple Benchmarks.

Bien qu'ils ont contribué plusieurs extensions intéressantes à la communauté R sous une licence OSS (foreach, iterators, doSNOW et doMC), l'extension MKL est propriétaire.

Personnellement, je suis passé à (CRAN) R 2.10.0 pour avoir les dernières fonctionnalités de R.

4

Juste pour réitérer ce que Dirk a mentionné au sujet de la synchronisation - dans votre cas, la construction de la matrice prend presque tout le temps. Regardez ce qui se passe (sur mon système, où je n'ai pas REvolution) quand je Yank en dehors de la fonction de synchronisation:

> system.time(t(matrix(rnorm(10000000),ncol=1000))) 
    user system elapsed 
    2.256 0.317 2.576 

> mt <- matrix(rnorm(10000000),ncol=1000) 
> system.time(t(mt)) 
    user system elapsed 
    0.137 0.070 0.204 

En d'autres termes, plus de 90% du temps est consacré à la construction de la matrice, sous 10 % le transposant.

Questions connexes