用Python实现一个CPU跑分程序

news/2024/10/18 0:22:11/

一般我们要对cpu进行跑分测试,在不同的系统有时测试软件不能统一,比如Linux下就没有CineBench,导致跑分成绩对比不方便,所以想着自己写一个简单的跑分程序。

代码用Python实现,可以分别进行单核和多核测试,测试方法是计算斐波那契数列,多核测试用到了multiprocessing模块,正好趁这个机会熟悉一下Python的并行编程。

运行代码,首先选择单核或多核测试。
单核测试就直接计算2000000位的斐波那契数列并统计耗时。
而多核则计算1024个250000位的斐波那契数列,然后统计总耗时,计算的过程中当进程池中有进程计算完成,便继续向其中添加新进程,直到最后达到设置的数量。当然跑分算法以及多核计算的个数都可以更改。

下面是代码部分,基于Python 3.X,一般可以直接运行在Linux或者Mac下:

class CpuTest:__wrong_flag = 0def test_func(self, s_m):# 测试函数,计算斐波那契数列if s_m == 's':num = 2000000else:num = 250000n1, n2 = 0, 1count = 0while count < num:n3 = n1 + n2n1 = n2n2 = n3count += 1return 1def multi_task(self):# 多核测试,计算1024个250000位的斐波那契数列,统计总耗时test_num = 1024  # 多核测试计算数量print("多核测试\n计算斐波那契数列中。。。(Ctrl+C退出)")num_cores = int(mp.cpu_count())  # cpu核心数print("本地计算机有: " + str(num_cores) + " 核心")pool = mp.Pool(num_cores, self.del_worker)  # 创建进程池result = []time0 = time.time()for i in range(num_cores):result.append(pool.apply_async(self.test_func, args=('m')))# 每次向进程池中只添加最多cpu核心数个进程,保证cpu一直满负荷运行,直到1024个斐波那契数列计算完成try:last_c = 0  # 上一次计算完成数while True:cur_c = 0  # 当前计算完成数for res in result:if res.ready():cur_c += 1# print('c: ', cur_c, 'last_c: ', last_c)diff_c = cur_c - last_c  # 两次计算完成数之差,因为第一步只向进程池添加了cpu核心数个进程,所以此处diif_c一定小于等于cpu核心数last_c = cur_cif diff_c < (test_num - len(result)):  # 如果diff_c小于现在进程池里的进程数与目标数只差,则添加diff_c个进程add_n = diff_celse:  # 否则只添加现在进程池里的进程数与目标数只差这么多个,让计算总数达到目标即可add_n = test_num - len(result)for i in range(add_n):# print(add_n, len(result))result.append(pool.apply_async(self.test_func, args=('m')))if cur_c == test_num:print(" \nPython CPU多核测试完成耗时: %.3fs" % (time.time() - time0))breakexcept KeyboardInterrupt:print(" \n主动停止")pool.terminate()pool.join()self.__wrong_flag = 1time.sleep(2)except Exception as e:print(" \n程序错误\n", e)self.__wrong_flag = 1time.sleep(10)pool.close()pool.join()def del_worker(self):signal.signal(signal.SIGINT, signal.SIG_IGN)def run(self):freeze_support()flag = ''try:print(" ")flag = input("选择单核/多核测试(请输入s/m): ")print(" ")except KeyboardInterrupt:print(" \n主动退出")time.sleep(2)except Exception as e:print(" \n程序错误\n", e)time.sleep(10)try:if flag != 's' and flag != 'm':self.__wrong_flag = 1print("输入错误!")time.sleep(10)elif flag == 's':  # 执行单核测试print("单核测试\n计算斐波那契数列中。。。(Ctrl+C退出)")time0 = time.time()self.test_func('s')print(" \nPython CPU单核测试完成耗时: %.3fs" % (time.time() - time0))else:  # 执行多核测试self.multi_task()if not self.__wrong_flag:print("参考对比:\n""    i7 2600:单核40.053s/多核203.400s\n""    i7 8750H:单核28.693s/多核121.719s\n""    3400G:单核30.457s/多核162.702s\n""    3700X:单核28.839s/多核61.854s\n""    3950X:单核28.065s/多核35.833s\n""    3990X:单核42.362s/多核14.856s\n""    树莓派4b:单核267.841s/多核1015.216s")time.sleep(60)except KeyboardInterrupt:print(" \n主动退出")time.sleep(2)except Exception as e:print(" \n程序错误\n", e)time.sleep(10)

