You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Julia Graphs并行介数中心性函数仅单核心运行?

问题原因与解决方案

核心原因

  1. 并行实现依赖分布式进程而非多线程
    Graphs.jl的Graphs.Parallel.betweenness_centrality基于Distributed.jl的多进程架构实现并行,而非你通过--threads 50配置的多线程池。该函数不会使用线程资源,因此仅在主进程的单个核心运行。

  2. 未启动分布式工作进程
    默认情况下Julia仅启动1个主进程,若未显式添加工作进程,并行函数无法调度任务到其他核心。

  3. 版本或图类型的适配问题

  • 若使用的Graphs.jl版本较旧,可能对大尺寸UInt32顶点图的并行支持有限,或需要显式指定并行参数。
  • 部分自定义顶点类型(如UInt32)可能未被并行实现完全适配,导致回退单核心执行。

解决步骤

  1. 验证并行资源状态
    运行以下代码确认当前进程/线程数:
println("线程数: ", Threads.nthreads())
println("进程数: ", nprocs())

若nprocs()返回1,说明未启动分布式进程。

  1. 启动分布式工作进程
    两种方式任选其一:
  • 启动Julia时添加进程参数:
    Julia --procs 50 --threads 50
    
  • 在代码开头动态添加进程(需确保所有进程加载Graphs包):
    using Distributed
    addprocs(50)
    @everywhere using Graphs
    import Graphs.Parallel
    
  1. 验证并行执行
    重新运行Parallel.betweenness_centrality(g),观察CPU核心使用率是否提升。若仍有问题,可尝试将图转换为默认Int类型顶点后测试:
g_int = Graphs.DiGraph(Graphs.SimpleDiGraph{Int}(g))
betweenness_p = Parallel.betweenness_centrality(g_int)

内容的提问来源于stack exchange,提问作者user

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 01:11:12