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

技术标签: 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

智能推荐

ES6(阮一峰)_es6 阮一峰-程序员宅基地

文章浏览阅读3.2k次。一、let 和const 命令let 命令块级作用域块级作用域与函数声明let 命令一、基本用法二、不存在变量提升:先声明再使用三、暂时性死区:先声明再赋值使用四、不允许重复声明:只要有let 就不能重复声明不允许再函数内部重新声明参数块级作用域es5没有块级作用域,var 声明会:1.内层变量可能会覆盖外层变量;2.用来计数的循环变量泄露为全局变量。块级作用域的作用:外层代码块不受内层代码块的影响。ES6 允许块级作用域的任意嵌套。内层作用域可以定义外层作用域的同名变量。匿名立_es6 阮一峰

Vue + Axios + ASP.NET Core WebAPI + 文件上传下载_axios filecontentresult-程序员宅基地

文章浏览阅读1.8k次。准备文件上传的API#region 文件上传 可以带参数[HttpPost(“upload”)]public JsonResult uploadProject(IFormFile file, string userId){if (file != null){var fileDir = “D:\aaa”;if (!Directory.Exists(fileDir)){Directory.CreateDirectory(fileDir);}//文件名称string projectFi_axios filecontentresult

STM32的下载接口需不需要上下拉_swd接口用上下拉吗-程序员宅基地

文章浏览阅读4.3k次。关于stm32的下载接口JTAG、SWD需不需要上下拉电阻历来争议很大,但是我们只要看下STM32的官方手册就能明确。下图引用的是stm32f10x中文参考手册RM0008 Reference Manual 的中文译本,参考手册已经明确指出,虽然JTAG需要上拉,但是stm32已经在内部嵌入了上拉电阻,所以外部不在需要外加外部电阻。..._swd接口用上下拉吗

简单上云第一步,云耀云服务器L实例助力中小企业与开发者轻松应对多种场景_中小型企业业务上云实例-程序员宅基地

文章浏览阅读185次。首先,它提供了多种实例规格,从2核2GB到4核8GB,用户可以根据自己的业务需求和预算,灵活选择合适的规格,平衡性能与成本;再次,基于华为云全球存算网KooVerse,为用户提供了安全、稳定、低时延的高质量网络选择,打造50毫秒用户优质体验服务圈,确保实时音视频、实时游戏、在线教育等低时延业务敏捷高效。以搭建网站为例,基于云耀云服务器L实例从购买到网站搭建完毕可以访问主页仅需要三步,是业界同类型产品中最为简单易用的云服务器禅林,为中小企业和开发者的业务快速开展提供了极大的助力!管理特省心,运维更安心。_中小型企业业务上云实例

试题T-1-04 CC2530 程序控制2 个LED 灯交替闪烁_cc2530点亮2个led灯-程序员宅基地

文章浏览阅读4.8k次,点赞2次,收藏17次。#include <ioCC2530.h>#define uint unsigned int#define uchar unsigned char//定义控制灯的端口#define LED1 P1_0 //定义LED1为P10口控制#define LED2 P1_5 //定义LED2为P15口控制//函数声明void Delay(uint); ..._cc2530点亮2个led灯

英中术语对照 _英语思维导图cut类似的段语-程序员宅基地

文章浏览阅读1.3k次。以下是侯捷个人陆续收集整理的有关於我所涉猎的领域的术语对照(英中繁简)。欢迎所有朋友给我意见(任何意见)。谢谢。新书写作,或发表文章时,我会以此表为叁考。本表所列,并不表示我在写译书籍时一定会采用表内的中文术语。我也可能采用英文术语。一群性质相近同的「东西」,如果译名一贯,阅读的感觉就很好。一贯性的术语,扩充性高,延伸性高,系统化高。● 我喜欢「式」:constructor 建构式declarat_英语思维导图cut类似的段语

随便推点

2021运动蓝牙耳机,性价比高的四款运动蓝牙耳机_2021年运动蓝牙耳机推荐-程序员宅基地

文章浏览阅读101次。2021运动蓝牙耳机,性价比高的四款运动蓝牙耳机近几年陆陆续续发布了不少的蓝牙耳机,现在整个蓝牙耳机市场,从几十到上千的耳机应有尽有,不过由于竞争激烈,也并不一定是高价的耳机一定好,低价的耳机一定差,在低价耳机中也涌现出了不少配置较高的耳机,今天就在这里推荐一些性价比高的蓝牙耳机。一、Nank南卡lite Pro运动蓝牙耳机价格:399防水等级:5蓝牙版本:5.2NANK南卡LITE创新采用了双主机+高通5.2芯片+NANK游戏加速模式,拥有独立芯片和完整电路,两边都是主耳机,搭_2021年运动蓝牙耳机推荐

Ros中编译python包时,出现SyntaxError: Non-ASCII character ‘\xe5‘报错_ros python 失败-程序员宅基地

文章浏览阅读263次。在ROS中编译python包时,出现报错:SyntaxError: Non-ASCII character ‘\xe5’ in file _ros python 失败

Java 字符串根据逗号分隔,并且取最大最小值_用java语言hu-bei-huang-shi-hbei-com-cn找出以“-”分割后最大 最短的-程序员宅基地

文章浏览阅读1k次。Java 字符串根据逗号分隔之后,取字符串中的最大/最小值_用java语言hu-bei-huang-shi-hbei-com-cn找出以“-”分割后最大 最短的字符串

STM32 HAL库 STM32CubeMx -- 串口的使用(USART/UART)_stm32cubemx 串口-程序员宅基地

文章浏览阅读5.7k次,点赞18次,收藏89次。STM32 HAL库 STM32CubeMx 串口的使用(USART/UART) 串口阻塞方式收发 串口中断模式收发 printf重定向_stm32cubemx 串口

Oracle中关于to_date(),to_char(),to_number()函数的用法-程序员宅基地

文章浏览阅读2.1w次,点赞7次,收藏38次。一、Oracle中的to_date()函数 1、to_date()与24小时制表示法及mm分钟的显示: 在使用Oracle的to_date函数来做日期转换时,很多Java程序员也许会直接的采用“yyyy-MM-dd HH:mm:ss”的格式作为格式进行转换,但是在Oracle中会引起错误:“ORA 01810 格式代码出现两次”。 如:select to_date(‘2005-01-01 1..._to_number()函数

寄生电感仿真_q3d仿真时gnd怎么处理-程序员宅基地

文章浏览阅读5k次,点赞5次,收藏34次。1 寄生电感寄生电感,英文名称:Parasitic inductance. 在PCB的传输线中,任何一段导线等效于1个寄生电阻+1个寄生电感。在很多时候,高速信号传输以及电源环路等都会对寄生电感有严格的要求,常见的寄生电感条件为:AC 10M 或者100M。仿真寄生电感软件为:ANSYS 2019R2 下的Q3D组件2 Slwave 进行PCB导入打开Slwave软件,选择Tools->Launch PinToPin setup utility导入PCB文件,File -> Impo_q3d仿真时gnd怎么处理

推荐文章

热门文章

相关标签