Swift on Linux: how to specify compiler optimizations
stackoverflow上的几个线程(例如,这个线程)在编译swift应用程序时讨论不同的优化级别(Onone、O、Ounchecked…)。
但是,这些发布与OSX上的开发有关。这些优化似乎可以通过xcode或xrun(xcrun swift -O3直接设置。
在Linux(Ubuntu 15.10)上直接使用swift编译器时,我想知道如何切换不同的优化级别。目前,我只是通过调用swift build来构建应用程序,如文档中所示,但我发现没有任何方法可以改变优化级别。
- 使用swift包管理器"swift build"命令生成swift包优化版本的可能副本
- @ MikeC。如果我比你提供的问题早9个月问的话,这个问题怎么会是复制品?
- 这两个问题都询问如何指定Swift编译器优化级别,即使最近询问了链接的问题,但对于Swift Package Maker的当前版本(不是解决方法),它有一个更准确(更好)的选择答案。换句话说,另一个问题/答案更好地服务于社区(IMHO)。
- @ MikeC。好的,谢谢你的解释。
可以向Swift编译器swiftc提供-O、-Onone和-Ounchecked优化标志。但是,目前似乎没有办法为swift build指定其他标志。例如,请参见以下链接,即使它不是直接相关的:https://bugs.swift.org/browse/sr-397。相同的bug报告表明团队正在积极地添加这个缺失的功能。
我发现解决这个问题的一种方法是运行swift build -v,找到引用-Onone的第一个命令,将它及其后面的所有命令复制到shell脚本,编辑脚本以使用所需的优化级别而不是-Onone,然后运行脚本。这应该使用所需的优化级别重新编译swift源并重新生成可执行文件。
在我的测试中,我发现一个简单的例子,涉及排序一个数组运行两个数量级的速度更快,如果使用EDCOX1,0或EDCOX1,2,而不是EDCOX1 1。
- 谢谢,这是个很好的解决方法。在我的测试中,EDCOX1〔0〕在快排序实现中比EDCOX1×1快4%左右,在求解TSP的遗传算法中快约19%。与一些旧的堆栈溢出结果相比,我认为-O在这期间得到了一些不错的改进。