Parallélisation en tatou

La documentation de la bibliothèque d’algèbre linéaire Armadillo C ++ indique que l’une des raisons du développement de la bibliothèque en C ++ est “la facilité de parallélisation via OpenMP présente dans les compilateurs C ++ modernes” , mais le code Armadillo n’utilise pas OpenMP. Comment puis-je bénéficier des avantages de la parallélisation avec Armadillo? Pour ce faire, utilisez-vous l’un des substituts haute vitesse LAPACK et BLAS ? Ma plate-forme est Linux, processeur Intel mais je soupçonne qu’il existe une réponse générique à cette question.

D’accord, il semble donc que la parallélisation est effectivement obtenue en utilisant les remplacements LAPACK et BLAS à haute vitesse. Sur Ubuntu 12.04, j’ai installé OpenBLAS à l’aide du gestionnaire de paquets et construit la bibliothèque Armadillo à partir de la source. Les exemples dans le dossier des examples construits et exécutés et je peux contrôler le nombre de cœurs à l’aide de la variable d’environnement OPENBLAS_NUM_THREADS .

J’ai créé un petit projet openblas-benchmark qui mesure l’augmentation des performances d’Armadillo lors du calcul d’un produit masortingciel C = AxB pour des masortingces de tailles différentes, mais je ne pouvais le tester que sur une machine à 2 cœurs.

Le graphique des performances montre une réduction de près de 50% du temps d’exécution pour les masortingces supérieures à 512×512. Notez que les deux axes sont logarithmiques; chaque ligne de la grid sur l’axe des ordonnées représente un doublement du temps d’exécution. Parcelle de performance