使 D 程序更快的方法

Ways to make a D program faster

我正在从事一个要求非常高的项目(实际上是一个解释器),完全用 D 编写,我想知道通常会推荐什么类型的优化。该项目大量使用 GC、类、关联数组和几乎任何东西。

关于编译,我已经对 DMD 和 LDC 标志进行了试验,并且 -flto=full -O3 -Os -boundscheck=off 的 LDC 似乎有所作为。

然而,尽管这听起来很简陋,但我希望您提出任何您想到的有助于加快性能的建议,无论是否与 D 语言相关。 (我确定我遗漏了几件事)。

  • 编译器标志:如果程序在您的机器上是 运行,我会添加 -mcpu=native。不确定 -Os 除了 -O3.

  • 之外还有什么效果
  • 评论中提到了分析。我个人在 Linux 下有一个脚本可以转储进程的堆栈跟踪,我这样做了几次以了解它被挂断的位置。

  • 不知道你所说的 GS 是什么意思。

  • 既然你提到了类:在D中,方法默认是虚拟的;虚拟方法添加间接并且不可内联。确保只有那些必须是虚拟的方法是。看看您是否可以使用不涉及间接的多态形式重写您的程序,例如使用模板元编程。

  • 既然你提到了关联数组:它们大量使用了 GC;要加快速度,请切换到在 std.allocator 之上运行的第三方库,例如 https://github.com/dlang-community/containers

  • 如果您的代码的某些部分是可并行化的,std.parallelism 是一个很好的工具。

  • 既然你提到该项目是一个解释器:有很多途径可以优化它们,直到 JIT/AOT 编译。也许你可以 link 到现有的库,例如 LLVM 或 libjit。