linux tbb 安装_Ubuntu18.04 GCC9 安装

本文档介绍了如何在Ubuntu 18.04上安装GCC9以支持C++17的STL并行算法,并详细讲解了TBB(Threading Building Blocks)的安装过程。通过遵循文中步骤,读者可以成功配置GCC9并体验TBB带来的并行计算能力。
摘要由CSDN通过智能技术生成

GCC9 支持c++17 stl 并行算法,所以我们安装一下,尝尝鲜。主要参考了这个下面的两个博客(就是无脑抄袭)

C++17 STL Parallel Algorithms - with GCC 9.1 and Intel TBB on Linux and macOS​solarianprogrammer.com Are C++17 Parallel Algorithms implemented already?​stackoverflow.com
1d404d4d667267eda171581d6e8ef81a.png

1.安装gcc9

# Install GCC 9
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-9 g++-9

2. 安装tbb

  • 下载tbb,并cd 到目录
wget https://github.com/intel/tbb/archive/2019_U8.tar.gz
tar zxvf 2019_U8.tar.gz
rm 2019_U8.tar.gz

cd tbb-2019_U8
  • 编辑linux.gcc-9.inc
cp build/linux.gcc.inc build/linux.gcc-9.inc 
# 使用vscode 编辑文件
code -n build/linux.gcc-9.inc

# 把大约是15,16 行的CPLUS ?= g++ CONLY ?= gcc修改为下面语句,然后保存
CPLUS ?= g++-9
CONLY ?= gcc-9
  • 编译tbb
make compiler=gcc-9 stdver=c++17 tbb_build_prefix=my_tbb_build
  • 安装tbb
sudo mkdir /usr/local/tbb-2019_U8
sudo cp -r include /usr/local/tbb-2019_U8/include
sudo ln -s /usr/local/tbb-2019_U8/include/tbb /usr/local/include/tbb
sudo cp -r build/my_tbb_build_release /usr/local/tbb-2019_U8/lib

sudo ln -s /usr/local/tbb-2019_U8/lib/libtbb.so.2 /usr/local/lib/libtbb.so
sudo ln -s /usr/local/tbb-2019_U8/lib/libtbbmalloc.so.2 /usr/local/lib/libtbbmalloc.so
sudo ln -s /usr/local/tbb-2019_U8/lib/libtbbmalloc_proxy.so.2 /usr/local/lib/libtbbmalloc_proxy.so
echo 'export LD_LIBRARY_PATH=/usr/local/tbb-2019_U8/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

3.测试

  • 测试代码
#include <algorithm>
#include <chrono>
#include <execution>
#include <iostream>
#include <random>
#include <vector>

void printDuration(std::chrono::steady_clock::time_point start, std::chrono::steady_clock::time_point end, const char *message)
{
    auto diff = end - start;
    std::cout << message << ' ' << std::chrono::duration<double, std::milli>(diff).count() << " msn";
}
template <typename T>
void test(const T &policy, const std::vector<double> &data, const int repeat, const char *message)
{
    for (int i = 0; i < repeat; ++i)
    {
        std::vector<double> curr_data(data);

        const auto start = std::chrono::steady_clock::now();
        std::sort(policy, curr_data.begin(), curr_data.end());
        const auto end = std::chrono::steady_clock::now();
        printDuration(start, end, message);
    }
    std::cout << 'n';
}

int main()
{
    // Test samples and repeat factor
    constexpr size_t samples{5'000'000};
    constexpr int repeat{10};

    // Fill a vector with samples numbers
    std::random_device rd;
    std::mt19937_64 mre(rd());
    std::uniform_real_distribution<double> urd(0.0, 1.0);

    std::vector<double> data(samples);
    for (auto &e : data)
    {
        e = urd(mre);
    }

    // Sort data using different execution policies
    std::cout << "std::execution::seqn";
    test(std::execution::seq, data, repeat, "Elapsed time");

    std::cout << "std::execution::parn";
    test(std::execution::par, data, repeat, "Elapsed time");
}
  • 编译程序
g++-9 -std=c++17 -Wall -Wextra -pedantic -O2 t0.cpp -o t0_opt -L /usr/local/lib/ -ltbb
  • 运行代码
./t0_opt
  • 1
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值