【发布时间】:2025-12-27 10:30:11
【问题描述】:
我无法理解 Swift 中 simd 模块中有关 simd_packed 向量的内容。我用的是float4的例子,希望有人能帮忙。
我的理解是simd_float4 是SIMD4< Float> 和MemoryLayout<SIMD4< Float>>.alignment = 16(字节)的typealias,因此是MemoryLayout<simd_float4>.alignment = 16。有道理。
但下面的我不明白:simd_packed_float4 也是SIMD4<Float> 的typealias。所以MemoryLayout<simd_packed_float4>.alignment = 16。
那么,simd_packed_float4 中的“打包”有什么意义呢?文档所说的“宽松对齐”在哪里?
在金属着色器语言规范(2.4 版)中(
https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf)
在表 2.4 (p.28) 中,它说packed_float4 的对齐方式是 4(这也是标量类型浮点数的对齐方式),所以这是一个“宽松对齐方式”(与 16 相比)。这本身是有道理的,但是我如何将其与上述内容相协调(simd_packed_float4 是 SIMD4<Float> 和 MemoryLayout<simd_packed_float4> = 16 的类型别名)?
【问题讨论】:
标签: ios swift metal simd-library