【发布时间】:2022-01-26 01:56:01
【问题描述】:
我正在做一个项目,我需要尽我所能优化我的代码,因为正常编译需要几个小时才能运行。
有人告诉我使用 Flambda,但我在互联网上没有找到任何关于如何将它与 dune 一起使用的信息。
我将不胜感激按照说明/资源阅读。
【问题讨论】:
标签: optimization compilation ocaml ocaml-dune
我正在做一个项目,我需要尽我所能优化我的代码,因为正常编译需要几个小时才能运行。
有人告诉我使用 Flambda,但我在互联网上没有找到任何关于如何将它与 dune 一起使用的信息。
我将不胜感激按照说明/资源阅读。
【问题讨论】:
标签: optimization compilation ocaml ocaml-dune
Flambda 是编译器的一项配置功能,默认禁用(截至 2022 年 1 月)。要使用它,您需要安装启用此功能的编译器版本。使用 opam 很容易,例如,
opam switch create myswitch ocaml-variants.4.13.1+options ocaml-option-flambda
它将使用 4.13.1 版本的 OCaml 编译器创建一个新开关,并启用 flambda 功能。一般语法是,
opam switch create <switch-name> ocaml-variants.<version>+options <options>...
您可以启用多个选项,请参阅opam search ocaml-options 了解所有选项。
安装 OCaml 的 flambda 版本后,它将默认使用 flambda 优化(但请确保您使用的是发布版本,因为默认调试版本禁用了一些优化,包括跨模块优化)。另外,像往常一样,不要忘记使用eval $(opam env) 激活您的开关。
flambda 编译器有许多配置选项,完全是described in the manual。您可以对它们进行试验,以在编译时间和应用程序性能之间找到一些折衷。您可以使用flags 节设置选项,例如(flags (:standard -rounds 5))。您可以设置flags globally as well。一旦找到完美的标志集,您甚至可以使用它们来编译上游依赖项,使用 OCAMLPARAM 环境变量。使用此环境变量,您可以更改优化参数,而不会干扰其他包的构建脚本,例如,
export OCAMLPARAM='_,rounds=5,O=3,inline=100,inline-max-unroll=5'
# opam install your deps
【讨论】:
[ERROR] Invalid extra arguments ocaml-variants.4.13.1+options ocaml-option-flambda
opam switch create myswitch --packages=ocaml-variants.4.12.1+options,ocaml-option-flambda