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.

 Logiciels et matériel

Les langages et architectures testés sont: R avec le package MICE, C mono-cœur, C via la carte graphique(CUDA) 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, des matrices de différentes tailles ont été étudiées: le nombre de variables varie de 100 à 1 000 et le nombre d’observations de chaque variable varie de 1 000 à 1 000 000. Pour chaque taille de matrice, nous avons généré 10 % de valeurs manquantes et le nombre d’imputations M a été fixé à 5.

Imputations multiples

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

L’imputation multiple est une méthode permettant de pratiquer des analyses statistiques sur des jeux de données incomplets sans provoquer une sous-estimation de la variance. Le principe est le suivant :

  1. Initialiser toutes les valeurs manquantes. Si une valeur est manquantes, nous la remplaçons aléatoirement par une des valeurs possibles. Cela conduit a un jeu de données complet.
  2. « Prédire » (via une régression linéaire) la première variable à qui il manque des valeurs par toutes les autres. Les valeurs manquantes initiales de la première variable sont remplacées par les valeurs prédites par la régression.
  3. Itérer le processus à toutes les variables. A chaque fois, remplacer les valeurs manquantes par les valeurs prédites par le modèle.
  4. Répéter 1. , 2. , 3. plusieurs fois

Ensuite, l’analyse est conduite sur le jeu de données ainsi complété.

Résultats & Analyse

Sans surprise, on constate que C est plus rapide que R.
Les performances de la GPU et du Multi-cœur sont moins nettes. Elles sont meilleures que celle de la CPU pure mais seulement à partir d’un certain volume de données. En deçà, les temps de découpage des données, communication avec la carte graphique et avec les cœurs ralentissent l’ensemble de l’opération.
Au final : sur les petits calculs, il est préférable d’utiliser C (même si sur un calcul unique, ça n’a pas beaucoup d’importance, parce qu’attendre une ou 10 milliseconde ne change pas grand-chose). Sur des grandes données, la carte graphique est clairement plus efficace. Elle va 1.24 fois plus vite que le 12 multi-coeurs, 2,4 fois plus vite que 4 multi-coeurs, 3,7 fois plus vite que C et 819 fois plus vite que R…

Pièces complémentaires

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.