我目前正在尝试创建一个可以用浮点数组(并且可能还会翻倍)初始化的类,该浮点数组将存储为上述大小的SIMD向量(float2,float4等)
我想知道的是,是否有可能计算通用向量而不必为每种大小和标量类型创建函数?
我不必为每种类型编写单独的类,而是尝试使用泛型,就像这样
public class GenericSIMD<T: SIMD>: NSObject {
var inputVector: T!
convenience init(_ input: [T.Scalar]) {
self.init()
self.inputVector = T(input)
}
public func multiply (_ input: [T.Scalar]) -> T.Scalar {
guard let inVec = self.inputVector else { return 0 as! T.Scalar }
let vector = T(input)
return inVec * vector
}
public func multiply (_ input: [T.Scalar]) -> T.Scalar {
guard let inVec = self.inputVector else { return 0 as! T.Scalar }
let vector = T(input)
return simd_dot(vector, inVec)
}
private override init() {
super.init()
}
}
// Usage
let generic = GenericSIMD<SIMD4<Float>>([2, 4, 5, 2])
print(generic.multiply([2, 5, 1, 2]))
虽然我可以无问题地存储向量,但在return inVec * vector
上却报错
无法推断出通用参数'T'
我在return simd_dot(vector, inVec)
上也遇到了一个错误,指出了这一点
不能使用类型为((T,T)''的参数列表调用'simd_dot'