在 MATLAB 中显示 CPU 内核利用率

2023-11-22

无论如何(任何功能等)都要显示CPU cores utilization in MATLAB in a GUI喜欢我们的Task Manager窗口(性能选项卡)?

Thanks.


据我所知,没有任何 Matlab 函数可以在进程使用级别访问系统属性。要获取此信息,必须调用外部类。

在互联网上搜索可以找到一些Java可以查询流程属性的类。 Java 方法的优点是它更可能是跨平台的。

对于 Windows 用户,仍然有 2 种方式查询这些信息:直接调用 Windows API(速度更快,但在 Matlab 中实现起来相当复杂),以及使用.netobject(速度较慢,但​​非常简单,因为 Matlab 几乎无缝地处理 .net 类)。


  • 创建对象

我们需要告诉 Matlab 实例化一个系统.诊断.性能计数器目的。对于示例 /i 创建其中两个对象,其中一个查看系统空闲进程(称为Idle)和一个着眼于Matlab进程(该进程将报告 Matlab CPU 使用情况)。

function mon = createMonitor
   MatlabProcess = System.Diagnostics.Process.GetCurrentProcess(); % "Matlab" process
   cpuIdleProcess = 'Idle' ;
   mon.NumOfCPU = double(System.Environment.ProcessorCount);
   mon.ProcPerfCounter.Matlab  = System.Diagnostics.PerformanceCounter('Process', '% Processor Time', MatlabProcess.ProcessName );
   mon.ProcPerfCounter.cpuIdle = System.Diagnostics.PerformanceCounter('Process', '% Processor Time', cpuIdleProcess );
end

  • 查询对象

使用 Windows API,我们必须自己进行大量机器周期计算,但是这些 .net 对象很简洁,因为它们为您完成了所有这些工作(尽管以性能为代价)。所以现在只需调用该对象并询问最后一次 CPU 使用情况是多少......很简单。

唯一需要关心的细节是,报告的数量仅适用于进程正在使用的处理器核心,因此如果您有多个核心,则报告的数量必须除以处理器总数才能得到overall figure.

   % Calculate the cpu usage
   cpu.total = 100 - h.mon.ProcPerfCounter.cpuIdle.NextValue / h.mon.NumOfCPU ;
   cpu.matlab = h.mon.ProcPerfCounter.Matlab.NextValue / h.mon.NumOfCPU ;

  • 显示中

就这样吧。最困难的部分是了解并访问这些.net微妙之处。现在,如果您想要一个真正的监视器,您需要定义一个计时器,它将定期调用这些方法,然后显示结果。

请注意,调用这些.net对象在处理器时间上非常昂贵,因此如果创建太多PerformanceCounter您的显示器最终将占用大部分处理器时间(例如,每个进程一个显示器会非常费力)...并且也不要尝试以疯狂的短间隔刷新计时器


  • 功能齐全的示例:

抱歉,90% 的内容只是用于 GUI 机制(我尽可能保持粗糙,但仍然如此),所以我不会解释所有内容。唯一重要的部分是上面显示的片段(它们包含在下面的完整功能示例中)。

function hcol = CPU_monitor

h = create_gui ;

end

function mon = createMonitor
   MatlabProcess = System.Diagnostics.Process.GetCurrentProcess(); %// "Matlab" process
   cpuIdleProcess = 'Idle' ;
   mon.NumOfCPU = double(System.Environment.ProcessorCount);
   mon.ProcPerfCounter.Matlab  = System.Diagnostics.PerformanceCounter('Process', '% Processor Time', MatlabProcess.ProcessName );
   mon.ProcPerfCounter.cpuIdle = System.Diagnostics.PerformanceCounter('Process', '% Processor Time', cpuIdleProcess );
end

function updateMeasure(obj,evt,hfig)
   h = guidata(hfig) ;
   %// Calculate the cpu usage
   cpu.total = 100 - h.mon.ProcPerfCounter.cpuIdle.NextValue / h.mon.NumOfCPU ;
   cpu.matlab = h.mon.ProcPerfCounter.Matlab.NextValue / h.mon.NumOfCPU ;
   %// update the display
   set(h.txtTotalCPU,'String',num2str(cpu.total,'%5.2f %%') )
   set(h.txtMatlabCPU,'String',num2str(cpu.matlab,'%5.2f %%') )
end

function StartMonitor(obj,evt)
   h = guidata(obj) ;
   start(h.t)
end
function StopMonitor(obj,evt)
   h = guidata(obj) ;
   stop(h.t)
end

