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. 图形库使用 Direct3d

    1 里面的数学 矩阵是三角函数组合出来的 旋转的时候 xy 两个变量距离变 第三轴被影响角度 2视锥 远近四棱锥双剪切平面 3 三维点 A点 B点 C点 确定三位坐标 ,初始坐标是坐标中中心值 x,y ...

  2. C# .NET HttpWebRequest 按每个(单个)请求跳过证书校验

    C# .NET HttpWebRequest 按每个(单个)请求跳过证书校验 自签名证书 HTTPS TLS . 使用.NET 4.5 新加的属性 HttpWebRequest.ServerCerti ...

  3. 开源一款功能强大的 .NET 消息队列通讯模型框架 Maomi.MQ

    目录 文档说明 导读 快速开始 消息发布者 IMessagePublisher 连接池 消息过期 事务 发送方确认模式 独占模式 消费者 消费者模式 事件模式 分组 消费者模式 消费.重试和补偿 消费 ...

  4. mybatis执行insert语句后,返回当前插入数据主键的方法 keyProperty区分大小写

    mybatis执行insert语句后,返回当前插入数据主键的方法 keyProperty区分大小写 #这样查询没有返回主键值 <insert id="addLog" useG ...

  5. C++之printf函数

    背景 C++中可以使用cout来输出. 但是cout输出一些格式化的数据非常麻烦. 比如: hour,min和sec代表当前时间,需求:按12:00:00格式输出当前时间. //使用cout输出 co ...

  6. detect.py - yolov5master nvidia jetson agx xavier for mask with UART

    import argparse import time from pathlib import Path import cv2 import torch import torch.backends.c ...

  7. 手机护眼概论及OLED屏幕降低频闪原理介绍

    影响护眼的因素 蓝光 目前手机大多已经实现硬件低蓝光,而且蓝光也可以通过护眼模式轻易克服. 偏振光 偏振光指振动方向与传播方向不对称的光,主要分为圆偏振光与线偏振光两种. 线偏振光测试方法为:透过偏振 ...

  8. WEB前端项目开发流程

    项目需求分析 这个环节是由项目经理完成,项目经理首先和客户进行交流,了解客户的需求,然后分析项目的可行性,如果项目可以被实现,项目经理写出项目需求文档交给设计师完成后续的开发. 页面设计 这个环节主要 ...

  9. 基于EF Core存储的国际化服务

    前言 .NET 官方有一个用来管理国际化资源的扩展包Microsoft.Extensions.Localization,ASP.NET Core也用这个来实现国际化功能.但是这个包的翻译数据是使用re ...

  10. windows内置账户

    参考文献: http://www.cnblogs.com/xianspace/archive/2009/04/05/1429835.html 转载自: https://www.cnblogs.com/ ...