注册 登录
编程论坛 VFP论坛

求助:硬件利用率低

yechuxing 发布于 2022-07-20 22:07, 2262 次点击
目前一共有16个计算任务,
单独运算任务A时需1个小时。将16个任务同时运算时(将VFP复制16份同时独立运行,类似多线程计算),任务A需5个小时,其他15个任务也差不多同时完成。
无论采用哪种方式,cpu利用率大约40%,内存利用率大约30%,硬盘几乎闲置。好几个小时的计算过程,程序计算结果正确,硬件利用率却这么低,问题到底在哪?
软硬件环境:11代i7/16G/512G m2.SSD/Win10 64bit

本人业余爱好者,求教高手。
16 回复
#2
sych2022-07-21 08:04
没看懂,是不是和挖矿一样,那就多开,尽可能多开160
#3
吹水佬2022-07-21 08:21
是不是这意思:
16个计算过程
用单个进程(任务A)需1个小时
用16个进程同时运行,某进程(任务A)需5个小时

#4
hu9jj2022-07-21 09:48
我理解为:
单个任务A运行需1个小时,16个任务全部运行结束需要16个小时;
将16个任务同时运行,全部结束约5个小时。
#5
yechuxing2022-07-21 10:35
回复 3楼 吹水佬
3楼、4楼的理解都对。
16个计算过程
用单个进程(任务A)需1个小时
用16个进程同时运行,某进程(任务A)需5个小时,其余15个进程也一同完成
单个任务A运行需1个小时,16个任务全部运行结束需要16个小时;
将16个任务同时运行,全部结束约5个小时。

我的疑问:计算机是i7 16核的,要连续计算几个小时,说明任务大计算机忙不过来。可所有硬件利用率都低,说明计算机很闲啊。
这很矛盾啊,哪出问题了。怎样提高硬件利用率,提高程序速度?
不是挖矿,主要利用CPU、内存运算。表格数据都采用临时表,在内存中作查找、筛选等运算。
#6
吹水佬2022-07-21 12:09
操作系统为确保系统各任务的有效稳定运行,进程的CPU利用率应该是操作系统对所有进程CPU利用率的调度问题,进程也有优先级。
进程CPU利用率与进程获得的时间片多少有关
#7
sych2022-07-21 12:30
他这个应该是算法有问题,数据没有隔离,导致各进程等待,正常1个小时的计算量,多开后变成了5个小时,明显的是各个进程相关性太强造成的
#8
hu9jj2022-07-21 14:18
要运行几十分钟甚至几百分钟才能完成,其计算工作量肯定不小。VFP擅长数据管理而非数据运算,建议用其他语言来解决运算问题。
#9
吹水佬2022-07-21 15:52
以下是引用yechuxing在2022-7-20 22:07:46的发言:

目前一共有16个计算任务,
单独运算任务A时需1个小时。将16个任务同时运算时(将VFP复制16份同时独立运行,类似多线程计算),任务A需5个小时,其他15个任务也差不多同时完成。
无论采用哪种方式,cpu利用率大约40%,内存利用率大约30%,硬盘几乎闲置。好几个小时的计算过程,程序计算结果正确,硬件利用率却这么低,问题到底在哪?
软硬件环境:11代i7/16G/512G m2.SSD/Win10 64bit

本人业余爱好者,求教高手。

可以从如下方面试试
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

主要相关API有:
SetPriorityClass
GetCurrentProcess

SetProcessAffinityMask()
GetSystemInfo()
SetThreadAffinityMask()



[此贴子已经被作者于2022-7-22 13:10编辑过]

#10
yechuxing2022-07-21 16:04
回复 7楼 sych
我也这样怀疑过,也做了一些隔离措施,例如vfp6.0程序我复制了16份,我编写的项目程序也复制了16份,使用的表格程序也是16份,应该是各自独立的,不知怎么就这么慢。
我的编写的程序相互独立,不用交换数据。我不确定16份VFP6.0在运行时是否要交换信息,或要等待同一关节点?本想多开提高效率,结果效果不太好。
#11
yechuxing2022-07-21 16:07
回复 9楼 吹水佬
谢谢,待会试试。
#12
laowan0012022-07-21 16:23
个人理解,可能不正确
单个程序运行1小时,16个程序用5小时,这效率已经提高很多了
多个程序运行,对于CPU来说也是要排队的,而且系统也会有其他开销,不可能都分配给你的程序
如果CPU的使用率到了90%以上,机器基本会处于死机状态
还是从程序算法上做改进吧,操作系统的事,VFP可能管不了那么多
#13
yechuxing2022-07-21 17:18
回复 12楼 laowan001
事实上我试过将CPU利用升到90%以上的,不过那是另一个程序。
纠正一下,这个程序多开后需8个小时。当然这个多开还是提高了一倍的效率。
但CPU利用率才40%,内存利用率才30%,硬盘闲置。明显有很大提升空间。
毕竟之前我试过将CPU利用率提升至90%-100%。另一个程序当时也是多开,为什么效率那么高,我也不清楚。
#14
吹水佬2022-07-22 16:08
以下是引用yechuxing在2022-7-21 17:18:37的发言:

事实上我试过将CPU利用升到90%以上的,不过那是另一个程序。
纠正一下,这个程序多开后需8个小时。当然这个多开还是提高了一倍的效率。
但CPU利用率才40%,内存利用率才30%,硬盘闲置。明显有很大提升空间。
毕竟之前我试过将CPU利用率提升至90%-100%。另一个程序当时也是多开,为什么效率那么高,我也不清楚。

个人理解:
CPU利用率就算能变大并不是能提高程序性能(速度或效率)。
例如,从任务管理器看到的进程CPU利用率30%,只是说明进程占用30%的CPU资源就能正常运行,就算能再多占用也没什么意义。
反而觉得,处理相同的事务,CPU利用率越低,说明程序代码或算法优化得越好。
#15
sostemp2022-07-22 19:33
CPU占用低,运行才快
#16
cssnet2022-07-23 14:21
这个帖子提醒了我!
将一项异常耗时的任务,分割成10小块,仔细观察电脑CPU与内存占用情况,决定同时运行5个VFP进程,每个进程计算其中的1小份,结果……迅速解决了困扰我多时的VFP单线程世纪难题!
异常感谢楼主与诸位大侠提供的思路!
#17
吹水佬2022-07-23 14:56
现在的电脑大都有多核CPU,所以VFP处理复杂大型的事务可以考虑多进程,也可分派那个进程使用某CPU,还可以提高进程的优先级,这样就可以更好地利用电脑资源达到提高程序运行效率。
但具体实现还要看实际情况,多进程不是尽可能多的进程就越好,进程使用的CPU越多不一定就是越好。某些情况下使用单CPU可能速度会更快,因为现在的CPU大都会变频,CUP工作繁忙时会升频提速。
1