簡體   English   中英

使用 Xcode 11 構建后,iOS 應用程序慢了 20 倍以上

[英]iOS App is >20x slower after building with Xcode 11

我有一個為 iOS 12(使用 Xcode 10、Swift 4.2)開發的應用程序(Xcode 項目),現在我想使用 Xcode 11 為 iOS 13 重建它。

當我在 Xcode 11 中打開項目,構建並運行項目時,我發現我的應用程序突然慢了 20 多倍! 我多次檢查是否選擇了 Release 配置,並且使用了與 Xcode 10 中相同的編譯標志。不用說,編譯器優化已經最大化,就像在 Xcode 10 中一樣。

該應用程序使用大量 SIMD 操作( float4float3float4x4等)並使用指針(例如UnsafeMutablePointer<float4> )。 我發現 Xcode 11 向我展示了像float4這樣的 simd 類型現在已被棄用,並且類型typealiastypealias為新的SIMD結構。

關於從 iOS 12 移植到 iOS 13,我應該了解一些明顯的信息嗎? SIMD 類型的這種變化會成為性能下降如此可怕的根源嗎? 如何恢復原始速度(iOS 13 似乎降級了)?

我的錢在 Xcode 11 上。Apple 可能以某種方式更改了編譯器或編譯器設置,從而影響了矩陣數學指令的生成。

Apple 的 Xcode 主要版本有時肯定會破壞一些東西,他們可能需要一段時間才能解決。

嘗試在使用 Xcode 11 的同時為 iOS 12 構建。然后使用相同的項目並從 Xcode 10.2 構建它。

我公司的應用程序很大,在 Xcode 11 下構建時間增加了大約 3 倍。這很痛苦。 顯然,這與執行速度是不同的問題,但它仍然告訴您,我們對構建過程進行了重大更改。

在我將重 SIMD 的 Swift 代碼庫重寫為 Objective-C 后,舊的性能得到了恢復。 幸運的是,Objective-C 仍然使用沒有無意義包裝的舊 SIMD 數據類型。

性能與 Swift 的 SIMD 實現的變化相關。 在 Xcode 10.1 及更早版本中,Swift 使用內置的 SIMD 數據類型。 使用 Xcode 10.2(和更新版本),Apple 為 SIMD 數據類型(例如float3SIMD4<Float>類型float3 )和操作添加了無用的面向對象的包裝器,甚至沒有費心測試性能,這使我的代碼超過20 倍慢

有時您只需要速度,不要強迫面向協議的設計不屬於它。

無論您選擇在 Xcode 10.2 和更新版本中使用 Swift 4 還是針對 iOS 12,您仍然會獲得相同的、糟糕的 SIMD 性能。

TL;DR: Apple 在 Xcode 10.2和更新版本中搞砸了 Swift-5 SIMD 之前的性能水平。 將 SIMD 密集型代碼移植到 Objective-C 以獲得良好的舊級別性能(在我的情況下速度超過 20 倍)。 讓我們希望 Apple 不要碰 Objective-C 否則我們很快就會用 Neon 匯編編寫以獲得不錯的性能......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM