Интерпретация выходных данных --ptxas-options=-v
Я пытаюсь понять использование ресурсов для каждого из моих потоков CUDA для рукописного ядра.
Я собрал свой kernel.cu
подать в kernel.o
файл с nvcc -arch=sm_20 -ptxas-options=-v
и я получил следующий вывод
ptxas info : Compiling entry function '_Z12searchkernel6octreePidiPdS1_S1_' for 'sm_20'
ptxas info : Function properties for _Z12searchkernel6octreePidiPdS1_S1_
72 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info : Used 46 registers, 176 bytes cmem[0], 16 bytes cmem[14]
Глядя на вывод выше, правильно ли сказать, что
- каждый поток CUDA использует 46 регистров?
- нет разливов регистров в локальную память?
У меня также есть некоторые проблемы с пониманием результатов.
Мое ядро вызывает много
__device__
функции. IS 72 байта общая сумма памяти для кадров стека__global__
а также__device__
функции?В чем разница между
0 byte spill stores
а также0 bytes spill loads
Почему информация для
cmem
(что я предполагаю, это постоянная память) повторяется дважды с разными цифрами? В ядре я не использую постоянную память. Означает ли это, что компилятор под капотом скажет графическому процессору использовать некоторую постоянную память?
1 ответ
- Каждый поток CUDA использует 46 регистров? Да исправить
- Нет регистров разлива в локальную память? Да исправить
- 72 байта - общая сумма памяти для кадров стека
__global__
а также__device__
функции? Да исправить - В чем разница между хранилищами разлива 0 байт и разливами 0 байт?
- Справедливый вопрос, нагрузки могут быть больше, чем хранилища, так как вы можете пролить вычисленное значение, загрузить его один раз, выбросить его (т.е. сохранить что-то еще в этот регистр), а затем загрузить его снова (т.е. повторно использовать). Обновление: обратите внимание также, что количество разливов / хранилищ разлива основано на статическом анализе, как описано @njuffa в комментариях ниже.
- Почему информация для cmem (которая, как я предполагаю, является постоянной памятью) повторяется дважды с разными цифрами? В ядре я не использую постоянную память. Означает ли это, что компилятор под капотом скажет графическому процессору использовать некоторую постоянную память?
- Постоянная память используется для нескольких целей, включая
__constant__
переменные и аргументы ядра, используются разные "банки", которые начинают немного детализироваться, но при условии, что вы используете менее 64 КБ для__constant__
переменные и менее 4 КБ для аргументов ядра вы будете в порядке.
- Постоянная память используется для нескольких целей, включая