optimization - 使 D 程序更快的方法

标签 optimization d micro-optimization dmd ldc

我正在从事一个要求非常高的项目(实际上是一个解释器),完全用 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/

相关文章:

python - python 解释器是否执行动态优化?

jquery - 在 jQuery 中查找元素的最有效方法

c - 这个 C 代码如何与 D 接口(interface)?

没有 JDT 的 Eclipse

assembly - 代表回复 : why all the hassle?

sql-server - 订购 SQL Server 列时对性能/空间的影响?

ajax - 如何提高 AJAX 应用程序的性能?

mysql - 优化查询以返回行数

mixins - 如何通过类mixin实现基于策略的设计?

performance - 为什么使用寄存器 R12 时 POP 很慢?