Невозможно скомпилировать C ++ 17 с clang ++ на Ma c OSX - PullRequest
0 голосов
/ 26 марта 2020

clang ++ версия:

Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

Попытка некоторого параллелизма C ++:

#include <algorithm>
#include <execution>
#include <iostream>
#include <vector>
#include <random>
#include <math.h>

#define N 10000000

double myFunction(double x) {
    return pow(x, x) / (int(x) % 3);
}

int main() {
    std::random_device rd;
    std::uniform_real_distribution<double> uniform(0.0, 20.0);

    std::vector<double> inputs;
    std::vector<double> returnValues;
    for (int i = 0; i < N; ++i) {
        double r = uniform(rd);
        inputs.push_back(r);
    }

    std::transform(std::execution::par_unseq,
                    inputs.begin(), inputs.end(), 
                    returnValues.begin(), 
                    myFunction);
}

Я попытался скомпилировать все это:

$ clang++ -std=c++1z go.cpp -o run
$ clang++ -std=c++17 go.cpp -o run

с и без #include <optional>. Но все приводят к одним и тем же ошибкам компилятора:

go.cpp:93:25: error: no member named 'execution' in namespace 'std'; did you mean 'exception'?
    std::transform(std::execution::par_unseq,
                   ~~~~~^~~~~~~~~
                        exception
/Library/Developer/CommandLineTools/usr/include/c++/v1/exception:97:29: note: 'exception' declared here
class _LIBCPP_EXCEPTION_ABI exception
                            ^
go.cpp:93:36: error: no member named 'par_unseq' in 'std::exception'
    std::transform(std::execution::par_unseq,
                   ~~~~~~~~~~~~~~~~^
2 errors generated.
make: *** [parallel] Error 1

РЕДАКТИРОВАТЬ:

Попытка с gcc тоже не работает:

$ gcc --version
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1
Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin
$ gcc -ltbb -std=c++17 go.cpp -o run
$ gcc -ltbb go.cpp -o run

генерирует ошибку:

go.cpp:69:10: fatal error: 'execution' file not found
#include <execution>
         ^~~~~~~~~~~
1 error generated.

Кто-нибудь знает, как это исправить?

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Если вы посмотрите страницу поддержки компилятора на cppreference , вы заметите, что Apple Clang по-прежнему не поддерживает параллельные алгоритмы.

0 голосов
/ 26 марта 2020

Вам не хватает

#include<algorithm>
#include<execution>

При этом, согласно обзору поддержки компилятора на cppreference.com Apple Clang пока не имеет поддержки расширений параллельных алгоритмов. (Ищите «Параллелизм TS» на странице.)

...