Я использую CUDA в течение нескольких недель, но у меня есть некоторые сомнения относительно распределения блоков / warps / thread.
Прежде всего, я хотел бы понять, правильно ли я понял эти факты:
В GPU есть несколько потоковых процессоров, которые могут работать параллельно.
Каждый SM имеет блоки, а каждый блок имеет собственную разделяемую память.
Внутри блоков у нас есть ядра CUDA.
И внутри каждого SM у нас также есть планировщики Деформации.
Каждая основа состоит из 32 нитей. и деформации внутри блока, работающего в серийном режиме.
Это означает, что одна Деформация должна закончиться, а затем может начаться следующая Деформация.
- Все блоки в графическом процессоре не могут работать параллельно одновременно. а количество параллельных блоков ограничено. (Но я не знаю, как и сколько)
Теперь мой главный вопрос:
Предположим, у нас есть 2 разные ситуации:
Сначала у нас 32 потока на блок (1 деформация) и 16384 объекта (или операнда).
Во-вторых, у нас есть 64 нити на блок (2 деформации) с одинаковым количеством объектов.
Почему первый занимает больше времени для запуска программы? (Другие условия такие же, и даже если у нас 128 потоков на блок, это быстрее, чем эти два)
Заранее спасибо