Уже реализованы параллельные алгоритмы С++ 17?

Я пытался поиграть с новыми функциями параллельной библиотеки, предложенными в стандарте С++ 17, но я не мог заставить его работать. Я попробовал компиляцию с обновленными версиями g++ 8.1.1 и clang++-6.0 и -std=c++17, но ни один из них не поддерживал #include <execution>, std::execution::par или что-то подобное.

При взгляде на cppreference для параллельных алгоритмов существует длинный список алгоритмов, требующих

Техническая спецификация предоставляет распараллеленные версии следующих 69 алгоритмов из algorithm, numeric и memory: (... длинный список...)

похоже, что алгоритмы готовы "на бумаге", но еще не готовы к использованию?

В этом вопросе SO более года назад ответы утверждают, что эти функции еще не были реализованы. Но теперь я ожидал увидеть какую-то реализацию. Есть ли что-нибудь, что мы можем использовать уже?

Ответы

Ответ 1

Вы можете обратиться по адресу https://en.cppreference.com/w/cpp/compiler_support, чтобы проверить состояние реализации всех C++. Для вашего случая просто Intel C++ поиск " Standardization of Parallelism TS ", и вы увидите, что только компиляторы MSVC и Intel C++ поддерживают эту функцию сейчас.

Ответ 3

Gcc еще не реализует TS параллелизма (см. Https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2017)

Однако libstdc++ (с gcc) имеет экспериментальный режим для некоторых эквивалентных параллельных алгоритмов. См. Https://gcc.gnu.org/onlinedocs/libstdc++/manual/parallel_mode.html.

Приступая к работе:

Любое использование параллельной функциональности требует дополнительной поддержки компилятора и времени выполнения, в частности поддержки OpenMP. Добавление этой поддержки не сложно: просто скомпилируйте приложение с флагом компилятора -fopenmp. Это будет ссылка на libgomp, библиотеку времени разгрузки GNU и многопользовательскую обработку, присутствие которой является обязательным.

Пример кода

#include <vector>
#include <parallel/algorithm>

int main()
{
  std::vector<int> v(100);

  // ...

  // Explicitly force a call to parallel sort.
  __gnu_parallel::sort(v.begin(), v.end());
  return 0;
}

Ответ 4

GCC 9 будет иметь их

Упоминается по адресу https://gcc.gnu.org/gcc-9/changes.html.

Параллельные алгоритмы и (требуется Thread Building Blocks 2018 или новее).

Когда он получит метку релиза, я сделаю это. Интересно, чего потребует этот "Thread Building Blocks 2018".