Ядро CUDA связано инструкциями и задержкой памяти, но обеспечивает высокую занятость - PullRequest
0 голосов
/ 03 августа 2020

Я изучаю простое ядро ​​фильтра, которое считывает область 7x7 из изображения и вычисляет среднее значение. Перед каждым чтением есть несколько операторов if для проверки границ памяти. Я запутался в некоторых анализах, которые я видел на NVVP.

Я использовал GTX680 с размером блока 128x1. Когда входное изображение имеет размер 4096 на 4096, NVVP сообщает, что производительность ядра ограничена инструкциями и задержкой памяти. Первое, на что я обращаю внимание, - это занятость: поскольку ядро ​​использует 32 регистра на поток и не использует smem, теоретическая занятость составляет 100%. Достигнутая заполняемость также неплохая - 93%. Насколько я понимаю по результату занятости, активных деформаций достаточно. Итак, второе, на что я обращаю внимание, это то, как из этих активных варпов могут быть получены подходящие варпы. Nvprof сообщает мне, что eligible_warps_per_cycle - это 7,27. Насколько я понимаю, это говорит о том, что существует достаточно подходящих варпов для выпуска.

Вот некоторые другие показатели, которые у меня есть:

issue_slot_utilization 35.3%
ldst_fu_utilization Mid 6
alu_fu_utilization Mid 6
cf_fu_utilization Low 1

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

...