Параллельная работа С++ PPL - функция max() в классе сокращения 'combinable'

Я использую библиотеку параллельных шаблонов. Класс combinable играет роль сокращения в openMP и позволяет объединять результаты параллельных вычислений.

Существует ли .combine(max()) (кстати, не могли бы вы указать на какую-нибудь ссылку с разрешенными операциями с объединением, не нашел)?

Спасибо и привет.


person kiriloff    schedule 28.04.2012    source источник


Ответы (1)


Да, вы можете передать std::max в combineable::combine, одна вещь, которую вы должны учитывать при передаче функций шаблона в качестве предикатов, это то, что вы должны явно указать тип:

combineable<T> max;

// .. do processing

max.combine(std::max<T>);

Вы можете найти всю официальную документацию MSDN о combine (и обо всем остальном PPL) здесь .

person Stephan Dollberg    schedule 28.04.2012
comment
Однако я не понимаю, почему здесь синтаксис max.combine(std::max<T>); (и так компилируется), а не max.combine(std::max<T>());, тогда как в doc синтаксис для плюса .combine(plus<double>()) (и так компилируется)? - person kiriloff; 30.04.2012
comment
@dlib std::max<T> - это предикат функции, поэтому вы только называете функцию, фигурные скобки не нужны. std::plus<double> - это класс с перегруженным operator(), то, что вы делаете, когда говорите std::plus<double>(), заключается в том, что вы создаете временный класс того типа, operator() которого используется комбинированием. - person Stephan Dollberg; 30.04.2012