В соответствии с вашими вычислениями графический процессор может содержать гораздо больше блоков, чем может быть резидентным.
Графический процессор загружает на SM столько блоков, сколько может, а остальные ожидают в очереди.Когда блоки заканчивают свою работу на SM и удаляются, они открывают пространство для новых блоков, которые будут выбраны из очереди и сделаны "резидентными".В конце концов, GPU обрабатывает все блоки таким образом.
В этом подходе нет ничего плохого;это типично для программирования на GPU.Это не обязательно означает ухудшение производительности.Тем не менее, один из подходов к настройке ядер для максимальной производительности заключается в выборе количества блоков на основе того, сколько из них может быть «резидентным».Подсчет того, сколько человек может быть резидентом, если все сделано правильно, является более сложным, чем то, что вы наметили.Требуется анализ занятости.CUDA предоставляет API заполнения для выполнения этого анализа во время выполнения.
Этот подход также потребует разработки ядра, которое может выполнять работу с сеткой произвольного или фиксированного размера, а не с сеткойРазмер выбирается в зависимости от размера проблемы.Одним из типичных подходов для этого является цикл с шагом сетки .
Если вы комбинируете структуру ядра, такую как цикл с шагом сетки, с выбором блоков во время выполнения на основе анализа занятости, то выможете выполнять свою работу только с теми блоками, которые «резидентны» на GPU;никто не должен быть в очереди, ожидая.Это может иметь или не иметь каких-либо ощутимых преимуществ в производительности.Вы наверняка узнаете только по контрольным показателям.
Я предлагаю прочитать обе статьи, на которые я ссылаюсь, прежде чем задавать дополнительные вопросы.В теге cuda
также есть много вопросов, обсуждающих понятия, содержащиеся в этом ответе.