Nous devons calculer des matrices de covariance avec des tailles allant de à . Nous avons accès aux GPU et aux clusters, nous nous demandons quelle est la meilleure approche parallèle pour accélérer ces calculs.100000 × 100000
matrix
parallel-computing
gpu
Ouvrez la voie
la source
la source
Réponses:
La première chose est de reconnaître que vous pouvez le faire en utilisant BLAS. Si votre matrice de données est (chaque est un vecteur de colonne correspondant à une mesure; les lignes sont des essais), alors vous pouvez écrire la covariance comme: Nous pouvons écrire ceci comme: où est le vecteur ligne avec tous les éléments 1 donc est un vecteur ligne de la somme des colonnes de . Cela peut être écrit complètement comme BLAS, où x C i j = E [ x i , x j ] - E [ x i ] E [ x j ] = 1X= [ x1X2X3. . . ] ∈ Rm × n X
Vos données et matrices de résultats peuvent faire environ 64 Go, donc vous n'allez pas tenir sur un seul nœud ou sur la valeur d'un nœud de GPU. Pour un cluster non GPU, vous voudrez peut-être regarder PBLAS , qui ressemble à un scalapack. Pour les GPU, les bibliothèques multi-nœuds n'en sont pas encore là. Magma a une sorte d'implémentation BLAS parallèle sous-jacente, mais elle peut ne pas être conviviale. Je ne pense pas que CULA fasse encore plusieurs nœuds, mais c'est quelque chose à surveiller. CUBLAS est à nœud unique.
Je suggérerais également que vous envisagiez fortement d'implémenter le parallélisme vous-même, surtout si vous êtes familier avec MPI et devez le connecter à une base de code existante. De cette façon, vous pouvez basculer facilement entre CPU et GPU BLAS et commencer et terminer avec les données exactement où vous le souhaitez. Vous ne devriez pas avoir besoin de plus de quelques appels MPI_ALLREDUCE .
la source
J'ai implémenté la formule donnée par @Max Hutchinson avec CUBlas et Cuda Thrust et comparé avec des outils de calcul de co-variance en ligne. Il semble que le mien produise de bons résultats. Le code ci-dessous prévu pour QDA Bayes. La matrice donnée peut donc contenir plus d'une classe. Ainsi, plusieurs matrices de co-variance sont calculées. J'espère que ce sera utile pour quelqu'un.
la source