![]() |
1
12
类型
这些类型基本上都是等价的,并且都具有相同的大小和对齐特征,因此您可以跨语言使用它们。这实际上是simd框架的设计目标之一。 既然你没问我,我就改天再谈包装好的。
[1] 金属是一种不寻常的情况,因为它定义了
|
![]() |
2
2
如果你能避免的话,
不要
使用单个SIMD向量表示单个几何体
当您有许多 相同的 每一个SIMD向量中的东西,因为它们实际上存储在16字节或32字节的向量寄存器中,其中两个向量之间的“垂直”操作很便宜(压缩加法或乘法),但“水平”操作大多只能通过洗牌+垂直操作来完成。
例如4的向量
见 https://stackoverflow.com/tags/sse/info ,尤其是这些幻灯片: SIMD at Insomniac Games (GDC 2015) 有关规划数据布局和程序设计以并行执行许多类似操作而不是尝试加速单个操作的详细信息。 这条规则的一个例外是 只有 加/减来转换坐标,因为即使使用结构数组,这仍然是一个纯粹的垂直操作。因此,对于基于16字节向量的CPU短向量SIMD来说是很好的。(例如,一个向量中的第二个元素只与另一个向量中的第二个元素交互,因此不需要洗牌。) GPU SIMD是不同的,我认为交叉数据没有问题。我不是GPU专家。 (我不使用Objective C或Metal,所以我无法帮助您了解它们的类型名的详细信息,这正是底层CPU硬件的擅长之处。对于x86sse/AVX、ARM NEON/AArch64 SIMD或PowerPC Altivec,这基本上是相同的。水平操作速度较慢。) |
![]() |
Martin sku · 在目标C中打印时间 3 年前 |
![]() |
Vinod prajapat · 如何更新数组的最后一个元素? 3 年前 |
![]() |
subin272 · 修复iOS中的多个按钮单击事件? 7 年前 |
![]() |
James Chan · 如何使用锁定/解锁? 7 年前 |
![]() |
Josh F. · NSBundle mainBundle返回零 7 年前 |