Как назначаются регистры при компиляции CUDA

Говорят, что количество регистров на ядро ​​важно для оптимизации CUDA, и верхняя граница этого числа может быть установлена ​​с помощью "-maxrregcount=N" в nvcc. Я не мог этого понять, потому что думал, что количество регистров можно просто определить, подсчитав локальные переменные (и, возможно, переданные параметры) в ядре. Я знаю, что ошибаюсь, потому что отчет от "nvcc --ptxas-options=-v" намного превосходит то, что я подсчитал, как я думал. Может ли кто-нибудь немного порассуждать об этом?


person Hailiang Zhang    schedule 05.02.2013    source источник


Ответы (1)


Максимальное количество регистров на поток в современных графических процессорах устройств с Compute Capability 2.1 составляет 63 регистра. Каждый потоковый мультипроцессор содержит ограниченное количество регистров, распределенных между потоками, выполняемыми в threadblock. Если у вас небольшое количество потоков на блок, вы можете быть почти уверены, что потоки получат максимальное количество регистров, но если потоков много, они получат меньшее количество регистров (все зависит от общего объема используемой памяти). по нитям и нуждается в доработке для каждого приложения).

Теперь все переменные, которые нельзя хранить в регистрах из-за их отсутствия, попадают в локальную память, которая является частью глобальной памяти устройства и обеспечивает большую латентность памяти в отличие от регистров. Это называется сбросом регистров. Подробнее об этом можно прочитать здесь http://www.ece.umn.edu/~wxiao/ee5940/lecture8-2.pdf

Очень важно стараться хранить все переменные в регистрах. Влияние сброса реестра часто недооценивается новыми разработчиками Cuda. Я сделал несколько тестов, в которых я искусственно удвоил объем памяти, используемой потоками, и вызвал сброс регистров без каких-либо других вычислительных затрат, что увеличило время вычислений в 5 раз! В небольших CUDA-приложениях достаточно регистров. Вы можете узнать, сколько переменных помещается в локальную память, следуя инструкции в pdf выше.

person rank1    schedule 07.05.2013