3

我正在做一个非常苛刻的项目(实际上是一个解释器),专门用 D 编写,我想知道通常会推荐哪种类型的优化。该项目大量使用了 GC、类、关联数组以及几乎任何东西。

关于编译,我已经对 DMD 和 LDC 标志进行了试验,而 LDC-flto=full -O3 -Os -boundscheck=off似乎正在发挥作用。

但是,尽管这听起来很简陋,但我希望您提出任何可以帮助加快性能的想法,无论是否与 D 语言相关。(我确定我错过了几件事)。

4

1 回答 1

3
  • 编译器标志:-mcpu=native如果程序将在您的机器上运行,我会添加。不知道-Os除了有什么效果-O3

  • 评论中提到了剖析。就个人而言,在 Linux 下,我有一个脚本可以转储进程的堆栈跟踪,我这样做了几次以了解它挂断的位置。

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

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

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

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

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

于 2019-10-18T12:05:15.287 回答