如何提高工程编译速度-程序员宅基地

技术标签: python  java  ubuntu  linux  大数据  

点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~       文章首发  公众号—— Pou光明

公众号还在维护,大家莫慌~

Linux Qt 平台为例测试

编译总量 = 编译速度 * 编译时间

 

按照上面等式进行优化,则:

在编译总量不变的前提下,要减少编译时间,则可提升编译速度;

或在编译速度不变的情况下,较少编译总量;

再或者既减少编译总量又提高编译速度。

C/C++编译特点

C/C++ 编译单位是文件,无法进行跨模块优化,C++20可支持。

将.o文件链接在一起时很难并行。

预处理过程可并行进行。

提高编译速度

1 减小编译总量

包含大量头文件会导致预处理时间变长,针对此尽量使用前置声明。

Pimpl(Private Implementation)模式与不透明指针。

高内聚、低耦合,减少模块间的依赖。

删除不必要的头文件。

2 提高编译速度

在提升编译速度上,可以增加编译机器数量或者提高单机编译能力。针对整体工程。

2.1 提高单机编译能力

多核编译

make -j*

 

#减少重复编译相同代码的时间

ccache  

 

解决IO瓶颈,充分利用内存资源,头文件非常多,预处理时需要反复从磁盘读取文件

tmpfs 

2.2 使用多机进行

distcc :分布式编译,利用多台计算机资源共同编译一个程序,

   可用于内核或者大型程序(**未做测试**),简单讲链接过程在主机进行。

icecc : distcc升级版

Qt多核编译与ccache使用具体操作流程

1  Qt 设置多核编译

Qt侧边栏 Projects -> Build -> Build Steps

注意虚拟机配置核数。

 

2  ccache 安装及配置步骤

2.1 ccache安装

sudo apt-get install ccache   

ccache -V 可查看是否安装成功

安装完成后默认缓存路径为~/.ccache ,默认缓存空间配置为5G

 

2.2 Qt中配置ccache

#Qt pro中添加  

equals(COMPILE,2){

QMAKE_CXX = ccache g++

}

 

需在Qt->Projects->Build Steps->Additionals arguments 配置变量,如图 

注:使用软链接、配置环境变量等方式无法完成Qt自动使用ccache,qmake生成的Makefile中未使用ccache.

 

Qt使用分布式编译icecc具体操作流程

1 Qt 设置多核编译,设置如上

2.1 1icecc 及gui工具安装

 

sudo apt-get install icecc

sudo apt install icecc-monitor#在终端使用icemon命令进行查看

#开机后icecc-scheduler(调度器)可自动启动,如未启动,可使用systemctl start icecc-scheduler命令启动

 

一个调度器,两个编译机图示。

2.2 icecc 相关设置

如果在ui工具中无法搜索到调度机与客户机,可使用下面命令查看防火墙状态。如果状态为inactive,则无需进行其他设置。

sudo ufw status# Status: inactive

 

如果状态为active,则需添加相关端口。

sudo ufw allow 10245/tcp #添加TCP/10245端口

TCP/10245 on the daemon computers (required)

TCP/8765 for the the scheduler computer (required)

TCP/8766 for the telnet interface to the scheduler (optional)

UDP/8765 for broadcast to find the scheduler (optional)

 

3 Qt中使用icecc

#Qt pro中添加

equals(COMPILE,2){

QMAKE_CXX = icecc g++

}

 

Qt使用icecc及ccache

Qt pro中添加  

equals(COMPILE,2){

QMAKE_CXX = icecc ccache g++

}

 

icecc不同电脑间组成局域网

1 虚拟机开发环境相关设置(VMWare为例)

1.1 查看windows无线网卡

ipconfig /all

无线局域网适配器 描述 如 Intel(R) Wi-Fi 6 AX200 160MHz

1.2 设置VMWare Vmnet信息

编辑->虚拟网络编辑器->更改设置->设置桥接模式->已桥接至选择第一步windows无线网卡信息

 

1.3设置虚拟机网络适配器为桥接模式

1.4关闭Windows无线网络使用的防火墙

1.5 重启电脑

1.6测试效果

2  ubuntu开发环境相关设置

连接无线即可.

测试效果

3  使用效果总结

尽可能提高编译主机核数以增加Active jobs

各个编译机调度受网速影响

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ACK_ACK/article/details/115274598

智能推荐

达梦数据库常用功能及命令记录--持续更新-程序员宅基地

文章浏览阅读8.7k次,点赞3次,收藏17次。达梦数据库常用功能及命令记录达梦数据库语句的使用总体来说跟oracle很接近的,这篇文章主要是把常用的情况和语句做了记录,并且后续还会不断的持续更新达梦数据库常用说明1.测试查询语句:select 1;select top 2 from v$dm_ini; select from v$dm_ini limit 2;select * from v$dm_ini where rownum&l..._达梦数据库存储不等于写法

Dev-C++常用的快捷键 最全汇总_devc++快捷键-程序员宅基地

文章浏览阅读3.1w次,点赞30次,收藏205次。一、最常用的快捷键【Ctrl+N】新建源代码;【Ctrl+O】打开工程或文件;【Ctrl+S】保存;【Ctrl+F9】编译程序; 【Ctrl+F10】运行; 【F9】编译并运行;【F8】调试程序; 【Ctrl+w】查看变量; 【Ctrl+Alt+F2】终止程序;【Ctrl+.】注释;【Ctrl+M】取消注释;【Ctrl+鼠标滚轮】放大缩小字体大小;代码补全功能:Dev-C++具有代码补..._devc++快捷键

