首页 > 系统相关 >【OneTBB】MacOS&Linux环境下配置OneTBB库

【OneTBB】MacOS&Linux环境下配置OneTBB库

时间:2023-11-24 21:00:13浏览次数:47  
标签:MacOS include cmake lib OneTBB usr Linux tbb local

参考博客

MacOS

https://macappstore.org/tbb/

Linux

https://blog.csdn.net/Twilightzr/article/details/126533557

 

代码仓库

https://github.com/oneapi-src/oneTBB

 


安装展示

MacOS

命令行输入

1 brew install tbb
View Code

 

截图展示


检查是否成功安装好

1 ls /usr/local/include/tbb
2 # 如果成功下载后,就会在 /usr/local/include下出现 tbb文件夹
View Code

 

 

Linux

1、获取其代码仓库(外网)

方式1:git clone

1 git clone https://github.com/oneapi-src/oneTBB
View Code

 

方式2:release 直接点击下载

Releases · oneapi-src/oneTBB

 

 

2、TBBConfig.cmake 配置 复制到系统中cmake

 

 1 #1.先去对应的系统中library中创建/cmake/TBB
 2 cd /usr/local/lib
 3 mkdir cmake && cd cmake
 4 mkdir TBB
 5 
 6 #2.再去 oneapi-tbb-2021.11.0/lib/cmake/中 
 7 cd oneapi-tbb-2021.11.0/lib/cmake
 8 
 9 #3.修改文档
10 vim TBBConfig.make
11 #里面有一个 TBB_FOUND FALSE -> TRUE
12 
13 #4.复制到 /usr/local/lib/cmake/TBB
14 cp TBBConfig*.cmake /usr/local/lib/cmake/TBB/.
15 
16 #5.检查
17 ls /usr/local/lib/cmake/TBB/
View Code

 

3、TBBConfig.cmake 配置 复制到系统中cmake

3.1 查看自己是系统是32位还是64位

 

