Linux系统下如何限制Matlab占用的CPU核心数量
完全可以实现核心数限制,以下是3种经过实测可用的方法,可根据使用场景选择:
方法1:启动时通过系统命令临时限制(灵活性最高)
不需要修改Matlab任何配置,启动时直接用Linux自带的taskset命令绑定CPU核心即可。例如要限定Matlab使用前10个物理核心(核心编号从0开始计数),终端直接执行启动命令:taskset -c 0-9 matlab补充说明:
-c参数支持传入非连续核心编号,比如0-4,10-14就是指定0到4、10到14共10个核心,可根据自己的CPU核心负载情况灵活选择。
如果Matlab已经启动才需要限制,不用关闭进程,先执行pidof matlab查到Matlab的进程PID,再执行sudo taskset -cp 0-9 替换为查询到的PID即可实时生效。方法2:Matlab内部配置线程数(仅限制计算负载)
如果只需要限制仿真、数值计算类任务的CPU占用,不限制Matlab本身的界面、IO类进程调度,可以直接在Matlab命令行执行配置命令:maxNumCompThreads(10)这个配置仅对当前Matlab会话生效,重启后会恢复默认。如果需要永久生效,把这行命令写到Matlab启动目录下的
startup.m文件中,每次启动会自动执行配置。注意:如果使用Parallel Computing Toolbox开启并行池,还需要额外把并行池的worker数量设置为10,否则并行池会默认按全核心数拉起worker,依旧会占满CPU。
方法3:cgroups固定资源配额(适合长期固定规则)
如果需要每次启动Matlab都自动应用10核限制,不需要手动加启动参数,可以通过Linux的cgroups功能配置永久规则:创建专属的Matlab控制组,设置CPU配额为总算力的50%(20核CPU对应10核算力),再配置进程匹配规则把所有Matlab相关进程自动划入该控制组即可,配置完成后所有启动的Matlab进程都不会超出资源限制。
内容的提问来源于stack exchange,提问作者iamsumesh

