Swift 如何使用不透明指针调用DSP函数?
来自向量标量线性代数函数(来自vectorOps.h) func vIsamax(u计数:Int32, _x:OpaquePointer)->Int32) 计数 向量x中的元素数;必须是4的倍数 x浮点值的向量数组 我已经尝试了来自世界各地的解决方案Swift 如何使用不透明指针调用DSP函数?,swift,swift3,accelerate-framework,Swift,Swift3,Accelerate Framework,来自向量标量线性代数函数(来自vectorOps.h) func vIsamax(u计数:Int32, _x:OpaquePointer)->Int32) 计数 向量x中的元素数;必须是4的倍数 x浮点值的向量数组 我已经尝试了来自世界各地的解决方案 unsafeawpointer,带unsafepointer,MemoryLayout等 到目前为止还没有成功 无法使用调用类型“OpaquePointer”的初始值设定项。。。CFData 无法使用。。。雅达,雅达,雅达 如何使用OpaqueP
unsafeawpointer
,带unsafepointer
,MemoryLayout
等
到目前为止还没有成功
无法使用调用类型“OpaquePointer”的初始值设定项。。。CFData
无法使用。。。雅达,雅达,雅达
如何使用OpaquePointer调用DSP函数?将vFloat
akafloat4
元素的向量作为参数。
(每个float4
包含4个浮点数。)
C声明是
int32_t vIsamax(int32_t count, const vFloat *x);
应将其映射到Swift as
public func vIsamax(_ count: Int32, _ x: UnsafePointer<vFloat>) -> Int32
但您只需传递一个vFloat
/float4
数组,如下所示
小例子:
import Swift
import Accelerate
import simd
let values = [ float4(-1.0, -2.0, -3.0, -4.0), float4(4.0, 3.0, 2.0, 1.0) ]
let idx = vIsamax(Int32(4 * values.count), values)
print(idx) // 3
显示您的代码。我浏览了迁移页面中的15个不同版本。请注意,您确实不应该使用
vIsamax
,它仅用于传统支持。您应该改用cblas_isamax
或vDSP_maxmgvi
(它们速度更快,在iOS等新平台上也可用,但vIsamax
仅适用于OS X——它们也有更准确的文档,因为它们是积极开发的)。
import Swift
import Accelerate
import simd
let values = [ float4(-1.0, -2.0, -3.0, -4.0), float4(4.0, 3.0, 2.0, 1.0) ]
let idx = vIsamax(Int32(4 * values.count), values)
print(idx) // 3