Этот вопрос является продолжением раздела Интерпретация подробного вывода ptxas, часть I .
Когда мы компилируем файл ядра .ptx
с помощью ptxas -v
или компилируем его из файла .cu
с помощью -ptxas-options=-v
, мы получаем несколько строк вывода, например:
ptxas info : Compiling entry function 'searchkernel(octree, int*, double, int, double*, double*, double*)' for 'sm_20'
ptxas info : Function properties for searchkernel(octree, int*, double, int, double*, double*, double*)
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]
(тот же пример, что и в вопросе, связанном с, но с расшифровкой имени)
Этот вопрос касается последней строки. Еще несколько примеров из других ядер:
ptxas info : Used 19 registers, 336 bytes cmem[0], 4 bytes cmem[2]
...
ptxas info : Used 19 registers, 336 bytes cmem[0]
...
ptxas info : Used 6 registers, 16 bytes smem, 328 bytes cmem[0]
Как мы интерпретируем информацию в этой строке, кроме количества используемых регистров? Конкретно:
- Является ли
cmem
сокращением от постоянной памяти? - Почему существуют разные категории
cmem
, то естьcmem[0]
,cmem[2]
,cmem[14]
? smem
, вероятно, означаетshared memory
; это только статическая общая память?- При каких условиях каждый вид записи появляется в этой строке?
cmem
относится к постоянной памяти. Различные категории (банки) описаны здесь. Я не вижуsmem
нигде в этом вопросе или в связанном вопросе, но он не может ссылаться на динамическую общую память, поскольку она неизвестна (по размеру) во время компиляции. - person Robert Crovella   schedule 16.05.2019