Есть ли способ завершить ядро ​​на AMD GPU с помощью OpenCL? - PullRequest
0 голосов
/ 30 октября 2018

Недавно я написал программу OpenCL для использования AMD GPU. Однако, поскольку я новичок в этом, некоторые проблемы, которые я не могу обнаружить непосредственно, приведут к зависанию запущенного ядра, и clinfo также ничего не отобразит в этом состоянии. Есть ли способ убить работающее ядро ​​на AMD GPU? Каждый раз, когда ядро ​​мертво, перезагрузка - это то, от чего я зависю, чтобы исправить это сейчас.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Одна вещь, которую я знаю, может повесить некоторые графические процессоры AMD, это иметь барьер, который выполняется только некоторыми рабочими элементами рабочей группы. Обратите внимание, что это не ошибка в графическом процессоре, спецификация OpenCL явно говорит это о барьере ():

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

То есть все или все рабочие элементы не должны сталкиваться с барьером. Если только некоторые из них, ваша программа может зависнуть на GPU. Поэтому я бы проверил код OpenCL на такие вещи:

if (localmem[i] > 0) {
   barrier(CLK_LOCAL_MEM_FENCE);
}

Вы также можете попробовать использовать Oclgrind в своем коде, это эмулятор OpenCL GPU, который полезен для поиска проблем в коде OpenCL.

0 голосов
/ 30 октября 2018

Не существует стандартного способа остановить ядро, которое начало выполняться. Вы должны написать свои ядра так, чтобы они предсказуемо останавливались - то есть не используйте бесконечные циклы, вместо этого просто несколько раз ставьте ядра в ядро ​​с хоста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...