Win10+mingw64条件下编译和使用TBB(环境变量太神奇了!)

2023-11-15

Win10+mingw64条件下编译和使用TBB

本文记录在Win10系统中使用mingw64对并行库Intel TBB进行编译和使用的步骤。本文时间为2020年3月12日,以上各个软件的版本均为当前较新版本。

编译TBB

  1. TBB下载地址https://github.com/intel/tbb。在其中选择了ZIP格式下载。
    下载界面
    下载完毕后解压后得到TBB的文件夹如下图。
    TBB文件夹内容
  2. 执行编译命令。打开命令行,进入TBB文件夹,执行命令mingw32-make compiler=gcc arch=intel64。
    执行编译命令
    注意本文使用的是mingw64,如果是MinGW,则使用的编译命令应该是mingw32-make compiler=gcc arch=ia32 runtime=mingw tbb。mingw64和MinGW这二者应该不能混淆。
    当然,作为小白我要说一下,要像这样使用mingw32-make,需要事先把mingw64下的bin文件夹加入环境变量Path。
  3. 编译成功。在我这,以上一条命令就可以完成编译。编译后将生成一个文件夹,位置及内容见下图。在此提一下,这个文件夹中的内容应该是我们以后使用TBB的程序在运行时会需要的动态库等。我觉得其中最重要的文件应该是tbb.dll,不知道别的文件是不是也必不可少。
    编译生成的文件

环境变量的设置

以下环境变量及相关作用由TBB编译后生成的文件夹中的 tbbvars.bat 里的内容猜想及测试而来。
(文件夹 D:\Program Files\tbb-tbb_2020\build\windows_intel64_gcc_mingw8.1.0_release)
tbbvars.bat文件的内容

  1. CPATH变量。由于在编辑及编译的过程中需要使用tbb提供的头文件,为了正确地找到这些头文件,一种比较一劳永逸的办法是将tbb的头文件所在的目录添加到环境变量CPATH中。(设置这个变量后,在编译时就不需要使用 -I 选项来给g++命令指定头文件了。这个环境变量从前没有用过,看样子可能是 mingw64 编译时会自动去找这个变量所指的文件夹中去找头文件?)
    CPATH变量设置
  2. LIBRARY_PATH变量。编译过程中我们写的tbb程序还依赖于编译生成的 tbb.dll 等文件,将这些文件所在的目录 D:\Program Files\tbb-tbb_2020\build\windows_intel64_gcc_mingw8.1.0_release 添加到LIBRARY_PATH,则可以在使用g++命令时不必再用 -L 选项来指定使用的动态库。
    LIBRARY_PATH变量设置
  3. Path变量。我们写的tbb程序在运行时同样要依赖于 tbb.dll 等,为了在运行我们的程序时让系统自动识别加载这些库,可以将 tbb.dll 所在的目录加入Path变量(放在PATH中最上面最好)。这一步设置后,在程序运行时,将从Path变量中找所需的依赖库,如果不如此设置,应该是需要在g++ 命令中使用 -Wl,-rpath= 选项来设置程序启动时的路径,从而达到相同的效果(不过我不了解,万一我们编的程序除了tbb库外还需要别的库,-Wl有没有办法处理。。。)。
    Path变量设置
    如上设置环境变量后,可以使得编译和运行较为方便。

