2023年12月28日  更新


现在这个AI火热的时代科学计算任务占比越来越大,但是平时使用时也有一些不为人注意的地方需要知道,本文就讨论一下使用超线程CPU时的注意事项。

超线程CPU就是现在的多线程CPU,以Intel和AMD的X86 CPU为例,一个10个物理核心的CPU则有20个逻辑核心,其中多出来的10个核心就是超线程架构扩展出的逻辑CPU核心。假设1个物理核心的计算能力为100%,那么扩展多出的一个逻辑核心的计算能力为30%,也就是说1个物理核心扩展出1个物理核心和一个逻辑核心,那么总性能为130%而不是200%。

一个10个物理核心的CPU,开启超线程功能,共20个逻辑核心。假设一个科学计算任务需要使用5个CPU逻辑核心,在开启超线程的CPU上用时1个小时完成任务,CPU使用率为25%;那么同时运行两个该任务,那么占用10个CPU逻辑核心,两个任务并行运行且同时完成,用时仍为1个小时,CPU使用率为50%。

继续思考(重点内容):

如果这次是同时运行四个该任务,那么占用20个CPU逻辑核心,四个任务并行运行,CPU使用率为100%,总用时为4/2.6=1.53846小时。也就是说使用超线程技术扩展出逻辑核心其性能并不是真实物理核心的100%而是30%,因为该CPU共有10个物理核心,运行四个计算任务时需要使用10个真实物理核心和10个扩展多出的逻辑核心,而这多出的10个核心并不能按照真实核心来计算,因此正确计算时我们需要先按照真实物理核心数计算用时2个小时的用时,然后再除去逻辑核心扩展后的CPU性能1.3倍得出最终的运行用时。

正确的计算方法为:

不可分割的计算量(需要并行运行的计算量):4个任务,每个任务单独运行均需5个物理核心运行一个小时,因此这里需要并行的计算量为1+1+1+1=4,即4小时。

任意时刻上CPU可被使用的计算能力(一个任务运行时需要5个物理CPU核心,即5个物理核心的计算能力为1):1+1+0.3+0.3=2.6

因此,4个任务并行,使用10个物理核心外加10个扩展出的逻辑核心,总用时为4/2.6=1.53846小时。

可以看到,如果我们希望尽快的完成运算任务,那么在上述的CPU架构中最多可以运行两个计算任务,如果再多运行计算任务那么总的时长就会增加。这个问题是极为被忽略的,而造成这个问题的原因就是超线程扩展出的CPU核心并没有达到真实CPU核心的性能,而是只能达到30%。


扩展内容:

在上述的CPU架构和计算任务下,如果同时运行3个计算任务,那么用时多久?

3个计算任务如果同时并行需要15个物理核心,但是实际只有10个物理核心,因此并行运行3个计算任务需要使用10个物理核心和5个逻辑核心,因此按照之前给出的计算方法我们可以得到计算量为1+1+1=3,计算能力为1+1+0.3=2.3,因此总用时为:3/2.3=1.30434小时,此时的CPU使用率为75%。

PS:

操作系统在计算CPU使用率时是不会区分逻辑核心和物理核心的。

=============================

总结一下:

一个10物理核心,10扩展核心的CPU,运行一个需5物理核心并行的任务用时一小时,那么有:

并行运行1个计算任务:用时1小时,CPU使用率为25%

并行运行2个计算任务:用时1小时,CPU使用率为50%

并行运行3个计算任务:用时1.30434小时,CPU使用率为75%

并行运行4个计算任务:用时1.53846小时,CPU使用率为100%

同时有:

并行运行5个计算任务:用时5/2.6=1.92307小时,CPU使用率为100%

并行运行6个计算任务:用时6/2.6=2.30769小时,CPU使用率为100%

因此通过上面的分析,我们可以回答问题:CPU利用率为多少时可以兼顾效率和时间?

个人认为一个科学计算用处的CPU,最好的利用率在75%左右,这样可以使CPU有个比较高的利用率同时也可以尽可能保证每个任务可以在较短的时间内运行完成,同时由于当CPU利用率为100%时我们是难以区分此时的服务器是出于哪种情况,比如上面的4个任务并行,5个任务并行,6个任务并行,其CPU利用率均为100%(服务器CPU为多用户共享使用的),如果管理员不对CPU利用率做一定的要求,那么如果是5个任务并行的情况下会导致每个计算任务的用时都增加了1倍,也就是从1个小时增加到了1.92小时,虽然保证了CPU总的利用率但是却影响了用户的单独体验的感受,因此我个人给出的计算型CPU利用率最好为75%左右,如果是50%则明显存在利用率不足,75%以内的利用率可以保证每个计算任务都可以获得近似于独占服务器情况下的运行时间,而且如果CPU利用率高于75%甚至高于85%,那么也会极可能由于CPU的高负载导致的供电和发热问题使CPU运行频率降低(CPU降频),因此综合来考虑,保持计算型CPU利用率在75%左右是综合最优的一种设置。


