前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Matlab实现采集电脑的CPU等硬件信息

Matlab实现采集电脑的CPU等硬件信息

作者头像
用户9925864
发布于 2024-02-22 08:04:56
发布于 2024-02-22 08:04:56
32000
代码可运行
举报
运行总次数:0
代码可运行

话不多说,直接上代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function info = cpuinfo()
% CPU数据采集
%
%   信息= CPUINFO()返回一个包含不同的结构
%  中央处理器和操作系统信息由/proc/cpu提供
%   (Unix)sysctl(Mac)WMIC(Windows)%     * CPU name
%     *CPU的时钟频率
%     * CPU缓存大小 (L2)
%     *物理CPU核心
%     * 操作系统的名称和版本
%
%   参见:计算机、ISUNIX ISMAC


if isunix % 判断matlab的版本 UNIX 
    if ismac % 判断matlab的版本 Mac
        info = cpuInfoMac();
    else
        info = cpuInfoUnix();
    end
else
    info = cpuInfoWindows(); 
end


%-------------------------------------------------------------------------%
function info = cpuInfoWindows()
sysInfo = callWMIC( 'cpu' );
osInfo = callWMIC( 'os' );

info = struct( ...
    'Name', sysInfo.Name, ...
    'Clock', [sysInfo.MaxClockSpeed,' MHz'], ...
    'Cache', [sysInfo.L2CacheSize,' KB'], ...
    'NumProcessors', str2double( sysInfo.NumberOfCores ), ...
    'OSType', 'Windows', ...
    'OSVersion', osInfo.Caption ); %输出的字符串结构

%---------------------111111----------------------------------------------------%
function info = callWMIC( alias )
% 呼叫ms - dos WMIC(Windows管理)命令
olddir = pwd();  %显示当前文件夹
cd( tempdir );  % 计算机目录
sysinfo = evalc( sprintf( '!wmic %s get /value', alias ) ); %得到计算机的参数
cd( olddir );
fields = textscan( sysinfo, '%s', 'Delimiter', '\n' ); fields = fields{1};%生成cell 数据处理
fields( cellfun( 'isempty', fields ) ) = [];
% 每一行有“字段=值”,所以分开
values = cell( size( fields ) );
for ff=1:numel( fields )
    idx = find( fields{ff}=='=', 1, 'first' ); %找到一个first字符串
    if ~isempty( idx ) && idx>1
        values{ff} = strtrim( fields{ff}(idx+1:end) ); %字符串分割
        fields{ff} = strtrim( fields{ff}(1:idx-1) );
    end
end

% 删除任何重复(仅适用于双插槽电脑,我们将假设所有插座有相同的处理器)。
numResults = sum( strcmpi( fields, fields{1} ) );
if numResults>1
    % 计算核数
    numCoresEntries = find( strcmpi( fields, 'NumberOfCores' ) );
    if ~isempty( numCoresEntries )
        cores = cellfun( @str2double, values(numCoresEntries) );
        values(numCoresEntries) = {num2str( sum( cores ) )};
    end
    % 去掉重复结果
    [fields,idx] = unique(fields,'first');
    values = values(idx);
end

% 数据转换
info = cell2struct( values, fields );

%-------------------22222222------------------------------------------------------%
function info = cpuInfoMac()  %Mac和window类似
machdep = callSysCtl( 'machdep.cpu' );
hw = callSysCtl( 'hw' );
info = struct( ...
    'Name', machdep.brand_string, ...
    'Clock', [num2str(str2double(hw.cpufrequency_max)/1e6),' MHz'], ...
    'Cache', [machdep.cache.size,' KB'], ...
    'NumProcessors', str2double( machdep.core_count ), ...
    'OSType', 'Mac OS/X', ...
    'OSVersion', getOSXVersion() );

%-------------------------------------------------------------------------%
function info = callSysCtl( namespace )
infostr = evalc( sprintf( '!sysctl -a %s', namespace ) );
% Remove the prefix
infostr = strrep( infostr, [namespace,'.'], '' ); %字符串
% Now break into a structure
infostr = textscan( infostr, '%s', 'delimiter', '\n' );
infostr = infostr{1};
info = struct();
for ii=1:numel( infostr )
    colonIdx = find( infostr{ii}==':', 1, 'first' );
    if isempty( colonIdx ) || colonIdx==1 || colonIdx==length(infostr{ii})
        continue
    end
    prefix = infostr{ii}(1:colonIdx-1);
    value = strtrim(infostr{ii}(colonIdx+1:end));
    while ismember( '.', prefix )
        dotIndex = find( prefix=='.', 1, 'last' );
        suffix = prefix(dotIndex+1:end);
        prefix = prefix(1:dotIndex-1);
        value = struct( suffix, value );
    end
    info.(prefix) = value;
    
end

%-------------------3333333333------------------------------------------------------%
function vernum = getOSXVersion()%版本号
% 提取系统软件版本的操作系统版本号输出
ver = evalc('system(''sw_vers'')');%版本 执行matlab字符串 软件版本信息
vernum = regexp(ver, 'ProductVersion:\s([1234567890.]*)', 'tokens', 'once');%对字符串进行查找替换
vernum = strtrim(vernum{1});