TBB使用示例

  1. 代码编辑。创建文件a.cpp,添加代码内容如下。(内容来自https://blog.csdn.net/dwosion/article/details/72724371)
#include <tbb/tbb.h>
#include <iostream>

using namespace std;
using namespace tbb;
int main()
{
    parallel_for(0, 10, [](int num) {cout << num << ":hello tbb " << endl; });
    getchar();
    return 0;
}
  1. 编译。进入代码所在文件夹,执行命令 g++ a.cpp -ltbb进行编译。因为之前设置过相关的环境变量,在此处不需要 -I、-L、-Wl等命令,给我们的编译带来了一定的方便。
    编译过程中出现一个warning,我在初学阶段,并不知道是什么意思,不过发现可执行文件a.exe已经生成,并可以运行。
    编译
  2. 运行。直接双击生成的a.exe,应该就可以运行了。这里应该是Path变量中的库目录起了作用。
    运行结果

总结与展望

  1. 使用mingw64可以对TBB源码进行编译,在适当地设置环境变量后,可以帮助我们方便地进行并行程序的编写。
  2. 各个环境变量的功能应该还可以移植到别的库与项目中。
  3. 我之前使用的编辑工具为VSCode,在进行较多文件的编译时,用makefile进行编译,环境变量的设置可以使得今后TBB编程中makefile更容易写。
    题外话,我想说,makefile 是最难的编程语言。。。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Win10+mingw64条件下编译和使用TBB(环境变量太神奇了!) 的相关文章

  • Python数据可视化的例子——热力图(heatmap)

    关系型数据的可视化 热力图体现了两个离散变量之间的组合关系 热力图 有时也称之为交叉填充表 该图形最典型的用法就是实现列联表的可视化 即通过图形的方式展现两个离散变量之间的组合关系 读者可以借助于seaborn模块中的heatmap函数 完
  • skopt下载

    在pycharm中直接下载skopt时失败 网上有如下解决办法 在python当前位置执行下载 1 先安装scikit optimize pip install scikit optimize 后直接在pycharm中安装skopt成功 若
  • fastJson注解@JSONField指定字段的顺序

    使 ordinal指定字段的顺序 public class BasePackage JSONField ordinal 1 private int id JSONField ordinal 2 private int direction J
  • mysql数据库管理-FEDERATED存储引擎远程链接MYSQL+ORACLE

    一 FEDERATED存储引擎 01 从5 1 26开始 默认MySQL不启用federated存储引擎 所以需要在my cnf中加入federated选项 02 或是在命令行用 federated选项启动mysqld 1 1 说明 mys
  • ubuntu下修改用户的默认目录

    linux系统下 不同的用户有对应的默认目录设置 这些设置都被保存在配置文件 etc passwd中 由上我们可以看出 对于用户名为JACK的用户 其系统默认目录为 home JACK 那么有时候我们可能在JACK目录下新建了一个目录 co
  • 大模型:如何利用旧的tokenizer训练出一个新的来?

    背景 我们在用chatGPT或者SD的时候 发现如果使用英语写提示词得到的结果比我们使用中文得到的结果要好很多 为什么呢 这其中就有一个叫做tokenizer的东西在作怪 训练一个合适的tokenizer是训练大模型的基础 我们既可以从头开
  • actuator--基础--6.3--端点解析--loggers端点

    actuator 基础 6 3 端点解析 loggers端点 代码位置 https gitee com DanShenGuiZu learnDemo tree master actuator learn actuator01 1 介绍 用于
  • 使用Selenium自动化测试web程序

    Selenium 是目前用的最广泛的Web UI 自动化测试框架 核心功能就是可以在多个浏览器上进行自动化测试 支持多平台 windows linux MAC 支持多浏览器 ie ff safari opera chrome 多语言C ja
  • GB28181设备接入侧如何支持H.265?

    技术背景 一直以来 GB28181 2022之前的规范版本让人诟病的一点 没有明确针对H 265的说明 特别是监控摄像机 H 265已然成为标配 GB T28181 2022规范 终于针对H 265做了明确的说明 让我们来一起解读下规范 基
  • differential privacy 差分隐私入门 (二)

    书接上回 对差分隐私比较感兴趣 看了几篇文章 了解一下大概的思想 现在决定重新看一下 发现有些文章内容不是很懂 干脆就一边翻译一边看了 不懂的地方我会加下划线 如果有人看到了 还请不吝指教 注 文章是Cynthia Dwork的 Di er
  • JavaSE复习:数组

    数组 Array 是多个相同类型数据按一定顺序排列 的集合 并使用一个名字命名 并通过编号的方式 对这些数据进行统一管理 数组的常见概念 数组名 下标 或索引 元素 数组的长度 1 数组本身是引用数据类型 而数组中的元素可以是任何数据类型
  • curl访问https报错:Cert verify failed: BADCERT_NOT_TRUSTED

    这个错跟https blog csdn net lixuande19871015 article details 88788699里面的错误看上去有些不太一样 curl v https www baidu com Cert verify f
  • 神经网络记忆_带记忆的神经网络

    神经网络记忆 深度学习 DEEP LEARNING We always heard that Neural Networks NNs are inspired by biological neural networks This huge
  • 初探TVM--TVM优化resnet50

    测试用TVM编译出的resnet50在CPU上的效果 测试resnet50在CPU上的效果 编译后的resnet50模型 图像预处理 运行编译后的模型 查看输出结果 resnet50自动调优 模型调优 auto tune 编译调优过的模型
  • Java: Observer Patterns

    版权所有 2022 涂聚文有限公司 许可信息查看 描述 观察者模式 Observer Patterns 也叫做发布 订阅模式 Publist Subscribe 模型 视图模式 Model View 源 监听器 Source Listene
  • [毕业设计]最新通信工程专业毕设选题题目推荐汇总

    文章目录 1前言 2 如何选题 3 通信工程选题方向 3 1 移动通信方向 3 2 嵌入式开发方向 3 3 人工智能方向 3 4 物联网方向 3 5 算法研究方向 3 6 移动应用开发方向 3 7 网络通信方向 3 8 学长作品展示 4 最
  • DevOps到底是什么意思?

    提到DevOps这个词 我相信很多人一定不会陌生 作为一个热门的概念 DevOps近年来频频出现在各大技术社区和媒体的文章中 备受行业大咖的追捧 也吸引了很多吃瓜群众的围观 那么 DevOps是什么呢 有人说它是一种方法 也有人说它是一种工
  • 为什么要在测试集中不需要使用fit_transform的原因?

    假设我们有一组数据 10 20 30 则标准化之后的数据为 array 1 22474487 0 1 22474487 这组数据的均值为 20 0 标准差为 8 16496580927726 标准化之后的这组数据 其标准差为1 均值为0 假
  • 张钜楷:1.22黄金原油下周实时行情趋势分析及黄金独家操作建议指导

    黄金行情走势分析 周五 1月21日 国际金价进一步走低 远离隔夜创下的11月22日以来高位1847 87美元 盎司 金价对美国升息很敏感 利率上升会降低持有无孳息黄金的吸引力 但金价周线有望连续第二周收阳 本周到目前为止累计涨幅逾0 8 因
  • sql查找一列中某一数值出现次数大于2的记录

    sql查找一列中某一数值出现次数大于2的记录 百度知道

随机推荐

  • 机械臂控制——4

    Robot Drivers 机器人驱动程序可以控制连接到计算机的真实机器人 机器人驱动程序使用通用软件接口来控制和监视特定的机器人控制器 使计算机能够控制工业机器人 机器人驱动程序提供了脱机编程的替代方案 程序被模拟 生成 然后传输到机器人
  • python人工智能应用实例_90后博士说,从Python到人工智能只差这35个趣味案例,越学越有趣...

    有趣的生活每个人都向往 有趣的Python编程学习方式却不是每个人都体验过 以这35个趣味案例开始 让兴趣成为学习Python最好的动力 看看这35个趣味案例 几乎是每个案例都对应着一个Python的知识点 比如 以照猫画虎的案例 教你剖析
  • mysql中geometry类型的简单使用(搜索附近的人)

    mysql中geometry类型的简单使用 编写本文的目的 让和两天前的我一样的初学者 能够更快的使用geometry类型存储空间点数据 也是为了自己加深印象 更熟练的使用geometry类型 建表脚本 CREATE TABLE z gis
  • 微信小程序云开发教程一

    微信小程序云开发 初学者入门教程一 云开发环境搭建 本教程适合刚刚入门的小白 云开发为开发者提供完整的云端支持 弱化后端和运维概念 无需搭建服务器 使用平台提供的 API 进行核心业务开发 即可实现快速上线和迭代 同时这一能力 同开发者已经
  • Pandas数据分析初学--开始了解数据

    探索Chipotle快餐数据 作为一个Pandas初学者 今天用这道题目练手 分享出来 首先 impotr pandas as pd 1 将数据集存入一个名为chipo的数据框内 iris filename chipotle csv chi
  • SkyWalking链路追踪中Trace概念以及Trace与span的关系

    基本概念 在SkyWalking链路追踪中 Trace 追踪 是指一个请求或者一个操作从开始到结束的完整路径 它涵盖了分布式系统中所有相关组件的调用关系和性能信息 具体来说 Trace包含了一系列的span 跨度 每个span代表了一个组件
  • kibana使用_从kibana迁移到grafana作为elasticsearch的展现

    今天说说 我们为什么会选择从kibana迁移到grafana 并选用grafana作为elasticsearch的图表展现工具 文章中关于kinaba和grafana的对比会有些片面 勿喷 最一开始使用kibana ElasticSearc
  • java 正则表达式_a-z_0-9 validation,掌握Java-Bean Validation

    数据校验虽然简单 但是却是一个繁琐的事 我在无数的代码看到if判断参数 然后错了打日志抛异常 一片一片的这种代码 如果有点重复了 再弄出N个xxUtil来归纳代码 虽然这种做法可以达到效果 但是代码散乱 一个是编写麻烦 一个是不易阅读 Ja
  • Pyqt5设计打开电脑摄像头+拍照(转载)

    本片为利用Pyqt5设计一个可以打开摄像头进行拍照的Demo 我感觉以后可能会有用 记录一下 Demo运行视频 哈哈感觉很好玩 用到的模块安装 库 安装 作用 PyQt5 pip install PyQt5 界面设计 opencv pyth
  • [网络安全自学篇] 三十五.恶意代码攻击检测及恶意样本分析

    本文主要结合作者的 系统安全前沿 作业 论文及绿盟李东宏老师的博客 从产业界和学术界分别详细讲解恶意代码攻击溯源的相关知识 在学术界方面 用类似于综述来介绍攻击追踪溯源的不同方法 在产业界方面 主要参考李东宏老师从企业恶意样本分析的角度介绍
  • 单调递增队列(全过程图文实现 另附习题)

    什么是单调队列 有什么用 不妨用一个问题来说明单调队列的作用和操作 不断地向缓存数组里读入元素 也不时地去掉最老的元素 不定期的询问当前缓存数组里的最小的元素 最直接的方法 普通队列实现缓存数组 进队出队都是O 1 一次查询需要遍历当前队列
  • 手把手教你如何 远程控制另一台电脑 保姆教程

    现在win10可以实现两台电脑之间的远程控制 下面我就分享一下如何利用快速助手进行远程控制另一台电脑 每一步都有截图 实验环境 两台win10系统的电脑 一 打开电脑后 需要设置允许电脑进行远程控制 进入 控制面板 系统和安全 系统 远程控
  • python文件操作图形化——python实战项目:单词练习系统

    python 文件操作与图形化编程 目录 python 文件操作与图形化编程 文件基本操作 图形化界面tkinter 单词练习系统 文件基本操作 D Python example txt 文件路径 D Python 文件名 example
  • 并行计算出现 pickle.PicklingError

    from multiprocessing import Pool def my function x return x x if name main inputs 1 2 3 4 5 with Pool 2 as p results p m
  • Unity面试题

    Unity基础面试题 1 什么是协同程序 2 Unity3D中碰撞器和触发器的区别 3 物体发生碰撞的必要条件 4 ArrayList和list的区别 5 如何安全的在不同工程间迁移Asset 6 OnEnable Awake Start的
  • Dubbo高级应用-服务治理

    目录 1 dubbo admin 2 7 x版本安装部署 1 1 下载源码 1 2 部署访问 2 路由规则 2 1 Dubbo API配置 2 2 管理控制台配置 3 规则动态配置 3 1 应用粒度 3 2 服务粒度 4 服务降级 5 集群
  • 集成 CUDA 实现 GPU 加速 OpenCV 计算机视觉

    特点 详细概述了将 OpenCV 与 CUDA 集成以用于实际应用 理解GPU与CUDA编程 通过一些实际示例 探索使用GPU和CUDA的OpenCV加速 熟悉在 NVIDIA Jetson TX1 上部署 OpenCV 应用程序 介绍了
  • python 类装饰器和函数装饰器区别_Python各种类型装饰器详解说明

    装饰器说明 Python中的装饰器是一种可以装饰其它对象的工具 该工具本质上是一个可调用的对象 callable 所以装饰器一般可以由函数 类来实现 装饰器本身需要接受一个被装饰的对象作为参数 该参数通常为函数 方法 类等对象 装饰器需要返
  • -day15--内置模块与开发规范

    day15 内置模块和开发规范 目标 掌握常见的内置模块的使用及了解软件开发的规范 今日概要 内置模块 json time datetime re 开发规范 主文件 配置文件 数据 附件 业务代码 1 内置模块 1 1 json json模
  • Win10+mingw64条件下编译和使用TBB(环境变量太神奇了!)

    Win10 mingw64 VSCode条件下编译和使用TBB Win10 mingw64条件下编译和使用TBB 编译TBB 环境变量的设置 TBB使用示例 总结与展望 Win10 mingw64条件下编译和使用TBB 本文记录在Win10