function h = create_gui %// The boring part

   h.fig = figure('Unit','Pixels','Position',[200 800 240 120],'MenuBar','none','Name','CPU usage %','NumberTitle','off') ;

   h.btnStart = uicontrol('Callback',@StartMonitor,'Position',[10 80 100 30],'String', 'START' );
   h.btnStart = uicontrol('Callback',@StopMonitor,'Position',[130 80 100 30 ],'String', 'STOP' );

   h.lbl1 = uicontrol('HorizontalAlignment','right','Position',[10 50 100 20],'String','TOTAL :','Style','text' );
   h.txtTotalCPU = uicontrol('Position',[130 50 100 20],'String','0','Style','text' ) ;

   h.lbl2 = uicontrol('HorizontalAlignment','right','Position',[10 10 100 20],'String','Matlab :','Style','text' );
   h.txtMatlabCPU = uicontrol('Position',[130 10 100 20],'String','0','Style','text' ) ;

   movegui(h.fig,'center')

   %// create the monitor
   h.mon = createMonitor ;

   %// Create the timer
   h.t = timer;
   h.t.Period = 1;
   h.t.ExecutionMode = 'fixedRate';
   h.t.TimerFcn = {@updateMeasure,h.fig} ;
   h.t.TasksToExecute = Inf;

   %// store the handle collection
   guidata(h.fig,h)

end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 MATLAB 中显示 CPU 内核利用率 的相关文章

  • 为什么在 CSS3 中启用硬件加速会降低性能?

    我在 css3 实验中将 10 000 个小 div 元素从浏览器视口的顶部移动到底部 对于此测试 我使用两种不同的方法 使用 GPU 加速translate3D x y z or translateZ 0 无需 GPU 加速 只需调整to
  • Android 7 GraphicBuffer 替代方案,用于直接访问 OpenGL 纹理内存

    从移动设备具有 CPU 和 GPU 共享内存这一事实中获利的唯一方法是使用GrphicBuffer 但由于 Android 7 限制对私有本机库 包括 gralloc 的访问 因此无法再使用它 问题 是否有其他方法可以直接内存访问纹理的像素
  • 使用网络计算机进行 Matlab 并行处理

    我熟悉matlabpool and parfor用法 但我仍然需要加快计算速度 我的 1GB 网络中有一台功能更强大的计算机 两台计算机都有 R2010b 并且具有相同的代码和路径 使用两台计算机进行并行计算的最简单方法是什么 我今天使用的
  • Mysql:多个表还是一张大表?

    这个问题已经被问过 但我还没有找到 1 个语音答案 最好这样做 1 张大桌子 其中 用户 ID 属性 1 属性 2 属性 3 属性 4 或 4 个小桌子 其中 用户 ID 属性 1 用户 ID 属性 2 用户 ID 属性 3 用户 ID 属
  • 如何提高Canvas渲染性能?

    我必须画很多Shape http msdn microsoft com en us library system windows shapes shape aspx 约 1 20 万 作为 Canvas 2 的子级 我在 WPF 应用程序中
  • MATLAB 问题中的 Parfor

    为什么我不能使用parfor在这段代码中 parfor i 1 r for j 1 N r xr j N r i 1 x i r j 1 end end 这是错误 错误 parfor 中的变量 xr 无法分类 请参阅 MATLAB 中的并行
  • C++,最佳实践,int 还是 size_t? [复制]

    这个问题在这里已经有答案了 可能的重复 何时使用 std size t https stackoverflow com questions 1951519 when to use stdsize t hello 假设使用模式相同 即没有负数
  • 您使用什么来通过其自定义协议来测试(功能/负载/压力)您的网络服务?

    我最近创建了一个回合制游戏服务器 可以接受数十万个并发客户端连接 长话短说 Linux 上的 epoll 通信基于简单 定制 基于线路的协议 该服务器允许客户端连接 寻找游戏比赛中的其他玩家 玩所述游戏 发送动作 聊天消息等 并在游戏结束时
  • 使用 Java-Large 文件查询 JSON 文件

    我正在尝试使用 java 解析下面的 JSON 文件 我需要能够 按 ID 或名称或对象中的任何字段搜索文件 也在字段中搜索空值 搜索应返回整个对象 该文件将会很大 并且搜索应该仍然很省时 id 1 name Mark Robb last
  • 使用正常数据直方图与直接公式进行熵估计(matlab)

    假设我们已经绘制了n 10000标准正态分布的样本 现在我想使用直方图计算其熵来计算概率 1 计算概率 例如使用matlab p x hist samples binnumbers area x 2 x 1 sum p p p area b
  • JTable过滤后正确的行号

    这是一个 try 块 用于过滤 table job 以查找与关键字匹配的行 但是 当表模型发生变化时 我很难获得正确的行索引 它始终选择第一行 即使过滤结果显示的行不是第一行 我知道你可以做一些事情fireTableDataChanged
  • MATLAB;具有 2+ 个/分割图例的饼图 R2017b

    我正在创建一个饼图 理想情况下希望图例水平显示在顶部和 或底部 然而 在几乎所有情况下 这是不可能的 因为图例超出了数字 因此 我理想情况下希望将图例分成两个 或更多 子图例并单独放置它们 我知道这不是 MATLAB 中的内置功能 我使用的
  • Matlab的uicontrol在Octave中的实现?

    我正在尝试在 Octave 中运行我们实验室中使用的图形程序的 m Matlab 代码 Octave 告诉我代码中使用的函数 uicontrol 没有定义 经过一番搜索 我发现 JHandles 包有一个 uicontrol GUI 功能的
  • 公共领域还好吗?

    在你像我最初那样做出直觉反应之前 请阅读整个问题 我知道它们让你感觉很脏 我知道我们以前都被烧伤过 我知道这不是 好风格 但是公共场所可以吗 我正在开发一个相当大规模的工程应用程序 该应用程序创建并使用结构的内存模型 从高层建筑到桥梁再到棚
  • 可以避免迭代元胞数组时的“s{1} 烦恼”吗?

    The s 1 标题的 烦恼 指的是下面的 for 块中的第一行 for s some cell array s s 1 unpeel the enclosing cell do stuff with s end This s s 1 业务
  • 如何调整x轴和y轴的大小

    如何调整 x 轴和 y 轴的大小 我想要什么 更具体 3900 60 30 0 60 120 180 3600 我做了什么 a 0 0 1 10000 plot a 我应该写什么才能按预期调整 x 和 y 轴的大小 EDIT 我不想 390
  • Java 反射性能

    使用反射创建对象而不是调用类构造函数是否会导致任何显着的性能差异 是的 一点没错 通过反射查找类是 按幅度 更贵 Quoting Java关于反射的文档 http java sun com docs books tutorial refle
  • 从 3 个向量创建等值线图

    我正在尝试根据这些数据创建等高线图 pH D Tur 5 10 3 79 18918919 5 50 6 92 97297297 5 00 0 50 09009009 5 00 6 90 36036036 5 10 9 91 0810810
  • 如何加快 Java VM (JVM) 的启动时间?

    我正在运行启动多个 JVM 进程的测试 与 JVM 内运行的实际测试时间相比 JVM 的总结启动时间非常重要 我怎样才能加快速度 我已经使用了 client 选项 这确实有帮助 但没有我想要的那么多 还有其他方法吗 比如预加载一堆 JVM
  • 在 R 中,为什么 sum 与其他方法(例如 cumsum)相比如此慢?

    我正在尝试实现一个需要非常快的函数 主要是因为它一遍又一遍地处理巨大的数据帧 R 总是让我感到困惑 为什么它有时有点慢 而有时又慢得离谱 不幸的是 它从来都不快 不管怎样 我一直认为 如果可能的话 当以某种方式推入 apply sapply

