- 主题:求助一个c++高性能开发问题
1、既然都用Qt了,就能不Qt Core类和std C++混用就不混用。
2、函数的参数是xn和yn,计算代码却是xn_data和yn_data,说明思维不够专注。
3、n-m*ratio在计算里用了2次,可以提出来仅计算一次。
4、列表取值用xn.at(i)代替xn[i]。
5、用QTextStream或者QDataStream来做输出或者先把计算结果字符串化到QStringList
,再一把写到文件。
【 在 xmbba 的大作中提到: 】
: 请高手们帮忙看一下,
: 一个函数,输入xn包含有76657个double数据,经过浮点数除法运算以后输出yn,输出yn是需要有约44960个double数据,yn的结果要push到pStream里面,为了输出到文件或者数据库,需要在0.5s内完成,最好是越快越好。基本的运算方案不能做修改,只能想办法提升效率。目前发现
: 会有卡顿。不知道有没有什么比较极致的提高效率的方法。
: ...................
--
FROM 112.48.103.*
一个通道1秒才几百K的数据,完全不是什么大数据量。生产-消费者模式,后台接收、处
理,不至于忙不过来。
大概率还是新手、初学者写得代码太小学生了。
【 在 xmbba 的大作中提到: 】
: :),感谢各位高手的热情回复。
: 目前感觉还是架构设计的不够理想和不够清晰,虽然用了多线程的方法(16个通道用了16个线程),但是每个线程里面短时间内要处理的内容还是很多,有没有什么比较简单又健壮的并行计算的方式?或者有一些案例或者教材之类的先推荐学习一下,多谢啦。
: 也问了AI很多问题,感觉有一些小的优化措施,但是到提出优化10倍或者提升更多性能的时候就迷糊了。如果能有高手讲解一下架构或者怎么通过AI问此类问题就好了。在代码已经有的基础上提问AI优化工程。
: ...................
--
FROM 112.48.103.*
设备采集到的数据一般用整数或短整数传输,用double没有意义,毕竟AD或ADC一般是1
0位、16位、24位或32位。
接收到上位机后再根据需要转double进行重建、分析等处理。
【 在 xmbba 的大作中提到: 】
: 架构的确不太行。被难住了。请高手支招:)
: 实际上数据量比较大,打底是一个基础线程base在用无锁队列收集16个通道的数据+保存数据到数据库A,大概是10分钟不到4个G的数据1700万+*16个double类型的浮点数(有效数字保存为小数点后8位)。这块目前还没有发现问题,因为没有涉及浮点数的运算,连续跑10多G数据还好。然后
: 堑加新的16个Reconstruction线程,每个通道的线程预期同时要在0.3s内从前面的数据库A取完数据后完成5万个double类型浮点数的运算+保存到另外一个数据库B,叠加Reconstruction这块会影响到前面的基础线程,30分钟会停1s,30分钟的Reconstruction的数据量大概是3G附近,1s的停
: ...................
--
FROM 112.48.103.*