R++ est un logiciel d’analyse statistique haute performance. Simple, rapide, efficace. Pour mettre les statistiques à la portée de tous.

 

Parallélisme

Définition : Parallélisme

Un programme parallèle est un programme qui a été conçu pour être exécuté simultanément par plusieurs processeurs. L’intérêt d’un programme parallèle est qu’il est beaucoup plus rapide que son équivalent non parallèle (gain pouvant aller jusqu’à un facteur de 1000). R++ s’intéresse à trois sources de parallélisme, exploitables sur les ordinateurs de bureaux modernes : le multi cœur, la carte graphique et le cloud.

Le multi-cœur est le fait d’utiliser en parallèle tous les cœurs (CPU) d’un ordinateur. Les cartes graphiques (GPU) sont des unités de calculs massivement parallèles (milliers de processeurs). Ces processeurs sont dotés d’une mémoire de très petite taille, ce qui peut être un handicap dans un cadre général, mais qui ne gêne pas dans le cas spécifique de calculs mathématiques comme la résolution de systèmes linéaires. Enfin, le cloud est un réseau d’ordinateurs connectés.

Premiers tests : Bootstrap parallèle

Dans le cadre de son stage de Master 2, Chai Anchen a comparé l’efficacité du bootstrap
en utilisant différents langages et architectures.

 Méthode

Le bootstrap est une technique statistique de ré-échantillonnage. On dispose d’une population sur laquelle on souhaite calculer une certaine statistique S, potentiellement compliquée. On souhaite obtenir un intervalle de confiance autour de S mais les techniques statistiques classiques ne nous permettent pas d’obtenir un tel intervalle. On va l’obtenir via un bootstrap. Le bootstrap fonctionne de la manière suivante :

  • On échantillonne (avec remise) la population. On obtient un échantillon i
  • Sur l’échantillon i, on calcule l’indice statistiques S(i)
  • On itère 1 et 2 un grand nombre de fois.

L’ensemble de tous les S(i) suit une distribution qui nous permet ensuite de définir l’intervalle de confiance. Cette méthode est à la fois coûteuse en temps (si les données sont de grande taille ou si S est compliqué à calculer) et facilement parallélisable.

 Logiciels et matériel

Les langages et architectures testés sont : R, R avec le package Boot multi-cœur, C mono-cœur, C via la carte graphique et C multi-cœur (6, 8, 10 et 12). Les processeurs utilisés sont :

  • CPU : Intel Xeon E5645@2.4Ghz
  • GPU : Tesla C2050, 3GB, 1.15GHz
  • Multi-cœur : 12 cœurs Intel Xeon E5645@2.4Ghz

Pour notre test, la statistique S est simplement la moyenne d’un vecteur de n flottants générés aléatoirement entre 0 et 100. La taille du vecteur n varie de 100 à 1 000 000.

Résultats

Pour chaque taille de vecteur nous avons calculé le temps d’exécution brut, puis relativement à un temps de référence (C en utilisant CPU). Les résultats sont les suivant :

Premier test bootstrap
On observe CPU > R > MC > Boot

Analyse

Sans surprise, on constate que C est plus rapide que R (CPU > R et MC > Boot).

Concernant les performances de la GPU et du Multi-cœur, elles sont meilleures que celle de la CPU pure mais seulement à partir d’un certain volume de données. En deçà, les temps de communication avec la carte graphique ou de fusion des résultats présentent un coût plus important que celui du temps de calcul (!) et ralentissent l’ensemble de l’opération.

À noter, cela n’enlève rien à l’intérêt du parallélisme qui de manière générale est efficace sur des grandes données, justement là où les méthodes classiques montrent leur limites

Voir le deuxième test

Documents

Téléchargez le mémoire de Chai Anchen, détaillant l’intégralité des méthodes et résultats présentés ci-dessus.