随机推荐

  • VBA:将文本转换为数字

    我有一列数字 无论出于何种原因 它们都被格式化为文本 这使我无法使用算术函数 例如小计函数 将这些 文本数字 转换为真实数字的最佳方法是什么 Here is a screenshot of the specific issue 我已经尝试过
  • 从加载Picasso的ImageView获取Bitmap

    我有一个加载图像的方法 如果图像之前尚未加载 它将在服务器上查找它 然后它将其存储在应用程序文件系统中 如果它位于文件系统中 则会加载该图像 因为这比从服务器提取图像要快得多 如果您之前加载过图像而没有关闭应用程序 它将存储在静态字典中 以
  • VC++ 中 invalidate、update 方法的作用是什么

    我对 C 中的窗口函数有一点疑问 到底是什么 invalidate 功能做什么 当我们需要调用它时 它会发送什么消息 还有什么是 update 功能 是 invalidaterect 作品类似于 invalidate 功能 Thanks C
  • 如何获取某个目录的父文件夹的路径?

    当我有这个目录路径时 C Program Files x86 Embarcadero 我正在寻找的函数应该返回 C Program Files x86 我已经尝试过这段代码 但它仅适用于文件 不适用于目录 function GetParen
  • 使用 Beautiful Soup 从“img”标签中提取“src”属性

    考虑 div class someClass a href href img alt some src some a div 我想提取来源 即src 来自图像的属性 即img 使用 Beautiful Soup 标签 我使用 Beautif
  • 如何使用 Python csv reader 循环遍历特定范围的行?

    如何使用 Python csv reader 循环遍历特定范围的行 以下代码循环遍历所有行 with open trainFile rt as csvfile spamreader csv reader csvfile delimiter
  • 使用 openpyxl 或 xl* 或 xlsxwriter 在工作簿中移动工作表?

    我已经阅读了文档 openpyxl xlwt xlrd xlutils XLSX作家 我找不到移动工作表的方法Excel工作簿 测试在末尾添加了一个工作表 具体来说 我有一个日历之类的 JAN FEB DEC 当需要时我需要更换几个月 如果
  • 限制非管理员用户的路由访问

    Goal 我正在尝试为我的登录用户创建管理路由限制 我尝试检查我的用户是否是log in 并且如果用户类型是Admin 如果是 我想允许他们访问管理路由 否则 响应 404 路线 php router gt group middleware
  • RGB888 至 RGB565 / 位移位

    我想使用位移位将三个字符组合成一个短片 这是为了实现 RGB565 调色板 其中 5 位用于红色 6 位用于绿色 5 位用于蓝色 这是我的示例程序 我只是缺少中间的一步 我认为我需要在哪里做一些操作 include
  • Stata有类似Java的try and catch机制吗?

    我正在写一个 do检查一些变量是否存在 dta文件以及检查这些变量的某些值是否存在 但是 我的代码在遇到无效的变量名称时停止执行 我知道我混合了 Java 和 Stata 编码 这是完全不合适的 但是有什么办法我可以做这样的事情 try s
  • Django csrf 请求上下文

    如果我包括 csrf token 在我的表单模板中并在我的视图中导入 RequestContext 我是否必须添加我认为的其他内容 或者是否会考虑 csrf 保护 如下所示 from django shortcuts import rend
  • 带子菜单的纯CSS垂直菜单

    我做了我的研究 并且能够复制我正在寻找的东西 嗯 我只需要一个更具体的垂直 纯 CSS 菜单的帮助 我希望我的子菜单弹出窗口显示在 a 左侧 10 像素处 而不是 a 左侧li属性就像互联网上找到的大多数示例一样 我也在寻找最简单 纯 CS
  • 双 * (splat) 运算符有什么作用

    你见过这样声明的函数吗 def foo a b end 我的理解是单 是 splat 运算符 什么是 mean Ruby 2 0 引入了关键字参数 并且 行为就像 但对于关键字参数 它返回带有键 值对的哈希 对于这段代码 def foo a
  • C# - 具有系统时间意识的 Windows 服务

    我正在考虑编写一个 Windows 服务 该服务将在用户指定的时间打开或关闭某些功能 使用我将提供的配置实用程序 基本上 用户会指定 PC 进入 仅工作 模式 阻止 Facebook 和其他分散注意力的网站 的特定时间 然后当这些时间到时
  • 在 C# 中使用 Linq 进行字符串替换

    public class Abbreviation public string ShortName get set public string LongName get set 我有一个缩写对象列表 如下所示 List abbreviati
  • 如何在 Objective-C 中旋转 UIButton 和 UILabel 的文本?

    如何旋转文本UIButton and UILabel 90度 180度 yourlabelname setTransform CGAffineTransformMakeRotation M PI 2 rotated image pervio
  • CSS:根据后备字体设置字体粗细

    我正在尝试根据选择的字体设置元素的字体粗细 例如 我可能正在尝试做这样的事情 h1 font family Arial Narrow Impact sans serif font weight 假设如果用户的系统上安装了 Arial Nar
  • 将 C99 代码转换为 C89

    如何将c99源代码自动转换为c89 我想用Visual C 编译c99库 但MSVC只支持c89 许多更改只是语法上的 例如结构初始值设定项 您可以编写一个工具来自动 de c99 代码 这个预处理器存在吗 基于 Clang 的源到源转换器
  • 如何使用 php 检查 $_GET['id'] 是否已设置且不为空

    这是一段php代码 if isset GET id do something else redirect index php redirect is a function 现在 如果设置了 id 例如 index php id 12 则执行
  • 在 MATLAB 中显示 CPU 内核利用率

    无论如何 任何功能等 都要显示CPU cores utilization in MATLAB in a GUI喜欢我们的Task Manager窗口 性能选项卡 Thanks 据我所知 没有任何 Matlab 函数可以在进程使用级别访问系统