Интерпретация подробного вывода ptxas, часть II - PullRequest
1 голос
/ 16 мая 2019

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

3 голосов
/ 17 мая 2019

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

Да

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

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

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

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

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

Ответы на большинство вопросов здесь .

0 голосов
/ 17 мая 2019

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

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

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

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

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

...