Julia JIT 编译、@time 和分配数量

2024-02-16

我刚刚开始评估 Julia(版本 0.6.0),并且测试了如何调整大小!和尺寸提示!可能会影响性能。我使用@time宏。

文档说“#运行一次进行 JIT 编译”,但如果我们检查分配数量,运行一次似乎还不够。

module Test

function test(x::Int64; hint::Bool=false, resize::Bool=false)
    A::Array{Int64} = []
    n::Int64 = x
    if resize
        resize!(A, n)
        for i in 1:n
            A[i]=i
        end
    else
        if hint sizehint!(A, n) end
        for i in 1:n
            push!(A, i)
        end
    end
    A[end]
end

end

import Test

#Test.test(1);  # (1)
#Test.test(1, hint=true);  # (2)
#Test.test(1, resize=true);  # (3)
@time Test.test(10_000_000)
@time Test.test(10_000_000, hint=true)
@time Test.test(10_000_000, resize=true)

对于不同的“JIT 预编译”调用,我得到了不同的结果:

上面代码的结果:

    0.494120 seconds (11.02 k allocations: 129.706 MiB, 22.77% gc time)
    0.141155 seconds (3.43 k allocations: 76.537 MiB, 41.94% gc time)
    0.068319 seconds (9 allocations: 76.294 MiB, 76.99% gc time)

如果 (1) 未注释:

    0.520939 seconds (112 allocations: 129.007 MiB, 21.79% gc time)
    0.140845 seconds (3.43 k allocations: 76.537 MiB, 42.35% gc time)
    0.068741 seconds (9 allocations: 76.294 MiB, 77.55% gc time)

如果 (1) && (2) 未注释:

    0.586479 seconds (112 allocations: 129.007 MiB, 19.28% gc time)
    0.117521 seconds (9 allocations: 76.294 MiB, 50.56% gc time)
    0.068275 seconds (9 allocations: 76.294 MiB, 76.84% gc time)

如果 (1) && (2) && (3) 未注释:

    0.509668 seconds (112 allocations: 129.007 MiB, 21.61% gc time)
    0.112276 seconds (9 allocations: 76.294 MiB, 50.58% gc time)
    0.065123 seconds (9 allocations: 76.294 MiB, 76.34% gc time)

如果 (3) 未注释:

    0.497802 seconds (240 allocations: 129.016 MiB, 22.53% gc time)
    0.117035 seconds (11 allocations: 76.294 MiB, 52.56% gc time)
    0.067170 seconds (11 allocations: 76.294 MiB, 76.93% gc time)

我的问题:

  1. 这是错误吗?
  2. 如果不是 bug 那么是否有可能调用完整的编译?

不,医生here https://docs.julialang.org/en/latest/manual/performance-tips/#Measure-performance-with-%5B@time%5D(@ref)-and-pay-attention-to-memory-allocation-1清楚地表明这是因为你正在跑步@time在全球范围内:

julia> function foo()
          Test.test(1)  # warm-up
          @time Test.test(10_000_000)
          @time Test.test(10_000_000, hint=true)
          @time Test.test(10_000_000, resize=true)
       end
foo (generic function with 1 method)

julia> foo()
  0.401256 seconds (26 allocations: 129.001 MiB, 47.38% gc time)
  0.185094 seconds (6 allocations: 76.294 MiB, 37.13% gc time)
  0.034649 seconds (6 allocations: 76.294 MiB, 30.99% gc time)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Julia JIT 编译、@time 和分配数量 的相关文章

  • 为什么我的 Julia 代码运行速度比 JavaScript 慢?

    最近 我对 Julia lang 很感兴趣 因为它声称是一种具有接近 C 性能的动态语言 然而 到目前为止我的经验并不好 至少在性能方面 我正在编写的应用程序需要随机访问特定的数组索引 然后将它们的值与其他特定的数组索引进行比较 经过多次迭
  • Julia 转置 DataFrame 中的分组数据?

    ds Dataset group repeat 1 3 inner 2 b repeat 1 2 inner 3 c repeat 1 1 inner 6 d repeat 1 6 inner 1 e string a f 在inmemor
  • 处理 Julia 中 kwargs 的类型

    我该如何使用kwargs在 Julia 函数中并声明其类型以提高速度 function f x Float64 kwargs kwargs Dict kwargs if haskey kwargs c c Float64 kwargs c
  • julia变量的范围:在开放表达式的循环内重新分配

    我正在努力在 Julia 的循环中重新分配变量 我有一个以下的例子 infile test txt feature for ln in 1 3 println feature feature end open infile do f if
  • 朱莉娅中的矢量化“in”函数?

    我经常想要循环遍历数据帧的长数组或列 并且对于每个项目 查看它是否是另一个数组的成员 而不是做 giant list a c j good letters a b isin falses size giant list 1 for i 1
  • 如何在命令行中执行 Julia 代码?

    我最近在 Julia 中转移了我的代码 我想知道如何在命令行中执行 Julia 代码 我知道 Julia 代码可以通过运行一次来 编译 但问题是我需要对集 群上的模拟模型进行参数扫描 我只能使用命令行 而不能使用 REPL 在集群上运行模拟
  • 如何加快 Julia 脚本的启动时间

    我编写了一个脚本来在 Julia 中绘制每日数据 但我发现它运行缓慢 似乎没有理想的方法来加速它 例如 foo jl bin bash exec julia O0 compile min BASH SOURCE 0 using Unicod
  • Julia DataFrames 中的高效自定义排序?

    有没有一种快速的方法来指定自定义订单sort sort 在 Julia 数据框架上 julia gt using DataFrames julia gt srand 1 julia gt df DataFrame x rand 10 y r
  • 如何创建并推送到共享或分布式数组数组?

    我编写了 Julia 代码 其中初始化一个空数组 如下所示 a 稍后在代码中 我简单地推送到该数组 如下所示 推 a b 其中 b c d e 是另一个数组 每个 b 可以具有不同的长度 这在非并行化代码中工作得很好 但是 我想在并行代码中
  • 有没有办法在 writetable() 中使用字符串作为分隔符 - Julia

    当使用 writetable 将数据帧写入文件时 我希望能够将分隔符设为空格然后逗号 即 作为分隔符 我知道 writetable 只能选择将单个字符作为分隔符参数 是否有可能的解决方法能够将字符串作为分隔符 或者 是否可以简单地在数据框中
  • 朱莉娅中未显示情节

    我有一个名为 mycode jl 的文件 其中包含以下代码here https juliastats org MultivariateStats jl dev pca using MultivariateStats RDatasets Pl
  • Julia:如何让多个工作人员访问模块中的函数?

    我有以下测试模块 MyMod jl 来在 Julia 中存储一些测试函数 一些核心函数是串行编写的 其他函数并行调用核心函数 module MyMod export Dummy distribute data getfrom recombi
  • 具有单变量优化的 NLopt

    任何人都知道 NLopt 是否适用于单变量优化 尝试运行以下代码 using NLopt function myfunc x grad x 2 end opt Opt LD MMA 1 min objective opt myfunc mi
  • 如何在 Julia 中创建一个数组?

    在许多机器学习用例中 您需要创建一个充满 1 且具有特定维度的数组 在Python中 我会使用np ones 2 1 Julia 中的模拟版本是什么 朱莉娅有一个内置的ones可以使用如下函数 julia gt ones 1 2 1 2 M
  • 估算缺失数据,同时强制相关系数保持不变

    考虑以下 excel 数据集 m r 2 0 3 3 0 8 4 0 1 3 2 1 5 2 2 3 1 9 2 5 1 2 3 0 2 0 2 6 我的目标是使用以下条件填充缺失值 将上述两列之间的成对相关性表示为 R 大约 0 68 将
  • 如何在 Julia 中进行两个变量数值积分?

    我可以使用 Julia 在 Julia 中进行单变量数值积分quadgk 一些简单的例子 julia gt f x cos x f generic function with 1 method julia gt quadgk f 0 pi
  • 在 Julia 中保存和检索字典的正确方法是什么?

    我已经看到 Julia 充分解释了 MAT 文件 这些文件中的结构可以毫无问题地作为字典读取 现在我创建了自己的字典 其结构如下 String String gt Int Int Int 在每个条目上 我可以保存它writedlm它产生了一
  • 使用 Pkg.add 时出现 julia 错误

    我刚刚在ubuntu中安装了julia 在添加包时发现了一些问题 julia gt Pkg Add Gadfly ERROR UndefVarError Add not defined 我也尝试更新 julia 但弹出错误 julia gt
  • 是否可以从 Julia 调用 Python 函数并返回其结果?

    我正在使用 Python 从网络上抓取数据 我想使用这些数据在 Julia 中运行计算 是否可以在 Julia 中调用该函数并返回其结果 或者我最好直接导出到 CSV 并以这种方式加载数据 绝对地 看PyCall jl https gith
  • 如何在 Julia 中引用结构本身

    我有这个代码 struct MyStruct text String function MyStruct text String text text do other things end end 当我写这篇文章时 我意识到朱莉娅没有认识到

