2011-05-23 1 views
1

Lorsque vous essayez le code suivant:Est-ce que l'algorithme parallel_for_each de la bibliothèque VS2010 Parallel Patterns Library (PPL) prend en charge std :: set <>?

 Concurrency::concurrent_vector<int> results_temp; 
     std::set<int > temp; 

     Concurrency::parallel_for_each(temp.begin(), temp.end(),[&](int p) { 
       results_temp.push_back(p); 

     }); 

Je reçois l'erreur de compilation suivante:

1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ppl.h(2081): error C2440: '=' : cannot convert from 'const int *' to 'int *' 

J'ai réussi à obtenir parallel_for_each travailler avec std::deque<>, std::list<>, std::vector<> et std::map<>. Je suis curieux de savoir comment le faire fonctionner pour std::set<> ou pourquoi il ne serait pas pris en charge.

Répondre

2

L'exemple de code compilé sans erreur pour moi.

I ajouté ces comprend:

#include <ppl.h> 
#include <concurrent_vector.h> 

Avez-vous installé le Service Pack 1?

+0

Je crois que c'est mon problème. J'ai confirmé ici: [Description de Visual Studio 2010 Service Pack 1] (http://support.microsoft.com/kb/983509) que sous "** Concurrency Runtime **" ils listent "Les conteneurs associés peuvent être utilisés avec le "parallel_for_each" fonction '. Une fois le VS2010-SP1 installé, je confirme que cela fonctionne. Le SP1 – ChetS

+0

a résolu ce problème. Merci d'avoir répondu! – ChetS

+0

Si vous utilisez une version ultérieure de l'IDE de Visual Studio, mais compilez avec VS 2010, vous devez toujours installer le SP1 pour VS2010. Les mises à jour pour les versions ultérieures de VS n'installent pas ce Service Pack. – ChetS

0

Si pour une raison quelconque, il n'y a pas Concurrency::concurrent_set, puis par tous les moyens utilisent un Concurrency::concurrent_map<T, unused_type>

Idéalement, unused_type serait rempli de telle sorte que std::pair<T, unused_type> pourrait emply l'optimisation de classe de base vide. Testez et profilez cela. Si c'est le cas, vous avez à peu près terminé.

Deux quatre choses

  1. Je sais que ce n'est que légèrement boiteux
  2. hypothèse que concurrent_map a std::map sémantique
  3. hypothèse mineure que concurrent_map utilise des paires
  4. Je n'utilise pas réellement PPL (J'utilise GNU libgomp with parallel mode)
+0

Merci pour la réponse, mais ce que je cherche à changer est: std :: set temp; et non Concurrency :: concurrent_vector results_temp; Je travaille autour du problème en faisant ce que vous suggérez: std :: map où j'ignore la plupart du temps le bool. – ChetS

Questions connexes