Quelle est l'utilité du PETSc pour les matrices denses?


14

Partout où j'ai vu, le didacticiel PETSc / documents, etc., dit qu'il est utile pour l'algèbre linéaire et spécifie généralement que les systèmes clairsemés en bénéficieront. Et les matrices denses? Je veux résoudreUNEX=b pour dense UNE.

J'ai écrit mon propre code pour CG et QMR à Fortran. La construction de base consiste à déchirer le pseudo-code et à ajouter des routines BLAS dans la mesure du possible ( ddot, dnrmet dgemv) avec un peu d'auto-réglage. Comment cela se comparera-t-il à PETSc?

Je sais que la meilleure réponse serait pour moi de l'essayer moi-même mais pour des raisons de temps et d'autres, ce n'est pas possible.

Toute aide est très appréciée.

Réponses:


7

Si vous avez des matrices denses avec une structure (par exemple des transformations rapides, des compléments Schur, etc.), PETSc pourrait être utile. Dans ces cas, vous n'assemblerez pas la matrice complète.

Pour les systèmes denses assemblés, PETSc utilise actuellement PLAPACK, mais la distribution matricielle au format natif PETSc n'est pas la meilleure pour minimiser la communication (pour la plupart des opérations). Jack Poulson, Matt Knepley et moi avons discuté du portage de l'algèbre linéaire dense de PETSc pour utiliser Elemental , la bibliothèque d'algèbre linéaire dense la plus moderne de Jack. Cela ne s'est pas encore produit, mais nous le ferons quand nous aurons le temps.

Si vous voulez une bibliothèque d'algèbre linéaire dense complète, utilisez Elemental. Il est susceptible d'avoir toujours une API plus complète pour ces opérations que PETSc. Si vous devez interagir avec des systèmes clairsemés ou non assemblés, il est probablement logique de s'en tenir à PETSc et d'extraire ce dont vous avez besoin pour utiliser Elemental pour les parties denses (ou nous aider à écrire l'interface PETSc sur Elemental).


Quelle serait votre réponse si je travaillais sur un système de mémoire partagée?
Enquête du

1
Vous pouvez utiliser plusieurs processus MPI ou plusieurs pthreads. Je ne vois pas grand intérêt à écrire un logiciel parallèle qui ne fonctionne qu'avec de la mémoire partagée, car généralement la localité de mémoire à laquelle vous pensez lorsque vous écrivez pour la mémoire distribuée améliore les performances par rapport à toutes les implémentations à l'exception des meilleures threads. Si vous voulez uniquement une API "série" qui utilise des threads en interne pour une algèbre linéaire dense, vous pouvez utiliser un BLAS threadé.
Jed Brown

Je veux que mes codes fonctionnent sur ma station de travail Xeon 12 (je ne regarde pas les clusters pour l'instant). J'utilise Intel MKL pour BLAS (fileté). Recommanderiez-vous toujours que j'essaye PETSc?
Enquête du

Si tout ce que vous voulez, c'est BLAS, vous en êtes satisfait et vous avez déjà écrit le code, utilisez-le. Si vous voulez plus de flexibilité et / ou la possibilité d'utiliser la mémoire distribuée, vous pourriez vouloir PETSc.
Jed Brown

Flexibilité en termes de? Mémoire distribuée?
Enquête du

5

Il est important de réaliser que les bibliothèques d'algèbre linéaire dense parallèle se concentrent généralement sur les routines BLAS de niveau 3 (routines qui exécutent O(n3) travailler avec O(n2)données) et des fonctionnalités de plus haut niveau comme les factorisations et les solveurs électroniques. Ils ne règlent généralement pas les opérations de niveau 1 et de niveau 2 dont vous parlez.

Puisque vous avez mentionné que vous êtes sur un système à mémoire partagée, j'aurais recommandé libFLAME et / ou PLASMA , mais je ne pense pas que ce soit beaucoup plus rapide que BLAS fileté par le fournisseur pour vos opérations de niveau 1 et de niveau 2.

Jed a recommandé Elemental , que je développe, mais je soulignerai à nouveau que les opérations de niveau 1 et de niveau 2 ne sont pas l'objectif principal des bibliothèques d'algèbre linéaire dense parallèle. Honnêtement, je n'ai jamais évalué aucune de ces routines.


Donc, d'après ce que j'obtiens, chaque bibliothèque d'algèbre linéaire dense parallèle suivante essaiera d'optimiser des opérations telles que le calcul de vecteur propre, la solution du système plutôt que BLAS. De plus, Elemental est vraiment impressionnant. Je vais certainement essayer quand je le pourrai.
Enquête le

Ils optimisent généralement le BLAS de niveau 3. La raison en est que la plupart des utilisateurs de la bibliothèque effectueront de gros calculs qui peuvent généralement être mappés au niveau 3 BLAS.
Jack Poulson

Est-ce parce que BLAS 1/2 ne peut pas faire mieux? (Peut-être à cause de la propriété surface-volume?) Données O (N ^ 2) et calcul O (N ^ 2)?
Enquête

C'est parce que BLAS 1 et 2 sont généralement des termes d'ordre inférieur dans le calcul. Le `` jeu '' d'algèbre linéaire dense haute performance consiste à plisser les yeux à chaque opération de la bonne manière afin que vous puissiez appeler xGEMM et vos amis pour autant de travail que possible.
Jack Poulson

En outre, oui, le fait qu'ils effectuent à peu près la même quantité de flops que les mémops est la raison pour laquelle ils sont évités autant que possible.
Jack Poulson
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.