CPU利用率为多少时可以兼顾计算效率和时间效率?—— 75% —— 科学计算时如何正确的使用超线程CPU——使用超线程CPU进行计算密集型任务时的注意事项的更多相关文章

  1. CPU利用率异常的分析思路和方法交流探讨

    CPU利用率异常的分析思路和方法交流探讨在生产运行当中,经常会遇到CPU利用率异常或者不符合预期的情况,此时,往往暗示着系统性能问题.那么究竟是核心应用的问题?是监控工具的问题?还是系统.硬件.网络层 ...

  2. python多进程提高cpu利用率

    cpu参数: 1个物理cpu,2个逻辑cpu(超线程),单核 具体 http://blog.csdn.net/dba_waterbin/article/details/8644626   物理CPU. ...

  3. cpu利用率和cpu 队列

    SIP的第四期结束了,因为控制策略的丰富,早先的的压力测试结果已经无法反映在高并发和高压力下SIP的运行状况,因此需要重新作压力测试.跟在测试人员后面做了快一周的压力测试,压力测试的报告也正式出炉,本 ...

  4. 查看进程,按内存从大到小 ,查看进程,按CPU利用率从大到小排序

    查看进程,按内存从大到小 ps -e -o "%C : %p : %z : %a"|sort -k5 -nr 查看进程,按CPU利用率从大到小排序 ps -e -o "% ...

  5. 使用Java编写一个简单的Web的监控系统cpu利用率,cpu温度,总内存大小

    原文:http://www.jb51.net/article/75002.htm 这篇文章主要介绍了使用Java编写一个简单的Web的监控系统的例子,并且将重要信息转为XML通过网页前端显示,非常之实 ...

  6. HighChartS cpu利用率动态图(Java版)

    来源:http://www.cnblogs.com/haifg/p/3217699.html   最近项目需要监控服务器cpu的利用率,并做成动态图.在网上查找了一些资料,最终选择了HighChart ...

  7. Linux如何统计进程的CPU利用率

    1.0 概述 在Linux的/proc文件系统,可以看到自启动时候开始,所有CPU消耗的时间片:对于个进程,也可以看到进程消耗的时间片.这是一个累计值,可以"非阻塞"的输出.获得一 ...

  8. 如何提高多线程程序的cpu利用率

    正如大家所知道的那样,多核多cpu越来越普遍了,而且编写多线程程序也是件很简单的事情.在Windows下面,调用CreateThread函数一次就能够以你想要的函数地址新建一个子线程运行.然后,事情确 ...

  9. Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算

    目录(?)[-] proc文件系统 proccpuinfo文件 procstat文件 procpidstat文件 procpidtasktidstat文件 系统中有关进程cpu使用率的常用命令 ps ...

  10. [进程管理]Load和CPU利用率是如何算出来的

    本文内容遵从CC版权协议, 可以随意转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址: http://www.penglixun.com/tech/system/how_to_ca ...

随机推荐

  1. 漏洞复现之CVE-2012-1823(PHP-CGI远程代码执行)

    关于CGI知识点 `CGI模式下的参数: -c 指定php.ini文件的位置 -n 不要加载php.ini文件 -d 指定配置项 -b 启动fastcgi进程 -s 显示文件源码 -T 执行指定次该文 ...

  2. vc++6.0设置字体

    vc++6.0设置字体 如上图, 在注册表上找到这个位置. 自已设置FontFace和FontSize即可. 计算机\HKEY_CURRENT_USER\Software\Microsoft\Devs ...

  3. 使用AWS Glue进行 ETL 工作

    数据湖 数据湖的产生是为了存储各种各样原始数据的大型仓库.这些数据根据需求,进行存取.处理.分析等.对于存储部分来说,开源版本常见的就是 hdfs.而各大云厂商也提供了各自的存储服务,如 Amazon ...

  4. Android 中的 perfboot工具

    背景 开机首先加载bootloader,由bootloader启动kernel,然后运行init程序,有init启动Zygote,Zygote进程启动SystemServ进程,在SystemServe ...

  5. 【资料分享】Xilinx Zynq-7010/7020工业核心板规格书(双核ARM Cortex-A9 + FPGA,主频766MHz)

    1 核心板简介 创龙科技SOM-TLZ7x是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC工业核心板,处理器集成PS端双核ARM Co ...

  6. 【Python】Pandas操作Excel

    一:Pandas操作Excel 1.1: 创建/读取excel文件 读取excel pd.read_excel(filepath) 读取指定标题行 pd.read_excel(filepath,hea ...

  7. GAIA: 一个严苛的智能体基准

    简要概括 经过一些实验,我们对 Transformers 智能体构建智能体系统的性能印象深刻,因此我们想看看它有多好!我们使用一个 用库构建的代码智能体 在 GAIA 基准上进行测试,这可以说是最困难 ...

  8. SqlServer内置函数和使用

    聚合函数 -> MAX(字段) -> MIN(字段) -> AVG(字段) •-> 在计算时,对于null的数据不计入总是 -> SUM(字段) -> COUNT( ...

  9. Sql Server 按日统计产量

    碰到一个这样的需求,需要查询每天的产量,直接 group 是可以分出不同天的产量,但是如果当天没有生产,就会少一条那一天的记录,而不是那一天显示产量为0,这样不方便前端显示曲线. 于是找到下面的办法, ...

  10. Using temporary与Using filesort

    Using temporary Using temporary表示由于排序没有走索引.使用union.子查询连接查询.使用某些视图等原因(详见https://dev.mysql.com/doc/ref ...