Регистры и разделяемая память в зависимости от возможностей компиляции? - PullRequest
2 голосов
/ 18 мая 2011

Привет, когда я компилирую с nvcc -arch=sm_13, я получаю:

ptxas info    : Used 29 registers, 28+16 bytes smem, 7200 bytes cmem[0], 8 bytes cmem[1] 

когда я использую nvcc -arch=sm_20 я получаю:

ptxas info    : Used 34 registers, 60 bytes cmem[0], 7200 bytes cmem[2], 4 bytes cmem[16] 

Я думал, что все параметры ядра передаются в общую память, но для sm_20 это не так ...?! Возможно, они также передаются в регистры? Глава моей функции выглядит следующим образом:

__global__ void func(double *, double , double, int)

Спасибо, пока!

Ответы [ 2 ]

4 голосов
/ 18 мая 2011

Как утверждает @talonmies, различия в разделяемой памяти связаны с тем, что устройства SM 2.x передают аргументы ядра через постоянную, а не разделяемую память.

Однако одно из основных различий в использовании регистров в устройствах SM 2.xДело в том, что в то время как устройства SM 1.x имеют выделенные регистры адресов для инструкций загрузки и хранения, SM 2.x использует регистры общего назначения для адресов.Это имеет тенденцию увеличивать давление регистра на SM 2.x.К счастью, файл регистра также в 2 раза больше на GF100 (SM 2.0) против GT200 (SM 1.3).

3 голосов
/ 18 мая 2011

В устройствах с вычислительной возможностью 2.x аргументы ядра хранятся в постоянной памяти.Разница в регистре, вероятно, связана с различиями в коде, сгенерированном для функций математической библиотеки между версиями.Есть ли в ядре такие вещи, как трансцендентные функции или sqrt?

...