【发布时间】:2019-12-16 23:31:40
【问题描述】:
我有一个为 iOS 12(使用 Xcode 10、Swift 4.2)开发的应用程序(Xcode 项目),现在我想使用 Xcode 11 为 iOS 13 重新构建它。
当我在 Xcode 11 中打开项目,构建并运行项目时,我发现我的应用程序突然慢了 20 多倍!我多次检查是否选择了发布配置,并且使用了与 Xcode 10 中相同的编译标志。不用说,编译器优化已被最大化,就像在 Xcode 10 中一样。
该应用程序使用大量 SIMD 操作(float4、float3、float4x4 等)并使用指针(例如 UnsafeMutablePointer<float4>)。我发现 Xcode 11 向我展示了像 float4 这样的 simd 类型现在已被弃用,typealiased 改为新的 SIMD 结构。
关于从 iOS 12 移植到 iOS 13,我应该知道一些明显的事情吗? SIMD 类型的这种变化会导致性能如此严重下降吗?如何恢复原来的速度(iOS 13 好像降级了)?
【问题讨论】:
-
你能用一个显示性能回归的热循环生成一个简单的minimal reproducible example 吗?然后包括为旧/新版本生成的 asm,以便具有 asm 经验的人可以告诉您这是否是原因。更改 SIMD 类型的定义方式很容易与将它们编译为更糟糕的 asm 相关联。
-
@PeterCordes 遗憾的是,我没有时间从我的代码库中提取 M(n)WE,但根据我的解决方案,很明显,阻碍性能的确实是 Swift 5 的新 SIMD 包装器.详情请看我的回答。
标签: ios swift xcode performance simd