Могу ли я получить объем выделенной динамической разделяемой памяти из ядра?

#cuda #gpu-shared-memory

#cuda #gpu-shared-memory

Вопрос:

На стороне хоста я могу сохранить объем динамической общей памяти, с которой я собираюсь запустить ядро, и использовать его. Я даже могу передать это в качестве аргумента ядру. Но — есть ли способ получить его непосредственно из кода устройства, без помощи со стороны хоста? То есть, должен ли код для ядра определять во время выполнения, сколько динамической общей памяти у него есть?

Ответ №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 .

Комментарии:

1. @talonmies: Да, спасибо за это. По крайней мере, я начинаю полагаться на вас только при незначительных изменениях…