performance - 导入不相关的包后 Julia 性能下降

标签 performance julia data-science

我的性能受到了 deepcopy 的影响一旦我导入一个不相关的包,CSV .我怎样才能解决这个问题?

import BenchmarkTools
mutable struct GameState
    gameScore::Vector{Int64}
    setScore::Vector{Int64}
    matchScore::Vector{Int64}
    serve::Int64
end
BenchmarkTools.@benchmark deepcopy(GameState([0,0],[0,0],[0,0],-1))

BenchmarkTools.Trial: 
  memory estimate:  1.02 KiB
  allocs estimate:  10
  --------------
  minimum time:     1.585 μs (0.00% GC)
  median time:      1.678 μs (0.00% GC)
  mean time:        2.519 μs (27.10% GC)
  maximum time:     5.206 ms (99.88% GC)
  --------------
  samples:          10000
  evals/sample:     10

import CSV

BenchmarkTools.@benchmark deepcopy(GameState([0,0],[0,0],[0,0],-1))

BenchmarkTools.Trial: 
  memory estimate:  1.02 KiB
  allocs estimate:  10
  --------------
  minimum time:     6.709 μs (0.00% GC)
  median time:      7.264 μs (0.00% GC)
  mean time:        9.122 μs (18.00% GC)
  maximum time:     13.289 ms (99.87% GC)
  --------------
  samples:          10000
  evals/sample:     5

更新:建议解决方案的代码
import Base:deepcopy
function deepcopy(x::GameState)
    return GameState([x.gameScore[1], x.gameScore[2]], [x.setScore[1], x.setScore[2]], [x.matchScore[1], x.matchScore[2]],x.serve)
end

BenchmarkTools.@benchmark deepcopy(GameState([0,0],[0,0],[0,0],-1))
BenchmarkTools.Trial: 
  memory estimate:  672 bytes
  allocs estimate:  8
  --------------
  minimum time:     184.436 ns (0.00% GC)
  median time:      199.305 ns (0.00% GC)
  mean time:        256.366 ns (21.29% GC)
  maximum time:     102.345 μs (99.52% GC)
  --------------
  samples:          10000
  evals/sample:     656

最佳答案

至少有两种可能:

  • 您的代码中的某些内容需要运行时调度。导入 CSV 会添加新方法,从而使您的一个或多个关键功能的方法表更长。由于运行时分派(dispatch)有更多的评估可能性,它使它变慢。 解决方案 : 确保你的代码是 "type stable" (inferrable)只要有可能,Julia 就不需要执行运行时调度。见Performance tips page开始。
  • CSV 中的某些内容正在执行 type-piracy ,它的实现正在减慢你的速度。

  • 我会把赌注押在前者上。使用ProfileView.jl以图形方式轻松检测运行时调度。如果您在配置 rungame 时看到顶部有很多红条,那么你就知道你找到了问题的根源。除了与 CSV 的交互之外,消除这些红条可能会给您带来巨大的性能改进。

    关于performance - 导入不相关的包后 Julia 性能下降,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54789050/

    相关文章:

    Julia spawn 'source' 导致没有这样的文件或目录

    python - 用于逻辑回归的 Shapley?

    java - 从 Java 调用时 powershell/powerCLI 性能缓慢

    mysql 日期时间性能

    julia - 在Julia中生成加权有向网络形式邻接矩阵

    arrays - 创建 1x1 Julia 数组

    machine-learning - 如何确定 RMSLE 的准确性?

    python - 更快地读取 CSV 文件

    JavaScript 性能 – 删除伪 DOM 项

    JavaScript 枚举对象 - 使用字符串或数字更快?