可以对 Julia 代码进行逐行分析吗?

2023-11-22

我有一些长达数百行的 Julia 函数,我想对其进行分析,以便我可以优化代码。

我知道基准测试工具包允许使用以下命令测量函数的总体执行时间和内存消耗@btime or @benchmark。但这些函数没有告诉我函数内部的瓶颈在哪里。因此,我的第一步必须使用某种工具来识别代码的哪些部分速度较慢。

例如,在 Matlab 中,有一个非常好的内置分析器,它运行脚本/函数,然后报告每行代码所花费的时间。类似地,Python 中有一个模块叫做线路分析器它可以生成逐行报告,显示函数的每一行花费了多少时间。

我正在寻找的只是一份逐行报告,显示每行代码花费的总时间以及特定代码段被调用的次数。

Julia 有这样的功能吗?内置或通过某些第三方包。


有一个分析Julia 文档中的章节包含所有必要的信息。

另外,您可以使用个人资料视图.jl或类似的软件包,用于对分析代码进行可视化探索。

而且,不完全是分析,但在实践中非常有用的包是定时器输出.jl

UPD:由于 Julia 是一种编译语言,因此测量各行的时间是没有意义的,因为执行的实际代码可能与 Julia 中编写的代码非常不同。

例如下面的 Julia 代码

function f()
    x = 0
    for i in 0:100_000_000
        x += i
    end

    x
end

降低至

julia> @code_llvm f()
;  @ REPL[8]:1 within `f'
define i64 @julia_f_594() {
top:
;  @ REPL[8]:7 within `f'
  ret i64 5000000050000000
}

IE。根本没有循环。这就是为什么使用一行在所有回溯集合中出现的频率的代理指标,而不是执行时间。当然,它与执行时间不同,但它很好地近似了瓶颈所在,因为执行时间长的行更频繁地出现在回溯中。

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

可以对 Julia 代码进行逐行分析吗? 的相关文章

  • Julia ccall 接口和符号的问题

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

    我听说类型稳定性使 Julia 如此之快 同时仍然与其他解释语言 例如 Python 一样具有表达能力 类型稳定性允许编译器在编译时直接根据输入类型确定函数的输出类型 因为 Julia 专门针对每种输入类型进行编译 这意味着如果所有函数都是
  • 使用 !== 或 != 将 Julia 变量与 `nothing` 进行比较

    在一些 Julia 代码中 何时可以看到条件表达式 例如 if val nothing dosomething end where val是一个类型变量Union Int Nothing 条件有什么区别val nothing and val
  • Julia:生成唯一的随机整数数组

    我正在尝试创建 10 个唯一随机整数的元素数组 但是我无法创建具有唯一值的数组 Julia 中是否有类似 Python 的东西样本函数 https docs python org 2 library random html random s
  • 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 就像上面的例子一样 我想
  • 离散连续概率分布

    认识到这可能是一个统计问题和编码问题 假设我使用 Distributions jl 创建了一个正态分布 using Distributions mydist Normal 0 0 2 有没有一种好的 直接的方法可以离散化这样的分布以获得 P
  • Julia 中的指针解引用(unsafe_load(ptr) 有效,但 unsafe_wrap(Array, ptr, 1) 段错误)

    我正在尝试取消引用指针unsafe load and unsafe wrap 我发现unsafe load不过效果很好unsafe wrap如果取消引用指向可变结构的指针 则会崩溃 玩具示例 mutable struct Wrapper d
  • Julia 中 @with_kw 和 Base.@kwdef 之间的区别?

    受到这个问题评论的启发 with kw 在 Julia 中做什么 https stackoverflow com questions 69586136 what does with kw do in julia 有什么区别 with kw
  • 如何从字符串转换为数组?

    If s 1 2 3 4 5 我们如何从中获得一个整数数组 我想返回 5 个元素Array Int64 1 1 2 3 4 5 正如 isebarn 使用的那样 split s 对于将字符串拆分为单词非常有用 默认情况下按空格拆分 juli
  • 并行模拟写入同一文件

    我的目标是在集群上并行运行 10 000 个左右的 Julia 编码模拟 每个模拟独立于所有其他模拟 每个模拟都有一个要输出的数字 以及有关哪个模拟产生该数字的 3 列信息 因此 强制每个模拟打印在单独的文件上对我来说听起来有点愚蠢 我可以
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 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 v.0.6

    我克隆了一个存储库 https github com XiaojingGeorgeZhang OBCA tree master AutonomousParking在 Julia 0 5 和 0 6 中进行了测试 我之前使用的是最新的 Jul
  • 如何在 Julia 中将列数据类型从浮点更改为字符串?

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

    在 Python Pandas 中 如果我想用现有列的累积和创建一个新列 我会这样做 df cumulative sum df scores cumsum 在 Julia 中执行此操作的等效方法是什么 您可以使用基本方法cumsum计算向量
  • Julia - 数组的绝对值

    我想获得以下数组的绝对值 x 1 1 22 3 3 01 1 即 我想要以下类型的输出 x2 1 1 22 3 3 01 1 但是当我输入 abs x 我收到错误 ERROR MethodError no method matching a
  • 如何更改朱莉娅图中刻度的精度

    我是第一次在 julia 中绘图并安装了 Juno IDE 我使用 Plots jl 进行绘图 每次绘图时 y 轴抽动都有很多小数 我尝试过多个后端 例如 GR Plotly PlotlyJS 但没有一个后端改变了我所看到的行为 这是我当前

