我正在从事一个要求非常高的项目(实际上是一个解释器),完全用 D 编写,我想知道通常会推荐什么类型的优化。该项目大量使用了 GC、类、关联数组以及几乎任何东西。
关于编译,我已经对 DMD 和 LDcflags进行了试验,并且 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。
关于optimization - 使 D 程序更快的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58447104/