如何在 Julia 中进行正确的微基准测试?

2023-11-29

朱莉娅 1.0.0文档提供一般提示。

它还建议不要使用 @time 宏:

对于更严格的基准测试,请考虑 BenchmarkTools.jl 包,其中多次评估函数以减少噪音。

它们在使用中的比较如何?是否值得麻烦地使用“基础”Julia 中没有的东西?


从统计角度来看,@benchmark 比@time 好很多

TL;DR 基准工具@benchmark宏是一个很棒的微基准工具。 使用@time谨慎使用宏,不要认真对待第一次运行。

这个简单的示例说明了用途和差异:

julia> # Fresh Julia 1.0.0 REPL

julia> # Add BenchmarkTools package using ] key package manager

(v1.0) pkg> add BenchmarkTools  
julia> # Press backspace key to get back to Julia REPL

# Load BenchmarkTools package into current REPL
julia> using BenchmarkTools

julia> # Definine a function with a known elapsed time
julia> f(n) = sleep(n)  # n is in seconds
f (generic function with 1 method)

# Expect just over 500 ms for elapsed time
julia> @benchmark f(0.5)
BenchmarkTools.Trial:
  memory estimate:  192 bytes
  allocs estimate:  5
  --------------
  minimum time:     501.825 ms (0.00% GC)
  median time:      507.386 ms (0.00% GC)
  mean time:        508.069 ms (0.00% GC)
  maximum time:     514.496 ms (0.00% GC)
  --------------
  samples:          10
  evals/sample:     1

julia> # Try second run to compare consistency
julia> # Note the very close consistency in ms for both median and mean times

julia> @benchmark f(0.5)
BenchmarkTools.Trial:
  memory estimate:  192 bytes
  allocs estimate:  5
  --------------
  minimum time:     502.603 ms (0.00% GC)
  median time:      508.716 ms (0.00% GC)
  mean time:        508.619 ms (0.00% GC)
  maximum time:     515.602 ms (0.00% GC)
  --------------
  samples:          10
  evals/sample:     1


julia> # Define the same function with new name for @time macro tests
julia> g(n) = sleep(n)
g (generic function with 1 method)

# First run suffers from compilation time, so 518 ms
julia> @time sleep(0.5)
  0.517897 seconds (83 allocations: 5.813 KiB)

# Second run drops to 502 ms, 16 ms drop
julia> @time sleep(0.5)
  0.502038 seconds (9 allocations: 352 bytes)

# Third run similar to second
julia> @time sleep(0.5)
  0.503606 seconds (9 allocations: 352 bytes)

# Fourth run increases over second by about 13 ms
julia> @time sleep(0.5)
  0.514629 seconds (9 allocations: 352 bytes)

这个简单的例子说明了使用@benchmark宏观和谨慎@time应采取宏观结果。

