Поддерживает ли алгоритм библиотеки параллельных шаблонов (PPL) VS2010 параллель_для_ stach :: set <>? - PullRequest
1 голос
/ 24 мая 2011

При попытке ввести следующий код:

        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);

        });

Я получаю следующую ошибку во время компиляции:

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

Мне удалось заставить parallel_for_each работать с std::deque<>, std::list<>, std::vector<>, std::map<> Мне любопытно, как заставить это работать для std::set<> или почему это не будет поддерживаться.

Ответы [ 2 ]

3 голосов
/ 24 мая 2011

Пример кода, скомпилированного для меня без ошибок.

Я добавил следующие:

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

У вас установлен SP1?

0 голосов
/ 24 мая 2011

Если по какой-либо причине нет Concurrency::concurrent_set, то во всех случаях используйте Concurrency::concurrent_map<T, unused_type>

В идеале, unused_type будет заполнено таким образом, чтобы std::pair<T, unused_type> мог использоватьОптимизация пустого базового класса.Протестируйте и профилируйте это.Если это произойдет, вы в значительной степени сделали.

Две четыре вещи

  1. Я знаю, что это только слегка отстой
  2. предположение, что concurrent_map имеет std::map семантику
  3. незначительное предположение, что concurrent_map использует пары
  4. На самом деле я не использую PPL (я использую GNU libgomp с параллельным режимом )
...