Могу ли я получить объем выделенной динамической разделяемой памяти из ядра?
На стороне хоста я могу сохранить объем динамической разделяемой памяти, с которой я собираюсь запустить ядро, и использовать его. Я даже могу передать это в качестве аргумента ядру. Но - есть ли способ получить его напрямую из кода устройства, без помощи со стороны хоста? То есть, должен ли код для ядра определять, как оно работает, сколько динамической разделяемой памяти у него есть?
1 ответ
Да, есть специальный регистр, содержащий это значение. названный %dynamic_smem_size
, Вы можете получить значение этого регистра в своем коде CUDA C/C++, обернув некоторый встроенный PTX функцией получения:
__device__ unsigned dynamic_smem_size ()
{
unsigned ret;
asm volatile ("mov.u32 %0, %dynamic_smem_size;" : "=r"(ret));
return ret;
}
Вы также можете получить общий размер выделенной разделяемой памяти (статическая + динамическая) из регистра. %total_smem_size
,