Параллельность в Clang

Рейтинг: 8Ответов: 1Опубликовано: 08.05.2023

Поддерживается ли в Clang (точнее в libc++) какая либо параллельность?

В GCC (точнее в libcstd++), до C++17 был Parallel Mode с openMP, а после C++17 в STL появилась поддержка Parallel Standard Algorithms, используящая execution policies и технологию TBB.

Почему же в Clang (libc++) ничего нет? Более того, в последних версиях Clang стало невозможно использовать -stdlib=libcstd++, по крайней мере в macOS. Прикрутить тот же tbb к Clang (libc++) не выйдет. Неужели остаются только POSIX потоки и все? Я ничего не пропустил?

Например, этот код, использующий параллельную версию алгоритма std::sort, скомпилирует в GCC, но не скомпилирует в Clang(libc++):

#include <iostream>
#include <vector>
#include <numeric>
#include <algorithm>
#include <random>
#include <iterator>
#include <execution>

int main(int argc, char const *argv[])
{
    std::vector<int> v(10);
    std::iota (std::begin(v), std::end(v), 0);

    std::random_device rd;
    std::mt19937 g(rd());
 
    std::shuffle(v.begin(), v.end(), g);
 
    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';

    std::sort(std::execution::par, v.begin(), v.end()); // Execution policy of parallel algorithms

    std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';

    return 0;
}

Ответы

▲ 0

Да, clang и его стандартная библиотека libc++ поддерживает параллельность. Clang имеет встроенную поддержку для OpenMP и может выполнять параллельные вычисления с помощью директив и функций OpenMP.