Интерпретация подробного вывода ptxas, часть II

Этот вопрос является продолжением Интерпретации подробного вывода 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]

(тот же пример, что и в связанном вопросе; но с именем demangling)

Этот вопрос касается последней строки. Еще несколько примеров из других ядер:

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; это только статическая разделяемая память?
  • При каких условиях каждый вид записи появляется в этой строке?

2 ответа

Cmem - это сокращение от постоянной памяти?

да

Почему существуют разные категории cmem, то есть cmem[0], cmem[2], cmem[14]?

Они представляют разные банки постоянной памяти. cmem[0] является зарезервированным банком для аргументов ядра и постоянных значений статического размера.

SEMEM, вероятно, обозначает общую память; это только статическая разделяемая память?

Это так и как могло быть иначе.

При каких условиях каждый вид записи появляется в этой строке?

Ответ здесь в основном.

Собрано и переформатировано...

Ресурсы на последней информационной строке ptxas:

  • registers - в файле реестра на каждом СМ (многопроцессорном)
  • gmem - Глобальная память
  • smem - Статическая общая память
  • cmem[N] - Банк постоянной памяти с индексом N.
    • cmem[0] - Банк зарезервирован для аргумента ядра и постоянных значений статического размера
    • cmem[2] -???
    • cmem[4] -???
    • cmem[14] -???

Каждая из этих категорий будет показана, если ядро ​​использует такую ​​память (регистры - вероятно, всегда отображаются); поэтому неудивительно, что все примеры показывают cmem[0] использование.

Вы можете прочитать немного больше об иерархии памяти CUDA в Разделе 2.3 Руководства по программированию и ссылках там. Также есть этот пост в блоге о статической и динамической разделяемой памяти.

Другие вопросы по тегам