2016-11-20 63 views
1

從矢量標量線性代數函數(從vectorOps.h) https://developer.apple.com/reference/accelerate/1546030-visamax如何使用OpaquePointer調用DSP功能?

FUNC vIsamax(_計數:的Int32, _ X:OpaquePointer) - >的Int32)

計數 數向量x中的元素;必須是4

一個倍數x的浮點值的向量陣列。從 https://swift.org/migration-guide/se-0107-migrate.html UnsafeRawPointerwithUnsafePointerMemoryLayout等 至今尚無成功的

不能調用初始化與... CFData型 'OpaquePointer',

不能調用

我試過的解決方案「」有...亞達,亞達,亞達

如何調用與OpaquePointer一個DSP功能?

+0

顯示您的代碼。 – Alexander

+0

我通過從 –

+1

遷移頁面請注意,你真的不應該使用'vIsamax',只存在於傳統支持15個不同的變化去了。您應該使用'cblas_isamax'或'vDSP_maxmgvi'代替(這些是速度更快,也可以像iOS的新平臺,但'vIsamax'是OS X只是 - 他們也有更準確的文檔,因爲他們正在積極開發)。 –

回答

1

vIsamaxvFloat又名float4元素作爲參數的向量。 (每個float4保持4個浮點數。) C定義

int32_t vIsamax(int32_t count, const vFloat *x); 

其中被映射到快速作爲

public func vIsamax(_ count: Int32, _ x: UnsafePointer<vFloat>) -> Int32 

代替

public func vIsamax(_ count: Int32, _ x: OpaquePointer) -> 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 
+0

啊,十分感謝,這樣的文件是錯誤的。 –