Existe-t-il des algorithmes permettant une création efficace (remplissage d'éléments) d'une matrice creuse (par exemple, une RSC ou une coordonnée) en parallèle?Création de matrice fragmentée en parallèle
Répondre
Il n'y a pas d'algorithmes efficaces pour créer des matrices creuses en mode parallèle aux données. Plausible est le type de matrice de coordonnées qui nécessite un tri après le remplissage du contenu, mais ce type est lent pour les produits matriciels, etc.
La solution est que vous ne construisez pas de matrice creuse - vous ne la gardez pas en mémoire; vous effectuez des opérations implicites lorsque vous calculez des éléments de matrice fragmentée.
Si vous stockez votre matrice en tant que mappage de coordonnées, toute langue disposant d'une implémentation de dictionnaire simultanée disponible devrait faire le travail pour vous.
Java a le ConcurrentHashMap
, et .NET 4 a ConcurrentDictionary
, qui autorisent tous deux l'insertion d'éléments non bloquants (afaik) multi-thread en parallèle.
La concurrence et le parallélisme ne sont pas la même chose. Le problème ici est vraiment le remplissage des données en parallèle des éléments dans une matrice clairsemée. Spécifiquement dans mon cas, je veux l'implémenter sur les GPU. –