【发布时间】:2023-06-05 18:10:02
【问题描述】:
我已经阅读了很多文档和问题,但我仍然对此感到困惑。
在文档的Profiling 部分中,建议首先在 REPL 中运行目标函数一次,以便在分析之前它已经编译。但是,如果脚本相当复杂并且打算在命令行中运行并接受参数怎么办?当julia 进程完成并且我第二次运行脚本时,是否再次执行编译?像https://*.com/a/42040763/1460448、Julia compiles the script every time? 这样的帖子给出了相互矛盾的答案。在 Julia 不断发展的同时,它们似乎也很老了。
在我看来,根据我的经验,第二次运行所花费的时间与第一次运行的时间完全相同。启动时间相当长。我应该如何优化这样的程序?添加__precompile__() 似乎根本没有改变执行时间。
另外,当我想对这样的程序进行概要分析时应该怎么做?所有关于分析的资源都在 REPL 中讨论了这样做。
【问题讨论】:
-
是的,每次从 REPL 外部运行时都会重新编译它,除非您能够编译成二进制文件(我相信这有点困难。)推荐的工作流程在REPL,并从那里调用东西。此外,如果您想要良好的性能,请记住将您的代码包装在一个函数中。我不明白为什么接受参数意味着你必须从命令行运行它。把它变成一个函数,并以参数作为输入变量调用函数。
-
@DNF 谢谢。我确实拥有功能中的一切。只是我正在运行一个需要很长时间才能完成的模型(并最终保存经过训练的模型文件或在测试集上显示结果),因此这样的程序通常通过命令行运行,就像使用例如C++、pypy 或 Tensorflow。既然我了解 Julia 是这样工作的,那么我将在 REPL 中做所有事情。虽然对于人们习惯于以不同方式做事的长期任务来说,这不会让 Julia 有点尴尬吗?
-
就个人而言,我不明白为什么在 Julia 提示符下运行程序比在 bash 提示符下运行程序更尴尬。无论我使用的是 Matlab、Python 还是 Julia,我总是从 repl 中运行。您同样可以从 Julia 中保存结果。
-
确实如此。我能想到的一个问题可能是当您需要向用户显示帮助消息时,显示运行程序需要哪些参数以及每个标志的含义,就像传统的命令行程序一样。用户还可以在相应标志之后输入参数。使用纯函数调用会更复杂吗?这就是为什么我觉得 Julia 还不适合命令行使用,而且目前确实更适合 REPL 工作流程。如果可以编译二进制可执行文件,那就更好了,尽管这可能会违背动态。
-
长启动时间也不利于将其用作命令行程序。
标签: compilation profiling julia read-eval-print-loop