Уже реализованы параллельные алгоритмы C ++ 17? - PullRequest
0 голосов
/ 25 июня 2018

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

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

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

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

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

Ответы [ 4 ]

0 голосов

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

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

Параллельные алгоритмы и (требуется строительный блок потоков 2018 или новее).

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

0 голосов
/ 25 июня 2018

Intel выпустила библиотеку Parallel STL, которая соответствует стандарту C ++ 17:

Это , объединяемое в GCC .

0 голосов
/ 16 ноября 2018

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

0 голосов
/ 25 июня 2018

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 Offloading и Multi Processing Runtime, присутствие которой обязательно.

Пример кода

#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;
}
...