Maison >développement back-end >C++ >Les algorithmes parallèles C 17 sont-ils vraiment prêts pour le Prime Time ?
La mise en œuvre des algorithmes parallèles C 17 est-elle prête ?
Malgré la promesse de versions parallélisées d'algorithmes populaires en C 17, la disponibilité et la mise en œuvre de ces fonctionnalités peuvent prêter à confusion.
Initialement, ces fonctionnalités étaient anticipées dès 2017, mais les mises en œuvre pratiques ont mis plus de temps à se matérialiser. À l'heure actuelle, la situation est la suivante :
GCC 9 avec TBB requis
GCC 9, le compilateur par défaut d'Ubuntu 19.10, prend en charge les algorithmes parallèles via les Thread Building Blocks (à déterminer). TBB doit être installé séparément, mais le processus est simple.
sudo apt install gcc libtbb-dev g++ -ggdb3 -O3 -std=c++17 -Wall -Wextra -pedantic -o main.out main.cpp -ltbb ./main.out
Installation d'Ubuntu 18.04
Ubuntu 18.04 nécessite un processus d'installation plus complexe, car TBB n'est pas disponible dans une version compatible via les référentiels par défaut. Les commandes ci-dessous fournissent des instructions automatisées et testées.
# Install GCC 9 sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt-get install gcc-9 g++-9 # Compile libtbb from source. sudo apt-get build-dep libtbb-dev git clone https://github.com/intel/tbb cd tbb git checkout 2019_U9 make -j `nproc` TBB="$(pwd)" TBB_RELEASE="${TBB}/build/linux_intel64_gcc_cc7.4.0_libc2.27_kernel4.15.0_release" # Use them to compile our test program. g++-9 -ggdb3 -O3 -std=c++17 -Wall -Wextra -pedantic -I "${TBB}/include" -L "${TBB_RELEASE}" -Wl,-rpath,"${TBB_RELEASE}" -o main.out main.cpp -ltbb ./main.out
Analyse du programme de test
Pour démontrer l'efficacité des algorithmes parallèles, un programme de test comparant les vitesses de tri des algorithmes parallèles et des implémentations en série ont été fournies. Sur Ubuntu 19.10, le tri de 100 millions de nombres a montré une amélioration significative des performances pour la version parallèle.
./main.out 100000000 parallel 2.00886 s serial 9.37583 s
Messages d'erreur
En cas de dépendances manquantes ou de TBB obsolète version, les messages d'erreur suivants peuvent être rencontrés :
TBB manquant :
fatal error: tbb/blocked_range.h: No such file or directory
Obsolète À déterminer :
#error Intel(R) Threading Building Blocks 2018 is required; older versions are not supported.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!