【问题标题】:How to use Flambda with dune in ocaml?如何在 ocaml 中将 Flambda 与沙丘一起使用?
【发布时间】:2022-01-26 01:56:01
【问题描述】:

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

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

我将不胜感激按照说明/资源阅读。

【问题讨论】:

    标签: optimization compilation ocaml ocaml-dune


    【解决方案1】:

    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
    

    【讨论】:

    • 尝试在在线 linux 机器上安装它我得到这个错误:[ERROR] Invalid extra arguments ocaml-variants.4.13.1+options ocaml-option-flambda
    • 确保您拥有最新的 opam,2.1 或更新版本,最好
    • 哦,是的,我有一个旧版本。就我而言,这有效opam switch create myswitch --packages=ocaml-variants.4.12.1+options,ocaml-option-flambda
    猜你喜欢
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多