Cuda регистрируется на поток

Как я понимаю, для устройств с возможностями вычислений 2.xs ограничение в 63 регистра на поток. Знаете ли вы, какой предел регистров на поток для устройств с вычислительной возможностью 1.3?

У меня есть большое ядро, которое ям тестирование на GTX260. Я'я уверен, что яЯ использую много регистров, так как ядро очень сложное, и мне нужно много локальных переменных. Согласно профайлеру Cuda мой регистр использует 63 (статический Smem 68, хотя яЯ не уверен, что это значит, и динамический Smem равен 0), хотя яЯ уверен, что у меня более 63 локальных переменных, поэтому я подумал, что компилятор повторно использует регистры или помещает их в локальную память.

Теперь я думал, что устройства с вычислительной способностью 1.3 имеют более высокий предел количества регистров на поток, чем устройства 2.x. Я предположил, что компилятор выбирал предел 63, потому что яиспользуя блоки из 256 потоков, в этом случае 256 * 63 - это 16128, а 256 * 64 - 16384, что является предельным количеством регистров для SM этого устройства. Поэтому я предположил, что, если я уменьшу количество потоков в блоке, я смогу увеличить количество используемых регистров. Итак, я запустил ядро с блоками из 196 потоков. Но опять же профилировщик показывает 63 регистра, даже если 63 * 192 равен 12096, а 64 * 192 равен 12288, что находится в пределах предела 16384 для SM.

Итак, есть идеи, почему компилятор ограничивает себя до 63 регистров? Может ли это быть все из-за повторного использования регистров или все еще разлит регистры?

Ответы на вопрос(1)

Ваш ответ на вопрос