【发布时间】:2016-04-06 06:48:09
【问题描述】:
在 WWDC 2015 Session 409 接近 18 分钟。手头的讨论使我相信泛型可以通过启用整个模块优化模式通过泛型专业化进行优化。不幸的是,我没有信心的测试显示没有任何用处。
我在以下两种方法之间进行了一些非常简单的测试,看看性能是否相似:
func genericMax<T : Comparable>(x:T, y:T) -> T {
return y > x ? y : x
}
func intMax(x:Int, y:Int) -> Int {
return y > x ? y : x
}
简单 XCTest:
func testPerformanceExample() {
self.measureBlock {
let x: Int = Int(arc4random_uniform(9999))
let y: Int = Int(arc4random_uniform(9999))
for _ in 0...1000000 {
// let _ = genericMax(x, y: y)
let _ = intMax(x, y: y)
}
}
}
发生了什么
如果没有优化,以下测试是相当不同的:
- genericMax:0.018 秒
- intMax:0.005 秒
但是,对于整个模块优化,以下测试并不相似:
- genericMax:0.014 秒
- intMax:0.004 秒
我的预期
启用整个模块优化后,我预计两个方法调用之间的时间相似。这让我相信我的测试有缺陷。
问题
假设我的测试有缺陷/很差。如何更好地衡量整体模块优化模式如何通过泛型专业化优化泛型?
【问题讨论】:
标签: swift generics optimization compiler-optimization