是的,不厌其烦地使用是值得的@benchmark macro.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Julia 中进行正确的微基准测试? 的相关文章

  • julia变量的范围:在开放表达式的循环内重新分配

    我正在努力在 Julia 的循环中重新分配变量 我有一个以下的例子 infile test txt feature for ln in 1 3 println feature feature end open infile do f if
  • 如何在 Julia 1.0 中离线安装 julia 包?

    我有自己的 Julia 包 在 Julia 0 6 上运行良好 当我尝试升级到 Julia 1 0 时 我发现在 Julia 1 0 中添加我自己的包更加困难 我不能把它放在 pkg dir 下 在我的情况下 该包只是我本地磁盘上的几个文件
  • 有没有办法重置 Julia 中的当前工作目录?

    假设当前工作目录是C 保存 jl文件的目录 然后我将cwd切换到一些子文件夹来执行一些任务 有没有办法直接将cwd重置回C 之后 即最初的cwd 或者 是否可以独立于当前工作目录来定位正在运行的 jl 文件所在的目录 无需事先将 cwd 保
  • Julia ccall 接口和符号的问题

    我正在尝试使用朱莉娅的ccall与 C 库接口的函数 所有类型和指针都是正确的 并且下面的函数调用成功返回正确的答案 为简洁起见 此处未显示变量定义和设置 ccall vDSP convD libacc Void Ptr T Int64 P
  • Julia 泛型函数类型参数

    我定义了一个函数如下 function approx pi n tot Float64 0 0 for i in 1 n x rand y rand if x 2 y 2 lt 1 tot 1 end end tot n 4 end pri
  • Julia - 迭代字典中的键组合

    有没有一种巧妙的方法来迭代字典中的键组合 我的字典有这样的值 1 gt 1 2 2 3 gt 15 3 gt 6 7 8 4 9 11 gt 3 我需要做的是获取所有长度的键组合1 n where n可能是FX 3 就像上面的例子一样 我想
  • 如何创建并推送到共享或分布式数组数组?

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

    官方文档指出 连接和字符串插值调用string 将对象转换为字符串形式 然而 以下最小工作示例似乎证明了其他情况 type MyType x Int end import Base string Base string m MyType w
  • 埃拉托斯特尼筛法速度比较:Python 与 Julia

    所以我有一个用 Python 和 Julia 编写的 Eratosthenes 函数的小筛子 并且我正在比较运行时间 这是Python代码 import time def get primes n numbers set range n 1
  • Julia 中过时的软件包列表

    有没有办法列出 Julia 中所有过时的软件包 相当于pip3 list outdated在Python中 我做了几次搜索 1 https docs julialang org en v1 stdlib Pkg 2 https pkgdoc
  • 如何在一张图中显示多个相邻的图像?

    我正在使用 Julia PyPlot 和 Images 来处理一些图片 因为显示几十个图是不可能的 所以我想堆叠图像 如下所示 我有图像数据Array Array Float64 2 1 已经正常化了 以下代码仅显示最后一个最小的图像 该数
  • 如何从字符串转换为数组?

    If s 1 2 3 4 5 我们如何从中获得一个整数数组 我想返回 5 个元素Array Int64 1 1 2 3 4 5 正如 isebarn 使用的那样 split s 对于将字符串拆分为单词非常有用 默认情况下按空格拆分 juli
  • 如何制作任意级别的嵌套for循环

    我可以像这样做一个两级嵌套循环 for i1 in 1 n for i2 in 1 n do something with i1 i2 如何将其扩展到任意级别的嵌套循环 例如 我可以在 Python 中执行此操作以循环 n m 的笛卡尔积
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • Julia:如何更新到软件包的最新版本(即 Flux)

    I have Julia 1 1 在本例中 我想更新到软件包的最新版本Flux 8 3 0根据Flux jl 的文档 https fluxml ai Flux jl stable 当我打字时 Pkg status Flux I get St
  • Julia 中的 Refs 和 Broadcasting 之间有什么联系

    对于两个对象A and B我们之前可以得到向量 A A A B 与代码A A B 从 Julia 0 7 中的弃用警告来看 执行此操作的新方法似乎是使用第一个 A 的引用 所以它变成Ref A A B 参考文献和广播操作之间似乎没有很强的联
  • 如何一步步执行Julia脚本?

    Julia 有什么方法可以在 REPL 中逐步执行现有脚本 同时能够修改 绘制数组吗 以Matlab调试为例 注意 我特别要求 0 4 版本 希望能够实现新的调试系统 您有几个选择 The 调试包 https github com toiv
  • 如何在 Julia 中使用 set precision?

    我试图增加使用 set precision 函数的代码 但每次我使用示例时 无论多么简单 它总是给出相同的错误 当我做 x big 1 23456789 setprecision x 20 我收到以下错误 ERROR LoadError M
  • 从 Julia 更新 C 结构体的字段值

    我的问题很简单 但我不知道最好的方法 或者 Julia 目前没有提供这样的方法 如何从 Julia 设置 C 结构的字段值 假设您有一个结构类型来表示 C 库中树的节点 typedef struct node s int type node
  • 如何在 Julia 中将列数据类型从浮点更改为字符串?

    我正在尝试将数据框中的一列从浮点数转换为字符串 我努力了 df readtable data csv coltypes String String String String String Float64 Float64 String 但我

