Swift 中的向量 SIMD 类型

Posted

技术标签:

【中文标题】Swift 中的向量 SIMD 类型【英文标题】:Vector SIMD types in Swift 【发布时间】:2014-10-31 23:33:43 【问题描述】:

我想知道是否可以在 Swift 中使用 <simd/simd.h> 中定义的 SIMD 类型(例如 vector_float3)。我似乎想不出办法。

谢谢!

【问题讨论】:

虽然它不能完全替代真正的 SIMD 库,但 GLKit 具有可用作通用向量和矩阵的通用数学例程。 【参考方案1】:

请注意这个问题,以便它是最新的 - SIMD 向量已在 WWDC '15 上为 Swift 2.0 宣布:

SIMD 支持:在 Swift 中导入和使用 Clang 扩展向量,支持许多图形和其他 可在 Swift 中使用的低级数字 API(例如 simd.h)。

所以从现在开始的答案——是的,有可能。

【讨论】:

知道您是如何导入它的 - 除了您在上面复制的那个摘录之外,我在网上找不到任何东西。据我所知,它不是自动导入的。谢谢。 只需导入 simd.h。没有很多可用的外部文档,但标题有足够的信息来查看可用的内容。【参考方案2】:

目前看来不行。不过,他们可能会在以后的版本中添加它。 https://groups.google.com/forum/#!topic/swift-language/slwe62yKsWo

【讨论】:

如果对您有用,请报告错误以请求此功能!【参考方案3】:

Swift 5 原生支持SIMD vector types。以下 Playground 示例代码显示了使用 SIMD4 的逐元素乘法:

let vector1 = SIMD4(1, 2, 3, 4)
let vector2: SIMD4 = [2, 3, 4, 5]

let vector3 = vector1 &* vector2
print(vector3) // prints: SIMD4<Int>(2, 6, 12, 20)

来源:Swift Evolution - SIMD Vectors proposal

【讨论】:

【参考方案4】:

在这里查看我的仓库:https://github.com/noxytrux/SwiftGeom 我为此构建了整个库。所以你现在可以在你的 swift 项目中使用 vec2、vec3 等。

【讨论】:

以上是关于Swift 中的向量 SIMD 类型的主要内容,如果未能解决你的问题,请参考以下文章

将 simd_quatf 转换为 SCNQuaternion

向量与 SIMD 的点积

SIMD 零向量测试

向量体系结构----SIMD指令集扩展和GPU

Swift SIMD 或 Accelerate Sum UInt32

使用 SIMD 对半字节的去交错向量