2

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

有人告诉我使用 Flambda,但我在互联网上没有找到任何关于如何将它与沙丘一起使用的信息。

我很感激遵循/资源阅读的说明。

4

1 回答 1

6

Flambda 是编译器的配置功能,默认禁用(截至 2022 年 1 月)。要使用它,您需要安装启用此功能的编译器版本。使用 opam 很容易,例如,

opam switch create myswitch ocaml-variants.4.13.1+options ocaml-option-flambda

它将使用4.13.1OCaml 编译器的版本创建一个新开关,并启用 flambda 功能。一般语法是,

opam switch create <switch-name> ocaml-variants.<version>+options <options>...

您可以启用多个选项,请参阅opam search ocaml-options所有选项。

在您安装了 OCaml 的 flambda 版本后,它将默认使用 flambda 优化(但请确保您使用的是发布版本,因为默认调试版本禁用了一些优化,包括跨模块优化)。此外,像往常一样,不要忘记使用 激活您的开关eval $(opam env)

flambda 编译器有许多配置选项,在手册中有详细描述。您可以对它们进行试验,以在编译时间和应用程序性能之间找到一些折衷。您可以使用标志节设置选项,例如(flags (:standard -rounds 5)). 您也可以全局设置标志。一旦找到完美的标志集,您甚至可以使用OCAMLPARAM环境变量使用它们来编译上游依赖项。使用此环境变量,您可以更改优化参数,而不会干扰其他包的构建脚本,例如,

export OCAMLPARAM='_,rounds=5,O=3,inline=100,inline-max-unroll=5'
# opam install your deps
于 2022-01-11T16:33:52.897 回答