如何在 ocaml 中将 Flambda 与沙丘一起使用?

How to use Flambda with dune in ocaml?

我正在做一个项目,我需要尽可能多地优化我的代码,因为正常编译需要几个小时 运行。

有人告诉我使用 Flambda,但我在互联网上没有找到任何关于如何将它与 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-option 了解所有选项。

安装 OCaml 的 flambda 版本后,它会默认使用 flambda 优化(但请确保您使用的是发布版本,因为默认调试版本会禁用一些优化,包括交叉 -模块优化)。另外,像往常一样,不要忘记用 eval $(opam env).

激活你的开关

flambda 编译器有许多配置选项,完全是 described in the manual. You may experiment with them to find some tradeoff between the compilation time and the performance of your application. You can set the options using flags stanza, e.g., (flags (:standard -rounds 5)). You can set the flags globally as well. Once you find the perfect set of flags, you can even use them to compile your upstream dependencies, using the OCAMLPARAM 环境变量。使用此环境变量,您可以更改优化参数而不会干扰其他包的构建脚本,例如,

export OCAMLPARAM='_,rounds=5,O3=1,inline=100,inline-max-unroll=5'
# opam install your deps