C++计算性能优化

19 篇文章 3 订阅

系统层面优化

1.在程序开始的时候就约定好线程数量,不要动态创建线程

2.使用火焰图分析工具,找出性能黑洞,进行单独优化

3.使用协程代替线程,减少线程的切换,在多任务的情况下效果明显。

4.线程数量与CPU的核数量保持一致,充分利用多核。

5.使用mmap+write替换read+write中的read操作,减少CPU拷贝,节省内存

6. 使用sendfile代替read+write,减少了CPU拷贝,减少上下文切换

7.使用epll代替poll和select

8.减少频繁的进行创建进程等操作,增加内核压力,列如频繁执行system()命令

9.通过异构计算进行计算加速,用gpu、dsp进行高并发计算。

10.利用时间空间进行置换,根据系统资源进行配置。

代码编译层面优化

1.debug->release

2.-O1 -O2 -O3

3.使用静态库性能大于动态库。动态库第一次访问的时候会GOT造成耗时.运行时性能损失5%

4. 使用-lmopt或者-xlibmopt提升使用数学函数的时候的性能。

5.使用-xlic_lib=sunperf来链接经过优化的高速数学例行程序sun性能库提高数学密集型问题的性能

算法层面进行优化

1.map-->hashmap

2.根据不同的使用场景使用不同的stl 插入 删除 查找 排序

3.使用效率更高的算法

4.使用空间换时间-放到队列中立刻返回

代码编写层面优化

1.增加cache命中率

2.循环中增加if else命中,将大概率的放到优先命中。

3.高频短小函数使用内联函数

4.函数参数<3个 使用寄存器而不是内存

5.提前计算--多次使用的变量 提前计算好

6.延迟计算--用不到的变量用到的时候再去初始化

7.用宏 可以在编译时进行优化

8.局部变量初始化成本过高 尽量少用

9.避线程间的锁

10.内存对齐,减少总线读取数据的周期

11.多通道编程 数据独立按照通道构造数据

12.按照cacheline定义数据结构 内存虽然有浪费 但速度快

13.使用全局变量 利用cpu缓存的局部性原则增加数据缓存的几率

14.遍历二维数组的时候先遍历二位下标(连续内存)

15.提前new好内存 减少系统调用malloc/free的耗时

16.减少乘法、除法 多用位移运算

17.少用float结构

18.减少频繁内存分配 会因为内存碎片导致性能下降

19.使用引用和指针 减少值传递

20.利用多核特性 线程间顺序做业务

21.线程间ringbuffer无锁队列

22.多分支的情况下使用switch

23.使用自旋锁的时候需要注意使用场景避免忙占用

24.传递参数使用指针或引用,不要使用对象拷贝造成大量资源浪费

25.大量日志打印的时候减少printf,printf在没有重定向到/dev/null之前是需要输出到屏幕的,这个很耗资源

26.多线程少用不可重入函数

27.避免递归调用

利用工具进行分析

1.使用oprofile对整个系统的性能进行分析,采用的是硬件计数器,效率高,负载低,且结果准确。

2.使用perf测试cpu命中率

3.使用iostat查看 io占用率

4.使用ptrace、strace查看系统调用

5.使用tcpdump抓包看数据

6.使用cat /pro/meminfo查看vss内存

7.使用top查看排行榜

8.使用free查看资源剩余

9.使用cat /proc/进程id/status 查看进程的状态vss、优先级、线程等

10.使用blktrace分析磁盘等io的性能

11.使用iotop分析磁盘占用率

12.利用dtrace编写d脚本来分析系统的瓶颈。

13.使用sysstat监控和分析系统性能

14.使用watch –d uptime来观察负载的变化情况

15.使用vmstat来分析系统的内存使用情况。

16.使用 hping3构造 TCP/IP 协议数据包,对系统进行安全审计、防火墙 测试

17.使用 execsnoop排查因为不断崩溃、重启等造成的偶尔会遇到系统的CPU使用率和系统平均负载很高,但却找不到哪个程序CPU高的问题。

18.使用pstack跟踪进程栈,找到进程常驻的函数。

19.使用ipc查看消息队列、共享内存和信号量等信息

20.使用cachestat查看cache命中率

21.使用memleak分析内存泄露

22.使用lsof -p 进程id 查看进程打开的文件列表

23.使用filetop跟踪内核中文件的读写情况

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
c语言中lambda表达式的性能优化主要集中在以下几个方面: 1. 减少函数调用开销:在使用lambda表达式时,每次调用函数都会有一定的开销,包括函数调用前的准备工作、参数传递和函数返回等。为了减少这些开销,可以将频繁调用的lambda表达式进行缓存,或者将其转换为具名函数。 2. 优化内存分配:在lambda表达式中,可能会存在动态内存分配的情况,例如使用new操作符来动态分配内存。为了提高性能,可以尽量避免频繁的内存分配和释放操作,可以通过预先分配一块内存,然后重复利用,或者使用栈上内存等方法来减少内存分配的开销。 3. 使用适量化数据类型:在使用lambda表达式时,尽量使用适量化数据类型,避免使用过大或过小的数据类型,以减少内存开销和提高运行效率。 4. 使用并行计算:在多核处理器上,可以使用并行计算的方式来提高性能。可以将一些独立的lambda表达式任务分配给不同的处理器核心并行执行,以减少总体的计算时间。 5. 避免不必要的计算:在编写lambda表达式时,避免进行不必要的计算和判断。可以使用条件判断来规避一些不必要的计算,或者使用短路运算来减少计算量。 总之,通过对lambda表达式中的函数调用开销、内存分配、数据类型选择、并行计算计算优化等方面的优化,可以提高c语言中lambda表达式的性能

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值