首页 > 解决方案 > iOS 上的 Metal 是否支持 SIMD 组?

问题描述

我不知道 iOS 是否支持 SIMD 组。

Metal Shading Language Specification在撰写第 59 页第 4.4.1 节时指出:

iOS:不支持 SIMD 组。

但是,在表 6.11.“Metal 标准库中的 SIMD 组函数”中,列出了一些在 iOS 上支持的 SIMD 组函数。这是我想使用的其中之一:

T simd_shuffle_down(T data, ushort delta)

macOS:从 Metal 2.0 开始。

iOS:从 Metal 2.2 开始。

类似地,表 5.7.“内核函数输入参数的属性”指出一些属性是可用的:

threads_per_simdgroup

macOS:从 Metal 2.0 开始。

iOS:从 Metal 2.2 开始。

因此,从文档中不清楚是否应该支持任何 SIMD 组功能。threads_per_simdgroup在计算内核中使用带有属性的函数参数当前会导致运行时 Metal 编译器在 iPhone 7 和 8(但不是 11)上崩溃:

编译器因 XPC_ERROR_CONNECTION_INTERRUPTED 而失败

使用 iOS 13.3 测试的所有设备。金属语言版本是 2.2。Xcode 版本 11.3。

标签: iosgpgpumetal

解决方案


我认为 iOS 不支持 SIMD 组的说法要么不准确,要么不够具体。

如果您查阅 Metal 2.2 的Metal Feature Set Tables,您会注意到“SIMD 范围的置换操作”(、、、simd_broadcastsimd_shufflesimd_shuffle_up受支持MTLGPUFamilyApple6,其中包括具有 A13 处理器的设备。因此,为什么这适用于 iPhone 11。

在不受支持的设备上使用此属性会导致编译器崩溃这一事实是一个错误,我建议您提交反馈


推荐阅读