2016-10-02 2 views
6

Выполняют ли параллельные версии алгоритмов поиска в STL (например, std :: find, std :: find_if) гарантию возврата итераторов к первому элементу в диапазоне, соответствующем критерию?Гарантии на алгоритмах параллельного поиска STL

В документации не содержится явной ссылки на то, является ли это случаем - и в «C++ параллелизм в действии» есть реализация, которая специально выполняет , а не, возвращает первый элемент.

+1

Это они не сделали, чтобы они не работали как не параллельные экземпляры, и поэтому были бы бесполезны. –

+2

Вы имеете в виду стандартную библиотеку C++? Если это так, есть (в настоящее время, как и на C++ 14) никакого формального различия между параллельными и последовательными алгоритмами. Поведение алгоритмов хорошо определено, и любое отклонение от этого приведет к несоблюдению реализации. Так что это действительно зависит от того, какие алгоритмы вы спрашиваете. – juanchopanza

+0

Да, я имею в виду стандартные. Я предположил, что они будут такими же, как и серийные версии, но были немного смущены этой книгой - я думаю, это просто более простой пример. Большое спасибо! – danielgharvey

ответ

2

Поведение стандартных библиотечных алгоритмов *, таких как std::find, std::find_if, хорошо указано в стандарте C++. Начиная с C++ 14, исключений для указанного поведения для параллельных алгоритмов нет. Это означает, что гипотетические параллельные реализации по-прежнему должны соблюдать эти требования, чтобы быть совместимыми.


* Из комментариев, OP означает стандартную библиотеку C++, а не стандартная библиотека шаблонов. Я делаю это различие, потому что STL вполне может определить другой набор правил.

+0

Держитесь. find_if в стандарте C++ определен для итераторов ввода. Предположительно, параллельная версия требует чего-то более сильного, поэтому она не полностью эквивалентна. Не то, чтобы в этом случае это имело для меня значение, но заставляет меня задаться вопросом, что и не гарантировано будет одинаковым между последовательными и параллельными версиями. Интересно, есть ли полная спецификация параллельных версий? Я не могу найти его. – danielgharvey

+0

@ danielgharvey Дело в том, что в текущем стандарте нет параллельной версии. Параллельная реализация должна была бы учитывать указанную семантику. – juanchopanza

Смежные вопросы