%-------------------------------------------------------------------------%
function info = cpuInfoUnix()
txt = readCPUInfo();
cpuinfo = parseCPUInfoText( txt );

txt = readOSInfo();
osinfo = parseOSInfoText( txt );

% Merge the structures
info = cell2struct( [struct2cell( cpuinfo );struct2cell( osinfo )], ...
    [fieldnames( cpuinfo );fieldnames( osinfo )] );

%-------------------------------------------------------------------------%
function info = parseCPUInfoText( txt )
% Now parse the fields
lookup = {
    'model name', 'Name'
    'cpu Mhz', 'Clock'
    'cpu cores', 'NumProcessors'
    'cache size', 'Cache'
    };
info = struct( ...
    'Name', {''}, ...
    'Clock', {''}, ...
    'Cache', {''} );
for ii=1:numel( txt )
    if isempty( txt{ii} )
        continue;
    end
    % Look for the colon that separates the property name from the value
    colon = find( txt{ii}==':', 1, 'first' );
    if isempty( colon ) || colon==1 || colon==length( txt{ii} )
        continue;
    end
    fieldName = strtrim( txt{ii}(1:colon-1) );
    fieldValue = strtrim( txt{ii}(colon+1:end) );
    if isempty( fieldName ) || isempty( fieldValue )
        continue;
    end
    
    % Is it one of the fields we're interested in?
    idx = find( strcmpi( lookup(:,1), fieldName ) );
    if ~isempty( idx )
        newName = lookup{idx,2};
        info.(newName) = fieldValue;
    end
end

% Convert clock speed
info.Clock = [info.Clock, ' MHz'];

% Convert num cores
info.NumProcessors = str2double( info.NumProcessors );

%-----------------444444--------------------------------------------------------%
function info = parseOSInfoText( txt )
info = struct( ...
    'OSType', 'Linux', ...
    'OSVersion', '' );
% find the string "linux version" then look for the bit in brackets
[~,b] = regexp( txt, '[^\(]*\(([^\)]*)\).*', 'match', 'tokens', 'once' );
info.OSVersion = b{1}{1};

%-------------------------------------------------------------------------%
function txt = readCPUInfo()

fid = fopen( '/proc/cpuinfo', 'rt' );
if fid<0
    error( 'cpuinfo:BadPROCCPUInfo', 'Could not open /proc/cpuinfo for reading' );
end
onCleanup( @() fclose( fid ) );

txt = textscan( fid, '%s', 'Delimiter', '\n' );
txt = txt{1};

%-------------------------------------------------------------------------%
function txt = readOSInfo()

fid = fopen( '/proc/version', 'rt' );
if fid<0
    error( 'cpuinfo:BadProcVersion', 'Could not open /proc/version for reading' );
end
onCleanup( @() fclose( fid ) );
txt = textscan( fid, '%s', 'Delimiter', '\n' );
txt = txt{1};

输出结果如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
>> info = cpuinfo()

