2016-05-27 1 views
-3

J'utilise le paquet eigen3 en C++ pour inverser certaines grandes matrices creuses (par exemple 12000 * 12000) dont j'ai besoin pour les opérations ultérieures; Cependant, cela prend beaucoup de temps et je ne peux pas l'étendre à des matrices plus grandes. Est-il possible de le faire en parallèle par exemple en utilisant openmp?Comment paralléliser l'inversion d'une matrice clairsemée?

Merci d'avance.

+2

Etes-vous sûr de vouloir inverser la matrice? Que diriez-vous de résoudre 'Ax = b' à la place? (<- sera probablement plus rapide et plus stable.) –

+3

En outre, l'inverse d'une matrice clairsemée n'est pas éparse en général, alors attendez-vous à une utilisation accrue de la mémoire (> 1 Go pour 12k x 12k, environ 115Go pour 120k x 120k) lente multiplication matricielle-vectorielle si vous effectuez l'inversion. –

+0

@BaummitAugen il semble que vous n'êtes pas familier avec les paquets propres! il est spécifiquement conçu pour les manipulations matricielles clairsemées/denses et n'inverse pas directement la matrice; en effet, il utilise la fonction solve() et ainsi de suite ... –

Répondre

0

Vous pouvez utiliser Eigen comme un conteneur à matrice clairsemée et utiliser les fonctions de solveur parallèle clairsemé de MKL pour calculer l'inversion.

https://software.intel.com/node/521676

Bien que Eigen ne fournit pas d'API pour MKL solveurs de rechange. Vous pouvez toujours les utiliser avec une interface de bas niveau.