
针对Linux Intel 64位和Windows Arm64EC平台,实现了并行代码生成、LLVM优化以及内存管理器的更新。
在上一篇文章中,Marco探讨了为Linux Intel 64位平台重构的Delphi编译器。目前,该编译器与Windows Arm64EC的Delphi编译器均已基于同一代LLVM 20架构,这使得我们的研发团队能够在两个平台之间共享编译器的开发工作。
当我们讨论编译器性能时,有两个独立的问题:1)构建应用程序需要多长时间?以及2)编译器构建后生成的代码运行速度有多快?较新的LLVM提供了卓越的优化,但这同时也要求编译器做更多的工作,从而耗费更多时间。我们的团队正在投入大量精力来解决这两个方面的问题。内容速览→
64位编译器可执行文件现在可以并行生成多个Delphi单元的代码。默认情况下,编译器会根据可用处理器核心数选择工作线程数。您可以全局、按项目或通过命令行来覆盖此设置,包括在需要隔离编译器问题时禁用并行生成。

工具选项对话框中新增的“工人数量”选项
请注意,此功能在编译器和 32 位 IDE 的 32 位版本中不受支持,因为它需要更多内存,并且在构建大型应用程序时可能会超出可用内存。
改进在很大程度上取决于项目和构建配置。在一项内部测试中,在配备10核Intel Core i9-13900H的系统上重新构建FireMonkey单元,Debug模式的速度大约是Release模式的两倍,而Release模式的速度大约是Debug模式的14倍。我不会将这些数字作为所有项目的标准。然而,它们确实表明了为什么并行工作对于优化的Release构建尤为重要,因为LLVM需要处理的工作量大大增加,如果没有此功能,速度会非常慢。
对于 Linux Intel 64 位和 Windows Arm64EC,编译器前端现在可以通过更广泛的 LLVM IR 优化通道来处理 Delphi 代码。这包括异常处理,这是语言语义与通用优化器需要精确一致的领域之一。
我们的许多测试显示,运行时间提升在两到四倍之间,其中一个特定的康威生命游戏测试达到了大约七倍。启用新优化后,Arm64EC 上的发布编译时间可能会更长——在当前测试中,在考虑并行代码生成之前,时间大约延长了 34% 到 42%。这是一个公平的权衡:花费更多编译器时间来生成更快的代码,然后利用可用的 CPU 核心来减少等待时间。
我们还将基于 Delphi 的 FastMM4 内存管理器移植到了 Windows Arm64EC 平台,并将其设为默认选项。我们在 13.1 版本中提供的原始平台分配器在某些重新分配模式下(包括重复的字符串拼接)表现尤为缓慢。FastMM 提供了更均衡的行为,并保留了 Windows Delphi 开发者所习惯的内存泄漏报告功能。
除了 FastMM4 之外,该团队还推出了 rpmalloc 内存管理器,它作为 Arm64EC 和 Linux Intel 64 位系统的替代方案均可使用。在我们的测试中,它表现稳定,并且在高度多线程的内存分配工作负载下速度极快——根据测试情况,有时快两到三十倍。其缺点是内存占用更高(通常是两倍),且没有内置的等效内存泄漏报告功能。这就是为什么它仍是一个选择,而非默认选项。
除了编译器更改外,我们正在继续完善 Windows Arm64EC 平台。主要增强是一项在 13.1 版本中未包含的功能:对运行时包的支持。

Windows on Arm 平台的运行时包配置
运行时包并非 Windows on Arm 平台上的唯一改进:团队还致力于在浮点运算、处理大量泛型代码、静态库兼容性、资源、链接、异常处理、导入函数和调试信息等方面进行改进。这些改进大多并非头条功能,但它们共同决定了现有的 Delphi 应用程序是否能顺利迁移到该平台而不会出现意外问题。
这篇以及上一篇博客文章汇总了 RAD Studio 13.2 中 Delphi 编译器的相关工作。但当然,这并不是唯一需要改进的领域。我很快会就 13.2 的其他产品增强功能写更多内容。
功能预览:本文基于 RAD Studio 软件的预发布版本撰写,并获得 Embarcadero 的特别许可。在产品正式发布前,任何功能均未最终确定。
详细内容请参考:Coming in RAD Studio 13.2: Faster Builds and Faster Applications with Delphi's LLVM-20 Compilers