3.2 复制到/usr/local/lib/*.so

 

 1 # 1. 到相应的目录下
 2 cd /oneapi-tbb-2021.11.0/lib
 3 # 2. 查看自己系统是多少位系统
 4 uname -m #x86_64 = 64位  |  ( i686 | i386 ) = 32位
 5 # 3. 去相应的文件夹 64位去intel64 ; 32位就去ia32
 6 cd intel64/gcc4.8
 7 # 4. 复制到/usr/local/lib
 8 cp *.so* /usr/local/lib
 9 # 5. 检查是否 成功复制了?
10 ls /usr/local/lib/*tbb* | wc -l
View Code

 

4、复制 头文件*.h 到 include下

 

1 # 1. 进入相应的目录下
2 cd oneapi-tbb-2021.11.0/include/oneapi
3 # 2. 复制目录下的东西至/usr/local/include即可
4 cp -rf ./* /usr/local/include
5 # 3. 检查一下是否 成功复制到
6 ls /usr/local/include/tbb
View Code

 

测试

 

 

CMakeList.txt

 1 cmake_minimum_required(VERSION 3.12)
 2 project(tbbDemo)
 3 
 4 set(CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
 5 SET(CMAKE_C_COMPILER "/usr/bin/gcc")
 6 SET(CMAKE_CXX_COMPILER "/usr/bin/g++")
 7 
 8 set(CMAKE_CXX_STANDARD 17)
 9 
10 find_package(OpenMP)
11 find_package(TBB REQUIRED)
12 
13 add_compile_options(-O0 -Wall)
14 
15 
16 add_executable(example_mt example/example_multithread.cpp)
17 target_link_libraries(example_mt PUBLIC OpenMP::OpenMP_CXX TBB::tbb)
View Code

 

 

example_multithread.cpp

 1 #include "tbb/blocked_range.h"
 2 #include "tbb/parallel_for.h"
 3 #include "tbb/task_scheduler_observer.h"
 4 
 5 #include <iostream>
 6 #include <vector>
 7 
 8 using namespace std ;
 9 
10 struct mytask {
11     mytask(size_t n)
12             :_n(n)
13     {}
14     void operator()() {
15         for (int i=0;i<1000000;++i) {}  // Deliberately run slow
16         std::cerr << "[" << _n << "]";
17     }
18     size_t _n;
19 };
20 
21 struct executor
22 {
23     executor(std::vector<mytask>& t)
24             :_tasks(t)
25     {}
26     executor(executor& e,tbb::split)
27             :_tasks(e._tasks)
28     {}
29 
30     void operator()(const tbb::blocked_range<size_t>& r) const {
31         for (size_t i=r.begin();i!=r.end();++i)
32             _tasks[i]();
33     }
34 
35     std::vector<mytask>& _tasks;
36 };
37 
38 int main(int,char**) {
39 
40     tbb::task_scheduler_observer init;  // Automatic number of threads
41     // tbb::task_scheduler_init init(2);  // Explicit number of threads
42 
43     std::vector<mytask> tasks;
44     for (int i=0;i<1000;++i)
45         tasks.push_back(mytask(i));
46 
47     executor exec(tasks);
48     tbb::parallel_for(tbb::blocked_range<size_t>(0,tasks.size()),exec);
49     std::cerr << std::endl;
50     cout<< "TEST:: Successful !!!"<<endl;
51     return 0;
52 }
View Code

 

 

成功运行结果

 

推荐书目

        

 

 

 

 

标签:MacOS,include,cmake,lib,OneTBB,usr,Linux,tbb,local
From: https://www.cnblogs.com/Osea/p/17854750.html

相关文章

  • Linux文件管理:理解基本概念与常用命令
    1.文件系统基础1.1树状文件结构Linux文件系统采用树状结构,以根目录(/)为起点,所有文件和目录都位于其下。理解这个层次结构是理解Linux文件管理的关键。1.2文件与目录在Linux中,一切皆文件。文件可以是文本文件、二进制可执行文件、目录等。目录用于组织文件,使其更有层次感。2......
  • Linux命令篇
    Linux四大组成部分LinuxKernel内核组成部分硬件设备———管理使用软件程序———操作软件系统内存文件管理———保存、删除、修改内存GUN工具GUIDesktop环境Application应用BashShell命令CLITerminalCLIstandsfor:CommandLineInter......
  • 学习Linux用户管理
    Linux是一个多用户、多任务的操作系统,因此用户管理是系统管理员和Linux使用者必须掌握的重要技能之一。本文将深入探讨Linux用户管理的方方面面,包括用户的创建、删除、权限管理等关键概念。1.用户与用户组在Linux系统中,每个用户都有一个唯一的用户名,用于标识和访问系统资源。用......
  • Linux服务器时间校准
    1.离线情况下安装ntprpm-qa|grepntp2.在线情况下安装ntpyum-yinstallntp3.校正服务器时间与网络时间同步ntpdatecn.pool.ntp.org4.设置时区Pleaseidentifyalocationsothattimezonerulescanbesetcorrectly.Pleaseselectacontinentorocean.1......
  • Linux 存储管理
    7.1存储方式从连接方式上,存储分为以下3种类型。本地存储:直接插在服务器上的硬盘,系统文件存放在本地。本章主要介绍本地存储。外部存储:可以理解为平时使用的移动硬盘,不过移动硬盘用的是USB接口连接,一般外部存储可以使用SCSI线、SATA线、SAS线、FC线。网络存储:以太网络、FC网络......
  • linux第十三章学习笔记
    《Unix/Linux系统编程》第13章学习笔记第13章TCP/IP和网络编程TCP/IP协议TCP/IP是互联网的基础,TCP代表传输控制协议,IP代表互联网协议。目前有IPv4(32位地址)和IPv6(128位地址),目前IPv4使用最多。TCP/IP的四层结构如下:TCP/IP网络中的数据流路径如下图:1.1IP主机和IP地址主机......
  • Linux loopback接口初解
    引用:chatgpt1.linuxloopback作用:Linux中的loopback接口是一个虚拟的网络接口,通常被命名为 lo。它的主要作用是用于本地主机的内部通信,即在同一台机器上的不同网络应用程序之间进行通信。以下是loopback接口的主要作用:本地主机通信: Loopback接口允许同一台机器上......
  • Linux下Oracle11G数据备份恢复(RMAN)
    数据库安装参考步骤1--14https://www.cnblogs.com/baixisuozai/p/17852235.html创建初始pfile文件$viminit.umpay.ora文件内容:umpay.__java_pool_size=4194304umpay.__large_pool_size=4194304umpay.__oracle_base='/DataBase/app/oracle'#ORACLE_BASEsetfromenv......
  • Linux I/O重定向与管道
    第六章I/O重定向与管道I/O重定向创建计划任务,把脚本执行结果放到一个或者几个文件中以便第二天查看。这个过程就叫重定向。常见的有三种文件描述符:0,1,2。这也是绝大部分进程都有的。0表示标准输入,可以理解为键盘输入;1表示标准输出,输出到终端;2表示标准错误,输出到终端。3及以上......
  • FFTW库安装(Linux系统)
    https://zhuanlan.zhihu.com/p/600161033  本文主要介绍在Linux系统下使用GCC和OpenMPI安装FFTW库。一、什么是FFTWFFTW意为FasterFourierTransformintheWest,是一个C语言的快速计算离散傅里叶变换库,它是由MIT的M.Frigo和S.Johnson开发的,可计算一维或多维实和复数据以......