Convertir l'algèbre linéaire GSL pour une utilisation dans le scalapack ou une autre bibliothèque de matrice parallèle

StackOverflow https://stackoverflow.com/questions/9386113

  •  28-10-2019
  •  | 
  •  

Question

J'ai un code profondément incorporé avec l'arithmétique matricielle GNU Scientific Library (GSL), le calcul principal de ce code consiste Parallélisez ce calcul ou convertissez-le pour être utilisé dans une bibliothèque déjà parallèle comme Scalapack?

Était-ce utile?

La solution

Si votre matrice est clairsemé, c'est-à-dire qu'il contient beaucoup d'entrées zéro, alors vous pouvez facilement implémenter de nombreux packages d'algèbre matriciels clairsemés sans trop de problèmes. Malheureusement, cela vous obligera à stocker vos matrices en format clairsemé qui, à ma connaissance, gsl ne fait pas. Une fois que votre matrice est stockée dans un format clairsemé, vous devriez être en mesure de gérer les grands systèmes sans trop de problèmes, même dans les applications en série.

Je suggère d'utiliser UMFPack car il nécessite le moins de travail à mettre en œuvre car il ne vous oblige pas à mettre vos données dans leurs structures.

Une note sur le paralléisme:Si votre code est actuellement en série, aller à un solveur parallèle n'est pas trivial. Il est possible qu'il soit simple d'implémenter un package multithread, mais je n'ai pas beaucoup d'expérience avec les programmes filetés. De plus, les solveurs directs vraiment parallèles (mémoire distribuée) ne sont pas si efficaces, car chaque processeur a besoin de sa propre copie de la matrice complète, et il est préférable d'utiliser des méthodes itératives.

Un peu plus de détails seraient utiles: combien de temps dure longtemps? Avez-vous besoin de l'inverse pour une raison quelconque, ou résolvez-vous simplement un système d'équations?

Autres conseils

Avez-vous essayé Intel MKL? Il comprend ses propres versions parallèles des fonctions BLAS. La dernière fois que j'ai essayé, ils sont sacrément rapides. Mais il serait également plus facile de répondre si vous donneriez des informations sur la taille de la matrice, mais tant que vous exécutez x64, de nombreux processeurs / cœurs et avec beaucoup de RAM, eh bien, cela n'a pas vraiment d'importance alors.

Une autre option est Nvidia Cuda. Leur interface est similaire à BLAS, mais elle est en fait plus lente que MKL, toujours plus rapide que la série. Peut-être que je l'ai essayé sur une vieille carte, mais vous avez besoin d'au moins 200 unités de flux GPU pour l'appeler utile.

EDIT: Les matrices de ces tailles dépassent mon expérience.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top