Преднамеренный бесконечный цикл в функции Metal shader не блокирует графический процессор

#gpu #metal

#графический процессор #Металлические

Вопрос:

Я создаю инструмент командной строки с использованием Metal. Я намеренно вставил for(;;) в свою функцию ядра, и я ожидаю увидеть, что дисплей Mac будет зависать, пока timeout этого не произойдет. Я попробовал в каком-то металлическом приложении с MTLView , и машина зависла.

Сообщение об ошибке

 Execution of the command buffer was aborted due to an error during execution.
Caused GPU Timeout Error (IOAF code 2)
  

Но этого не происходит с инструментом командной строки, который я создаю. Я не знаю, почему это не блокирует графический процессор. Я думал, что все мои потоки будут продолжать использовать ресурс GPU, и, следовательно, дисплей зависнет.

Почему этого не происходит?

Комментарии:

1. Какой Mac / графический процессор вы используете и какую версию операционной системы используете?

2. Какой код находится в цикле? Возможно, это было оптимизировано.

3. @ldoogy Я использую Radeon 460, Mojave

4. @KenThomases Просто для (;;), но это работает для примера, такого как Hello Compute, это приведет к зависанию компьютера

5. И команда, которую вы запускаете, является командой вычисления или командой рендеринга? Кроме того, инструменту командной строки требуется некоторое время для завершения (чтобы увидеть, оптимизируется ли ваш цикл, как предлагает @KenThomases?)