R语言parallel包核心初始化问题及Windows并行核心数查询
getOption("cl.cores", 2) 作用说明 这行代码是R中读取全局配置的标准写法,运行逻辑非常明确:
- 优先读取R全局选项中
cl.cores的配置值:如果用户提前通过options(cl.cores = X)设置过要使用的并行核心数,就直接用这个值传入makeCluster - 如果没有提前设置过这个选项,就使用第二个参数传入的默认值
2,也就是默认启动2核的集群
这种写法是R包开发的通用惯例:优先尊重用户的自定义配置,没有自定义配置时就用兼容性最好的保守默认值,不会因为参数缺失直接抛出错误。
Windows系统查询并行计算可用CPU核心数的方法
R代码内直接查询(推荐写脚本时使用)
直接调用parallel包内置的detectCores()函数即可,不需要额外安装包,会自动适配Windows系统返回核心数信息:
library(parallel) # 查询物理核心数(计算密集型并行任务推荐使用这个值) physical_cores <- detectCores(logical = FALSE) # 查询包含超线程的逻辑核心总数(IO密集型并行任务可参考) logical_cores <- detectCores(logical = TRUE)
参数说明:
logical = FALSE:返回物理CPU核心数,绝大多数数值计算、模拟类的并行任务用这个值最合适,超线程带来的额外逻辑核对计算密集型任务加速效果很差,甚至会因为线程竞争拖慢整体速度logical = TRUE:默认参数,返回系统识别到的逻辑处理器总数,适合网络请求、文件读写这类IO密集型的并行场景
系统层面手动查询
如果不需要在代码里获取,只是想手动确认核心数,可以用两种方法:
- 打开任务管理器,切换到「性能」标签选中CPU项,面板上会直接标注当前CPU的物理核心数、逻辑处理器数
- 按下Win+R输入
cmd打开命令提示符,执行命令wmic cpu get NumberOfCores,NumberOfLogicalProcessors,回车后会直接输出所有CPU的物理核心数、逻辑核心数统计值
初始化集群的实用优化写法
原示例里默认用2核比较保守,实际自己用的时候可以根据机器配置调整,建议留1核给系统跑后台进程,避免并行任务跑起来之后系统完全卡死:
library(parallel) # 物理核心数减1,最少保留1核 use_cores <- max(1, detectCores(logical = FALSE) - 1) cl <- makeCluster(use_cores)
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

