我正在做一个非常苛刻的项目(实际上是一个解释器),专门用 D 编写,我想知道通常会推荐哪种类型的优化。该项目大量使用了 GC、类、关联数组以及几乎任何东西。
关于编译,我已经对 DMD 和 LDC 标志进行了试验,而 LDC-flto=full -O3 -Os -boundscheck=off
似乎正在发挥作用。
但是,尽管这听起来很简陋,但我希望您提出任何可以帮助加快性能的想法,无论是否与 D 语言相关。(我确定我错过了几件事)。
我正在做一个非常苛刻的项目(实际上是一个解释器),专门用 D 编写,我想知道通常会推荐哪种类型的优化。该项目大量使用了 GC、类、关联数组以及几乎任何东西。
关于编译,我已经对 DMD 和 LDC 标志进行了试验,而 LDC-flto=full -O3 -Os -boundscheck=off
似乎正在发挥作用。
但是,尽管这听起来很简陋,但我希望您提出任何可以帮助加快性能的想法,无论是否与 D 语言相关。(我确定我错过了几件事)。
编译器标志:-mcpu=native
如果程序将在您的机器上运行,我会添加。不知道-Os
除了有什么效果-O3
。
评论中提到了剖析。就个人而言,在 Linux 下,我有一个脚本可以转储进程的堆栈跟踪,我这样做了几次以了解它挂断的位置。
不知道你说的GS是什么意思。
既然你提到了类:在 D 中,方法默认是虚拟的;虚拟方法添加间接并且不可内联。确保只有那些必须是虚拟的方法。看看您是否可以使用不涉及间接的多态形式重写您的程序,例如使用模板元编程。
既然您提到了关联数组:这些大量使用了 GC;为了加快速度,请切换到在 std.allocator 之上运行的第三方库,例如https://github.com/dlang-community/containers
如果您的代码的某些部分是可并行化的,那么 std.parallelism 是一个很好的工具。
既然您提到该项目是一个解释器:有许多优化它们的途径,直到 JIT/AOT 编译。也许您可以链接到现有的库,例如 LLVM 或 libjit。