随机推荐

  • org.codehaus.jackson.map.JsonMappingException:无法从 JSON 字符串实例化类型 [简单类型,类 models.Job] 的值

    我使用 playframework 并尝试将一些 json 反序列化为 java 对象 除了模型中的关系之外 它运行得很好 我得到以下异常 在此处输入代码org codehaus jackson map JsonMappingExcepti
  • 使用 pandas 的高性能笛卡尔积(CROSS JOIN)

    这篇文章的内容最初是为了成为熊猫合并 101 但由于内容的性质和大小需要完全做到 为了公平起见 它已移至其自己的 QnA 给定两个简单的 DataFrame left pd DataFrame col1 A B C col2 1 2 3 r
  • Twig Variable 方法的变量

    我正在尝试做一些在 PHP 中非常简单的事情 但在 twig 中就不那么容易了 基本上 我需要调用类方法 但我需要能够定义通过字符串调用的方法 我有3种方法 getControlvs getControlnc and getControlt
  • C# 中“internal”关键字的实际用途

    您能否解释一下实际用途是什么internalC 中的关键字 我知道internal修饰符限制对当前程序集的访问 但是何时以及在什么情况下应该使用它 您希望从同一程序集中的许多其他类访问的实用程序或帮助程序类 方法 但您希望确保其他程序集中的
  • Rails 本地服务器错误:没有这样的文件database.yml

    我正在与另一位开发人员一起开发一个项目 在尝试启动本地服务器时遇到错误 缺少数据库 yml 我只是使用 sqlite 另一个开发人员正在使用 mongrel 因此我没有 database yml 文件 我没有使用 Mongrel 因为我使用
  • gcc 共享库无法链接到 glibc

    我正在 Linux 64 位下使用 Eclipse CDT 编写一个简单的 C 共享库 该代码有一个对rand 函数在
  • 什么是类型安全?

    我最近参加了一次脑力测试 获得了高分 但是有几个问题对我来说很难 也许是因为英语不是我的母语 问题之一是 以下哪一项描述了类型安全 用于确保 CLR 中引用和值类型安全的编程构造 防止由于禁止非托管访问而导致内存泄漏 特定于 CLR 的功能
  • 等待扇出交换上的所有rabbitmq响应?

    我配置了一个名为 的rabbitmq扇出交换 ex foo 对于 RPC 工作负载 当客户端连接到服务器时 它们会创建自己的非持久 RPC 接收队列并使用 BasicConsumer 连接到它 应用程序侦听消息 命令并响应在reply to
  • Cuda虚拟课堂

    我想在 cuda 内核中执行一些虚拟方法 但我不想在同一内核中创建对象 而是想在主机上创建它并将其复制到 gpu 内存 我成功地在内核中创建对象并调用虚拟方法 复制对象时会出现问题 这是有道理的 因为显然虚函数指针是假的 发生的事情只是 C
  • 如何在 MATLAB 中不排序而从 A 中删除集合 A 和 B 的交集?

    两个矩阵 A 和 B A 1 2 3 9 7 5 4 9 4 1 4 7 B 1 2 3 1 4 7 矩阵B的所有行都是矩阵A的成员 我希望从A中删除A和B的公共行而不排序 我尝试过 setdiff 但这对输出进行了排序 对于我的特殊问题
  • 在堆栈中搜索特定元素

    我对移植感兴趣这段Python代码到 C 作为端口的一部分 我正在使用std stack来自
  • 无法将“org.springframework.web.multipart.commons.CommonsMultipartFile”类型的值转换为所需类型

    我有以下控制器方法 RequestMapping value owner terminals save method RequestMethod POST public String saveTerminal RequestParam va
  • click() jquery 函数在新 div 上不可用

    在我的网站运行期间 我使用 jquery 和 a 类创建新的 div 我为 a 类定义了一个 click 函数 如下所示 document ready function a click function a hide 问题是 使用同一类创建
  • 如何以编程方式结束 2.3+ 上的通话?

    直到 Android 2 2 我知道我可以使用反射并通过 getITelephony 终止呼叫 但是 从 2 3 开始 这不再有效 因为即使您向应用程序授予 MODIFY PHONE STATE 权限 它现在也只是系统应用程序的权限 htt
  • 使用 Selenium + Python 循环链接并从结果页面中抓取数据[重复]

    这个问题在这里已经有答案了 我是 Selenium 的新手 需要抓取一个包含链接列表的网站 其结构如下 a class unique href i class something i Text span class something Te
  • 为什么 C 和 C++ 中 NULL 指针的定义不同?

    In C NULL定义为 void 0而在 C 中则是0 为什么会这样呢 在C中我可以理解如果NULL不是类型转换为 void 那么编译器可能 可能不会生成警告 除了这个 还有什么原因吗 早在 C 03 中 ISO 规范 4 10 1 将空
  • 如何更改通过 WindowManager 添加的窗口的 z 顺序?

    是否可以指定每个窗口的 z 顺序 在下图中 每个 editText 都位于通过 WindowManager 添加的自己的窗口中 正如你所看到的 我有一个 z 顺序问题 就像你在图片上看到的那样最后添加的窗口接缝采用更高的 z 顺序 因此 我
  • 在 Linux 上安装 PyQt5 5.14.1

    pip3 install PyQt5 Collecting PyQt5 Using cached https files pythonhosted org packages 3a fb eb51731f2dc7c22d8e1a63ba88f
  • 设置捆绑值返回 nil

    我向我的应用程序添加了一个 设置 包 在 Xcode 中 它出现在我的项目树视图的根目录中 The Root plist文件看起来像这样
  • 可以对 Julia 代码进行逐行分析吗?

    我有一些长达数百行的 Julia 函数 我想对其进行分析 以便我可以优化代码 我知道基准测试工具包允许使用以下命令测量函数的总体执行时间和内存消耗 btime or benchmark 但这些函数没有告诉我函数内部的瓶颈在哪里 因此 我的第