Мне было любопытно, как GPU выполняет одно и то же ядро несколько раз.
У меня есть ядро, которое ставится в очередь сотни (возможно, тысячи) раз подряд, и с помощью AMD App Profiler я заметил, что оно будет очень быстро выполнять кластеры ядер, а затем, как по маслу, время от времени ядро будет " повесить "(т. е. принимать на порядки дольше, чтобы выполнить). Я думаю, что каждое 64-е ядро зависает.
Это странно, потому что каждый раз через ядро выполняет одни и те же операции с одинаковыми локальными и глобальными размерами. Я даже повторно использую те же буферы.
Есть ли что-то в модели исполнения, которую мне не хватает (возможно, другие программы / ОС, обращающиеся к графическому процессору или частота синхронизации памяти графического процессора). Я тестирую это на карте ATI HD5650 под Windows 7 (64-разрядная версия) с AMD App SDK 2.5 с выполнением очереди по порядку.
В качестве примечания: если у меня нет каких-либо глобальных обращений к памяти в моем ядре (довольно непрактичная перспектива), профилировщик помещает пробел между быстродействующими ядрами и тем, где раньше были медленно исполняемые ядра, сейчас большой пустой пробел, где не выполняется ни одно из моих ядер.
В качестве дополнительного вопроса, можно ли что-нибудь сделать, чтобы это исправить?