info = 

  包含以下字段的 struct:

             Name: '12th Gen Intel(R) Core(TM) i5-12500H'
            Clock: '2500 MHz'
            Cache: '9216 KB'
    NumProcessors: 12
           OSType: 'Windows'
        OSVersion: 'Microsoft Windows 11 家庭中文版'
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
在线matlab代码学习神器Octave Online
Octave与MATLAB完全兼容,免安装使用方便。注册和非注册功能会有不同,如下:
zhangrelay
2019/01/23
6.8K0
MATLAB优化函数fmincon解析[通俗易懂]
[x,fval,exitflag,output,lambda,grad,hessian]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
全栈程序员站长
2022/07/02
2.1K0
MATLAB优化函数fmincon解析[通俗易懂]
python 获取Linux和Windows硬件信息
接下来讨论一下关于 python-hwinfo, 它是一个展示硬件信息概况的工具之一,并且其配置简洁
py3study
2020/01/07
6.3K0
linux下10条查看系统和硬件信息的命
如果只想知道系统的名称,可以使用uname命令,而无需打印系统的相关的信息.或者使用uname -s命令将打印系统的内核名称.
小柒吃地瓜
2020/04/22
3.1K0
matlab 查看函数,如何查看MATLAB函数的源代码 | 学步园「建议收藏」
大家都知道MATLAB是开源的,所有的函数源代码都是可以查看的。但是,对于初学者来说,可能还不知道如何查看MATLAB函数的源代码。
全栈程序员站长
2022/09/30
3.7K0
matlab
对于一些nc数据或者遥感影像处理时,虽然一些第三方软件可以出图,但我们往往需要借助python或者matlab软件进行数据处理,但最后保存下来数据如何导入arcgis进行分析呢?
用户6841540
2024/08/05
3900
centOS7下实践查询版本/CPU/内存/硬盘容量等硬件信息
cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c
全栈程序员站长
2022/09/13
3.8K0
用于将图像转换为较小的块以执行图像处理任务的函数。
fig2texPS.m function fig2texPS(varargin) EPS=1e-10; s = warning('query', 'all'); % save warnings warning('off','all'); % disable all warnings % clc % clear screen %% % INITIALIZATION % create new struct 'globals' that contains all plot settings with th
裴来凡
2022/05/28
7K0
用于将图像转换为较小的块以执行图像处理任务的函数。
9个Linux 常用查看系统硬件信息命令(实例详解)
在Linux下,我们经常需要查看系统的硬件信息, 这里我罗列了查看系统硬件信息的实用命令,并做了分类,实例解说。
网络工程师笔记
2021/05/17
5.2K0
9个Linux 常用查看系统硬件信息命令(实例详解)
CPU C-state & cpuidle driver[通俗易懂]
为了在CPU空闲时节约能源,可以命令CPU进入低功耗模式。C-state是intel CPU处于空闲时的一种状态,CPU有几种电源模式,它们统称为“c状态”或“c模式”
全栈程序员站长
2022/11/17
6.2K0
测试现代化硬件C++浮点数性能和一致性
很久很久以前,浮点数的性能和跨平台跨硬件架构一致性是无法获得保证的,所以我们一般在需要强一致性和高性能的游戏服务器中会禁用浮点数,转而使用自己实现的定点数。 这么多年过去了,前段时间想看看现代化硬件下是否仍然有性能问题和是否能够保证一致性,做了些简单的测试,这里记录一下。
owent
2023/03/06
9130
基于nsga2的多目标柔性车间调度问题matlab[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/144856.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/26
6750
利用Matlab对经典鸢尾花数据集实现决策树算法分类,并绘图
最近在学习数据挖掘,其实决策树分类看过去好久了,但是最近慢慢的想都实现一下,加深一下理解。 知道决策树有很多现成的算法(ID3,C4.5、CART),但是毕竟核心思想就是那几点,所以本篇博客就是我随便实现的,没有参考现有的决策树算法。考虑到实现分类起码需要一个数据集,所以我选择了经典的鸢尾花数据集,下载地址:Iris
全栈程序员站长
2022/07/23
2.6K1
利用Matlab对经典鸢尾花数据集实现决策树算法分类,并绘图
Linux驱动开发: 使用usbmon抓取usb 总线上通信的数据
usbmon 即 usb monitor,是 linux 内置的 usb 抓包工具。
DS小龙哥
2022/01/17
8.5K0
Linux驱动开发:  使用usbmon抓取usb 总线上通信的数据
matlab命令,应该很全了!「建议收藏」
1、!dir 可以查看当前工作目录的文件。 !dir& 可以在dos状态下查看。
全栈程序员站长
2022/11/10
7.2K0
Linux 性能优化之CPU 多级缓存认知
99%的焦虑都来自于虚度时间和没有好好做事,所以唯一的解决办法就是行动起来,认真做完事情,战胜焦虑,战胜那些心里空荡荡的时刻,而不是选择逃避。不要站在原地想象困难,行动永远是改变现状的最佳方式
山河已无恙
2024/09/30
6390
Linux 性能优化之CPU 多级缓存认知
蓝队的反制(2)
 还有几天,某大型全国性交友活动就要开始了,特此为蓝队的朋友们献上一篇简单的反制文章。
鸿鹄实验室
2021/04/01
9020
蓝队的反制(2)
Linux进程调度器的设计--Linux进程的管理与调度(十七)
调度器面对的情形就是这样, 其任务是在程序之间共享CPU时间, 创造并行执行的错觉, 该任务分为两个不同的部分, 其中一个涉及调度策略, 另外一个涉及上下文切换.
233333
2018/12/04
3.7K0
Linux进程调度器的设计--Linux进程的管理与调度(十七)
基于深度学习的车辆检测系统(MATLAB代码,含GUI界面)
摘要:当前深度学习在目标检测领域的影响日益显著,本文主要基于深度学习的目标检测算法实现车辆检测,为大家介绍如何利用 M A T L A B \color{#4285f4}{M}\color{#ea4335}{A}\color{#fbbc05}{T}\color{#4285f4}{L}\color{#34a853}{A}\color{#ea4335}{B} MATLAB设计一个车辆检测系统的软件,通过自行搭建YOLO网络并利用自定义的数据集进行训练、验证模型,最终实现系统可选取图片或视频进行检测、标注,以及结果的实时显示和保存。其中,GUI界面利用最新的MATLAB APP设计工具开发设计完成,算法部分选择时下实用的YOLO v2/v3网络,通过BDD100K数据集进行训练、测试检测器效果。本文提供项目所有涉及到的程序代码、数据集等文件,完整资源文件请转至文末的下载链接,本博文目录如下:
全栈程序员站长
2022/11/03
1.1K0
基于深度学习的车辆检测系统(MATLAB代码,含GUI界面)
Linux启动时间优化-内核和用户空间启动优化实践
从内核timestamp 0.000000作为内核启动起点,到free_initmem()输出"Freeing init memory"作为内核启动的终点。
233333
2023/07/09
1.1K0
Linux启动时间优化-内核和用户空间启动优化实践
推荐阅读
相关推荐
在线matlab代码学习神器Octave Online
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验