随机推荐

  • Pydantic 中的 parse_obj 字段是异构元组?

    在 Pydantic 类中 class Foo BaseModel bar str baz int 可以从元组导入 aaa 3 通过做类似的事情 key tr i for i key in enumerate fields TraceIte
  • qt qml 对象已经有一个 QQmlContext

    我想从本地获取 json 文件并使用以下命令将其发送到 QML include
  • 将二进制文件读入R

    我正在尝试将二进制文件读入 R 但该文件包含以二进制代码编写的数据行 因此 它没有属于一列的完整数据集 而是存储为数据行 我的数据如下所示 Bytes 1 4 int ID Byte 5 char response character By
  • 实体框架执行的精确sql查询

    这个问题似乎很清楚 但我会添加一个案例 using var context new MyEntities if context mytable Any row gt row myfield 2 do something here 我是实体框
  • 使用文件的内容将其重命名[重复]

    这个问题在这里已经有答案了 我有大约 20 MB 大小的二进制数据文件 文件名是随机的 全部以 AA 开头 在每个文件的内容中 它们在固定位置都有一个特定的字符串 在所有文件中从第 2086 个字节开始 我想读取由 2 个单词组成的字符串
  • 使用 Express,我可以自动修剪 req.body 中所有传入的 POSTed 字段吗?

    我开始使用表达形式使用我的 api Express 3 3 8 来修剪传入的 POSTed 字段的前导和尾随空白 但是 我相信要使用它 我必须将中间件中的表单字段和规则包含到我的路由中 如下所示 app post api test form
  • CSS 按钮永久按下状态

    我试图让一个按钮在点击时保持按下状态 然而 我正在使用的盒子阴影部分和 CSS 活动状态部分都让我感到困惑 我知道考虑到这段代码这是可行的 http jsfiddle net UEkBQ 这是我正在使用的代码 http jsfiddle n
  • 如何提取 Pandas 中的年、月、日? [复制]

    这个问题在这里已经有答案了 我有一个数据框 其中有一列名为 fecha dato 它存储日期如 2016 05 28 我想从 fecha dato 中以 int 形式提取 2016 05 和 28 作为名为年 月和日的新列 我使用迭代器方式
  • 切换变量以供外部使用

    The goal 在 a 中声明一些变量switch并在外部使用 问题 我不知道语法 我在想什么 为了解决我的问题 我想做这样的事情 但行不通 因为这只是一种哲学 public ActionResult Compare int id str
  • 在 C++ 中查找数组的模式(最常见的元素)

    我在面试问题中遇到过这个 我想看看 StackOverflow 将如何做到这一点 Bjarne Stroustrup 会怎么看待我的方式 有点罗嗦 但不幸的是我不知道如何让它变得更好 我知道你们会嘲笑我的愚蠢 template
  • 解析字符串antlr

    我将字符串作为解析器规则而不是词法分析器 因为字符串可能包含带有表达式的转义符 例如 The variable is variable string character character escapeSequence escapeSequ
  • CUDA 中的 std::vector 到数组

    有没有办法将 2D 矢量转换为数组以便能够在 CUDA 内核中使用它 它被声明为 vector
  • 比较 NSDate 的某些组件?

    我如何仅比较 2 的年月日组成部分NSDates 所以你应该这样做 NSCalendar calendar NSCalendar currentCalendar NSInteger desiredComponents NSDayCalend
  • 对于 React + TypeScript 变量:在组件的“props”中强制执行某些属性

    我想要一个变量 实际上是函数参数 但我简化了问题 它可以保存必须具有的 React 组件 例如aNumber number在它的属性之中 我不成功的尝试是 function MyComp props aNumber number aStri
  • OpenGL - 与未来的上下文共享现有纹理?

    我有一个应用程序 可以使用 FBO 扩展将帧绘制到纹理上 然后这些帧将显示到打开的不同窗口while应用程序正在运行 这意味着可以在创建任何新窗口的 OpenGL 上下文之前创建和池化纹理 并且wglShareLists叫做 目前我必须做g
  • WooCommerce 使用 WP_Query 在价格范围内搜索产品

    我目前正在使用 Woocommerce 为 WordPress 网站构建自己的自定义高级搜索功能 您应该能够使用过滤器进行搜索 Category 最低 最高价格 我目前的进展附在下面 这使您能够在 URL 参数中指定类别 slugs 返回的
  • 来自同一程序的多个输出纹理

    我正在尝试学习如何利用 WebGL2 中的同一程序进行多个输出gl drawBuffer 能力 我看了书 OpenGL ES 3 0 编程指南 第 11 章 其中列出了发生多输出所需的内容 但是 着色器源示例非常简单 仅输出常量值 我想知道
  • Spark:将 RDD 保存在 HDFS 中已有的路径中

    我可以将 RDD 输出保存到 HDFS另存为文本文件方法 如果文件路径已存在 此方法将引发异常 我有一个用例 需要将 RDDS 保存在 HDFS 中已有的文件路径中 有没有办法将新的 RDD 数据附加到同一路径中已存在的数据中 从 Spar
  • 单击后如何保持菜单链接突出显示(粗体和蓝色)?

    我的页面上有一个标题菜单 www wortwaerts net 在下面的代码的基础上工作正常 除了一个问题 到目前为止我找不到解决方案 我希望最后单击的菜单链接保持突出显示 粗体和蓝色 直到选择另一个链接然后将以同样的方式突出显示 我已经研
  • 如何在 Julia 中进行正确的微基准测试?

    朱莉娅 1 0 0文档提供一般提示 它还建议不要使用 time 宏 对于更严格的基准测试 请考虑 BenchmarkTools jl 包 其中多次评估函数以减少噪音 它们在使用中的比较如何 是否值得麻烦地使用 基础 Julia 中没有的东西