随机推荐

  • 快速算法,精确查找二元矩阵中的 k 列,使这些列的总和为 1-向量

    假设我有一个 M x N 二进制矩阵 其中 M 和 N 都可以很大 我想精确地找到 k 列 k 相对较小 比如小于 10 这样这 k 列的总和就是 1 向量 所有元素均为 1 一种解决方案就足够了 有没有快速的算法 例如 处理矩阵的算法 1
  • 中心引导程序的品牌和列表项

    关于将 Twitter bootstrap 的品牌居中或将导航栏中的列表项居中存在几个问题 但我还没有弄清楚如何将两者居中 这是一个例子 用于修改twitter bootstrap导航栏 https stackoverflow com qu
  • 错误:日期/时间字段值超出范围:“30/12/2014 23:58:04”postgresql

    我正在尝试将 csv 文件导入 postgresql 数据库 我已经尝试过了set datestyle mdy copy Recon snapdeal sales REFERENCES ORDER CODE SUB ORDER CODE P
  • 如何在 pageInfo 中将总计数传递给客户端

    I use first after and last before进行分页 hasNextPage and hasPreviousPage非常有用 但我还需要的是total count这样我就可以计算并显示诸如page 5 of 343 p
  • 防止 ASP.Net 中的 SQL 注入

    我有这个代码 UPDATE OPENQUERY db SELECT FROM table WHERE ref Ref AND bookno Session number 我该如何防止 SQL 注入呢 UPDATE 这就是我正在尝试的 Sql
  • 错误:req.flash() 需要会话

    我是节点新手 我很确定我已经设置了中间件并表示使用闪存消息传递 但是我仍然收到错误 Error req flash requires sessions Setup express js var flash require connect f
  • 在子窗口上绑定 jQuery 事件

    我有一个包含以下 JavaScript 的页面 var w window open somePage html width 500 height 500 w bind someEvent function alert I see the e
  • MinGW:使用 __declspec(dllexport) 还是 __attribute__((visibility("default")))?

    MinGW支持吗 declspec dllexport declspec dllimport 即使是这样 我应该使用 attribute visibility default 基本上我应该根据平台或编译器来决定使用什么 应该是这样吗 ifd
  • 未找到证书链

    我正在签署 jar 文件 由 VeriSign 提供的证书 它提供2个证书 aplha primary cer and aplha secoandary cer 我使用以下命令生成密钥库文件 keytool importcert v ali
  • 在我的应用程序中禁用多指触摸[重复]

    这个问题在这里已经有答案了 我的应用程序使用一个 Activity 来托管多个片段 每次在手机屏幕上显示一个片段 每个片段的视图由多个图像图标组成 目前 用户可以按两个图标同时地用两根手指 每根手指按一个图标 我想禁用此多点触控功能在我的应
  • 如何将一个组件服务响应传递给角度2中的其他组件

    我是角度 4 的新手 在一个组件中从服务器获取响应 并且我希望在其他组件中获取此响应对象如何访问 应用程序组件 ts export class AppComponent selected skipCount number 0 errorMe
  • 如何在3.0模拟器上正确运行应用程序?

    我从 SDK 3 1 和 OpenGL ES 模板创建了一个新项目 如您所知 这个新模板具有 ES 1 1 和 ES 2 0 实现 我想先处理 ES 1 1 部分 所以我将项目设置中的 Base SDK 更改为 Simulator 3 0
  • 创建一个在 R 中重复自身的向量

    我想创建一个重复自身的向量 例如 1 3 直至 12 行 1 2 3 1 2 3 1 2 3 1 2 3 我怎样才能在 R 中做到这一点 感谢您的帮助 See rep 你想要的很简单 gt rep 1 3 times 4 1 1 2 3 1
  • 多对多索引创建约定

    我的问题与这个帖子 https stackoverflow com questions 48645872 prevent index created by convention on many to many table 但我不想阻止 而是
  • HTML5 Canvas 改变所有线条的颜色[重复]

    这个问题在这里已经有答案了 我用 HTML5 画布制作了一个简单的绘图应用程序 您单击两个不同的位置以从一个点到另一个点绘制一条线 我还有两个文本输入框 您可以在其中更改线条粗细和颜色 问题是 当我改变线条的颜色时 它会改变all之前画的线
  • 为 SQL Server 表自动生成 INSERT 语句的最佳方法是什么?

    我们正在编写一个新的应用程序 在测试时 我们将需要一堆虚拟数据 我通过使用 MS Access 将 excel 文件转储到相关表中来添加该数据 我们经常需要 刷新 相关表 这意味着将它们全部删除 重新创建它们 然后运行保存的 MS Acce
  • 可以在 Scala 中隐藏方法吗?

    昨晚 在某个不愉快的时刻 我们庆祝了第五次因以下行为而追踪到错误的实例 String split 例如在 output split n map processRow 问题是如果output是空的 split会给你一行空字符串 process
  • 带有 base64 字符串的 HTML 图像标签(数据 URI)

    我大约每 50 200 毫秒从一系列 httprequests 获取 jpeg 图像的二进制数据 我将此数据转换为 base64 字符串 并使用 javascript 将字符串插入到 img 标记中 var img document get
  • HTML5可以访问手机上的NFC芯片吗

    我对 HTML5 不太熟悉 所以有人知道 HTML5 是否能够访问移动设备内置的 NFC 芯片吗 或者 有人可以建议另一种方法来使用其他方法来做到这一点吗 我的目标是制作一个跨平台 HTML5 Web 应用程序 可以在配备 NFC 的手机上
  • Julia JIT 编译、@time 和分配数量

    我刚刚开始评估 Julia 版本 0 6 0 并且测试了如何调整大小 和尺寸提示 可能会影响性能 我使用 time宏 文档说 运行一次进行 JIT 编译 但如果我们检查分配数量 运行一次似乎还不够 module Test function