【问题标题】:Swift on Linux: how to specify compiler optimizationsLinux 上的 Swift:如何指定编译器优化
【发布时间】:2016-04-06 18:25:19
【问题描述】:

stackoverflow 上的几个线程(例如this one)在编译 Swift 应用程序时讨论了不同的优化级别(OnoneOOunchecked...)。

但是,这些帖子与 OSX 上的开发有关。似乎这些优化可以直接通过 Xcode 或 xcrun (xcrun swift -O3) 设置。

我想知道在 Linux (Ubuntu 15.10) 上直接使用 Swift 编译器时如何切换不同的优化级别。目前,我只是通过调用swift build 来构建应用程序,如文档中所示,但我发现无法更改优化级别。

【问题讨论】:

  • @MikeC。如果我比您提供的问题早 9 个月问这个问题,怎么会重复?
  • 这两个问题都询问如何指定 swift 编译器优化级别,即使链接的问题是最近提出的,但它为当前版本的 swift 包制造商提供了更准确(“更好”)的选择答案(不是解决方法)。换句话说,其他问题/答案更好地为社区服务(恕我直言)。
  • @MikeC。好的,谢谢解释。

标签: linux swift macos compilation


【解决方案1】:

可以为 Swift 编译器swiftc 提供-O-Onone-Ounchecked 优化标志。但是,目前似乎无法为swift build 指定其他标志。例如,请参阅以下链接,即使它不是直接相关的: https://bugs.swift.org/browse/SR-397。同一份错误报告表明该团队正在积极努力添加这个缺失的功能。

我发现解决该问题的一种方法是运行swift build -v,找到引用-Onone 的第一个命令,将它和它后面的所有命令复制到一个shell 脚本,编辑脚本以使用所需的优化级别而不是-Onone,然后运行脚本。这应该使用所需的优化级别重新编译 Swift 源代码并重建可执行文件。

在我的测试中,我发现如果使用-O-Ounchecked 而不是-Onone 构建一个涉及对数组进行排序的简单示例,运行速度会快几个数量级。

【讨论】:

  • 谢谢,这是一个很好的解决方法。在我的测试中,-Ounchecked 在快速排序实现中比-O 快约 4%,在解决 TSP 的遗传算法中快约 19%。与堆栈溢出的一些旧结果相比,我认为-O 在此期间得到了一些不错的改进。
猜你喜欢
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 2022-11-25
  • 2011-11-07
相关资源
最近更新 更多