YOLOv4的cfg参数及训练_yolov4参数设置-程序员宅基地

文章浏览阅读1.2w次,点赞11次,收藏94次。cfg参数net层[net]batch=96 # 每次iteration训练的时候,输入的图片数量subdivisions=48 # 将每一次的batch数量,分成subdivision对应数字的份数,一份一份的跑完后,在一起打包算作完成一次iterationwidth=512 # width=height,大小为32的倍数momentum=0.9 # 动量,影响梯度下降到最优的速度,一般默认0.9decay=0.0005 # 权重衰减正则系数,防止过拟合angle=0 # 旋转角度,生成更_yolov4参数设置

解决Fiji(image J)无法导出 >4g Tiff格式文件的问题_imagej 4gb-程序员宅基地

文章浏览阅读2.5k次。参考 https://forum.image.sc/t/opening-large-tif/4133利用Fiji带有的Bio-Formats 插件导出Tiff格式文件_imagej 4gb

dataframe的字符类型dtypes为什么是object,而不是str?-程序员宅基地

文章浏览阅读8.7k次。data = pd.DataFrame({"A": [True, False, True], "B": [1.1, 2.2, 3.33], "C": ["c1", "c2", "c3"] })print("data : \n", data.

Flutter自定义功能强大的下拉筛选菜单gzx_dropdown_menu-程序员宅基地

文章浏览阅读1.9k次。gzx_dropdown_menu是一个Flutter自定义功能强大的轻量级下拉筛选菜单Package,它支持iOS和Android。_gzx_dropdown_menu

随便推点

virtualenv教程_virtualenv使用-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏11次。一、参考资料virtualenvvirtualenv简单使用virtualenv的介绍及基本使用(所有命令解释)二、相关介绍irtualenv通过创建一个虚拟化的python运行环境,将我们所需的依赖安装进去的,便于不同的项目在同一台机器上开发运行,不同项目之间相互不干扰,即在一台机器上创建多个独立的python运行环境。如下所示:使用 VirtualEnv 的理由:隔离项目之间的第三方包依赖,如A项目依赖django1.2.5,B项目依赖django1.3。为部署应用提供方便,把开发环_virtualenv使用

XSLT <xsl:if> 元素-程序员宅基地

文章浏览阅读180次。XSLT 元素Previous Page Next Page 元素用于放置针对 XML 文件内容的条件测试。 元素如需放置针对 XML 文件内容的条件测试,请向 XSL 文档添加 元素。语法 ... ...如果条件成立则输出... ...在何处放置 元素如需添加有条件的测试,请在 XSL 文件中的 元素内部添加 元素:..._xslt if 包含

BZOJ2648: SJY摆棋子-程序员宅基地

文章浏览阅读118次。BZOJ2648: SJY摆棋子题目大意二维平面内,支持插入点和查询最近点(曼哈顿距离)K-D Tree的模板题插入很暴力就不讲了查询时,$ans$为全局变量,先用该点位置与更新$ans$,算出与左右子树矩阵的曼哈顿距离如果$ans$$<$子树距离则不下移了$dl$表与左子树距离,$dr$表与右子树距离,这里有一个很巧妙的剪枝 if(dl&l...

24个节气之美,每一个都如诗如画!-程序员宅基地

文章浏览阅读224次。24个节气之美,每一个都如诗如画!提交我的留言加载中已留言 24个节气之美,每一个都如诗如画! 【立春】河南白马寺春是希望,念诵梵音祈愿新年平安快乐【雨水】苏州山塘街春风遍吹送来湿润的空气,和氤氲雾霭【惊蛰】江西婺源春雷初鸣,万象更新明媚的春光很多情【春分】浙江乌镇万物复苏的气息让人莫名的,脸红心跳【清明..._二十四节气如诗如画

Linux系统及编程基础有答案,linux系统及编程基础习题答案-程序员宅基地

文章浏览阅读376次。linux系统及编程基础习题答案 第 1 章 Linux 基础及安装 1. 什么是 Linux ? Linux 是一款优秀的计算机操作系统,支持多用户、多进程、多线程,实时性好,功能强大且稳定。 同时,它又具有良好的兼容性和可移植性,被广泛应用于各种计算机平台上。作为 Internet 的产物, Linux 操作系统由全世界的许多计算机爱好者共同合作开发,是一个自由的操作系统。 2. Linux ..._linux编程基础黑马程序员课后答案

图像处理基础知识_图像处理理论基础-程序员宅基地

文章浏览阅读1.7w次,点赞29次,收藏174次。图像1、模拟图像模拟图像,又称连续图像,是指在二维坐标系中连续变化的图像,即图像的像点是无限稠密的,同时具有灰度值(即图像从暗到亮的变化值)。2、数字图像数字图像,又称数码图像或数位图像,是二维图像用有限数字数值像素的表示。数字图像是由模拟图像数字化得到的、以像素为基本元素的、可以用数字计算机或数字电路存储和处理的图像。通常的二维数字图像是一个矩阵,可以用一个二维数组 f(x,y) 来表示,其中 x,y 是二维空间中的某坐标系的坐标,f(x,y) 表示图像在该点处的灰度值等性质。3、颜_图像处理理论基础