Поддерживаются ли SIMD группы в Metal на iOS? - PullRequest
1 голос
/ 10 января 2020

Я не могу понять, поддерживаются ли группы SIMD в iOS.

Спецификация языка затенения металла указывает на момент написания на стр. 59, раздел 4.4 .1:

iOS: нет поддержки SIMD-групп.

Однако в таблице 6.11. «Функции SIMD-группы в стандартной библиотеке Metal». некоторые функции SIMD-группы перечислены как поддерживаемые в iOS. Это один из тех, которые я хотел бы использовать:

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 во время выполнения обработать sh на iPhone 7 и 8 (но не 11):

Компилятор ошибка XPC_ERROR_CONNECTION_INTERRUPTED

Все устройства, протестированные с iOS 13.3. Металл языковая версия была 2.2. Xcode версии 11.3.

1 Ответ

1 голос
/ 10 января 2020

Я думаю, что утверждение о том, что SIMD-группы не поддерживаются на iOS, является либо неточным, либо недостаточно точным c.

Если вы обращаетесь к таблицам набора функций из металла для Metal 2.2 вы заметите, что «операции перестановки в SIMD-области» (simd_broadcast, simd_shuffle, simd_shuffle_up, et c.) поддерживаются на MTLGPUFamilyApple6, который включает устройства с процессорами A13. Следовательно, почему это работает на iPhone 11.

Тот факт, что использование этого атрибута на неподдерживаемых устройствах вызывает компилятор cra sh, является ошибкой, и я рекомендую вам file feedback .

...