里面给出了一些我自己或者周围能测试到的及其的参考耗时,3990X多核是真的强,树莓派就当娱乐一下吧。

对于Windows系统,没有Python环境的话,我还编译了exe,可以直接运行。

源代码和exe文件都可以从Github上下载:https://github.com/hh997y/A-Simple-CPU-BenchMark-Written-by-Python


http://www.ppmy.cn/news/429062.html

相关文章

python获取某乎热搜数据并保存成Excel

python获取知乎热搜数据 一、获取目标、准备工作二、开始编码三、总结 一、获取目标、准备工作 1、获取目标&#xff1a; 本次获取教程目标&#xff1a;某乎热搜 2、准备工作 环境python3.xrequestspandas requests跟pandas为本次教程所需的库&#xff0c;requests用于模拟h…

模糊测试不“模糊”,高效发掘未知漏洞与 0day 攻击

近日&#xff0c;在「DevSecOps软件安全开发实践」课程上&#xff0c;极狐(GitLab) 高级测试工程师衡韬、极狐(GitLab) 高级后端开发工程师田鲁&#xff0c;分享了模糊测试的概念、必要性和在极狐GitLab 上的实践。 以下内容整理自本次直播&#xff0c;你也可以点击&#x1f44…

网络流量监控与分析软件

参考&#xff1a; https://www.cisco.com/c/en/us/products/ios-nx-os-software/ios-netflow/index.html https://zhuanlan.zhihu.com/p/87325697 ntopng&#xff0c;NetFlow、sFlow&#xff0c; NetFlow Analyzer

windows - 网络流量监控工具

由于需要在本地的流量监控工具 1、DUMeterPortable 可以对当前的pc网络的上下行做记录和统计&#xff0c;可以统计每天的流量控制&#xff0c;程序实时记录 2、BW 功能比较强大&#xff0c;但是监控比较烦人&#xff0c;如果是查看流量的话&#xff0c;这个软件没有必要 3、…

一款免费的网络流量实时监控软件

一款免费的网络流量实时监控软件 来源版块: 网络安全 压缩包内文件格式: 可执行文件 附件来源: 互联网 运行平台: Windows平台 是否经本人验证: 是 附件性质: 免费 详细说明: ySoft Network Monitor 是一款免费的网络流量实时监控软件&#xff0c;它能够将计算机上的各种网络…

软件实现局域网流量控制

有朋友问我怎样限制和他共享上网的其他人的带宽&#xff0c;我总是觉得这是不可能的&#xff0c;除非你有路由器的控制权&#xff0c;但是现在家用的低端路由器一般是没有流量控制的功能的。 根据本人凡事都百度的原则&#xff0c;我带着一线希望上网搜索了一下&#xff0c;发…

流量监控软件networx使用

1. 简介 Networx是一个用于流量监控与统计的工具&#xff0c;可以生成流量统计报表以及查看指定应用程序的流量情况。安装界面是英文的&#xff0c;安装后可以选择中文。下载地址&#xff1a;https://www.softperfect.com/download/ https://www.softperfect.com/download/ 2…

分享几款分析流量的工具

常用流量分析工具 除非要查看非常细微的东西&#xff0c;一般情况下SEO人员并不会去看原始日志文件。通常网站流量分析要借助软件。 流量统计和分析软件一般分为两种。第一种是基于在页面上插入统计代码。SEO站长在需要统计的所有网页上(通常是整个网站所有页面)插进一段统计代…