Ядра CUDA не совсем то, что можно назвать ядром на классическом процессоре. Действительно, их следует рассматривать как не более чем ALU (арифметические и логические единицы), которые просто способны вычислять готовые операции.
Возможно, вы знаете, что потоки обрабатываются за перекосов (группы из 32 потоков) внутри определенных вами блоков. Когда ваши блоки отправляются на разные SM (потоковые мультипроцессоры, они являются фактическими ядрами графического процессора), каждый SM планирует деформации внутри блока для оптимизации времени вычислений с точки зрения времени доступа к памяти, необходимого для получить входные данные потоков.
Проблема заключается в том, что потоки всегда обрабатываются через свою деформацию, поэтому, если у вас есть только один поток на блок, SM, на котором он работает, не сможет планировать деформации, и вы не сможете воспользоваться несколькими Доступны ядра CUDA. Ваши ядра CUDA будут ожидать обработки данных, поскольку ядра CUDA вычисляют намного быстрее , чем данные извлекаются из памяти.
Наличие большого количества блоков с несколькими потоками - это не то, что ожидает графический процессор. В этом случае вы сталкиваетесь с блоком на ограничение SM (это число зависит от вашего устройства), который заставляет ваш графический процессор тратить много времени на установку блоков на SM, а затем удалять их для обработки следующих блоков. , Вы должны увеличить количество потоков в ваших блоках вместо количества блоков в вашем приложении.