2010-09-23 4 views
1

J'ai un std :: vector (appelons-le "data_vector") que je veux synchroniser des parties de processeurs. C'est-à-dire, je veux envoyer les valeurs d'index arbitraires dans ce vecteur à d'autres processeurs.Synchroniser uniquement les parties d'un vecteur C++ en utilisant Boost.MPI

Je peux facilement le faire avec les fonctions send() de Boost si je veux envoyer le vecteur entier, mais j'ai seulement besoin d'en envoyer une petite partie. En ce moment j'ai un vecteur séparé (appelons-le "idx_vector") contenant les index de data_vector que je veux envoyer, mais je peux changer le format si nécessaire.

Quelle est la meilleure façon de faire cela? Je ne veux pas parcourir et synchroniser chaque index séparément. Je pourrais copier toutes les valeurs dans un vecteur contigu et synchroniser cela, puis le reconstruire, mais je me demande si Boost a un meilleur moyen. Boost.serialization avec idx_vector contenant des pointeurs vers des emplacements data_vector fonctionnerait-il? Comment ferais-je cela?

Répondre

0

La sérialisation devrait fonctionner, puisque l'implémentation MPI enverra un tableau d'octets sous le capot. La méthode MPI consiste à définir un type de données MPI qui sélectionne les indices que vous voulez envoyer. Dans ce cas, MPI_Type_indexed est probablement la bonne option.

Questions connexes